Para controlar un motor, ya sea paso a paso o corriente continua, con una Raspberry Pi, es necesario agregar un circuito integrado como un puente H. Para simplificar los ensambles, existen protectores como para Arduino , llamado HAT (sombrero) en Raspberry. Veremos cómo comunicarnos con MotorHAT.
Prérequis: Programa con Raspberry Pi
Hardware
- Pantalla
- Cable HDMI
- Teclado
- Raspberry PI 3 (con sistema operativo en micro SD)
- Ratón
- Micro USB cargador B
- Adafruit MotorHat
- Motor de corriente continua
Presentación de MotorHat
El MotorHat usa mosfets TB6612 para controlar la corriente en los motores. Utiliza la comunicación I2C para interactuar con Raspberry PI y así guardar E / S. Es compatible con todas las tarjetas Raspberry Pi.
- Digital pin SCL/BCM3: Communication I2C Serial Clock Line
- Digital pin SDA/BCM2: Communication I2C Serial Data Line
MotorHat tiene un puente para seleccionar la dirección I2C y es apilable. Esto le permite conducir hasta 32 escudos (es decir, 64 motores paso a paso o 128 motores de CC) con una sola placa Arduino.
Diagrama de cableado
Compatible con las tarjetas Raspberry Pi, el HAT se coloca directamente en los pines de la Raspberry Pi. La fuente de alimentación está conectada al bloque de terminales de alimentación. Los motores están conectados a los bloques de terminales M1 a M4. Puede que tenga que conectar tres tipos de motor:
– motor de corriente continua
– motor paso a paso unipolar
– motor paso a paso bipolar
Las conexiones de estos motores se detallan en los siguientes diagramas.
Configuración de Raspberry Pi
Para poder comunicarse con MotorHAT, debe autorizar a Raspberry Pi a utilizar la comunicación I2C. En el escritorio, en el menú Preferencias, abra el menú Configuración de Raspberry Pi. En la pestaña Interfaces, seleccione Activado para I2C y luego Validar.
O en una terminal, escriba «sudo raspi-config», en «5 Opciones de interfaz», seleccione «P5 I2C», luego valide.
Código básico para controlar un motor DC
Para comunicarnos con MotorHat, utilizaremos la biblioteca Adafruit_MotorHAT
#!/usr/bin/python #i2c 0x60 0x70 from Adafruit_MotorHAT import Adafruit_MotorHAT,Adafruit_DCMotor import time import atexit mh=Adafruit_MotorHAT(addr=0x60) MAX_SPEED=150 def turnOffMotors(): mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE) mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE) mh.getMotor(3).run(Adafruit_MotorHAT.RELEASE) mh.getMotor(4).run(Adafruit_MotorHAT.RELEASE) atexit.register(turnOffMotors) motor=mh.getMotor(1) while True: print("Forward \n") motor.run(Adafruit_MotorHAT.FORWARD) print("Speed up \n") for i in range(MAX_SPEED): motor.setSpeed(i) time.sleep(0.01) print("Speed down \n") for i in reversed(range(MAX_SPEED)): motor.setSpeed(i) time.sleep(0.01) print("Backward\n") motor.run(Adafruit_MotorHAT.BACKWARD) print "Speed up \n" for i in range(MAX_SPEED): motor.setSpeed(i) time.sleep(0.01) print("Speed down \n") for i in reversed(range(MAX_SPEED)): motor.setSpeed(i) time.sleep(0.01) print("STOP \n") motor.run(Adafruit_MotorHAT.RELEASE) time.sleep(2)
En este ejemplo, se define una función de detención con el objeto atexit. Esto asegura que los motores se corten al salir del script Python.
Código básico para controlar un motor paso a paso.
Para utilizar un stepper, debe recuperar el objeto de Stepper definido en Adafruit_MotorHAT.
#!/usr/bin/python #import Adafruit_MotorHAT, Adafruit_DCMotor, Adafruit_Stepper from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor, Adafruit_StepperMotor import time import atexit # create a default object, no changes to I2C address or frequency mh = Adafruit_MotorHAT() # recommended for auto-disabling motors on shutdown! def turnOffMotors(): mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE) mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE) mh.getMotor(3).run(Adafruit_MotorHAT.RELEASE) mh.getMotor(4).run(Adafruit_MotorHAT.RELEASE) atexit.register(turnOffMotors) myStepper = mh.getStepper(200, 1) # 200 steps/rev, motor port #1 myStepper.setSpeed(30) # 30 RPM while (True): print("Single coil steps") myStepper.step(100, Adafruit_MotorHAT.FORWARD, Adafruit_MotorHAT.SINGLE) myStepper.step(100, Adafruit_MotorHAT.BACKWARD, Adafruit_MotorHAT.SINGLE) print("Double coil steps") myStepper.step(100, Adafruit_MotorHAT.FORWARD, Adafruit_MotorHAT.DOUBLE) myStepper.step(100, Adafruit_MotorHAT.BACKWARD, Adafruit_MotorHAT.DOUBLE) print("Interleaved coil steps") myStepper.step(100, Adafruit_MotorHAT.FORWARD, Adafruit_MotorHAT.INTERLEAVE) myStepper.step(100, Adafruit_MotorHAT.BACKWARD, Adafruit_MotorHAT.INTERLEAVE) print("Microsteps") myStepper.step(100, Adafruit_MotorHAT.FORWARD, Adafruit_MotorHAT.MICROSTEP) myStepper.step(100, Adafruit_MotorHAT.BACKWARD, Adafruit_MotorHAT.MICROSTEP
NB: preste atención a las muescas al escribir o copiar un código. Es posible que tenga errores de compilación.
Puede inspirarse en estos ejemplos para controlar su sistema compuesto por motores de CC o motores paso a paso con Raspberry Pi. No dude en dejarnos un comentario o un mensaje si encuentra dificultades para controlar sus motores. con Raspberry Pi.
Aplicaciones
Controle un robot con varios motores de corriente continua o motores paso a paso.
Fuentes
- La THE référence https://www.raspberrypi.org/help/
- Programa avec Raspberry Pi
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código