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-SR0 | Raspberry Pi |
|---|---|
| VCC | 5V |
| Trig | 23 |
| Echo | 24 |
| GND | GND |
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.GPIOasGPIOimporttime GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False)#Usamos el pin GPIO 24 como TRIGGERtrigger = 24#Usamos el pin GPIO 23 como ECHOecho = 23 GPIO.setup(trigger,GPIO.OUT)#Configuramos Trigger como salidaGPIO.setup(echo,GPIO.IN)#Configuramos Echo como entradaGPIO.output(trigger,GPIO.LOW)#Ponemos el pin 25 como LOWdeflecturaDistancia():#Enviamos un pulso de ultrasonidos duntate un corto tiempoGPIO.output(trigger,GPIO.HIGH) time.sleep(0.00001) GPIO.output(trigger,GPIO.LOW)#Mientras el sensor no reciba señal el ecowhileGPIO.input(echo)==0:#Guardamos el inicio del intervaloinicio = time.time()#Mientras en sensor reciba el ecowhileGPIO.input(echo)==1:#Guardamos el fin del intervalofin = time.time()#intervalo entre envío y recepciónintervalo = float(fin-inicio)#Distancia es igual a tiempo por velocidad del sonido dividido por dos:#la ida y la vueltadistancia = float((intervalo * 34320)/2)#Con la formula del fabricante sería: #distancia = float(intervalo / 0.000058 ) #para cm #distancia = float(intervalo / 0.000148 ) #para pulgadasreturndistanciawhile True: opcion=int(input("1 - Continuo | 2 - Promedio | 3 - Salir:"))ifopcion==1:try: i=int(0)while True: print(str(i) +"- "+ str(lecturaDistancia())+" cm") i=i+1#lapso entre lecturastime.sleep(1)exceptKeyboardInterrupt:breakelifopcion==2:"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"Promedio 10 lecturas:"+ str(promedio) +" cm")elifopcion==3: GPIO.cleanup()break
Este y otros contenidos los podés aprender en el Curso de Raspberry Pi
