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.

Circuito Sensor de estacionamento com HC-SR04

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. 🙂

4.2/5 - (24 votes)