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