- Materiais requisitados:
- Diagrama de circuito:
- Como o módulo HC-SR04 realmente funciona:
- Medindo a distância entre dois sensores ultrassônicos (HC-SR04):
- Programa para sensor transmissor:
- Programa para sensor receptor:
- Trabalhando:
- Idéia improvisada - calibrar o sensor usando uma distância conhecida:
O sensor ultrassônico (HC-SR04) é comumente usado para encontrar a distância de um objeto de um determinado ponto. Foi muito fácil fazer isso com o Arduino e o código também é muito simples. Mas, neste artigo, vamos tentar algo diferente com esses sensores HC-SR04 populares. Tentaremos calcular a distância entre dois sensores ultrassônicos ou seja, faremos com que um sensor atue como transmissor e o outro sensor atue como receptor. Fazendo isso, podemos rastrear a localização de um transmissor usando muitos receptores ultrassônicos. Esse rastreamento é chamado de triangulação e pode ser usado para robôs de acoplamento automáticos, seguidores de bagagem e outras aplicações semelhantes. Encontrando a distância entre dois sensores dos EUA pode parecer uma tarefa bastante simples, mas enfrentei alguns desafios que são discutidos neste projeto.
A técnica discutida neste artigo não é bastante precisa e pode não ser útil em nenhum sistema real sem modificações. Durante o tempo desta documentação, não encontrei ninguém obtendo resultados tão próximos quanto os meus, então apenas compartilhei minha opinião sobre como fiz isso funcionar para que as pessoas que estão tentando fazer isso não precisem reinventar a roda.
Materiais requisitados:
- Arduino (2Nos) - qualquer modelo
- Módulo HCSR04 (2Nos)
Diagrama de circuito:
Apesar de irmos fazer um sensor US (Ultrassônico) funcionar como transmissor e o outro como receptor é obrigatório conectar todos os quatro pinos dos sensores com o Arduino. Por que deveríamos? Mais sobre isso será discutido mais tarde, mas por agora o diagrama do circuito será o seguinte
Como você pode ver, o diagrama de circuito do transmissor e do receptor são idênticos. Verifique também: Interface do sensor ultrassônico Arduino
Como o módulo HC-SR04 realmente funciona:
Antes de prosseguirmos, vamos entender como funciona o sensor HC-SR04. O diagrama de tempo abaixo nos ajudará a entender o funcionamento.
O sensor tem dois pinos Trigger e Echo que são usados para medir a distância, conforme mostrado no diagrama de tempo. Primeiro, para iniciar a medição, devemos enviar uma onda ultrassônica do transmissor, isso pode ser feito configurando o pino de disparo alto para 10uS. Assim que isso for feito, o pino do transmissor enviará 8 rajadas sônicas de ondas dos EUA. Esta onda dos EUA atingirá um objeto rebatendo e será recebida pelo receptor.
Aqui, o diagrama de tempo mostra que, uma vez que o receptor receba a onda, ele fará o pino Echo ficar alto por um período de tempo que é igual ao tempo gasto para a onda viajar do sensor dos EUA e chegar de volta ao sensor. Este diagrama de tempo não parece ser verdadeiro.
Cobri a parte Tx (transmissor) do meu sensor e verifiquei se o pulso de eco ficou alto e, sim, está alto. Isso significa que o pulso de eco não espera que a onda dos EUA (ultrassônica) seja recebida por ele. Uma vez que ele transmite a onda dos EUA, ele vai alto e permanece alto até que a onda retorne. Portanto, o diagrama de tempo correto deve ser algo como este mostrado abaixo (desculpe por minhas pobres habilidades de escrita)
Fazendo seu HC-SR04 funcionar apenas como Transmissor:
É muito simples fazer um HC-SR04 funcionar apenas como transmissor. Conforme mostrado no diagrama de tempo, você deve declarar o pino Trigger como pino de saída e fazê-lo permanecer alto por 10 microssegundos. Isso iniciará a explosão da onda ultrassônica. Portanto, sempre que quisermos transmitir a onda, só precisamos controlar o pino de disparo do sensor do transmissor, cujo código é fornecido a seguir.
Fazendo seu HC-SR04 funcionar apenas como receptor:
Conforme mostrado no diagrama de tempo, não podemos controlar a elevação do pino Echo, pois está relacionado ao pino de disparo. Portanto, não poderíamos fazer com que o HC-SR04 funcionasse apenas como receptor. Mas podemos usar um hack, apenas cobrindo a parte do transmissor do sensor com fita (como mostrado na imagem abaixo) ou impedir que a onda dos EUA escape fora de seu invólucro do transmissor e o pino de eco não será afetado por esta onda dos EUA.
Agora, para fazer o pino de eco ficar alto, só temos que puxar este pino do gatilho falso para cima por 10 microssegundos. Assim que o sensor do receptor receber a onda dos EUA transmitida pelo sensor do transmissor, o pino de eco ficará baixo.
Medindo a distância entre dois sensores ultrassônicos (HC-SR04):
Até agora entendemos como fazer um sensor funcionar como transmissor e o outro sensor funcionar como receptor. Agora, temos que transmitir a onda ultrassônica do sensor do transmissor e recebê-la com o sensor do receptor e verificar o tempo que a onda leva para viajar do transmissor para o receptor. Mas, infelizmente !, temos um problema aqui e isso não vai funcionar.
O módulo transmissor e o módulo receptor estão distantes e quando o módulo receptor recebe a onda dos EUA do módulo transmissor, ele não saberá quando o transmissor enviou essa onda em particular. Sem saber a hora de início, não podemos calcular o tempo gasto e, portanto, a distância. Para resolver este problema, o pulso de eco do módulo receptor deve ser elevado exatamente quando o módulo transmissor tiver transmitido a onda dos EUA. Em outras palavras, o módulo transmissor e o módulo receptor devem disparar ao mesmo tempo. Isso pode ser alcançado pelo seguinte método.
No diagrama acima, o Tx representa o sensor do transmissor e Rx representa o sensor do receptor. Como mostrado, o sensor do transmissor será feito para transmitir ondas dos EUA em um atraso periódico conhecido, isso é tudo que ele precisa fazer.
No sensor do receptor, temos que fazer com que o pino do gatilho fique alto exatamente durante o momento em que o pino do transmissor fica alto. Então, inicialmente, fazemos aleatoriamente o acionador dos receptores ir para alto, o que permanecerá alto até que o pino de eco seja baixo. Este pino de eco ficará baixo apenas quando receber uma onda dos EUA do transmissor. Assim que ficar baixo, podemos supor que o sensor do transmissor acabou de ser acionado. Agora, com essa suposição, assim que o eco diminuir, podemos esperar pelo atraso conhecido e então acionar o acionamento do receptor. Isso sincronizaria parcialmente o acionador do transmissor e do receptor e, portanto, você pode ler a duração do pulso de eco imediato usando pulseIn () e calcular a distância.
Programa para sensor transmissor:
O programa completo para o módulo transmissor pode ser encontrado no final da página. Ele não faz nada além de acionar o sensor do transmissor em um intervalo periódico.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Para acionar um sensor, temos que fazer o pino de acionamento ficar alto por 10µS. O código para fazer o mesmo é mostrado acima
Programa para sensor receptor:
No sensor receptor, cobrimos o olho do transmissor do sensor para torná-lo fictício, conforme discutido anteriormente. Agora podemos usar a técnica mencionada acima para medir a distância entre dois sensores. O programa completo é fornecido no final desta página. Algumas linhas importantes são explicadas abaixo
Trigger_US (); enquanto (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); duração = pulseIn (echoPin, HIGH);
Inicialmente, acionamos o sensor US usando a função Trigger_US () e depois esperamos até que o pino de eco permaneça alto usando um loop while. Uma vez que fica baixo, esperamos por uma duração pré-determinada, esta duração deve ser algo entre 10 a 30 microssegundos, que pode ser determinada usando tentativa e erro (ou você pode usar a ideia improvisada fornecida abaixo). Após esse retardo, acione o US novamente usando a mesma função e, em seguida, use a função pulseIn () para calcular a duração da onda.
Agora, usando as mesmas fórmulas antigas, podemos calcular a distância conforme abaixo
distância = duração * 0,034;
Trabalhando:
Faça as conexões conforme explicado no programa. Cubra a parte Tx do sensor do receptor conforme mostrado na imagem. Em seguida, carregue o código do transmissor e o código do receptor que são fornecidos abaixo para o transmissor e o receptor Arduino, respectivamente. Abra o monitor serial do módulo receptor e você deverá observar a distância entre dois módulos sendo exibida conforme mostrado no vídeo abaixo.
Observação: esse método é apenas uma ideologia e pode não ser preciso ou satisfatório. No entanto, você pode tentar a ideia improvisada abaixo para obter melhores resultados.
Idéia improvisada - calibrar o sensor usando uma distância conhecida:
O método que foi explicado até agora estranhamente parece ser satisfatório, mas foi suficiente para o meu projeto. No entanto, também gostaria de compartilhar as desvantagens desse método e uma maneira de superá-las. Uma grande desvantagem deste método é que assumimos que o pino Echo do receptor cai imediatamente após o sensor do transmissor ter transmitido a onda dos EUA, o que não é verdade, pois a onda levará algum tempo para viajar do transmissor ao receptor. Conseqüentemente, o gatilho do transmissor e o gatilho do receptor não estarão em perfeita sincronia.
Para superar isso, podemos calibrar o sensor usando uma distância conhecida inicialmente. Se a distância for conhecida, saberemos o tempo que a onda dos EUA leva para chegar ao receptor do transmissor. Vamos manter este tempo tomado como Del (D), conforme mostrado abaixo.
Agora saberemos exatamente depois de quanto tempo devemos deixar o pino do acionador do receptor alto para sincronizar com o acionador do transmissor. Esta duração pode ser calculada por Atraso conhecido (t) - Del (D). Não fui capaz de testar essa ideia devido às limitações de tempo, então não tenho certeza de como funcionaria. Então, se você tentar, deixe-me saber os resultados por meio da seção de comentários.