Un moteur pas à pas permet de transformer une impulsion électrique en mouvement angulaire. Ce type de moteur est utilisé lorsque le déplacement angulaire peut être réalisé en boucle ouverte, et ne demande pas une vitesse de rotation élevée. Certaines imprimantes à jet d’encre utilisent ce type de moteur pour gérer le déplacement des têtes d’écriture.
Sur le Joy-PI, le moteur pas-à-pas est connecté en bas à droite, le connecteur est équipé de détrompeurs, il ne faut en aucun aces essayer de forcer pour introduire celui-ci.
Commutateurs :
Ce moteur utilise 4 GPIO, afin de pouvoir les utiliser, les interrupteurs du bloc de droite 3, 4, 5 et 6 doivent en position ON, les autres sont sur OFF.
Le logiciel
Cet exemple utilise une classe développée par Ludwig Schuster, elle permet, une fois un moteur instancié, de faire tourner le moteur d’un certain nombre de pas avec turnSteps, ou d’un angle avec turnDegrees.
Le pseudo-code :
- Importation des librairies
- Classe Stepmotor
- Faire quelques mouvements
En python :
#!/usr/bin/python # -*- coding: utf-8 -*- # Author : Auteur ludwigschuster # Original Author Github: https://github.com/ludwigschuster/RasPi-GPIO-Stepmotor import time import RPi.GPIO as GPIO import math class Stepmotor: def __init__(self): # Définir le mode GPIO GPIO.setmode(GPIO.BOARD) # Broches du Raspberry utilisées self.pin_A = 29 self.pin_B = 31 self.pin_C = 33 self.pin_D = 35 self.interval = 0.010 # Initialisation des broches GPIO.setup(self.pin_A,GPIO.OUT) GPIO.setup(self.pin_B,GPIO.OUT) GPIO.setup(self.pin_C,GPIO.OUT) GPIO.setup(self.pin_D,GPIO.OUT) GPIO.output(self.pin_A, False) GPIO.output(self.pin_B, False) GPIO.output(self.pin_C, False) GPIO.output(self.pin_D, False) def Step1(self): GPIO.output(self.pin_D, True) time.sleep(self.interval) GPIO.output(self.pin_D, False) def Step2(self): GPIO.output(self.pin_D, True) GPIO.output(self.pin_C, True) time.sleep(self.interval) GPIO.output(self.pin_D, False) GPIO.output(self.pin_C, False) def Step3(self): GPIO.output(self.pin_C, True) time.sleep(self.interval) GPIO.output(self.pin_C, False) def Step4(self): GPIO.output(self.pin_B, True) GPIO.output(self.pin_C, True) time.sleep(self.interval) GPIO.output(self.pin_B, False) GPIO.output(self.pin_C, False) def Step5(self): GPIO.output(self.pin_B, True) time.sleep(self.interval) GPIO.output(self.pin_B, False) def Step6(self): GPIO.output(self.pin_A, True) GPIO.output(self.pin_B, True) time.sleep(self.interval) GPIO.output(self.pin_A, False) GPIO.output(self.pin_B, False) def Step7(self): GPIO.output(self.pin_A, True) time.sleep(self.interval) GPIO.output(self.pin_A, False) def Step8(self): GPIO.output(self.pin_D, True) GPIO.output(self.pin_A, True) time.sleep(self.interval) GPIO.output(self.pin_D, False) GPIO.output(self.pin_A, False) def turn(self,count): for i in range (int(count)): self.Step1() self.Step2() self.Step3() self.Step4() self.Step5() self.Step6() self.Step7() self.Step8() def close(self): # Libérer l'utilisation pour d'autres applications GPIO.cleanup() def turnSteps(self, count): # Tourner de 'n' pas for i in range (count): self.turn(1) def turnDegrees(self, count): # Tourner de 'n' degrés (imprécis pour les petites valeurs) self.turn(round(count*512/360,0)) def turnDistance(self, dist, rad): self.turn(round(512*dist/(2*math.pi*rad),0)) def main(): print("Mouvement démarré") motor = Stepmotor() print("Un pas") motor.turnSteps(1) time.sleep(0.5) print("20 pas") motor.turnSteps(20) time.sleep(0.5) print("un quart de tour") motor.turnDegrees(90) print("Fin des mouvements") motor.close() if __name__ == "__main__": main()