fbpixel
Étiquettes : , , , ,
5
(1)

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.

  • Digital pin SCL/BCM3: Communication I2C Serial Clock Line
  • Digital pin SDA/BCM2: Communication I2C Serial Data Line

Le MotorHat dispose de jumper pour sélectionner l’adresse I2C et sont empilable. Ce qui permet de piloter jusqu’à 32 shields (soit 64 steppers ou 128 moteurs CC) avec une seule carte Arduino.

Schéma de câblage

Compatible avec les cartes Raspberry Pi, le HAT se place directement sur les broches de la Raspberry. L’alimentation se branche au bornier Power. Les moteurs sont branchés sur les borniers M1 à M4. Vous pourrez être amené à brancher trois types de moteur:

  • moteur à courant continu
  • moteur pas-à-pas unipolaire
  • moteur pas-à-pas bipolaire

Les branchements de ces moteurs sont détaillés dans les schémas suivants.

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

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

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 1

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?