Sensor Ultrasónico HC-SR04 con Raspberry Pi en IOTeca

Sensor Ultrasónico HC-SR04 con Raspberry Pi

El sensor ultrasónico HC-SR04 se utiliza, entre otras posibles aplicaciones, para medir distancias y evitar chocar contra algún objeto. Se alimenta a 5V lo que lo hace ideal para proyectos con Raspberry Pi.

Funciona enviando un pulso de ultrasonido (inaudible para el oído humano por su alta frecuencia) a través de un emisor (T) y esperando a que dicho sonido rebote sobre un objeto y vuelva para ser captado por receptor (R).

Sabemos que la velocidad del sonido en el aire es 343.2 m/seg, asi que calculando el intervalo de tiempo transcurrido entre el envío del pulso y la recepción eco y luego aplicando una sencilla fórmula matemática obtenemos la distancia entre el sensor y el objeto que hay delante. También se pude realizar la cuenta según indica el fabricante dividiendo el tiempo resultante por 0.000058.

Este módulo tiene un área de trabajo de entre 3cm y 3m con una precisión de 3mm y se alimenta a 5V (15 ma) lo que lo hace ideal para proyectos con Raspberry Pi.

Conexiones

HC-SR0Raspberry Pi
VCC5V
Trig23
Echo24
GNDGND
A continuación veremos una implementación del sensor con Python y utilizando RPi.GPIO para manejar los pines.

Definimos una función lecturaDistancia() que será la encargada de realizar la medición. En la misma se envia el Trigger, se espera a recibir el Eco y se calcula la distancia, que es devuelta por la función.

El programa principal muestra un menú de acciones. La primera alternativa da acceso a una impresión continua de la distancia medida. La segunda genera un promedio de 10 mediciones para obtener un valor más certero. Aclaramos nuevamente que es un sensor para "evitar chocar" contra un objeto, no para tomar buenas mediciones.

importt RPi.GPIO as GPIO    
import time               
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#Usamos el pin GPIO 24 como TRIGGER
trigger = 24
#Usamos el pin GPIO 23 como ECHO
echo = 23      
GPIO.setup(trigger,GPIO.OUT)  #Configuramos Trigger como salida
GPIO.setup(echo,GPIO.IN)      #Configuramos Echo como entrada

GPIO.output(trigger,GPIO.LOW)    #Ponemos el pin 25 como LOW

def lecturaDistancia():
    #Enviamos un pulso de ultrasonidos duntate un corto tiempo
    GPIO.output(trigger,GPIO.HIGH)
    time.sleep(0.00001)              
    GPIO.output(trigger,GPIO.LOW)
    #Mientras el sensor no reciba señal el eco
    while GPIO.input(echo)==0:  
        #Guardamos el inicio del intervalo
        inicio = time.time()
    #Mientras en sensor reciba el eco
    while GPIO.input(echo)==1:
        #Guardamos el fin del intervalo
        fin = time.time()
        #intervalo entre envío y recepción
    intervalo = float(fin-inicio)             
    #Distancia es igual a tiempo por velocidad del sonido dividido por dos:
    #la ida y la vuelta
    distancia = float((intervalo * 34320)/2)
    #Con la formula del fabricante sería:
    #distancia = float(intervalo / 0.000058 ) #para cm
    #distancia = float(intervalo / 0.000148 ) #para pulgadas
    return distancia
    
    
while True:
    opcion=int(input("1 - Continuo | 2 - Promedio | 3 - Salir:"))
    if opcion==1:
        try:
            i=int(0)
	while True:
                print(str(i) + "- " + str(lecturaDistancia())+" cm")
                i=i+1
                #lapso entre lecturas
                time.sleep(1)       
        except KeyboardInterrupt:                                    
            break                       
    elif opcion==2:
        print("Aguarde unos segundos")
        lecturas=float(0.00)
        for cont in range(0,10,1):
            lecturas=lecturas+float(lecturaDistancia())
            time.sleep(0.5) 
            promedio=lecturas/10
        print("Promedio 10 lecturas:"+ str(promedio) +" cm")
    elif opcion==3:
        GPIO.cleanup()
        break


Este y otros contenidos los podés aprender en el Curso de Raspberry Pi

Creado: 22/01/2020  

Publicidad

| Volver a Raspberry Pi |

Comentarios

Para poder comentar debés registrarte e ingresar al sitio.