Étiquettes : , , , ,

Pour piloter un moteur, qu’il soit pas-à-pas ou à courant continu, avec un Raspberry Pi, il est nécessaire de rajouter un circuit intégré comme un pont en H. Pour simplifier les montages, il existe des shields comme pour Arduino, appelé HAT (chapeau) chez Raspberry. Nous allons voir comment communiquer avec le MotorHAT.

Prérequis: Programmez avec Raspberry Pi

Matériel

  • Écran
  • HDMI câble
  • Clavier
  • Raspberry PI 3 (avec OS sur micro SD)
  • Souris
  • Chargeur micro USB B
  • Adafruit MotorHat
  • Moteur CC

Présentation du MotorHat

Le MotorHat utilise des mosfet TB6612 pour piloter le courant dans les moteurs. Il utilise la communication I2C pour s’interfacer avec le Raspberry PI et ainsi économiser des E/S. Il est compatible avec toutes les cartes Raspberry Pi.

Configuration du Raspberry Pi

Pour pouvoir communiquer avec le MotorHAT, il faut autoriser le Raspberry Pi à utiliser la communication I2C. Sur le bureau, dans le menu Préférences, ouvrez le menu Configuration du Raspberry Pi. Sous l’onglet Interfaces, sélectionnez Activé pour I2C, puis Valider.

Ou dans un terminal, tapez « sudo raspi-config », dans « 5 Interfacing Options », sélectionnez « P5 I2C », puis valider.

Code de base pour le contrôle d’un moteur CC

Pour communiquer avec le MotorHat, nous allons utiliser la librairie 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)

Dans cet exemple, une fonction d’arrêt est définie avec l’objet atexit. Ceci permet de s’assurer que les moteurs sont coupés lorsqu’on quitte le script Python.

Code de base pour le contrôle d’un moteur pas-à-pas

Pour utiliser un moteur PP, il faut récupérer l’objet Stepper défini dans 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

N.B.: Faites attention aux indentations lorsque vous écrivez ou recopiez un code. Vous risqueriez d’avoir des erreurs de compilation.

Vous pouvez vous inspirer de ces exemples pour piloter votre système composé de moteurs à courant continu ou de moteurs pas-à-pas avec Raspberry Pi. N’hésitez pas à nous laisser un commentaire ou un message si vous rencontrez des difficultés pour piloter vos moteurs avec Raspberry Pi.

Applications

Piloter un robot avec plusieurs moteurs à courant continu ou pas-à-pas

Sources

La THE référence https://www.raspberrypi.org/help/

Programmez avec Raspberry Pi