UltraSonic Sensor + Simulino



Vamos simular o UltraSonic Sensor?










Olá, seja bem vindo.

 Hoje irei demonstrar como simular um sensor ultrasônico (UltraSonic Sensor), aquele mesmo que serve para medir distância entre objetos, ou mesmo usado em robôs para que os mesmos não venham à colidir com algum obstáculo, dentre tantas outras aplicações.

Segue imagem do sensor abaixo:



Agora temos nosso sensor simulador no Proteus:




Para quem não conhece ainda este sensor, é bem fácil de entender o seu funcionamento.

Conforme diagrama mais adiante, o que acontece é que este sensor possui um microcontrolador responsável por gerar os pulsos ultrassônicos  que serão emitidos através de um destes transdutores instalados no shield do sensor. E após a emissão deste pulso, ele fica aguardando o retorno do mesmo, para que seja interpretada a distância que este pulso percorreu até o objeto.
Dependendo do tempo entre o pulso emitido e o pulso recebido pelo outro transdutor, o microcontrolador do sensor vai gerar outro pulso chamado de ECHO para a placa de controle.







O segredo está na duração do pulso que o sensor gera para a placa de controle.
Como alguns sensores tem características muito semelhantes, resolvi criar um programa para um microcontrolador (PIC nesta primeira versão) ,a simulação deste pulso de ECHO.




Explicando um pouco sobre  o funcionamento, o sensor Ultrassônico fica aguardando um pulso de Trigger (gatilho) para simular a recepção do pulso e então envia um pulso de ECHO para a placa de controle por um período de tempo. A placa de controle é responsável por interpretar a distância. Então para isto ela efetua a medição da duração do pulso de ECHO, que entra na seguinte fórmula:

Distância em cm = ( Duração do Pulso em microssegundos) / 58

ou

Distância em polegadas = (Duração do Pulso em microssegundos) / 148

Pegando o exemplo da figura acima, vemos que o pulso teve duração de 4,93ms, ou seja, esse pulso corresponde a 4930us. 

Para termos o valor em centímetros, devemos dividir este valor por 58, resultando em: 85 cm

Então alguém me pergunta: "Mas no diagrama não está 84cm?" Responderei: "Sim meu caro Sherlock Holmes!rs", o que acontece é que esta pequena diferença é devido aos erros de aproximação nos cálculos e também pelo fato de que para a medição do pulso de entrada no microcontrolador na placa de controle, existe uma precisão agregada à configuração dos timers internos e também ao sistema de clock do mesmo.
Examinando o programa de exemplo, vemos a seguinte chamada de função:


duration = pulseIn(echoPin, HIGH);

Sendo que para saber qual será o erro agregado ao valor dado pela função "pulseIn", devemos abrir a biblioteca do mesmo e estudar a configuração de timer e clock.



Vamos simular? 




Funcionamento do Sensor Simulado:

Para facilitar o uso deste simulador no Proteus, e para que possamos ajustar a distância do nosso objeto simulado, fiz nesta primeira versão a referência como sendo um valor de tensão ou sinal analógico diretamente acoplado em um dos pinos do microcontrolador PIC16.

Basicamente o que ele faz é transformar a referência em volts para um valor de distância, gerando um pulso de ECHO proporcional na saída. Sendo que para ele emitir esse pulso de ECHO é necessário manter o pino de Trigger em nível alto por pelo menos 10us (microssegundos), conforme sensores comuns.


Para sabermos o valor de tensão que deve ser aplicado, existe uma pequena fórmula:

Valor de tensão em Volts = ( Valor da distância em cm ) / 225,76

Por exemplo, queremos simular uma distância de 5m (metros), que corresponde a 500cm (centímetros).
Para ter-se o valor de tensão, faremos: 500 / 225,76 = 2,21 V (volts)

Ou seja, tem-se que colocar o valor de 2,21V na entrada do pino RA0 (pino 2) do microcontrolador do sensor.
O interessante é que como é um valor analógico, fica fácil de criar diversas configurações de entrada, para simular por exemplo um objeto se afastando ou se aproximando da sua placa de controle ou robô. Que é o mais desejado.

Então, após configurado o valor de tensão para a distância do objeto, basta carregar no microcontrolador PIC16F1936 do sensor o arquivo UltraSonicSensorPIC16F.HEX que está dentro da pasta Source do projeto.
E na placa do simulino, pode ser utilizado o programa de exemplo incluído no projeto, devendo o mesmo ser compilado, ou então utilizado o arquivo UltraSonic_Shield.cpp.hex. Devendo o mesmo ser carregado no microcontrolador ATmega do Simulino.

Logo estarei postando o vídeo tutorial.

Até o próximo post.






8 comentários:

  1. Parabéns pelo post. Muito bom!!

    Se tiver algum sobre a continuação da simulação, ou seja, a aplicação e calibração deste sensor, posta aí também.. valeu!

    ResponderExcluir
  2. Mano como onde vc arrumou esta fórmula para transformar tensão em volts para centímetros??

    ResponderExcluir
    Respostas
    1. Olá.
      Esta fórmula, que é: "Tensao(v)=Distancia(cm)/225,76" ou "Distancia(cm)=Tensao(v)*225,76" surgiu de uma aproximação linear do comportamento do sensor simulado.
      Ou seja, serve apenas para este modelamento (ou componente) do sensor feito para o Proteus. Para o sensor real essa fórmula não se aplica.
      Isso foi feito pois dentro do Proteus queria criar uma forma de inserir os valores de distância que queria simular para o sensor. Ou seja, uma hora gostaria que ele estivesse a 5 metros por exemplo, e depois de 10 segundos ele estivesse próximo de um objeto a uns 10 cm, e quando estivesse perto acionasse um alarme. Se pensarmos somente na distância, como é que iriamos simular ela de uma forma que fosse fácil para entrarmos com os valores? Por isso optei por criar um "conversor tensão x distância", pois tensão já sabemos criá-la de tudo quanto é forma, tempo, frequência, etc... e para moldar a leitura do sensor, tanto para aproximação quanto distânciamento do sensor, fica muito mais versátil.
      Caso queira um detalhamento mais "técnico", esse valor surgiu a partir da sensibilidade do conversor ADC e dos Timers internos usados no modelamento do sensor. Caso ocorra mudança(provavelmente nunca haverá) na biblioteca utilizada, estes valores também "iriam" mudar.
      Espero ter ajudado na dúvida. Abraços.

      Excluir
  3. Vou lhe sugerir uma ideia de tutorial, mas se puder me ajudar agora, com o programa, eu agradeço. SUGIRO um tutorial, em que se poderia configurar a distancia do sensor usando um potenciômetro, podendo visualizar a distancia num LCD. assim, eu não precisaria mexer no programa para mudar a distancia, e apenas no potenciômetro.

    ResponderExcluir
  4. Thank you for this excellent post. I have just started to read this article carefully. Keep up posting these type of post contuniously.
    Leak Detection Switch

    ResponderExcluir
  5. Bom dia, fiz tudo conforme vocês pedem, porem ao tentar simular esse sensor ultrassônico aparece essa mensagem no proteus internal excepition: acces violation in modulo "unknown", alguém sabe me dizer porque esá dando esse erro?

    ResponderExcluir
  6. alguem tem um link de download nao expirado?

    ResponderExcluir