Fala Makers, estamos de volta e agora com um projeto acabado de sair do forno. Já pensou em fazer o seu próprio sensor de estacionamento?
Vamos utilizar o famoso sensor ultrassônico HC-SR04 que é capaz de medir distâncias de 2cm a 4m com ótima precisão e baixo preço. Este módulo possui um circuito pronto com emissor e receptor acoplados e 4 pinos (VCC, Trigger, ECHO, GND) para medição.
Ele detecta a distância do objeto mais próximo à frente do sensor, enviando um pulso de ultrassom que ao encontrar um objeto irá retornar na entrada . A placa Arduino envia um pulso curto para acionar a detecção , em seguida, escuta um pulso no mesmo pino usando a função pulseIn (). A duração desse segundo pulso é igual ao tempo que o ultrassom leva para se deslocar até o objeto e voltar para o sensor usando a velocidade do som, este tempo pode ser convertido para distância correspondente.
![]() |
| Montagem do circuito |
Material utilizado:
//universomakers@gmail.com
//https://www.youtube.com/channel/UCJQsBkCMuN6S7ZygGTPZ7Iw
//https://www.facebook.com/universomakers
//MSMakers
#include <Ultrasonic.h> //biblioteca
#define pino_trigger 4 //configuração dos pinos
#define pino_echo 5
Ultrasonic ultrasonic(pino_trigger, pino_echo); // Inicia a biblioteca
const int buzzer = 13; // configura o pino 13 para o buzzer
int intervalo = 1000; // A frequencia que o buzzer oscila
int cont = 0; // Conta o tempo que o sensor ficou parado, distancia minima
int BuzzState = LOW; //Variavel com o estado do buzzer, começando desligado
unsigned long previousMillis = 0;//configura o millis iniciando em 0
void setup() {
Serial.begin(9600);// Configura a velocidade da porta serial
pinMode(buzzer, OUTPUT);//configura o buzzer como saída
}
void loop() {
unsigned long currentMillis = millis();
float cmMsec; // variavel para armazena o valor em cm
long microsec = ultrasonic.timing();// configuração exigida pela biblioteca
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);//converte o valor para cm
//Apenas ira printar na tela se for maior de 0.8 e menor de 30cm
if (cmMsec < 30.0 && cmMsec > 0.8 ) {
Serial.print("Distancia em cm: ");
Serial.print(cmMsec);
Serial.println(" ");
}
//Ira variar a frequancia do buzzer,
if (cmMsec > 20.0 && cmMsec < 30.0) {
intervalo = 100;
}
else if (cmMsec > 10.0 && cmMsec < 20.0) {
intervalo = 50;
} else if ( cmMsec < 10.0 && cmMsec > 5.0) {
intervalo = 10;
} else if ( cmMsec < 5.0 && cmMsec > 0.8) {
intervalo = 5;
}
//aumento o intervalo e corta o sinal do buzzer, chegou na distancia minima
else {
intervalo = 1000;
digitalWrite(buzzer, LOW);
}
//Faz a verificação sendo acionado a quantidade de vezes o intervalo
if (currentMillis - previousMillis >= intervalo && intervalo < 500 && cont <= 200) {
Serial.println(cont);//printa informação na tela, apenas para verificação
cont ++;//conta o tempo acionando na mesma frequencia
previousMillis = currentMillis;//salva o valor atual do millis
//inverte o estado do buzzer
if (BuzzState == LOW) {
BuzzState = HIGH;
} else {
BuzzState = LOW;
}
digitalWrite(buzzer, BuzzState); //aciona ou desaciona o buzzer dependendo do estado
}else if(cmMsec >28){
cont = 0; // Se a disctancia for maior que 28cm o buzzer sera desligado
}
}
Nenhum comentário:
Postar um comentário