Approved Reseller
Approved Reseller
En este pequeño tutorial veremos cómo conectar un motor de corriente directa a una tarjeta Raspberry Pi, también encontrarás un código de programación para tus primeras pruebas.
Los motores de corriente directa son dispositivos que transforman energía eléctrica en energía mecánica en forma de movimiento angular de su eje. Como su nombre lo indica se alimentan con corriente directa, el motor que utilizaremos en este ejemplo se puede alimentar desde 3V hasta 5V. De ésta manera para que el eje del motor comience a girar solo es necesario aplicar alimentación(diferencia de potencial entre sus terminales), y si las terminales de la fuente de alimentación se invierten, el motor gira en sentido contrario.
Para controlar un motor de corriente directa es muy común utilizar un puente H, es decir, un circuito que recibe 3 señales digitales de control y según los valores de dichas señales entrega energía necesaria al motor, por medio de sus pines de salida, para que el motor gire en un sentido, en el otro o no gire. Las 3 señales digitales de control de un puente H son:
Para que el motor gire, las señales digitales de control INPUT1 e INPUT2 deben tener valores contrarios y la Señal ENABLE debe estar en valor lógico Alto. El puente H que seleccionamos para este ejemplo es el circuito integrado L293D, cuenta con 2 puentes H y nosotros haremos uso solo de uno, en específico, utilizaremos las señales de control INPUT1, INPUT2 y ENANLE1 y conectaremos el motor a OUTPUT1 y OUTPUT2.
Copiamos el siguiente código a un script de Python y lo ejecutamos con Python3 para observar como el motor gira en un sentido por 5 segundos y posteriormente gira 5 segundos en el sentido contrario.
import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) MotorIN1 = 15 MotorIN2 = 14 MotorE1 = 18 GPIO.setup(MotorIN1,GPIO.OUT) GPIO.setup(MotorIN2,GPIO.OUT) GPIO.setup(MotorE1,GPIO.OUT) print("Hacemos girar el motor en un sentido por 5 segundos") GPIO.output(MotorIN1,GPIO.HIGH) # Establecemos el sentido de giro con los pines IN1 e IN2 GPIO.output(MotorIN2,GPIO.LOW) # Establecemos el sentido de giro con los pines IN1 e IN2 GPIO.output(MotorE1,GPIO.HIGH) # Habilitamos las salidas OUT1 y OUT2 del puente H sleep(5) print ("Detenemos el motor") GPIO.output(MotorE1,GPIO.LOW) sleep(1) print("Hacemos girar el motor en el sentido contrario por 5 segundos") GPIO.output(MotorIN1,GPIO.LOW) # Establecemos el sentido de giro con los pines IN1 e IN2 GPIO.output(MotorIN2,GPIO.HIGH) # Establecemos el sentido de giro con los pines IN1 e IN2 GPIO.output(MotorE1,GPIO.HIGH) # Habilitamos las salidas OUT1 y OUT2 del puente H sleep(5) print ("Detenemos el motor") GPIO.output(MotorE1,GPIO.LOW) sleep(1) GPIO.cleanup()
Copiamos el siguiente código a un script de Python y lo ejecutamos con Python3 para observar como el motor gira en un sentido por 10 segundos y posteriormente gira 10 segundos en el sentido contrario, ambos con velocidad variable.
import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) MotorIN1 = 15 MotorIN2 = 14 MotorE1 = 18 GPIO.setup(MotorIN1,GPIO.OUT) GPIO.setup(MotorIN2,GPIO.OUT) GPIO.setup(MotorE1,GPIO.OUT) p = GPIO.PWM(MotorE1, 50) # Creamos la instancia PWM con el GPIO a utilizar y la frecuencia de la señal PWM p.start(0) #Inicializamos el objeto PWM print("Hacemos girar el motor en un sentido por 10 segundos mientras aumentamos y disminuimos la velocidad") GPIO.output(MotorIN1,GPIO.HIGH) # Establecemos el sentido de giro con los pines IN1 e IN2 GPIO.output(MotorIN2,GPIO.LOW) # Establecemos el sentido de giro con los pines IN1 e IN2 for dc in range(0, 101, 1): p.ChangeDutyCycle(dc) time.sleep(0.05) for dc in range(100, -1, -1): p.ChangeDutyCycle(dc) time.sleep(0.05) print("Hacemos girar el motor en el sentido contrario por 10 segundos mientras aumentamos y disminuimos la velocidad") GPIO.output(MotorIN1,GPIO.LOW) # Establecemos el sentido de giro con los pines IN1 e IN2 GPIO.output(MotorIN2,GPIO.HIGH) # Establecemos el sentido de giro con los pines IN1 e IN2 for dc in range(0, 101, 1): p.ChangeDutyCycle(dc) time.sleep(0.05) for dc in range(100, -1, -1): p.ChangeDutyCycle(dc) time.sleep(0.05) print ("Detenemos el motor") p.ChangeDutyCycle(0) sleep(1) GPIO.cleanup()
Referencias: