Site icon AranaCorp

Controlar vários motores com o Raspberry Pi e o MotorHAT

Para controlar um motor de passo ou de corrente contínua com um Raspberry Pi, é necessário acrescentar um circuito integrado, como uma ponte H. Para simplificar a montagem, existem shields como para o Arduino, que no caso do Raspberry. se chamam HAT (chapéu). Veremos como comunicar com o MotorHAT.

Pré-requisitos: Programar com o Raspberry Pi

Material

Apresentação do MotorHat

O MotorHat utiliza transistores MOSFET TB6612 para controlar a corrente nos motores. Ele faz interface com o Raspberry Pi por meio de comunicação I2C, permitindo economizar entradas e saídas. O MotorHAT é compatível com todas as placas Raspberry Pi.

O MotorHat tem um jumper para selecionar o endereço I2C e pode ser empilhado. Isso permite controlar até 32 shields (ou 64 motores de passo ou 128 motores CC) com uma única placa.

Esquema de ligação

Compatível com as placas Raspberry Pi, o HAT é colocado diretamente sobre os pinos do Raspberry. A fonte de alimentação liga-se ao bloco terminal POWER. Os motores ligam-se aos blocos terminais M1 a M4. Pode ser necessário ligar três tipos de motores:

As ligações desses motores são detalhadas nos diagramas a seguir.

Configuração do Raspberry Pi

Para poder comunicar com o MotorHAT, é preciso autorizar o Raspberry Pi a usar a comunicação I2C. Na área de trabalho, no menu “Preferências”, abra o menu “Configuração do Raspberry Pi”. Sob a aba “Interfaces”, selecione “Permitir I2C”, depois “Validar”.

Ou então, num terminal, digite “sudo raspi-config”. Em “5 Opções de Interface”, selecione “P5 I2C” e depois valide.

Código básico para controlar um motor CC

Para comunicar com o MotorHat, usaremos a 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)

Nesse exemplo, uma função de desligar é definida com o objeto atexit. Isso assegura que os motores desliguem quando saímos do scrip Python..

Código básico para controlar um motor de passo

Para utilizar um motor de passo, é necessário obter o objeto Stepper definido na 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

Obs: Fique atento às indentações ao escrever ou copiar um código, para evitar erros de compilação.

Inspire-se nos exemplos acima para usar o Raspberry Pi para controlar o seu sistema que contenha um motor de passo ou motor CC. Sinta-se livre para nos deixar um comentário ou uma mensagem caso tenha dificuldades para controlar os seus motores com o Raspberry Pi.

Aplicações

Conduzir um robô com vários motores de corrente contínua ou de passo

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Exit mobile version