Artigos

Sensor ultrasónico HC-SR04 para Raspberry Pi

Descricão

O sensor ultrasónico HC-SR04 para Raspberry Pi é um sensor que, entre outras possiveis aplicações, serve para medir distâncias. Funciona ao enviar um emissor de ultrasons (inaudiveis para o ouvido humano devido à sua alta frequência) através de um dos cilindros que compõem o sensor e espera-se que o som ressalte num objeto e volte. A seguir o som é captado por outro cilindro do sensor.

 

Sensor ultrasónico HC-SR04
Sensor ultrasónico HC-SR04

 

Sabemos que a velocidade do som no ar é de 340 m/segundo por isso calculando o tempo decorrido entre o envio do emissor e a receção do sinal de retorno e aplicando uma simples fórmula matemática, obtemos a distância entre o sensor e o objecto que se encontra adiante.

Este módulo tem uma área de trabalho de 3cm por 3cm com uma precisão de 3mm e alimenta-se a 5V (15 ma) o que o torna ideal para projetos com Arduino ou Raspberry. Pode comprar o sensor HC-SR04 na ElectroFun.

 

 

Montagem e ligações

Para alimentar o sensor, liguei o pino VCC do módulo ao pino GPIO de 5V do Raspberry Pi e o pino GND a um pino GPIO GND, com isto ja temos um sensor alimentado. Para comunicar o sensor com o Raspberry, liguei o pino TRIGGER ao pino GPIO 25 e o pino ECHO ao pino GPIO 7. Coloquei uma resistência de 1Kohm entre o pino ECHO e o pino GPIO 7 porque os pinos GPIO funcionam a 3.3V e eu não os quero queimar.

 

Script no Python

Quando tivermos as ligações montadas, podemos iniciar este script em Python que irá imprimir no ecrã a distância entre o sensor e qualquer objeto que coloquemos diante dele.

import RPi.GPIO as GPIO    #Importamos a libraria GPIO
import time                #Importamos time (time.sleep)
GPIO.setmode(GPIO.BCM)     #Colocamos a placa em modo BCM
GPIO_TRIGGER = 25          #Usamos o pin GPIO 25 como TRIGGER
GPIO_ECHO    = 7           #Usamos o pin GPIO 7 como ECHO
GPIO.setup(GPIO_TRIGGER,GPIO.OUT)  #Configuramos Trigger como saída
GPIO.setup(GPIO_ECHO,GPIO.IN)      #Configuramos Echo como entrada
GPIO.output(GPIO_TRIGGER,False)    #Colocamos o pin 25 como LOW


try:
    while True:     #Iniciamos un loop infinito
        GPIO.output(GPIO_TRIGGER,True)   #Enviamos uma pressão de ultrasonidos
        time.sleep(0.00001)              #Uma pequena pausa
        GPIO.output(GPIO_TRIGGER,False)  #Apagamos a pressão
        start = time.time()              #Guarda o tempo atual mediante time.time()
        while GPIO.input(GPIO_ECHO)==0:  #Enquanto o sensor não receba sinal...
            start = time.time()          #Mantemos o tempo actual mediante time.time()
        while GPIO.input(GPIO_ECHO)==1:  #Se o sensor recebe sinal...
            stop = time.time()           #Guarda o tempo actual mediante time.time() noutra variavel
        elapsed = stop-start             #Obtemos o tempo decorrido entre envío y receção
        distance = (elapsed * 34300)/2   #Distancia é igual ao tempo por velocidade partido por 2   D = (T x V)/2
        print distance                   #Devolvemos a distancia (em centímetros) por ecrã
        time.sleep(1)                    #Pequena pausa para não saturar o procesador do Raspberry
except KeyboardInterrupt:                #Se o utilizador pressionar CONTROL+C...
    print "quit"                         #Avisamos do encerramento ao utilizaador
    GPIO.cleanup()                       #Limpamos os pinos GPIO e saimos

Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.

Não se esqueçam de fazer like na nossa página no facebook.

Todos os produtos utilizados neste artigo podem ser encontrados na loja de componentes eletrónicos ElectroFun.

Comments

comments

Deixar uma resposta

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.