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.
import
t RPi.GPIOas
GPIOimport
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
distanciawhile 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:"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"
)elif
opcion==3: GPIO.cleanup()break
Este y otros contenidos los podés aprender en el Curso de Raspberry Pi