Você está na página 1de 5

Sensor Ultrasnico HC-SR04

Funcionamento.: Para comear a medio necessrio alimentar o mdulo e colocar o pino Trigger em nvel alto por mais de 10us. Assim o sensor emitir uma onda sonora que ao encontrar um obstculo rebater de volta em direo ao mdulo, sendo que o neste tempo de emisso e recebimento do sinal o pino ECHO ficar em nvel alto. Logo o calculo da distncia pode ser feito de acordo com o tempo em que o pino ECHO permaneceu em nvel alto aps o pino Trigger ter sido colocado em nvel alto. Distncia = [Tempo ECHO em nvel alto * Velocidade do Som]/2 A velocidade do som pode ser considerada idealmente igual a 340 m/s, logo o resultado obtido em metros se considerado o tempo em segundos. Na frmula a diviso por 2 deve-se ao foto que a onda enviada e rebatida, logo ela percorre 2 vezes a distncia procurada.

Caractersticas:
Distncia Mnima: 2cm; Distncia Mxima: 5 metros; Preciso: 3mm;

A distncia de um objeto pode ser calculada pela frmula: d = 170 * t; onde t o tempo para a onda ir, rebater no objeto e voltar; O sensor composto por 4 pinos, sendo eles(na ordem visto de frente): VCC: alimentao de 5v; TRIG: pino de gatilho (emisso de som); ECHO: pino de eco (leitura de som); GND: terra; O pino VCC ligado aos 5V do arduino. Os pinos ECHO e TRIG so ligados a pinos I/O digitais. O pino GND ligado ao GND do arduino.

Se utilizarmos a biblioteca Ultrasonic.h, especfica para este sensor, podemos usar estas trs funes: Ultrasonic(int TP, int EP) esta funo configura quais os pinos de ECHO e TRIG sero usados. O primeiro parmetro o TRIG, o segundo o ECHO. Ex: Ultrasonic(12,13); long Timing() esta funo retorna o tempo que o pino ECHO ficou em nvel alto. exatamente o t da frmula acima. Ex: time = ultrasonic.Timing(); long Ranging(int sys) (sys : CM / INC) esta funo retorna a distncia medida pelo sensor, em centmetros(CM) ou em polegadas(INC), dependendo do parmetro colocado na funo. Ex: dist = ultrasonic.Ranging(CM); Obs.: Se estiver utilizando uma verso acima da 1.0, para funcionar a biblioteca Ultrasonic.h, aps extrair esta biblioteca em Arduino -> libraries, deve-se modificar ambos os arquivos Ultrasonic.h e Ultrasonic.cpp. Trocar WProgram.h por Arduino.h.

Ex.01) O programa abaixo faz a leitura da distncia medida pelo sensor e a escreve no porta serial em centmetros. Ligao:

Cdigo: #include <Ultrasonic.h> #define echoPin 13 #define trigPin 12 Ultrasonic ultrasonic(12,13); //primeiro parmetro :TRIG; //segundo parmetro :ECHO; void setup() { Serial.begin(9600); //inicia a porta serial; pinMode(echoPin, INPUT); // define o pino 13 como entrada (recebe o som); pinMode(trigPin, OUTPUT); // define o pino 12 como saida (emite o som); digitalWrite(trigPin, LOW); } void loop() { //Condio necessria para ser feita a medio: digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); //funo Ranging, faz a converso do tempo de //resposta do echo em centimetros, e armazena //na variavel distancia; int distancia = ultrasonic.Ranging(CM); //ou long distancia = 170*ultrasonic.Timing()/2; Serial.print("Distancia em CM: "); Serial.println(distancia); delay(500); } Verificado (v) Obs: As vezes o sensor retorna um valor acima de 1000 unidades, o que um erro de leitura, ento sempre que utilizar este sensor fazer uma condio para que estes valores sejam ignorados. Ex.02) Com base no cdigo anterior o programa abaixo liga os leds em uma escala de distncia(no caso 10cm). O led 1 acende a partir de 10cm, o led 2 a partir de 20, o led 3 a partir de 30 e o led 4 a partir de 40cm. Ligao: - Os LEDS foram ligados nas portas 4, 5, 6 e 7 I/O digitais. - A ligao do sensor foi feita como no programa anterior. Cdigo:

#include <Ultrasonic.h> #define echoPin 13 #define trigPin 12 int dist; Ultrasonic ultrasonic(12,13); void setup() { Serial.begin(9600); //inicia a porta serial; pinMode(echoPin, INPUT); // define o pino 13 como entrada (recebe o som); pinMode(trigPin, OUTPUT); // define o pino 12 como saida (emite o som); digitalWrite(trigPin, LOW); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); dist = ultrasonic.Ranging(CM); if(dist < 1000) //caso no d erro de leitura; { if (dist >= 10) //condio para led1 acender; digitalWrite(4, HIGH); else digitalWrite(4, LOW); if (dist >= 20) //condio para led2 acender; digitalWrite(5, HIGH); else digitalWrite(5, LOW);; if (dist >= 30) //condio para led3 acender; digitalWrite(6, HIGH); else digitalWrite(6, LOW); if (dist >= 40) //condio para led4 acender; digitalWrite(7, HIGH); else digitalWrite(7, LOW);

Serial.print("Distancia em CM: "); Serial.println(dist); } else Serial.println("Erro de leitura"); delay(500); } Verificado (v)

Você também pode gostar