lundi 8 juillet 2013

CircuitLab: un éditeur et simulateur de circuits en ligne

Mise à jour (18 août 2014):  Il semble qu'il n'est plus possible d'utiliser CircuitLab gratuitement.

Je viens tout juste d'explorer CircuitLab:  il s'agit d'un outil en ligne qui permet de dessiner des schémas de circuits, de les simuler, et de les partager.

Il n'est peut-être pas à la hauteur des simulateurs les plus perfectionnés, mais il est facile d'utilisation, gratuit (sauf si vous désirez avoir accès à des options avancées) et vous avez accès à vos créations à partir de n'importe quel ordinateur relié à internet.



Ci:dessous:  un petit circuit construit très rapidement à partir des outils disponibles.


Et le résultat de la simulation (tension au noeud 1):


Yves Pelletier (Twitter: @ElectroAmateur)

samedi 6 juillet 2013

Bargraphe à LED, Arduino et CD4017

Un afficheur bargraphe à LED est constitué de 10 LEDs regroupées dans un même boîtier, chaque LED étant munie de sa propre paire de broches (vous pouvez donc obtenir le même résultat avec 10 LEDs individuelles si vous ne disposez pas d'un bargraphe déjà fait).  Un bargraphe peut être bien utile pour afficher une valeur analogique dont la valeur numérique exacte n'a pas une grande importance.  L'exemple classique est le VU-mètre qui affiche le niveau d'un signal audio:  la barre lumineuse qui monte et qui descend est plus pertinente qu'une valeur numérique qui changerait tout le temps!

On pourrait aussi imaginer un magnétomètre utilisant comme capteur une sonde à effet Hall (la Allegro A1302, par exemple).  La sonde produit une tension proportionnelle à l'intensité du champ magnétique, mais ce résultat n'est pas calibré en Tesla ou en Gauss:  on pourrait être plus intéressés à un affichage bargraphe qui nous indiquera en un coup d'oeil si le champ magnétique est faible ou intense plutôt qu'à une valeur numérique n'ayant pas de signification directe.

10 sorties de l'Arduino?!?!?!?!?

La plupart des tutoriels concernant l'utilisation d'un bargraphe avec un Arduino préconisent un branchement direct:  chaque LED du bargraphe est contrôlée par sa propre sortie de l'Arduino.  C'est simple, et ça peut toujours s'appliquer si votre Arduino est muni d'un unique capteur (le magnétomètre mentionné plus haut, par exemple), mais si votre projet est un tantinet plus ambitieux, vous préférerez utiliser ces pins de l'Arduino pour autre chose.

Économiser des sorties de l'Arduino

Nous allons donc utiliser un intermédiaire entre l'Arduino et l'afficheur bargraphe pour que ce dernier n'utilise que 3 ou 4 pins de l'Arduino, pas plus.  Il existe plusieurs possibilités:
  • un pilote de LEDs spécialisé, genre MAX7219, MAX7221 ou AS1108:  ils sont conçus pour ce genre d'application, mais coûtent vraiment cher.  Puisqu'ils permettent de contrôler 64 LEDs individuelles, ça peut devenir un choix intéressant si vous avez 5 ou 6 bargraphes à contrôler en même temps.
  • un registre à décalage 74HC595:  peu coûteux, mais puisqu'il n'a que 8 sorties, il en faudrait un deuxième, comportant 6 sorties non-utilisées 
  • un compteur décimal CD4017 qui a, justement, 10 sorties, une pour chaque LED de mon  bargraphe! C'est cette dernière option que j'ai décidé d'appliquer.


Étude du circuit intégré CD4017

Le CD4017 est un compteur décimal:  il est muni de 10 sorties.  Si vous appliquez un signal logique haut à l'entrée 15 (reset), la sortie 0 devient haute (toute les autres sorties sont basses). Ensuite vous appliquez un signal haut à la broche 14 (clock):  la sortie 0 devient basse, et la sortie 1 devient haute.  Vous appliquez à nouveau un signal haut à la broche 14, et c'est la sortie 2 qui devient haute.  Chaque fois que signal acheminé à sa pin 14 (clock) passe d'une valeur logique basse à une valeur logique haute, c'est la sortie suivante qui devient haute.

Persistence rétinienne

Ce qui complique un peu les choses, dans notre cas, c'est que nous voulons que plusieurs LEDs du bargraphe soient allumées en même temps, alors qu'avec un CD4017 on dispose de 10 sorties, dont une seule est active à la fois.  Heureusement, l'Arduino est capable d'envoyer à la pin "clock" des impulsions tellement rapides que nos yeux ne verrons pas la différence:  plusieurs LEDs sembleront allumées en même temps, alors qu'en réalité elles s'allument et s'éteignent très rapidement, une à la fois.

Les connexions

Rien de bien compliqué:  vous alimentez chaque LED du bargraphe au moyen d'une sortie du CD4017, en ajoutant une résistance de protection pour chaque LED (150 Ω ou environ), tel qu'illustré ci-contre.

Les pins 8 (GND) et 13 (Enable) sont toutes les deux reliées au GND de l'Arduino.  Les trois entrées restantes du CD4017 sont branchées à l'Arduino de la façon suivante:

  • pin 14 du CD4017 (Clock) à la pin 2 de l'Arduino
  • pin 15 du CD4017 (Reset) à la pin 3 de l'Arduino
  • pin 16 du CD4017 (Vcc) à la pin 4 de l'Arduino
Pour produire rapidement un signal analogique variable qui fera réagir le bargraphe, vous pouvez utiliser un potentiomètre dont le curseur est branché à l'entrée analogique A0 de l'Arduino.


Le sketch

Le voici:

En résumé, on prend la valeur analogique captée à l'entrée A0 de l'Arduino, on la convertit pour obtenir une valeur entière située entre 0 et 10.  Si la valeur est 0, on n'achemine rien à la broche 16 du CD4017 (de façon à ce qu'aucune LED ne soit allumée).  Si la valeur est 5, on allume les 5 première LEDs une après l'autre, mais ça se fait tellement vite qu'on a l'impression que les 5 LEDs sont allumées en même temps.

On peut aussi obtenir un résultat similaire avec un afficheur à cristaux liquides (LCD), mais ça, je l'avais déjà expliqué.

MSP430 Launchpad

Pour utiliser le sketch avec un MSP430 Launchpad et Energia, une légère modification est nécessaire car la pin digitale 2 et la pin analogique A0 font toutes deux référence à la même pin (P1_0).  Il est donc nécessaire d'assigner les pins différemment au début du sketch.

La configuration qui nécessite le moins de modifications au sketch serait:
  • pin 14 du CD4017 (Clock) branchée à la pin P1_0 du msp430 Launchpad
  • pin 15 du CD4017 (Reset) branchée à la pin P1_1 du msp430 Launchpad
  • pin 16 du CD4017 (Vcc) branchée à la pin P1_2 du msp430 Launchpad
  • signal analogique acheminé à la pin P1_3 du msp430 Lauchpad
Dans le sketch, il ne reste plus qu'à remplacer la ligne "int signalPin = A0;" par "int signalPin = A3;". 

(Dans ce cas, le signal analogique ne doit pas excéder 3,3 V.)


(Pour la rédaction de cet article, je me suis inspiré des travaux de Leonel Machava publiés ici, mais j'ai beaucoup modifié le sketch).

Yves Pelletier (Twitter: @ElectroAmateur)

jeudi 4 juillet 2013

La machine à dire "bonjour"

Dans ma plus récente rubrique, j'avais utilisé un Arduino, un breakout VS1053 et un lecteur de carte SD pour fabriquer mon propre lecteur mp3; tout ça est bien amusant, mais c'est se donner bien du mal pour reproduire un gadget disponible pour $15 à tous les coins de rue... En utilisant le même matériel, essayons maintenant quelque chose d'un peu moins répandu, quelque chose que la plupart de vos amis ne possèdent probablement pas: un salueur électronique!

Mise en situation: 

Vous êtes de retour à la maison après une longue journée de travail. La maison est malheureusement déserte, mais quel plaisir d'entendre votre salueur élecronique qui, ayant détecté votre arrivée, vous lance un tonitruant "Bonjour, ça va?".

Matériel et connexions: 

Vous avez besoin d'un Arduino (j'ai utilisé un UNO), d'un module mp3 VS1053, d'un module lecteur de carte SD, d'une carte SD, d'un détecteur de mouvement à infrarouge (PIR) et d'un système de haut-parleurs multimédias (du genre qu'on branche à un ordinateur pour avoir du son) .

Je vous réfère à ma rubrique précédente pour une description détaillée de la façon de connecter votre module VS1053 et votre lecteur de carte SD. Si vous êtes l'heureux propriétaire du shield mp3 de Sparkfun (qui est déjà muni d'un VS1053 et d'un lecteur de carte SD), c'est encore plus simple: vous l'insérez sur l'Arduino et vous venez d'économiser au moins 15 minutes.

Le détecteur de mouvement à infrarouge PIR est muni de trois connecteurs:  GND, OUT et 5 V.  Branchez le "OUT" à l'entrée 3 de l'Arduino.  Je vous laisse deviner où vous branchez GND et 5V...

Préparation des fichiers mp3: 

Pour plus de variété, nous allons préparer plusieurs fichiers mp3, chacun contenant une salutation différente. Vous pouvez créer ces fichiers vous-même (j'ai utilisé le logiciel gratuit Audacity): dans un fichier vous pouvez dire "Bonjour!", dans l'autre vous dites "Te voilà enfin! Tu y as mis du temps!", et dans un autre vous dites "Salut, je commençais à m'ennuyer...". Une autre option possible consiste à télécharger des fichiers mp3 contenant des salutations dans différentes langues étrangères.

Attention:  pour que le sketch que je vais bientôt vous présenter fonctionne correctement, vous devez baptiser vos fichier "Track001.mp3", "Track002.mp3", etc.  Et vous les placez dans votre carte SD.

Le sketch:

Mon sketch nécessite l'installation de la librairie SFEMP3Shield.  Chaque fois que le détecteur de mouvement...détecte un mouvement, l'entrée 3 de l'Arduino devient haute pendant quelques secondes.  Le sketch vérifie alors à quand remonte la plus récente détection de mouvement.  S'il s'agit du premier mouvement détecté depuis plus de 15 minutes (temps que vous pouvez évidemment modifier selon vos préférences), un fichier mp3 choisi au hasard sera joué.

Votre salueur électronique vous saluera donc chaque fois que vous serez  de retour dans la pièce après y avoir été absent pendant plusieurs minutes.

Variantes:

L'appareil peut aussi servir à jouer des tours:  placez-le dans le bureau d'un collègue qui ne se doute de rien, et il sera bien surpris d'être salué par un fantôme.  Il peut aussi servir de système d'alarme: quelqu'un qui s'en approche pourrait être accueilli par un agressif "Sortez de ma chambre!!!".

Et lorsque vous en avez assez de votre salueur électronique, vous le démontez pour utiliser ses composants dans un futur projet...

P.S.:  Les lecteurs perspicaces remarqueront une certaines ressemblance avec un projet précédent, dans lequel l'Arduino jouait une courte mélodie lorsqu'il détectait l'arrivée de quelqu'un.

Yves Pelletier (Twitter: @ElectroAmateur)