Você está na página 1de 5

Explorando sensores de ultrassom - sensor de estacionamento

Nove de julho, feriado paulista (Revoluo Constitucionalista de 1932), tarde fria, 'bora Arduinar. Tinha que
testar dois sensores de distncia do tipo ultrassom para um projeto, ento montamos dois circuitos, eu e o meu
ajudante da ocasio, Pedro, um para testar cada sensor.
Esses sensores funcionam da seguinte forma: eles emitem som numa frequncia que no escutamos (muito
aguda) e em seguida espera pelo eco do som emitido, enviando a informao da chegada do eco para o Arduino,
que a calcula a distncia. Sabendo-se que o som percorre 340 m/s (isso no ar, ao nvel do mar), pode-se
calcular a distncia percorrida pelo som at o obstculo multiplicando-se o tempo decorrido entre a emisso e a
deteco do eco e dividindo-se por dois. Para ver uma animao explicando como esse tipo de sensor funciona,
clique aqui.
Esses so os sensores. O primeiro, HC-SCR04, bom e barato: acha-se at por R$ 9,90 no Mercado Livre.

Abaixo, montado no circuito. O Vcc 5V, os pinos de trigger e echo so ligados a pinos digitais do Arduino.

O segundo sensor o LV-EZ1, da MaxBotix. A primeira coisa que chama a ateno a diferena de preos
entre os dois sensores: este custa R$ 129,00 no Lab de Garagem. Ta o datasheet.
Ele de fato menor, e tem trs formas de conexo com o circuito externo: analgica, largura de pulso (PW) ou
serial.
Na analgica vc liga o pino de sada AN do sensor a um dos pinos analgicos do Arduino. A sensibilidade de
Vcc/512 por polegada. Em 5V no Arduino, temos: 5V/512/pol = 9.8 mV/pol. Como a sada do Arduino varia de
0 a 1023, temos que dividir por dois o valor da sada analgica, ou seja, o cdigo fica:
int v = analogRead(0)/2; // a sada A do sensor est ligada ao pino 0
float distcm = v * 2.54;
Na conexo como largura de pulso, o funcionamento anlogo ao HC-SCR04: conecta-se os pinos PW e BW
a dois pinos digitais do Arduino. O cdigo eu colocarei como exemplo no fim desse artigo.
Por fim, a conexo via serial, onde o sensor fornece o valor diretamente a uma conexo serial (RX/TX).
Para testar os sensores, montamos um circuito de um sensor de estacionamento, onde um LED e um buzzer
daro aviso visual e sonoro da aproximao de um obstculo. Esse sensor funciona exatamente como um sensor
de estacionamento como os encontrados nos veculos hoje. Abaixo, fotos do circuito.

Aqui, vdeo dos dois circuitos funcionando e o cdigo (o mesmo cdigo) correspondente.
IMPORTANTE: no cdigo abaixo existe a seguinte instruo:
?
1

long distancia = duration /29 / 2 ;

De onde vem esse 29???


Do seguinte: a instruo
?
1 long duration = pulseIn(echoPin,HIGH);
coloca na varivel duration o tempo, em microssegundos, que o pulso leva para ir at o obstculo e voltar at o
sensor.
Sabemos que a velocidade mdia do som no ar de aprox. 340 m/s, ento em 1.000.000 microssegundos o som
percorre 340 m.
Isso significa que, para saber a distncia, devemos fazer a seguinte conta:

distancia = duration * 1.000.000 ms / 340 m/s / 2 (porque o duration d o tempo de ida e volta)
1.000.000 / 340 = 2.94, o que d a distncia em metros. Como a maioria das medidas que se faz com esse
sensor em centmetros (o alcance dele pequeno), a gente multiplica a constante por 100, o que nos d o valor
29.
Obrigado ao leitor jkampus que me fez fazer essa alterao.

?
1
2
3
4
5
6
7
8
9
10
11
12

#define echoPin 13 //Pino 13 recebe o pulso do echo


#define trigPin 12 //Pino 12 envia o pulso para gerar o echo
void setup()
{
Serial.begin(9600); //inicia a porta serial
pinMode(echoPin, INPUT); // define o pino 13 como entrada (recebe)
pinMode(trigPin, OUTPUT); // define o pino 12 como saida (envia)
pinMode(4, OUTPUT); // define o pino 12 como saida (envia)
}
void loop()

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

{
//seta o pino 12 com um pulso baixo "LOW" ou desligado ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
//pulseInt l o tempo entre a chamada e o pino entrar em high
long duration = pulseIn(echoPin,HIGH);
//Esse calculo baseado em s = v . t, lembrando que o tempo vem dobrado
//porque o tempo de ida e volta do ultrassom
long distancia = duration /29 / 2 ;
Serial.print("Distancia em CM: ");
Serial.println(distancia);
if (distancia < 5)
{
digitalWrite(4, HIGH);
tone(8,440);
delay(50);
noTone(8);
delay(50);
}
else
if (distancia < 10)
{
digitalWrite(4, HIGH);
tone(8,440);
delay(100);
noTone(8);
delay(100);
}
digitalWrite(4, LOW);
delay(100); //espera 1 segundo para fazer a leitura novamente
}

http://automatobr.blogspot.com.br/2013/07/explorando-sensores-de-ultrassom-sensor.html

Você também pode gostar