mardi 30 décembre 2014

Secouons cet accéléromètre!

Aujourd'hui, j'ai ressorti mon accéléromètre MMA7455 dont je vous avais brièvement parlé en mars 2013, mais que je n'avais jamais vraiment utilisé. Le but, aujourd'hui, est de mesurer à quel point l'accéléromètre est énergiquement secoué, sur une échelle de 0 à 10. Si l'accéléromètre est immobile, on affiche zéro, s'il est moyennement secoué, on affiche 5, et s'il est très énergiquement secoué, on affiche 10.

Comme tout matériel, j'ai utilisé un breakout comportant l'accéléromètre MMA7455, fabriqué par LCStudio, et un Arduino Uno.

Connexions:

Il n'y a que 4 fils à brancher:
  • Vcc du breakout au 5 V de l'Arduino
  • GND du breakout au GND de l'Arduino
  • SCL du breakout à l'entrée analogique A5 de l'Arduino
  • SDA du breakout à l'entrée analogique A4 de l'Arduino

(Attention:  Si vous utilisez un autre modèle de breakout que celui qui est illustré ci-dessus, il est possible que vous deviez ajouter des résistances de tirage à SCL et SDA, que vous deviez brancher CS à Vcc, et que l'alimentation appropriée soit de 3,3 V plutôt que de 5 V...).

Bibliothèque MMA7455

Ensuite, nous téléchargeons et installons la bibliothèque spécialement conçue par Moritz Kemper pour utiliser ce genre d'accéléromètre avec l'Arduino.

Petite précaution, par contre:  nous allons devoir corriger un bug dans la bibliothèque (à moins, bien sûr, que le bug ait déjà été corrigé au moment où vous lisez ces lignes).

Ouvrez le fichier "MMA_7455.cpp" au moyen de votre éditeur de texte préféré, et détectez ce paragraphe (ce sont les lignes 30 à 44):


Au début du fichier, l'auteur a soigneusement défini les constantes MMA_7455_4G_MODE et MMA_7455_8G_MODE, mais à cet endroit il les appelle par erreur  MMA_7455_2G_MODE.

Le remède est simple:  si sensitivity vaut 4, il faut écrire "MMA_7455_4G_MODE" (on remplace le 2 par un 4), et si sensitivity vaut 8, il faut écrire  "MMA_7455_8G_MODE" (on remplace le 2 par un 8):


 Bien entendu, vous enregistrez et fermez le fichier.


Le sketch

Voici maintenant le sketch qui affichera sur le moniteur série une valeur de 0 à 10 indiquant à quel point l'accéléromètre est fortement secoué.

La sensibilité de l'accéléromètre peut être réglée à 2 (pour mesurer des accélérations se situant entre -2g et +2g), à 4 (pour mesurer des accélérations se situant entre -4g et +4g), ou à 8 (pour mesurer des accélérations se situant entre -8g et +8g).  Il est parfaitement possible d'atteindre une accélération d'environ 8g en secouant l'accéléromètre de façon très énergique, et nous avons donc réglé la sensibilité à 8.

Il peut être pertinent de calibrer votre accéléromètre.  Lorsqu'il est immobile, à plat sur la table (avec la mention "LCStudio" vers le bas), il devrait indiquer une accélération nulle en x et en y, et une accélération de 15 (valeur correspondant à 1 g, qui est l'effet de la force de gravité) sur l'axe des z.  Le mien indiquait -2, -6 et 17, c'est pourquoi j'utilise "calibrateOffset(2, 6, -2)" pour compenser.

L'accéléromètre mesure les 3 composantes de l'accélération (x, y et z), mais je ne m'intéresse qu'à sa grandeur, peu importe sa direction.  C'est pourquoi je calcule la racine carrée de x²+y²+z² (j'ai appliqué le théorème de Pythagore).  Et puisque cette accélération est loin d'être constante pendant qu'on secoue l'accéléromètre, je fais une moyenne sur une centaine de mesures.

Dans cette version, la valeur est affichée sur le moniteur série de l'ordinateur.  Bien entendu, on pourrait allumer des LEDs, afficher le résultat sur un LCD, etc.

Pour bien des utilisations, vous désirerez simplement détecter si oui ou non l'accéléromètre a été secoué, auquel cas il devrait être facile de modifier mon sketch pour répondre à vos besoins.


La prochaine fois, nous verrons comment utiliser l'accéléromètre pour mesurer une inclinaison.

Yves Pelletier (Twitter: @ElectroAmateur)

samedi 27 décembre 2014

Moteur pas à pas et STM32 Nucleo

Voici donc un cinquième tutoriel mettant en vedette la carte STM32 Nucleo de ST Microelectronics, et l'environnement de programmation en ligne mbed.  Au cours des derniers mois, nous avons vu comment allumer des LEDs et lire l'état de boutons, comment afficher les données à l'écran d'un ordinateur ou sur un afficheur LCD, et comment contrôler un simple moteur cc.  Aujourd'hui, comme vous l'avez certainement deviné en lisant le titre de cet article, nous allons utiliser  la carte STM32 Nucleo pour contrôler un moteur pas à pas.



Matériel nécessaire:

1)  Un moteur pas à pas.  Il peut être bipolaire (4 fils) ou unipolaire (5 ou 6 fils), ça n'a pas vraiment d'importance.  De toute façon, nous ne brancherons que 4 fils.

2)  Une carte STM32 Nucleo.  J'ai utilisé le modèle d'entrée de gamme F030R8, mais n'importe laquelle fera l'affaire.



3)  Un double pont en H L293D qui servira d'intermédiaire entre le microcontrôleurs de la carte Nucleo et le moteur (la carte Nucleo enverra des instructions au L293D, qui se chargera de faire circuler un courant d'intensité suffisante dans le moteur).

4) Une alimentation pour votre moteur (pile, alimentation ATX, etc.).  Évitez d'alimenter votre moteur directement sur la pin 5 V de la carte, ça pourrait causer des problèmes en tirant trop de courant.



Comment on branche tout ça?

Le plus simple est d'illustrer le L293D, puisque tous les autres composants y sont reliés:

  •  Les pins 1, 9 et 16 du L293D sont branchées à la sortie 5V du STM32 Nucleo.
  • Les pins 2, 7, 10 et 15 sont branchées respectivement aux sorties D2, D3, D4 et D5 du STM32 Nucleo.
  • Votre moteur pas à pas est constitué de deux bobinages distincts.  Les fils aux extrémités du premier bobinage sont reliés aux pins 3 et 6 du L293D, et les fils aux extrémités du deuxième bobinage sont reliés aux pins 11 et 14 du L293D.  Si votre moteur est monopolaire, vous n'avez pas à brancher le ou les fils correspondant au centre des bobinage.
  • Les pins 4, 5, 12 et 13 du L293D représentent la masse.  Elles communiquent déjà entre elles, mais il est important d'y relier à la fois la masse (GND) du SMT32 Nucleo et la masse (borne négative) de la source d'alimentation du moteur.
  • La borne positive de l'alimentation du moteur est branchée à la pin 8 du L293D.

Le script mbed pour le STM32 Nucleo

Voici un petit script mbed à télécharger dans la carte STM32 Nucleo pour faire tourner le moteur (il effectuera d'abord 200 pas dans un sens, rapidement, puis 20 pas dans l'autre sens, beaucoup plus lentement).   Cet exemple ne nécessite aucune bibliothèque (sauf la bibliothèque de base de mbed), et il vous sera facile de le modifier pour qu'il réponde parfaitement à vos besoins.

Yves Pelletier (Twitter:  @ElectroAmateur)



mercredi 10 décembre 2014

Contrôle d'un moteur pas à pas par un Raspberry Pi

Cet article a été mis à jour le 15 novembre 2020 pour rendre le script compatible avec Python 3.

Aujourd'hui, je vous explique comment commander un moteur pas à pas au moyen d'un Raspberry Pi.

(Si vous cherchez plutôt à contrôler un simple moteur à courant continu à partir du Raspberry Pi, je vous suggère plutôt la lecture de cet article.)

En plus d'un Raspberry Pi et d'un moteur pas à pas (qu'on peut facilement trouver à l'intérieur d'une vieille imprimante), vous aurez besoin d'un L293D, qui est un circuit intégré spécialement conçu pour piloter un moteur, et d'une source d'alimentation continue pour le moteur (une pile, par exemple).

Le courant nécessaire pour faire tourner le moteur est trop intense pour que ce dernier puisse être directement branché aux broches GPIO du Raspberry Pi.  Le rôle du L293D sera donc, en gros, de faire circuler des courants intenses dans le moteur au moyen de la source d'alimentation, en conformité avec les instructions que lui fournira le Raspberry Pi.

Le moteur:  bipolaire ou unipolaire?

Votre moteur pas à pas peut comporter 4, 5 ou 6 fils.

S'il comporte 4 fils, il s'agit d'un moteur bipolaire.  Deux des fils sont branchées aux extrémités d'une même bobine (située à l'intérieur du moteur), et les deux autres fils sont aux extrémités d'une deuxième bobine.

Au moyen d'un multimètre, il est facile de déterminer quels fils partagent la même bobine.   Par exemple, un de mes moteurs est muni de 4 fils: jaune, orange, brun et noir. La résistance entre le fil jaune et le fil orange est de 31 ohms, et la résistance entre le fil brun et le fil noir est de 31 ohms également. La résistance est infinie pour toutes les autres combinaisons de fils (jaune-noir, jaune-brun, orange-noir, orange-brun). Je peux en déduire qu'une des bobines est alimentée par le fil jaune et le fil orange, et que l'autre bobine est alimenté par le fil brun et le fil noir.

Pour les moteurs unipolaires, les choses se compliquent un peu: chacune des deux bobines est munie de 3 fils: un à chaque extrémité, et un au centre. De plus, il est fréquent que le centre des deux bobines soit branché au même fil.

Par exemple: J'ai un moteur qui comporte 6 fils. La résistance entre le fil 1 et le fil 3 est de 70 ohms, la résistance entre le fil 1 et le fil 5 est de 140 ohms: ces trois fils partagent le même bobinage et le fil 3 est au centre. Un lien similaire existe entre les fils 2, 4 et 6.

Autre exemple: j'ai un moteur muni de 5 fils: blanc, jaune, noir, rouge, brun. La résistance est de 80 ohms entre le fil noir et n'importe quel autre fil, alors qu'elle est de 160 ohms pour toutes les autres paires de fil. J'en déduis que le fil noir est relié au centre des deux bobinages. Mais comment savoir quel fil (parmi jaune, rouge et brun) partage le même bobinage que le fil blanc? Il faudra faire des essais: si on branche les fils de façon incorrecte, le moteur ne tournera pas aussi bien qu'il le devrait (il s'agira alors de permuter les fils jusqu'à ce que le moteur fonctionne correctement).

Le circuit

Le L293D est capable de faire circuler le courant dans les deux sens à travers les bobinages:  il fonctionne donc à la perfection peu importe que votre moteur soit unipolaire ou bipolaire (en fait, si votre moteur est unipolaire, nous n'auront même pas à brancher le ou les fils qui communiquent avec le centre des bobinages:  seuls les 4 fils correspondant aux extrémités des bobinages seront nécessaires).

Voici le circuit (vous pouvez cliquer sur l'image pour l'agrandir...):


  • La pin 1 du L293D est branchée au 5 V du Raspberry Pi
  • La pin 2 du L293D est branchée à la pin GPIO 22 (board 15) du Raspberry Pi
  • La pin 3 du L293D est branchée à une extrémité du premier bobinage du moteur
  • La pin 4 ou la pin 5 du L293D est branchée à la masse (GND) du Raspberry Pi
  • La pin 6 du L293D est branchée à l'autre extrémité du premier bobinage du moteur
  • La pin 7 du L293D est branchée à la pin GPIO 23 (board 16) du Raspberry Pi
  • La pin 8 du L293D est branchée à la borne positive de l'alimentation du moteur (la borne négative de cette alimentation est reliée à la masse GND).
  • La pin 9 du L293D est branchée au 5 V du Raspberry Pi
  • La pin 10 du L293D est branchée à la pin GPIO 25 (board 22) du Raspberry Pi
  • La pin 11 du L293D est branchée à l'exrémité du deuxième bobinage du moteur
  • La pin 12 ou la pin 13 du L293D est branchée à la masse (GND) du Raspberry Pi
  • La pin 14 du L293D est branchée à l'autre extrémité du deuxième bobinage du moteur
  • La pin 15 du L293D est branchée à la pin GPIO 24 (board 18) du Raspberry Pi
  • La pin 16 du L293D est branchée au 5 V du Raspbery PI

Si votre moteur est unipolaire (5 ou 6 fils) le ou les fils relié(s) au centre des bobines n'ont pas à être branchés.


Programme en Python

Ce script vous demande le délai (en millisecondes) qui s'écoulera entre chaque pas du moteur.  Plus ce délai est long, plus le moteur tournera lentement.  Pour une rotation rapide, un  délai d'environ 10 millisecondes devrait faire l'affaire (si le délai est trop court, le moteur ne tourne pas).  Avec un délai de 1000 millisecondes, le moteur tourne d'un pas à chaque seconde, un peu comme la trotteuse d'une horloge.

Le programme vous demande ensuite le nombre de pas que devra effectuer le moteur.  Vous pouvez écrire un nombre positif pour une rotation en marche avant, et un nombre négatif pour une rotation en marche arrière.

-
-

Références:

Je me suis inspiré de cet article sur le site d'Adafruit, et de celui-ci sur le blog Raspberry Pi Spy.  Et au bout du compte, comme d'habitude, je n'ai fait qu'à ma tête.

Yves Pelletier (Twitter:  @ElectroAmateur)

mardi 9 décembre 2014

Choix d'un Raspberry Pi et de ses accessoires: quelques conseils

Cet article n'a pas la prétention d'être un guide universel pour l'achat d'un Raspberry Pi et de ses accessoires:  il s'agit simplement de quelques conseils et impressions basées sur mon expérience personnelle.

Nous n'achetons pas tous un Raspberry Pi pour les mêmes raisons. Si, tout comme moi, votre intention est d'utiliser principalement le Raspberry Pi pour contrôler des moteurs de robots et lire de capteurs branchées à ses broches GPIO, mes observations seront probablement plus pertinentes que si vous désirez d'abord et avant tout jouer à Minecraft, programmer des jeux avec Scratch,  ou transformer votre Raspberry Pi en "media center".

Commençons par les éléments qui sont strictement nécessaires:

La carte Raspberry Pi

Le Raspberry Pi que j'utilise est le modèle B.   S'il s'agit de votre premier Raspberry Pi et que votre intention est de l'utiliser pour expérimenter plusieurs applications différentes,  le modèle B+ semble un choix évident.

Le modèle A+ est moins cher, mais il me semble plus approprié pour des applications spécifiques, quand vous êtes certains de ne pas utiliser le port Ethernet, par exemple.  Ceci dit, je n'ai encore jamais eu l'occasion d'utiliser ce modèle alors je parle peut-être à travers mon chapeau.

L'alimentation

Il est également essentiel de vous procurer une alimentation continue de 5 V munie d'un connecteur micro-USB.  Assurez-vous que votre alimentation est en mesure de fournir au moins 1 ampère (2 ampères, c'est encore mieux).

Si vous disposez déjà d'une alimentation de labo ou d'une alimentation ATX récupérée d'un ordinateur et que votre seul problème est le connecteur micro-USB, il est parfaitement possible de bricoler un câble qui fera le lien entre votre alimentation et le Raspberry Pi.  Si par erreur vous réglez votre alimentation à plus de 5V, le Raspberry Pi est en principe protégé par un fusible réarmable qui reprendra ses caractéristique normales au bout de quelques dizaines de minutes (ou même quelques heures).

Il est même possible d'alimenter votre Raspberry Pi par ses broches GPIO (5 V et GND), mais cette méthode n'est pas recommandée aux âmes sensibles:  en cas de surtension, le Raspberry Pi ne dispose alors d'aucune protection!


Carte SD

La fondation Raspberry Pi recommande une carte SD de 8 Go, classe 4 (la classe indique la rapidité de la carte:  une carte de classe 2 aura tendance à ralentir les performances de votre Raspberry Pi).

Je ne vois aucun intérêt à payer plus cher pour acquérir une carte dans laquelle le système d'exploitation est déjà installé: ce système peut être téléchargé gratuitement sur le site web de la fondation Raspberry Pi, et son installation est très facile.

Poursuivons avec des accessoires qui peuvent être utiles, mais qui ne sont peut-être pas nécessaires (tout dépend de l'utilisation que vous souhaitez faire de votre Raspberry Pi).

Écran HDMI, Clavier USB, Souris USB

Tout ça sera nécessaire si vous désirez utiliser le Raspberry Pi comme ordinateur autonome, ce que je ne fais pratiquement jamais.

Un des avantages du Raspberry Pi, c'est sa petite taille.  Si vous y branchez en permanence un écran, un clavier et une souris, il se met soudainement à prendre beaucoup d'espace sur votre bureau.  Pour moi, c'est beaucoup plus pratique de commander le Raspberry Pi à distance à partir d'un autre ordinateur, en utilisant les protocoles SSH et VNC.  (Petit bémol: au grand désespoir de mon fils, il semble impossible de jouer à Minecraft sans qu'un moniteur soit directement branché au Raspberry Pi).

Ceci dit, lors du premier démarrage, l'écran, le clavier et la souris nous facilitent la vie lorsque nous effectuons les premiers réglages du Raspberry Pi.  Ma recommandation serait donc:  assurez-vous d'avoir accès à un moniteur HDMI, un clavier USB et une souris USB, que vous pourrez temporairement  "emprunter" d'un autre ordinateur lors du premier démarrage du Raspberry Pi, le temps d'effectuer de façon confortable les réglages qui vous permettront ensuite utiliser votre Raspberry Pi à distance.

Clé USB WI-FI ("dongle")

Pendant quelques mois, chaque fois que désirais utiliser mon Raspberry Pi, ce dernier devait être branché à mon routeur au moyen d'un câble ethernet.  C'était vraiment irritant, car mon routeur est situé loin de l'endroit où je fais habituellement de l'électronique.  Depuis que je me suis procuré ce petit dongle Wi-Fi, je peux contrôler mon Raspberry Pi à partir de n'importe quel ordinateur de mon réseau domestique, peu importe où il se trouve. 

En ce qui me concerne, cet accessoire est essentiel, bien avant un clavier ou un moniteur.


Connecteurs pour les broches GPIO

J'ai utilisé trois méthodes:  un câble en nappe "fabrication maison" qui reproduisait sur une breadboard la même configuration de broches que sur le Raspberry Pi, des câbles "mâle-femelle" permettant de relier individuellement chaque broche GPIO à la breadboard, et finalement un "GPIO Extension Board" comme celui qui est illustré ci-contre.

En ce qui me concerne, l'irritant principal du Raspberry Pi est la numérotation des broches:  puisque ces dernières ne sont pas disposées dans l'ordre de leur numérotation GPIO, les branchements deviennent beaucoup plus simples si le numéro des broches est clairement indiqué sur la breadboard.

Voilà donc en principe un avantage pour le "GPIO Extension Board":  les broches sont clairement identifiées, et ordonnées de façon logique... sauf que ses concepteurs ont eu la drôle d'idée d'utiliser une troisième forme de numérotation!  Ainsi, la broche numéro 11 (en numérotation "board") qui est aussi la GPIO 17 (en numérotation BCM) porte le nom "P0" sur la breadboard!

Néanmoins, la solution qui semble répondre le mieux à mes besoins est une breadboard reliée en permanence au Raspberry Pi par l'entremise d'un "GPIO extension board" et d'un câble en nappe.

Superflu

Boîtier

Je ne sais pas pourquoi on insiste tellement pour essayer de vous vendre un boîtier pour le Raspberry Pi.  Est-ce que vous mettez votre Arduino dans un boîtier, vous?

Si vous avez l'intention d'utiliser les broches GPIO de votre Raspberry Pi, le boîtier va  rendre leur accès plus difficile.

J'ai acheté un boîtier, mais je ne l'utilise plus:  lorsque le Raspberry Pi se trouve dans le boîtier, il n'y a pas assez d'espace pour brancher mon câble en nappe sur les broches GPIO!



Yves Pelletier (Twitter:  @ElectroAmateur)