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
- Monitor
- Cabo HDMI
- Teclado
- Raspberry Pi 3 (com sistema operacional em micro SD)
- Mouse
- Carregador micro USB B
- Adafruit MotorHat
- Motor CC
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.
- Digital pin SCL/BCM3: Comunicação I2C Serial Clock Line
- Digital Pin SDA/BCM: Comunicação I2C Seria Clock Line
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:
- motor CC
- motor de passo unipolar
- motor de passo bipolar
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
- A grande referência https://www.raspberrypi.org/help/
- Programar com o Raspberry Pi
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie