Uno de los principales objetivos en robótica es hacer que las cosas se muevan por sí mismas. Para dar movimiento a un robot, a menudo se utilizan motores eléctricos, como los motores de corriente continua (CC), especialmente para robots móviles. En este tutorial, veremos cómo controlar dicho motor usando RaspberryPi y un puente H.
Prerequisite: Programación con Raspberry Pi
Material
- Pantalla
- cable HDMI
- Teclado
- Raspberry PI 3 (con sistema operativo en micro SD)
- Mouse
- Fuente de alimentación micro USB B
- Motor CC x1
- H-Bridge SN754410NE x1
Motor de corriente continua
Los motores de corriente continua a menudo se usan con una caja de cambios para aumentar el par mientras se mantienen las pequeñas dimensiones. DC Motor es bastante simple de usar. Para hacerlo funcionar, lo único que debe hacer es aplicarle voltaje. El signo y el nivel del voltaje determinarán la velocidad y el sentido de rotación.
Para modular el voto aplicado al motor, se puede usar un relé eléctrico o un puente en H.
H-bridge
Un puente H distribuye energía al motor eléctrico y modula el voltaje de acuerdo con las señales enviadas a sus entradas. Se puede dibujar como cuatro interruptores que redirigirán la corriente según el comando del microcontrolador.
El dispositivo que utilizamos para este proyecto es un SN754410NE. Puede conducir dos motores de CC y tiene varios pines que tienen su propio propósito.
Pequeño recordatorio sobre el pinout:
- GND están conectados entre ellos y deben estar conectados a la tierra del proyecto.
- + 5V recibe la potencia para el circuito lógico, generalmente proporcionado por la salida 5V de Arduino
- M1 Enable y M2 Enable se utilizan para activar los puentes. Recibieron un voltaje ALTO / BAJO del Arduino.
- M1/M2 Forward, M1/M2 Reverse reciben las señales PWM y corresponden a las direcciones del motor.
- + Motor Power IN recibe la fuente de alimentación del motor (5,6, 7V y a veces 24V o más)
- El motor 1 y el motor 2 están conectados a los cables del motor.
Cableado del motor CC
Stepper se alimenta a través del módulo ULN2003A. Las entradas del módulo del 1 al 4 están conectadas a la salida 18,22,24,26 (GPIO24, GPIO25, GPIO8, GPIO7) del RaspberryPi. Los pines + y – del módulo están conectados al pin 5V y GND del RaspberryPi.
Dependiendo de la potencia requerida para el motor, se puede usar la salida de voltaje de la Raspberry Pi, pero se recomienda encarecidamente usar una fuente de alimentación externa para proteger el microcontrolador.
Como recordatorio, aquí está el pinout de la Raspberry Pi 3.
Código básico para controlar un motor CC
Para conducir el motor, se debe habilitar Hbridge y se debe enviar una señal PWM hacia adelante o hacia atrás, dependiendo de la dirección de rotación.
#!/usr/bin/env python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) #Pins 18 22 24 GPIO 24 25 8 Motor1E = 24 # Enable pin 1 of the controller IC Motor1A = 25 # Input 1 of the controller IC Motor1B = 8 # Input 2 of the controller IC GPIO.setup(Motor1A,GPIO.OUT) GPIO.setup(Motor1B,GPIO.OUT) GPIO.setup(Motor1E,GPIO.OUT) forward=GPIO.PWM(Motor1A,100) # configuring Enable pin for PWM reverse=GPIO.PWM(Motor1B,100) # configuring Enable pin for PWM if __name__ == '__main__' : forward.start(0) reverse.start(0) # this will run your motor in reverse direction for 2 seconds with 80% speed by supplying 80% of the battery voltage print "GO backward" GPIO.output(Motor1E,GPIO.HIGH) forward.ChangeDutyCycle(0) reverse.ChangeDutyCycle(80) sleep(2) # this will run your motor in forward direction for 5 seconds with 50% speed. print "GO forward" GPIO.output(Motor1E,GPIO.HIGH) forward.ChangeDutyCycle(50) reverse.ChangeDutyCycle(0) sleep(5) #stop motor print "Now stop" GPIO.output(Motor1E,GPIO.LOW) forward.stop() # stop PWM from GPIO output it is necessary reverse.stop() GPIO.cleanup()
NB: Tenga cuidado al copiar el código Python de Internet, puede encontrar problemas de sangría que conducen a un error de compilación.
Sources
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código