jeudi 27 décembre 2012

Réparation d'un aspirateur Electrolux Oxygen

Petit problème avec mon aspirateur:  j'ai tiré un peu trop fort sur le cordon rétractable, à un point tel qu'il s'est débranché à l'intérieur de l'appareil.  Résultat, évidemment:  l'appareil n'étant plus alimenté, il ne fonctionnait plus...

Bon, pas de panique:  il s'agit de démonter l'aspirateur pour accéder à l'endroit où le cordon s'est débranché... mais encore faut-il trouver comment s'y prendre, parce que les appareils conçus pour être facilement démontés par monsieur tout le monde, c'est chose du passé.    Pourquoi les multinationales ont-elles tellement peur que le commun des mortels répare lui-même l'appareil dont il est le propriétaire?  Un peu plus et on nous recommanderait d'apporter l'aspirateur à un réparateur certifié chaque fois qu'on a besoin de changer le sac vidange!  Existe-t-il un puissant lobby des réparateurs d'aspirateurs?


Alors oublions tout de suite le site web du fabricant, qui ne nous sera d'aucune utilité.  Tout ce que j'ai trouvé concernant la façon de démonter mon modèle en particulier, c'est ceci.

Première étape: on peut facilement retirer le panneau argenté situé sur le dessus de l'appareil (là où des voyants s'allument en bleu quand l'appareil est branché):  il s'agit de soulever un coin du panneau en se servant d'un tournevis à tête plate en guise de levier.

Lorsque le panneau argenté est retiré, nous avons accès à deux vis de type "Torx" qui permettent de retirer le couvercle orange (peu de gens disposant d'un tournevis torx à la maison, ça me semble une autre tentative de décourager les particuliers à ouvrir l'appareil.)  Sur la photo ci-dessous, on peut voir ces deux vis après qu'elles aient été désserrées.  Attention:  j'ai eu beaucoup de difficulté à réinstaller ce couvercle de la bonne façon lors du remontage!



(Pour la suite, j'ai malheureusement négligé de prendre des photos, désolé!)

Une fois le couvercle orange retiré, on peut voir un circuit électronique (mystérieusement baptisé "SUMO board") comportant un fusible qu'il faut parfois remplacer.  Bien sûr, ce fusible a été soudé à la carte, pour que le propriétaire de l'appareil ne soit pas capable de le changer lui-même.  C'est tellement dangereux, changer un fusible...  Dans mon cas, sans surprise, le fusible était impeccable.


Le retrait du couvercle orange donne accès à deux autres vis torx situées à l'arrière de l'appareil.  Elles sont situées au fond d'un tube assez profond (votre tournevis torx devra avoir une tige assez longue).  Il faut également dévisser les deux vis torx situées à l'avant de l'appareil, sur la bordure grise, et deux autres vis torx  situées au fond du compartiment du sac de vidange.  Après avoir dévisser ces 6 vis, j'ai enfin pu séparer l'aspirateur en deux parties et accéder au bas de l'appareil, où se trouve la bobine qui enroule le cordon rétractable.

Et effectivement, le cordon s'était débranché là où il doit faire contact avec l'axe de la bobine:  le remettre en place n'a été qu'une formalité.

Ceci dit, avec un appareil mieux conçu, j'aurais pu accéder à cette bobine sans être obligé de tout démonter.  Un fabriquant moins paranoïaque aurait mis à ma disposition, sur son site web, une vidéo montrant de façon détaillée la façon correcte de s'y prendre.

Voilà!  Je m'excuse auprès du réparateur certifié le plus proche de chez moi, pour l'argent qu'il n'a pas eu.  Maintenant, veuillez m'excuser:  je dois aller passer l'aspirateur...

Yves Pelletier (Twitter: @ElectroAmateur)

mardi 25 décembre 2012

Stellaris Launchpad et Energia

Comme je l'avais mentionné en septembre,  j'avais profité du prix de lancement de $5 du Stellaris Launchpad de Texas Instruments parce qu'il s'agissait d'une aubaine incroyable (le prix est maintenant de $13, livraison incluse, ce qui demeure une excellente affaire à mon avis).   N'étant pas un fan de Code Composer Studio (principal logiciel proposé par TI pour programmer leurs produits), je croisais déjà les doigts pour que les concepteurs du logiciel Energia me permettent de programmer le Stellaris Launchpad à la manière d'un Arduino, tout comme ils l'avaient fait pour le MSP430 Launchpad.

Mon souhait s'est réalisé le 6 décembre dernier, lors de la sortie de la version 0101E0009 d'Energia, qui supporte maintenant le Stellaris Launchpad.

En plus d'installer la version la plus récente d'Energia, il faut bien entendu installer les pilotes du Stellaris Launchpad disponibles ici.  Dans mon cas, pour une raison que j'ignore, ma première tentative d'installation a échoué, mais la deuxième a fonctionné.

Lorsqu'on branche le Stellaris Launchpad à l'ordinateur, un code préchargé s'exécute:  une LED RGB change de couleur de façon aléatoire.

Après avoir lancé Energia et sélectionné le port série approprié, je n'ai eu aucune difficulté à charger l'habituel exemple "Blink" (résultat:  l'élégant changement de couleur de la LED RGB a été remplacé par le clignotement monotone d'une LED rouge!).

Si vous désirez en savoir plus, je vous réfère au blog en français "Arduino Chipkit Launchpad", dont l'auteur a visiblement une longueur d'avance sur moi.  Voir en particulier son test de performance (comparaison avec Arduino Uno et MSP430 Launchpad), et un sketch Energia pour redonner au Stellaris Launchpad son comportement initial (LED RGB changeant de couleur de façon aléatoire).


Yves Pelletier (Twitter: @ElectroAmateur)


lundi 3 décembre 2012

Cours en ligne: Control of Mobile Robots

Coursera offrira à partir du 28 janvier 2013 le cours "Control of Mobile Robots" par Magnus Egerstedt, professeur au Georgia Institue of Technology à Atlanta.  Ce cours de régulation ("control theory") porte sur les façon de faire en sorte que les robots se déplacent d'une façon efficace, sécuritaire et prévisible:  comment s'assurer qu'un groupe de robots roulants évitent d'entrer en collision les uns avec les autres en se dirigeant vers leur destination, comment faire en sorte que les robots volants suivent leur trajectoire malgré les perturbations et comment contrôler des robots bipèdes.

Préalables demandés:  connaissances en calcul différentiel et intégral et en algèbre linéaire, et bien sûr une certaine aisance en anglais.

On peut s'inscrire ici (comme tous les cours offerts par Coursera, c'est totalement gratuit).

Pendant que j'y suis, Coursera annonce également les cours suivants:  How Things Work 1 (principes de physique enseignés au moyen d'appareils utilisés dans la vie de tous les jours),  Digital Signal Processing (École Polytechnique Fédérale de Lausanne), Fundamentals of Electrical Engineering (Rice University), MOS Transistors (Columbia University)...

 

Yves Pelletier (Twitter: @ElectroAmateur)

samedi 1 décembre 2012

Des modules pour accompagner l'Arduino

Lorsqu'on expérimente avec un Arduino (ou n'importe quel autre microcontrôleur), on doit toujours lui ajouter un certain nombre de composants électroniques comme des LEDs, des boutons poussoirs, etc.  On peut bien sûr monter chaque circuits sur un breadboard, mais on finit par se rendre compte que certains circuits de base se répètent, et qu'on peut sauver beaucoup de temps si on dispose de morceaux de circuits déjà montés de façon permanente.


Module de LEDs

Les LEDs, par exemples, sont toujours branchées en série avec une résistance de protection, entre une sortie de l'Arduino et la mise à la terre.  L'an dernier, j'avais préparé une certaine quantité de LEDs déjà soudées à une résistance.


Elles se sont avérées assez pratiques, mais j'aime encore mieux ce module constitué de 8 LEDs en série avec une résistance de 150 Ω.  Un seul fil suffit pour relier toutes les résistances au GND de l'Arduino, il ne reste plus qu'à relier chaque LED à sa sortie de l'Arduino.





Module de boutons poussoirs

Ce module comporte 6 boutons poussoirs associés à leur résistance "pull-up".  Une paire de fils permet d'alimenter la totalité des 6 boutons (au GND et au 5 V de l'Arduino), il ne reste qu'à ajouter un fil par bouton, pour le relier à une entrée de l'Arduino.  J'ai l'intention d'en construire un autre avec encore plus de boutons...


Voyez cette version améliorée:  un module comportant 6 boutons sans rebond.

Module de potentiomètres

Une paire de fils permet d'alimenter l'ensemble des 3 potentiomètres.  Il ne reste qu'à transmettre à l'Arduino le signal de chaque potentiomètre au moyen d'un fil supplémentaire.








Module abaisseur de tension (5V - 3V)

Lorsqu'on désire brancher à l'Arduino un module fonctionnant sous 3,3 V, on a parfois besoin de plusieurs diviseurs de tension:  ce module en comporte 9, qui partagent tous la même mise à la terre.  Donc un seul fil pour brancher le module au GND de l'Arduino. (Si vous vous interrogez sur l'aspect varié des résistances présentes sur la carte:  c'est quelles ont toutes été récupérées dans différents appareils).


Dans certains cas, toutefois (par exemple pour un lecteur de carte SD, ou d'autres périphériques SPI), la rapidité du signal à transmettre nous oblige à abaisser le signal au moyen d'un circuit intégré spécialement conçu pour accomplir cette tâche:  le 4050.

Adapteur en Y

Finalemement un petit adapteur est souvent utile lorsque j'ai besoin de brancher plusieurs modules sur l'unique sortie 5 volts de l'Arduino:  il s'agit de 3 connecteurs femelles reliés au même connecteur mâle.



Yves Pelletier (Twitter: @ElectroAmateur)

jeudi 29 novembre 2012

Lecture de fichiers mp3 avec Arduino et VS1053 (première exploration)

Note: Vous devriez plutôt lire cet article plus récent et plus complet, sur le même sujet:


Voici un résumé de mes premières explorations d'un module MP3 VS1053 (ou VS1003) fabriqué en Chine par LCSoft Studio et vendu sur eBay pour une douzaine de dollars environ.   Lorsqu'il est piloté par un microcontrôleur, le circuit intégré VS1053 permet de lire un grand nombre de formats de fichiers musicaux (Ogg Vorbis, MP3, AAC, WMA, FLAC, MIDI):  on peut tout de suite saliver en imaginant une chaîne stéréo de fabrication maison, réalisée au moyen d'un Arduino et de notre propre amplificateur stéréo...  De plus, le module est muni d'un petit microphone permettant, au besoin, d'enregistrer du son.

Je n'en suis pas tout à fait là, toutefois.  Dans un premier temps, je me suis mis à la recherche d'un peu de documentation afin de savoir comment brancher le module à l'Arduino.   Puisqu'il s'agit d'un périphérique "SPI", nous savons déjà que les sorties 11, 12 et 13 de l'Arduino seront sollicitées.

Même si le module demande une alimentation de 5 volts, il semble préférable (et peut-être même nécessaire, pour éviter tout dégât regrettable) que l'Arduino lui envoie des signaux numériques de 3,3 volts:  il faut donc prévoir 5 diviseurs de tension constitués, par exemple, d'une résistance de 2,2K et d'une autre de 3,3K (un diviseur de tension n'est toutefois pas pertinent lorsque le signal va du module vers l'Arduino).

Voici donc le détail des branchements:

VS1053 5 V → Arduino 5 V *
VS1053 DGND → Arduino GND
VS1053 XDCS → diviseur de tension → Arduino 6
VS1053 DREQ → Arduino 7
VS1053 XRST → diviseur de tension → Arduino 8
VS1053 XCS → diviseur de tension → Arduino 9
VS1053 SCK → diviseur de tension → Arduino 13
VS1053 MOSI → diviseur de tension → Arduino 11
VS1053 MISO →  Arduino 12

* Les deux entrées 5 V du module VS1053 communiquent ensemble:  une seule d'entre elles est suffisante.

Vous pouvez consulter ici un schéma montrant clairement comment disposer les diviseurs de tension (toutefois, ce circuit comporte aussi un lecteur de carte SD et les sorties utilisées sur l'Arduino ne sont pas les mêmes).


Finalement, la partie logicielle:  j'ai trouvé cette librairie conçue par Andy Karpov.  Après l'avoir installée dans le dossier "libraries",  j'ai uploadé dans l'Arduino le sketch d'exemple "vs1003_hello":  lorsqu'on branche une paire d'écouteurs dans le jack du module mp3, on entend le mot "hello" répété sans arrêt (le fichier mp3 se trouve à l'intérieur même du sketch).

Ça fonctionne!   Mais ça devient vite irritant, et on espère un peu mieux d'un module à $12...mais ce sera pour la prochaine fois!

Yves Pelletier (Twitter: @ElectroAmateur)

dimanche 18 novembre 2012

Contrôle d'un moteur pas à pas avec un ULN2003

Voici une petite marche à suivre pour contrôler un moteur pas à pas unipolaire au moyen d'un Arduino et d'un ULN2003.

L'ULN2003 regroupe sur un même circuit intégré 7 transistors darlington, ce qui permet d'alimenter un moteur avec un courant beaucoup plus intense que ce que peut tolérer un microcontrôleur comme l'Arduino. Des modules à base d'ULN2003 sont vendus sur eBay pour moins de $2 (il s'agit de faire une recherche avec les mots clés "stepper motor driver board UL2003").

Commençons par une mise au point importante:  l'ULN2003 fonctionne très bien pour des moteurs pas à pas unipolaires (ceux qui sont munis de 5 ou 6 fils), mais il n'est pas du tout conçu pour piloter des moteurs pas à pas bipolaires (ceux qui ne comportent que 4 fils).  Pour un moteur bipolaire, il faudra utiliser un autre circuit intégré, comme par exemple le L293D ou le L297. Si j'avais su ça avant, je n'aurais pas perdu quelques heures à tenter sans succès de faire tourner un moteur bipolaire avec ce module!

Quatre connecteurs situés du côté gauche de la carte permettent de brancher les sorties numériques de l'Arduino.  Si vous désirez utiliser les exemples fournis avec l'environnement de programmation Arduino, vous branchez la sortie 8 de l'Arduino à l'entrée "IN1", la sortie 9 à "IN2, la sortie 10 à "IN3", et la sortie 11 à "IN4".

Les connecteurs situés dans le bas de la carte, juste en dessous de l'ULN2003 servent à brancher la source de tension qui alimentera le moteur:  pas question d'utiliser la sortie 5 volts de l'Arduino car le moteur risquerait de demander beaucoup trop de courant!  On suggère ici de 5 à 12 volts, même si l'ULN2003 peut en principe tolérer jusqu'à 30 V (en dépassant 12 V, je suppose qu'on risquerait de griller les LEDs indicatrices présentes sur la carte).

Il ne reste plus qu'à brancher le moteur, ce qui n'est pas tout à fait évident si votre moteur provient d'une vieille imprimante et que vous ne disposez d'aucune documentation à son sujet.  Au moyen d'un multimètre, vous pourrez probablement identifier le fil qui est commun aux deux bobines:  c'est celui qui présente la plus faible résistance électrique par rapport aux autres fils.

Par exemple, le moteur que j'ai utilisé (un moteur Mitsumi pris dans une vieille imprimante StyleWriter d'Apple) comporte 5 fils:  blanc, jaune, noir, rouge et brun.   La résistance entre le fil noir et n'importe lequel des autres fils est de 80 Ω, alors que la résistance pour toutes les autres paires (excluant le fil noir) est de 160 Ω.  Il fallait donc relier le fil noir à la cinquième sortie de la carte (celle que j'ai identifiée "Moteur commun" dans la photo ci-dessus).

Pour brancher les 4 autres fils au bon endroit, j'y suis allé par essai-erreur!  Quand le moteur est mal branché, il vibre à la place de tourner...  Après 4 tentatives infructueuses, j'ai fini par faire tourner mon moteur correctement en branchant son fil blanc à "Moteur 1", son fil brun à "Moteur 2", son fil jaune à "Moteur 3", et son fil rouge à "Moteur 4"  (ce code de couleur n'a rien d'universel:  il faut essayer de trouver l'agencement qui conviendra à votre propre moteur).

Je n'inclus pas de sketch puisque je me suis contenté d'utiliser (avec des modifications mineures) les exemples "stepper_oneRevolution" et "stepper_oneStepAtATime" qui sont fournis dans l'environnement de programmation Arduino (vous y accédez au moyen du menu Fichier / Exemples / Stepper).

Lorsque votre moteur fonctionne, vous pouvez, en l'observant, déterminer le nombre de "steps" qu'il fait à chaque tour (c'était 48 pour mon moteur).

Et si on remplaçait l'Arduino par un MSP430 Launchpad?  À la condition d'utiliser Energia, c'est exactement la même chose qu'avec un Arduino!  La librairie "Stepper" est fonctionnelle, et les mêmes exemples sont disponibles dans les menus.  Si vous ne modifiez pas les exemples, vous reliez la sortie P2.0 du Launchpad à l'entrée "Moteur 1" de la carte ULN2003 (voir photo plus haut), P2.1 à "Moteur 2", P2.2 à "Moteur 3" et P2.3 à "Moteur 4".  La tension de sortie de 3,3 volts du Launchpad est suffisante pour faire réagir l'ULN2003.

À lire aussi:  Contrôle d'un moteur pas à pas avec un L293

Yves Pelletier (Twitter: @ElectroAmateur)

samedi 10 novembre 2012

Détecter la présence d'un train dans une gare cachée

Un sympathique adepte de modélisme ferroviaire répondant au nom de jpp (ou pn62) m'a demandé si j'avais une idée pour réaliser un circuit permettant de détecter la présence d'un train à l'intérieur d'une gare cachée:  "Au pupitre de commande, une Led rouge sera allumée si le rayon IR est coupé (train présent) une Led verte sera allumée  si le rayon n’est pas coupé ( emplacement libre).  J’utilise du 5 volts."

Je présente donc fièrement la solution que j'ai trouvée:  une LED infrarouge éclaire un phototransistor qui forme un diviseur de tension avec une résistance de 33 kΩ:  la tension aux bornes du phototransistor est d'environ 2 volts lorsqu'aucun train ne se trouve entre la LED infrarouge et le phototransistor, mais il s'élève à presque 5 volts lorsqu'un train intercepte le signal.

Cette tension est acheminée à l'entrée inverseuse d'un comparateur LM393, et sera...comparée à une tension de référence d'environ 2,5 volts (produite par les deux résistances de 180 kΩ) acheminée à l'entrée non-inverseuse.  Lorsqu'aucun train n'est présent, le comparateur produit une tension de sortie élevée (presque 5 volts), ce qui allume la LED verte (puisqu'un troisième diviseur de tension soumet l'autre électrode de cette LED à une tension d'environ 2,5 volts).  Lorsqu'un train est présent, le signal de sortie devient pratiquement nul, ce qui allume la LED rouge (branchée tête-bêche avec la LED verte).

On peut probablement remplacer le LM393 par à peu près n'importe quel amplificateur opérationnel, et les valeurs des résistances ne sont pas critiques.

Il existe certainement d'autres circuits permettant d'en arriver au même résultat:  si vous avez d'autres idées, n'hésitez pas à laisser un commentaire...

Yves Pelletier (Twitter: @ElectroAmateur)

samedi 27 octobre 2012

Électronique de père en fils (et oscillateur pour pratiquer le code morse)

Quand j'avais 7 ans, mon père s'est inscrit à un cours du soir en électronique.   En soirée, il s'acharnait parfois à essayer de faire fonctionner de vieux téléviseurs défectueux qu'il s'était procurés à prix modique.  Je me souviens aussi qu'il avait construit un petit oscillateur muni d'un interrupteur de style "télégraphe" sur lequel il s'entraînait au code morse (puisqu'il avait l'intention d'obtenir son permis radioamateur).  Tout ça m'impressionnait beaucoup, mais ça me semblait une occupation strictement réservée aux grandes personnes; je préférais de loin lire mes bandes-dessinées (auxquelles mon père ne connaissait absolument rien).  L'intérêt de mon père pour l'électronique fut somme toute d'assez courte durée:  il préférait la mécanique et la menuiserie.

Près de 40 ans plus tard, voici que mon fils, âgé de 8 ans démontre un vif intérêt pour l'électronique:  il adore m'assister lorsque je "travaille" dans mon atelier.  Lorsque nous mettons la main sur une vieille imprimante désuète, c'est plutôt moi qui l'assiste pendant qu'il fait l'essentiel du travail de démontage, tournevis en main, extirpant de l'appareil les circuits imprimés, moteurs et autres composants récupérables.  Il sait parfaitement reconnaître un condensateur quand il en voit un, et il a même tâté un peu de programmation d'Arduino (il sait comment faire clignoter une LED...).

Ce matin, il m'a fait remarquer que le petit circuit que nous avions fabriqué ensemble un peu plus tôt ce mois-ci (une LED contrôlée par un interrupteur) pouvait servir à envoyer un message lumineux en code morse.  Je lui ai alors parlé du "beeper" que son grand-père avait fabriqué, et nous nous sommes rapidement mis d'accord pour en fabriquer un à notre tour.

Il s'agit de construire un multivibrateur astable au moyen d'une puce 555.  Le circuit a été trouvé ici, mais il s'en trouve à bien d'autres endroits sur le web.

Sous ma supervision, mon fils a lui-même monté le circuit prototype sur un breadboard (je lui ai aussi fourni un dessin indiquant la numérotation des broches du circuit intégré). Il apprend tranquillement à interpréter un schéma de circuit.  C'est moi qui me suis occupé des soudures pour la version définitive du circuit.

Nous avons aussi bricolé notre propre interrupteur de style télégraphe au moyen de deux lamelles de plastique et d'un peu de papier d'aluminium).

Mon fils est fier de notre réalisation.  Si mon père était encore en vie, je crois qu'il aurait été fier aussi.

Yves Pelletier (Twitter: @ElectroAmateur)

samedi 29 septembre 2012

Mesurer une température avec un Arduino

Le projet est simple:  construire un thermomètre au moyen d'un Arduino, d'un capteur de température et d'un afficheur à cristaux liquides.

Option 1:  le capteur numérique DS18B20

Je me suis procuré sur eBay une sonde constituée d'un capteur DS18B20 enfermé dans une capsule métallique hermétique et muni d'un câble d'environ 1 mètre de long (cherchez "Digital Temperature Sensor Probe DS18B20").

Les branchements du capteur à l'Arduino sont extrêmement simples:
  • fil rouge du capteur:  5 V de l'Arduino
  • fil noir du capteur: GND de l'Arduino
  • fil bleu du capteur:  entrée numérique 8 de l'Arduino
  • résistance de 4,7 K placée entre le fil rouge et le fil bleu
La sonde est précalibrée, les résultats sont extrêmement stables, et vous pouvez en principe mesurer n'importe quelle température entre -55°C et +125°C avec une résolution d'un demi degré.  En plus, puisque chaque DS18B20 dispose de sa propre adresse encodée en usine, vous pouvez relier plusieurs dizaines de capteurs de température à votre Arduino en n'utilisant qu'une seule entrée numérique!

Le seul inconvénient que je pourrais y voir, c'est que le décodage du message numérique reçu en provenance du DS18B20 est à mon avis un peu plus compliqué qu'un traditionnel signal analogique, mais la librairie "OneWire" fait le gros du travail.  Pour dire la vérité, je me suis contenté de modifier légèrement un sketch trouvé sur le site Hacktronics, sans me poser trop de questions sur la signification profonde du code.   Pour bien comprendre ce qui se passe, je vous conseille plutôt cet excellent tutoriel en français.


En ce qui concerne les branchements de l'afficheur à cristaux liquides (LCD), vous pouvez vous référer au schéma publié ici.



Option 2:  le capteur analogique LM35DZ

J'ai aussi essayé le LM35, qui est un capteur de température analogique:  il émet une tension proportionnelle à la température en degrés Celsius (10,0 mV par degré).   Il permet de mesurer des températures similaires au DS18B20:  de -55°C à 150°C, avec une résolution de 0,5°C.  Toutefois, la mesure d'une température négative avec un Arduino entraîne quelques complications, car on ne veut pas acheminer une tension négative à une entrée analogique...

J'ai fabriqué ma propre sonde hermétique en enfermant un LM35DZ dans une gaine thermorétractable et en ajoutant un peu de silicone.

En principe, les branchements à l'Arduino sont ridiculement simples:
  • broche GND du LM35 : GND de l'Arduino
  • broche Vout du LM35:  Entrée analogique 0 de l'Arduino
  • broche Vs du LM35:  Sortie 5 V de l'Arduino
Mais avec environ 1 mètre de câblage entre l'Arduino et le capteur, les résultats étaient un brin décevants:  la température affichée oscillait constamment sur une gamme d'environ 3 degrés.  L'ajout d'une résistance de 68 Ω et d'un condensateur de 1 µF en série entre l'entrée analogique 0 et le GND a permis de stabiliser l'affichage de façon spectaculaire:  il est maintenant très stable et parfaitement en accord avec la mesure obtenue au moyen du DS18B20.

Autre précaution utile:  puisque la tension qui provient à l'entrée analogique de l'Arduino ne dépassera guère 1 V, aussi bien utiliser une valeur de référence de 1,1 V plutôt que la valeur habituelle de 5 V (auquel cas l'appareil n'utiliserait que 20% de la plage disponible).  C'est fait dans le sketch au moyen de l'instruction "analogReference(INTERNAL);".


En ce qui concerne les branchements de l'afficheur à cristaux liquides (LCD), vous pouvez vous référer au schéma publié ici.


D'autres options?

Le LM335 est un autre capteur analogique qui peut être utilisée à la place du LM35 (il s'agit d'une diode Zener dont la tension de rupture est proportionnelle à la température.

Un thermocouple pourrait aussi être utilisé si vous désirez mesurer des températures très élevées (dans un four, par exemple).  Et il y a la bonne vieille thermistance, dont la résistance varie avec la température.  Dans ces cas, le calcul d'une température exacte en degrés Celsius à partir du signal mesuré peut par contre se révéler assez complexe.

Yves Pelletier (Twitter: @ElectroAmateur)

samedi 8 septembre 2012

Fabriquer son propre Arduino (sur un breadboard)

Pourquoi voudrait-on fabriquer son propre Arduino au moyen d'un microprosseur Atmega 328?

  • Pour économiser quelques dollars
  • Pour créer une carte Arduino "améliorée" répondant à des besoins particuliers (par exemple, un Arduino comportant déjà un afficheur LCD, ou un pilote de moteur, etc.)
  • Pour finaliser un projet Arduino arrivé à terme (remplacer les headers par des soudures permanentes)
  • Pour prouver qu'on est capable de le faire (et s'en vanter sur son blog!)

Je me suis donc procuré un Atmega 328 sans bootloader ($3,50 chez Tayda).  Pour l'instant, il s'agit d'expérimenter: pas question de souder quoi que ce soit de permanent.  Pour éviter de casser certaines des broches du microcontrôleur en l'insérant dans un breadboard (ça m'est déjà arrivé avec un PIC...), j'ai utilisé un petit module de socket ZIF ("zero insertion force") que j'avais préalablement monté:  les broches du socket sont reliées à un header femelle, il est donc facile d'effectuer des branchements temporaires vers un breadboard.  Les sockets ZIF sont munis d'un levier qui libère complètement les broches du microcontrôleurs, donc aucun risque de l'endommager.


Gravure du bootloader

Il est plus facile (et plus économique) de se procurer un Atmega 328 vierge, ne contenant pas de bootloader.  Le processus de gravure du bootloader s'est révélé tellement simple que je vois mal pourquoi quelqu'un paierait plus cher simplement pour obtenir un Atmega déjà muni de son bootloader.

Pour graver le bootloader, j'ai utilisé les instructions disponibles ici.  Un Arduino Duemilanove m'a servi de programmeur.  Au départ, j'ai téléchargé le sketch "ArduinoISP" dans le Duemilanove (vous trouverez ce sketch dans le menu "Exemples" du logiciel Arduino).

Les branchements à effectuer sont:
  • broche 1 de l'Atmega :  Résistance de 10K : 5 V de l'Arduino
  • broche 1 de l'Atmega : broche 10 de l'Arduino
  • broche 7 de l'Atmega : 5 V de l'Arduino
  • broche 8 de l'Atmega : GND de l'Arduino
  • broche 17 de l'Atmega : broche 11 de l'Arduino
  • broche18 de l'Atmega : broche 12 de l'Arduino
  • broche 19 de l'Atmega : broche 13 de l'Arduino
  • broche 20 de l'Atmega : 5 V de l'Arduino
  • broche 22 de l'Atmega : GND de l'Arduino
  • Une des broches d'un cristal de 16 MHz est relié à la broche 9 de l'Atmega, l'autre broche du cristal est relié à la broche 10 de l'Atmega.  De plus, un condensateur d'environ 20 pF est placé entre chaque broche du cristal et GND.


J'ai aussi ajouté les trois LEDs indicatrices suggérées dans le sketch "ArduinoISP" aux broches 7, 8 et 9 de l'Arduino (ça aurait pu être utile en cas de problème).

Il ne reste plus qu'à régler le logiciel (IDE) Arduino de la façon suivante:
  • Outils : Type de carte : Arduino Duemilnove w/ Atmega 328
  • Outils : Ports série : (port de votre Arduino)
  • Outils : Programmateur :  Arduino as ISP
  • Outils : Graver la séquence d'initialisation
Pendant la gravure, la LED reliée à la broche 7 devrait clignoter (celle de la broche 8 devrait rester éteinte), et après quelques dizaines de secondes, le logiciel devrait confirmer la réussite de l'opération.  (Dans mon cas, ça a fonctionné du premier coup).

Télechargement d'un sketch

Le sketch "Blink" (qui fait clignoter une LED) semble gravé dans l'Arduino en même temps que le bootloader, mais puisque son utilité est plutôt limitée, vous désirerez probablement télécharger un autre sketch dans l'Atmega...

Pour ce faire, j'ai utilisé le "FTDI Basic Breakout" apparemment mis au point par Sparkfun, mais comme à mon habitude j'ai opté pour une contrefaçon chinoise à $8.  Ce minuscule circuit comporte un connecteur "mini-usb" qui permet le téléchargement (upload) d'un sketch vers l'Atmega.   Si vous souhaitez construire votre propre Arduino pour économiser de l'argent, l'achat de ce composant limitera sensiblement les possibilités d'économie...par contre vous pouvez utiliser le même breakout pour plusieurs Atmegas différents.

Pour la suite, je me suis fié essentiellement sur les instructions disponibles ici.  Dans un premier temps, vous enlevez toutes les connections menant à l'Arduino, ainsi que les trois LEDs indicatrices si vous les aviez utilisées.

Les branchements suivants, déjà effectués pour graver le bootloader, demeurent utiles:










  • broche 1 de l'Atmega :  Résistance de 10K : 5 V 
  • broche 7 de l'Atmega : 5 V 
  • broche 8 de l'Atmega :  GND 
  • broche 20 de l'Atmega :  5 V
  • broche 22 de l'Atmega : GND 
  • Une des broches du cristal de 16 MHz est relié à la broche 9 de l'Atmega, l'autre broche du cristal est relié à la broche10 de l'Atmega.  De plus, un condensateur d'environ 20 pF est placé entre chaque broche du cristal et le GND.


  • Puis vous ajoutez le branchements suivants:

    broche 21 de l'Atmega : 5 V

    Et finalement, vous ajoutez le FTDI Basic Breakout qui, en plus de transmettre le sketch de l'ordinateur vers l'Atmega, permettra aussi d'alimenter l'Atmega à partir du port USB de votre ordinateur.

    Les branchements du FTDI Basic Breakout sont:
    • GRN/DTR : Condensateur de 0,47 microfarads : broche 1 de l'Atmega
    • RXI : broche 3 (Tx) de l'Atmega
    • TXO : broche 2 (Rx) de l'Atmega
    • 5 V : pour alimenter votre ligne de 5 V où vous avez déjà branché  les broches 7 et 20 de l'Atmega.
    • BLK/GND :  aux autres GND
    Je n'ai pas la moindre idée de l'utilité de la broche "CTS", je n'ai pas eu besoin de la brancher.  Et je n'ai pas installé de bouton reset.

    Voilà!  Il ne reste plus qu'à brancher le tout à votre ordinateur au moyen d'un câble USB.  Si vous branchez une LED à la broche 19 de l'Atmega, elle devrait clignoter (à cause de l'exemple "Blink" déjà téléchargé lors de la gravure du booloader).  Mais vous pouvez évidemment remplacer ce sketch par ce que vous voulez!

    Ce schéma vous sera utile pour connaître la correspondance entre les broches d'un Arduino et celles de l'Atmega.

    Cet article a maintenant une suite: Fabrication d'un Arduino conçu pour utilisation sur breadboard

    Yves Pelletier (Twitter: @ElectroAmateur)

    dimanche 2 septembre 2012

    Stellaris LM4F120 LaunchPad pour $5

    J'ai réservé mon exemplaire du nouveau Stellaris LM4F120 LaunchPad (une carte de développement munie d'un puissant microcontrôleur 32 bits) sans trop savoir ce que je vais en faire, pour la simple raison qu'à un prix de lancement de $4.99 (frais de livraison inclus), ça semble une bonne affaire!

    Je devine que le nouveau-né de Texas Instruments sera aussi chiant à programmer que le MSP430 Launchpad pouvait l'être avant la création d'Energia, je croise donc les doigts pour qu'il soit un jour possible de le programmer au moyen d'Energia ou d'un logiciel similaire...

    Yves Pelletier (Twitter: @ElectroAmateur)



    dimanche 26 août 2012

    Cours en ligne: Artificial Intelligence (CS373), Programming A Robotic Car


    Je suis à peu près à mi-chemin dans ce cours en ligne offert par Udacity:  Artificial Intelligence (CS373)Programming A Robotic Car.  Offert par le Profresseur Sebastian Thrun, leader de l'équipe Standford/Google qui travaille à la mise au point d'une automobile capable de conduire toute seule, sans la moindre intervention humaine.

    Ce cours s'intéresse aux algorithmes permettant à un robot de se situer dans l'espace, d'éviter les obstacles et de trouver son chemin dans un labyrinthe jusqu'à une destination imposée.

    Comme c'est maintenant le cas pour tous les cours offerts par Udacity, vous pouvez vous inscrire au cours à n'importe quel moment et le compléter à votre rythme.  Mes connaissances dans le domaines étant nulles, j'y apprend beaucoup de choses:  c'est vraiment intéressant!  Je regrette un peu, toutefois, que l'examen final soit aussi ridiculement facile:  accessible dès le début du cours, il comporte un trop grand nombre de questions à choix de réponses auxquelles n'importe qui peut répondre avec succès en essayant toutes les combinaisons possibles (puisque le nombre de tentatives pour répondre à la question n'est aucunement limité!).


    Préalables:  Comprendre l'anglais, savoir un peu programmer en langage Python, connaître quelques notions de base en calcul de probabilités et en algèbre linéaire (vecteurs et matrices).  Si comme moi vous êtes un néophyte en langage Python, je vous conseille de suivre d'abord le cours  Intro to Computer Science: Building a Search Engine (CS101) , également offert pas Udacity.  Si vous n'avez jamais suivi de cours de probabilités, le cours Intro to Statistics (ST101)Making Decisions Based on Data constitue également un préalable logique.

    Pour plus d'informations (ou pour vous inscrire):  Artificial Intelligence (CS373)Programming A Robotic Car.

    Ci-dessous la présentation du cours, sur vidéo.



    P.S.:  Si vous avez manqué la première cohorte du cours 6.002x: Circuits and Electronics offert par MITx dont j'ai déjà parlé ici et ici, veuillez noter qu'il démarre à nouveau dans quelques jours, soit le 5 septembre.

    Yves Pelletier (Twitter: @ElectroAmateur)

    samedi 25 août 2012

    Un multimètre de pacotille

    J'achète beaucoup de matériel sur eBay, auprès de vendeurs asiatiques.  Les prix sont imbattables, et je suis généralement satisfait de la qualité... mais pas cette fois-ci!

    J'ai commandé un multimètre de poche Victor VC921.  Pour $15, je ne m'attendais pas à un appareil de haut calibre, mais je cherchais quelque chose d'économique qui puisse mesurer des fréquences, et l'idée de disposer d'un deuxième multimètre (pouvant facilement être transporté dans une poche, en plus) était séduisante.

    Mais lorsque j'ai reçu le multimètre, j'ai dû me rendre à l'évidence:  il ne fonctionne pas du tout:  aucun chiffre n'apparaît sur l'écran LCD.  De plus, lorsqu'on le met en mode "test de continuité", il produit un "beep" peu importe que les sondes se touchent ou non...

    Bien entendu, des piles sont présentes dans l'appareil, et elles sont parfaitement fonctionnelles.



    Jetons un petit coup d'oeil à l'intérieur; le boîtier s'ouvre facilement, sans qu'il soit nécessaire de dévisser quoi que ce soit.


    Ha, c'est un peu peu brouillon, comme soudure, ça.  C'est normal que deux des broches d'un même transistor soient soudées ensemble?


    En retournant le circuit imprimé, je constate qu'il n'y a aucun contact électrique entre l'afficheur à cristaux liquides et le reste du circuit, qui sont séparés l'un de l'autre par un carré de mousse isolante.  Pas étonnant que rien ne s'affiche à l'écran!  Je m'attendait à une liaison par l'entremise d'un ruban conducteur mais non.


    Dans les jours qui ont suivi la transaction, le vendeur a été expulsé d'eBay.  Je suppose que le remboursement (suite à une plainte officielle auprès de Paypal) sera une formalité.

    Mise à jour  (8 septembre 2012):
    Paypal a effectivement décidé que je mérite un remboursement...à la condition de retourner le multimètre en Chine par une méthode permettant d'en faire le suivi en ligne.  Pour obtenir un remboursement, il faudrait donc que je paie beaucoup plus cher que le prix payé au départ! (Et puisque le vendeur a été évincé d'eBay, je ne peux même pas lui écrire un feedback négatif...)

    Yves Pelletier (Twitter: @ElectroAmateur)

    mercredi 22 août 2012

    Fabrication d'un module MIDI (IN et OUT) pour Arduino

    Cet article a été mis à jour le 3 avril 2021.

    J'ai finalement mis la main sur quelques octocoupleurs 4N35 afin d'expérimenter le "MIDI input", c'est à dire l'entrée de signaux MIDI dans l'Arduino.

    Voici donc le schéma d'un circuit qui a bien fonctionné pour moi.  Certaines personnes ont plus de succès avec une résistance plus petite à la sortie de l'octocoupleur (ce qui n'était pas mon cas), d'autres utilisent une résistance plus élevée (ce que j'aurais pu faire:  ça continuait de fonctionner quand même).

    On confond parfois la broche 4 et la broche 5 du connecteur MIDI: le schéma ci-dessus montre le connecteur femelle vu de face, mais on trouve souvent des schémas qui présentent le connecteur mâle ou le verso du connecteur femelle­, ce qui peut donner l'impression que certains schémas se contredisent. Le potentiel de la broche 4 (+) est plus élevé que celui de la broche 5 (-).

    Connecteur femelle, vu de face

    Verso du connecteur femelle

    Connecteur mâle (câble)
    Connecteur mâle (câble MIDI)



    Ma seule perte de temps se situait au niveau logiciel (mais je croyais que c'était un problème de circuit, d'où la perte de temps...).  Lorsqu'on effectue une recherche des mots clés "Arduino MIDI in" dans Google, le premier résultat est une vieille discussion du forum Arduino datant de 2007.  D'une part le schéma du circuit qui y est présenté est un peu controversé (avec cette résistance de 100 kΩ à la broche 6 de l'octocoupleur, que la plupart des gens trouvent inutile), mais surtout le sketch qui y est proposé ne tient pas compte des "running status", une caractéristique du protocole MIDI que je ne connaissais pas.

    En principe, chaque fois que vous appuyez sur une touche d'un clavier MIDI, celui-ci émet un message "Note On" constitué de 3 octets:  l'identification de la commande "Note On", suivie du numéro de la note jouée et de sa vélocité.  Supposons maintenant que vous appuyez sur plusieurs notes consécutives assez rapidement (bref:  vous jouez de la musique):  pour ne pas surcharger la bande passante, la norme MIDI permet aux instruments d'envoyer un seul octet "Note On" suivi de plusieurs numéros de notes / vélocité.  À l'autre bout, l'instrument qui reçoit les messages est responsable d'interpréter ça comme une succession de plusieurs notes.

    Mais voilà:  le sketch que j'utilisais pour vérifier l'arrivée de messages MIDI prenait pour acquis que toutes les notes jouées étaient précédées d'un octet "Note On", ce qui n'était pas le cas.  Une LED supposée s'allumer chaque fois que j'appuyais sur une touche ne s'allumait qu'à la condition que je laisse une bonne dizaine de secondes s'écouler avant l'exécution d'une nouvelle note...

    La solution:  la bibliothèque MIDI, que je ne m'étais jamais donné la peine d'utiliser pour faire du "MIDI OUT", mais qui se révèle drôlement utile pour faire du "MIDI IN".  Un sketch très simple trouvé ici allume une LED chaque fois que j'appuie sur une touche du clavier.  La LED s'éteint aussitôt que je relâche la note.

    J'en ai profité pour bricoler sur une carte perforée un module comportant à la fois une entrée et une sortie MIDI, qu'il ne reste plus qu'à brancher à l'Arduino:  quelque chose d'à peu près équivalent au "MIDI shield" de Sparkfun, mais pour une minuscule fraction du prix (surtout que les deux jacks MIDI ont été récupérés sur une interface MIDI "MacMan" désuète, je dirais que ça m'a coûté environ 5% de ce que demande Sparkfun).


    Je n'ai plus tellement tendance à produire mes propres shields empilables, préférant des cartes qui se branchent à l'Arduino au moyen de quelques fils.  Les avantages que j'y vois: beaucoup moins de soudures lors de la fabrication, et plus de flexibilité lors de l'utilisation (on peu plus facilement modifier l'endroit où les fils se branchent sur l'Arduino, remplacer l'Arduino par un Launchpad, etc.).

    Puisque la librairie MIDI, par défaut, transmet à la sortie de l'Arduino tous les messages reçu à l'entrée (MIDI THROUGH) j'ai rapidement pu vérifier que l'Arduino retransmettait efficacement (et sans délai de latence perceptible) la totalité des messages MIDI reçus (pour les tests, ces messages étaient relayés au logiciel MIDI-Ox par l'entremise d'une interface MIDI-USB.

    À partir d'ici, la création commence:  l'Arduino pourra dorénavant modifier les messages reçus avant de les retransmettre...

    Yves Pelletier (Twitter: @ElectroAmateur)

    lundi 13 août 2012

    Importante mise à jour d'Energia

    Avec la version 0101E0008 du logiciel Energia (disponible ici depuis quelques jours), la compatibilité du MSP Launchpad  avec nos sketches Arduino s'est encore améliorée.

    Un aperçu des nouveautés de cette version (dont la liste exhaustive se trouve ici):   on a ajouté les librairies  "Liquid Cristal", "Servo" et "Stepper", "Internal Flash Read/Write", ainsi que les fonctions randomSeed() , random(),  micros(), tone(), noTone().  De plus, le bug qui empêchait de dépasser 50% du "duty cycle" en PWM a été réparé.

    Yves Pelletier (Twitter: @ElectroAmateur)

    samedi 11 août 2012

    MIDI sans fil (Arduino)

    Pendant un de vos légendaires solos de keytar endiablés, vous faites un faux mouvement et...zut, l'ordinateur portable hébergeant vos soft synths se fracasse par terre...  C'est vrai que le câble MIDI d'un mètre de longueur entre le contrôleur MIDI et l'ordinateur ne permetait une très grande liberté de mouvement...

    La solution?  Le MIDI sans fil!


    Matériel:

    2 Arduinos (Uno, par exemple), 2 modules radiofréquence NRF24L01, un connecteur MIDI femelle (DIN-5), une résistance de 220 Ω, câble MIDI et clavier MIDI qui recevra les messages MIDI (ou si vous préférez:  interface MIDI-USB et ordinateur doté d'un logiciel MIDI).

    Les branchements:

    Les modules NRF24l01 se branchent de la même façon que pour le véhicule téléguidé.   Quoi?  Vous n'avez pas lu ma rubrique concernant mon véhicule téléguidé!?!?  Alors voici comment on branche ces modules (c'est la même chose sur les deux Arduinos:  l'émetteur et le récepteur).


    • Pin GND du module rf  :  Pin GND de l'Arduino
    • Pin VCC du module rf:    Pin 3.3 V de l'Arduino
    • Pin CE du module rf:       Pin 9 de l'Arduino
    • Pin CSN du module rf:    Pin 10 de l'Arduino
    • Pin MOSI du module rf:  Pin 11 de l'Arduino
    • Pin MISO du module rf:  Pin 12 de l'Arduino
    • Pin SCK du module rf:    Pin 13 de l'Arduino
    • Pin IRQ du module rf:     On ne l'utilise jamais





    Ensuite, vous branchez le connecteur MIDI femelle à l'Arduino qui agira comme récepteur (voir le schéma de branchement sur le site officiel arduino.cc).  Et vous reliez ça à un clavier MIDI par l'entremise d'un câble MIDI (branché dans l'entrée MIDI-in, bien sûr).

    Les sketches:

    Après avoir installé la librairie mirf (si vous ne l'aviez pas déjà), il ne vous reste plus qu'à installer les sketchs disponibles ci-dessous dans leur Arduino respectif.

    Émetteur:


    Récepteur:


    Résultat:

    Le clavier MIDI se met à jouer une succession d'arpèges (do-fa-do-sol), même s'il n'est pas directement relié à l'Arduino qui émet ces instructions.

    Bien sûr, ce serait plus pratique si on pouvait brancher un instrument MIDI à l'Arduino émetteur, et ainsi acheminer notre propre musique jusqu'à l'Arduino récepteur...  Malheureusement, je ne dispose pour l'instant d'aucun optocoupleur qui me permettrait de faire un branchement "MIDI-in" dans l'Arduino émetteur (le plus frustrant, c'est que j'ai fait une grosse commande de matériel à Tayda la semaine dernière, et j'ai complètement oublié les optocoupleurs!).  Ce sera donc pour une autre fois...

    Yves Pelletier (Twitter: @ElectroAmateur)

    vendredi 10 août 2012

    Envoi de messages MIDI par le MSP430 Launchpad

    Dans cette rubrique, j'utilise le MSP430 Launchpad de Texas Instruments pour jouer le début de Für Elise (Beethoven) sur un clavier MIDI (pour émettre des messages MIDI avec un Arduino, voir ma rubrique de l'été dernier).

    Le matériel:

    Une carte MSP Launchpad (un investissement de $4.30, frais d'expéditions inclus!), un clavier MIDI, un câble MIDI, un connecteur MIDI femelle (DIN-5), résistances (220 Ω, 1 kΩ, 1,8 kΩ et 100 kΩ), un comparateur LM393 (ou solution équivalente pour élever à 5 volts le signal émis par le Launchpad), source de tension de 5 V.

    Le circuit:

    Tout d'abord il faut savoir que le launchpad émettra le signal MIDI par l'entremise de sa pin "P1.2".  Toutefois, ce signal numérique de 3,3 V est inférieur à la norme MIDI qui est de 5 V; il faut donc ajouter un étage d'amplification (le comparateur LM393). Ce signal est ensuite acheminé à la broche 4 du connecteur MIDI (un câble MIDI achemine ce signal jusqu'à l'entrée "MIDI-IN" du clavier).


    J'ai utilisé un LM393 parce que j'en avais sous la main.  Il existe d'autres solutions possibles (un MOSFET, par exemple).


    Le code:  

    Puisque j'ai utilisé Energia pour programmer le Launchpad, il s'agit d'un simple sketch Arduino.



    La seule partie un peu "intéressante" est la routine "noteOn", à la toute fin, qui envoie un message midi par l'entremise de la pin TX (P1.2) du Launchpad:


         void noteOn(int cmd, int pitch, int velocity) {
           Serial.write(cmd);
           Serial.write(pitch);
           Serial.write(velocity);
         }

    (Tout comme la version 1.0 de l'environnement Arduino, Energia requiert la commande "Serial.write" plutôt que "Serial.print" lorsqu'on veut envoyer des bytes.)

    Le reste du sketch consiste à envoyer à la routine "noteOn" les notes appropriées, au moment approprié.

    Yves Pelletier (Twitter: @ElectroAmateur)

    mardi 7 août 2012

    Séquenceur programmable Arduino

    Je me suis amusé à faire cette réplique de l'Arduino Punk Console conçu par Dano, auteur de l'excellent site Beavis Audio Research.

    Il s'agit d'un séquenceur "8 steps":  vous faites mémorisez à l'Arduino 8 notes musicales, qu'il joue ensuite en boucle à une vitesse réglable. Tout comme le Weird Sound Generator de Music from Outer Space, je classerais ce bidule dans la catégorie "jouets musicaux" (ma fille de 4 ans l'a beaucoup apprécié).

    Pour placer une première note en mémoire, vous tournez le potentiomètre "frequency" afin d'ajuster la fréquence à la valeur désirée, et vous appuyez sur le bouton "step 1" .  Vous tournez à nouveau le potentiomètre "frequency" pour changer la fréquence et, lorsqu'elle vous convient, vous appuyez sur le bouton "step 2" pour la mettre en mémoire.  Vous répétez l'opération jusqu'à ce que chacune des 8 notes ait été mémorisée.

    Pour jouer le résultat, vous maintenez le bouton "Start/Stop" enfoncé, et vous tournez les potentiomètres "duration" (durée des notes) et "tempo" délai entre deux notes successives jusqu'à ce que le résultat vous plaise!


    La page de Beavis Audio concernant ce projet étant déjà très complète, je vous invite à la consulter pour le schéma du circuit et le sketch.  Faites attention à une petite erreur sur le schéma:  la broche libre du potentiomètre "tempo" doit en fait être reliée à 5 V (sinon l'entrée analogique 1 de l'Arduino ne recevra jamais le moindre signal).

    De plus, Dano a utilisé un type d'écran LCD spécialement conçu pour le communication série (ce qui économise les pins de l'Arduino).  Puisque je ne dispose pas de ce genre spécifique d'écran LCD (et qu'il n'y a plus assez de pins disponibles pour utiliser un écran LCD conventionnel), j'ai effacé du sketch tout ce qui concernait le LCD.

    Toutefois, l'absence d'informations affichées rendait hasardeux l'ajustement des fréquences (on ne pouvait que tourner le potentiomètre à une position aléatoire, ce qui donnait des résultats imprévisibles...).  J'ai donc ajouté une modification supplémentaire au sketch:  pendant que le bouton "step 1" (par exemple) est enfoncé, la note est jouée par le haut-parleur et il est facile de la modifier à votre convenance au moyen du potentiomètre avant de relâcher le bouton.  De cette façon, les 8 notes peuvent être choisies "à l'oreille" (je suis ainsi parvenu à séquencer une gamme à peu près juste).

    Voici mon sketch (version modifiée)


    Yves Pelletier (Twitter: @ElectroAmateur)

    lundi 6 août 2012

    Fabrication d'une voiture téléguidée (Arduino)

    Ce projet consiste à produire un véhicule/robot téléguidé au moyen du matériel suivant:  une base de robot de type "smart car" (chaque roue est munie de son propre moteur), 2 cartes Arduino, deux modules radiofréquence NRF24L01, un pilote de de moteur L293D et un joystick (de type Playstation).

    En gros, il s'agissait d'améliorer mon précédent projet de véhicule contrôlé au moyen d'un joystick (janvier 2012) qui comportait un câble peu pratique entre le joystick et le véhicule (un peu comme si on promenait le véhicule en laisse...).

    Puisque j'avais déjà un peu d'expérience avec les modules NRF24L01 (Arduino Télépathe, avril 2012), je m'attendais à un projet rapide et facile...  Ce que je n'avais pas prévu, c'est tout le temps perdu à cause d'un module NRF24L01 instable qui ne fonctionnait que de façon intermittente.

    Nous disposons donc de deux cartes Arduino (j'ai utilisé des Duemilanove, mais c'est évidemment pareil pour le Uno), chacune étant munie d'un module NRF24L01.  Un premier Arduino émet les informations en provenance d'un joystick, le deuxième Arduino reçoit ces informations et les utilise pour contrôler les moteurs par l'entremise d'un circuit intégré L293D.

    Branchement des modules rf

    Les modules radiofréquence NRF24L01 sont des périphériques SPI (comme les modules pour carte SD, par exemple).  Les branchements sont identiques sur les deux cartes Arduino:

    • Pin GND du module rf  :  Pin GND de l'Arduino
    • Pin VCC du module rf:    Pin 3.3 V de l'Arduino
    • Pin CE du module rf:       Pin 9 de l'Arduino
    • Pin CSN du module rf:    Pin 10 de l'Arduino
    • Pin MOSI du module rf:  Pin 11 de l'Arduino
    • Pin MISO du module rf:  Pin 12 de l'Arduino
    • Pin SCK du module rf:    Pin 13 de l'Arduino
    • Pin IRQ du module rf:     On ne l'utilise jamais

    Concernant l'alimentation, vous pourrez trouver un tas d'informations contradictoires sur le web:  certaines personnes affirment que le module sera instantanément détruit si on l'alimente avec 5 V, d'autres disent qu'il n'y a pas de problème puisque les modules sont munis d'un régulateur de tension.  Une chose est certaine, ça marche très bien avec 3.3 V.  Lors de mes premiers essais en avril, j'avais utilisé 5 V sans aucun problème (est-ce que c'est lié au fait que mes modules fonctionnaient mal quand je les ai réutilisés en juillet?).

    Pour ceux qui tiennent à tout savoir:  MISO signifie "Master In Slave Out" (les données sont acheminées de l'Arduino vers le module rf), MOSI signifie "Master Out Slave In" (les données sont acheminées du module rf vers l'Arduino), SCK signifie "Serial Clock", CE signifie "Chip Enable" (ou parfois SS pour Slave Select; si plusieurs périphériques SPI sont branchés au même Arduino, cette broche vous permet de choisir le périphérique avec lequel l'Arduino dialogue), et CSN "Chip Select Negative" (?).

    Je connais deux types de modules NRF24L01 (les deux sont vendus sur eBay à un prix dérisoire par des expéditeurs chinois):  un modèle vert à 10 pins et un modèle noir à 8 pins.  Sur le modèle vert, les pins sont identifiées, mais sur le noir elles ne le sont pas!  Le schéma ci-dessous vous sera peut-être utile.

    Branchements du joystick sur l'Arduino émetteur

    Un joystick n'est rien d'autre que deux potentiomètres:  un qui change de valeur lorsque le joystick est incliné selon l'axe des x, et un autre qui change de valeur lorsque le joystick est incliné selon l'axe des y.

    Chacun des deux potentiomètres est utilisé en diviseur de tension entre les pins GND et 5 V de l'Arduino.  Le potentiomètre Y (qui permet d'avancer ou de reculer) achemine son signal à la pin analogique 0, et le potentiomètre X (qui permet de tourner à gauche ou à droite) achemine son signal à la pin analogique 1.

    Branchements du circuits intégré L293D sur l'Arduino récepteur (sur le véhicule)

    Le module rf occupait déjà les pins 9-10-11-12 de l'Arduino, le pilote de moteur L293D encombrera pour sa part les pins 3-4-5-6-7-8!

    Voir les détails sur le schéma ci-contre.

    Voici, finalement, les sketchs à télécharger dans chaque Arduino.  J'ai utilisé la librairie "mirf", qui exige que les données soient acheminées un byte à la fois (d'où la nécessité de convertir mes deux "int" en une suite de deux bytes, et de reconvertir les bytes en "int" à la réception).

    L'affichage des données dans le moniteur série ne sert qu'aux fins de débogage.  Je suis conscient que ces sketchs pourraient être améliorés (par exemple, le véhicule pourrait se déplacer un peu plus rapidement en augmentant la valeur de la variable passée en paramètre à analogWrite) mais ça fonctionne!

    Sketch de l'émetteur



    Sketch du récepteur



    Yves Pelletier (Twitter: @ElectroAmateur)