Premiers sketchs
Blink, le programme de base
L’Arduino, même s’il est tout neuf, contient déjà un programme. Il s’agit de Blink (clignotement), un petit programme de test, implanté en usine et qui demande simplement à la petite LED interne orange (L) de clignoter.
Dans l’environnement Arduino, un programme s’appelle un sketch (ou croquis en français). Le langage de programmation utilisé est proche du C/C++.
Lorsqu’il est alimenté en électricité, l’Arduino s’allume et exécute automatiquement le dernier sketch enregistré dans sa mémoire. L’Arduino ne peut en mémoriser qu’un seul à la fois. Si vous téléversez (transmettez) un nouveau sketch, cela effacera l’ancien. Il faudra donc penser à sauvegarder les sketchs sur l’ordinateur.
Il existe plusieurs façons d’alimenter l’Arduino, mais pour commencer, le plus simple est de brancher simplement la prise USB de l’Arduino à un ordinateur, cela fournit les 5 volts nécessaires à son fonctionnement et permettra ensuite de téléverser de nouveaux sketchs.
S’il n’a jamais été utilisé auparavant, l’Arduino va donc exécuter le sketch Blink.
1. Que se passe-t-il ?
-
La LED verte (ON) s’allume, pour indiquer que l’Arduino est sous tension. Elle resta allumée jusqu’à l’extinction.
-
La LED orange (L) clignote trois fois rapidement, cela indique que l’Arduino démarre et charge son programme.
-
L’Arduino exécute le sketch programmé (Blink) qui fait clignoter lentement la LED orange (L) (elle s’allume une seconde sur deux).
La LED verte reste allumée et la LED orange clignote
2. Examinons le programme Blink
Si ce n’est pas déjà fait, installez l’IDE Arduino sur votre ordinateur (cf. chapitre Les langages de programmation - L’IDE, le programme officiel).
Blink devrait apparaître si c’est la première fois que vous lancez l’IDE Arduino.
Sinon, allez dans Fichier - Exemples - 01.Basics - Blink pour le charger.
Comment charger l’exemple Blink
a. Les commentaires
Les premières lignes du sketch sont constituées de commentaires. Il faut savoir que les commentaires sont tout...
Faire du Morse avec une LED externe
1. LED externe, le branchement
Pour ce premier branchement, nous allons utiliser une breadboard (cf. Connaissances de base - Les principaux composants électroniques - La breadboard (platine d’expérimentation)), une LED et une résistance de 220 ou de 330 ohms.
Il n’est pas forcément nécessaire de déterminer la valeur exacte de la résistance. Vous ne devriez pas rencontrer de problème en restant proche de cette fourchette. Cependant, si vous souhaitez adapter de façon plus précise la résistance à chaque type de LED, vous pouvez aussi utiliser un calculateur comme celui-ci : https://www.framboise314.fr/scratch-raspberry-pi-composants/resistance/#Calculateur_de_pont_diviseur
Pourquoi utiliser une résistance ? Parce que la plupart des LED ont besoin d’une tension comprise entre 1,6 V et 3,6 V (cela dépend de la couleur et du type de LED) pour fonctionner. Mais les sorties numériques de l’Arduino délivrent une tension de 5 V. Si nous branchons directement la LED à la sortie de l’Arduino, elle ne va pas forcément griller tout de suite, mais elle brillera beaucoup trop et sa durée de vie sera raccourcie.
Reproduisez le branchement ci-dessous :
-
La pin GND (ground) est reliée à la masse, dans cet exemple elle représente la borne (-).
-
La LED ne fonctionnera que si elle est branchée à l’endroit, la plus grande patte sur le (+) et la plus petite sur le (-).
-
La sortie numérique de l’Arduino représente la borne (+). Dans cet exemple, il s’agit de la pin n°9, mais vous pouvez utiliser celle de votre choix, de 2 à 13. Cependant, il faudra adapter votre code en fonction de la broche choisie.
-
La résistance et la LED doivent être branchées en série, c’est-à-dire à la suite l’une de l’autre, comme le montre le schéma. Mais rien ne vous empêche de les inverser et de brancher la petite patte de la LED à la borne GND et la résistance à la sortie numérique de l’Arduino.
Branchement d’une LED externe sur la broche 9
Ensuite, modifiez le programme Blink (avec l’IDE Arduino ou Vittascience) et téléversez le sketch afin de tester...
Inverser la LED
Pour que la LED s’allume, il faut une différence de potentiel, (cf. chapitre Connaissances de base - Comprendre l’électronique et l’électricité). Le courant électrique s’écoule du (+) vers le (-). Il ne s’écoule donc pas du (+) vers le (+) ou du (-) vers le (-).
Nous avons, jusqu’à présent, branché la LED entre la borne GND (-) et une sortie de l’Arduino (n°9, par exemple). Dans ce cas, la LED s’allume quand la broche 9 est sur le (+), avec l’instruction :
digitalWrite(9, HIGH);
et s’éteint quand elle est sur le (-), avec l’instruction :
digitalWrite(9, LOW);
Mais il est tout à fait possible de brancher la LED entre la borne 5 V et l’entrée/sortie. En faisant cela, le comportement de la LED est inversé. Elle s’allume quand la fonction digitalWrite est sur LOW et s’éteint quand elle est sur HIGH. Mais n’oubliez pas que la LED est une diode, elle ne laisse passer le courant électrique que dans un sens. Alors, il faut aussi l’inverser (la plus grande patte vers le 5 V et la petite vers l’entrée/sortie).
Pour tester cela, nous allons ajouter une LED d’une autre couleur, branchée entre l’entrée/sortie n°8 et la borne 5 V. Vous pouvez reproduire ce branchement et téléverser le sketch...
Les feux tricolores
Les feux tricolores
Vous vous êtes certainement déjà retrouvé bloqué par un feu routier interminablement rouge. Et vous vous êtes alors peut-être dit qu’il n’était pas bien réglé. Cela tombe bien, car voici un petit exercice qui consiste justement à gérer les feux tricolores d’un carrefour.
C’est un grand classique de l’Arduino. Vous avez besoin de six LED (deux rouges, deux orange et deux vertes), six résistances (d’environ 220 Ω), d’une breadboard et de quelques connecteurs Dupont.
Nous avons donc un carrefour contrôlé par deux feux de signalisation. Vous pouvez reproduire le branchement ci-dessous ou laisser libre cours à vos talents de modélisme pour faire quelque chose de plus réaliste. Vous pouvez aussi utiliser d’autres pins que dans cet exemple, mais il faudra en tenir compte dans le code.
Branchement des feux tricolores
Au départ, l’un des feux est rouge tandis que l’autre est vert. Au bout de cinq secondes, le vert passe à l’orange pendant une seconde (le vert doit s’éteindre), puis au rouge (l’orange doit s’éteindre) pendant que l’autre passe au vert pendant cinq secondes et ainsi de suite.
Ce n’est pas très compliqué, mais vous allez comprendre l’intérêt...
Les sorties analogiques
1. Le fonctionnement des sorties PWM (ou MLI)
Vous avez peut-être remarqué le petit symbole ~ à côté des sorties numériques 3, 5, 6, 9, 10 et 11. Il indique que ces broches sont aussi utilisables en sorties analogiques.
Enfin, pas tout à fait, avec une vraie sortie analogique, il serait possible de varier la tension de sortie de 0 à 5 volts. Ici, la PWM (Pulse Width Modulation) ou en français MLI (Modulation de largeur d’impulsion) est toujours une sortie numérique. C’est-à-dire qu’elle ne peut prendre que deux valeurs, 0 (basse) ou 5 volts (haute). Mais elle est capable de passer très rapidement de l’une à l’autre (entre 490 et 980 fois par seconde). En envoyant moins souvent un signal haut, il est possible de créer des microcoupures et donc de baisser la tension moyenne envoyée. Cela permet de réduire la luminosité d’une LED ou la vitesse d’un moteur, car ils ne sont plus alimentés en continu.
En fait, la LED s’allume et s’éteint à une vitesse si rapide que l’œil humain ne perçoit que la baisse globale de la luminosité au lieu de voir le clignotement. C’est le même phénomène de persistance rétinienne que l’on utilise au cinéma pour donner l’illusion d’un mouvement avec une succession d’images fixes. Le moteur, lui, ne s’arrête pas, il continue sur son élan, mais comme il reçoit moins souvent de l’électricité, il tourne moins vite.
Les sorties analogiques de l’Arduino Uno peuvent prendre 256 valeurs différentes, de 0 à 255 (8 bits). Cette valeur s’appelle le rapport cyclique. Plus il augmente et plus la sortie reste longtemps en position haute (5 V).
La fonction analogWrite, permet de modifier la valeur d’une sortie analogique.
Contrairement à la fonction digitalWrite, il n’est pas obligatoire d’indiquer dans la fonction setup que la broche est utilisée comme une sortie.
void setup() {
pinMode(NUMERODEPIN, OUTPUT); // Instruction facultative
}
Mais à part cela, la fonction analogWrite fonctionne sur le même principe que digitalWrite. Il suffit simplement d’indiquer le numéro...
Le bouton poussoir
Assortiment de boutons
C’est certainement le composant électronique le plus simple. Quand on appuie, il établit le contact (on dit que le circuit est fermé) et permet le passage du courant électrique. Si on arrête d’appuyer, un système de ressort coupe automatiquement le contact (le circuit est ouvert) et l’électricité ne peut plus passer.
Il en existe de nombreux modèles, vous pouvez en achetez un lot pour une somme modique ou en récupérer sur de vieux appareils hors d’usage. Par exemple, un vieux clavier à touches mécaniques contient une centaine de boutons poussoirs d’excellente qualité, mais pour les mériter, il faudra passer quelques heures à les dessouder.
Certains n’ont que deux pattes, ils sont donc plus faciles à utiliser. Les boutons à trois pattes ont souvent une patte qui établit le contact au repos, une autre qui établit le contact quand on appuie (celle que l’on utilise le plus souvent) et la troisième est la patte commune, reliée aux deux autres en fonction de l’état du bouton (appuyé ou relaché). Certains boutons ont quatre pattes. En général, les pattes sont reliées deux par deux, ce qui fait que si vous vous trompez, le circuit sera toujours fermé (que vous appuyiez ou non). L’astuce pour ne pas trop s’embêter est d’utiliser la diagonale pour les connecter.
En cas de doute, prenez le temps de tester au multimètre le fonctionnement d’un nouveau bouton. Cela peut éviter bien des soucis (passer ensuite des heures à vous demander pourquoi le circuit ne fonctionne pas correctement).
Nous n’avons pas encore utilisé les broches comme des entrées. Sachez qu’elles ne peuvent recevoir qu’une très faible tension (entre 0 et 5 V). L’Arduino Uno possède quatorze entrées (ou sorties) numériques et six entrées analogiques (mais qui peuvent aussi servir d’entrées ou de sorties numériques).
Les entrées numériques ne peuvent détecter...
Le passage piéton
Le passage piéton
Voilà un petit exemple utilisant un bouton. Il s’agit de gérer une nouvelle fois un feu tricolore. Mais cette fois-ci, nous ne sommes pas à un carrefour, mais sur une route très fréquentée. Elle est traversée par un passage piéton. Nous avons donc besoin d’un feu tricolore (rouge, orange, vert) pour les voitures et bicolore (rouge et vert) pour les piétons. Il faut aussi un bouton d’appel piéton. Par défaut, le feu est vert pour les automobilistes et rouge pour les piétons. Les voitures peuvent rouler tant que personne n’a besoin de traverser. Mais si un piéton se présente, il appuie sur le bouton et quelques secondes plus tard, le feu passe à l’orange, puis au rouge pour les voitures (et au vert pour les piétons). Ce n’est pas instantané, pour éviter le blocage de la circulation quand il y a beaucoup de piétons. Nous laissons donc aux piétons un peu de temps pour qu’ils traversent. Puis, le feu des piétons redevient rouge. Pendant quelques secondes, les deux feux sont rouges pour que les derniers piétons aient le temps de finir de traverser. Et enfin, le feu des automobilistes redevient vert.
Choisissez vous-même la durée de chaque feu. En sachant qu’elle n’a pas besoin d’être trop réaliste. Si...
Le clignotement sans blocage
La fonction delay permet de marquer une pause dans l’exécution du programme. Jusqu’à présent, c’est elle que nous utilisions pour faire clignoter nos LED. Cette fonction convient bien à certains sketchs. Mais le problème, c’est qu’elle bloque tout le programme. Si, par exemple, vous appuyez sur un bouton pendant ce temps, le programme ne le détectera pas.
Pour tester cela, nous aurons besoin de deux LED et d’un bouton relié cette fois-ci à une résistance en mode pull-up (c’est contre-intuitif, mais le bouton envoie la valeur LOW quand il est pressé et HIGH au repos). L’une des LED s’allumera une seconde sur deux (comme le sketch Blink), mais l’autre s’allumera seulement si l’on appuie sur le bouton. Vous pouvez reproduire ce branchement et téléverser le code correspondant.
Tester les limites de la fonction delay
//* Clignotement_bloquant
* Ce sketch montre que la fonction delay
* bloque l'exécution du programme
*/
const int BOUTON = 2; // Le bouton est relié à la pin 2
const int LEDVERTE = 8; // La LED verte est reliée à la pin 8
const int LEDROUGE = 9; // La LED rouge est reliée à la pin 9
void setup() {
pinMode(BOUTON, INPUT); // Le bouton est une entrée
pinMode(LEDVERTE, OUTPUT); // La LED verte est une sortie
pinMode(LEDROUGE, OUTPUT); // La LED rouge est une sortie
}
void loop() {
// Blink
digitalWrite(LEDROUGE, HIGH);
delay(1000);
digitalWrite(LEDROUGE, LOW);
delay(1000);
// Allume la LED quand j'appuie sur le bouton
digitalWrite(LEDVERTE,!digitalRead(BOUTON));
}
Clignotement_bloquant
Le code se trouve à cette adresse : https://fr.vittascience.com/arduino/?link=5f39827e5dcb9
Vous pouvez remarquer que si vous appuyez rapidement sur le bouton, la LED verte ne s’allume pas (ou rarement). Par contre, si vous laissez le doigt sur le bouton, elle finit par s’allumer, Quand vous relâchez le bouton, c’est le même principe, elle ne s’éteint pas instantanément. C’est normal, nous...
Le compteur binaire
Il s’agit d’un programme capable d’afficher (en binaire) combien de fois vous avez appuyé sur un bouton.
1. Gérer l’incrémentation du compteur
Même en appuyant très rapidement sur le bouton, le doigt reste quand même appuyé durant quelques dixièmes de seconde. Pour nous, c’est très rapide, mais cela laisse à l’Arduino le temps d’exécuter de nombreuses fois la fonction loop. Ce qui veut dire que tant que vous gardez le doigt appuyé sur le bouton, le compteur va continuer à s’incrémenter. Il faut donc trouver un système qui incrémente une fois le compteur, mais qui ensuite ne fait rien jusqu’à ce que l’on ait relâché le bouton.
La solution est d’utiliser une variable que l’on peut par exemple appeler ancienEtatBouton et qui sert à stocker l’état du bouton à la fin de la fonction loop. Pour que le compteur soit incrémenté au cours d’une boucle suivante, il faut non seulement que le bouton soit appuyé, mais en plus que l’état du bouton ait changé depuis la dernière exécution de la boucle loop.
2. Le problème du rebond
Il faut savoir que quand on appuie sur un bouton (ou quand on le relâche), cela ne fonctionne pas instantanément. Les deux parties du bouton qui entrent en contact rebondissent très légèrement, ce qui va occasionner pendant quelques millièmes de seconde une alternance entre microcontacts et microcoupures. Ce phénomène mécanique n’est absolument pas perceptible par l’être humain. Cependant, l’Arduino qui est beaucoup plus rapide que nous, va croire que vous avez appuyé plusieurs fois sur le bouton.
Ce n’était pas vraiment important dans les exemples précédents. Mais pour compter le nombre de fois où l’on a réellement appuyé sur le bouton, cela va fausser les résultats. Pour résoudre ce problème, il existe une solution logicielle. Elle consiste à modifier le code pour qu’il y ait un léger délai (50 ms) lorsque le bouton change d’état (appuyé ou relâché). Ainsi l’Arduino attend la fin du rebond pour continuer...
Le potentiomètre
Fonctionnement du potentiomètre
Le potentiomètre est une résistance variable qui possède généralement trois pattes. Qu’il soit rotatif ou rectiligne, le principe est le même. Les bornes situées de chaque côté sont reliées l’une à la masse et l’autre à la tension maximum (le plus souvent la borne 5 V). La borne du milieu est branchée sur une des six entrées analogiques de l’Arduino (A0, A1, A2, A3, A4 ou A5).
Les entrées analogiques sont capables de détecter 1 024 valeurs différentes sur une tension de 0 à 5 V. Une valeur de 0 correspond à une tension 0 V et une valeur de 1 023 à 5 V. En tournant (ou en bougeant) le bouton, un curseur se déplace à l’intérieur du potentiomètre. S’il se rapproche de la masse, la tension détectée sera plus petite. Et si au contraire il se rapproche de la valeur maximum (5 V), la tension mesurée sera plus élevée.
1. Programmation d’une entrée analogique
C’est le même principe qu’avec une entrée numérique. Avant de l’utiliser, il faut déclarer dans la fonction setup que la broche est une entrée. Mais pour différencier les broches analogiques des broches numériques qui portent le même numéro...
La LED RGB
Elle est en fait composée de trois LED : Red, Green, Blue (ou Rouge, Vert, Bleu en français). En modulant l’intensité de ces trois couleurs, la LED RGB est capable d’en afficher plusieurs millions.
La LED RGB possède quatre pattes. L’une est commune aux trois LED et les trois autres pattes sont reliées à l’autre borne de chaque LED. Il en existe donc deux types :
-
LED à anode commune, les trois LED sont reliées ensemble par la borne (+).
-
LED à cathode commune, les trois LED sont reliées ensemble par la borne (-).
Le branchement est légèrement différent puisque la patte commune sera, suivant le cas, reliée à la borne 5 V ou GND. Et la LED s’allumera lorsque l’entrée/sortie de l’Arduino sera à un potentiel différent (LOW ou HIGH, suivant le cas) (cf. chapitre Premiers sketchs - Inverser la LED).
La LED RGB existe sous forme de module, dans ce cas, les couleurs correspondant à chaque broche sont indiquées par une lettre (R,G ou B), mais elle existe aussi sous forme de LED avec quatre pattes. Pour connaître la couleur qui correspond à chaque patte, consultez le petit schéma en haut à droite des deux branchements (anode ou cathode commune).
Pour tester le fonctionnement de la LED RGB, vous pouvez reproduire l’un de ces branchements (suivant...
Les LED adressables (Neopixel)
Ce sont des LED RGB "intelligentes" reliées en réseau. Chacune d’elles possède une puce électronique (et une adresse spécifique), afin de recevoir et d’interpréter les instructions qui la concernent (allumage, extinction, luminosité, couleur). Les LED adressables sont idéales pour créer très facilement des animations. Si vous avez des besoins spécifiques, vous pouvez les acheter à l’unité. Sinon, il est beaucoup plus simple de se procurer un module déjà assemblé. Il en existe de nombreux types (guirlande, ruban, anneau ou carte d’extension).
Exemples de modules de LED adressables
1. Bandes et anneaux
Les anneaux sont simplement constitués de LED disposées en cercle. Comme pour les autres modules, il y a une première (et une dernière) LED. Le branchement est très facile car les bornes sont clairement identifiées. Il suffit de 3 bornes pour contrôler le module de LED (2 pour l’alimentation + 1 pour les données), mais il en existe une quatrième (permettant de continuer la chaîne de LED).
Si vous n’avez qu’une dizaine de LED, vous pouvez sans problème utiliser l’alimentation de l’Arduino (5V et GND). Connectez aussi une entrée/sortie de l’Arduino (par exemple, le port n° 6) à la borne d’entrée du module afin de le contrôler.
Branchement d’un module de 8 LED adressables
Au-delà de 10 LED, il est conseillé d’ajouter une alimentation externe. Cependant, vous pouvez quand même repousser cette limite en baissant la luminosité ou en évitant d’allumer toutes les LED en même temps. Les LED adressables acceptent sans problème une alimentation comprise entre 3 et 5,5 V (ne dépassez jamais 6 V). Vous pouvez utiliser un petit transformateur de récupération ou 3 à 4 piles.
Il est possible de couper les rubans pour raccourcir la chaîne ou de relier ensemble plusieurs modules (afin d’augmenter le nombre de LED). Pour cela, connectez simplement la borne "Out" du premier module à la borne "In" du module suivant (et ainsi de suite). Branchez également l’alimentation électrique (en parallèle)....
L’encodeur rotatif
Il ressemble au potentiomètre, mais vous pouvez le tourner à l’infini dans un sens ou dans l’autre. En fait, il est composé de deux boutons poussoirs légèrement décalés qui sont actionnés par rotation de l’encodeur. Certains modèles en possèdent même un troisième actionné par appui sur le bouton.
Contrairement au potentiomètre, la rotation n’est pas libre, il y a des petits crans. Le passage d’un cran à l’autre correspond à un appui suivi d’un relâchement du bouton 1 (dans un sens comme dans l’autre). Mais au moment où le bouton 1 est relâché, le bouton 2 reste en position appuyée si l’on tourne dans un sens, et relâchée si l’on tourne dans l’autre. Cela permet de connaître le sens de rotation.
Comme pour la LED RGB, vous pouvez le trouver sous forme d’un simple composant à trois pattes. Celle du milieu est commune aux deux boutons, il faut donc la relier à la borne GND (ou 5 V suivant votre montage). Les deux autres correspondent à chacun des deux boutons. Sur certains modèles, vous pouvez avoir deux pattes supplémentaires de l’autre côté. Ce sont les broches prévues pour le troisième bouton, qui est indépendant.
L’encodeur rotatif...
Le buzzer
Le buzzer est un composant électronique capable de produire des sons. Il possède une lamelle capable de se déformer sous l’influence d’un courant électrique. En modifiant la fréquence d’alimentation (l’alternance de périodes où le buzzer est alimenté ou non), il est possible de jouer différentes notes.
1. Utilisation du buzzer
Choisissez l’un de ces deux branchements. Ils sont assez simples, il suffit de relier l’une des broches du buzzer à l’entrée/sortie numérique 12 et l’autre à la broche GND (ou à la broche 5 V) avec une résistance de 100 Ω en série. Comme d’habitude, vous pouvez choisir une autre pin de l’Arduino, mais il faudra alors adapter le code.
Les deux façons de brancher le buzzer à la broche 12
Téléversez ensuite ce sketch. Il s’agit d’une boucle qui alimente pendant 800 microsecondes (0,0008 seconde) le buzzer, puis l’arrête pendant la même durée avant de recommencer 200 fois de suite avant de faire une pause de 0,5 seconde.
// Buzzer_Test
const int BUZZER = 12;
const int DUREE = 800;
void setup() {
pinMode(BUZZER,OUTPUT);
}
void loop() {
for(int i=0; i<100; i++) {
digitalWrite(BUZZER, HIGH);
delayMicroseconds(DUREE);
digitalWrite(BUZZER, LOW);
delayMicroseconds(DUREE);
}
delay(500); // délai entre chaque note
}
Vous pouvez changer la note en modifiant la valeur de la constante DUREE.
Buzzer_Test
Vittascience ne permet pas de gérer les pauses de quelques microsecondes. La note est donc un peu différente, mais le principe reste le même.
Retrouvez le programme ici : https://fr.vittascience.com/arduino/?link=5f43ebcfc5798
Il existe aussi une fonction spécifique, il s’agit de tone. Elle facilite l’utilisation du buzzer, car il suffit d’indiquer dans les paramètres de la fonction le numéro de la broche et la fréquence pour joue une note (en continu). Théoriquement, vous pouvez choisir n’importe quelle fréquence comprise entre 31 Hz...
Le piano banane
Voilà un petit montage amusant, c’est un piano qui permet (comme tous les pianos) de jouer de la musique. Mais les touches sont ici remplacées par des bananes.
Le piano banane
1. Principe du bouton banane
Il s’agit simplement d’utiliser la résistance du corps humain pour créer un bouton tactile. Le principe est très simple :
Dans un premier temps, vous reliez une partie de votre corps à la masse de l’Arduino, par exemple avec un bracelet (ou tout autre objet métallique). Lorsque vous touchez un autre objet (légèrement conducteur) relié à une entrée de l’Arduino ainsi qu’à une grosse résistance pull-up, le contact est détecté par l’Arduino. Le principe est exactement le même qu’avec le bouton poussoir, à la différence que cette fois vous faites partie du circuit (ne vous inquiétez pas, il n’y a absolument aucun danger). Pour que cela fonctionne, il faut une résistance pull-up beaucoup plus haute que pour un bouton classique.
Il faut savoir que le courant électrique choisit toujours le chemin le plus facile (celui qui offre le moins de résistance). C’est un peu comme un automobiliste qui a le choix entre une belle autoroute à trois voies bien dégagée et une petite route sinueuse et embouteillée.
Donc, si le courant a le choix entre une résistance pull-up moyenne (environ 10 KΩ) et le bouton poussoir (dont la résistance est proche de 0), il choisit forcément le bouton. Mais si l’on remplace le bouton par le corps humain, cela change tout. La peau offre une telle grosse résistance, que le courant préférera continuer à passer par la résistance de 10 kΩ, et malheureusement, l’Arduino ne détectera pas notre contact.
Il faut donc fournir au courant une alternative encore pire que de passer par notre propre corps. Si l’on peut comparer le corps humain à une petite rue très étroite, il faut que l’autre itinéraire passe par un chemin de terre bien cabossé avec des tracteurs, des vaches ou des moutons. À ce niveau, nous ne mesurons plus la résistance en kiloohms (1 kΩ = 1 000 Ω), mais en mégaohms...
Le jeu Simon
Il s’agit d’un des premiers jeux électroniques (l’ancêtre des consoles portables). Il était fabriqué par la société MB (Milton Bradley), rachetée plus tard par Hasbro. En 1978, tous les enfants rêvaient de le trouver sous le sapin de Noël. Il est possible de retrouver sur Internet des publicités délicieusement rétro témoignant de cette époque.
Il doit son nom au jeu Simon Says… qui est la version anglaise de Jacques a dit....
Simon possède quatre boutons lumineux, de couleurs différentes (rouge, jaune, bleu, vert). Chacun est associé à une note de musique. La version originale possédait plusieurs modes de jeux, mais le plus populaire est celui où Simon joue une séquence de notes qu’il faut répéter. Au début, c’est facile, mais chaque fois que le joueur réussit, Simon rejoue la séquence en ajoutant une note. Si le joueur se trompe ou qu’il hésite plus de trois secondes, il a perdu et la partie s’arrête.
Il y avait quatre niveaux de difficulté :
-
1er niveau : 8 notes.
-
2e niveau : 14 notes.
-
3e niveau : 20 notes.
-
4e niveau : 31 notes.
Le jeu Simon original
1. Le branchement
Pour créer votre propre clone de Simon, il suffit d’un buzzer, de quatre LED, de quatre boutons, de quatre résistances de 220 Ω (ou 330 Ω), d’une résistance d’environ 100 Ω (reliée au buzzer) et d’un Arduino. Vous pouvez reproduire ce branchement :
Branchement du jeu Simon en utilisant un buzzer
Si vous n’aimez pas trop le bruit métallique du buzzer, remplacez-le par un petit haut-parleur (d’environ 8 Ω) en ajoutant un transistor bipolaire de type NPN (comme par exemple le 2N2222), une résistance de 1 kΩ et un potentiomètre (pour pouvoir régler le volume du haut-parleur). Pour cela, reproduisez plutôt ce schéma :
Branchement du jeu Simon en utilisant un petit haut-parleur
Avant de commencer à programmer le jeu, il est plus prudent de tester s’il n’y a pas d’erreur dans les branchements. Vous éviterez ainsi de passer de longues heures à déboguer le programme pour découvrir ensuite que le problème venait d’une...