No post de hoje vamos utilizar o Arduino juntamente com o sensor ultrasônico HC-SR04 para montar um sensor de estacionamento (ou sensor de ré), que emite um “bip” conforme o sensor se aproxima de um obstáculo. Quanto mais próximo o obstáculo, maior a frequência do bip.
Como (geralmente) uma imagem vale mais do que mil palavras, vamos dar uma olhada no sensor instalado em um trator, devidamente “emprestado” do sobrinho 🙂
Bacana, né? Vamos ver como montar isso.
Circuito sensor de estacionamento com Arduino
O circuito é composto apenas pelo Arduino, um sensor ultrasônico HC-SR04 e um buzzer, com uma resistência de 330 ohms para limitar a corrente.
No programa, utilizei a biblioteca NEWTONE, que pode ser baixada nesse link e que eu já abordei nesse post.
O motivo de usar essa biblioteca é que a função TONE, normalmente usada para produzir sons com Arduino, apresenta conflito com a biblioteca Ultrasonic, também utilizada nesse projeto.
O som do bip pode ser alterado conforme a necessidade, alterando o valor das variáveis frequencia e tempo, setadas no começo do programa.
O pino Trigger do sensor vai ligado ao pino 13 do Arduino, e o pino Echo do sensor vai ligado ao pino 10 do Arduino. A alimentação do sensor é de 5 volts. O buzzer vai na porta 2 do Arduino.
A variável cmMsec armazena o valor da distância entre o sensor e o obstáculo. Uma série de comandos IF verificam o valor de cmMsec e atualizam a variável atraso, que é utilizada no final do programa para determinar a frequência de acionamento do bip.
Os valores lidos pelo sensor também podem ser acompanhados pelo serial monitor e, com algumas alterações no programa, exibidos em um display.
// Programa : Sensor de estacionamento com HC-SR04 // Autor : Arduino e Cia #include <Ultrasonic.h> //Carrega a biblioteca Ultrasonic #include <NewTone.h> //Carrega a biblioteca Newtone //Dados do buzzer #define tempo 500 int frequencia = 2000; int Pinofalante = 2; int atraso = 1000; //Define o pino do Arduino a ser utilizado com o pino Trigger do sensor #define PINO_TRIGGER 13 //Define o pino do Arduino a ser utilizado com o pino Echo do sensor #define PINO_ECHO 10 //Inicializa o sensor ultrasonico Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO); void setup() { pinMode(Pinofalante,OUTPUT); //Pino do buzzer Serial.begin(9600); //Inicializa a serial } void loop() { float cmMsec, inMsec; //Le os dados do sensor, com o tempo de retorno do sinal long microsec = ultrasonic.timing(); //Calcula a distancia em centimetros cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); //Ajusta o atraso de acordo com a distancia if (cmMsec > 80) { atraso = 2000; } else if (cmMsec >50 && cmMsec<80) { atraso = 1500; } else if (cmMsec >30 && cmMsec<50) { atraso = 1200; } else if (cmMsec > 10 && cmMsec < 30) { atraso = 700; } else if (cmMsec < 10) { atraso = 300; } //Apresenta os dados, em centimetros, na Serial Serial.print("Cent: "); Serial.print(cmMsec); Serial.print(" atraso : "); Serial.println(atraso); //Emite o bip NewTone(Pinofalante, frequencia, tempo); delay(atraso); }
Podem ser adicionados outros comandos IF para melhorar a “precisão” do sensor, ou até mesmo ser utilizada outra solução para calcular o valor do delay. Uma sugestão seria a utilização da função map, por exemplo.
Por enquanto é isso. Já posso devolver o trator para o dono. 🙂