samedi 21 mars 2015

Transformation d'une voiture radiocommandée en robot mobile

Les enfants adorent les voitures radiocommandées...pendant quelques jours.  Ensuite, ils finissent par s'en désintéresser, les piles tombent à plat et le jouet est oublié dans un coin, jusqu'au jour où les parents profitent d'un vide-grenier pour s'en débarrasser...à un prix vraiment très modique, puisqu'on ne retrouve plus la fichue télécommande...

Et c'est ici qu'intervient le bidouilleur qui aime bien fabriquer des robots:  un véhicule rc sans sa télécommande, ça se transforme très facilement en plateforme robotique!

Oui, bien sûr, il existe des plateformes robotiques spécialement conçues à cette fin, mais c'est beaucoup plus cher et, franchement, quand vous achetez des trucs tous faits, vous vous privez d'une grande partie du plaisir!

Types de propulsion / direction

Les voitures rc ne sont pas toutes identiques.  Un type très courant comporte un moteur DC qui fait tourner l'ensemble de l'essieu arrière (pour la propulsion du véhicule) et un servomoteur qui incline les roues avant (pour la direction).  Je ne vois pas de raison qui empêcherait un tel véhicule d'être transformé en robot autonome, mais je n'ai pas encore essayé. 

Dans un autre type de véhicule, chaque roue arrière est contrôlée individuellement par son propre moteur.  On peut donc faire tourner l'auto en réglant les deux moteurs à des vitesse de rotation différente (le véhicule peut même tourner sur place si les deux roues arrières tournent en sens contraire l'une par rapport à l'autre).  Un avantage important de ce type de véhicules, c'est que les plateformes robotiques conventionnelles utilisent précisément ce type de propulsion/direction, ce qui permet de trouver facilement des programmes prêts à l'utilisation, que nous n'auront même pas besoin de modifier.

Pour ce projet je me suis procuré pour la modique somme de $2,99 (environ 2 €) un véhicule "Marvel Superhero Squad" ayant de toute évidence appartenu à Iron Man.

Il s'agit d'un modèle comportant deux moteurs:  un premier moteur fait tourner des deux roues situées du côté gauche du véhicule (la roue avant et la roue arrière tournent ensemble grâce à un système d'engrenages), et un deuxième moteur fait tourner les deux roues situées du côté droit.

J'avais choisi ce modèle en bonne partie parce que j'étais intrigué par ce mécanisme de propulsion à 4 roues motrices (qui peut s'avérer intéressant sur un terrain accidenté) mais, comme nous ne le verrons plus loin, ça s'est avéré un inconvénient plutôt qu'un avantage.

On démonte!
On commence par retirer la carrosserie, qu'on pourra toujours remettre en place plus tard, si on veut. À l'intérieur, on voit immédiatement la carte de contrôle, qu'on retire puisqu'on la remplacera par un Arduino (ou tout autres microcontrôleur de notre choix), qu'on pourra programmer à notre guise.





On garde tout le reste tel quel:  le châssis, les deux moteurs (bien visibles sur la photo), les roues ainsi que les engrenages qui permettent au roues de tourner beaucoup plus lentement que le moteur.  Avant d'aller plus loin, c'est une bonne idée de vérifier que les moteurs fonctionnent encore.


Vue d'en dessous:  le compartiment pour 4 piles AA pourra être utilisé tel quel, ainsi que l'interrupteur marche/arrêt.   Dans ce véhicule, toutefois, les piles avaient coulé et les connecteurs étaient recouverts d'une croûte non-conductrice.  Un nettoyage avec un coton tige imbibé de vinaigre a fait des miracles (comme leur nom l'indique, les piles alcalines sont faites d'un électrolyte alcalin, donc on le neutralise avec un acide).


Ajout d'un cerveau

Nous espérons que notre robot sera beaucoup plus intelligent qu'un stupide jouet téléguidé, il faut donc lui ajouter un cerveau.

J'ai choisi de contrôler mon robot avec un Arduino Uno et un L293D, mais il existe bien sûr bien d'autres options.  Je préfère toujours une alimentation distincte pour les moteurs et pour l'Arduino:  donc les 4 piles AA situées dans le réceptacle d'origine serviront à alimenter les moteurs, alors que l'Arduino sera alimenté par une batterie 9 V branchée à son jack d'alimentation.


Selon vos préférences, le circuit peut être proprement soudé pour en faire un produit fini.  Si votre robot est destiné à de multiples expérimentations, une petite breadboard peut être plus appropriée (c'est ce que j'ai fait ici, avec un shield de prototypage monté sur l'Arduino).


Un premier test, sans capteurs

On peut maintenant vérifier si tout fonctionne correctement, en téléchargeant dans l'Arduino un petit sketch qui fera avancer, reculer et tourner le robot.  C'est l'occasion de se rendre compte, par exemple, qu'un des moteurs a été branché à l'envers (facile à rectifier, en inversant deux fils), ou qu'un des moteurs tourne un peu plus vite que l'autre (un peu plus irritant, mais on peut modifier le sketch en conséquence).


C'est à cette étape que j'ai réalisé que mon intrigant mécanisme de propulsion à 4 roues motrices faisait en sorte que mon robot était incapable d'effectuer un virage:  si la vitesse de rotation des deux roues de gauche était différente de celle des deux roues de droites, le robot continuait quand même en ligne droite.  Si le sens de rotation des deux paires de roues était opposés, le véhicule demeurait immobile au lieu de tourner sur lui-même.

Ma solution:  atténuer au maximum l'adhérence des deux roues avant afin qu'elle glissent lors des virage.  J'ai donc recouvert les deux roues avant de ruban gommé lisse.  Maintenant ça fonctionne correctement, mais ma conclusion est que tout est bien mieux quand les moteurs ne font tourner que les roues arrière!

Ajout de capteurs

Il ne reste plus qu'à ajouter au robot des capteurs qui lui permettront d'interagir avec son environnement:  un ou plusieurs capteurs à ultrasons pour en faire un robot éviteur d'obstacles, des LEDs et des photorésistances pour le transformer en robot suiveur de lignes, une paire de photorésistances pour en faire un robot suiveur de lumière.  On peut aussi le contrôler à distance avec un joystick ou une télécommande de téléviseur.

Yves Pelletier (Twitter: @ElectroAmateur)

samedi 7 mars 2015

Livre: Les capteurs pour Arduino et Raspberry Pi

Les capteurs pour Arduino et Raspberry Pi (tutoriels et projets)
par Tero Karvinen,  Kimmo Karvine et Ville Valtokari
Éditions Dunod,  2014, 304 pages

Accueillons avec enthousiasme la publication de cette traduction en français du livre "Make:  Sensors, Projets and experiments to measure de world with Arduino and Raspberry Pi" * .

Tel que le titre l'indique, ce livre a pour objectif d'expliquer comment utiliser un appréciable échantillonnage de capteurs avec l'Arduino et le Raspberry Pi.

Ces capteurs sont classés en catégories:
  • mesure de distances (capteur à ultrasons HC-SR04, capteur à infrarouge, oeil composé infrarouge)
  • détection de fumées et de gaz (les différents capteurs de la série MQ)
  • perception du toucher (bouton poussoir, microrupteur, potentiomètre, capteur de toucher capacitif QT113, FlexiForce)
  • détection du mouvement (capteur d'inclinaison, capteur de vibration, encodeur rotatif, capteur infrarouge passif (PIR))
  • détection de lumière (capteur de flamme KY-026, photorésistance, capteur de suivi de ligne, capteur de couleur)
  • mesure de l'accélération (accéléromètre MX2125, gyroscope, centrale inertielle MPU 6050, Nunchuck Wii)
  • mesures électriques (mesure de tension et de courant par l'AttoPilot, capteur à effet Hall KY-024,l boussole-accéléromètre LMS303)
  • détection du son (microphone à électret)
  • mesures météorologiques (capteur de température LM35, capteur d'humidité DHT11, capteur de pression atmosphérique GY-65, capteur d'humidité de sol, papier électronique)
L'approche proposée par les trois auteurs finlandais est efficace et va droit au but:  pour chaque capteur, on présente un schéma "Fritzing" des connexions à l'Arduino, un sketch Arduino minutieusement commenté,  un schéma des connexions au Raspberry Pi, et un script en python pour le Raspberry Pi (la plupart des scripts en python nécessitent toutefois l'utilisation de la bibliothèque botbook_gpio écrite par les auteurs du livre, un choix qui me semble quelque peu discutable).

On retrouve aussi, à la fin de chaque chapitre, la description d'un projet plus élaboré:  envoi d'un courriel en cas de fumée, une sonnette hantée (elle sonne avant qu'on ait eu le temps d'y toucher...), un dôme caméléon qui prend la même couleur que la surface sur laquelle on l'a déposé,  une main robotisée contrôlée par le nunchuck wii, etc.


Je ne recommanderais probablement pas ce livre comme première lecture pour quelqu'un qui désire effectuer ses premiers pas avec l'Arduino ou le Raspberry Pi:  je le vois plutôt comme un bon livre de référence pour quelqu'un qui maîtrise déjà quelques bases de ces deux plate-formes (les utilisateurs de niveau intermédiaire y trouveront aussi leur compte:  j'ai personnellement appris beaucoup de choses à la lecture de ce livre).

Il ne s'agit pas d'un guide conçu pour être lu dans l'ordre, dont les sujets seraient classés en niveau croissant de difficulté:  vous consultez les sections qui vous intéressent au moment où vous en avez besoin (par exemple, l'utilisation d'un bouton poussoir ou d'un potentiomètre, généralement apprise très tôt par les débutants, est traitée en plein milieu du livre, dans la partie sur la détection du toucher).

Afin de maintenir le prix de vente sous la barre des 30 euros, les éditions Dunod ont choisi de ne pas inclure dans cette version française le chapitre 9 de la version originale.  C'est dommage, biens sûr, puisque ce chapitre consacré à la vérification d'identité aurait fourni de précieuses informations sur l'utilisation d'un clavier numérique (keypad), d'un scanner d'empreintes digitales GT-511C3, et un d'un lecteur de carte RFID (ELB149C5M).

Les premières pages du livre peuvent être consultées ici.

Yves Pelletier (Twitter: @ElectroAmateur)

* :  À ne pas confondre avec le livre "Make: Getting Started with Sensors: Measure the World with Electronics, Arduino, and Raspberry Pi", par les mêmes auteurs, chez le même éditeur, mais qui est beaucoup moins complet.

mercredi 4 mars 2015

Construction d'un détecteur de fumée optique rudimentaire

Aujourd'hui, je vous explique comment j'ai fabriqué un appareil très simple qui est capable de détecter la présence de fumée.  Je précise immédiatement qu'il s'agit uniquement d'une petite expérience scientifique visant a mieux comprendre comment ça fonctionne:  pour vous sauver la vie en cas d'incendie, vous devez utiliser un véritable détecteur de fumée certifié et non le bidule que je vous propose de bricoler ici!


Il existe principalement deux types de détecteurs de fumée:  les détecteurs par ionisation et les détecteurs optiques.  Puisque les détecteurs par ionisation nécessitent l'utilisation d'une substance radioactive qu'on trouve difficilement à la quincaillerie de votre quartier, mon détecteur de fumée sera bien sûr de type optique.

Principe de fonctionnement

La fumée diffuse la lumière; ce que ça signifie, c'est qu'elle réémet dans toutes les directions la lumière qu'elles reçoit.  C'est pour cette raison qu'un rayon laser qui aurait été invisible dans de l'air pur devient visible en traversant de la fumée:  lorsque la lumière du laser rencontre une particule présente dans la fumée, elle est réémise dans une direction aléatoire, et une partie de cette lumière atteint vos yeux.

Le détecteur de fumée optique est constitué d'une source de lumière et d'un détecteur.  En situation normale, peu ou pas de lumière n'atteint le détecteur, puisque ce dernier n'est pas directement placé dans le faisceau lumineux.  Mais si de la fumée entre dans le détecteur, une partie de la lumière sera diffusée vers le capteur.

Comme source de lumière, j'ai utilisé une LED bleue, car le bleu est plus diffusé que le vert ou le rouge (c'est d'ailleurs pour cette raison que le ciel est bleu!).  Puisque je l'alimentais avec une tension de 5 V, j'ai protégé la LED avec une résistance de 120 ohms.

Comme détecteur, j'ai utilisé une photorésistance (un phototransistor aurait été parfaitement approprié aussi).  C'est le modèle KE-10720 fabriqué par Waitrony, mais je ne crois pas que ça ait une grande importance.

J'ai placé la LED à l'extrémité d'un tube de plastique transparent afin qu'elle éclaire l'intérieur de ce tube.  J'ai installé la photorésistance à l'extrémité d'un deuxième tube de plastique, et j'ai placé les deux tubes à angle droit l'un par rapport à l'autre.


J'ai recouvert le tout de ruban gommé noir pour éviter des interférences causées par l'éclairage ambiant.




En absence de fumée, la photorésistance avait une valeur d'environ 800 kΩ.  En faisant pénétrer un peu de fumée à l'intérieur du tube (au moyen d'une simple allumette que je venais d'éteindre) la résistance passait en-dessous des 200 kΩ, pour graduellement remonter à sa valeur initiale pendant que la fumée se dissipait. 


Maintenant qu'on a constaté que le concept fonctionne, on peut toujours, si on le désire, utiliser un Arduino ou un autre microcontrôleur pour actionner une alarme visuelle et/ou sonore lorsque de la fumée est détectée.

Voici ci-contre le circuit que j'ai utilisé; un haut-parleur (ou un piézo) est branché à la pin 10 et sera actionné par la fonction "Tone".  J'ai placé ma photorésistance en série avec une résistance fixe de 330 kΩ (cette valeur n'a pas à être précise:  choisissez une résistance qui se situe quelque part entre les deux valeurs extrêmes de votre photorésistance).  Et la LED est alimentée par la sortie 5 V de l'Arduino, avec une résistance de protection de 120 Ω.

Le sketch est présenté ci-dessous.  Si le seuil est correctement réglé,  une simple allumette qu'on vient d'éteindre et qu'on place sous l'ouverture du tube déclenche l'alarme presque instantanément.  Cette alarme retentit pendant plusieurs dizaines de secondes, le temps que la fumée à l'intérieur du dispositif se soit dissipée.





Yves Pelletier (Twitter: @ElectroAmateur)

lundi 2 mars 2015

Observer la charge et la décharge d'un condensateur avec un Arduino

Dans cet article, je vous propose une petite expérience qui vous permettra d'utiliser un Arduino afin de tracer expérimentalement les courbes de la tension aux bornes d'un condensateur pendant qu'il se charge et pendant qu'il se décharge.

Pour commencer, un brin de théorie: un condensateur est constitué de deux armatures conductrices séparées par un isolant.   À moins que quelque chose tourne mal, le courant électrique ne peut donc pas traverser un condensateur, à cause de l'isolant qui sépare les deux armatures conductrices.

L'animation ci-dessous montre ce qui se passe lorsqu'un condensateur est chargé au moyen d'une source de tension continue.  Au départ, les armatures du condensateur sont neutres et comportent donc la même quantité de protons et d'électrons.  La pile "pompe" des électrons pour les obliger à quitter l'armature qui est branchée à sa borne positive, et les déplace jusqu'à l'armature branchée à sa borne négative (les protons, solidement arrimés au noyau des atomes, demeurent en place).


Au début, le déplacement des électrons représente une tâche facile:  il s'agit d'arracher un électron à une armature neutre, et à le déplacer vers une autre armature neutre.  Mais à mesure que le condensateur se charge, il devient de plus en plus difficile pour la pile d'arracher des électrons à l'armature positive (qui attire les électrons), et les obliger à se déplacer vers l'armature négative (qui repousse les électrons).  Pour cette raison, le mouvement des charges est de plus en plus lent à mesure que le condensateur se charge.  Le graphique de la charge (en coulombs) accumulée sur les armatures prend la forme d'une exponentielle qui plafonne à une valeur maximale,  Il en est de même pour la tension aux bornes du condensateur, puisque cette dernière est proportionnelle à la charge.  Quant au courant qui circule dans le circuit, il décroit de façon exponentielle (puisqu'il représente le début de charges, qui est de plus en plus faible).

Si on permet ensuite à notre condensateur de se décharger à travers une résistance (animation ci-dessous), des électrons se déplacent à travers le circuit jusqu'à ce que les armatures retrouvent leur neutralité initiale.  La charge et le courant (ainsi que la tension), diminuent de façon exponentielle: au début, les électrons excédentaires de l'armature négative se repoussent fortement (et sont fortement attirées par l'autre armature qui porte une grande charge positive).  À mesure que le condensateur se décharge, ces forces d'attraction et de répulsion diminuent, et le mouvement des électrons ralenti.


Voilà pour la théorie.  Mais si on pouvait observer nous-mêmes ces croissances et décroissances exponentielles, ce serait encore mieux...  Ça tombe bien:  si vous disposez d'un Arduino, c'est plutôt facile!

Le circuit pourrait difficilement être plus simple:  il est constitué d'un condensateur de 1 µF en série avec une résistance de 100 kΩ.




La borne négative du condensateur est reliée à la masse (GND), alors qu'à l'autre extrémité, la résistance sera reliée à la pin numéro 8 de l'Arduino:  en réglant cette pin à 5 V, le condensateur se chargera, alors qu'il se déchargera lorsque la pin sera réglée à 0 V.  Il ne reste plus qu'à mesurer le potentiel de la borne positive du condensateur, en branchant cette dernière à l'entrée analogique A0 de l'Arduino.

Voici le sketch:  on commence par mettre la pin 8 à 0 V, pour s'assurer que le condensateur et complètement déchargé.  Ensuite, on met à la pin 8 à 5 V, et on affiche la tension du condensateur dans le moniteur série à toutes les 10 millisecondes pendant qu'il se charge.  Lorsque le condensateur est complètement chargé, on met la pin 8 à 0 V et on affiche encore dans le moniteur série la tension du condensateur à toutes les 10 millisecondes, jusqu'à ce qu'il soit complètement déchargé.


La série de mesures ne se fait qu'une seule fois (une charge complète, suivie d'une décharge complète).  Appuyez sur le bouton reset de l'Arduino si vous désirez reprendre une nouvelle série de mesures.




Il est facile de copier les valeurs numériques affichées dans le moniteur série pour les traiter dans un tableur comme Excel ou LibreOffice Calc.  Après avoir converti les résultats en volts et en seconde, voici les graphiques obtenus.



Notez qu'avec un condensateur de 1 µF et une résistance de 100 kΩ, la constante de temps du circuit est de 0,1 seconde, ce qui est confirmé par les graphiques (à 0,1 s du début de la décharge, la tension est à 63% de son niveau maximal, alors qu'à 0,1 s de début de la décharge, la tension est à 37% de son niveau maximal).  Si vous utilisez un condensateur dont la capacité est plus grande, la constante de temps sera plus grande (donc le condensateur prendra plus de temps à se charger et à se décharger).


Yves Pelletier (@ElectroAmateur)