Etiquetas: , , , ,

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

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código