quarta-feira, julho 01, 2015

ULTRASSOM HC-SR04 COM BUZZER E LED

Este sketch utiliza o HC-SR04 – sensor de ultrassom. Embora exista uma biblioteca própria para o ultrassom, aqui utiliza-se funções matemáticas para transformar os valores do sensor em distância. O sensor emite um som em direção a um obstáculo e aguarda seu retorno contabilizando o tempo em microssegundos. A partir da velocidade do som transformada em centímetros por microssegundos (aproximadamente 343m/s ou 29,1cm/μs), calcula a distância do objeto. Como a distância foi contada em dobro, deverá ser dividida por dois para se ter a real posição do obstáculo.
A função pulseIn , que aparece na programação, calcula o tempo em microssegundos entre dois estados do pino, pode ser HIGH ou LOW.  No sketch vai retornar quantos μs passaram desde a emissão do pulso até o retorno do sinal.
O sketch foi programado para acender um led verde quando tiver livre à frente; acender um led amarelo e emitir um som quando tiver um obstáculo num intervalo de distância em centímetros e acender um led vermelho e emitir um som quando tiver um obstáculo muito perto (menor ou igual a 10 cm).
Sketch baseado no código disponibilizado em:
http://omecatronico.com.br/blog/hc-sr04-sensor-ultrassom/



/*
**********************************************
PROJETO ROBÓTICA NA ESCOLA 2015 
     ULTRASSOM COM LED E BUZZER  
         EE DR PEDRO VELHO – RN/BR        
**********************************************
*/
#define echoPin 13 // Pino do Echo (eco - receptor)
#define trigPin 12 // Pino do Trigger (gatilho - emissor)
#define ledAm 7
#define ledVm 6
#define ledVd 5
#define som 3
long tempo; // Tempo usado para o cálculo da distância
long distancia;
void setup()
{
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(ledAm, OUTPUT);
 pinMode(ledVm, OUTPUT);
 pinMode(ledVd, OUTPUT);
 pinMode(som,OUTPUT);
}
void loop()
{
// Sequência para calcular o tempo de ida e volta do som.
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 tempo = pulseIn(echoPin, HIGH);
distancia = (tempo/29.1)/2;
if (distancia >= 200 || distancia <= 0)
  {
   Serial.println("FORA DO ALCANCE");
   delay(50);
  }
 if (distancia > 20 && distancia < 200)
  {
   Serial.println(distancia);
   digitalWrite(ledVd, HIGH);
   delay(50);
  }
  else
  {
   digitalWrite(ledVd, LOW);
  }
if (distancia > 10 && distancia <= 20)
  {
   Serial.println(distancia);
   digitalWrite(ledAm, HIGH);
   tone (som,110,50);    
   delay(50);
   }
   else
   {
   digitalWrite(ledAm, LOW);
   noTone(som);
   }
 if (distancia <= 10)
   {
   Serial.println(distancia);
   digitalWrite(ledVm, HIGH);
   tone(som,820,1000);
   delay(50);
   }
   else
   {
   digitalWrite(ledVm, LOW);
   noTone(som);
   }
   //Espera 50ms para fazer a próxima leitura.
   delay(50);
}

//FIM DO SKETCH

Nenhum comentário:

Postar um comentário