• Aucun résultat trouvé

On donne ci-dessous quelques lignes de code permettant de débuter une communication avec la carte.

N/A
N/A
Protected

Academic year: 2022

Partager "On donne ci-dessous quelques lignes de code permettant de débuter une communication avec la carte."

Copied!
3
0
0

Texte intégral

(1)

Commande d’un moteur pas à pas Ce document présente quelques éléments permettant de commander la rotation d’un moteur pas à pas sur une carte Arduino_uno à l’aide de programmes générés sous Python (distribution Spyder).

I- Le matériel et les configurations Il vous faudra installer :

- Python3.5 (environnement spyder) : https://www.python.org/downloads/

- Arduino :

https://www.arduino.cc/en/Main/Software

Ensuite, il sera nécessaire de configurer Arduino pour que la communication avec Python soit possible à l’aide du module Firmata :

𝐹𝑖𝑐ℎ𝑖𝑒𝑟 → 𝐸𝑥𝑒𝑚𝑝𝑙𝑒 → 𝐹𝑖𝑟𝑚𝑎𝑡𝑎

→ 𝑆𝑡𝑎𝑛𝑑𝑎𝑟𝑑𝐹𝑖𝑟𝑚𝑎𝑡𝑎

Téléversé ce programme.

Attention : la communication avec python pourra se rompre lors des différentes tentatives des programmes testés sous python. Il faudra rebrancher le câble USB puis téléverser une nouvelle fois Firmata Il sera nécessaire de connaître le COM affecté à la carte Arduino, pour cela :𝑜𝑢𝑡𝑖𝑙𝑠 → 𝑃𝑜𝑟𝑡

Il reste une manipulation à faire sur python : installer le module Firmata avec les lignes de codes suivantes :

import pip

pip.main(['install','pyfirmata'])

On donne ci-dessous quelques lignes de code permettant de débuter une communication avec la carte.

from pyfirmata import Arduino, util import time

import matplotlib.pyplot as plt

#on déclare le bon port associé à la carte#

carte = Arduino('COM5')

#lancement de la communication avec la carte#

acquisition = util.Iterator(carte) acquisition.start()

#Les entrées et sorties sur la carte se définissent grâce à la fonction

get_pin()

#Avec un choix de paramètres dans la parenthèse :

#a analogique

#d digitale

#Le numéro de branchement sur la carte (de 0 à 13)

#i input , entrée

#o output, sortie

#p pwm Exemple :

Pour déclarer la pin digitale 2 en entrée, on écrit :

digital_2 = carte.get_pin('d:2:i') Pour déclarer la pin digitale 9 en sortie, on écrit :

digital_9 = carte.get_pin('d:9:o') Pour lire la valeur « numérique » de la pin 2, on écrit : digital_2.read()

Pour imposer un état haut à la pin 9, on écrit : digital_9.write(1)

(2)

II- Principe d’un moteur pas à pas Voici le principe d’un moteur pas à pas dont le rotor est un aimant permanent et dont le stator est constitué de deux pairs de bobinages (IN1,IN2,IN3,IN4). Le principe de rotation repose sur l’effet du moment de la force magnétique qui tend à aligner le rotor dans la direction et le sens du champ magnétique appliqué.

Voici une illustration simplifiée d’un moteur dont le pas est de 45° :

(1,0,0,0)

(1,1,0,0)

(0,1,0,0)

(0,1,1,0)

(0,0,1,0)

Et donc pour une rotation complète, il faut rajouter (0,0,1,1), (0,0,0,1),(1,0,0,1)

III- Moteur et alimentation

Le moteur pas à pas 28BYJ-48 étudié est représenté ci-dessous. Le rotor et le stator sont dentelés :

Les impulsions électriques émises sur les 4 fils (IN1,IN2,IN3,IN4) permettent donc une rotation avec un pas angulaire 𝛼. Dans notre cas, le pas angulaire est 𝛼 = 5,625° (car 32 dents sur le rotor) et il faut donc 64 pas pour une rotation complète.

Le cycle ci-dessous permet donc d’avancer de 4 dents :

(1,0,0,0),(1,1,0,0,),(0,1,0,0),(0,1,1,0),(0,0,1,0),(0,0 ,1,1), (0,0,0,1),(1,0,0,1)

Enfin, ce moteur est muni d’engrenages :

Le pas angulaire apparent du rotor métallique devient alors 𝛼

64.

Rotor métallique

(3)

Pour alimenter ce moteur, nous aurions pu utiliser des transistors et des diodes de protection pour chaque bobinage (comme pour le moteur cc), le composant ULN2003A va permettre de réaliser toute cette alimentation.

On donne ci-dessous le programme permettant d’imposer un cycle de rotation. Modifier ce programme afin que le moteur effectue un tour complet.

from pyfirmata import Arduino, util import time

#on déclare le bon port associé à la carte#

carte = Arduino('COM5')

#lancement de la communication avec la carte"

acquisition = util.Iterator(carte) acquisition.start()

IN_1 = carte.get_pin('d:11:o') IN_2 = carte.get_pin('d:10:o') IN_3 = carte.get_pin('d:9:o') IN_4 = carte.get_pin('d:8:o') IN_1.write(0)

IN_2.write(0) IN_3.write(0) IN_4.write(0)

pin = [IN_1,IN_2,IN_3,IN_4]

seq = [ [1,0,0,0], [1,1,0,0], [0,1,0,0], [0,1,1,0], [0,0,1,0], [0,0,1,1], [0,0,0,1], [1,0,0,1]

]

for j in range(8):

time.sleep(0.01) for i in range(4):

pin[i].write(seq[j][i])

carte.exit()

Références

Documents relatifs

La première carte permet le contrôle de la fréquence du moteur avec un encodeur numérique7. La seconde carte permet le contrôle en puissance des phases d’allumage des bobinages

A l'aide d'une carte Nucleo et de la carte d'extension TUNIS, réaliser un dispositif embarqué permettant de faire l'acquisition d'un signal analogique à intervalle régulier

A l'aide d'une carte Nucleo et de la carte d'extension TUNIS, réaliser un dispositif embarqué permettant de piloter un moteur à courant continu en vitesse, à

La valeur sera également convertie en une tension analogique (sortie A2 de la carte Nucleo) pour un angle entre 0 et 360° (0V à 3.3V).

A l'aide d'une carte Nucleo et de la carte d'extension TUNIS, réaliser un dispositif embarqué permettant d’asservir la position d’un moteur à courant continu,

3ème pas : les pôles N du rotor se placent devant les dents aimantées S du circuit magnétique de la bobine 1 alimentée sous une tension –E (lors du 1er pas, ces dents

Première priorité, V8 met 13 en mémoire et l’adresse de ce 13 est enregistrée dans le premier emplacement mémoire de cet objet (une sorte d’armoire à tiroirs réservé aux

Maintenant que votre pendule est prête vous devrez compter 60 oscillations qui correspondent à 2 minutes pour que votre œuf soit cuit a