Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue115:python [2016/12/10 07:59] – d52fr | issue115:python [2016/12/10 15:35] (Version actuelle) – andre_domenech |
---|
** | ** |
| |
Bienvenue de nouveau dans ce que j'appelle affectueusement «La folie de Greg pour Python». Comme promis, nous allons travailler à connecter un moteur pas-à-pas à un Raspberry Pi. Vous aurez besoin de votre Raspberry Pi, un moteur pas-à-pas de loisir, 4 piles AA, la puce de commande L293D que nous avons utilisée précédemment, une platine d'expérimentation, et quelques cavaliers. | Bienvenue de nouveau dans ce que j'appelle affectueusement « La folie de Greg pour Python ». Comme promis, nous allons travailler à la connexion d'un moteur pas-à-pas à un Raspberry Pi. Vous aurez besoin de votre Raspberry Pi, un moteur pas-à-pas de loisirs, 4 piles AA et le bloc-piles, la puce de commande L293D que nous avons utilisée précédemment, une plaque d'essais, et quelques cavaliers. |
| |
Alors que je faisais des recherches pour ce projet-ci, je suis tombé sur un manuel sur tutorials-raspberrypi.de. J'ai été tellement impressionné par les informations de ce site web que j'utilise une majorité de leur renseignements et de leur code dans cet article. Le site web : http://tutorials-raspberrypi.com/how-to-control-a-stepper-motor-with-raspberry-pi-and-l293d-uln2003a/. Si vous êtes perdu dans mes explications, vous pouvez toujours y aller et obtenir quelques éclaircissements. | Alors que je faisais des recherches pour ce projet-ci, je suis tombé sur un guide sur tutorials-raspberrypi.de. J'ai été tellement impressionné par les informations de ce site web que j'utilise une majorité de leur renseignements et de leur code dans cet article. Le site Web : http://tutorials-raspberrypi.com/how-to-control-a-stepper-motor-with-raspberry-pi-and-l293d-uln2003a/. Si vous êtes perdu dans mes explications, vous pouvez toujours y aller et obtenir quelques éclaircissements. |
| |
Le moteur choisi est un mini-moteur pas-à-pas Radio Shack. En fait, c'est un moteur basse tension 28BJY-48. Avant d'essayer de connecter un moteur pas-à-pas, merci de vous procurer sa documentation et autant d'information que possible. Pour mon cas, la documentation est ici : http://www.tutorials-raspberrypi.de/wp-content/uploads/2014/08/Stepper-Motor-28BJY-48-Datasheet.pdf | Le moteur choisi est un mini-moteur pas-à-pas Radio Shack. En fait, c'est un moteur basse tension 28BJY-48. Avant d'essayer de connecter un moteur pas-à-pas, merci de vous procurer sa documentation et autant d'informations que possible. Pour mon cas, la documentation est ici : http://www.tutorials-raspberrypi.de/wp-content/uploads/2014/08/Stepper-Motor-28BJY-48-Datasheet.pdf |
| |
Bon, regardons d'abord les moteurs pas-à-pas en général, ensuite nous préciserons cette information pour le 28BJY spécifiquement et nous le connecterons au Pi via notre puce de commande L293D. | Bon, regardons d'abord les moteurs pas-à-pas en général et, ensuite, nous préciserons cette information pour le 28BJY et nous le connecterons au Pi via notre puce de commande L293D. |
| |
** | ** |
** | ** |
| |
Les Moteurs Pas-à-pas | Les moteurs pas-à-pas |
| |
Les moteurs pas-à-pas sont utilisés en robotique et dans les machines à commande numérique lorsque vous voulez pouvoir bouger un objet vers un endroit précis. Il y a deux types de base de moteurs pas-à-pas, un appelé Unipolaire et l'autre Bipolaire. Leur différence apparaîtra plus loin dans ce manuel. Le 28BJY est bipolaire et a aussi une boite de vitesses. | Les moteurs pas-à-pas sont utilisés en robotique et dans les machines à commande numérique lorsque vous voulez pouvoir facilement bouger un objet vers un endroit précis. Il y a deux types de base de moteurs pas-à-pas, un appelé unipolaire et l'autre bipolaire. Leur différence apparaîtra plus loin dans ce tutoriel. Le 28BJY est bipolaire et a aussi une boîte de vitesses. |
| |
Dans les deux cas, il y a un certain nombre de bobines électromagnétiques qui sont allumées et coupées successivement pour faire tourner le moteur. Chaque fois que nous donnons de la puissance à l'une des bobines, le moteur tourne un petit peu (si alimenté dans la séquence correcte pour le moteur). On appelle cela un pas, d'où le nom de moteur pas-à-pas. | Dans les deux cas, il y a un certain nombre de bobines électromagnétiques qui sont allumées et coupées successivement pour faire tourner le moteur. Chaque fois que nous alimentons l'une des bobines, le moteur tourne un petit peu (si alimenté dans la séquence correcte pour le moteur). On appelle cela un pas, d'où le nom de moteur pas-à-pas. |
| |
Moteurs Unipolaires | Moteurs Unipolaires |
| |
Les moteurs unipolaires possèdent des bobines alimentées dans une seule direction : le UNI de unipolaire. Le rotor du moteur est contrôlé en alimentant puis coupant les différentes bobines dans une séquence spécifique pendant un certain temps. Voici un diagramme simplifié de ce modèle… | Les moteurs unipolaires possèdent des bobines alimentées dans une seule direction : le UNI de unipolaire. Le rotor du moteur est contrôlé en alimentant, puis coupant, les différentes bobines dans une séquence spécifique pendant un certain temps. Voici un diagramme simplifié de ce modèle : |
| |
Alimenter chaque bobine, une à la fois, va faire que l'aimant du rotor va se tourner vers la bonne bobine. Si on se guide sur un cadran d'horloge, alimenter les bobines successivement à 12h, 3h, 6h, 9h, puis de nouveau 12h va faire tourner le rotor d'un tour complet dans le sens des aiguilles d'une montre. On a donc besoin de quatre «pas» pour faire un tour. On appelle cela l'onde unipolaire. En allant plus loin, nous pourrions avoir un mouvement plus granulaire en activant alternativement les bobines mais en activant aussi la bobine d'après, ce qui fait faire un huitième de tour au rotor quand les deux bobines sont alimentées. La suite serait alors : 12, 12 et 3, 3, 3 et 6, 6, 6 et 9, 9, 9 et 12, et finalement 12 de nouveau seule. On a ainsi 8 pas par tour, c'est ce que l'on appelle la vague à mi-temps. Pour faire aller le moteur en marche arrière (sens inverse des aiguilles), nous inversons simplement la séquence. Ceci est une représentation TRÈS simple, et beaucoup de moteurs pas-à-pas ont une résolution qui peut aller jusqu'à 200 pas par tour. | Alimenter chaque bobine, une à la fois, va faire que l'aimant du rotor va se tourner vers la bonne bobine. Si on se guide sur un cadran d'horloge, alimenter les bobines successivement à 12 h, 3 h, 6 h, 9 h, puis de nouveau 12 h va faire tourner le rotor d'un tour complet dans le sens des aiguilles d'une montre. On a donc besoin de quatre « pas » pour faire un tour. On appelle cela l'onde unipolaire. En allant plus loin, nous pourrions avoir un mouvement plus granulaire en activant alternativement les bobines, mais en activant aussi la bobine d'après, ce qui fait faire un huitième de tour au rotor quand les deux bobines sont alimentées. La suite serait alors : 12, 12 et 3, 3, 3 et 6, 6, 6 et 9, 9, 9 et 12, et finalement 12 de nouveau seule. On a ainsi 8 pas par tour, ce que l'on appelle le fonctionnement en demi-pas. Pour faire aller le moteur en marche arrière (sens inverse des aiguilles), nous inversons simplement la séquence. Ceci est une représentation TRÈS simple, et beaucoup de moteurs pas-à-pas ont une résolution qui peut aller jusqu'à 200 pas par tour. |
| |
===== 2 ===== | ===== 2 ===== |
** | ** |
| |
Moteurs Bipolaires | Moteurs bipolaires |
| |
Le 28BJY, comme dit précédement, est un moteur bipolaire. Dans ce cas, les bobines peuvent voir leur courant inversé et deux bobines sont alimentées en même temps. Cela crée une situation où le changement est plus complexe, mais la quantité de force de rotation (puissance) du rotor est augmentée. Voir ci dessous un diagramme bloc simple du 28BJY. | Le 28BJY, comme dit précédemment, est un moteur bipolaire. Dans ce cas, les bobines peuvent voir leur courant inversé et deux bobines sont alimentées en même temps. Cela crée une situation où la commutation est plus complexe, mais la quantité de force de rotation (puissance) du rotor est augmentée. Voir ci-dessous un diagramme bloc simple du 28BJY. |
| |
Les numéros montrés avec les couleurs des fils sont pour le 28BJY et les votres peuvent être différents. Le connecteur des fils (s'il y en a un) peut être différent d'une pièce à l'autre. Vous pouvez utiliser un ohmmètre pour tester les bobines. | Les numéros montrés avec les couleurs des fils sont pour le 28BJY et les vôtres peuvent être différents. Le connecteur des fils (s'il y en a un) peut être différent d'une unité à l'autre. Vous pouvez utiliser un ohmmètre pour tester les bobines. |
| |
Le Câblage | Le câblage |
| |
Un léger avertissement avant de commencer. | Un léger avertissement avant de commencer. |
Tout d'abord, faites l'ensemble de votre câblage AVANT d'allumer le Raspberry Pi. Nous travaillons avec une source externe de puissance, donc faites attention de ne pas mettre en court-circuit certains fils ou d'alimenter la mauvaise broche. | Tout d'abord, faites l'ensemble de votre câblage AVANT d'allumer le Raspberry Pi. Nous travaillons avec une source externe de puissance, donc faites attention de ne pas mettre en court-circuit certains fils ou d'alimenter la mauvaise broche. |
| |
Deuxièmement, VÉRIFIEZ votre câblage avant d'allumer votre RPi. Si vous vous êtes emmêlé, au mieux votre projet ne fonctionnera pas, et le moteur restera là et buzzera. | Deuxièmement, VÉRIFIEZ votre câblage avant d'allumer votre RPi. Si vous vous êtes emmêlé, au mieux votre projet ne fonctionnera pas, et le moteur ne fera rien en buzzant. |
| |
Quand vous regardez le plan, ça semble plutôt simple (et il l'est). Je me suis assuré que le câblage entre le Rpi et la puce de commande était de la même couleur que le segment correspondant du moteur. Nous n'allons utiliser que 4 fils sur les 5 du moteur. Le rouge (si le vôtre a un fil rouge) n'est pas connecté pour ce projet. | Quand vous regardez le plan, ça semble plutôt simple (et ça l'est). Je me suis assuré que le câblage entre le Rpi et la puce de commande était de la même couleur que le segment correspondant du moteur. Nous n'allons utiliser que 4 fils sur les 5 du moteur. Le rouge (si le vôtre a un fil rouge) n'est pas connecté pour ce projet. |
| |
Puisque le composant principal dans ce projet est la puce de commande L293D, voici un petit plan pour essayer de vous faciliter la tâche... | Puisque le composant principal dans ce projet est la puce de commande L293D, voici un petit plan pour essayer de vous faciliter la tâche : |
| |
** | ** |
Pin 1 -> Pin 9 | Pin 1 -> Pin 9 |
Pin 2 -> Pi GPIO 6 | Pin 2 -> Pi GPIO 6 |
Pin 3 -> Moteur Rose | Pin 3 -> Moteur rose |
Pin 4 -> Rail négatif de la platine | Pin 4 -> Rail négatif de la plaque |
Pin 5 -> Non Connecté | Pin 5 -> Non connecté |
Pin 6 -> Moteur Orange | Pin 6 -> Moteur orange |
Pin 7 -> Pi GPIO 5 | Pin 7 -> Pi GPIO 5 |
Pin 8 -> Rail Positif de la platine | Pin 8 -> Rail positif de la plaque |
Pin 9 -> Pin 1 | Pin 9 -> Pin 1 |
Pin 10 -> PI GPIO 23 | Pin 10 -> PI GPIO 23 |
Pin 11 -> Moteur Jaune | Pin 11 -> Moteur jaune |
Pin 12 -> Non Connecté | Pin 12 -> Non connecté |
Pin 13 -> Non Connecté | Pin 13 -> Non connecté |
Pin 14 -> Moteur Bleu | Pin 14 -> Moteur bleu |
Pin 15 -> Pi GPio 24 | Pin 15 -> Pi GPio 24 |
Pin 16 -> Pi +5VDC | Pin 16 -> Pi +5VDC |
| |
Si vous suivez ceci, vous n'aurez pas de problème avec les fils. | Si vous respectez cela, vous ne devrez pas avoir de problème avec les fils. |
| |
Le Code | Le code |
| |
Comme toujours, je vais parler du code par blocs. Allons-y. | Comme toujours, je vais parler du code par blocs. Allons-y. |
** | ** |
| |
Ici, nous ne définissons simplement que les imports, nous paramétrons le mode GPIO (entrée/sortie universelle) et nous désactivons les alertes pour ne pas être ennuyé par des messages lorsque les broches sont déjà initialisées. Nous définissons aussi quelle broche universelle contrôle les bobines du moteur à travers la puce de commande. | Ici, nous ne définissons que les imports, nous paramétrons le mode GPIO (entrée/sortie universelle) et nous désactivons les alertes pour ne pas être ennuyé par des messages lorsque les broches sont déjà initialisées. Nous définissons aussi quelle broche universelle contrôle les bobines du moteur à travers la puce de commande. |
| |
# adaptez si c'est différent | # adaptez si c'est différent |
Seq[7] = [0,1,1,0] | Seq[7] = [0,1,1,0] |
| |
Et voici la clé permettant de faire marcher notre projet. Ce moteur veut 8 pas (internes) par tour de moteur (selon la doc). Nous définissons alors la séquence des bobines qui seront alimentées à chaque pas, sous la forme d'une série de listes. Chaque liste indique quelle bobine est alimentée à un moment donné. | Et voici la clé permettant de faire fonctionner notre projet. Ce moteur veut 8 pas (internes) par tour de moteur (selon la doc.). Nous définissons également la séquence des bobines qui seront alimentées à chaque pas, sous la forme d'une série de listes. Chaque liste indique quelle bobine est alimentée à un moment donné. |
| |
GPIO.setup(coil_A_1_pin, GPIO.OUT) | GPIO.setup(coil_A_1_pin, GPIO.OUT) |
GPIO.setup(coil_B_2_pin, GPIO.OUT) | GPIO.setup(coil_B_2_pin, GPIO.OUT) |
| |
Ici nous parcourons les étapes du paramétrage, en déterminant quelles broches sont utilisées comme sorties. | Ici nous faisons le paramétrage, en déterminant quelles broches sont utilisées comme sorties. |
| |
def setStep(w1, w2, w3, w4): | def setStep(w1, w2, w3, w4): |
** | ** |
| |
Cette fonction est appelée chaque fois que nous voulons faire avancer le moteur d'un pas, et nous transmettons un 0 ou un 1 à chaque broche de fil de bobine sur la puce de commande pour alimenter ou non-alimenter les différentes bobines pour faire tourner le rotor. | Cette sous-routine est appelée chaque fois que nous voulons faire avancer le moteur d'un pas, et nous transmettons un 0 ou un 1 à chaque broche de fil de bobine sur la puce de commande pour alimenter ou pas les différentes bobines pour faire tourner le rotor. |
| |
Et enfin notre fonction «main» qui boucle tout le temps en demandant la quantité de temps et le nombre de pas dans cette direction donnée. Pour mon moteur, il faut 512 pas pour faire presque une rotation complète. | Et enfin notre fonction « main » (principale) qui boucle sans cesse en demandant la quantité de temps et le nombre de pas dans cette direction donnée. Pour mon moteur, il faut 512 pas pour faire presque une rotation complète. |
| |
Sur mon système, avec mon moteur, un délai de 1 ms fonctionne bien. Mais vous aurez peut-être à ajouter quelques millisecondes au vôtre pour qu'il fonctionne. | Sur mon système, avec mon moteur, un délai de 1 ms fonctionne bien. Mais vous devrez peut-être ajouter quelques millisecondes au vôtre pour qu'il fonctionne. |
| |
Notez que j'ai dit qu'il fallait 512 pas pour faire PRESQUE une rotation complète. Ce moteur a un rapport d'accélération de 64:1, pour lequel l'angle de pas est une fraction assez laide. Mais pour ce tutoriel, ça marche assez bien. | Notez que j'ai dit qu'il fallait 512 pas pour faire PRESQUE une rotation complète. Ce moteur a un rapport d'accélération de 64:1, pour lequel l'angle de pas est une fraction assez laide. Mais pour ce tutoriel, ça marche assez bien. |
| |
Si vous voulez en apprendre plus sur les moteurs pas-à-pas, adafruit.com a un chouette petit article sur le sujet. | Si vous voulez en apprendre plus sur les moteurs pas-à-pas, adafruit.com propose un chouette petit article sur le sujet. |
| |
J'espère que vous avez aimé cette série jusqu'ici. Le prochain article apprendra à utiliser la carte microcontrôleur de l'Arduino. Nous utiliserons cette information dans la troisième partie de la série où nous contrôlerons l'Arduino avec un Raspberry Pi (ou tout autre ordinateur). Donc, ceci étant dit, vous devriez être prêt et avoir un Arduino (Uno ou Mega) disponible et avoir sorti de leur carton les composants que nous avons utilisé au tout début de cette série, pour la prochaine fois. | J'espère que vous avez aimé cette série jusqu'ici. Le prochain article vous apprendra à utiliser la carte microcontrôleur de l'Arduino. Nous utiliserons cette information dans la troisième partie de la série où nous contrôlerons l'Arduino avec un Raspberry Pi (ou tout autre ordinateur). Aussi, cela étant dit, pour la prochaine fois, vous devriez être prêt avec un Arduino (Uno ou Mega) et avoir sorti de leur carton les composants que nous avons utilisés au tout début de cette série. |
| |
En attendant, continuez d'apprendre et surtout, AMUSEZ-VOUS ! | En attendant, continuez d'apprendre et surtout, AMUSEZ-VOUS ! |