You are on page 1of 293
Cédric DOUTRIAUX Arduino S’exercer au prototypage électronique (10 projets créatifs a réaliser soi-méme) ¥v Fichiers a télécharger Wi poor else les projets Wy FABRIG Arduino S’exercer au prototypage électronique (10 projets créatifs a réaliser soi-méme) v Fichiers a télécharger LW] poor else les projets Table des matigres 1 es éléments & télécharger sont disponibles a ladresse suivante: http://www.editions-eni.fr Saisissez la référence ENI de louvrage LFARDDIY dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement. Introduction 1. Présentation.................0seeeeeeeeeeeeee enna MN 2 Objectifs 2.0... cece cesses 3 3. Aqui sadresse ce livre? oe 4 4, Arduino : un projet open source . . . % 5. Une gamme quis’étend........ cies 15 51 Cartes a 8 52 Cartes d'extension (shields) ” 53 Bibliothéques. ...............ccccccceetteeeeeeeeetteeeeee 18 Chapitre 1 Comment utiliser ce livre ? 1. Structure 19 2. Liste des projets 20 3. Entrée par themes Sera eececee ier ators AED, al 31. Objets connectés.... a 32 Outils...... ai 33 Robots anennnee 7 7 ee at 34 Jeux vo cecsesesssesssees 22 | 35 Dispositifs artistiques. 7 4, Entrée par notions — fe od Ai) (Coda 22 42 Microcontréleur....... oy 43 Composants électroniques cee 8S 2. Arduino - S’exercer au prototypage électronique 5.1 Améliorations possibles 52 Ressources. 5. Matériel et outillage....... . 26 Sl logidekit a OS eee ee ee m2), 52 Outils... : cesses 30 53 Consommables......2...000++: . 34 54 Fichiers a télécharger .........0..c0ssse eee ceeeteeeeneees 35 6. Rappels . coottesetesitees coca 36 61 Programmation 36 62 Electricité ... 36 Chapitre 2 Projet 1 - Synthétiseur therémine 1. Présentation ........cccscessscseeeees ore ATR BEE 33 U1 Principe de Fonctionnernent ee ceas depress tds. AB 12 Notions.......0..c00005 ae) 2. Matériel et outillage......0...cssc. cesses 40 21 Matériel 40 22 Outillage Ae 3. Montage 2 31, Transducteur piézodlectrique M8 32 Capteur de lumiére... Ms 33 Capteur capacitif 48 4, Programmation. .. 48 41 Eulomagedy capt demir. 2 48 42 Etalonnage du capteur capacitif... 50 43. Genération du son eS) 5, Pour aller plus loin 55 . 5 56 Table des matigres 3 Chapitre 3 Projet 2 - Jeu de mémorisation musicale 1. Présentation. : aa ~ s7 LI Principe de fonctionnement “ cess etenestesreteseeeessees SB 12 Notions.....c.sceesesseeeeeeee ne boos 59 2. Matériel et outillage ee ee 59 21 Matériel : : : 59 22 Outillage. oo... eecsescscessseeeecseseee . ceseeteseseeeseee 6 3, Montage ......scesssseeceseneees soregsetsiesoriy sevacessaeaneSB2 31 Actionneur piézoélectrique sees . . 63 32 Leds............: soneeerneecbvosiicts.. 33. Boutons poussoirs............ ees 4, Programmation. .........000++ pee 08 41 Chanter des mélodies 66 42 Capter des mélodi 70 43 Composer des mélodies 2B 5, Pouraller plus loin 86 51 Améliorations possibles : 86 52 Ressources. aed “ sateen at svaeger: 87 Chapitre 4 Projet 3 - Systéme d’arrosage automatique 1. Présentation 89 1 Principe de fonctionnement.. bn SOME. 88 12. Notions... _ p50 2 Matériel et outilage, cesses cesses 90 21 Matériel 30 22 Outillage. —— 93 3, Montage cossctsisteesseveee . : 94 31 Capteur dhumidite.. oy 32 Pompe 95 4 Arduino - S’exercer au prototypage électronique 4, Programmation........c0cecsssiesssesseiesssisssssereesesieseesee veces 9B 41 Lecture du capteur..... — : : . 2 99 42. Activation de larrosage. 101 5, Pour aller plus loin 104 51. Améliorations possibles o 24 52 Ressources......... — — 105 Chapitre 5 Projet 4 - Oscilloscope minimal 1. Présentation cecciseteretsesseeses teseecseneesseessseeoT U1 Principe de fonctionnement 0.0... a 12 Notions...........cscseesseeees : 108 2 Matériel et outilage + 108 21 Materiel 108 22 Outillage 109 3. Montage coo cuesetesisisessssssese spsettsoned 31 Entrée analogique. : 0 4, Programmation......... : 113 41. Mesures de lentrée analogique par Arduino 2M 42 Affichage graphique sur ordinateur. 2M 43 Observation dune sortie PWM M16 o Pour aller plus loin 18 51. Améliorations possibles ... a) 52 Ressources.......... : . tig Table des matigres 5 Chapitre 6 Projet 5 - Robot suiveur de ligne 1. Présentation... - a sanesnereccngpnasgaaens eae aeons . oe lA 11 Principe de fonctionnement......2...0:cccesesesseevssseesvseseesesetevesteseseseeeel2 12. Notions...... = 122 2. Matériel et outillage. . . 123 21 Matériel ...... . aa . maandes oe oneaee 123 22 Outillage _ — 05 3. Montage ... 125 3.1 Chassis waivenes * n 125 32 Contréleur moteur ee), 33 Matrice de capteurs de réflexion. eevee f38 4, Programmation. i Ses ere 134) 41 Capteurs de réflexion. 134 42. Bibliothéque moteur ae Pers ces eeesneesess seed 421 Créer la bibliothéque........... _ ee ve 422 Instancier la bibliothéque vet M3 43 Suiveur de ligne o o o MS 5, Pour aller plUsloin...........s:ccescs essere ug 51 Améliorations possibles ...........0eccesssesssesessesereetesieseseeeseeeesee ses lM@ 5.2 Ressources me ae 3 * 150 Chapitre 7 Projet 6 - Lampe multicolore pilotée en Bluetooth 1. Présentation, . 151 11 Principe de fonctionnement............+- 182 12 Notions. 152 2. Matériel et outillage 182 21 Matériel cone oe . es + BZ 22 Outillage. 154 3. Montage E 155 3.1 Module Bluetooth . enee . 7 SS, 3.2 Ruban de leds RVB 157 Arduino - S'exercer au prototypage électronique 4, Programmation.......... ee one Seton NB 41 Test du ruban de leds .... oe Pai equim Siem ot = 161 42 Activation de la communication Bluetooth 163 43 Connexion entre le telephone et la lampe 168 44 Memorisation des réglages in 5. Pour aller plus loin A 51 Améliorations possibles .. oe ‘ 173 5.2 Ressources. aaaecensagdnoaersseeserenenneeses: N74 Chapitre 8 Projet 7 - Station météo Wi-Fi 1. Présentation UL Principe de Fonctionnement. 176 12. Notions. 176 2. Matériel et outillage.... oo. eceeetetteeeeeeecetttteeeeeeeeee 176 21 Matériel... eee. 176 22 Outillage 178 3. Montage 7B 4, Programmation. 173 41. Configuration de IIDE pour la carte MKRIOOO. 180 42 Mesures dela pression et de la température...........ccsscessssssesesseseesesenes 182 43 Communication Wi-Fi......... = 186 431 Installation de la biblothéque WiFiI01 sessnesseeesen eld eB 432 Verification et/ou mise a jour du Firmware ..........c.essscsesssesesseeee 187 433 Création dun miniserveur web... . 189 43.4 Mise en graphe des mesures . coors eB 5. Pouraller plus loin ». 202 51. Améliorations possibles 202 52 Ressources. 203 Table des matigres 7 Chapitre 9 Projet 8 - Télémétre a ultrasons 1. Présentation .-205 11 Principe de fonctionnement.... 206 12 Notions. 206 2. Matériel et outillage........ --.-206 21° Matériel 206 22 Outillage . — 208 3, Montage preeceen cece 208 31 Eeran LCD . biastne i gbecanesett eee -.208 32 Capteur a ultrason..... - 2 2l2 33 Alimentation ...... finan BEIRIIG ent 4, Programmation. ..... coc eevseseeesesssevevsueteveveveess 22M 41. Gestion du capteur&ultrasons eer 24 42 ASfichage des mesures sur léeran LCD : eee 2M), 43 ASffichage d'une jauge sur lécran LCD. = seseee 22 5. Pour aller plus loin ene 275 51 Améliorations possibles secrserenesrnesserseersaetltest-ts-22B 5.2 Ressources.......csccssssees nt] Chapitre 10 Projet 9 - Robot autonome hexapode 1. Présentation... rane Beit tatetanss CO 11 Notions... ebponsterauseestssteaanses 230 2, Matériel et outillage............ssscccseessseeseresserestsseeserseens 230 21 Matériel a cocsutesnsesstessesssveseeses 230 22 Outillage.... 1 B82 3. Construction. .. sesessseeesveseeseesesvstevesessseser ss: 288 31 Assemblage des servornoteurs ceevessessseveseessesess ess 288 3.2 Fixation de fArduino...........00s.s0++ 234 33 Cablage — 235 34 Construction des pattes . cesveteeveteensesesssessee ss 288 35 Fixation des pattes .... aeeanneale 239 8 Arduino - s'exercer au prototypage électronique 4, Programmation ........0+. . . etveeesseiZAl 41 Marche lente .........cescscscsseessseeseseesereesastessreseeveessssessseecesecsssee 261 42 Marche combinatoire. 2h 43 Marche autonome. ees 248 5, Pouraller plus loin . : oo 251 51. Améliorations possibles .........02..cccssseeseees : 251 52 Ressources... sesseeeveeesteessseseesesesseeeQ5l Chapitre tt Projet 10 - Dispositif d'affichage utilisant la persistance rétinienne 1. Présentation. 7 253 11 Principe de fonctionnement sreeenatienes Maeva orsibst ab, 254 12 Notions... 254 2. Materiel et outillage . Uae, cesses 255 21° Matériel dues + 255, 22 Outillage oes... sesssenetersnensseessenesenstets ». 256 3. Montage cecteeeessiesiees cos ceetseeeeer eee 256 31 Alimentation électrique — ——— 257 32 Ruban de leds foes 258 33. Montage sur une rove de vélo 261 4, Programmation... : 262 41 Testdes leds adressables........6...ccccscecsssssesesssssesvseesssesesssssssessse 262 42 Génération dun arc-en-ciel Bee e ener 267 43. Génération d'un harmonographe. . : 270 44 Sélection du motif... cons 273 5. Pouraller plus loin 277 5.1 Améliorations possibles ......... 277 52 Ressources. a a eee ++ 278 Chapitre 12 Pour aller plus loin - Concevoir un projet 1. Créer un projet 2. Logiciel et matériel libres : la nouvelle opulence: 3, Ressources . 31 Enligne cosets 3.2 Hackerspaces et fablabs. . Glossaire. Index 279 281 282 282 +283 285, 289 Introduction 1. Présentation Arduino est un ensemble matériel (une carte électronique) et logiciel (un environnement de développement integré) qui permet de sinitier a lélectronique-informatique et au développe- ment de dispositifs interactifs physiques. La carte électronique est pourvue dun certain nombre d entrées et de sorties qui peuvent lire ou actionner des composants électroniques ou électriques. L'environnement de développe- ‘ment intégré (ou IDE) permet quant a lui dutiliser un ordinateur pour programmer le microcon- trdleur qui anime la carte. Inventé a l'université d'lvrea en Italie en 2005, ce projet a révolutionné laccés au prototypage électronique. En effet, alors que pour programmer un microcontréleur, i falait auparavant étre ingénieur électronicien, équipé de nombreux outils, Arduino a pour la premiere fois proposé une plateforme matérielle (carte électronique) connectable directement en USB sur un ordinateur, et un IDE facile a prendre en main et diffusé sous licence libre 1 12 Arduino - S’exercer au prototypage électronique IDE Arduino Arduino UNO Anime par un microcontréleur, c'est-a-dire un petit ordinateur (3 lorigine un ATmegal68), cet util permet, en gérant des capteurs (lumiére, température, distance, etc) et en pilotant des actionneurs (lumiéres, moteurs, relais...) de prototyper Facilement des dispositifs électroniques autonomes ou connecteés dans les domaines aussi variés que l'art numérique, les sciences, les loisirs créatifs, l'éducation, la robotique ou le design. Les systémes animés par cette carte peuvent étre soit entiérement autonomes, soit concus pour dialoguer avec un ordinateur via une communication série, ou avec d'autres terminaux comme les tablettes ou smartphones par le Bluetooth ou le Wi-Fi, Dans le cas du dialogue avec un ordinateur, les données échangées peuvent étre interfacées avec de nombreux logiciels libres ou non : Pure Data, Flash, Processing, Python, etc. Utilisable par un novice & des fins tiation, Arduino est aussi efficace pour des projets plus ambitieux, voire du prototypage de haut niveau pour Internet des objets ou les machines a commandes numériques. Arduino a ainsi été partie prenante de lémergence du projet Reprap (imprimante 3D open source) en 2007 et de explosion du nombre dimprimantes 3D domestiques. Dans le méme ordre didées, les drones faits maison sont pour la plupart animés par une carte Arduino. Plus .genéralement, le projet Arduino participe du mouvement de fond autour du DIY (Do it Yourself ou “Faites-le vous-méme’) et des Fablabs. qui explose un peu partout dans le monde depuis ces 1S derniéres années en rendant accessibles au plus grand nombre des technologies de pointe et des savoir-faire jusque-la réservés aux ingénieurs et spécialistes. Commencant a se répandre dans le monde de l'éducation, Arduino est aussi un composant privilegié dans la mise en ceuvre du projet pédagogique américain nommé STEAM (Sciences Technics Electronics Arts Mechanics visant a décloisonner les disciplines techniques (http:// sead.viz tamu.edu/about/pdf/STEAM pdf, https://en.wikipedia.org/wiki/STEAM fields). (© Edtions EM -Allrights reserved Introduction Meme en France, il commence aétre utilise de maniére de plus en plus massive dans es colleges et lycées pour initier les éléves a l'électronique, automatique ou la robotique. Des enseignants francais ont méme codéveloppé un outil de programmation graphique dédié a cet outil: http://technologiescollege github io/Blockly-at-rduino/ 2. Objectifs Depuis la création du projet, de nombreux prolongements sont apparus, soutenus par une com- munauté open source trés large qui a développé de nombreuses lbrairies (logicielles) et cartes dextension (shields), interfacant Arduino avec toutes sortes de machines et de dispositifs Ce livre a pour objectif lapprofondissement de la maitrise de univers Arduino a travers la realisation de 10 projets & faire soi-méme dune difficulte gradvelle. idee est de survoler le plus de champs possible couverts par ce systéme afin d offrir un pano- rama complet, sachant quil est difficile d étre exhaustif, carla richesse et la vitesse de develop- pement du monde Arduino sont telles que des nouveautes apparaissent chaque jour. Aussi, 'ambition de ce livre est plutét de vous apprendre une démarche générique de prototy- page électronique a travers l'utilisation et lintégration de différents composants et circuits capteurs et actionneurs dans un projet Arduino. Le but ultime étant de vous aguerrir a la conception et au pilotage de projets complets de votre propre cru, sachant quil est moins utile d apprendre de maniére exhaustive (tache infinie) que d'agprende d apprendre de Facon a pou- voir toujours se tenir 3 jour des évolutions techniques dans Iécosystéme Arduino et dans lélec- tronique en général Du point de vue du matériel, cet apprentissage passe notamment par le décryptage d'une fiche technique de composant (appelée aussi datasheet) permettant de comprendre ses contraintes dutilisation et ses méthodes de commande. Vue sous langle du code, cette démarche passe aussi parla découverte de l'utilisation et méme la création de bibliothéques (qui sont des extensions de code ajoutant de nouvelles fonctionna- lités, la création et lapel de fonctions spécifiques ov linterfacage avec des modules materiels, tels que des shields ou d'autres composants complexes: Ainsi, les projets proposés permettent d'appréhender la programmation de séquences com- plexes influencées par analyse et le traitement de signaux provenant de capteurs dans le but dagir sur des actionneurs. Mais cette exploration passe aussi par la mise en ceuvre de compo- sants externes, comme des interfaces Bluetooth, ou la programmation de puces autonomes & travers IDE Arduino ou lnterfacage d'un code Arduino avec un programme sur ordinateur. La liste exhaustive de ces notions est développée dans le chapitre Comment utiliser ce livre ? a la section Entrée par notions. 13 14. arduino - s’exercer au prototypage électronique 3.A qui s‘adresse ce livre ? Ce livre n'est pas un ouvrage dinitiation, mais de perfectionnement. IIsadresse a toute personne désireuse d approfondir sa connaissance dans le développement de projets avec Arduino, Ceci sous-entend davoir déja expérimenté ce systéme, d avoir déja installé IDE Arduino sur son ordinateur et essayé de “fare clignoter une led” avec cet outil. II faut également maitriser les ru- diments d’électronique : le nom et le principe de fonctionnement des composants de base, les techniques de montage dun circuit électronique sur plaque de prototypage, et les notions essentielles sur les unites et les grandeurs rencontrées (tension, courant, résistance, etc.). Mais il nest pas pour autant nécessaire d avoir fait des études supérieures d électronique : la plupart des principes abordés dans ce livre sont accessibles a nimporte quel lecteur un tant soit peu concentré. Du point de vue informatique, il est sous-entendu davoir quelques notions de programmation : sans étre programmeur. il agit d'avoir un minimum de notions de code informatique et d'avoir deja télécharge un programme de son ordinateur vers la carte Arduino. Si jamais ces bases vous font défaut, vous étes invité a consulter le livre Arduino - Apprendre a dvelopper pour créer des objets intelligents dans la collection Ressources informatiques. 4. Arduino : un projet open source Arduino est un projet open source, cest-a-dire que le design des cartes (publi sous une licence Creative Commons) et le code source de IIDE de programmation (publié sous une licence GNU GPL - General Public Licence) sont libres d étre modifiés, reproduits et partages. Il est Iui-méme issu dautres projets open source puisque IDE est dérivé du programme Processing (http://processing.org), tandis que le concept de carte électronique facilement pro- grammable est le prolongement du projet Wiring (http://wiringorg.co). Par extension, la plupart des créations réalisées avec Arduino sont elles aussi open source, ce quia stimulé fortement le développement et extension de cet univers en trés peu de temps. En effet, la communauté sans cesse grandissante des utilisateurs est aussi en partie celle des développeurs : chaque création partagée participe a l'évolution de tout le projet et de tous les utilisateurs. Méme les questions des "novices" postées dans les différents forums permettent aux développeurs de corriger et de parfaire le code ou les circuits. Cette philosophie est trés importante dans le monde Arduino, car cest grace a elle que le projet a pu avoir un tel succés et un développement aussi rapide. (© Eatons EM - Allright reserved Introduction 15, ll est important de comprendre et de soutenir cette philosophie, car méme si elle remet en question les paradigmes anterieurs de secret de fabrication et de brevet, elle apporte une dimension collective trés riche, mais surtout une force et une réactivité inégalable par rapport aux précédentes approches. La connaissance partagée se multiplie au lieu de se raréfier, et ceci constitue sirement une partie de la solution aux nombreux défis auxquels notre monde fait face actuellement. 5. Une gamme qui s'‘étend La gamme Arduino est sans cesse en expansion, tant du point de vue matériel (par les cartes proposées) que du point de vue logiciel a travers les librairies qui sont écrites tous les jours. 5.1 Cartes A Forigine de la création de la marque, en 2005, une seule carte Arduino était proposée: Arduino Serial Depvis la gamme s'est peu peu déclinée en différents modéles plus ou moins adaptes a diffé- rents usages. Arduino UNO Lacarte la plus courante et la plus connue (la date d'édition de ce livre) est le modéle UNO, basé sur le processeur Atmel 328P. Ce modéle offre une connectique assez simple pour un prix abor- dable. 16 arduino - s'exercer au prototypage électronique Le modéle Leonardo, quant a Ivi, a la particularité de sinterfacer avec un ordinateur sous la forme d'un clavier/souris. Ceci en fait louti idéal pour des projets de pilotage de logiciels diffu- sés sur ordinateur. Un de ses dérivés les plus connus est le projet MakeyMakey qui transforme nimporte quoi d'un tant soit peu conducteur en clavier pour jouer a des jeux vidéo. Le modéle Mega est doté d'un processeur plus gros permettant Ihébergement de programmes plus complexes et accueil d entrées/sorties plus nombreuses.Il est donc naturellement utilisé pour les projets plus élaborés et qui nécessitent plus dinterconnexions, par exemple le pilotage dimprimantes 30. Arduino Mega Des versions miniatures ont également émergé, comme l’Arduino Micro ou Nano, ou des ver- sions dédiées a un usage, comme l'Arduino LilyPad pour le textile ou Arduino Esplora pour les jeux. Arduino LilyPad Eatons EN Alright reserved Introduction 17 Il serait vain de détailler toute la gamme Arduino d'ayjourd hui, car, en plus détre largement étoffée, elle évolue sans cesse. La gamme officielle est visible sur le site : https://www.Arduino.cc/en/Main/Products Au-deli de la marque Arduino, [aspect open source du projet alaissé le champ libre la création de dérivés plus ou moins proches des cartes "officielles' Adafrvit est une marque trés productive dans le domaine avec, par exemple. le modele Trinket, basé sur le tout petit processeur ATtiny8S (https://wwwadafruit com/trinkel). Citons également le module Wi-Fi a bas cout ESP8266, Cette carte offre des fonctionnalités presque équivalentes et méme supérieures a certains égards a Arduino, et ce pour un prix bien inférieur. Module ESP8266 De telles cartes nécessitent une extension de code dans IIDE Arduino afin de pouvoir les pro- ‘grammer, mais leur installation est maintenant grandement fat 5.2 Cartes d’extension (shields) Appelées “shield” (bouclier) en anglais, ces cartes sont concues dans un format permettant de se brancher directement sur une carte Arduino UNO. Elles contiennent divers composants dedis a des usages spécifiques, par exemple un LCD (écran cristaux liquides), des composants permettant la lecture de sons en bonne qualité (comme le Wave Shield d'Adafruit), ou des drivers moteurs pour piloter une machine a commande numérique CNC (tel le GRBL shield). https://www.Arduino.cc/en/Main/ArduinoShields 18 Arduino - s’exercer au prototypage électronique Wave Shield d’Adafruit Il existe une quantité importante de cartes dextension pour Arduino produites par un grand nombre de fabricants. Leur architecture physique rend le branchement avec Arduino trés facile (apparenté du Lego) et leur usage trés intégré. Cependant, la difficulte dans I usage de ce type de carte vient du fait que chaque shield utilise des pins (broches ou connexions) bien particulers,etil n'est donc pas forcémentévident d utiliser simultanément plusieurs shields. car on arrive vite a des conflits de bornes. Le site http://shieldlst org/ répertorie la plupart des shields et la configuration de leurs connexions. 5.3 Bibliotheques Das le début du projet, des utilsateurs ont étendu les possiblités du langage de programmation Arduino, en ajoutant des blocs de code sous la Forme de bibliothaques (appelées aussi librairies) Ecrits pour interfacer Arduino avec un matériel spécifique (comme un télemétre a ultrasons) ou pour réaliser des opérations de calculs complexes {comme un calcul PID : proportionnel integral dérivé), la plupart de ces développements ont été documentes sur la page trés utile "la salle de jeu’ :http://playground Arduino.cc/ Un certain nombre de bibliothéques sont maintenant installées nativement, comme la biblio- théque Servo qui pilote des servomoteurs, la bibliothéque Wi-Fi pour gérer une connexion sans fil ov EEPROM pour écrire dans la mémoire du processeur. Mais il en existe de nombreuses autres plus spécifiques, comme FFT pour réaliser des analyses de Fourier ou Webduino pour déployer un miniserveur web. Chacune de ces bibliothéques s'nstalle avec des exemples inclus qui permettent facilement de les prendre en main. La liste officielle des librairies actuelles est lisible sur la page https://www Arduino.cc/en/Reference/Libraries Elles sont accessibles via le gestionnaire de bibliothéque a travers IDE Arduino, mais il en existe bien d'autres sur le Web que vous trouvez a l'aide dun moteur de recherche en fonction de vos besoins du moment (© Edktions EM -Allghts reserved Chapitre 1 Comment utiliser ce livre ? 1. Structure Ce livre vous propose de perfectionner votre pratique en matiére de développement de projets Arduino afin d'étre a méme de réaliser, et plus tard de concevoir des projets originaux lest construit sous la Forme d'une collection de projets dune difficulté gradvelle,allant du plus simple, utilisant peu de composants et faisant appel a un minimum de fonctions, au plus élaboré, demandant plus de matériel. dinvestissement en temps et de compréhension de la programma- tion. Equipé d'un minimum doutillage et de matériel, vous allez pouvoir réaliser les projets de ce livre votre rythme, en fonction de vos besoins d apprentissage ou de vos envies du moment. Chaque projet est décrit dans son principe de fonctionnement. Puis sont détaillés successive ment son cablage. son montage, et enfin sa programmation étape par étape quand il met en ceuvre différents composants, de maniére a bien isoler l'action et la gestion de chacun des pé- riphériques Ala fin de chaque projet sont proposés des prolongements possibles, pour améliorer ou réutili- ser le montage pour une autre application. Ces suggestions sont autant douvertures vers de nouvelles explorations, comme des incitations a chercher par vous-méme de nouvelles exten- sions. Lidée est de comprendre un mécanisme, puis de le modifier un peu pour en transformer oven améliorer lusage. Comme marchepied vers une étude plus approfondie des notions abordées dans le chapitre, une courte liste de ressources est également proposée la fin de chaque projet 19 20 Arduino - s'exercer au prototypage électronique Tous les montages sont décrits sur une plaque de prototypage. Une plaque de prototypage est une planche garnie de trous dont certains conduisent entre eux. Le cablage des composants se fait en les enchassant dans les trous de la plaque. Ce dispositif est trés pratique, carl permet la création de circuits sans soudure etl lisse le droit erreur de cablage puisque rien nest défi- nitif. Cela dit, si un projet vous semble suffisamment abouti, vous pourrez aprés coup envisager la soudure de tous les composants entre eux afin d obtenir un circuit plus pérenne et robuste. Les projets sont rangés par ordre croissant de complexité, mais il n'est pas indispensable de suivre la chronologie: il est possible d'aborder les projets par notions ou par thémes qui sont detaills plus loin 2. Liste des projets Projet 1: le synthétiseur thérémine. Cest un instrument de musique doté d'une interface sans contact. Inspiré de linstrument thérémine inventé au début du siécle dernier, ce projet consiste a réaliser un générateur de sons piloté par deux capteurs : une photorésistance et un fil de fer converti en capteur capaciif Projet 2: le jeu de mémorisation musicale. C est un veritable jeu électronique, réminiscence d'un des pionniers du genre. En effet, il s'agit de réaliser un jeu de mémorisation musicale inspiré du célébre jeu Simon édité par MB en 1979. Ce jeu de mémoire et de répétition consiste a tenter de reproduire une suite de notes diffusées par automate. Projet 3: le systéme d arrosage automatique. Ce dispositif déclenche une arrivée deau seule- ment en cas de besoin et est utilisable pour une seule plante ou pour une petite plantation. II peut étre répliqueé a différentes échelles. Ce projet vous fera entrer de plain-pied dans le monde de l'automatisme. Projet 4: oscilloscope minimal. II permet de visualiser sous forme graphique des tensions va- riables sur lécran d'un ordinateur. Ce projet vous offrira une occasion de comprendre en pro- fondeur certaines fonctionnalités du microcontréleur, dont entrée analogique. Projet 5 : le robot suiveur de ligne. Cest un robot autonome capable de suivre une ligne tracée au sol a l'aide dun marqueur. Ce projet est un classique du genre, support possible a bien autres expérimentations. Projet 6: a lampe multicolore pilotée en Bluetooth, C'est une lampe dontlla couleur et lintensité sont réglables via une communication sans fil depuis un smartphone ou un autre terminal pourvy d une communication Bluetooth. (© lions EN! Allright reserved Comment utiliser ce livre? 24 Projet 7 : la station météo Wi-Fi. II s'agit d'une station météo autonome dont les mesures sont consultables & travers un réseau Wi-Fi sous la forme dune page web. Ce projet vous fera découvrir internet des objets. Projet 8 le télémétre a ultrasons. Cest un outil de mesure de distance sans contact, 4 méme de mesurer les piéces et les batiments jusqu'a une distance de 4 métres, puis d afficher la mesure sur un écran 8 cristaux liquides. II remplacera avec succés votre vieux metre 8 ruban. Projet 9 : le robot autonome hexapode. C'est un robot a six pattes animé par des servomoteurs, capable de se déplacer librement et d'éviter les obstacles. II imite la maniére de se mouvoir de certains insectes. Projet 10 : le dispositif 'affichage utilisant la persistance rétinienne. Le phénoméne de la persis- tance rétinienne permet d'utiliser un petit nombre de leds installées sur un objet tournant tres vite lici la roue dun vélo) pour afficher des graphismes & la maniére dun écran Des vidéos de certains des projets sont accessibles sur la chaine YouTube des Editions ENI ainsi qua [aide des OR codes présents au début des chapitres concernés. 3. Entrée par themes Les projets décrits dans cet ouvrage touchent a un certain nombre de themes: les objets connectés, les outils, les robots, les jeux ou les dispositifs artstiques. 3.1 Objets connectés Les projets 6 - Lampe multicolore pilotée en Bluetooth et 7 - Station météo Wi-Fi entrent dans la catégorie des objets connectés, c'est-8-dire quils sont d'une maniére ou dune autre connec- tesa dautres réseaux informatiques. 3.2 Outils Les projets 4 - Oscilloscope minimal, 8 - Télémétre a ultrasons et 3 - Systéme darrosage auto- matique peuvent servir doutils pour réaliser d autres travaux. 3.3 Robots Les robots § - Robot suiveur de ligne et 9 - Robot autonome hexapode se déplacent de maniére autonome et peuvent étre reprogrammeés différemment aprés la réalisation, pour effectuer d autres expérimentations et aller plus loin dans I exploration des créatures zoomorphes artifi- celles. 22 arduino - s*exercer au prototypage électronique 3.4 Jeux Ces projets 1 - Synthatiseur thérémine et 2 - Jeu de mémorisation musicale peuvent étre util és comme jeux. Le systéme diarrosage du projet 3 peut étre utilisé comme jouet, mais aussi comme un jeu de programmation. 3.5 Dispositifs artistiques Les projets 1- Synthétiseur thérémine et 10 - Dispositif d'affichage utilisant la persistance réti- nienne peuvent servir doutils de création artistique. Les images obtenues dans le projet 10 reposent sur la technique du dessin génératif. 4. Entrée par notions Les différents projets mettent en ceuvre plusieurs notions. Ce classement vous permettra didentifier les projets qui vous intéressent si vous désirez aborder une notion précise 41 Code La rédaction de code est abordée de maniére plus ov moins poussée dans les differents projets. Fonctions Une fonction est un bloc de code defini & un endroit précis du programme, qui peut étre appelé cde multiples fois et depuis différents endroits, avec parfois des paramétres différents. Dans les projets 2 - Jeu de mémorisation musicale, 5 - Robot sviveur de ligne, 7 - Station météo Wi-Fi 8 - Télémétre a ultrasons, 9 - Robot autonome hexapode et enfin 10 - Dispositf daffichage uti- lisant la persistance rétinienne, vous apprendrez a créer et a utiliser une fonction. Types de données Les types de données definissent les formats des données stockées dans les variables utilisées dans le programme. Vous découvrirez la maniére de créer un type de données personalise dans le projet 2 - Jeu de mémorisation musicale. Interface logicielle La carte Arduino n'est pas simplement faite pour fonctionner de maniére autonome : connectée un autre logiciel, elle offre aussi beaucoup de possibilités. Le projet 4 - Oscilloscope minimal, vous donnera occasion de vous exercer a linterfagage entre I'Arduino et un logiciel tiers. (© Ebtions EM -All ght reserved Comment utiliser ce livre 2 23 Onglets Vous découvrirez I usage des onglets pour organiser 'écriture du code dans le projet 7 - Station météo Wi-Fi. Manipulation d’octets La manipulation doctets est une maniére diintervenir a "bas niveau’ sur les variables et permet parfois de rendre leur manipulation plus simple, et lexécution du code plus rapide. Cette technique sera abordée dans le projet 8 - Telémétre a ultrasons et aussi dans le Projet 10 - Dispositif d'affichage utilisant la persistance rétinienne. Bibliothéques Une bibliothéque est un morceau de code ajouté dans IDE Arduino pour étendre les fonction- nalités du code. Le projet I - Synthétiseur thérémine utilise la bibliothéque Capacitive Sensor. Dans le projet 5 - Robot suiveur de ligne, vous apprendrez a créer votre propre bibliothéque Le projet 6 - Lampe multicolore pilotée en Bluetooth utilise la bibliothéque SoftwareSerial pour gérer les communications Bluetooth. Le projet 7 - Station météo Wi-Fi a besoin des bibliothéques BMPI80 pour simplifer la lecture de capteurs et Wi-Fild! pour communiquer en Wi-Fi Le projet 8 - Télématre a ultrasons utilise une bibliothéque pour la gestion d'un afficheur LCD, tandis que la gestion dun capteur de distance est écrite “a la main’ pour comprendre comment Slapproprier un circuit complexe Le projet 9 - Robot autonome hexapode met en ceuvre la bibliothéque Servo pour piloter des servomoteurs. Le projet 10 - Dispositi d'affichage utilisant la persistance rétinienne emploie la bibliothéque DotStar pour piloter des leds indexées Protocoles de communication Certains projets déploient une communication (Bluetooth, liaison série via un cable USB, Wi-Fi) avec un autre dispositi informatique. Les projets 1 - Synthétiseur Thérémine, 4 - Oscilloscope minimal, 5 - Robot suiveur de ligne et 6 - Lampe multicolore pilotée en Bluetooth utilisent une communication série pour un usage de débogage ou pour transférer des informations vers un programme dans un ordinateur. Le projet 7 - Station météo Wi-Fi met en ceuvre une communication Wi-Fi pour publier des mesures, ainsi que le protocole I2C pour lire des capteurs. 24 Arduino - Stexercer au prototypage électronique Le projet 6 - Lampe multicolore pilotée en Bluetooth utilise une communication Bluetooth avec un smartphone ou une tablette. Le projet 10 - Dispositf daffichage utilisant la persistance rétinienne emploie le protocole SPI pour piloter un ruban de leds. 4.2 Microcontréleur Les notions suivantes sont liées aux particularités constituantes d'un microcontréleur, le com- posant qui constitue le coeur de la carte Arduino. Entrées analogiques Elles permettent de mesurer des grandeurs de tension variables. Leur principe de fonctionne- ment est détaillé dans le projet 4 - Oscilloscope minimal, mais elles sont aussi utilisées dans le projet - Synthétiseur thérémine et le projet 3 - Systéme d arrosage automatique. Entrées numériques Ces entrées ne mesurent que des tensions discrétes : 0 ou 5 V. Elles sont utilisées dans tous les projets, mais leur usage est plus particuliérement détaillé dans le projet | - Synthétiseur th mine et le projet 9 - Robot autonome hexapode Sorties PWM Llattifice de la PWM (Power Width Modulation) ov MLI {modulation de largeur dimpulsion) per- met démuler une tension variable la sortie du microcontréleur. Le projet 4 - Oscilloscope mi- nimal en détaille le fonctionnement, tandis que les projets 5 - Robot suiveur de ligne et 6 - Lampe multicolore pilotée en Bluetooth en utilisent la fonctionnalité EEPROM LEEPROM (Electrically-Erasable Programmable Read-Only Memory) ou mémoire morte est une mémoire qui perdure lorsque le microcontréleur est hors tension. Le projet 6 - Lampe multico- lore pilotée en Bluetooth en explique lusage, tandis que le projet 10 - Dispositif d'affichage uti- lisant la persistance rétinienne fait aussi appel a cette fonctionnalité. (© Eaton EN ~ Allright reserved Comment utiliser ce livre 2 25 43 Composants électroniques Comme l’Arduino sert a prototyper des circuits électroniques, elle est fatalement mise en ceuvre avec d'autres composants de cette nature. Les notions suivantes sont abordées au cours des projets... ‘che technique Pour chaque composant, il existe une fiche technique (datasheet en anglais) qui détaille ses contraintes de mise en oeuvre et ses méthodes d usage. Quand vous mettez en ceuvre un com- posant nouveau, il est toujours trés utile de consulter ce document. Il peut parfois paraitre obtus, voire indéchiffrable, alors quil réunit toujours des informations trés utiles. Le projet 8 - Telemétre a ultrasons vous offrira occasion de comprendre et dutiliser ces informations pour correctement utiliser un capteur de type nouveau. rage vers le haut ou le bas En électronique comme en électricité, un conducteur relié & rien ne se trouve pas nécessaire- ment & un potentiel nul. II peut en fait prendre une charge aléatoire, indvite par différents paramétres environnementaux:; on parle alors de potentiel flottant. Cette incertitude est pro- blematique si vous désirez mesurer l'état d'une entrée numérique. Il est possible de lever cette ertitude en utilisant un petit montage dit "tirage vers le haut'ou ‘vers le bas’ (pul! vp ou pull downen anglais). Ce principe est mis en ceuvre et detaillé dans le projet 2 - Jeu de mémorisation musicale, Capteurs La plupart des projets mettent en ceuvre des capteurs afin d'analyser des données provenant du monde réel. Le projet 1 - Synthatiseur thérémine utilise un capteur de luminosité et un capteur de proximité qui exploite la technologie capacitive. Le projet 3 - Systéme darrosage automatique met en ceuvre un capteur d'humidité du sol par une mesure de résistance. Le projet - Robot sviveur de ligne utilise une matrice de capteurs de detection de ligne par ré- flexion optique. Le projet 7 - Station météo Wi-Fi réalise des mesures a l'aide d'un barométre/thermométre. Le projet 8 - Telémétre a ultrasons utilise un capteur de distance reposant sur le systéme du sonar & ultrasons Le projet 9 - Robot autonome hexapode utilise un capteur de proximité optique 26 arduino - s'exercer au prototypage électronique Actionneurs De la méme maniére, certains projets utilisent des actioneurs pour provoquer un effet sur le monde réel ou communiquer avec lui Ainsi, des moteurs sont actionnés dans le projet 5 - Robot suiveur de ligne et le projet 3 - Systéme d'arrosage automatique, tandis que des servomoteurs (qui sont des moteurs asservis en position) sont exploités dans le projet 9 - Robot autonome hexapode. Un actionneur piézoélectrique est utilisé comme haut-parleur par le projet 1 Synthétiseur therémine et le projet 2 - Jeu de mémorisation musicale. Ce dernier projet met également en ceuvre des leds de différentes couleurs, tandis que le projet 6 - Lampe multicolore pilotée en Bluetooth utilise un ruban de leds RVB (c'est-a-dire capables de reprodvire toutes les couleurs). Le projet 10 - Dispositif d affichage utilisant la persistance ré- tinienne met en ceuvre un ruban de leds RVB indexables (c‘est-a-dire pilotables indépendam- ment les unes des autres) Vous explorerez usage dun transistor pour commuter des tensions plus élevées dans le projet 3 Systéme diarrosage automatique et le projet 6 - Lampe multicolore pilotée en Bluetooth Enfin, le projet 8 - Telemétre a ultrasons affiche des mesures sur un écran a cristaux liquides. 5. Matériel et outillage ‘fin de réaliser les différents projets de ce livre, mais aussi pour aller plus loin dans votre explo- ration des possibilités offertes par le monde Arduino, vous allez avoir besoin de materiel et doutillage Comme le coeur de lArduino est un microcontréleur, il sera nécessaire dutiliser un ordinateur pour écrire et télécharger les programmes quil exécutera. Mais comme il s'agit également dinternet des objets et d électronique, quelques outils "réels" seront aussi bien utiles. (© tions EM -Allrghts reserved Comment utiliser ce livre? 27 5.1 Logiciels Arduino https://www.arduino.ce/en/Main/Software Un ordinateur est évidemment nécessaire pour programmer une Arduino a aide de son IDE. Anoter quil existe depuis peu un éditeur web qui permet d'utiliser toujours la derniére version de IDE et de sauvegarder les programmes dans un cloud (c'est-a-dire dans un nuage dématé- rialisé sur le réseau Internet). Cela dit il est conseillé d'utiliser la version téléchargeable afin de pouvoir travailler hors ligne (sans connexion Internet) Le logiciel sinstalle sans probléme, mais il peut étre nécessaire dinstaller un driver sous Win- dows pour que ordinateur reconnaisse la carte Arduino connectée. Vous trouverez toutes les informations nécessaires & ce sujet dans le livre Arduino - Agprendre 4 développer pour créer des objets inteligents dans la collection Ressources Informatiques du méme éditeur, ou sur la page dinitiation du site officiel: https:/ /www.arduino.cc/en/Guide/HomePage Il existe de nombreux autres logiciels permettant de programmer Arduino, dont certains offrant des interfaces plus graphiques, par exemple BlocklyDuino thttp://Awww.technozoneSIfr/ dokuwiki2/doku php?id=documentation:nitiation et presentation au_concept blocklyduina) ou ‘Ardublock thttp:/ /blog ardublock com/) qui permettent de programmer en assemblant des blocs (trés utilisé par les enfants). Fritzing http://Fritzingorg Le dessin de circuits électronique a un niveau professionnel est souvent une tache assez difficile avec les outils de haut niveau comme KiCad ov GEDA. Comme l univers d Arduino est plutt des- tiné a des travaux d'amateur, ov tout au moins de prototypage. il s'associe plus & des outils de “croquis” qui permettent de décrire rapidement un circuit sans trop de difficultés ni de raffine- ments non plus. Le logiciel libre Fritzing est un outil particuligrement destiné & ce type d usage puisquil permet de dessiner un circuit sous forme visvelle correspondant au montage réel (souvent sur une plaque de prototypage) 28 Arduino - S'exercer au prototypage électronique [= carne F Fritzing en vue essai Maisil offre également une wue plus technique sous forme de schéma électronique classique. Fritzing en vue schéma © Eitions EM - Allright reserved Comment utiliser ce livre? 29 Enfin, une vue permet de concevoir une carte électronique correspondant au montag T mets! ow Yaowdeis fo Fritzing en vue circuit, Fritzing donne méme la possibilite de commander en un clic la réalisation d'une carte électro- nique dadiée (fonctionnalté intéressante seulement lorsqu'un projet est complétement abouti et débogue) Comme ce logiciel est libre, de nombreux contributeurs y ont participé et de multiples biblio- théques d'objets, de cartes et de composants sont disponibles gratuitement et plus ou moins di- rectement. Ceci permet diintégrer trés facilement dans les schemas la plupart des composants complémentaires & la carte Arduino (capteurs, alimentations, actionneurs) disponibles dans le commerce. Vous pourrez découvrir aussi sur le site officiel du programme une zone de partage de projets contenant de nombreux montages plus ou moins avancés. Notez que tous les projets du livre sont dessinés avec Fritzing dans le dossier a télécharger (cf plus loin la section Fichiers a télécharger). Dans ces fichiers, seules les deux premiéres vues sont importantes (la vue dessai et la vue schema) 30 Arduino - s’exercer au prototypage électronique 5.2 Outils Un minimum doutils sont nécessaires pour réaliser et contréler de petits montages : un multi- métre, des pinces, un nécessaire a souder (pour certains projets), un pistolet a colle. Multimétre Un multimetre permet de mesurer differents composants (comme les résistances), mais aussi de verifier la tension de certaines parties du circuit. Il en existe une large gamme offrant diffe- rentes possibilités de mesures. Pour commencer, il est inutile d’'acheter un multimétre trop coUteux ; un modéle de base cote aux alentours d'une dizaine d'euros et suffit pour mesurer : = une tension continue ; = une tension alternative ; = une résistance ; = uncourant; = une chute de tension aux bornes d'une diode. Multimétre de base Pinces Deux sortes de pinces sont utiles: une petite pince coupante, pour couper et/ou dénuder des. fils, et une pince plate permettant de réaliser des pliages propres, par exemple de plier les pattes des résistances. (© Eakins EM - Allright reserved Comment utiliser ce livre? 34 Assortiment de pinces Nécessaire 4 soudure Dans certains projets, quelques soudures sont a réaliser. Et plus genéralement, si vous projetez de poursuivre vos expérimentations en électronique, vous serez amené un jour ou [autre 4 sou- der un composant. Un nécessaire a souder pour Iélectronique se compose d'un fer a souder, dune éponge, dun rouleau détain (qui est un consommable), dune "troisiéme main’ et dune pompe (ou d'une tresse) a dessouder. Le fer peut étre un premier prix des plus simples. Il en existe de plus luxueux avec un réglage précis de la température. Fer 4 souder Leponge sert a nettoyer la panne du fer avant chaque soudure. 32 Arduino - s’exercer au prototypage électronique outil nommé “troisiéme main” porte bien son nom, car lorsque vous soudez, vous tenez en général le fer dans une main et Iétain dans autre. La troisigme main est donc nécessaire pour tenir les composants a souder. De plus, comme elle est équipée dune loupe, cecifacilite une vision plus précise de la zone a souder. Troisiéme main Vous serez sans doute amené un jour ou autre a devoir défaire une soudure. Pour cela, utilisez soit de la tresse a dessouder, soit une pompe afin d aspirer Iétain de la soudure préalablement fondu a l'aide du fer. La pompe est d'un usage plus simple et nest pas un consommable (contrairement dla tresse), elle est donc a préférer. (© ations EM -Allrghts reserved Comment utiliser ce livre 2 33 Pompe a dessouder Sivousne savez pas souder, lest conseillé de suivre un tutoriel& ce sujet thttp://www-sonelec- musique.com/electronique_bases.tutoriel soudure htm) Pistolet a colle Unpistolt a colle est parfois utile pour réaliser de petites liaisons mécaniques ou pour isoler un circuit en renforcant la tenue des composants. Ilpermet d appliquer de la cole thermofusible facilement: Cette colle en refroidissant durct et devient trés résistante. Pistolet a colle avec des batons de colle 34 Arduino - s’exercer au prototypage électronique 5.3 Consommables Quelques Fournitures servent en permanence, elles sont donc considérées comme des consom- ‘ables. I sagit de fils de connexion qui peuvent soit se faire avec du fil rigide (moins codteuw), soit s'acheter par lots avec des connecteurs (plus luxueux et pratiques). > Pack de cables de connexion Les résistances sont des composants qui servent dans de nombreux circuits et elles se vendent par lots de différentes valeurs. Un lot suffira a alimenter votre atelier pendant plusieurs mois. Les résistances sont caracterisées par la puissance quelles sont capables de dissiper. Un assor- timent de résistances 1/4W de la série E12 convient parfaitement. Ce A a cand 29 oe Assortiment de résistances A linstar des résistances, les condensateurs sont parfois utilisés, en différentes valeurs. Vous pouvez également les acheter par lots. (© altions EM Allright reserved Comment utiliser ce livre? 35 Pr Ae k ated ernie eas Assortiment de condensateurs. Pour chacun des projets décrits dans ce livre, une liste de composants est renseignée, de sorte que chaque projet puisse étre fait de maniére autonome. Cela dit, certains composants peuvent atre réutilises d'un projet a lautre de maniére a ne pas se ruiner en fournitures. 5.4 Fichiers a telecharger Pour accompagner ce livre et es projets qui y sont décrits, un certain nombre de fichiers sont 8 télécharger & adresse suivante : http://www.editions-enif. Saisissez la référence ENI de louvrage LFARDDIY dans la zone de recherche et validez. Cliquez sur lettre du live puis sur le bouton de téléchargement. Ces dossiers sont rangés par projet et contiennent au minimum ~ Un fichier Fritzing decrivant le cablage. = Un fichier Arduino contenant le code. Les fichiers Arduino sont numérotés dans lordre chronologique de mise en ceuvre. 36 Arduino - s’exercer au prototypage électronique 6. Rappels 6.1 Programmation Un programme écrit pour Arduino reprend toujours la méme structure ~ Les déclarations initiales contiennent les chargements des éventvelles bibliothéques et les declarations des variables globales utilisées tout au long du programme. ~ Laroutine dinitialisation [fonction setup ( )) décrit les codes & exécuter une fois au démar- rage de la carte ~ Laboucle principale (fonction Loop ( )) contient les codes a exécuter en boucle a linfini. Structure type d'un programme Arduino Dans les chapitres suivants, les termes "déclaration initial, "routine dinitialisation” et “boucle principale” designent ces trois blocs. 62 Electricité II sagit ici de rappeler quelques notions délectricté afin de vous éviter certaines erreurs cou- rantes. Pour apprendre les bases de I'électricité et des composants, vous étes invité a consulter le livre Arduino - Apprendre & développer pour créer des objets intelligents dans |a collection Ressources Informatiques du méme editeur. (© abtions EM - All ight reserved Comment utiliser ce livre ? 37 Cabler a vide Méme sicela parait évident.il est important de rappeler quil faut réaliser un circuit sans tension présente, de maniére & ne pas risquer un court-circuit accidentel ou une destruction de compo- sant. Ainsi, avant de brancher un nouveau composant, verifiez que vous avez bien débranché éventvelle alimentation extérieure ET le cable USB reliant la carte Arduino 3 ordinateur, qui fournit aussi une alimentation électrique Protéger les surfaces de contact Comme vous lavez peut-étre déja remarqué, le dos dune carte Arduino montre les soudures apparentes. Aussi il faut surtout éviter d'utiliser la carte posée ou fixée sur une surface conduc trice (matal par exemple) au risque de provoquer des courts-circuits. Prenez garde également ine pas toucher ces contacts lorsque la carte est en fonctionnement, car méme si votre peau rest pas trés bonne conductrice délectricité, le peu de courant qui pourrait la traverser risque- it d altérer le fonctionnement normal de la carte. Prendre garde a l'électricité statique Les circuits intagrés sont particuliérement vulnérables 8 lélectricité statique. En effet, celle-ci. méme si elle représente peu d’énergie, peut se manifester & travers des tensions tres élevées susceptibles de détruire des composants. Aussi, afin d éviter ces manifestations, il est conseillé de proscrire usage de matériaux comme le polystyréne (qui se charge électriquement quand on le frotte). Il est également prudent, avant de toucher un circuit integré, de toucher un conducteur relié a la terre afin de vous décharger de lélectricité statique que vous avez éven- tuellement emmagasinée Relier les masses Tous les composants reliés entre eux doivent "dialoguer” sur une méme base. Celle-ci corres- pond au potentiel électrique "zero" et s'appelle ‘la masse” (ou GND pour ground en anglais). Lorsque vous reliez deux circuits intégrés, vous commencez en général par relier les masses entre elles. Verifier le cablage avant la mise sous tension Afin de corriger les plus grosses erreurs, il est prudent de verifier, avant la mise sous tension, le cablage d'un circuit de la maniere la plus objective possible. Lidéal étant de le faire controler par un tiers. 39 Chapitre 2 Projet 1 - Synthétiseur therémine 1. Présentation Ce projet consiste a réaliser un générateur de sons piloté par deux capteurs : une photorésis- tance et un fil de fer converti en capteur capacitif, inspiré de linstrument thérémine inventé au début du siécle dernier. Lidée 4 travers ce projet est de découvrir plusieurs notions trés utiles avec Arduino. 40 arduino - s’exercer au prototypage électronique utilisation de la photorésistance sera occasion de comprendre le principe du pont diviseur de tension et des entrées analogiques de lArduino pour mesurer une tension. Pour générer la fréquence sonore, la fonction dorigine tone () sera insuffisante. En effet, pour ce projet. il sera nécessaire d avoir la possibilité de moduler le volume du son produit (fonc- tionnalité non proposée parla fonction en question). Aussie sera occasion dinstaller et d' liser une librairie externe (développée par un membre de la communauté): lalbrairie Volume. Le son sera diffusé a travers un module piézoélectrique, qui constitue un haut-parleur minimal trés pratique et qui peut méme, dans certaines conditions, servir de capteur. Enfin, le capteur capacitif apportera ala fois un peu de piment et de magie, carl est plus pointu mettre en ceuvre (au niveau du code), mais aussi plus impressionnant (au niveau physique), démontrant deja les capacités trés riches qu'offre un microcontréleur. 1,1 Principe de fonctionnement Inspiré de Ihistorique instrument de musique thérémine, ce synthétiseur dispose de deux en- trées “analogiques" (c'est-d-dire variables): antenne et le capteur de lumiére. En jouant des mains devant ces deux capteurs. i est possible de moduler la fréquence avec lantenne capaci- tive) et le volume (avec le capteur de lumiére) afin de produire une mélodie harmonieuse, aussi proche de la voix humaine qu'un thérémine. 1.2 Notions Les notions abordées dans ce projet sont les suivantes : ibrairies externes, entrées analogiques, entrées numériques, communication série, capteurs de luminosité et capacitif, actionneur piezoélectrique. 2. Matériel et outillage Le matériel nécessaire se résume au strict minimum et représente un budget denviron 30 euros. 2.1 Matériel ~ Une Arduino de type UNO ov équivalent. ~ Une photorésistance. ~ Un module piézoélectrique. (© Edis EN - Allright reserved Projet + - Synthétiseur thérémine 41 Un fil de fer ou une antenne. Trois résistance. Une plaque de prototypage (petit modéle 46x35 mm) Du filde connexion. Post aore Arduino UNO Photorésistance avec une résistance 42 Arduino - S’exercer au prototypage électronique Actionneur piézoélectrique 2.2 Outillage Pour réaliser ce projet il sera nécessaire dutiliser un ordinateur pour programmer Arduino et une pince coupante pour couper du fil. 3. Montage Montage du thérémine (© Edtions EN - Allright reserved Projet 1 - Synthétiseur thérémine 43 Le montage consiste a relier les trois systémes a [Arduino :Iactionneur piézoélectrique (qui sert de haut-parleur) le capteur de lumiére et le capteur capaciti (ces deux derniersnécessitant des ajustements). proorestonce Schéma du thérémine 3.1 Transducteur piézoélectrique Le transducteur piézoélectrique qui sert de haut-parleur est composé dune capsule de mate- riaux aux propriétés piézoélectriques (souvent une céramique). Un matériau piézoélectrique se deforme lorsquil est traversé par une tension. il entre donc en vibration lorsquil est alimenté par une tension variable périodiquement Lintérét de ce type de composants est leur simplicité, mais aussi leur réver: untransduc- teur peut aussi servir de capteur, car lorsquil est soumis a une contrainte mécanique, il produit son tour une tension. Cette possibilité n'est pas exploitée dans ce projet, mais il est intéressant de la connaitre, car ce composant peut ainsi servir de capteur de son (microcontact) ov de choc, dans d'autres applications. 44 Arduino - S’exercer au prototypage électronique Ici, il est cable simplement en série avec une résistance de 1 KOms (conformément a la fiche technique, pour limiter le courant debité) Montage du transducteur piézoélectrique A noter que le transducteur est polarisé, cest-a-dire quil s'alimente préférablement dans un sens identifié par la couleur des fils de connexion {rouge pour le +, noir pour le -) 3.2 Capteur de lumiére Le capteur de lumiére est constitué d'une photorésistance. Ce composant est une résistance qui varie avec la luminosité. Mais | Arduino ne sait pas mesurer une résistance : elle peut seulement lire la tension, Heureusement, un montage simple permet de transformer une variation de résistance en va~ riation de tension :il sagit du pont diviseur de tension. Ce montage utilise deux résistances pour découper la tension proportionnellement a leurs differences de valeurs. (© Eakins EM Allright reserved Projet 1 - Synthétiseur thérémine 45 Pont diviseur de tension En utilisant la loi des mailles et la loi dohm (qu'il est inutile ici de connaitre), on obtient Afin de calculer la valeur de résistance complémentaire la plus adéquate, il est nécessaire de mesurer avec le multimatre la valeur de la photorésistance dans lombre et & la lumiére pour avoir une idée de la plage de variation a transcrire. Partant de cette mesure, il sagt alors de dé- terminer la valeur de résistance complémentaire qui ~ maximise la plage de variation de tension : ~ minimise la consommation de courant Exemple : la photorésistance varie de 100 Ohms ! KOhms (valeurs mesurées au multimetre). Sion installe une résistance complémentaire de 500 Ohms, on obtient Umin=5*100/( 100 +500 )=0, 83 Umax=S *1000/(1000 +500 )=3, 33V ible, tout en ne consommant pas trop de courant ite des 20 mA de Arduino). Ceci constitue une plage de variation assez (U/R=8,3 mA maximum, soit en deca de la Dans cette configuration, vous pouvez donc installer une résistance complémentaire (R2 sur le schéma) de S00 k. 46 arduino - s’exercer au prototypage électronique Installation du circuit de detection de luminosité 3.3 Capteur capacitif Le capteur capacitif doit étre composé d'un corps conducteur quelconque qui peut étre un fil ou une plaque. Le montage présente, inspiré du thérémine du début du siécle dernier, a une forme dantenne. Elle est coupée a 314 cm en référence au nombre dor. Ce capteur fonctionne en mesurant la valeur de la capacité constituée par l'objet conducteur Lici, un fil, mais cela peut tre aussi une plaque). Une capacité appelée aussi condensateur est constituée habitvellement de deux conducteurs trés proches separés par un isolant. La valeur de cette capacité est déterminée par la surface des conducteurs et l'épaisseur de lisolant. Ici, le condensateur en question est constitué de deux conducteurs ('antenne dune part et la borne GND de Arduino dautre part) séparés par de lisoleant (Fair). La valeur de sa capacité varie si fon change la quantité dir autour du fil (a fortiori avec un corps relié a la masse ou ala terre comme le corps humain). Ainsi lorsqu'une partie du corps humain approche du fil, la valeur de la capacité change Vous verrez dans la section Programmation comment se mesure la capacite. (© Eabtions EMI -Allights reserved Projet 1 - Synthétiseur thérémine 47 Au niveau du cablage, le fil capteur est relié a une borne de lArduino et a une résistance. elle meme lige 8 une borne numérique. Choisissez une résistance (entre 'émetteur et le capteur) d'autant plus élevée que vous voulez capter loin. - 1MOhm ou moins) pour un détecteur de contact. ~ 10 MOhm fera répondre le capteur a partir de 10-15 cm. ~ 40 MOhm fera répondre le capteur a partir de 30-60 cm (en fonction de la taille du capteur). Mais, avec un capteur en métal non isolé, il est possible que la broche d’émission ne soit jamais capable de charger la broche du capteur et la détection ne se Fera pas. Dans ce montage, cing résistances de 1 Mohm (montées en série) sont installées, mais il est possible que vous soyez amené a installer des résistances de valeurs différentes, notamment au cours du réglage explique plus loin. Montage avec le capteur capacitif Equipé d'un haut-parleur et de deux capteurs pour moduler le son, votre synthétiseur est main- tenant prét a chanter! 48 Arduino - S’exercer au prototypage électronique 4, Programmation La programmation de instrument slarticule en trois étapes: létalonnage des mesures du capteur de lumiére, Iétalonnage du capteur capacitif, et enfin la génération du son diffusé travers le transducteur piézoélectrique 41 Etalonnage du capteur de lumiére Les capteurs analogiques renvoient des valeurs fluctuantes (a la différence des capteurs numé- riques, qui renvoient seulement un signal “tout ou rien”). Afin de pouvoir exploiter au mieux ce signal, il est nécessaire de mesurer sa fluctuation réelle, qui est rarement exactement identique 4 la Fluctuation théorique prévue. Cette manipulation permet également de valider le bon fonctionnement de ce circuit de mesure. ‘Aumoment du montage, vous avez deja choisi une valeur de résistance complémentaire, qui est censée produire une fluctuation de tension. II s'agit maintenant de verifier le résultat réel afin de savoir sile systéme réagit dans les mémes ordres de grandeur. Pour ce faire, il faut écrire un programme qui ne fait que mesurer lentrée relige au capteur et la transmettre a ordinateur via la liaison série, de maniére que vous puissie7 la lire. La déclaration initiale se résume a la definition de la variable contenant le numéro de lentrée analogique sur laquelle est cablé le capteur tne capteur_luntere = 0; La routine dinitialisation ouvre une communication série la vitesse de 9 690 bauds. Serial.begin(3600) ; t Dans la boucle principale, lentrée relige au capteur est mesurée, puis elle est transmise, & travers la communication série, sous forme d'un message et d'une nouvelle ligne. | void setup() { int mesure = analogRead(capteur_lumiere) ; Serial.printUn(mesure) ; (© Eltions EM -Allghts reserved Projet 1 - Synthétiseur thérémine 49 Le programme complet est donc le suivant Fichier :O1_capteur_Lumiere int capteur_lumiere void setup() { Serial -begin(9600) ; + void loop() { int mesure = analogRead(capteur_lumiere) ; Serial-printin(nesure) 5 } Une fois ce programme téléchargé dans Arduino, il faut ouvrir le moniteur série pour recevoir les messages: ICliquer sur la petite loupe en haut a droite de interface de programmation ou sur le menu Outils - Moniteur série. We fois le moniteur ouvert, choisir en bas droite la bonne vitesse de communication (9600) pour recevoir les messages correctement décodés. jidevietyaCh (ardina/Genine Uno) ae ee ths Envoyer | 1 bdfienert atomataue [rouaie noe [}foecoseud | Moniteur série 50 Arduino - s’exercer au prototypage électronique Dans le moniteur série, la valeur représentant la tension mesurée a la borne de la photorésis- tance defile rapidement et de maniére continue. En cachant la photorésistance de la lumiere, vous pouvez faire varier cette valeur. Le but de cette session de mesures est de déterminer la fluctuation en situation réelle afin d’en déterminer les bornes. Dans exemple, les mesures séchelonnent autour de 200 (quand la photorésistance est ca~ chée) & 700 (quand elle est en pleine lumiére). Ces valeurs correspondent a des tensions allant de 0,97 83,42 V, ce qui correspond a peu prés aux valeurs qui ont été calculées precédemment : le montage semble fonctionner correctement. Vous trouverez certainement d'autres valeurs en fonction du modéle exact de photorésistance et du degré de luminosité de votre environne- ment. Fiez-vous alors a vos propres mesures. llest important de noter la plage de fluctuation, car cette paire de valeurs (ici 200-700) va vous servir dans un calcul afin de piloter le volume sonore. 4.2 Etalonnage du capteur capacitif Afin de mesurer la valeur de la capacité du condensateur formé par le capteur, une démarche un peu plus évoluée est nécessaire. En effet, une capacité influe sur le temps que met le circuit a atteindre une tension donnée. C'est ce temps qui est mesuré a travers un circuit "RC" (résis- tance + condensateur). Send pin Receive pin Con foil Coane Principe de fonctionnement du capteur capacitif (image de Paul Badger) Heureusement, une bibliothéque existe pour réaliser cette mesure: il s'agit de la librairie (ou bibliothéque) CapacitiveSensor. =Pour installer cette bibliothéque, dans le programme Arduino choisissez Croquis - Inclure une bibliothéque - Gérer les bibliothéques. (© Eetions ENI-Allrights reserved Projet 1 - Synthétiseur thérémine 51 Type [Tout yet [Tou apa or capaveSanaer by Paul Bagder, Pal Storopen (Sana Cpectvn canner tur cn datac tth oe pron. Th cipactivarer ray rato ot eee pee acacia | ‘SSont even ern a Seared apatonce ste hnaniedy A ison ae reaer a uumtoleesareanersndameceetnee ||| ‘SoTapuicstond neat crematoria wl A tures nso Be renee atte one shone toy neva onuy ete mane | | ‘Saile Version 6... | »_ Installs Hawke CopecRivebutton, peared bythe CapackivaSansorRrary An eiterianto ttn, rove nga fr Cepactve tons | Ferme Gestionnaire de bibliothéques Le gestionnaire de bibliothéque affiche toutes les bibliothéques disponibles en ligne Saisissez CapacitiveSensor dans le champ de recherche pour trouver la librairie en question, puis cliquez sur le bouton Installer. Une fois la librairie installée, vous pouvez visualiser la réponse du capteur. Pour ce faire, il faut écrire un code qui provoque la lecture du capteur 8 aide de la bibliothéque. et la transmission du résultat via le port série. Le code commence done par inclure la bibliothéque dans le programme, puis crée une instance du capteur capacitif, en occurence un objet de type Capacit iveSensor (implementé dans la librairie) qui porte lenom Capacitif. #include Uobjet est initialisé avec deux valeurs : les numéros de broche digitale (@metteur et le capteur), La séquence initialisation ne contient que ouverture d'une communication série Serial .begin(9600) ; | void setup() { y 52 Arduino - s’exercer au prototypage électronique La boucle principale lit le capteur (sur 380 échantillons). La mesure se passe sur 300 échan- tillons pour “moyenner” le signal qui est en fait trés bruite : faire la moyenne d'un grand nombre de mesures permet de rendre un signal plus lisse et stable. Le résultat de la mesure est ensuite transmis au port série. Le petit délai est la pour éviter de trop surcharger le canal de communi- cation, void loop() { Long mesureCapa = Capacitif.capacitiveSensor (308) ; Serial.println(mesureCapa) ; delay (18) 5 + Le code complet de verification du capteur capacitif est donc le suivant Fichier : 02 capteur_capai #include Capacitivesensor Capacitif = Capacitivesensor(3, 7); Paeeiat Begins); void loop() { Long mesureCapa = Capacitif.capacitiveSensor (308) ; Serial.printin(mesureCapa) ; delay (19) ; y Une fois ce programme téléchargé il sufit d ouvrr le moniteur série pour lire les valeurs recues par le capteur. A partir de la, il s'agit de "jouer" avec le capteur pour faire en sorte quil réponde de maniére lisible aux mouvements de mains alentour. Pour ajuster la réponse, vous disposez de deux “leviers” ~ Comme indiqué dans la documentation de la librairie http://playground Ardvino.cc/Main/ CapacitiveSensor?from=Main. CapSense, il faut choisir une résistance (entre lémetteur et le capteur) dautant plus élevée que vous voulez capter loin. Changer la résistance permet donc de faire varier la distance de captation ~ Le signal peut apparaitre trés "bruité”, c’est-a-dire quill fluctue vraiment beaucoup. Pour atté- rnuer ce phénoméne, il est possible daugmenter dans le code le nombre d'échantillons pour chaque mesure, dans lappel de la fonction Capacit if .capacitiveSensor (300) Ce réglage. en faisant la moyenne sur un certain nombre de mesures, a pour effet de lisser le signal et de le rendre moins fluctuant. Une autre solution (éventuellement complémentaire) peut étre d jouter un petit condensateur (100 pF - 0.01 uF) entre lantenne et la masse. (© Edis EM - Allright reserved Projet 4 - Synthétiseur thérémine 53 Au terme de ces réglages, vous devez idéalement obtenir une valeur qui “module”, cest-8-dire qui varie significativement lorsque vous bougez la main devant le capteur. Pour la suite de la programmation, il estimportant de noter les bornes de cette fluctuation. Dans le montage présenté, la plage va de 200 a 1000, mais il est fort probable que vous obteniez dautres valeurs, limportant étant de moduler sur une plage suffisamment significative pour servir de levier a la modulation du son dans la partie suivante. 4.3 Génération du son Maintenant que les deux signaux issus des capteurs sont maitrisés, il s'agit de les utiliser pour moduler le son. Le principe de fonctionnement prév est que le signal du capteur capacitif module la fréquence. tandis que le signal du capteur module le volume sonore. LIDE Arduino est livré par défaut avec une fonction de génération de son : [a fonction tone () Cependant, cette fonction est trop limitée pour ce projet, car elle nvoffre pas la possibilité de faire varier le volume, aussi il est nécessaire diinstaller la bibliothéque Volume3. Cette bibliothéque s'installe comme précédemment. Dans le gestionnaire de bibliothéque situe dans le menu Croquis - Inclure une bibliothéque - Gérer les bibliothéques, saisissez Volume 3 dans le champ de recherche. Le code combine la gestion des deux capteurs pour réaliser la génération du son diffusé travers lactionneur piézoélectrique. Dans les déclarations initiales, outre les éléments liés aux capteurs, sont ajoutes le chargement de la bibliothéque Volume3 et la déclaration de la sortie relige a lactionneur piézoélectrique include include "Volume3.h" int piezo = 95 int capteur_lumiere = 0; Capacitivesensor Capacitif = CapacitiveSensor(3, 7); Dans la boule principale, le programme mesure les entrées des capteurs comme cela aété pro- grammé précédemment, void Loop() { Long mesureCapa = Capacitif.capacitiveSensor (300) ; int mesureLumiere = analogkead(capteur_lumiere) ; Les deux valeurs obtenves luctuent entre 20 et 2 000 (pour le capteur capacitif} et entre 200 et 700 (pour le capteur de luminosit€). 54 Arduino - s'exercer au prototypage électronique Or, le but est de faire fluctuer le volume avec la luminosité et la fréquence avec la capacité. La documentation de la bibliothéque Volume3 signale que le volume est réglable de 0 a 1023, et la fréquence en valeur absolve (sachant que la plage audible se situe entre 20 et 20 000 Hz) II faut done réaliser des operations de mise a léchelle/transposition entre : ~ capacite -> fréquence : [20-2 0001->[60-2 0001 (pour rester dans des fréquences confor- tables 4 loreille) ; ~ luminosité -> volume : [200-700)-s11 023-0] {pour Faire augmenter le son lorsque vous ca- chez le capteur). Ces opérations se réalisent avec une régle de trois, plus un offset. Comme cet outil mathéma- tique est souvent utilisé pour relier deux plages de valeurs, il est disponible sous la forme dune fonction dans le langage Arduino : la fonction map ( ) int frequence = int(map(mesureCapa, 269, 2060, 69, 2600)); ‘int volume = int(map(mesureLumiere, 260, 700, 1623, 6)); A noter que. comme la fonction map () retourne un nombre a virgule flottante (Float) il Faut utiliser la fonction int () pour convertir le résultat en entier. Le résultat de ces calculs est transmis a la fonction vol . tone ( ), mais aussi au port série, de maniére contrdler avec le moniteur série la réponse du systéme et a ajuster au besoin les pa~ ramétres afin dobtenir une plage de réaction harmonieuse et lsible. Fichier : 03 generateur_son Serial.print(frequence) ; Serialprint(":"); Seriatprinttn (volume); vol.tone(piezo, frequence, volume) ; Le code final est donc le suivant Fichier :03_generateur_son #include #include "Volune3.h" int piezo = 9; int capteur_lumiere = 6; CapacitiveSensor Capacitif = CapacitiveSensor(3, 7); void setup() { Serial begin(9600) ; + void Uoop() { long mesureCapa = Capacitif.capacitiveSensor (306) ; ‘int mesurelumiere = analogkead(capteur_lumiere) ; © Eakins EM -Allights reserved Projet 1 - Synthétiseur thérémine 55 nt frequence = int(map(mesureCapa, 200, 2000, 60, 2000)); int volume = int(map(mesureLumiere, 200, 700,'1623, 6)); Serial.print (frequence) ; Serial.print(":"); Serial.printin(votume) ; vol.tone(piezo, frequence, volume) ; } Une fois ce code téléchargé dans Arduino, vous pouvez jouer de la musique en passant vos mains devant les deux capteurs. Ceci provoque une fluctuation du son émis par lactionneur piézoélectrique. Le projet est maintenant aboutit: vous disposez d'un mini-synthétiseur théré- mine 5. Pour aller plus loin 5.1 Améliorations possibles Ce synthétiseur fonctionne déja bien, mais vous pouvez améliorer et/ou diversifier son compor- tement Multiplier les capteurs Avec deux capteurs, vous modulez une note, mais vous pouvez construire un “clavier’ complet pour enrichir et affiner la genération du son, a la maniére de lorgue laser de Jean-Michel Jarre. Multiplier les capteurs permet aussi d'envisager une synthése modulaire plus évoluée, avec des harmoniques. Carrosser instrument Le montage tel quel est d'un aspect visuel un peu brut. Enfermer le circuit dans une boite en bois, de bel aspect, et y monter une antenne plus jolie en ferait un veritable instrument pratique & manipuler et beau 8 regarder. éaliser de grands capteurs capacitifs Le capteur capacitif utilisé est étalonné pour étre sensible a relativement courte distance. Mais en réalisant un ou des capteurs plus grands. il est possible de rendre le systéme sensible au passage de corps entiers, voire a des danseurs 56 Arduino - Sexercer au prototypage électronique Elaborer un code génératif Le design genératif peut aussi s'appliquer au son. En utilisant les entrées des capteurs comme des parameétres, Integrez-les dans un code mathématique générant une mélodie. L'interaction avec les capteurs influence alors, non plus les notes, mais les rythmes ou les tonalites (voir la 8- bit Mixtape ci-aprés). 5.2 Ressources Le thérémine : https://fr.wikipedia.org/wiki/ Therémine Explications sur la piézoélectricité : https://fr wikipedia org/wiki/Piézoélectricité Une fiche technique (datasheet) sur les actionneurs piézoélectriques : https://www Arduino.cc/documents/datasheets/PIEZO-PKM22EPPH4061-BO. pdf Une fonction vol. tone () disponible sur github : https://github.com/connornishijima/Arduino-volumel Une autre bibliothaque plus riche: http://playground Arduino .cc/Code/ToneAC La page de la bibliothaque CapacitiveSensor : http:// playground Arduino.cc/Main/CapacitiveSensor?from=Main.CapSense Inspiration : un module sonore autonome embarque dans une K? audio: http://lifepatch org/8-bit Mixtape (© Eakins ENI-Allrights reserved Chapitre 3 Projet 2 - Jeu de mémorisation musicale 1. Présentation He Pour visualiser la vidéo du projet : Jeu original Simon édité par MB Ce projet consiste a réaliser un jeu électronique de mémoire musicale inspiré du célbre jeu Simon édité par MB en 1979. Ce jeu de mémoire et de répétition, qui trouve son origine dans le jeu “Jacques a dit.” (en anglais, "Simon says", dod son nom), consiste a tenter de reproduire une suite de notes diffu- ssées par automate. Relativement simple techniquement, il n’en est pas moins amusant a utili- ser seul ou & plusieurs. Le montage final se préte aussi merveilleusement au détournement pour en imaginer dautres usages. ST 58 Arduino - S'exercer au prototypage électronique Jeu Simon Ce projet sera foccasion d explorer de nouvelles notions, comme la création de types de données spécifiques ou lécriture de fonctions. L'usage des interrupteurs permettra de comprendre la gestion de ce type d entrées, avec la notion de tage par le haut (pull up) des potentiels. 1.1 Principe de fonctionnement interface est constituée par une série de quatre couples bouton/led de couleur, chacun de ces couples étant associé a une note. Un actionneur piézoélectrique sert de haut-parleur et diffuse une série de quatre notes composée au hasard, avec des durées et des silences spécifiques. Pendant la diffusion, la led associée a chaque note jouée s'allume simultanément. Ala suite de la diffusion du morceau, un signal indique que c'est au joueur de tenter sa chance. Celvi-ci peut alors tenter de reproduire la mélodie entendue. Le microcontréleur enregistre la production du joueur pour la comparer a l'original diffusé. Sila restitution du joueur est fausse, une mélodie exprimant la défaite est diffusée. puis le pro- gramme rediffuse la derniére musique non reconnue Sila restitution est correcte, un signal de victoire est diffusé, puis le programme genére un nouveau morceau contenant une note de plus que précédemment, rendant le jeu un peu plus difficile. (© Edtions EN -Allights reserved Projet 2 - Jeu de mémorisation musicale 59 1.2 Notions Les notions abordées dans ce projet sont les suivantes: créer une fonction, créer et utiliser un type de données spécifique, tirage vers le haut ou le bas des entrées digitales (pull up, pull down), utiliser un actionneur piézoélectrique, mettre en ceuvre des leds. 2. Matériel et outillage Le matériel nécessaire représente un budget denviron 40 euros 21 Matériel Une Arduino de type UNO ou équivalent. Quatre boutons poussoirs pour circuit imprimé (quatre picos) a choisir parmi de grands mo- déles. Quatre diodes électroluminescentes (leds) de couleurs différentes Quatre résistances d environ 200 Ohms. Un actionneur piézoélectrique Une plaque de prototypage (grand modele). Du fil de connexion Arduino UNO 60 Arduino - s’exercer au prototypage électronique me @a * Boutons poussoirs Actionneur piézoélectrique (© ekiions EM -AUl rights reserved Projet 2 - Jeu de mémorisation musicale 61 \ qafe i \. \ Résistances 2.2 Outillage Pour réaliser ce projet. il sera nécessaire d'utliser un ordinateur pour programmer lArduino et éventuellement une pince coupante pour dabiter le fil de connexion 62 Arduino - S'exercer au prototypage électronique 3. Montage Le montage consiste relier les trois systémes a [Arduino : actionneur piézoélectrique, la série de leds et la série de boutons. Si vous le désirez, vous pouvez d ores et déja prévoir un boitier pour accueillr le circuit Montage du jeu Simon (© Ektions EM Allright reserved Projet 2 - Jeu de mémorisation musicale 63 ‘| MATT TT =r g ef BE y a 5° Be Es oe v0 teo2 10 Bide sonny Eeeacsssom) | $eowcfasom | Red asum S ~ + |e 4 Le ALAL ALS e ¥ Circuit du jeu Simon 3.1 Actionneur piézoélectrique Ils‘agit d'un composant quia la particularité de se déformer lorsquil est souris a une tension. Cette caracteéristique est mise a profit ic, car en étant soumis a une tension oscillante, il se met 8 vibrer, agissant comme un haut-parleur. Meme sice nest pas exploité ici. estintéressant de noter que les composants piézoélectriques sont réversibles lorsquils sont soumis a une action mécanique (par exemple, une pression du doigt). ils provoquent a leur tour une tension. Ils peuvent donc étre utilisés comme capteurs de contact ou de vibration. Le cablage ne pose aucun probléme particulier, car il s'agit d'un dipéle 64 Arduino - S'exercer au prototypage électronique 3.2 Leds Les diodes électroluminescentes (souvent appelées leds) sont concues pour fonctionner sous une certaine tension, désignée dans la documentation par le terme “tension de seuil’. Elles acceptent aussi une certaine quantité de courant quil ne faut pas trop dépasser au risque de ré- duire leur durée de vie, [_ ffension Couleurs de seuil a 590 nm. 470 nm ae Valeurs caractéristiques indicatives de quelques leds Comme les sorties numériques de l'Arduino produisent une tension de 5 V, si les leds étaient branchées directement, elles grilleraient rapidement, car leur tension de seuil se situe entre 16 et 3.2 V. Pour maitriser le courant et la tension queelles subissent, il est donc nécessaire d'ajouter une résistance en série, qui agit comme un pont diviseur de tension. AW RI Led avec sa résistance en série © Ediions EM -Allrights reserved Projet 2- Jeu de mémorisation musicale 65 Pour comprendre comment est déterminée la valeur dela résistance a utilise. il est utile de se livrer & un petit calcul Soit une led rouge pourvue d'une tension de seuil de 12 V et d un courant nominal de 20 mA. La formule qui ‘applique est: U=Ri Qu encore R=Uli Done R=(5—1,2)/0,02=1600hms Pour une led bleve R=(5—3)/0,02=100 Ohms Pour protéger la led rouge. il faudrait monter une résistance de 160 Ohms, et pour protéger la led bleue, une résistance de 100 Ohms. Dans la pratique, comme on ne connait pas nécessairement les caractéristiques exactes desleds fournies, on arrondit un peu les valeurs et fon choisit une résistance approchant ou plus forte {de cette maniére, les leds seront 4 coup sr préservées). C'est pourquoi le choix est Fait de mon- ter des résistances d environ 200 Ohms. Ainsi, le courant qui les traversera sera plus faible que leur valeur nominale, et elles brilleront un tout petit peu moins. Une autre précaution a prendre lors du cablage d une led est sa polarité. En effet, comme toutes les diodes, elle ne laisse passer le courant que dans un seul sens. La patte la plus longue corres- pond a anode (+) et doit étre branchée du cété positif du circuit. autre patte s'appelle la ca~ thode (-} et doit donc naturellement étre branchée en direction de la masse. 3.3 Boutons poussoirs En général, les boutons poussoirs pour circuit imprimé sont pourvus de quatre bornes, qui sont religes ensemble deux par deux. Il est nécessaire de s'assurer du sens dans lequel la commuta- tion se fait, afin de les brancher dans le bon sens. Ils sont ici cablés de maniére a conduire vers la masse quand ils sont actionnés. Aussi, quand ils sont au repos, entrée numérique de Arduino mesure le potentiel d'un fil coupé, relié& rien. Dans ce cas, le potentiel mesuré peut étre fluctuant: rien niassure quil soit différent de O (Iétat bas’) ou 5 V (Tétat haut’). 66 arduino - s’exercer au prototypage électronique Pour éviter cette ambiguité, il est nécessaire d'ajouter une résistance de trés forte valeur qui relie Tentrée de {Arduino a la masse (c'est le cas du "tirage bas” ou ‘pull down’) ov au 5 V (cst le cas du trage haut’ ov “pull up’) Ainsi, lorsque linterrupteur est ouvert: le potentiel mesuré est respectivement 0 V ou SV a sa borne. Cette résistance est parfois désignée sous le terme “résistance de rappel". (pull upy wv avert 1 nesure = SY | ouvert # nenure = ov T severrupeeur sn eur ferme mezure = ft mesure = SV Deux montages possibles de résistances de rappel Dans le montage proposé pour le jeu Simon, il n'y a pas de résistances de rappel physiquement présentes sur la plaque de prototypage, car ce sont les résistances directement intégrées dans le microcontréleur qui sont utilisées. Ce cablage s'effectue de maniére logicielle (voir la section Programmation) Maintenant complétement monté, le eu est prét a s'animer. Ilne reste plus qu'a le programmer. 4. Programmation Laprogrammation dujeu Simon s articule en trois étapes : lui apprendre a chanter des mélodies, 8 capter ce que jove l'utilisateur et & composer de nouvelles mélodies. 41 Chanter des mélodies Au début du jeu, Arduino commence par diffuser des mélodies de maniére sonore (a travers lactionneur piézoélectrique) et visuelle (en faisant clignoter les leds). Comme ces mélodies sont changeantes. il est préférable d écrire une fonction générique pour lire une partition. (© abtions EM -Alloghts reserved Projet 2- Jeu de mémorisation musicale 67 Ce début de code permet en outre de verifier le bon fonctionnement des leds et de lactionneur piézoélectrique La pattition est formatée selon une structure spécifique définie avec la fonction typedef () Dans un premier temps, les numéros des bornes relies aux leds sont mémorisés dans un ta- bleau, ainsi que le numéro de la sortie iée a lactionneur piézoélectrique. Dans la foulée est dé- claré un tableau de quatre cases, nommé cLavier, et qui contient les fraquences de notes liges a chaque "touche’. La liste de ces fréquences a été choisie arbitrairement pour rendre un crescendo, mais vous pouvez choisir des frequences plus musicales si vous en avez lenvie et la connaissance int leds[4] = (3, 5, 7, 935 int HautParleur ='10} int clavier[4] = {88, 122, 168, 225}; Le format de données pour écrire une mélodie est structuré de la maniére suivante :ils'agit dun tableau (de notes) de longueur indéterminée. Chaque élément (note) du tableau est caractérisé par trois paramétres : ~ La touche enfoncée (le numéro de la case du clavier entre O et 3) ~ La durée (en milisecondes) ~ Ladurée du silence (aprés la note). ensemble constitue donc un tableau de tableaux, un format qui n'est pas trés aisé 8 manipuler et surtout a transmettre d'une fonction a l'autre. Pour simplifier la manipulation de ces données, un type de données spécifique est créé, qui porte lenom de chansonet quiest en fait un tableau de longueur indéterminée contenant des tableaux de trois nombres entiers. Ce type de données (ou datatype) est déclaré avec le préfixe typedef. Une fois cré tre immédiatement utilisé pour créer trois mélodies qui vont servir de test. peut typedef int chanson(](3]; chanson chant = { {@, 800, 169), {2; 908; 169), {3; 600, 169), {1, 600, 160} 5 chanson chant2 = { 13, 468, 22), {1, 10068, 108), {3, 460,'0}, {2} 1008, 03, (3) 460, 0} 1 chanson chant3 = {{3, 460, 22}, (2, 1080, 100}, 68 Arduino - S’exercer au prototypage électronique (1, 460, 0}, {@, 1006, o} 8 Ceci fait, la séquence dinitiaisation se resume a déclarer les bornes utilisées pour les leds comme sorties. Afin de parcourir tout le tableau de leds, le programme utilise la fonction sizeof (), qui donne la longueur d'un tableau. A noter que cette fonction est a utiliser avec précaution, car elle est exécutée au moment de la compilation du programme. Elle donne donc des résultats erronés sila taille du tableau est changée pendant exécution (ce qui n'est pas le cas ici) void setup() { pinMode(HautParleur, OUTPUT) ; for (int 1 = 0; 1 < sizeof(LED); i++) { pinMode(LED[i], OUTPUT); oa La boucle principale réunit trois appels a la fonction chante () avec, en paramétre, successi- vernent les trois mélodies écrites précédemment, et leur longueur en nombre de notes, Obter lenombre de notes n'est pas trivial: en effet, la fonction sizeof () donnelattaille d'un tableau enoctets, et non en cases. Pour obtenir le nombre de cases, il faut donc diviser le résultat obtenu par la taille qu'occupe une case en octets (comme il s'agit dentier, ceci correspond & sizeof (int), soit 2 octets) multipliée par 3, car chaque note occupe trois cases. La longueur de chanson est passée en paramatre a la fonction chante (), car comme indiqué précédemment, la fonction sizeof () ne s‘exécute qu'une fois au moment de la compilation du programme, et non durant son exécution. Il est donc impossible de lutiliser&Iintérieur de la fonction chante ( ), car elle donnerait des résultats erronés. void loop() { chante(chant1, sizeof (chant1) /(3*sizeof(int))); delay (1008); chante(chant2, sizeof (chant2) /(3*sizeof(int))); chante(chant3, sizeof (chant3) /(3*sizeof(int))); delay (1908) ; 1 Vient ensuite le coeur de ce début de programme : la fonction chante ( ). qui prend un chant et un nombre de notes en parameétres. Laboucle for parcourt tous les éléments du tableau de notes pour successivement ~ Choisi a fréquence a jouer dans le clavier. Allumer la led correspondant a la touche. Determiner la durée de jeu de la note. Jover la note sur la durée Cavec la fonction tone ()). Attendre la durée req (© Edin EN -Allghts reserved Projet 2 - Jeu de mémorisation musicale 69 ~ Arréter la note avec la fonction noTone () ~ Eteindre la led. ~ Attendre le temps du silence. void chante(chanson chant, byte taille) for (int i= 0; 4 ¢ taille; 14) { ‘int index = chant{i] [9] 5 int freq = clavier [index] ; digitatwrite(leds[index] , HIGH); nt duree = chant [i] [1] tone(HautParleur, freq, dure); delay (duree) 5 noTone(HautPar leur) ; digitalwrite(Leds[index}, Low) 1 delay (chant 5712195 > Le code est finalement le suivant Fichier : O1_chante_des_chansons int leds[4] = {3, 5, 7, 9}; int HautParteur = "1 int clavier[4) = {88, 122, 168, 225}; typedef int chanson(] {3}; chanson chanel = { {0, 800, 100}, {2} 900, 100}, {3, 600, 100}, {1} 608, 100} a chanson chant2 = { 13, 460, 22), {1, 1006, 100}, 43) 480,'0}, 42) 1888, 93, 13) 480,0} a5 chanson chant3 = {{3, 460, 22}, {2, 1000, 100}, {1) 469, '0}, {@, 1608, 95 i void setup() { inode (HautParleur, OUTPUT); for (int i= 6; 1 <'sizeof(leds); i++) { Pinlode(Leds{i], OUTPUT) ; y void Loop() { chante (chant) ; delay (1006) ; chante (chant2) ; 70 Arduino - S’exercer au prototypage électronique delay (1069) ; chante (chant3) ; delay (1069) ; } void chante(chanson chant) { for (int 4 = 0; 1 <4; 44+) { int index = chant {i} (0); int freq = clavier[index] ; digitallrite (Leds [index] , HIGH) nt duree = chant{i}(113 tone(HautParleur, freq, duree) delay (dure) 5 noTone(HautParteur) ; Gigitalwrite(Ledstindex], Low 1 dete (chant 32D 5 ) Une fois ce code téléchargé, le circuit doit jouer en boucle les trois morceaux de musique, en allumant les leds de maniére synchrone. 4.2 Capter des mélodies La deuxiéme phase de jeu consiste a détecter les notes jouges par Iutilisateur, puis 8 comparer sa production avec le morceau de référence pour verifier quill'a correctement reproduit. Cette phase de programmation permet de verifier le bon fonctionnement des boutons comme interface dentrée. Par rapport au code précédent, sont ajoutées quelques lignes dans les déclarations initiales int boutons[4] = (2, 4, 6, 8}; WG) int mode = 0; int id_capture = 6; II .agit de déclarer le tableau des entrées cablées aux boutons. La variable mode sert & mémo- riser la phase de jeu dans laquelle le programme se trouve : - Gen phase de lecture dune mélodie. n de l'utilisateur. - lenattente d'une res! ~ 2en cours denregistrement. Quant ala variable id_capture, elle mémorise lindex des notes produites par l'utilisateur. (© Edin EN -Allrights reserved Projet 2 - Jeu de mémorisation musicale 71 Par la suite, sont ajoutés cinq nouveaux morceaux : deux nommés crescendo et decrescendo, qui servent 4 notifier le début et la fin de la phase de restitution ; deux nommés victoire et echec, utilisés pour notifier le résultat de la restitution du joueur ; et enfin, un morceau chant_capte, destiné a stocker le morceau produit par le joveur. chanson decrescendo = { {3 50, 9}, (2) 50, 9}, {1, 60, 6}, {o; 606, 0} 5 chanson crescendo = { {9, 50, 9}, (1, 50, 0), {2, 60, 9}, (3) 60, 9} chanson victoire = { {3, 160, 22}, {2, 100, 100}, {3, 160, 0}, {1} 100, 6}, (3, 460, 3330} chanson echec = { {2, 168, 220}, {0, 200, 100}, {2, 260, 30}, {o, 1008, 0}, {0, 460, 0} chanson chant_capte = { 16, 2000, 1), {e, 2080, 1}; {o, 2000, 1}, {6, 2000, 1}; {0, 2609, 1} Dans la phase dinitialisation, une communication série est établie afin davoir un retour lisible des phases dans lesquelles est le programme. I Serial.begin(9600); Cest ici aussi que sont initialisées les entrées liées aux boutons. Comme expliqué dans la section Montage, il faut activer les résistances de tirage vers le haut (pull up) sur ces entrées. Ceci est fait grace a lattribut INPUT_PULLUP : pinllode(boutons[i], INPUT_PULLUP) ; for (int 4 = 05 4 <4) $00 ( | } 72. Arduino - s’exercer au prototypage électronique Puis vient la boucle principale, avec la structure du programme qui peut étre décrite parla chro- nologie suivante Diffuse la melodie a reproduire. Signale le début de Fattente par un decrescendo Attend que l'utilisateur actionne un bouton. Quand une note est jouée, mémorise son index et sa durée. orone Quand autant de notes sont enregistrées quil y en a dans la mélodie & trouver, diffuse un crescendo, Vérifie l'exactitude de l'enregistrement. Sienregistrement est correct, diffuse la musique de victoire, et dans le cas contraire, celle de léchec. Cette chronologie est traduite dans la boucle principale par la structure suivante, déterminée par les trois modes possibles (diffusion, attente, enregistrement) if (mode == 0) { /Jici est décrit la diffusion WG) } else { //sinon : en [attente] ou [enregistrement] for (int i= 0; 4 < 43 i++) { //vérifie les boutons if (digitalRead(boutons[]) == Low) { //si un bouton est activé if (mode == 1)mode = 2; J/si le mode était [attente] passe au mode [enregistrenent] I/gere et enregistre U'appui des boutons UG ? } 3 (mode == 2) { // si un enregistrement est en cours if (id_capture == 4) { // si le nombre de notes requis est atteint /Jvérifie Ltexactitude de la restitution et annonce le verdict if (chantCorrect()) { Serial.printLn("restitution correcte"); chante (victoire, 4); p else { Serial.println("restitution incorrecte") ; chante(echec, 4); (© tons EN - Allright reserved Projet 2 - Jeu de mémorisation musicale 73 La partie diffusion n‘est pas trés différente du premier programme écrit puisqu’elle consiste juste a jouer deux mélodies : le chantATrouver suivi du decrescendo. Dans la foulée, le mode est passé ! pour indiquer que le programme se met en attente dune intervention de Vutilsateur. Serial. printIn("intraduction") ; chante(chantATrouver, 4); detay(208) chante(decrescendo, 4); node = 1; Serial.printin(recoute..."); Dans la partie consacrée a lenregistrement, le test pour vérifier si un bouton est actionné consiste a surveiller un état LOW. En effet, cause de la résistance de rappel (pull up), lorsqu'un bouton est au repos fouvert), entrée Arduino correspondante est a 5 V, et lorsquil est fermé. elle passe a 0V. Une fois un appui de bouton detecté, aprés avoir mis a jour le mode, la sequence suivante est décrite : Mémorise le temps actuel (avec la fonction millis ()) Produit le son correspondant a la touche. Allume la led correspondant a la touche. Attend tant que le bouton est appuyé. Stoppe le son. Eteint la led. Si la durée est supérieure a 10 millsecondes, enregistre la note dans le tableau chant_capte. 1 2 3 4 5. Mesure le temps passé depuis le début de lappui 6 7. 8 9. Incrémente la valeur de l'index d'enregistrement. ‘if (digitalRead(boutons[i]) if (mode == 1)mode = 25 int duree = millis(); tone(HautParleur, clavier(i])5 digitalWrite(leds(i], HIGH); while (digitalRead(boutons(1]) delay(5)5 1 duree = int(millis() - dure); noTone(HautParleur) digitalwrite(leds(i}, LOW); if (dure > 160) ¢ Serial.print(i Serial-print(":") ; Serial -println(duree) ; Low) { 74 arduino - S’exercer au prototypage électronique chant_capte[id_capture] [6] chant_capte[id_capture] [1] id_capturet+; y y Le fait de n'enregistrer les notes que si elles durent plus de 19 millisecondes permet d'éviter denregistrer les rebonds des boutons et les "doubles clics” trop rapides. Au moment de l'enregistrement, les valeurs de note et de durée sont aussi transmises a lordi- nateur via la communication série pour rendre compte du déroulement du programme. Par la suite, c'est en surveillant la valeur de index de capture que le programme détecte qu'une mélodie enregistrée fait la méme taille que la mélodie a trouver. II remet alors a 0 lindex de capture et diffuse le crescendo pour signaler que lenregistrement a prs fin. if (id_capture Serial.printla| id_capture = 05 delay (1000) ; chante(crescendo, 4); delay (1000) ; La fonction chantCor rect () compare alors le chant enregistré avec cel cas de succés, le chant de victoire est diffusé, dans le cas contraire, c'est cel 4) ¢ fin d'enregistrement") ; a reproduire. En Je léchec. if (chantCorrect()) { serialeprinein(*restitution correcte"); chante(victoire, 4); } else { Serial.printin(*restitution incorrecte") chante(echec, 4) + fhode = 0; delay (2000) ; La fonction chantCorrect () est définie juste aprés la boucle principale, en tant quiobjet booléen, car elle retourne "vrai" ou "faux". Cette fonction est relativement simple. Elle considére au départ que le chant est correct. puis elle passe en revue les notes enregistrées, pour les comparer a celles du chant a trouver. Sile numéro de note est different ou si sa durée montre un écart de plus de | demi-seconde avec original, la restitution est considérée comme ratée. Finalement, la valeur du résultat est renvoyée avec Instruction return. Les silences, qui sont pourtant encodes dans les mélodies, ne sont pas enregistrés ni contralés, de maniére a ne pas rendre le jeu trop difficile (© Edtions EN) ~ Allright reserved Projet 2 - Jeu de mémorisation musicale 75 boolean chantCorrect() { boolean succes = true; for (int 1 = 0; 1 <4) 444) { if chant_capte(i][6]_!= chantaTrouver [4] 0 }|abs(chant_capte[i][1] - chantATrouver(4J[1] > 500) ) succes = false; y return succes; + Le code complet de captation des mélodies est donc finalement le suivant Fichier : 2 capte_des.chansons int boutons(4] = {2, 4, int leds[4] = (3, int HautParteur = "1 int mode = 6; int id_capture 8); 7, 95 int clavier(4] = (88, 122, 168, 225} typedef int chanson(] [2]; chanson chantaTrouver = { {8, 806, 160}, {2, 900, 190}, {3, 608, 100) {1} 600, 100} chanson decrescendo = { 58, 0}, 50, 9}, {1, 69, 0}, fe, 606, 6} chaison crescendo = fc, se, hs {1, 5@, @}, 2) 6) 9; {3, 68, O} 4G chatson victotre (ay 160, 23), 12; 160; 06s, &) ise; @), {1, 100, 6}, {3, 460, 3330} My chanson echec = { {2, 160, 220}, te; 200) 100), {2, 260, 80}, {@, 1000, 6}, fe) 460,"e) a3 | ctinhson_chant_capte = ( {8, 2000, 1}, {9, 2000, 1}, {0, 2000, 1}, 76 Arduino - S'exercer au prototypage électronique {@, 2000, 1}, {@, 2000, 1} h void setup() { ‘Serial.begin(9600) ; pinMode(HautParleur, OUTPUT) ; for (int i= 0; i <’sizeof(leds); i++) { Pinlode(teds{i], OUTPUT) ; } for (int i = 0; 4 < sizeof( boutons); 4 pinlode(boutons[i}, INPUT_PULLUP) ; } } void loop() £ Gf (mode == 6) { chante (chantaTrouver ,4); delay (208); chante(decrescendo, 4); mode = 1; Serial.printIn("ecoute..."); } else { for (int 4 = 0; 4 < 45 i++) ( if (digitalRead (boutons[4]) if (mode == 1)node = 23 int duree = millis(); tone(HautParteur, clavier[4]) ; digitalurite(leds(i], HIGH) while (digitalRead(boutons[1]) == Low) delay (5)5 Low) ¢ duree = int(millis() - duree); noTone(HautPar leur) ; digitalwrite(Leds[i}, Low); if (duree > 10) { Serial.print (i); Serial. print(":") Serial.printtn(duree) ; chant_capte[id_capture] [0] chant_capte[ id_capture] [1] id_capture++; duree; ) if (mode == 2) { 4f (Cid_capture == 4) { Serial.printin("fin d*enregistrenent™) ; id_capture = 6; delay(1008) ; chante (crescendo,4) delay (1908); if (chantcorrect()) { Serial printin("restitution correcte"); chante(victoire,4)5 p else { A Serial.printin("restitution incorrecte’ chante(eches 4) 5 (© Edltions EN! Allright reserved Projet 2 - Jeu de mémorisation musicale 77 ) inode = 0; delay (2008) ; y + } boolean chantCorrect() { boolean succes = trues for (int 1 =; 1 <4} iv+) { } if chant_capte[i] [0] != chantaTrouver[i][0 [38 (chant capte( 4) (1) ~ chantaTrouver[4][1] > 500 ) Succes = false; return succes; } void chante(chanson chant, byte taille) for (int 1 = 0; 4 < taille; itt) { d y int index = chantCi] (6 int freq = clavier [index digitalurite(Leds[ index) int duree = chant [i] (1] tone(HautParleur, freq, dure) delay (dure) ;, noTone(HautParleur) ; digitalurite(LeD[index), Low) delay (chant 4] (2]) 5 WIGH) 5 Une fois ensemble de ce code téléchargé sur Arduino, le jeu est déja fonctionnel. A vous de jouer! =)Ouvrez a présent le moniteur série pour observer les messages envoyés par le programme et en comprendre le déroulement. Cliquez sur la petite loupe en haut a droite de linterface de programmation ou sur le menu Outils - Moniteur série. “WUne fois le moniteur ouvert, choisissez en bas a droite la bonne vitesse de communication (8600) pour recevoir les messages correctement décodés. 78 Arduino - $’exercer au prototypage électronique Idev/ttyACMO (Arduino/Genuino Una) x | Emwayar |G bétiement automatique Nowellelgne |v, [9500 baud |v Messages envoyés par le code du fichier 82.capte_des.chansons 4.3 Composer des mélodies Le programme tel quil est parait déja ludique, mais au bout de quelques tours de eu, lutilsateur aura mémorisé la mélodie a trouver, et lintérét s'en trouvera considérablement réduit. Pour le rendre plus évolutif et intéressant, il est nécessaire d’ajouter une fonctionnalité : la capacité du programme & composer lui-méme ses mélodies, voire & en créer de plus longues pour rendre le jeu graduellement plus difficile. Par la méme occasion, vous améliorerez les messages diffu- sés sur le port série pour une lisibilité accrue du déroulement du programme. Par rapport au précédent code, les déclarations initiales montrent quelques modifications. En effet, comme ce code doit permettre de composer des morceaux de plus en plus longs, il faut vous assurer que l'espace mémoire vive ne viendra pas 4 manquer. Pour cela, sont adoptées deux stratégies : choisir les types de données les plus adaptés au besoin pour consommer moins dspace, et stocker une part des données avec le programme dans la mémoire flash. Ainsi, les variables contenant des entiers de petite taille, initialement déclarées en tant que nombre entier, sont déclarées ici en tant que byte, c'est-a-dire octet. Les octets peuvent en- coder un nombre compris entre 0 et 254, ce qui est largement suffisant pour usage qui est fait ici de ces variables. Celles-ci occupent ainsi deux fois moins de place en mémoire vive Est ajoutée aussi une variable booléenne debug permettant facilement dactiver ov de désactiver les communications série. (© Edtions EM -Allights reserved Projet 2 - Jeu de mémorisation musicale byte boutons[4] = {3, 5, 7, 95 byte leds(4). = {2, 4, 6, 8}; byte HautParleur = ie; byte clavier[4] = (88, 122, 168, 225}; byte mode = 6; byte id_capture byte taillechant boolean debug = trues Plus loin, dans la séquence initialisation, trois lignes de code sont ajoutées. La premire sert 8 afficher le logo sur le port série (la Fonction appelée est détaillée plus loin). La deuxiéme et la troisiéme sont liges. En effet, dans la fonction compose (). il est fait usage de la fonction random() pour tirer des nombres au hasard. En réalité, un circuit électronique est incapable de générer des nombres vraiment aléatoires. Pour pallier cela, la fonction fait appel a une suite mathématique trés irréguliére considérée comme pseudo-aléatoire. Le probléme de cet artifice est qu’en utilisant uniquement la fonction random( ), vous obtenez exactement les mémes tirages au sort a chaque redémarrage du programme. La fonction randomSeed () (graine de hasard) designe le nombre passé en paramétre comme le point de départ de la suite mathéma- tique en question. Comme il est ici pris sur lentrée analogique 0, qui n'est branchée & rien, i prend une valeur différente a chaque démarrage, car une borne branchée a rien montre un po- tentiel “lottant”. Les nombres aléatoires générés sont donc plus réalistement “hasardeux’. afficheLogo();, randonSeed (anaLogRead (0) ); compose(tailleChant) ; La fonction compose (), comme son nom lindique, crée une mélodie de la longueur donnée, en tirant chaque parametre au hasard. void compose(byte taille) { if (debug) { Serial.print ("compose un chant de "); Serial-print(taitte) ; Serial.println(" notes"); } for (int 4 = 0; 4 < taille; i++) { ‘int touche ='random(4) ; nt duree = 106 + random(1500) ; int silence = random(500) ; chantATrouver[i][@] = touchi chantaTrouver[i][1] = duree; chantATrouver[i][2] = silence; if (debug) { Serial.print("{" Serial.print(touche) ; Serial.print(" , ")5 Serial.print(duree) ; Serial-print(" Serial-print (sil Serial-println(™ 19 80 Arduino - S'exercer au prototypage électronique Vous voyez ici 'usage de la variable debug pour afficher ou non des informations dans le port serie. Ainsi la fonction Logo () niaffiche le logo de démarrage que sila variable debug est vraie : void afficheLogo() { if (debug) { Serial-println(F(" Serial-printtn(F(" / Serial.printin(F("| Serial.printin(F(" Serial.printin(F(" Serial.println(F(" Serial.printin(F(" y } Ce message est du plus bel effet dans la fenétre de communication série. II pourrait étre assez consommateur en mémoire, ce qui ne correspond pas a lobjectif d'optimisation évoqué. Le microprocesseur ATmega328 au coeur de Arduino posséde trois types de mémoires ~ Lamémoire flash, qui héberge le programme compilé (32 Ko). ~ LaSRAM (Static Random Access Memory) dans laquelle évolvent les variables manipulées par le programme en cours d'exécution (2 Ko). ~ LIEEPROM, qui peut stocker des données persistantes a long terme {1 Ko). Sur d'autres modéles d'Arduino, la puce offre des espaces de stockage plus grands. La SRAM (ou mémoire vive) stocke par défaut toutes les variables utilisées, et notamment les messages texte transmis dans le port série, La macro F () permet de stocker la chaine de ca- ractéres en question dans la mémoire flash, avec le programme plutt que dans la mémoire vive. libérant ainsi dela place pour les autres variables. La boucle principale reprend la structure du précédent programme, avec deux ajouts notables... Une séquence de clignotement au début de chaque tour de jeu indique le nombre de notes du prochain morceau joue afin de prévenir le joueur de la longueur de la prochaine mélodie (et de rendre ainsi le jeu un peu moins difficile). for (int 4 = 0; i < tailleChant; i+) { ‘tone(HautParieur, 508); digitalurite(leds[o}, HIGH); detay (108); noTone(HautParleur) ; digitalwrite(leds{0], LOW) delay (300); 4# (debug) Serial.print("_"); (© btions EM Allright reserved Projet 2 - Jeu de mémorisation musicale 81 Enfin, le dernier ajout affecte fortement le déroulement du jeu : en cas de succés, un nouveau morceau plus long d'une note est tiré au sort (car a variable tai lLeChant est incrémentée avant lappel de la fonction compose ()). En cas déchec, rien n'est changé, donc le morceau précédemment diffusé sera réutilisé au prochain tour. Cest une Facon dimplémenter la notion de “niveau de jeu" et daméliorer grandement la dura- bilite du jeu. if (chantCorrect()) { } if (debug)Serial.printtn(" BRAVO 1” taillechant++; chante(victoire, 4); compose(tailleChant} ; else { if (debug) Serial.printtn(” chante(echec, 4)} Donmage Finalement, le code complet du jeu est le suivant Fichier : 83 compose_des.chansons byte byte byte byte byte byte byte boutor Leds Haut? clavi mode id_coy tai ns[4] = (3, 5, 7, 935 4} L2y fe & 5 jer[4] = (88, 122, 168, 225}; 6; pture = 0; echant = 45 boolean debug = trues typedef int chanson(}(3]; chanson chantAtrouver = { {0, 5H 300, 909, 600, 609, 600; 600, 600, 600, 600, 609, 160}, 109}, 100}, 1609}, 100}, 180}, 100}, 100}, 169} , 160} chanson decrescendo = { B, (2, ay {o, y 50, 50, 60, 608, 8}, 9}, oy 9} chanson crescendo = { {0, (1, 2, a, 50, 50, 60, 60, 9}, 8}, 9), }

You might also like