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