Neste tutorial aprenderemos os conceitos básicos de um sensor muito interessante que pode ser utilizado em muitas placas de sistemas embarcados (o que inclui nosso querido Raspberry Pi B+), que é o Sensor de Distância Ultrassônico HC - SR04. O nome pode parecer bastante complicado, mas é um sensor bem fácil de entender e de interagir. E também é bastante barato, podendo ser encontrado a partir de R$ 15,00 nos melhores sites de sistemas embarcados.
A primeira coisa que precisamos entender é: como que isso funciona? Como o próprio nome já diz estamos falando de um Sensor Ultrassônico, ou seja, ele trabalha com ondas sonoras para interagir com o ambiente. A primeira coisa que prestamos atenção no sensor são os dois enormes círculos que tomam quase todo o espaço do sensor: são os transmissores e receptores sônicos. O transmissor emite uma onda de som com propriedades específicas e o receptor recebe (oh, rly!) a mesma onda quando a mesma volta. A partir desse princípio esse sensor pode ser usado para muitos propósitos, mas o foco desse tutorial é fazer com que você, caro leitor, consiga calcular pequenas distâncias usando esse sensor.
E como usar o sensor para medir distâncias? Fácil. Para que a onda possa ser transmitida pelo transmissor, é preciso que o pino TRIGGER no sensor esteja em nível alto, e a partir disso a onda é transmitida, e enquanto isso o pino ECHO também ficará em nível alto. O pino ECHO só entra em nível baixo a partir do momento que a onda volta pelo receptor. Com isso temos a o tempo que a onda levou para chegar em um determinado objeto e voltar e a velocidade da onda (velocidade do som), com isso podemos aplicar a seguinte equação para determinar distâncias (dividimos a equação por 2 porque o tempo pego é de ida e de volta, sendo que estamos interessado em apenas metade disso):
Distância percorrida = (tempo em que ECHO fica em nível alto * velocidade do som) / 2
Dito tudo isso, podemos começar o nosso tutorial! Primeiramente, vamos ao que será necessário:
- Raspberry Pi B+ e o mínimo para utilizá-lo (teclado, mouse e monitor)
- Protoboard
- Resistores (de preferência, três do mesmo valor)
- Jumpers
- Cabos macho-fêmea
- O Sensor de Distância Ultrassônico HC - SR04, a estrela deste turorial
Primeiramente vamos começar montando o circuito, e é aqui que encontraremos um pequeno empecilho: o sensor trabalha com uma tensão de 5V, enquando o Raspberry emite uma tensão de 3.3V, e por isso teremos que fazer uma pequena mágica com os resistores. Para isso facilitar, é só seguir a seguinte relação:
Vsaída = Ventrada * (R2 / (R1+R2))
Considerando que Vsaída = 3.3 V, Ventrada = 5V e R1 assume um valor qualquer (o resistor que você tiver disponível, fica fácil descobrir qual o valor de R2 que usaremos no circuito. Na lista de materiais foram pedidos três resistores de mesmo valor porque o resultado de R2 é aproximadamente o dobro de R1, então enquanto R1 é apenas um resistor R2 pode ser os dois resistores em série. Abaixo segue um esquema de como ficara o circuito montado no protoboard:
(provavelmente seu esquema ficará parecido com isso, mas desde que siga as especificações do esquema acima, funcionará normalmente)
Esquema montado, é hora de ir para a parte computacional. Primeiramente vamos precisar habilitar a função SSH, que é um protocolo que permite a a comunicação remota entre dois dispositivos em meio a mesma rede. Para isso abra o Terminal no Raspberry e digite a seguinte linha:
ssh pi@(o endereço de IP do seu Raspberry)
SSH habilitado, agora podemos montar o código que será executado pelo sensor. Nesse caso é melhor primeiro salvar o código em um arquivo de texto. Então segue abaixo o código que será ultilizado:
#importando as bibliotecas necessarias
import RPi.GPIO as GPIO
import time
#definindo a pinagem a ser utilizada
GPIO.setmode(GPIO.BCM)
#definindo os pinos ultilizados
TRIG = 23
ECHO = 24
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
#definindo TRIG como falso
GPIO.output(TRIG, false)
time.sleep(2)
#preparando para a medição
GPIO.output(TRIG,true)
time.sleep(0.00001)
GPIO.output(TRIG,false)
while GPIO.input(ECHO) == 0:
inicio = time.time()
while GPIO.input(ECHO) == 1:
fim = time.time()
duracao = fim - inicio
distancia = duracao * 17150
distancia = round(distancia,2)
print "Distancia: ", distancia, "cm"
GPIO.cleanup()
Este sensor pode medições de 1cm até 5m de distância, com uma margem de erro de 3mm, então sinta-se livre para testá-lo diversas vezes!
Até a próxima!