segunda-feira, 8 de março de 2021

Faça o seu próprio Sensor de Estacionamento com Arduino

 



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: 

Arduino
Sensor ultrassônico hc sr04
Buzzer 5V
Jumpers

Sketch

Download da biblioteca Ultrasonic

//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