Raspberry Pi
Tutorial de Rapberry Pi en español.
- Juan Antonio Villalpando -
Volver al índice del tutorial
____________________________
6E.- Pantalla LCD con bus I2C. Sensor de ultrasonido HC-SR04.
GPIO2 es SDA
GPIO3 es SCL
______________________________
1.- Sensor de ultrasonido. Conexión.
- Al crear un impulso de disparo en el Trigger, se envía 8 pulsos de 40 kHz.
- Esos pulsos rebotan. El Echo saca un pulso desde que se envío los 8 pulsos hasta que llega.
- El Echo es salida. Esa salida la toma el código y analiza el tiempo del pulso.
- El Trigger es entrada. El Raspberry envía el pulso de arranque al Trigger del sensor.
- Alimentamos el HC-SR04 con 5V.
- El HC-SR05 envía los pulsos a 5V. El Raspberry trabaja con 3,3V. Ponemos un divisor de tensión para bajar de los 5 V a los 3,3V.
- El Raspberry envía los pulsos a 3,3V. El HC-SR04 puede reconocer ese nivel de voltios, lo podemos conectar directamente.
- Conectamos el Echo al terminal 38 y el Trigger al terminal 40.
______________________________
2.- Código.
- Mide distancias desde 5 cm hasta 20 cm.
|
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
TRIG = 40
ECHO = 38
i=0
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG, False)
print ("Calibrando.....")
time.sleep(2)
print ("Objeto muy alejado......")
try:
while True:
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
while GPIO.input(ECHO)==0:
inicio_pulso = time.time()
while GPIO.input(ECHO)==1:
fin_pulso = time.time()
duracion_pulso = fin_pulso - inicio_pulso
distancia = duracion_pulso * 17150
distancia = round(distancia+1.15, 2)
if distancia<=20 and distancia>=5:
print ("distancia:",distancia,"cm")
i=1
if distancia>20 and i==1:
print ("Objeto muy alejado....")
i=0
time.sleep(2)
except KeyboardInterrupt:
GPIO.cleanup()
|
- KeyboardInterrupt, al pulsar Ctrl C, se interrumpe el bucle While.
______________________________
3.- Pantalla LCD y Sensor de ultrasonido HC-SR04.
- Vamos a añadir una pantalla LCD con bus I2C.
- El archivo de librería I2C_LCD_driver, debe estar en la misma carpeta que el tecladoLCD.py
- El archivo I2C_LCD_driver.py lo puedes obtener en el tutorial anterior sobre LCD. En ese archivo es donde se establece la dirección de la LCD, en nuestro caso la 0x27
|
# Juan A. Villalpando
# kio4.com
import RPi.GPIO as GPIO
import time
import I2C_LCD_driver
mylcd = I2C_LCD_driver.lcd()
GPIO.setmode(GPIO.BOARD)
TRIG = 40
ECHO = 38
i=0
GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)
GPIO.output(TRIG, False)
try:
while True:
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
while GPIO.input(ECHO)==0:
inicio_pulso = time.time()
while GPIO.input(ECHO)==1:
fin_pulso = time.time()
duracion_pulso = fin_pulso - inicio_pulso
distancia = duracion_pulso * 17150
distancia = round(distancia+1.15, 1)
if distancia<=20 and distancia>=5:
print ("distancia:",distancia,"cm")
mylcd.lcd_display_string(str(distancia)+" cm ", 1)
i=1
if distancia>20 and i==1:
print ("Objeto muy alejado....")
mylcd.lcd_display_string("Objeto muy lejos", 1)
i=0
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
|
___________________________________________
- Otros códigos.
|
import time
from subprocess import call # Interrupción del teclado para poder pulsar Ctrl C
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
Trig = 40
Echo = 38
GPIO.setup(Trig, GPIO.OUT)
GPIO.setup(Echo, GPIO.IN)
def distancia():
GPIO.output(Trig, False) # Trigger en 0
time.sleep(2*10**-6) # Espera 2 microsegundos
GPIO.output(Trig, True) # Trigger en 1
time.sleep(10*10**-6) # Espera 2 microsegundos
GPIO.output(Trig, False) # Trigger en 0
# Cuando Echo es 1 comienza la cuenta.
while GPIO.input(Echo) == 0:
start = time.time()
while GPIO.input(Echo) == 1:
end = time.time()
# Duración del pulso del Echo
duracion = end-start
medida = (duracion*10**6)/58 # Distancia en cm
print ("%.2f" %medida)
while True:
try:
distancia()
except KeyboardInterrupt: # Ctrl C para salir del bucle
break
|
___________________________________________________
|