arduino pour les nuls poche, 2e édition (poche pour …...pour les nuls est une marque déposée de...
TRANSCRIPT
ArduinopourlesNuls(2eédition)Titredel’éditionoriginale:Arduino®ForDummies®PourlesNulsestunemarquedéposéedeWileyPublishing,Inc.ForDummiesestunemarquedéposéedeWileyPublishing,Inc.
CollectiondirigéeparJean-PierreCanoTraduction:DenisDuplanetStéphaneBontempsRévisionpourladeuxièmeédition:GastonDemittonMiseenpage:maged
EditionfrançaisepubliéeenaccordavecWileyPublishing,Inc.©ÉditionsFirst,undépartementd’Édi8,2017ÉditionsFirst,undépartementd’Édi812avenued’Italie75013ParisTél.:0144160900Fax:0144160901E-mail:[email protected]:www.editionsfirst.frISBN:978-2-412-02580-2ISBNnumérique:9782412029589Dépôtlégal:2etrimestre2017Cetteœuvreestprotégéepar ledroitd’auteuretstrictementréservéeà l’usageprivéduclient.Toutereproductionoudiffusionauprofitdetiers,àtitregratuitouonéreux,detoutoupartiedecetteœuvreeststrictement interditeetconstitueunecontrefaçonprévuepar lesarticlesL335-2etsuivantsduCodede lapropriété intellectuelle.L’éditeurseréserve ledroitdepoursuivretouteatteinteàsesdroitsdepropriétéintellectuelledevantlesjuridictionscivilesoupénales.
CelivrenumériqueaétéconvertiinitialementauformatEPUBparIsakowww.isako.comàpartirdel'éditionpapierdumêmeouvrage.
A
Introduction
rduinoestunoutil, unecommunautéetune façondepenserqui transformenotreregardsurlatechnologieetl’usagequenousenfaisons.Ilaravivél’intérêtpourl’électronique chez de nombreuses personnes et leur a permis de mieux la
comprendre,alorsqu’ellespouvaientpenserquel’électroniqueétaitpourellesrestéesurlesbancsdel’école.
Arduinoestunminusculecircuit impriméaupotentielgigantesque.Selonlamanièredont vous l’approchez, il peut être utilisé pour émettre un signal en codeMorse àl’aided’uneLEDoupourcontrôlertouteleslumièresd’unbâtiment.Sespossibilitésdépassent de loin tout ce que vous pourriez imaginer. Arduino, c’est aussi unenouvelleapprochepratiquedel’éducationàlatechnique,quiréduitlecoûtd’entréepourceuxquisouhaitentutiliserl’électroniquepourréaliserdepetitsprojetspuis,jel’espère,trouverl’enviedeselancerdansdesprojetsplusimportants.
Une communauté composée de toujours plus d’arduinistes a vu le jour – desutilisateursetdesdéveloppeursquiapprennentlesunsdesautresetquicontribuentàla philosophie Open source en partageant tous les détails de leurs projets. Cetteattitudedesarduinistesetdeceuxqui lesaidentest largementà l’originedusuccèsd’Arduino.
Arduinoestplusqu’un«kitd’initiation»;c’estunoutil.Unconcentrédetechnologiequi permet de comprendre et d’utiliser plus facilement les outils électroniquesd’aujourd’hui.
Si la perspective de découvrir puis de maîtriser les possibilités immense de latechnologie vous intéresse, ce livre se propose de vous accompagner dans vospremierspas.
Enroute!
ÀproposdecelivreCeci est un livre technique, mais ce n’est pas un livre réservé aux techniciens.Arduino a été conçu pour être utilisable par n’importe qui, qu’il soit technicien,créatif, habile ou simplement curieux. Tout ce dont vous avez besoin, c’estd’ouverture d’esprit ou d’un problème à résoudre. Vous découvrirez rapidementcommentArduinopeutvousêtreutile.
Arduino a ravivémon intérêt pour l’électronique etm’a donné accès à nombre dedébouchésprofessionnels.J’aiécritce livrepourpartagermonexpérience.Lorsqueje me suis rendu pour la première fois à un atelier Arduino, je ne savais pasprogrammeretjenepouvaisquevaguementmerappelerparquelleextrémitétenirunfer à souder (ne vous inquiétez pas, je parlerai de la soudure aussi).Actuellement,l’essentiel de mon travail consiste à concevoir et réaliser des installationsinteractives,desprototypes,etplusgénéralementàtrouverdenouvellesmanièresdejoueraveclatechnologieenm’appuyantsurArduino.
Je pense que c’est une excellente plate-forme qui réduit le coût d’entrée pourapprendrel’électroniqueetlaprogrammation.Ilpermetàdespersonnesquin’ontpaseutropdefibrescolairedeseplongerdanslesdomainesquilesintéressent,etdelesexplorerpareux-mêmes.
QuelquesfolleshypothèsesCelivreneprésupposerienentermesdeconnaissancestechniques.Arduinoestuneplate-forme facile à utiliser pour apprendre l’électronique et la programmation. Entantquetelle,elleestdestinéeàtous,quevoussoyezunconcepteur,unartisteouquevousnecherchiezqu’unpasse-temps.
C’est aussi une excellente plate-forme pour les gens qui sont déjà versés dans latechnique. Peut-être avez-vous déjà programmé ? Vous souhaitez que vos projetsprennent corps d’une manière ou d’une autre. Vous avez déjà travaillé avecl’électronique?VousvoudrezdanscecasdécouvrircedontArduinoestcapable.
Qui que vous soyez, vous verrez qu’Arduino a un grand potentiel.C’est à vous dedécidercequevoussouhaitezenfaire.
CelivredémarreauniveauleplusélémentairepourvouspermettredecommenceràutiliseretàcomprendreArduinosans réticences.De tempsàautredans le livre, jepeuxmeréféreràdeschosesplustechniques.Ilvousfaudra,commeentouteschoses,un peu plus de temps pour les comprendre. Partant des bases, je vous guideraiprogressivementpourconduireàdesactivitésplusélaborées.
Ce livre repose pour l’essentiel sur mon expérience de l’apprentissage et del’enseignement d’Arduino. Je me suis initié à Arduino à partir de rien, mais j’aitoujourstrouvéquelameilleuremanièred’apprendreétaitlapratique,enréalisantsespropresprojets.Laclé,c’estd’intégrerlesbasesquejeprésentedanscelivre,puisdes’appuyersurcesconnaissancesencherchantcomment lesmettreenœuvrepourrésoudre de nouveaux problèmes, pour créer des projets, ou tout simplement pourvousamuser.
CommentcelivreestorganiséArduinopour lesNulsestorganisépourvouspermettredesauterd’unendroitàunautre augrédevosbesoins.Sivous avezdéjàmanipuléArduino,vous souhaiterezsans doute sauter aux derniers chapitres,mais si vous avez oublié les bases, vousaurezintérêtàentamerlelivreparsondébut.
Premièrepartie:DécouvrirArduinoDans lapartie1, jeprésenteArduinoenpointant lesdiversescirconstancesquiontcréé un besoin pourArduino et qui en ont par la suite influencé le développement.J’entreensuiteplusendétaildansArduino,entantquedispositifphysique,maisaussien tant qu’environnement de développement, et je vous aide à télécharger votrepremierprogramme(appelécroquis).
Deuxièmepartie:EntréesetsortiesArduinoDans cette partie, vous découvrez comment réaliser un prototype en utilisant uneplatined’essaietquelquescomposantsafindepermettreàvotreArduinod’interagiraveclemonde.Enutilisantsimplementquelquescomposants,vouspouveztestertouteunevariétéd’applicationspourArduinoetconstruireunebasequiserviraàd’autresprojets. Les chapitres de cette partie traitent de toute une variété d’entrées et desorties,dontlalumière,lemouvementetleson.Vouspourrezcombinercestechniquespourréaliservospropresprojets.
Troisièmepartie:BâtirsurdesfondationsUnefoisquevousavezacquis lesbases,vousserezdémangépar l’envied’enfaireplus. Dans la partie 3, je présente quelques projets du monde réel et je montrecommentilsfonctionnent.Vousapprenezàréaliservotreproprecircuitimprimépourrendre votre projet moins fragile. Vous apprenez aussi à choisir le bon capteur etcomment écrire du code source pour ajuster ou modifier le comportement de voscircuits.
Quatrièmepartie:Libérerlepotentiel
devotreArduinoCette partie vous propose d’exploiter plus encore les possibilités de votre projetArduino. Vous apprenez à utiliser des cartes filles pour enrichir votre Arduino defonctionnalités spécifiques,àutiliserdumatérieletdes techniquespourdéveloppervotreprojet,àhacker(modifier)dumatérielexistant.VousdécouvrezaussicommentcommuniqueravecProcessing,leprojetjumeaud’Arduino,pourcombinermatérieletlogiciel.
Cinquièmepartie:ArduinoetleslogicielsSivousparvenezàcettepartie,c’estquevousaurezacquisunebonnecompréhensiondelamanièredontvouspouvezutiliserl’électroniqueetlematérieldansvosprojets.Danscettepartie, vous apprenezà combiner cette connaissancedumondephysiqueavec le monde du logiciel. Je vous présente quelques environnements deprogrammationOpensource,etplusparticulièrementProcessing,lecarnetdecroquisélectroniquequevouspouvezutiliserpourréaliserunvasteensembled’applicationsafind’améliorervotreprojetArduino.
LesicônesutiliséesdanscelivreArduino pour les Nuls utilise des icônes pour attirer votre attention sur certainsparagraphes:
Cette icône signale une informationutile. Il peut s’agir d’une information techniquepourvousaideràterminerunprojetplusfacilement,oud’uneréponseàunproblèmecommunémentrencontré.
LecircuitArduinosn’etpasdangereuxensoi ;enfait, ilestmêmeparticulièrementsécurisé. Toutefois, s’il est utilisé dans un circuit sans avoir fait preuve d’assezd’attentionetdesoin,ilpeutcauserdesdommagesaucircuit,àvotreordinateurouàunappareilquiyestconnecté.LorsquevousrencontrezuneicôneAttention,veillezàprendrebonnenotedecedontilestquestion.
Il faut souvent connaître certains points précis avant d’entreprendre une tâche.J’utilisecesicônesenguidederappel.
Quelques informations sont plus techniques que les autres, et ne sont donc pasdestinéesàtous.LebonheuravecArduino,c’estquevousn’avezpasàcomprendretous lesdétails techniquessur-le-champ.Vouspouvez faire l’impassesurcequiestindiqué à côtéde cette icône si c’est trop compliquépourvous sur l’instant ; vouspourrezyrevenirlorsquevousvoussentirezprêt.
LesfichiersdesexemplesLes exercices d’application sont basés sur des programmes qui sont compilés survotre ordinateur puis transférés (téléversés) vers votre carte Arduino. Prèsde 40 programmes sont étudiés. Ils sont presque tous disponibles dès le départlorsquevousinstallezl’atelierArduino.Enrevanche,ilssontenanglais.Pourplusdeconfort,lareproductiondestextessourcesdanslelivretraduittouscescommentaires,maispaslesnomsdesvariables.
Si,suiteàunenouvelleversiondel’atelierArduinooudeProcessing,unprogrammemériteuneamélioration,lesfichiersappropriésserontmisàdispositionsurlesitedel’éditeurdanslasectionTéléchargements.
Paroùcommencer?Sivousnesavezpastropparoùcommencer,jevoussuggèredepartirdudébut.Versla fin du Chapitre 2, vous aurez assimilé les bases d’Arduino, et vous saurez oùacquérirunkitpourcontinuervotreapprentissage.
Si vous avez déjà utilisé Arduino, vous souhaiterez sans doute vous rendre auChapitre4pour réviservosbases,oualorsvous rendredirectementà lapartiequivousintéresse.
IDécouvrirArduino
DANSCETTEPARTIE
Maisqu’est-cequ’unArduino,exactement?Dansleschapitres
quisuivent,vousdécouvrireztoutsurcepetitcircuitimprimé
bleuetblanc,commentilaétécrééetàquoiilpeutbienservir.
Aprèsunebrèveintroduction,jevousmontreraitoutesles
chosesdontvousavezbesoinpourcommenceravecArduinoet
oùvouspouvezlesacheter.Ensuite,vousapprendrezcomment
mettreenœuvrelepouvoirstupéfiantd’uneLED,enlafaisant
clignotersurcommandeàl’aidedequelqueslignesdecode
source.
A
Chapitre1Qu’est-cequ’Arduino,etd’oùvient-il?
DANSCECHAPITRE
» DécouvrirArduino
» Apprendred’oùvientArduinoetàquoitientsonsuccès
» Uneintroductionauxprincipesdebase
rduinoestcomposédematérieletdelogiciel.
La carte Arduino est un circuit imprimé spécifiquement conçu pour héberger unmicrocontrôleuretdonneraccèsà toutessesentréesetsorties.Ellecomprendaussiquelques autres composants électroniques qui permettent de faire fonctionner lemicrocontrôleuroud’enétendrelesfonctionnalités.
Unmicrocontrôleurestunpetitordinateurconfinédansununiquecircuitintégré(unepuce). Il constitue un excellent moyen pour programmer et pour contrôler deséquipements électroniques. Il existe une grande variété de telles cartes àmicrocontrôleur,certainesdesplusutiliséessont laplatineWiring, lePIC, leBasicStampetbiensûrArduino.
Vous écrivezducode sourcedans l’environnementdedéveloppementArduinopourdireaumicrocontrôleurcequevoussouhaitezqu’il fasse.Parexemple,enécrivantune seule ligne de code (une instruction), vous pouvez faire clignoter une LED. Sivousconnectezunbouton-poussoir,vouspouvezajouteruneautrelignedecodepourque laLED s’allume quand le bouton est enfoncé.Avec d’autres instructions, vouspouvezfaireensortequelaLEDneclignotequelorsqueleboutonestenfoncé.Ainsi,vouspouvezfacilementamenerlesystèmeàsecomporterd’unecertainemanière,cequiseraitdifficileàfairesansmicrocontrôleur.
Comme un ordinateur de bureau, Arduino peut assurer une multitude de fonctions,maisilnesertpasàgrand-chosetoutseul.Ilabesoinquequelquechosesoitconnectésuraumoinsunedesesentréeset/oudesessortiespourêtreutile.Commeleclavier
etlasourisd’unordinateur,cescanauxdecommunicationpermettentàl’Arduinodesentirdesobjetsdumonderéeletd’agirdessus.
Avant de continuer, il peut être utile de découvrir les grandes lignes de l’histoired’Arduino.
D’oùvientArduino?ArduinoacommencéenItalie,chezInteractionDesignInstituteIvera(IDII),uneécolespécialiséeendesignquisefocalisesurlamanièredontnousinteragissonsaveclesproduits, les systèmes et les environnements numériques, et comment ces derniersnousinfluencentenretour.
Letermededesignd’interactionaétéélaboréparBillVerplanketBillMoggridgevers lemilieu des années 80. Le dessin deVerkplank repris en Figure 1-1 illustreparfaitementleprincipedebasedudesignd’interaction:sivousfaitesquelquechose,vousressentezunchangement,etc’estàpartirdelàquevouspouvezsavoirquelquechosedumondequivousentoure.
Quoiqu’il s’agisse d’un principe général, le design d’interaction se réfère plusspécifiquement à la manière dont nous interagissons avec des ordinateursconventionnelsàl’aidedepériphériques,telsquelessouris,lesclaviersetlesécranstactiles, pour naviguer dans un environnement numérique dont une représentationgraphiqueestaffichéeàl’écran.
Il existe une autre approche, qu’on désigne par informatique concrète (physicalcomputing)etquiconsisteàétendrelaportéedesprogrammes,logicielsousystèmesinformatiques. Grâce à de l’électronique, les ordinateurs peuvent capter desinformationsprovenantdumondephysique,etêtreainsicapablesd’agirenretoursurcedernier.
FIGURE1-1Leprincipedudesignd’interaction,illustréparBillVerplank.
Ces deux domaines – le design d’interaction et l’informatique concrète – sontnouveaux. Ils requièrent donc de pouvoir créer des prototypes pour comprendre etexplorer les interactions. Or, produire des prototypes représentait une difficultéconsidérablepourdesétudiantsendesignquin’étaientpastechniciens,nirichissimes.
En2001,CaseyReas etBengaminFry ont commencé un projet nomméProcessing.L’objectifétaitdepermettreàdesnon-programmeursdesemettreàlaprogrammationenpermettantfacilementetrapidementdepro
duire des représentations à l’écran.Leprojet permettrait à l’utilisateur de disposerd’un carnet de croquis numériques (des programmes) pour tester des idées au prixd’uninvestissementtemporelminimal.Leprojetaensuiteinspiréunprojetsimilairepourtesterdesidéesdanslemonderéel.
S’appuyant sur lesmêmesbasesqueProcessing,HernandoBarraganacommencéàdévelopperunecarteàmicrocontrôleuren2004,qu’ilanomméeWiring.Cettecarteétaitleprédécesseurd’Arduino.
CommeProcessing,leprojetWiringcherchaitàimpliquerdesartistes,desdesignersetd’autrespersonnesnonverséesdanslatechnique.Wiringdésiraitlesencourageràse lancer dans l’électronique plutôt que dans la programmation. La carte Wiring(représentéesurlaFigure1-2)étaitmoinsonéreusequecertainsmicrocontrôleurstelsque le PIC ou leBasic Stamp,mais elle constituait toujours un investissement nonnégligeablepourdesétudiants.
FIGURE1-2UnedespremièrescartesWiring.
C’est ainsi qu’en 2005, le projetArduino a été lancé pour fournir unmatériel bonmarchéet facileàutiliseràdestinationdesétudiantsendesignd’interaction.Onditque Massimo Banzi et David Cuartielles nommèrent leur projet d’après Arduind’Ivera,unroi italien,maisdessourcesfiablesm’ontrapportéqueceserait lenomd’unbarprochedeleuruniversité.
LeprojetArduinoapuisédansnombredesexpériencesdeWiringetdeProcessing.Par exemple, l’influence de Processing se fait sentir dans l’interface graphiqueutilisée pour le logiciel de création des croquis Arduino. Cette interface futinitialement«empruntée»àProcessing;mêmesielleestsimilaire,elleadepuisétépersonnalisée pour Arduino. Je traite plus en détail de l’interface d’Arduino auChapitre4.
ArduinoaaussiconservélaterminologiedeProcessingendésignantsesprogrammessourcesdescroquis (dessketches).CommeProcessing,Arduino est fourni avec uncarnetdecroquisprédéfinispourconcevoirettesterrapidementlespremiersprojets.Toutaulongdecelivre,jeréutilisedenombreuxcroquisd’exemplesquipermettentàvotreArduinod’accomplirunegrandediversitédetâches.Enutilisantetenmodifiantles croquis de ce livre, vous pourrez rapidement comprendre comment ilsfonctionnent, et vous enchaînerez sur la création des vôtres en un rien de temps.Chaquecroquisestsuivid’uneexplicationligneparlignedesonfonctionnementpourêtrecertaindenerienlaisserdansl’ombre.
LacarteArduino,représentéesurlaFigure1-3,aétéconçuepourêtreplusrobusteetmieux pardonner les erreurs queWiring et d’autresmicrocontrôleurs antérieurs. Eneffet, il n’était pas rare que les étudiants et les professionnels, surtout quand ilsvenaient du design ou de la création graphique, détruisent lemicrocontrôleur aprèsquelques minutes d’utilisation, simplement en faisant une erreur de câblage. Cettefragilité était un vrai problème, non seulement du fait du coût engendré,mais aussipourlesuccèsdelacarteendehorsdescénaclesdetechniciens.
SurlacarteArduino,lemicrocontrôleurn’estpassoudé,maisenfichésurunsupport.Sivousgrillezleprocesseur,vouspouvezleremplaceraulieudedevoirracheterunecarte.
Uneautredifférence importanteentreArduinoet lesautrescartesàmicrocontrôleurest leprix.En2006,unautremicrocontrôleurpopulaire, leBasicStamp,necoûtaitpas loin de quatre fois plus qu’un Arduino. De nos jours, une carteWiring coûtetoujoursprèsdudoubled’unArduino.
FIGURE1-3LacartesérieArduinooriginelle.
Àl’occasiond’undemespremiersateliersArduino,onm’arapportéqueleprixavaitétéélaboréentenantcomptedesmoyensdesétudiants.Leprixd’unbonrepasavecunverre de vin avoisinait alors les 30 euros, si bien que si vous deviez réaliser unprojet,vouspouviezvouspriverdecerepasetfinancervotreprojet.
De nos jours, l’éventail des cartes Arduino disponibles est bien plus vastequ’en2006.LeChapitre2présentequelques-unesdescartesArduinoetcompatiblesArduinolesplusutiles,envousprécisantenquoiellesdiffèrent.LeChapitre13vousdittoutsuruntypedecircuitparticulier,nommécartefille,quipermetdedotervotreArduino de capacités complémentaires, parfois phénoménales, comme par exemplepour le transformer en récepteurGPS, en compteurGeiger ou encore en téléphonemobile.
ApprendreenfaisantBien des gens parviennent à utiliser l’électronique pour atteindre des objectifs trèsdiverssansjamaisrentrerdanslesdétailsdusujet.Voiciquelquesécolesdepenséequiontencouragé toutunchacunà se lancerdans l’électroniquesansavoir reçudeformationparticulière.
LepatchingPatchingn’estpasseulementunebourgadedesÉtats-Unis;c’estaussiunetechniquepour expérimenter des systèmes. L’exemple le plus connu de patching est l’ancientableaudecommutationtéléphonique.Pourquel’opérateurvouspermettedejoindrevotrecorrespondant,ildevaitbrancherphysiquementuncâbledebrassage.
Cebrassagedecâblesestlamêmetechniquequiétaitutiliséepourcréerdessonsauxdébutsdelamusiqueélectronique,commeaveclessynthétiseursanalogiquesMoog.Lorsqu’un instrument électronique génère un son, il génère en fait du courant.Différentscomposantsprésentsdansl’instrumentmanipulentcecourantavantqu’ilnesoitconvertienunsonaudible.LesynthétiseurMoogpermetdemodifier lecheminquelecourantemprunteenl’envoyantversdifférentscomposantspourluiappliquerdeseffets.
Commeilexisteunnombreénormedecombinaisons,lemusicienprocèdelargementparessaiseterreurs.Toutefois,l’interfacesimplifiéeluipermetd’yarrivertrèsvite,sansavoiràbeaucoupsepréparer.
LehackingHackingestuntermetrèsutilisépourfaireréférenceauxagissementssubversifssurInternet.Maisplusgénéralement,letermedésignel’explorationdesystèmesafind’entirerlemeilleurpartioudelesdétournerpourlesadapteràdenouveauxbesoins.
Entendu ainsi, le hacking est possible tant avec lematériel qu’avec le logiciel.Unexcellentexempledehackingmatérielestlerecyclaged’unclavier.Disonsquevoussouhaitezutiliserungrosboutonrougepourfairedéfilerdesimages.Laplupartdes
logicielsutilisentdesraccourcisclavier,et laplupartdesvisionneusesdePDFfontdéfilerlespagesquandl’utilisateurpresselatoucheEspace.Sivotrebesoinconsisteà faire défiler des images sur une borne à accès public, vous pourriez préférer unclavierréduitàlatoucheEspace.Commentfaire?
Il s’avère que les claviers ont été tellement perfectionnés qu’on y trouve un petitcircuitimprimé,unpeupluspetitqu’unecartedecrédit(voirFigure1-4).Cecircuitdispose de nombreux points de contact qui sont activés lorsque vous pressez lestouches. Si vous pouvez trouver la bonne combinaison, vous pourrez connecterquelques fils aux points de contact d’un côté, et à un bouton-poussoir de l’autre.Chaque foisquevouspresserez lebouton, ce seraalors commesivouspressiez latoucheEspace.
FIGURE1-4Lecircuitimpriméd’unclavier,prêtàêtrehacké.
Cette technique est idéale pour atteindre les résultats que vous souhaitez encontournant lesméandres dumatériel. Dans le chapitre bonus, vous en apprendrezplussurlesjoiesduhacking,etcommentvouspouvezrelierdumatérielhackéàvotreprojetArduinoafindecontrôlerfacilementdespériphériquessansfil,desappareilsphotoetmêmedesordinateurs.
Ledétournementdecircuits
Le détournement de circuits choquera les partisans de l’éducation traditionnelle etravira ceux de l’expérimentation spontanée. Les jouets constituent la nourriture debasedesauteursdedétournements,maisl’expériencepeutêtreréaliséesurn’importequelenginàbased’électronique.
Enouvrantunjouetouunenginpouraccéderàsoncircuit,vouspouvezmodifierlechemindu courant pour affecter son comportement.Cette technique est similaire aupatching,maiselleestbienplusimprévisible.Toutefois,quandvousaveztrouvédescombinaisons,vouspouvezaussiajouterouremplacerdescomposants, telsquedesrésistances ou des interrupteurs, pour permettre à l’utilisateur de mieux contrôlerl’objet.
Le détournement de circuits concerne par exemple le domaine du son. L’instrumentunefoisterminédevientunsynthétiseurouuneboîteàrythmesrudimentaire.
Deux des engins les plus populaires sont Speak & Spell (voir Figure 1-5) et laGameboy de Nintendo. Selon leurs termes, des musiciens tels que Modified ToyOrchestra (modifiedtoyorchestra.com) « explorent le potentiel caché et lesurplusdevaleurlatentequirésidedanslatechnologieredondante.»Pensez-ydoncàdeuxfoisavantdevendrevosvieuxjouetssursurleWeb!
L’électroniqueQuoiqu’ilexistedenombreusesmanièresdedétournerlatechnologie,vousfinirezparvouloirplusdetout:plusdeprécision,plusdecomplexité,plusdecontrôle.
FIGURE1-5UnjouetSpeak&SpelldétournéparModifiedToyOrchestra.
Si vous avez découvert l’électronique à l’école, on vous a sans doute appris àconstruiredescircuitsenutilisantdescomposantsspécifiques.Cescircuitssontbaséssurlesseulespropriétésélectriquesdescomposantsetdoiventêtrecalculésendétailpours’assurerquelabonnequantitédecourantpasseparlesbonscomposants.
C’estlegenredecircuitsquevoustrouvezsousformedekitschezlesrevendeursdecomposants électroniques pour effectuer une tâche unique, commeunminuteur pourcuireunœuf,ouunealarmequisonnequandquelqu’unouvrelaboîteàbiscuits.Ceskits dédiés font parfaitement leur travail,mais ils nepeuvent pas faire grand-chosed’autre.
C’est là qu’interviennent les microcontrôleurs. Ce sont de minuscules ordinateurs.Utilisés avec des composants analogiques, ils permettent à cette circuiterie de secomporter de manière bien plus sophistiquée et polyvalente. Ils peuvent êtrereprogramméspoureffectuerdifférentesfonctionsaubesoin.VotreArduinoestconçuautourd’undecesmicrocontrôleurs,etilvousaideàentirerlemeilleurparti.Dansle Chapitre 2, vous pourrez observer de près l’Arduino Uno pour comprendrecommentilestconçuetcedontilestcapable.
Lemicrocontrôleurestlecerveaudevotresystème,maisilabesoindedonnéespoursentir des choses ou pour agir dessus. Pour ce faire, il utilise des entrées et des
sorties.
LesentréesLesentréessontlesorganesdessensdevotreArduino.Ellesl’informentsurcequisepassedanslemonderéel.Soussaformelaplusélémentaire,uneentréepeutêtreuninterrupteur, comme celui qui vous permet d’allumer et d’éteindre la lumière chezvous.Àl’autreboutduspectredespossibles,cepeutêtreungyroscope,quiindiqueàl’Arduino la direction à laquelle il fait face dans les trois dimensions. Vous enapprendrez plus sur les entrées de base dans leChapitre7, et vous découvrirez lavariétédescapteursetcommentlesutiliserdansleChapitre12.
LessortiesLes sorties permettent à votre Arduino d’agir sur le monde réel d’unemanière oud’uneautre.Unesortiepeutêtretrèssubtileetdiscrète,àlamanièred’untéléphonequi vibre, mais ce peut être tout aussi bien un affichage géant sur la façade d’unbâtimentqu’onpourravoiràdeskilomètresàlaronde.Lepremiercroquisdecelivrevous permet de faire clignoter une LED (Chapitre 4). De là, vous apprendrez àcontrôler un moteur (Chapitre 8), et même un grand nombre de sorties(Chapitres 14 et 15) pour découvrir la variété des sorties dont vous pouvez dotervotreprojetArduino.
L’espritOpensourceLeslogicielsOpensource,enparticulierProcessing,onteuuneénormeinfluencesurle développement d’Arduino. Dans le monde du logiciel, l’Open source est unephilosophie consistant à partager les détails d’un programme et à encourager lesautresàl’utiliser,àlemodifieretàleredistribuercommeilslesouhaitent.
Tout comme le logiciel Processing le logiciel et le matériel Arduino sont Opensource.Celasignifiequece logicieletcematérielpeuventêtre librementadaptésàvosbesoins.C’estsansdoutedufaitdecetteouverturequ’onretrouvel’espritdelacommunauté Open source dans les forums consacrés à Arduino. Sur les forumsArduinoofficiels(www.arduino.cc/forum/)etsurbiend’autresdanslemondeentier,lesgenspartagentavecleurscollèguesleurcodesource,leursprojetsetleursquestions. Ce partage permet à toutes sortes de gens, dont des ingénieursexpérimentés, des développeurs talentueux, des designers pratiques, et des artistesinnovantsd’apporterleurexpertiseàdesnovicescompletsdansl’unoul’autredecesdomaines. Il permet aussi de cerner les centres d’intérêt des gens, ce qui amèneparfois à des améliorationsou àdes extensionsdu logiciel oudumatérielArduino
officiels. Le site Web d’Arduino comprend une zone nommée Playground(www.playground.arduino.cc) où les gens peuvent télécharger leur codepourquelacommunautépuissel’utiliser,lepartageretlemodifier.
Cetypedephilosophieapousséunepetitecommunautéàdiffuserdesconnaissancessurlesforums,lesblogsetlessitesWeb,créantainsiunvasteensemblederessourcesdanslequellesnouveauxarduinistespeuventlibrementpuiser.
C’estunétrangeparadoxe:endépitde lanatureOpensourced’Arduino,onrelèveunegrandeloyautéà lamarqueArduino–à telpointqu’ilexisteuneconventiondenommage Arduino consistant à rajouter -duino ou -ino au nom des cartes et desaccessoires.
N.d.T. : En Europe, les créateurs d’Arduino commercialisent dorénavant leursproprescartesofficiellessontlenomGenuino,carlamarqueArduinoaétédéposéeparl’und’euxpoursonproprecompte.
D
Chapitre2PremierscontactsavecvotreArduinoUno
DANSCECHAPITRE
» Découvrirl’ArduinoUnoR3
» LesautrescartesdelafamilleArduino
» OùacheteruneArduino
» UnbonkitArduinopourdébuter
» Aménagersonespacedetravail
ansleChapitre1,j’aidécritArduinoentermesgénéraux.Ilestmaintenanttempsd’y voir de plus près. Le nomArduino désigne un ensemble de choses. Il peuts’agir de la carte Arduino, dumatériel, de l’environnement Arduino – c’est-à-
dire,unlogicielquifonctionnesurvotreordinateur–etfinalement,d’Arduinoentantquesujet,commeceluidecelivre:commentlematérieletlelogicielsontcombinésenmobilisantunsavoir-faireetdesconnaissancesenélectroniquepourcréerunkitutilisableentoutesituation.
Cechapitreestrelativementcourt.Ilvousoffreunaperçudecequevousdevezsavoirpour commencer à utiliser Arduino. Peut-être avez-vous envie de vous plongerrapidementdanslesujet.Danscesconditions,contentez-vousdesurvolercechapitre,vousarrêtantsurlessujetsquevousnemaîtrisezpas,etréférez-vous-yultérieurementaugrédevosbesoins.
Dans ce chapitre, vousdécouvrez les composants utilisés sur la carteArduinoUnoR3, laquelle constitue le point de départ pour la plupart des arduinistes. Vverrezensuite les autres cartesArduino disponibles, en quoi elles diffèrent, et quels sontleursusages.Cechapitrepasseenrevueunesériedefournisseursquipeuventvousprocurer tous les éléments dont vous avez besoin. Il examine aussi les kits dedémarrage qui sont idéaux pour le débutant et pour accompagner cette lecture.Unefoisquevousdisposezd’unkit,vousn’avezplusbesoinqued’unespacedetravailpourdémarrer.
Découvrirl’ArduinoUnoR3Iln’existepasdemodèleuniquedecarteArduino;ontrouveplusieursvariationssurArduino, chacune étant conçue pour convenir à différents usages. Choisir la bonnecarten’estpastoujoursaisé,carlenombredescartess’accroîtsanscesse.Toutefois,une carte peut être considérée comme la pierre angulaire de toute aventure dans lemonde Arduino ; c’est celle avec laquelle la plupart des gens débutent et qui estadaptéeàlaplupartdesusages.C’estl’Arduino(ouGenuino)Uno.
La version la plus récente reste pour l’heure l’Arduino Uno R3 (sortie en 2011).Considérez-la comme la carte Arduino de base. C’est un bonmatériel, fiable, quiconviendra à de nombreux projets. Si vous débutez, c’est la carte qu’il vous faut(Figures2-1et2-2).
Unoestlemotitalienpourlechiffreun,quicorrespondiciàlaversion1.0dulogicielArduino.Lesprédécesseurs ont pris toute unevariété denoms, commeSerial,NG,Diecimila(10000enitalien,poursignalerque10000cartesavaientétévendues)etDuemilanove(2009enitalien,ladatedesortiedecettecarte).Unoadébarquépourremettre un peu d’ordre dans la dénomination des cartes. R3 fait référence à larévision des capacités de la carte, qui correspond à un ensemble demises à jour,d’améliorations et de correctifs.Dans le cas présent, il s’agit doncde la troisièmerévision.
Lacartecomporte,outrelemicrocontrôleur,uncertainnombredepetitscomposants,décritsaufildecechapitre.
FIGURE2-1Lafacecomposantsd’uneArduinoUnoR3.
FIGURE2-2Lafacecircuitd’uneArduinoUnoR3.
Lecerveau:lemicrocontrôleurATmega328Vouspouvezvousreprésenter lemicrocontrôleurcommele«cerveau»de lacarte.Dans l’ArduinoUno,c’estunATmega328, fabriquéparAtmel.C’est legroscircuitintégré noir qui se trouve non loin du centre de la carte. On le désigne aussi parcircuit intégré ou puce. C’est le seul composant non soudé ; il est placé sur unsupport.Sivousleretiriez(délicatement),ilseraittelquemontréenFigure2-3.
FIGURE2-3UnmicrocontrôleurATmega328toutseul.
Cecircuitseretrouvesousplusieursformatsphysiques,appeléspackages.Celuidel’ArduinoUnoR3estunpackagePTH,oùlescomposantssontmisencontactaveclacarteenglissantleursbrochesdanslestrousd’unsupport.Unevarianteestl’ArduinoUnoR3SMD,où lesbrochesde lapucesontsoudéessur lacarte.UncircuitSMD(montage en surface) est bien plus petit,mais il ne peut pas être changé comme lePTH. À cela près, du moment que le nom du circuit est le même, il fonctionne àl’identique ; seules lesapparencesdiffèrent.Vouspourrezvoirunautreexempledecircuit dans le Chapitre 14, lorsque vous en apprendrez plus sur l’ArduinoMega2560.
LesconnecteursHELe support du microcontrôleur permet de relier toutes les broches du circuitATmega328àdesconnecteurssoudéssur lesbordsde lacarteet libelléspourêtrefacilesd’utilisation.CesontlessupportsnoirsquisetrouventdoncsurlescôtésdelacarteArduino.Ilssontrépartisentroisgroupesprincipaux:lesbrochesnumériques,lesbrochesdesentréesanalogiquesetlesbrochesd’alimentation.
Toutescesbrochesvéhiculentuncourant,quipeut êtreenvoyéen sortieou reçuenentrée.Pourquoi cesbroches sont-elles importantes?Ellespermettentdeconnecterde la circuiterie supplémentaire à la carte rapidement et facilement, ce qui est trèspratique lorsque vous fabriquez un prototype avec une platine d’essai (décrite auchapitre7).Deplus, elles permettent d’enficher une carte fille additionnelle par le
dessusdevotrecarteArduino(voir leChapitre13pourplusd’informationssur lescartesfilles).
Lemêmeprocessusfondésurl’émissionetlaréceptiondesignauxseretrouvedanslesordinateursmodernes,maiscommeilssontbienplussophistiquésqu’unArduino,ilestdifficilederelierdirectementunordinateurquiesthabituéàtraiterdessignauxnumériques (des 0 et des 1) à un circuit qui traite des signaux analogiques (destensionsallantde0Và5Vdanslecasdel’ATmega328).
L’Arduino(reportez-vousaucroquisde laFigure2-4)est trèsparticulier,car il estcapable d’interpréter ces signaux électriques et de les convertir en signauxnumériquesqueleprogrammepeutcomprendre–etinversement.Ilvouspermetaussid’écrireunprogrammeenutilisantunlogicielsurunordinateurconventionnel,lequelprogrammeseraconvertioucompiléenutilisant l’environnementdedéveloppement(EDI) Arduino pour générer des signaux électriques que votre circuit pourracomprendre.
Encomblantcetécartentrenumériqueetanalogique,ilestpossibledebé-néficierdesavantagesd’unordinateurconventionnel–facilitéd’utilisation,interfaceergonomiqueetcode facileàcomprendrepourunhumain–pourcontrôlerunegrandevariétédecircuits électroniques, et leur faire adopter des comportements complexes assezaisément.
FIGURE2-4UnArduinoUnodonttouslesélémentsimportantssontlibellés.
Lesbrochesnumériques
Vousutilisezlesbrochesnumériques,quisetrouventlelongduhautdelacartesurlaFigure2-1précédente,pourenvoyeretrecevoirdessignauxnumériques.Numériquesignifie que le signal ne possède que l’un des deux états haut ou bas. En termesélectriques, cela signifie une tension de 0 volts ou de 5 volts, sans tensionintermédiaire.
LesbrochesanalogiquesLes broches analogiques se trouvent en bas de la carte sur la Figure 2-1. Ellesserventàrecevoirdesvaleursanalogiques.Unevaleurestditeanalogiquelorsqu’ellepeut prendre une valeur parmi toutes celles d’une plage prédéfinie. Dans le casprésent,laplagevade0à5volts,etlavaleurpeutsesituern’importeoùentrelesdeuxbornes:0,1volt,1,2volt,4,9volt,etc.
Etlessortiesanalogiques?Lesplusattentifsd’entrevousaurontremarquéqu’ilnesemblepasyavoirdebrochesde sortie analogique. En fait, il y en a, mais elles sont simulées par les brochesnumériques signalées en tant que PWM à l’aide du symbole « ~ » . PWM estl’abréviationdePulseWithModulation (Modulation de Largeur d’Impulsion), unetechniquequevouspouvezutiliserpoursimulerunesortieanalogiqueavecunesortienumérique. J’explique commentPWMfonctionnedans leChapitre7. Le symbole ~apparaît à côtédesbroches3, 5, 6, 9, 10 et 11 ; vousdisposezdoncde6brochescapablesd’émettreunemodulationPWM.
Lesbrochesd’alimentationLes broches d’alimentation servent à distribuer de l’énergie aux circuits et auxentréesetsorties.
LabrocheVin,quiestl’abréviationdeVoltagein(enfrançais,tensiond’entrée),peutêtreutiliséecommesourcedecourantéquivalenteàcelleutiliséepar leconnecteurd’alimentation (par exemple, 12 V). Vous pouvez aussi utiliser cette broche pouralimenterl’Arduinodepuisuneautresource.
LestroisbrochesmarquéesGND(ground,masse)sontcellesdemasse(oudeterre),essentiellespourfermerlecircuitdel’énergie.Ilyadeuxbrochesdemasseenbas,prèsdesbrochesanalogiques,etunetroisièmeenhautàcôtédelabroche13.Toutesces broches sont reliées pour partager la même masse. Vous pouvez utiliser labroche5Vpouralimenterlescomposantsoulescircuitsen5volts.
Vousdisposezenfind’unebroche3,3Vpouralimenterlescomposantsetlescircuitsaveccettetensioninférieurede3,3volts.
LeconnecteurUSBPour indiquer au microcontrôleur de l’Arduino ce qu’il doit faire, vous devez luienvoyerunprogramme.Surl’Uno,voustransmettez(téléversez)voslesprogrammesvia la connexionUSB.Ce connecteurmétallique est un portUSBque vous pouvezrelieràuncâbleUSBA-B,lemêmequeceluiutiliséparvotreimprimanteouvotrescanner.L’ArduinoutiliseleportUSBpourlestransfertsdedonnées,maisaussipoursaproprealimentationenénergie,carilconsommetrèspeudecourant.LeportUSBconvientparfaitementpourréaliserdesapplicationsquiconsommentpeudecourant.
Lejackd’alimentationÀ côté du connecteur USB, vous trouvez un autre connecteur ; celui-là sert à unealimentation externe pour répondre à des besoins de puissance qui dépassent lespossibilitésduportUSB.VousyreliezunadaptateurAC-DC(semblableàundeceuxutiliséspouralimenterlesproduitsélectroniquesgrandpublic),unebatterieoumêmeunpanneausolaire.
Leconnecteurestdutypejackde2,1mmavecpositifaucentre.Lejackaunepartieexterne et une partie interne, et la partie interne doit être reliée au pôle positif del’alimentation.Vousdevriezpouvoirtrouvercegenredepriseparmilesconnecteursstandarddelaplupartdesboîtiersd’alimentation;autrement,vouspouvezacheterleconnecteuretlebranchervous-mêmeviadesfils.
Si vous connectez une alimentation dans le sens inverse (négatif au centre), vousproduirez ce qu’on appelle une « inversion de polarité » . L’Arduino Uno R3 estprévupourrésisteràcegenredebourde,maissescomposantsdeprotectionpeuventfondrependantqu’ils tententdeprotéger lacartesivousenvoyeztropdecourantetpreneztropdetempsàréagir!SivousinversezlapolaritésurlesbrochesVin,5Vou3,3V,vousnebénéficiezpasdelaprotectionetdétruisezpresqueinstantanémentplusieurspartiesdevotrecarte,ainsiqueleprocesseurATmega328.
LatensionrecommandéepourlacarteUnoR3estcompriseentre7et12V.Sivousfournisseztroppeudecourant,votrecarterisquedenepasfonctionnercorrectement.
LesLEDLa carte Uno dispose de quatre diodes émettant de la lumière (LED, pour Light-EmittingDiode)nomméesL,RX,TXetON.UneLEDestuncomposantquiproduitdelalumièrequandilestparcouruparuncourant.
On trouve desLEDde toutes formes et de toutes tailles dans presque toutmatérielélectroniquedegrandeconsommation,dutémoindeveilledutéléviseuràvotrelave-linge. Et les LED envahissent dorénavant nos routes. C’est un composant du futur.
Nousenferonsampleusagedanslesexemplesdecelivre.LesquatreLEDsoudéessurlecircuitsonttoutesutiliséespourindiquerl’activitédevotrecarte,commesuit:
» ONestverteetsignifiequevotreArduinoestalimenté.
» RXetTXnes’allumentquelorsquedesdonnéessontreçuesou
émisesparlacarte.
» LestuneLEDparticulière.Elleestdirectementconnectéeàla
broche13etpermetdeprocéderàdestestsetdesmontages
simplessansvousobligeràajouteraucircuituneLEDexternesurla
brochenumérique13.
Si votreArduino est branché,mais quevous ne voyez rien s’allumer, vous devriezsansdoutevérifierceci:
» LecâbleUSBestbienbranché.
» LeportUSBdel’ordinateurfonctionne–essayezdebrancherun
autrematériel.
» Lecâbleestenbonétat–essayezunautrecâble,sipossible.
Siaucunedecessolutionsnefaits’illuminerlesLED,ilyasansdouteunproblèmeavecvotreArduino.VotrepremierréflexedevraitêtredecherchersurInternetetdansles forums du site Arduino (http://forum.arduino.cc). Si vous n’arriveztoujours pas à vous sortir d’affaire, demandez au vendeur de vous remplacerl’Arduino.
LeboutonResetLacarteUnodisposeenfind’unboutonàcôtéduconnecteurUSB.C’estleboutonderéinitialisation(RESET).Il réinitialise l’Arduinooul’arrêtecomplètement lorsqu’ilestmaintenuappuyéuncertaintemps.VousparvenezaumêmerésultatenreliantparunstraplabrochedubasmarquéeResetàlamasse,unedesdeuxbrochesGNDplusàdroitedanslamêmerangée.Lacartecontientbiend’autrescomposants,quiassurenttousdesfonctions importantes,maisceuxquiviennentd’êtredécritssontceuxqu’ilvousimportedeconnaîtreactuellement.
D’autrescartesArduino
LasectionprécédentedécritlacarteArduinoUnostandard,maisilenexisted’autres,conçues pour répondre à différents besoins. Quelques-unes proposent plus defonctionnalités, d’autres sont minimalistes et très compactes, mais elles adoptentgénéralementundesignsimilaireàceluidel’ArduinoUnoR3.Pourcetteraison,tousles exemples de ce livre sont basés sur l’Uno R3 (l’Arduino Mega 2560 estbrièvementmentionnéauChapitre14).Lesversionsprécédentesde l’Unodevraientfonctionnersansmodifications,maissivousutilisezunecarteplusancienneouplusspécialisée, veillez à bien suivre les instructions spécifiques. Cette section vousprésenterapidementlesautrescartesdisponibles.
LescartesArduino/GenuinoofficiellesArduino est Open source, mais c’est aussi une marque protégée. Pour garantir laqualité de ses produits, les nouvelles cartes doivent être approuvées par l’équipeArduino avant d’être officiellement reconnues et de pouvoir prendre le nomd’Arduino. Vous pouvez reconnaître une carte officielle avant tout par son nom – Arduino Pro, Fio ou Lilypad, par exemple. D’autres cartes, qui ne sont pasofficielles,sontsouventnomméesenmentionnant«compatibleArduino»ou«pourArduino».Quelquesentreprisesontréussiàfairereconnaîtreleurscartescommedescartes officielles, si bien que vous pourriez trouver leurs noms imprimés dessus,commeAdafruitIndustriesouSparkfun.
Pour reconnaître une carte Arduino officielle, fabriquée par l’équipe Arduino, leschosessontmoinssimplesdepuis2015.Eneffet,lesfondateursn’avaientpasprislaprécaution de déposer le nom Arduino ailleurs qu’aux USA. De ce fait, un desfondateursa,notammentenEurope,déposé lamarquepour lecompted’unesociétéitalienne(ArduinoSRL)quiestdepuisseuleautoriséeàutiliserlenomArduinopourvendrecescircuits.LesvraiscircuitsArduinodel’équiped’originesontdorénavantvendus sous le nom Genuino. Ceci dit, une carte officielle Arduino et une carteofficielle Genuino sont absolument interchangeables. Sur les Arduino, on voit unsymboleinfiniimpriméquelquepartetunlienversunnouveausitearduino.org.SurlesGenuino, il y a quatre petits symboles à la place et l’adresse du site est celleconnuedepuislesorigines,arduino.cc.
Comme le schéma d’une carte Arduino est Open source, les cartes Arduinoofficieusespeuventgrandementvarier,lesgenslesayantconçuesenfonctiondeleursbesoins. Elles sont généralement basées sur le même microcontrôleur, et sontcompatiblesavecle logicielArduino,maisilfautdoncyprêterattentionetfaireunpeudelecturepours’assurerqu’ellesfonctionnerontbiencommevouspouvezvousyattendre. Par exemple, Seeduino (par Seed Studio) est basée sur un ArduinoDuemilanove ; elle est cent pour cent compatibles, mais elle dispose de diversinterrupteurs,connexionsetsupportssupplémentaires,etpeutdecefaits’avérerplusadaptéeàcertainescirconstancesquelacarteArduinooriginale.
Un débutant devrait choisir une carte officielle, car la majorité des exemplesd’Arduino qu’on trouve en ligne sont basés sur ces cartes. Comme les cartesofficiellessontpluslargementutilisées,leserreursoulesboguesdansleurdesignontplusdechanced’êtrecorrigésàl’occasiondelarévisionsuivante,ouaumoinsd’êtremieuxdocumentés.
ArduinoLeonardoLeonardoest l’unedes toutesdernièrescartesde lagammeArduinoofficielle.Elleadoptelamêmeempreinte(formedecircuitimprimé),maislemicrocontrôleurutiliséestdifférent,cequiluipermetdereconnaîtreunclavierouunesourisd’ordinateur.Jedonne plus de détails sur les différences avec l’Uno et comment l’utiliser dans lechapitrebonus.
ArduinoMega2560R2Commesonnomlesuggère,Mega2560estunecarteplusgrandequel’Uno.Elleestdestinée à ceux qui en veulent plus : plus d’entrées, plus de sorties, et plus depuissancedecalcul !LeMegadisposede54brochesnumériquesetde16brochesanalogiques, alors que l’Uno n’aligne que 15 broches numériques et 6 brochesanalogiques.CettecarteseravueendétailauChapitre14.
ArduinoMegaADKL’ArduinoMegaADKestapproximativementlamêmecartequelaMega2560,maisconçuepours’interfaceravecdestéléphonesAndroid.CelasignifiequevouspouvezpartagerdesdonnéesentrevotremobileouvotretabletteAndroidetunArduinopourélargirl’éventaildesfonctionnalitésdechacun.
ArduinoNano3.0L’ArduinoNanoestuncondenséd’Arduinoquinemesureque1,85cmsur4,3cm.Cesdimensionssontparfaitespourréduirecellesdevotreprojet.LeNanoatoutelapuissancede l’ArduinoUno,puisqu’ilutilise lemêmemicrocontrôleurATmega328,maisnefaitqu’unefractiondesataille.Iltientàmerveillesuruneplatined’essai,cequilerendidéalpourleprototypage.
ArduinoMiniR5Contrairementàcequesonnomsuggère, l’ArduinoMiniestpluspetitqueleNano.CettecarteutiliseaussilemicrocontrôleurATmega328,maiselleestplusconcentrée,lesconnecteursexterneset le connecteurMini-USBduNanodisparaissant.Elle est
parfaitement indiquée si l’espace est pour vous un enjeu,mais il faut lamanipuleravec soin lorsqu’on la connecte, car une connexion incorrecte peut facilement ladétruire.
ArduinoEthernetCetArduinoa lamêmeempreinteque l’Uno,mais ilest spécifiquementconçupourcommuniquer avec Internet. Plutôt que d’accéder à de vastes quantités de donnéesdisponiblesviavotreordinateur,vouspouvezdemanderàvotreArduinoEthernetd’yaccéderdirectement.UnnavigateurWebsurvotreordinateurnefaitqu’interpréterletextequiluiindiquequoiafficheràl’écran:alignement,miseenforme,affichagedesimages, par exemple. Si ces commandes sont connues, l’Arduino Ethernet peutaccéder au texte directement, et l’utiliser à toutes fins utiles. Une utilisation quirencontredusuccès,c’estd’accéderàTwitterpourafficherdestweetssurunécranLCD ou faire sonner une alarme chaque fois que vous êtes mentionné. On trouvequelques croquis d’exemple dans le logiciel Arduino, mais vous aurez besoin deconnaissancesavancéesentermesdedéveloppementWebpourutilisercettecarte.
ArduinoBTL’ArduinoBTpermetàvotreArduinodecommuniqueravecdesenginsBluetoothàproximité.C’estparfaitpours’interfaceravecdes téléphonesmobiles,des tablettesoun’importequelappareilBluetooth!
LesArduinodecontributeurs(approuvés)Nombre de cartes Arduino sont maintenant standardisées et conçues par l’équipeArduino, mais quelques-unes sont des contributions d’autres entreprises, tellesqu’Adafruit Industries ou SparkFun, qui ont été reconnues comme des cartesofficielles.Jedresseci-aprèslalistedesmeilleuresd’entreelles.
ArduinoLilyPadL’ArduinoLilyPad était destiné aux projets combinant la technologie et les textilespour aider le développement d’e-textiles ou d’électronique qu’il serait possible derevêtir. Le LilyPad et ses cartes innovantes (des circuits imprimés qui permettentd’intégrer facilement différents composants sans avoir à créer vos propres cartes)peuvent être cousues ensemble en utilisant un fil conducteur plutôt que du filconventionnel. Cette carte a été conçue et réalisée par Leah Buechley du MIT(http://web.media.mit.edu/~leah/) et SparkFun Electronics. Si vous
êtes intéressé par les e-textiles ou l’électronique dont on peut s’habiller, reportez-vous à l’excellent didacticiel sur le site de SparkFun pour découvrir la dernièreversion de la carte et le kit ProtoSnap(http://www.sparkfun.com/tutorials/308).
ArduinoFioLe Fio (dont le nom entier est l’Arduino Funnel I/O) a été conçu par ShigeruKobayashi dans l’idée de réaliser des applications sans fil. Il s’appuie sur laconceptionduLilyPad,mais ilcomprendunportmini-USB,unconnecteurpourunebatterieaulithium,etunespacepourunmodulesansfilXBee.
ArduinoProL’ArduinoProestuneversionminimalisteet super-platede l’Arduino, réaliséeparSparkFun Electronics, basée sur le même microcontrôleur que l’Uno R3. Il necomprendpas lesconnecteursHE,mais ila lesmêmesfonctionnalitésquel’Uno.Ilest idéal quand votre projet est contraint par l’épaisseur. De plus, il dispose d’unsupportpourbatteriequivouspermetderendrefacilementvotreprojetmobile.
ArduinoProMiniLeProminiestunautreproduitdeSparkFunquipousseleminimalismedel’ArduinoProdansdenouveauxretranchements.Àl’échelledesArduino,celui-cisetiententreleNanoetleMini.Ilnedisposed’aucundesconnecteursHEniduportMini-USBduNano.Ilnedisposepasdesfonctionsdeprotectiondel’UnoR3,alorsprenezgrandsoinlorsquevouslecâblez,carunemauvaiseconnexionpeutfacilementledétruire.
AcheterunArduinoInitialement, l’Arduinon’étaitdisponiblequedansde rareséchoppesdisperséesdeparlemonde.Désormais,voustrouvezénormémentd’endroitsoùacheterunArduino,commevouspourrezleconstater.Plusloin,jeprésenteaussileskitspourdébutantsquicomprennentlescomposantsdebasedontvousavezbesoin,solutionquejevousrecommandepourdébuter.
Lemagasinofficield’ArduinoUn bon endroit pour commencer est lemagasin Arduino (store.arduino.cc). Vous ytrouverezlesdernièrescartesetkitsArduino,ainsiqu’unesélectiondecomposants.Toutefois,lesiten’estpourl’heurequ’enanglaisouitalien.Rappelonsquelescartes
portentlenomGenuinoenEurope.LesitequipossèdelesdroitssurlenomArduinoestàl’adressehttp://www.arduino.org.
LesdistributeursenFrancePlusieurs boutiques d’électronique existent depuis bien plus longtemps qu’Arduino.Désormais, en plus de vendre toutes sortes de composants électroniques, cesboutiquescommercialisentunequantitéconsidérabledecomposantsetd’équipementspourArduino.Voiciquelques-unesd’entreelles:
» Lextronic:www.lextronic.fr
» Selectronic:www.selectronic.fr
» Gotronic:www.gotronic.fr
» Conrad:www.conrad.fr
VoyezaussiFarnelletRSComposants.
AmazonLa popularité d’Arduino est devenue telle qu’on en trouvemaintenant sur Amazon(www.amazon.fr).LaplupartdescartesArduinoainsiquediverscomposantsetkits y sont disponibles, même s’ils sont plus difficiles à trouver que sur des sitesdédiés.
Pourcommencer:lekitdudébutantVous en savez maintenant un peu plus sur la carte Arduino, mais ce n’est qu’unmorceaudupuzzle;vousaurezbesoindebiend’autresélémentspourêtreenmesuredel’utiliser.Toutcommeunordinateurseraitinutilesanssourisetclavier,unArduinoseraitinutilesanssescomposants.Oudumoins,pasaussiamusant.
Nombre d’exemples de base permettent à l’arduiniste de base d’acquérir par lapratique la maîtrise des fondamentaux d’Arduino (dont il est question dans lesChapitres 4 à 8). Vous pouvez y parvenir à l’aide de quelques composantsélémentaires. Pour vous épargner le temps et l’effort de les trouver vous-mêmes,quelques entrepreneurs et entreprises ont assemblé des kits qui vous permettent devouslancerdansdesexpérimentationssansattendre!
Nombre des kits disponibles ont été conçus par ces entrepreneurs et entreprises enfonctiondeleursexpériences,decequ’ilsaimentetdecequ’ilsn’aimentpas.Vous
pouveztrouverbiendescomposantsquiferontlemêmeboulot,maisdontl’apparenceseradifférente,selonl’usagequ’onleurréserve.
Toutcelapourdirequ’un«kitpourdébutant»peutcorrespondreàquelquechosedetrès différent d’une personne à l’autre, surtout pour les débutants. Tout cela peutrajouteràlaconfusionlorsquevousentamezvotrepremierprojet.
VoiciunelistedescomposantsélémentairesquetoutkitpourdébutantavecArduinodignedecenomdoitcomprendre:
» ArduinoUno:Lacartequevousconnaissezetquevousadorez.
» UncâbleUSBA-B:IlestessentielpourutiliservotreArduino.C’est
lemêmequeceluiquirelievotreordinateuràuneimprimanteouà
unscanner.
» DesLED:Lesdiodesélectroluminescentesdedifférentescouleurs
sontparfaitespourconstituerunevoiederetourvisuelledansvos
projets,ainsiquepourtesterdesprojetsd’illuminationàpetite
échelle.
» Desrésistances:Cesontdescomposantsélectriques
fondamentauxutiliséspours’opposeràl’écoulementducourant
dansuncircuit.Ellessontessentiellesaubonfonctionnementdela
plupartdescircuits.Ellesontunevaleurfixeindiquéeàl’aide
d’anneauxdecouleursquisetrouventsurlecorps.
» Despotentiomètres:Cesontdesrésistancesquis’opposentàla
circulationducourantcommelesrésistancesdevaleurfixe,mais
dontonpeutvarierlavaleur.Ilssontplusparticulièrementutilisés
dansleséquipementsradioethi-fipourlesboutonsderéglagede
fréquenceetdevolume,maisonentrouveaussidestinésàd’autres
usages,commepourdétecteruneforceappliquéeàunesurface.
» Desdiodes:CesontdesdiodescommelesLED,maiselles
n’émettentpasdelumière.Ellesopposentunerésistance
considérableàlacirculationducourantdansunedirection,ettrès
faible(dansl’idéal,nulle)dansl’autre.C’estpourlamêmeraison
qu’uneLEDnefonctionnequedansunsens,maisaulieud’émettre
delalumière,lesdiodessontutiliséespourcontrôlerlacirculation
ducourantdansvotrecircuit.
» Desboutons-poussoirs:Onentrouvederrièrelacoquedebien
desmatérielsélectroniquesgrandpublic,commelesmanettesde
jeuvidéoetlestélécommandes.Ilssontutiliséssoitpourconnecter,
soitpourdéconnecterdespartiesd’uncircuit,cequipermetàvotre
Arduinodecapterdesactionshumaines.
» Desphotodiodes(LDR):Elleschangentderésistanceenfonction
delaluminositéambiante.
» Descapteursdetempérature:Cescapteursvousindiquentla
températureambiantedumilieuoùilssontplacés.Ilssontparfaits
pourobserverdeschangementsdansvotreenvironnement.
» Desbipeurspiézos:Onlesdécrittechniquementcommedes
enginsémetteursdesonsnumériques.Cescomposantspeuvent
êtrealimentéspourproduiredesnotesoudelamusique.Ils
peuventaussiêtrereliésàdessurfacespourémettredes
vibrations.
» Desrelais:Cesinterrupteursactivésparl’électricitésontutilisés
pouractiverdescircuitspluspuissantsenutilisantvotreArduinoà
bassetension.Lamoitiédurelaisestunélectro-aimant,etl’autreun
interrupteurmagnétique.L’électro-aimantpeutêtreactivéparle
courantde5Vdel’Arduino,quibasculel’interrupteur.Lesrelais
sontessentielspourlesprojetsvisantàcontrôlerdesilluminations
etdesmoteursélectriques.
» Destransistors:Cesontlescomposantsdebasedetousles
ordinateursmodernes.Cesontdesinterrupteursactivéspar
l’électricité,semblablesàdesrelais,maisl’interrupteurestactivé
parlecourantetnonmanuellement.Celasignifiequesabascule
peutêtrehyper-rapide,cequifaitdestransistorslasolutionidéale
pourdesopérationsàhautefréquencecommel’illuminationpar
desLEDoulecontrôledelavitessedemoteurs.
» Desmoteursàcourantcontinu:Cesontdesimplesmoteurs
électriques.Lorsquelecourantpassedanslemoteur,iltournedans
unedirection;etlorsquelecourantestinversé,lemoteurtourneen
sensinverse.Ontrouveunegrandevariétédemoteursélectriques,
deceuxquifontvibrervotretéléphoneàceuxquiserventdansdes
perceuses.
» Desservomoteurs:Cesmoteursembarquentunecircuiteriequi
analyseleurrotation.Lesservomoteurssontgénéralementutilisés
pourdesopérationsrequérantdelaprécision,commel’ouverture
devannesoulemouvementdesarticulationsdesrobots.
Voici quelques-uns des kits les plus répandus. Ils comprennent tous les composantsqui viennent d’être présentés. Le prix est de l’ordre de 80 euros. Tous fontparfaitementl’affairepourréaliserlesexemplesfigurantdanscelivre:
» LeStarterKitpourArduino(ARDX)http://www.selectronic.fr/adafruit-kit-d-
experimentation-ardx.html.
» LekitSparkfunInventorparSparkfun(représentésurlaFigure2-5)http://www.lextronic.fr/P19085-sparkfun-inventors-
kit--v31.html.
» LekitProto-PICBoffinpourArduinodeProto-Pichttp://proto-
pic.co.uk/proto-pic-boffin-kit-for-arduinou-no/.
» LekitArduinoStarterKitd’Arduinohttp://www.lextronic.fr/P27664-starter-kit-
arduino.html.
FIGURE2-5LekitSparkFunInventorcomprendunbonéventaildecomposants,dontdespotentiomètreslinéairesetsensiblesàlaflexion.
Touslesexemplesprésentésdanscelivrepeuventêtreréalisésavecn’importelequelde ces kits, même s’ils diffèrent légèrement par le nombre et les types de leurscomposants. Parfois, un même composant peut prendre différentes formes, alorsveillezbienàlireattentivementlalistepourvousassurerquevouspouvezidentifierchaquecomposantavantdecommencer.Ontrouvedeskitsàmeilleurmarché,maisilsn’incluront sans doute pas certains composants, tels que les moteurs ou le jeu decapteurs.
AménagerunespacedetravailPour travailler sur un projet Arduino, vous pourriez être assis sur votre sofa ettravaillersurvotrecircuit,oualorsvoustrouverenhautd’uneéchellepourconfigureruneinstallation.Jesuispassépar là!Maiscen’estpasparcequ’ilestpossibledetravailler de ces manières qu’elles sont bonnes. Vous feriez bien mieux de vousaménager un espace de travail avant de vous lancer dans vos expérimentations, etc’estdoublementimportantlorsquevousdémarrezavecArduino.
Travailleravecl’électroniqueestuneaffaireminutieuse.Vousmanipulezbeaucoupdeminusculescomposantstrèsfragiles,etvousavezbesoindeprécisionetdepatiencepourassemblervotrecircuit.Sivousêtesdansunesalle faiblementéclairéeetquevouscherchezsanscesseàdelaplacesurvotreplandetravail,vousallezrapidementépuiser votre patience et votre stock de composants (en les perdant ou en lesdétruisant).
Tout ce que vous pourrez faire pour vous simplifier la vie sera une bonne chose.L’espacedetravailidéalcomprend:
» ungrandbureauouunegrandetablebienstable;
» unebonnelampedetravail;
» unfauteuilconfortable;
» uneambiancecalme(recommandé).
A
Chapitre3TéléchargeretinstallerArduino
DANSCECHAPITRE
» RécupéreretinstallerlelogicielArduino
» Prendreenmainl’environnementArduino
vantdecommenceràtravailleravecvotrecarteArduino,vousdevezinstallersurvotreordinateurunlogicielindispensable.Ilestsemblableàceuxquevousavezsurvotreordinateurpersonnel,votreportable,votretabletteouvotretéléphone:il
estrequispourutiliservotrematériel.
LelogicielArduinoestdutypeenvironnementdedéveloppementintégré(EDI).C’estune sorte d’atelier communément utilisé pour le développement logiciel. Il vouspermetd’écrire,detesteretdetéléchargerdesprogrammes.OntrouvedesversionsdecelogicielArduinopourWindows,MacintoshOSXetLinux.
Dans ce chapitre, vous apprendrez où obtenir le logiciel pour le système que vousutilisez, et je vous guiderai pas à pas pour le télécharger et l’installer. Je vousproposeensuitedefaireuntourdupropriétairedel’environnementdanslequelvousallezdéveloppervosprogrammesArduino.
InstallerArduinoCettesectionvousexpliquecommentinstallerl’environnementArduinosurlaplate-forme de votre choix. Les instructions sont spécifiques à l’installation del’environnementdel’ArduinoUnoR3,maisellesvalenttoutaussibienpourlescartesprécédentes, telles que Mega2560, Duemilanove, Mega ou Diecimila. La seuledifférencepeutrésiderdanslespilotesrequispourl’installationsousWindows.
InstallerArduinopourWindows
Les instructions et les captures d’écran figurant dans cette section décriventl’installation du logiciel Arduino et des pilotes Arduino Uno pour les version deWindowsdepuislaversion7.Toutefois,lesmêmesinstructionsvalentpourWindowsVistaetWindowsXP.
LaseuledifficultéestdepasseràWindows8ou10,surlequelilfaut,encorepourlemoment, mettre en œuvre quelques astuces pour installer les pilotes. Vous pouveztrouver des instructions sur http://vx450-
domotique.blogspot.fr/2013/04/instal-lez-larduino-uno-
sous-windows-8.html.
AvecvotreArduinoUnoetuncâbleUSBA-B(représentésurlaFigure3-1)àportéedemain,suivezcesétapespourrécupéreret installer ladernièreversiond’ArduinosurvotreversiondeWindows:
FIGURE3-1UncâbleUSBA-BetunArduinoUno.
1. Ouvrezlapagedetéléchargementd’Arduinosur
http://arduino.cc/en/Main/Software,etcliquezsurlelien
Windowspourtéléchargerlefichier.zipquicontientunecopie
del’applicationArduinopourWindows.
Àl’heureoùj’écrisceslignes,lefichierzippéfaitenviron100Mo.
C’estunfichierplutôtvolumineux,sibienqu’ilvousfaudraquelque
tempspourletélécharger.Lorsqueletéléchargementestterminé,
désarchivezlefichieretplacezledossierArduinoàunendroit
approprié,comme:
C:/ProgramFiles/Arduino/
2. Branchezl’emboutcarrédevotrecâbleUSBdansl’Arduinoet
l’emboutplatdansleportdevotrePCpourconnecterl’Arduino
àvotreordinateur.
Aussitôtquelacarteestconnectée,laLEDvertelibelléeONindique
quevotreArduinoestalimentée.Windowsfaitalorsdevaillants
effortspourtrouverlespilotes,maisilvavraisemblablement
échouer,commereprésentésurlaFigure3-2.Mieuxvautfermer
l’assistantetinstallerlepilotevous-même,commeexpliquédansles
étapesquisuivent.
FIGURE3-2Nouveaumatérieltrouvé–oupas,selonlecas.
3. OuvrezlemenuDémarreretsaisissezdevmgmt.mscdansle
champderecherche,puispressezEntrée.
LafenêtreduGestionnairedepériphériquesapparaît.Ce
gestionnairevousaffichetouslesdifférentsmatérielset
périphériquesreliésàvotreordinateur,dontvotrecarteArduino.
Sivousregardezverslebasdelaliste,vousdevrieztombersur
l’ArduinoUno,àcôtéduquelfigureunpointd’exclamation.Cepoint
d’exclamationsignalequel’Arduinon’estpasencorereconnu.
4. Cliquezduboutondroitsurl’ArduinoUnoetsélectionnez
Mettreàjourlepilotedanslalistequiapparaît;cliquezensuite
surRechercherunpilotesurmonordinateur(voirFigure3-3).
FIGURE3-3InstallerlespilotesdansleGestionnairedepériphériques.
Lafenêtreafficheunenouvelleétape.
5. CliquezsurParcourirpourtrouvervotredossierArduino.Vous
devrieztrouvercedossierdansceluioùvousavezdésarchivéle
fichier.zipàl’étape1.
6. DansvotredossierArduino,cliquezsurledossierDrivers,puis
cliquezsurlefichierArduinoUno.Notezquesivousêtesdansle
sous-dossierFTDUUSBDrivers,c’estquevousêtesallétroploin.
7. CliquezsurSuivant,etWindowsachèvel’installation.
Une fois que vous avez installé le logiciel, vous pouvez facilement lancer leprogrammeencréantunraccourcisurlebureaudevotreordinateuroudanssonmenuDémarrer,seloncequevouspréférez.Rendez-vousdansledossierArduino,localisezle fichier Arduino.exe, cliquez du bouton droit, et sélectionnez Créer un raccourcipourcréer leraccourcienquestion.Double-cliquezsur l’icôneduraccourcichaquefoisquevoussouhaitezdémarrerl’applicationArduino.Celaouvreunefenêtrepourunnouveaucroquis,commesurlaFigure3-4.
FIGURE3-4Lafenêtredel’atelierArduinosousWindows.
InstallerArduinopourMacOSXLes instructions dispensées dans cette section décrivent l’installation du logicielArduino sur Mac OS X Lion, mais elles fonctionneront pareillement sur Leopard,SnowLeopard etMoutainLion. Si vous utilisez une version antérieure du systèmed’exploitation, vous devrez faire des recherches sur le Web pour trouver desinstructionsspécifiques.
SuivezcesétapespourinstallerlelogicielArduinosurMac:
1. Ouvrezlapagedetéléchargementd’Arduinosur
http://arduino.cc/en/Main/Software,etcliquezsurlelien
MacOSXpourtéléchargerlefichier.zipquicontientunecopie
del’applicationArduinopourMacOSX.
Àl’heureoùj’écrisceslignes,lefichierzippéfait127Mo.C’estun
fichierplutôtvolumineux,sibienqu’ilvousfaudraquelquetemps
pourletélécharger.Lorsqueletéléchargementestterminé,double-
cliquezsurlefichieretplacezsoncontenudansvotredossier
Applications,commesurlaFigure3-5.
FIGURE3-5Placezl’applicationArduinodansvotredossierApplications.
2. Branchezl’emboutcarrédevotrecâbleUSBdansl’Arduinoet
l’emboutplatdansleportdevotreMacpourconnecter
l’Arduinoàvotreordinateur.
Aussitôtquelacarteestconnectée,uneboîtededialogueapparaît,
quiaffichelemessageAnewnetworkinterfacehasbeen
detected(voirFigure3-6).
3. CliquezsurPréférencesréseau,puissurAppliquerdansla
fenêtrequiapparaît.
NotezquevotreArduinoapparaîtdanslalistesurlecôtégauchede
lafenêtrecommeétantNonconfiguré.Toutefois,croyez-moisur
parole,lelogicielestbieninstalléetvotrecarteArduino
fonctionnera.
4. FermezlafenêtrePréférencesréseau.
FIGURE3-6VotreMacvapenserquelacarteArduinoestunenouvellecarteréseau.
Pour démarrer l’application Arduino, rendez-vous dans votre dossier Arduino,localisez l’application Arduino, glissez-la sur le Dock, puis cliquez sur l’icôneArduinopourouvrirl’application(laFigure3-7vousmontre lafenêtrequiapparaîtalors). Si vous préférez, vous pouvez aussi glisser-poser l’application sur votrebureaupourcréerunalias.
InstallerArduinopourLinuxL’installation sur Linux est plus complexe et dépend de la distribution que vousutilisez,sibienqu’iln’enserapasquestiondanscelivre.SivousutilisezLinux,vousserezprobablementplusquecompétentpourinstallerlelogicieletvousn’aurezaucunmalàreleverledéfi.VoustrouvereztouslesdétailsrequispourinstallerArduinosurLinuxàl’adressesuivante:
http://arduino.cc/playground/Learning/Linux
Passerenrevuel’environnementArduino
LesprogrammesécritspourArduinos’appellentdescroquis.C’estuneconventiondenommage héritée de Processing, qui permettait aux utilisateurs de créer desprogrammesrapidement,delamêmemanièrequevouspouvezcroqueruneidéedansuncarnetdecroquis.
Avantdejeterunœilsurvotrepremiercroquis,jevousencourageàfaireuntourdulogicielArduino.Àcettefin,cettesectionvavousguider.LelogicielArduinoestunenvironnementdedéveloppementintégré,ouEDI,quiseprésentesouslaformed’uneinterfacegraphique.
FIGURE3-7Lafenêtredel’atelierArduinosousMacOSX.
L’interface graphique vous permet d’interagir d’une manière visuelle avecl’ordinateur.Sanselle,vousdevriezlireetécriredeslignesdetexte,unpeucommelorsque vous devez saisir des commandes dans la ligne de commandesDOS, dansTerminalsurMacOSX,oucommeaudébutdeMatrix.
Lafenêtreturquoiseconstituel’interfaced’Arduino.Elleestdiviséeenquatrezonesprincipales(repéréessurlaFigure3-8):
» Labarredemenus:Semblableàlabarredemenusd’autres
programmesquivoussontfamiliers,labarredemenusArduino
contientdesmenusdéroulantspourtouslesoutils,paramètreset
informationsduprogramme.SousMacOSX,labarredemenusse
trouveenhautdel’écran;sousWindowsetLinux,ellesetrouveen
hautdelafenêtreArduinoactive.
FIGURE3-8Leszonesdel’interfacegraphique.
» Labarred’outils:Labarred’outilscontientplusieursboutonsqui
sontcommunémentutiliséslorsquevousécrivezdescroquispour
Arduino.Cesboutons,quisontaussiaccessiblesdanslabarrede
menus,permettentd’accomplirlesactionssuivantes:
• Vérifier:Vérifiequevotrecodefaitsenspourlelogiciel
Arduino.Aussidésignéparletermedecompilation,ce
processuscorrespondunpeuàunecorrection
orthographiqueetgrammaticale.Toutefois,sachezquesile
compilateurvérifiequevotrecodenecontientpasd’erreurs
évidentes,ilnegarantitpasquevotrecroquisfonctionnera
correctement.
• Téléverser:EnvoievotrecroquisàlacarteArduinoconnectée
àl’ordinateur.Votrecroquisestcompiléavantd’êtreenvoyé.
• Nouveau:Créeunnouveaucroquis.
• Ouvrir:Ouvreuncroquisexistant.
• Enregistrer:Sauvegardelecroquiscourant.
• Moniteursérie:Vouspermetdevisualiserlesdonnéesqui
sontenvoyéesoureçuesparvotrecarteArduino.
» Éditeurdetexte:Cettezoneaffichevotrecroquissouslaforme
detexte.C’estapproximativementunéditeurdetexte,maisavec
desfonctionnalitéssupplémentaires.Unepartiedutexteest
coloriée,sicedernierestreconnuparlelogicielArduino.Vous
pouvezaussimettreenformeautomatiquementletextepourqu’il
soitplusfacileàlire.
» Zonedesmessages:MêmeaprèsavoirutiliséArduinodesannées
durant,vousfereztoujoursdeserreurs(toutlemondeenfait),et
cettezonedemessagesestl’unedespremièressources
d’explicationsàlaquellevousvousréférerez(Note:l’autresource
estlacarteelle-même,quandelledégageuneforteodeurde
plastiquebrûlé).
R
Chapitre4FaireclignoteruneLED
DANSCECHAPITRE
» TrouverlecroquisBlink
» Identifiervotrecarte
» Configurerlelogiciel
» TéléverserBlink
» RéaliservotrepremiercroquisArduino
» Expliquerlecroquis
» EnrichirBlink
éjouissez-vous.VousêtessurlepointdefairevotrepremierprojetArduino!Vousavez acheté la carte, sans doute un kit de démarrage (peut-être auprès d’un desfournisseursquejevousaiindiqués),etvousêtesprêtàdémarrer.
C’est toujours une bonne idée d’aménager un plan de travail ou un bureau proprelorsquevousbricolez.Iln’estpasrarequ’onlaissetomberouqu’onrangeaumauvaisendroit quelques-uns des minuscules composants avec lesquels on travaille, alorsveillezàcequevotreespacedetravailsoitpropre,bienéclairéetqu’ilcomprenneunfauteuilconfortable.
Deparsanature,Arduinoestunmatérielquiconduitàpratiqueruntravailmanuel.Lameilleure manière d’en apprendre plus sur Arduino, c’est donc la pratique – enexploitantcematérielpourfairequelquechose.C’estexactementdanscetespritquej’aiécrit ce livre.Danscechapitre, jevousguideviadesétapes simplespourquevousparveniezàproduirequelquechose.
JevousguideaussipourparveniràtéléverservotrepremiercroquisArduino.Aprèscela, vous examinerez la manière dont il fonctionne et comment vous pouvez lemodifieraugrédevosbesoins.
TravaillersurvotrepremiercroquisArduino
VousdevriezmaintenantavoirdevantvousunArduinoUnoR3,uncâbleUSB,etunordinateurfonctionnantaveclesystèmed’exploitationdevotrechoix(Windows,MacOSouLinux).Lasectionsuivantevouslaisseentrevoircequevouspouvezfaireaveccepetitengin.
TrouverlecroquisBlinkLerôleessentieldulogiciel(l’atelier)ArduinoestdecompilerpuisdetransférerunprogrammeverslamémoiredumicrocontrôleursurlacarteArduino.Letextesourcedeceprogrammeestuncroquis.Qu’est-cequ’uncroquis,direz-vous?Arduinoaétéconçu pour permettre aux gens de prototyper rapidement des idées en utilisant despetitsboutsdecodequimatérialisentcette idée–unpeucommelorsquevous jetezune idée sur le papier. Pour cette raison, les programmes écrits pourArduino sontnomméscroquis.Toutefois,onutilisedésormaisArduinopourréaliserdesopérationstoujours plus complexes. Ce n’est donc pas parce qu’on parle de croquis qu’unprogrammeArduinoestforcémentdefaibleenvergure.
Lecroquisquevousallezutilisericis’appelleBlink(clignoter).C’estsansdoutelecroquisleplusélémentairequevouspuissiezécrire,unesortede«Hello,world!»pourArduino.Cliquez dans la fenêtreArduino.Dans la barre demenus, ouvrez lemenu Fichier puis le sous-menu Exemples, puis la catégorie 01.Basics poursélectionnerenfinBlink(voirFigure4-1).
Unenouvellefenêtreapparaîtdevantvotrecroquisvierge(Figure4.2).
FIGURE4-1TrouvezvotrechemindanslecroquisBlink.
IdentifiervotrecarteAvant de pouvoir téléverser votre croquis, vous devez vérifier quelques petiteschoses. Tout d’abord, vous devez confirmer le type de carte dont vous disposez.CommementionnédansleChapitre2,vouspouvezfairevotrechoixparmitouteunevariété de matériels Arduino et plusieurs variantes de la carte USB. La dernièregénérationdecarteUnoestlaR3.Sivousavezachetédumatérielneuf,vouspouvezêtre quasiment certain que c’est le type de carte dont vous disposez. Regardezl’arrièredelacarte.Vousdevriezliredesdétailssurlemodèledelacarte,sousuneformesimilaireàcelledelaFigure4-3.NotezquelamarquepeutêtretoutaussibienGenuino.
VérifiezaussilecircuitintégréATMELsurl’Arduino.Commejel’aiexpliquédansleChapitre2,cecircuitestlecerveaudevotreArduino,commeleprocesseur(CPU)devotre ordinateur. Comme l’Uno permet de remplacer ce circuit, il y a toujours unrisque, surtout sur une carte non neuve, pour qu’il ait été remplacé par un autremodèle.
FIGURE4-3L’arrièred’unArduinoUno.
Quoiquel’apparenceducircuitATMELpermettedeledistinguerfacilementsurunecarte,ilseraitdifficilededires’ilaétéchangéenlecomparantàunvieilArduino.Ce qui permet de le savoir, c’est ce qui écrit sur le circuit. Dans le cas présent,recherchezlamentionATmega328-P.LaFigure4-4représentelecircuitengrosplan.
FIGURE4-4GrosplansurlecircuitATMEGA328P.
ConfigurerlelogicielUnefoisquevousavezconfirméletypedecartequevousutilisez,vousdevezfournircette informationaulogiciel.DanslabarredemenusArduino(enhautdelafenêtreArduinosousWindows,etenhautdel’écransousMacOSX),sélectionnezOutils->Typedecarte.VousaccéderezalorsàunelistedesdifférentstypesdecartesgérésparlelogicielArduino.Sélectionnezvotrecartedanslaliste,commesurlaFigure4-5.
Vousdevezensuitesélectionnerleportsérie.Leportsérieestlaconnexionquipermetà votre ordinateur et aumatérielArduino de communiquer.Série décrit lamanièredontlesdonnéessontenvoyées,bit(0ou1)aprèsbit.Leportestl’interfacephysique,danslecasprésent:lapriseUSB.Jereviensplusendétailsurlacommunicationauchapitre7.
FIGURE4-5Sélectionnezl’ArduinoUnodanslemenuTypedecarte.
Pourdéterminerleportsérie,sélectionnezOutils->Portsérie.Unelistedesmatérielsconnectés à votre ordinateur apparaît (voir Figure 4-6). La liste contient tous lespériphériques avec lesquels vous pouvez communiquer par série,mais vous n’êtespour l’heure intéressé que par l’Arduino. Si vous venez d’installerArduino et quevousavezbranchélacarte,elledevraitapparaîtreenhautdelaliste.SousMacOSX,elle apparaît sous le nom /dev/tty.usbmodemXXXXX (où XXXXX est unnombre aléatoire). SousWindows, c’est pareil, mais les ports séries sont nommésCOM1, COM2, COM3, et ainsi de suite. Le nombre le plus élevé correspondgénéralementaudernierpériphériqueconnecté.Unefoisquevousaveztrouvéleportsérie,sélectionnez-le.Ildevraitapparaîtreenbasdel’interfacedel’Arduino,aveclacartequevousavezsélectionnée(voirFigure4-7).
TéléverserlecroquisMaintenantquevousavez signaléau logicielArduinoavecquel typedecartevouscommuniquezetquelportsérievousutilisez,vouspouveztéléverserlecroquisBlinkquevousavezouvertplustôtdanscechapitre.
FIGURE4-6Unelistedesconnexionssériesdisponiblesdansl’environnementArduino.
FIGURE4-7L’interfaceArduinounefoisleportsérieetlacartesélectionnés.
Tout d’abord, utilisez le bouton Vérifier. Cela permet de vérifier le code afin des’assurerqu’il fait sens.Celane signifiepas forcémentquevotre code fera cequevous attendez, mais cela garantit que sa syntaxe est telle qu’Arduino saura lacomprendre(voirChapitre2).VousdevriezvisualiserunebarredeprogressionetletexteCompilationducroquis (voirFigure4-8)durantquelquessecondes,puisletexteCompilationterminéeunefoisleprocessusachevé.
FIGURE4-8Vérificationducode.
Silecroquisestbiencompilé,vouspouvezcliquersurleboutonTéléverseràcôtéduboutonVérifier.Unebarredeprogressionapparaît.Vousobservezdesactivités survotrecarte:lesdeuxLEDlibelléesRXetTXclignotent.Celamontrequel’Arduinoestentrainderecevoiretd’émettredesdonnées.Aprèsquelquessecondes,lesLED
RX et TX cessent de clignoter, et le message Téléversement terminé
apparaîtenbasdelafenêtreArduino(voirFigure4-9).
FIGURE4-9L’interfaceaterminédetéléverser.
Félicitez-vous!VousdevriezvoirlaLEDlibelléeLclignotercommeledemandeleprogramme:uneseconde allumée, une seconde éteinte. Dans ce cas, vous pouvez vous congratuler.Vousvenez justede téléverservotrepremierboutdecodeArduinoetdoncd’entrerdanslemondedel’informatiquephysique.
Si vous ne voyez pas la LED L clignoter, reprenez toutes les étapes précédentes.Vérifiez que vous avez installé l’atelier Arduino correctement et tentez un nouvel
essai. Si vous ne voyez toujours pas la LED L clignoter, recherchez de l’aide surInternetetsurlesiteofficield’Arduino.
Ques’est-ilpassé?Sansverserlamoindregouttedesueur,vousvenezjustedetéléverservotrepremiercroquisdansunArduino.Bienjoué.
Pourrécapituler,vousavez:
» branchéunArduinoàvotreordinateur;
» démarrélelogicielArduino;
» spécifiélacarteetleportsérie;
» chargélecodesourceducroquisBlinkdepuisunsous-dossierde
Examples;
» téléverséleprogrammeexécutabledanslacarte.
Analysonsligneaprèslignelecodesourcedecepremiercroquis.
ExaminerlecroquisBlinkDans cette section, je vous présente le croquis Blink plus en détail pour que vouspuissiezcomprendrecequisedéroule.LorsquelelogicielArduinolituncroquis,ill’exécute très rapidement ligne après ligne, dans l’ordre. La meilleure manière decomprendre le code est de le passer en revue de la même manière, mais trèslentement.
ArduinoutiliselelangagedeprogrammationC,l’undeslangageslesplusutilisésdetouslestemps.C’estunlangageextrêmementpuissantetversatile,maisilfautquelquetempspours’yfaire.
Si vous avez suivi les sections précédentes, le croquis Blink devrait toujours êtreaffiché. Si ce n’est pas le cas, vous pouvez le recharger en sélectionnant Fichier->Exemples->01.Basics->Blink(voirFigure4-1).
Unefoislecroquisouvert,vousdevriezvisualiserquelquechosedecetordre:
/*
Blink
ActivelaLEDdurantuneseconde,puisl’éteint
durant
uneseconde,etainsidesuite.
Cetexempleestdansledomainepublic.
*/
//LaLEDestconnectéeàlabroche13surla
plupartdes
cartesArduino.
//Donnons-luiunnom:
intled=13;
//Laroutinesetupestexécutéequandvouspressez
le
boutonreset:
voidsetup(){
//Fairedelabrochenumériqueunesortie.
pinMode(led,OUTPUT);
}
//Laroutineloopserépèteàl’infini:
voidloop(){
digitalWrite(led,HIGH);//AllumerlaLED
(HIGH,
tensionhaute)
delay(1000);//Attendreune
seconde
digitalWrite(led,LOW);//ÉteindrelaLED
(LOW,
tensionnulle)
delay(1000);//Attendreune
seconde
}
Cecroquisestcomposédelignesdecode.Lorsquevousconsidérezlecodedeloin,vouspouvezidentifierplusieurssections:
» descommentaires;
» unedéclarationdedonnée;
» unefonctionsetup();
» unefonctionloop().
Lisezlasuitepourensavoirplussurchacunedecessections.
LescommentairesVoiciàquoiressemblelapremièresectiondecode:
/*
Blink
ActivelaLEDdurantuneseconde,puisl’éteint
durant
uneseconde,etainsidesuite.
Cetexempleestdansledomainepublic.
*/
UncommentairemultilignesNotezcommentleslignesdecodesontcomprisesentrelessymboles/*et*/.Cessymbolesdélimitentledébutetlafind’uncommentairesurplusieurslignes,oublocdecommentaires.Lescommentairessontécritsenlangagenaturel(ici,enanglais),etfournissent des informations sur le code, comme leur nom l’indique. Ils sontroyalement ignorés par le logiciel lorsque le croquis est compilé et téléversé. Enconséquence,lescommentairespeuventcontenirn’importequelleinformationutileàlacompréhensionducodesansinterféreraveclefonctionnementdecedernier.
Dans cet exemple, le commentaire vous indique le nom du croquis, ce qu’il fait(allumer laLEDdurantune seconde, l’éteindreune seconde, et répéter), et contientaussiunenoteexpliquantquelecodeestdansledomainepublic.Lescommentairescomprennent souventd’autresdétails telsque lenomde l’auteuroude l’éditeur, ladateàlaquellelecodeaétéécritoumodifié,unebrèvedescriptiondecequefaitlecode, l’URL du projet, et éventuellement les coordonnées de l’auteur pour lecontacter.
Uncommentairesuruneseuleligne
Plusbasdanslecroquis,àl’intérieurdesfonctionssetupetloop,voustrouvezdutexteapparaissantàl’écranengriscommelescommentairesprécédents.Cetexteestaussiuncommentaire.Lessymboles//signifientqu’ils’agitd’uncommentairesurune seule ligne et non sur plusieurs. Tout ce qui est écrit après ces symboles estignoré, jusquà lafinde la ligne.Dans lecasprésent, lecommentairedécrit lecodequivientaprès:
//LaLEDestconnectéeàlabroche13surla
plupartdes
cartesArduino.
//Donnons-luiunnom:
intled=13;
Ce qui suit le commentaire correspond à la section des déclarations du croquis.«Maisqu’est-cequ’unedéclaration»,direz-vous?Continuezvotrelecturepourensavoirplus.
LesdéclarationsLes déclarations sont des valeurs qui sont conservées pour être utilisées plus loindans leprogramme.Dans lecasprésent,uneseulevariableestdéclarée,maisvouspourriez déclarer bien d’autres variables, voire inclure des bibliothèques de codedans votre croquis. Pour l’heure, il est simplement important de savoir que lesvariablespeuventêtredéclaréesavantlafonctionsetup.
LesvariablesUnevariable est unnomqui symbolise une adressenumériquedans lamémoire duprocesseur.Cetteadressecorrespondàuncontenuquiestunevaleur.Cecontenupeutvarierselonlamanièredontleprogrammelesutilise.EnC,vouspouvezdéclarerletype, lenomet lavaleurdelavariableavantlecorpsducode,unpeucommevousferiezl’inventairepréalabledesingrédientsd’unerecette.
intled=13;
La première partie déclare le type de la variable, créant ici un entier (int, pourinteger). Un entier est un nombre entier quelconque, positif ou négatif, si bienqu’aucunedécimalen’estrequise.Leprocesseurdel’ArduinoUnooffredeuxoctetsdelargeurpourlesentierssimples,soitlesvaleursentre-32678et+32768.Au-delàouen-deçà,vousdevezutiliserunautretypedevariable,qu’onnommelong(vousen apprendrez plus à ce sujet dans le Chapitre 11). Pour l’instant, un int fera
largement l’affaire. Le nom de la variable est led, mais c’est juste pour y faireréférence ; vous pourriez la nommer comme vous le souhaitez, en utilisant un nomsignificatif pour vous rappeler à quoi sert la variable. Enfin, la variable se voitaffecterlavaleur13.C’esticilenumérodelabrochedesortiequiserautilisée.
Lesvariablessontindispensableslorsquevousvousréférezàunevaleurdemanièrerépétée.Danscetexemple, lavariableestnomméeled,carelle fait référenceà labroche à laquelle la LED est connectée. Chaque fois que vous souhaiterez vousréférerà labroche13,vouspourrezdésormaisutiliser lemotled.Cette approchepeutvoussemblergénérerplusdetravailaupremierabord,maissivousvoulezplustard utiliser la broche 11, vous n’auriez ainsi qu’à changer la valeur affectée à lavariableledune fois dans le code ; toutes les références àledqui suivent entiendrontcompteautomatiquement.Vousgagnerezdoncénormémentdetemps,puisquevous n’aurez pas à passer en revue le code pour remplacer par 11 toutes lesoccurrencesde13.
Ladéclarationayantétéeffectuée,lecodeentredanslafonctionsetup().
LesfonctionsLesdeuxsectionsquisuiventsontdesfonctionsquicommencentparlemot-clévoid:voidsetupetvoidloop.Une fonction est un bloc de plusieurs lignes decode qui effectue une tâche, laquelle est souvent répétitive. Plutôt que d’écrire lemêmecode encore et encore, vousdéfinissezune fonctionquevouspouvez ensuiteappelerautantdefoisquenécessaire.
Rappelez-vous comment vous procédez pour monter un meuble IKEA. Si voussouhaitezécrirelesinstructionsàsuivresousformedecodeàl’aided’unefonction,elleressembleraitàceci:
voidmonterUnMeuble(){
acheterlemeuble;
déballerlemeuble;
lirelesinstructions;
assemblerlesmorceaux;
contemplervotretravail;
jurerqu’onnevousyreprendraplus;
}
Laprochainefoisquevoussouhaiterezsuivrecesinstructions,plutôtquedelesécrirede nouveau une à une, vous pourrez simplement appeler la procédure nommée
monterUnMeuble().
Ilexisteuneconventiondenommagepourlesvariablesetfonctionslorsquelenomestcomposédeplusieursmots.Commevousnepouvezpasutiliserd’espace,vousdeveztrouverunmoyenpourindiqueroùcommenceetoùsetermineunmotdanslenom;autrement, il seraitpénibleà lire.Uneconventionconsisteàmettreenmajuscule lapremière lettre de chaque mot, à commencer par le second, ce que l’on appellel’écritureDromaDaire.Celaaméliorelalisibilitédevotrecodelorsquevousdevezlepasserenrevue.Jevousrecommandedoncderespectercetterègledanstousvoscroquispourvotreplusgrandbénéficeetpourceluideceuxquilirontvotrecode!
Lemotvoidestutiliséquandlafonctionneretourneaucunevaleur,etlemotquisuitestlenomdelafonctionenquestion.Danscertainscas,vouspourriezsouhaiterquela fonction soit alimentée par une valeur et qu’elle en retourne une, un peu commevoussaisissezlesnombresàadditionnersurunecalculatricequiaffichelasomme.
Lesdeuxdéclarationdefonctionsvoidsetupetvoidloopdoivent figurerdans tout croquis Arduino ; c’est le minimum requis pour un téléversement. Vouspouvezensuiteajoutervospropresfonctionspouraccomplirdestâchesspécifiques.Pourl’instant,retenezqu’ilfautfairefigurervoidsetupetvoidloopdanstoutcroquisArduinoquevouscréez.Sanscesfonctions, lecroquisnesecompilerapas.
setupsetupest la première fonctionqui sera exécutéepar l’Arduino.Sonobjet est deconfigurer l’Arduino, en assignant des valeurs et des propriétés à la carte qui nechangerontpaspendantlefonctionnement.Lafonctionsetupressembleàceci:
//Laroutinesetupestexécutéequandvouspressez
le
boutonreset:
voidsetup(){
//Fairedelabrochenumériqueledunesortie.
pinMode(led,OUTPUT);
}
Notezàl’écranqueletextevoidsetupestenorange.Cettecouleurindiquequele logiciel Arduino la reconnaît comme une fonction interne, à l’inverse d’unefonction que vous auriez écrite vous-même. Si vousmodifiez la casse desmots enécrivantparexempleVoidSetup,vousverrezqu’ilssontréaffichésennoir,parcequ’ilsnesontplusreconnuscommetels.C’estlapreuvequelelangagedel’Arduino
distingue lesmajuscules desminuscules (il est sensible à la casse).C’est un pointdont il faut se rappeler, surtout tard la nuit, quand votre code s’obstine à ne pasfonctionner.
Lecorpsdelafonctionsetupsetrouveentrelesdeuxaccolades{et}.Chaquefonction doit comporter cette paire d’accolades. Si vous avez trop ou trop peud’accolades, le code ne compilera pas, et vous recevrez un message d’erreur quiressembleàceluidelaFigure4-10(regardezenbas).
pinMode()LafonctionpinMode()configureunebrocheparticulièreensortieouenentrée :soitpourémettre,soitpourrecevoirdesdonnées.Lafonctionprenddeuxparamètresd’entrée:
» pin:lenumérodelabrochequevoussouhaitezmodifier;
» mode:soitINPUT,soitOUTPUT.
Dans le croquis Blink, après la ligne de commentaires, vous arrivez à cetteinstruction:
pinMode(led,OUTPUT);
FIGURE4-10LelogicielArduinovousditquevousavezoubliéuneaccolade.
LemotpinModeestenorange.Commementionnéprécédemment,l’orangeindiquequ’Arduinoreconnaîticiunefonctioninterne.OUTPUTestaussicoloréenbleu,cequipermetde l’identifiercommeuneconstante,c’est-à-direunevariableprédéfiniepar le langageArduino.Dansnotrecas, la constante indique lemodede labroche.Vousenapprendrezplusausujetdesconstantesauchapitre7.
C’esttoutcequevousdevezsavoirpoursetup.Voyonslafonctionloop().
loop()La fonction loop() est affichée en orange, car Arduino reconnaît là une de sesfonctions internes. C’est une fonction, mais au lieu de n’être exécutée qu’une foiscommesetup(),elleestexécutéeencoreetencorejusqu’àcequevouspressiezle
boutonResetsurlacarteArduinoouquevouscoupiezlecourant.Voicilecorpsdelafonction:
voidloop(){
digitalWrite(led,HIGH);//AllumerlaLED
delay(1000);//Attendreune
seconde
digitalWrite(led,LOW);//ÉteindrelaLED
delay(1000);//Attendreune
seconde
}
digitalWrite()
Danslafonctionloop(),voustrouvezdenouveaudesaccoladesetdeuxfonctionsenorange:digitalWrite()etdelay().
LapremièreestdigitalWrite():
digitalWrite(led,HIGH);//AllumerlaLED
Le commentaire indique « Allumer la LED... » , mais qu’est-ce que cela signifieexactement ? La fonction digitalWrite() définit un état électrique sur labroche. Comme mentionné au chapitre 2, les broches numériques n’ont que deuxétats:haut(HIGH)oubas(LOW),cequicorrespondauniveaudelatensionquileurestappliquéeenréférenceàlatensiondanslacarte.
UnArduinoUnoabesoind’unetensionde12V,fournieparunesourceUSBouunealimentationexterne,quelacarteArduinoréduità5Vpoursessortiesnumériques.Cela signifie que la valeurHIGH est équivalente à une tension de 5 V, et que lavaleurLOWestéquivalenteàunetensionde0V.
Lafonctionattenddeuxparamètrespourdémarrer:
» pin:lenumérodelabrocheàfairevarier;
» value:unedesdeuxvaleursbinairespossibles,soitHIGH,soitLOW.
En conséquence,digitalWrite(led,HIGH) signifie « envoyer 5 V sur labroche13del’Arduino»,cequiallumelaLED.Autrementdit,«écrireunevaleurbinaire1surlabrochenumérique13».
delay()
Enpoursuivantlalecturedanslaboucleloop(),voustrouvezcetteligne:
delay(1000);//Attendreuneseconde
Cettefonctionarrêteleprogrammedurantuncertaintemps,indiquéenmillisecondes.Dans ce cas, la valeur est de 1000 millisecondes, ce qui correspond donc à uneseconde. Durant cet intervalle, rien ne se passe. Votre Arduino attend seulementl’expirationdudélai.
La ligne suivante dans le croquis est un second appel à la fonctiondigitalWrite(),quiforceàLOWlabrochedesortie:
digitalWrite(led,LOW);//ÉteindrelaLED
Celaindiqueàl’Arduinoqu’ildoitappliquerunetensionde0Vàlabroche13,cequi éteint la LED. La ligne est suivie d’une autre occurrence dedelay() poursuspendredenouveauleprogrammedurantuneseconde:
delay(1000);//Attendreuneseconde
Aprèscetteinstruction,leprogrammerevientaudébutdelaboucleetlaséquenceserépète,àl’infini.
Ainsi,laboucleestlasuivante:
» Envoyer5Vsurlabroche13,allumantlaLED.
» Attendreuneseconde.
» Envoyer0Vsurlabroche13,éteignantlaLED.
» Attendreuneseconde.
Commevouslevoyez,celafaitclignoterlaLED!
FaireclignoterplusvivementJ’aimentionné la broche 13 plusieurs fois dans ce chapitre. Pourquoi cette brochefait-elleclignoterlaLEDsurlacarteArduino?LaLEDlibelléeLestconnectéeaumêmecircuitquelabroche13.Surlespremièrescartes,ilétaitnécessaired’ajouteruneLED.CommeuneLEDest tellementutilepourdébogueretgénérerunsignal, ils’entrouvedésormaisunesoudéeàdemeuresurlescartes.
Maispourallerplus loin,vousaurezbesoind’uneLEDprovenantdevotrekit.OntrouvedesLEDdetoutesformes,couleurs,ettailles,maiselledevraitressembleràcelleprésentéesurlaFigure4-11.
FIGURE4-11UneLED,prêteàêtreutilisée.
JetezunœilàvotreLED,etremarquezqu’unepatteestpluslonguequel’autre.Placezlalongue(l’anode,ou+)surlabroche13,etlacourte(lacathode,ou-)surlabrocheGND(lamasse), justeàcôté.VousverrezquelaLEDclignotecommecellequiestsoudée,maisplusvivementselon le typedeLEDquevousutilisez. Insérez laLEDcommesurlaFigure4-12.
LadescriptiondelafonctiondigitalWrite()donnéedanslasectionprécédentevous permet de savoir que votre Arduino envoie 5 V sur la broche 13 lorsqu’onspécifieHIGH.C’estpeut-êtreune tension trop fortepour laplupartdesLED.Fortheureusement,uneautrefonctionnalitédelabroche13estd’intégrerunerésistancederappel (pull-down). Elle permet d’appliquer une tension supportable à votre LEDpourluigarantirunevielongueetheureuse.
FIGURE4-12LaLEDsurlabroche13del’Arduino.
BidouillerlecroquisJ’aipassé lecroquisendétail,et j’espèreque toutcelaafaitsenspourvous.Quoiqu’il en soit, la meilleure manière de comprendre ce qui se passe, c’estd’expérimenter!Essayezdemodifierlesdélaispourvoirlerésultatquecelaproduit.Voiciquelqueschosesquevouspouveztenter:
» FaireclignoterlaLEDensortedegénérerunsignalSOS.
» VoiràquellefréquencevousdevezfaireclignoterlaLEDpour
qu’ellesembletoutletempsallumée(enjouantsurlesduréesdes
pauses).
IIPlongerdanslesprojetsArduino
DANSCETTEPARTIE
Prêtpourleschosessérieuses?Lapartie1decelivreconstituait
uneintroduction.Danscettesecondepartie,vousenapprendrez
plussurlesoutilsdeprototypagedontvousavezbesoinpour
créervosprojets.Vousplongerezlégèrementdanslathéoriede
l’électroniqueavantdereveniràlapratiquedevotrecarte
Arduino.Delà,vousdécouvrirezdenouvelleschoses
intéressantessurlepotentieldevotreArduinoenréalisant
quelquesexemplesdebase.Ilnevousresteraqu’àpenseràla
manièredontvouspourriezutiliserArduinopourréaliservos
propresprojets.
D
Chapitre5Lesbonsoutilsfontlebonouvrier
DANSCECHAPITRE
» Laplatined’essai,uncanevaspourlescircuits
» Sedoterdesbonsoutils
» Devenirunfinlimierélectroniciengrâceàunmultimètre
ans le Chapitre 4, j’ai présenté une des applications les plus élémentairesd’Arduino:faireclignoteruneLED.Cetteapplicationn’utilisequel’Arduinoetquelqueslignesdecodedéjàécrites.Quoiqu’ilsoitamusantdefaireclignoterune
LED, vous pouvez utiliser Arduino pour réaliser toutes sortes de choses – desinstallations interactives,uncontrôled’appareilménager,des échangesvia Internet,pourneciterquecelles-là.
Danscechapitre,vousétendrezvosconnaissancesendécouvrantl’artduprototypageetendécouvrantcommentutiliserquelquesoutilsdebasepourfaireplusavecvotreArduino.Cesoutilsvouspermettentderéaliserdescircuitstemporairespouressayerde nouveaux composants, tester des circuits, et plus généralement pour créer desprototypessimples.
LesbonsoutilspourtravaillerL’objet du prototypage est d’explorer des idées, et c’est justement ce pour quoiArduinoaétéconçu.Lathéorieestimportante,maisvousapprenezsouventplusviteetbienmieuxenprocédantparexpérimentation.
Vousdisposezd’unvasteéventaild’outilspourvousaiderdansvosexpérimentations.Voustrouvereziciunebrèvelistedeceuxquejerecommande.Lesplatinesd’essaietlescavalierssetrouventdanslaplupartdeskits;ilssontessentielspourréaliserlescircuitspourvotreprojetArduino.Lespincesàbec finnesontpas indispensables,maishautementrecommandées.
Laplatined’essai
La platine d’essai constitue l’assise de votre prototype. C’est la base sur laquellevous pouvez monter vos circuits. Elle permet d’utiliser temporairement descomposants au lieu de devoir les souder pour les tenir en place (il est questiondusoudageauChapitre10).
Laplatined’essaiestcomposéed’unboîtierenplastiquecomportantdeslignesetdescolonnes de trous, sous lesquelles courent des rails de cuivre. Ces rails vouspermettentdeconnecterrapidementetfacilementlescomposants.
On trouve des platines d’essai de différentes formes et dimensions. La Figure 5-1présenteuneplatined’essaidesplus standard.Sivousdeviez retirer lacoqueenplastiquecrème,vousverriezdes railsencuivrequicourent le longdechacundesgrandscôtésdelaplatine,etd’autresrailspluscourtsdanslesensdelalargeurquirelientlestrousdechaquedemi-tangée(lesliaisonssontinterrompuesaumilieu).
Les rails latéraux sur la grande longueur sont généralement utilisés pour fournir lasourced’alimentation (PWR) et lamasse (GND). Ils sont parfois libellées avecunsymbolepositif (+)ounégatif (-) ouune ligne rougeetnoireou rougeetbleue.Lerougecorrespondtoujoursaupositif(+),tandisquelenoiroulebleucorrespondaunégatif(-).
À la base, un « rail » PWRouGNDest une source de courant ou unemasse.Lescircuits ont toujours besoin de courant pour leurs différentes fonctions, et il arrivesouvent qu’un point de branchement ne suffise pas. Lorsque vous devez relierplusieurscomposantsàlamêmesourcedecourantouàlamasse,vouslesreliezendifférentspointsdurailcorrespondantenutilisantaubesoindesstraps,dont il seraquestionplusloin.Unrailpermetainsidedémultiplierlespossibilitésdeconnexions.
FIGURE5-1Uneplatined’essai.
Quoiquelesrailssoientlibellés,vouspouvezlesutiliserpourn’importequelusage.Toutefois, respecter les conventionspermet devous assurer qued’autres personnespourrontfacilementcomprendrevotrecircuit;jevousconseilledoncdelefaire.
Sur le reste de la surfacede la platined’essai, on trouvedenombreux rails courtsparallèlesauxpetitscôtésdelaplatine,séparésparunetranchéeaumilieu.Laraisond’être principale de cette tranchée est de permettre l’insertion de circuits intégrés(tels que le registre à décalage 74HC595 décrit au chapitre 15), car la tranchéesignifiequelespattesquisetrouventd’uncôténesontpasconnectéesàcellesquisetrouventde l’autre.Beaucoupd’autrescomposantspeuvent aussi tirerpartidecettetranchée, dont les boutons-poussoirs (dont il est question au chapitre 5) et lesphotocoupleurs(voirlechapitrebonus).
Lorsque vous placez un strap ou la patte d’un composant dans l’un des trous, vousdevezsentirune résistanceà l’enfoncement.C’est l’effetdu ressortquimaintient lestrapou lapatteenplacedans le trou. Il serreassezpour tenir leschosesenplacetandisquevoustravaillezsurvotreprojetsurunbureau,maispastrop,pourquevouspuissiezfacilementretirerlestrapoulapatteentirantverticalementavecvosdoigts.
J’aivudesgensrangeruneplatined’essaidansunboîtierpourfinaliserleurprojet,mais ce n’est pas conseillé. Les composants les plus petits ou les straps les pluslâchespeuventfacilementsedéconnecter,etcepeutêtreparticulièrementpéniblederepérer ce qui ne fonctionne plus. Si vous travaillez sur un projet et que voussouhaitez le révéler au grand jour, vous devriez vous mettre au fer à souder (lasoudureest traitéeauchapitre10)pour créer un circuit définitif.C’est cequi vouspermettradefairedurervosprojets.
LesstrapsLes straps (représentés sur laFigure5-2) sont essentiels pour utiliser votre platined’essai.Cesontdesfilsisolésassezcourtsquipermettentdereliervoscomposantsaux rangéesdevotreplatined’essai, àd’autrescomposants,etàvotreArduino.Unstrapn’estpasdifférentd’unfilengénéral,mais ilestgénéralementcoupécourtenpossèdeengénéraldesbrochesisoléesàsesextrémités.
Vouspouveztrouverdesfils isolésn’importeoù.Ilpeuts’agirdefilsépaisutiliséspour brancher n’importe quel matériel électroménager, ou des fils bien plus fins,commeceuxutiliséspourdesécouteurs.Àlabase,unfil isoléestunfilmétalliqueconducteur entouré d’un isolant qui vous protège de l’électricité (quoiqueavec5ou12>V,vousne risquez rien), et qui protège le signal électriquede touteinterférenceextérieure.
Le fil le plus utilisé dans ce livre (et qui vous sera le plus utile dans vos projetsArduino)pourraitêtreclassédanslacatégoriedesfilsd’équipementisolés.Cetypede fil est généralement utilisé à petite échelle pour des applications électriques àbassetension.
Lefilquevousutilisezestd’unedecesdeuxsortes :monobrinoumultibrin.Unfilmonobrin est conçupour conserver la formequ’on lui donne,mais si vous leplieztropaumêmeendroit,ilserompt.C’estpourquoicetypedefilestutilepourréalisersoigneusementdesconnexionssurvotreplatined’essaidumomentquevousn’aurezpasàtroplesmodifier.
FIGURE5-2Unesélectiondestraps.
Un fil multibrin peut avoir le même diamètre qu’unmonobrin, mais au lieu d’êtrecomposéd’unseulfil, ilestcomposédeplusieurs,quisont trèsfins.Cespetitsfilssonttorsadés,cequidonneaufilplusderésistanceàlacourburequ’unfilmonobrin.Cette conception est similaire à celle des câbles de suspension des ponts. Les filsmultibrinssontparticulièrementadaptésauxconnexionsqu’onchangesouvent,et ilsdurentpluslongtemps,maisilsdoiventêtreterminéspardesbrochesmâles.
Vous pouvez couper les straps vous-même, mais on en trouve aussi des packspratiquesdedifférentescouleursetdedifférentes longueurs.L’uneet l’autredecessolutionsontdesavantagesetdesinconvénients.
Couper les fils vous-même est significativementmeilleurmarché, car vous pouvezacheter une grosse bobine de fil.D’un autre côté, si vous souhaitez disposer d’une
gamme de couleurs, vous devrez acheter une bobine pour chacune, ce qui peuts’avéreruninvestissementconsidérablepourvotrepremiercircuit.Lespacksnevouscoûteront pas aussi cher au début, et vous donneront accès à la variété que vousrecherchez.Vouspourrezacheterdesgrossesbobineslorsquevousserezcertaind’enavoirlebesoin.
Aussi, lorsque vous envisagez de couper les fils, n’oubliez pas la différence definition des fils faitsmaison. Les filsmonobrins sont généralement identiques, quevous lescoupiezvous-mêmeouquevous les fassiezcouper,mais ils sedétériorentplus rapidement s’ils sont courbés. Les filsmultibrins durent plus longtemps,maislorsqu’ilssontcoupéssurunebobine,ilspeuvents’effilocherauxextrémitéscommeauboutd’unfildelaine.Vousdevezlestripotersouventenlestorsadantentrevotrepouce et votre index entre deux usages pour vous assurer que les petits fils restentaussidroitsetliésquepossible.
Les straps multibrins multicolores vendus en packs présentent l’intérêt d’être soitétamés pour rigidifier les bouts, soit équipés de broches de connexion. Cettefabrication garantit que l’extrémité est aussi rigide qu’un fil monobrin, tout enbénéficiantdelasouplessedumultibrin.
Dansl’idéal,vousdevriezdisposerd’unpackdestrapsmultibrinsmulticolorespourcommencer.Cesontlescomposantslesplusversatileset lesplusdurablesdevotrekit.Ilestbond’enavoirtouteunevariétépourfairefaceàn’importequellesituation.
PinceàbecfinUnepince à bec fin, représentée sur laFigure5-3, est commeune pince classique,mais pointue. Elle est idéale pour tenir des composantsminuscules. L’électroniquepeut s’avérer un art délicat, et il est très facile de déformer les fragiles pattes descomposants lorsqu’on les enfonce dans une platine d’essai.Ces pinces ne sont pasindispensables, mais elles permettent de faire preuve de plus de finesse et deprécisionenconstruisantvoscircuits.
FIGURE5-3Lapinceàbecfinunchoixdeconnaisseur.
LemultimètreUnmultimètre estun instrumentpourmesurerdes tensions (envolts), des intensités(en ampères) et des résistances (en ohms). Il peut vous indiquer les valeurs dedifférents composants et ce qu’il se passe en différents endroits de votre circuit.Commevousnepouvezpasvoircequisepassedansuncircuitoudansuncomposant,le multimètre est essentiel pour comprendre son fonctionnement interne. Sansmultimètre, vous devrez vous en remettre au pifomètre, ce qui est toujours unemauvaiseidéeenélectronique.
LaFigure5-4représenteunmultimètrenumériquedemilieudegamme.Laplupartdesmultimètresproposent:
» Unaffichagenumérique:C’estlemêmequesurvotreréveil
digital.Commelenombredechiffresestlimité,ceuxquifigurent
aprèsladécimalesedéplacentenfonctiondel’importancedu
nombreaffiché.Lenombreestproduitparlemultimètreen
ajustantautomatiquementlecalibre(l’ordredegrandeurdela
mesuremaximaleàeffectuer),maissivotremultimètren’estpas
capabled’ajusterainsilecalibre,vousdevrezl’ajusteràlamainen
changeantdeplageaveclecommutateurrotatif.
FIGURE5-4Unbonmultimètrenumériquepeutsouventsauvervotreprojet.
» Unemolettedesélectiondumodeetdelaplage:Cettemolette
vouspermetdechoisirentrelesdifférentesfonctionsdu
multimètre.Ilpeuts’agirdemesurerunetension,uneintensité,une
résistance,avecplusieurscalibresouplagesdemesurepour
chacunedecesunités,commemesurerunerésistancejusqu’àcent,
mille,dixmille,centmilleouunmilliond’ohms.Lesmeilleurs
multimètresdisposentaussid’untestdecontinuitéquivousindique
sivosconnexionssontbonnes,c’est-à-direquandellesn’opposent
qu’unerésistanceinfimeaupassageducourant.Cette
fonctionnalitém’aévitédepasserenrevuependantdesheures
touteslesétapesdecertainsprojets,etjerecommandedonc
définitivementd’investirdansunbonmultimètredemilieude
gammequiendispose.
» Unjeudesondes:Cesontlesfilséquipésdepointesquevous
utilisezpourtestervotrecircuit.Laplupartdesmultimètressont
livrésavecdeuxsondesressemblantàdesbroches,qu’onmeten
contactaveclespointsdemesuredésirés.Vouspouvezaussi
trouverdessondesdotéesdepincescrocodiles.Éventuellement,
vouspouvezachetercetypedepincespourlesconnecteraux
pointes.Ellessontparticulièrementutilespourretenirlesfils.
» Plusieursprisesd’entrée:Lessondespeuventêtrebranchées
dansdifférentesprisesdumultimètreselonl’usage.Danslecas
présent,cesprisessontlibelléesA,mA,COMetVΩHz.LapriselibelléeAsertàmesurerl’intensitédecourantsimportantsen
ampères(A),jusqu’à20A.Sachezquelaplupartdesmultimètresne
peuventsupporteruntelcourantque10secondesauplus.Dansce
modequenousn’utiliseronspasunesondedoitêtrebranchéedans
lapriseA(lasonderouge),etl’autredanslapriseCOM(lasonde
noire).LaprisemA(sonderouge)estpourlescourantsdemoins
de500mA.LapriseCOM(sondenoire)estuneabréviationde
Common(commun),etconstitueunpointderéférencepourvos
mesures.Danslaplupartdescas,c’estlamassedevotrecircuit,et
onybranchetoujourslasondenoire.LaprisemarquéeVΩHz(sonderouge)estutiliséepourmesurerlatension(enV,pourvolts),
larésistance(enΩ,pourohms),etlafréquence(enHz,pourhertz)
entrecettepriseetlapriseCOM(sondenoire).
Utiliserlemultimètrepourmesurerunetension,uneintensité,unerésistance
Toutarduinistesedoitdemaîtrisercertainestechniquesdebasepourvérifierlebonfonctionnementdesoncircuit.Lesvolts, lesampèreset lesohmspeuvententhéorieêtrecalculésàl’avance(commevousl’apprendrezauchapitre6),maisdanslemonderéel, nombrede facteurs peuvent intervenir, quevousnepouvez anticiper.Si undevoscomposantsestdéfaillantousiuneconnexionopposeunerésistance,vouspouvezperdre des heures à localiser le problème, et c’est là où un multimètre devientessentiel pour le fairevite.Dans cette section,vous apprenez àmesurer la tension,l’intensitéetlarésistance,ainsiqu’àvérifierlacontinuitédevosconnexions.
Mesurerlatension(envolts)dansun
circuitIlestessentieldesavoirmesurerunetension.Cepeutêtrepourtesterlatensiond’unebatterieouindirectementcelleducourantparcourantuncomposant.Sivotreprojetnes’illuminepasounevrombitpas,vousavezpeut-êtreuneconnexiondébranchéeoubienvousavezenvoyétropdecourant,carbonisantcequevousessayiezd’alimenter.Ilfautalorstesterlatensiondansvotrecircuitetvousassurerqu’elleestbonne.
Toutd’abord,vousdevezvérifierquelessondesdevotremultimètresontbranchéesdans lesbonnesprises.Cesprisesdoiventporter lamentionVpourvoltsencequiconcerne lasonderouge,etCOMpour lamasseencequiconcerna lasondenoire.Ensuite, vous devez configurer votre multimètre pour mesurer un courant continu(DC), ce qui peut être représenté par un signe V suivi de deux traits droits, paroppositionaucourantalternatif (AC),quiest représentépar lesigneVsuivi d’unevague.Dansmoncas, lemultimètredisposed’unboutonpourbasculer entreACetDC.
Latensionestmesuréeenparallèle,cequisignifiequevousdevezvouspositionnerdepartetd’autrede lapartieducircuitdontvoussouhaitezmesurer la tensionauxbornes.LaFigure5-5vousmontrecommentprocéder.Lasondepositivedoittoujourssetrouverducôtépositif,etlasondenégativedel’autre.Sivousinversezlessondes,vousn’endommagerezpasvotrecircuit,maisvous lirezunevaleurnégativeau lieud’unevaleurpositive.
FIGURE5-5Unmultimètreestutiliséenparallèlepourmesurerunetension.
Une bonne manière de tester voter multimètre est de mesure la tension entre lesbroches 5 V et la broche GND de votre Arduino. Vérifiez que l’Arduino est bienbranché, et connectez un strap sur chaque broche afin de vous y connecter plusfacilementaveclessondes.Placezlasonderougesurlestrap5VetlasondenoiresurlestrapGND.Unevaleurde5Vdevraits’afficheràl’écrandevotremultimètre,vous prouvant ainsi que votre Arduino fournitbien une tension de 5 volts, commeattendu.
Mesurerl’intensité(enampères)dansuncircuitVousavezpeut-êtrelabonnetension,maisvouspourrieznepasavoirassezdecourantpour alimenter la lumière ou le moteur que vous souhaitez piloter. La meilleuremanièredelesavoir,c’estdemesurerl’intensitéconsomméeetlacompareràcequepeutfournirl’alimentationutilisée.
Vérifiez que vos sondes sont connectées aux bonnes prises dans le multimètre.Quelquesmultimètresproposentdeuxprises,unepourlescourantstrèsintenses,dontl’intensité estmesurée en ampères (A), et une autre pour les courants plus faibles,dontl’intensitéestmesuréeenmilliampères(mA).Généralement,lescircuitsArduinodebasen’ontbesoinquedequelquesmilliampères,maissivousutilisezdeslampes,desmoteursoud’autresmatériels,vousdevriezmesurerenampères.Tournezensuitelamolettepoursélectionnerleboncalibre:A,mA,voireμA(microampères).
L’intensitésemesureensérie,cequisignifiequequelquechosedoitêtredébranchépourinsérerlemultimètredanslacontinuitédescomposantsducircuitparcourusparlecourant.Lecourantdoitpasserdanslemultimètrecommesicederniern’étaitqu’uncomposantdeplus.LaFigure5-6vousmontrecommentprocéder.
Si vous réalisez un circuit semblable à celui de la figure sur votre platine d’essai,vouspourrezutiliserdeuxstrapspourcouperlecircuitenunpoint,cequipermettrade placer votre multimètre entre les deux pour faire la jonction. Cela permettrad’afficherl’intensitéducourantdanslecircuit.
Note : Si vous faites clignoter quelque chose, vous faites sans doute varierl’intensitéducourant.Stabilisezlecourantpourenmesurerl’intensitémaximale.
FIGURE5-6Unmultimètreestutiliséensériepourmesureruneintensité.
Mesurerlarésistance(enohms)d’unerésistancePourlirelavaleurd’unerésistance,ilfautapprendrelecodedecouleurs.SInon,vouspouvezlamesureràl’aided’unmultimètre.RéglezlemultimètresurOhms,ouΩ,etplacezunesondesurchaquepattedelarésistancenonmontéedansuncircuit,commesurlaFigure5-7.
FIGURE5-7Mesurerlarésistanced’unerésistance.
Mesurerlarésistance(enohms)d’unpotentiomètreEnmatière de potentiomètres,mieux vaut s’assurer que vous couvrez bien toute laplage de résistance annoncée. Les potentiomètres sont comme des résistancespassives, mais ils ont trois pattes. Si vous connectez les sondes sur les patteslatérales,vousdevriezpouvoirmesurer la résistancemaximaledupotentiomètre, etcette mesure ne devrait pas varier, que vous actionniez ou non la molette dupotentiomètre.Sivousplacezlessondessurlapatteducentreetuneautredespattes,vous devriez pouvoir mesurer la valeur variable de la résistance, laquelle changequandvoustournezlamolette,commesurlaFigure5-8.
FIGURE5-8Trouverlarésistanced’unpotentiomètre.
Testerlacontinuité(enbips)devotrecircuitSivousdisposezd’unmultimètredequalité,unsymbolefigurantunhaut-parleurouunsondevraitfigurersursamolette.C’est le testeurdecontinuité.Vousl’utilisezpourvérifier que les parties de votre circuit sont connectées, et le multimètre vousl’indique en émettant un son. Un son continu signifie que la connexion est bonne.Tournezlamolettesurlesymboledutestdecontinuitéetfaitestoucherlesextrémitésdesdeuxsondespourvérifierqueletestfonctionne.Sivousentendezunsoncontinu,laconnexionestbonne.Placezlessondesdepartetd’autredelaconnexionàtester,commesurlaFigure5-9.
D
Chapitre6Uneinitiationàl’électricitéetàlacircuiterie
DANSCECHAPITRE
» Maîtriserl’électricité
» Voirourevoirquelqueséquationsutiles
» Vousyretrouverdanslesschémasdecircuits
» Apprendrelecodedecouleursdesrésistances
anscechapitre,jevousproposedevousinitierauxfondamentauxdel’électricité.Dans les chapitres suivants, vous devrez rentrerer dans les détails del’électronique ; il est donc importantquevousdisposiezd’uneconnaissancede
baseducomportementdel’électricitédansvotrecircuit.
Ce qui est formidable avec Arduino, c’est que vous n’avez pas besoin d’étudierl’électroniquedurantdesannéesavantde l’utiliser.Ceciétant,mieuxvautconnaîtreunpeudethéoriepourassurervotrepratique.Danscechapitre,vousallezdécouvrirquelqueséquationspourvousaiderà réaliseruncircuitéquilibréetefficient ;vousverrezaussicommentlirelesschémasdecircuitsquivousguidentpourréaliservotrecircuitetapprendrezlecodedecouleursdesrésistances.
Comprendrel’électricitéL’électricitéestl’unedeschosesquelesgensconsidèrentcommeallantdesoi,maisqu’ilsontbiendumalàdéfinir.Pour lediresimplement, l’électricitéestuneformed’énergierésultantdel’existencedeparticuleschargées(desélectrons),considéréessoit statiquement sous la forme de charges, soit dynamiquement sous la forme d’unfluxdecharge,doncuncourant.
Cette définition de l’électricité se situe au niveau atomique, ce qui est bien pluscomplexe que ce dont vous avez besoin pour créer la circuiterie de vos projets
Arduino. Il vous suffira de savoir que l’électricité est de l’énergie, et qu’elle semanifestesousformed’uncourantquicirculeentreunpôleplusetunpôlemoins.
Pourillustrerl’idéedufluxqu’estlecourant,observonsdeplusprèsunsimplecircuitdotéd’uninterrupteurpourallumerunelumière(Figure6-1).Cecircuitestsemblableà ceux que vous avez sans doute pu réaliser lors des cours de physique oud’électronique à l’école sans utiliser Arduino, avec seulement une batterie, uninterrupteur,unerésistanceetuneampoule.
FIGURE6-1Uncircuitdebasepourcontrôlerunelampe.
Danscecircuit,on trouveune sourced’alimentationélectrique sous la formed’unebatterie.Sapuissanceestexpriméeenwatts,faitedetension(envolts)etd’intensité(enampères).La tensionet l’intensité sontgénéréespar labornepositive (+)de labatterie.
Vous pouvez utiliser un interrupteur pour contrôler le courant dans le circuit.L’interrupteurpeutêtresoitouvert,cequicoupelecircuitetarrêtelacirculationducourant,soitfermé,cequifermelecircuitetluipermetdefonctionner.
Lecourantpeutêtreutilisépourdiversesapplications.Danslecasprésent,lecircuitalimenteuneLED.LabatteriealimentelaLEDavec4,5V,cequiestplusqu’uneLEDabesoinpourgénérerdelalumière.SilaLEDdevaitêtrealimentéeparunetensionaussi élevée,vous risqueriezde l’endommager.Pourcette raison,vousavezbesoind’une résistance afin qu’elle « résiste » et réduise la tension. Inversement, si latensionesttropfaible,laLEDnebrillerapasautantqu’ellelepeut.
Pourcirculer,lecourantdoitpouvoirrejoindrelamassesurlabornenégative(-)delabatterie.LaLED tire autantdecourantquenécessairepourbriller autantqu’ellepeut.
En tirantdu courant, laLED résiste aussi à son flux, s’assurantque seul le courantdont elle a besoin lui parvient. Si la borne positive est directement connectée à labornenégative,toutel’énergiestockéedanslapileseraexploitéepourcréerleplus
fortcourantpossible.C’estcequ’onappelleuncourt-cicuit.Lapilepeutrapidementexploserparsurchauffe.
Lesprincipesdebasequevousdevezmaîtrisersontque:
» Uncircuitélectriqueest,commesonnomlesuggère,unsystème
circulant,commeunetuyauteried’eau.
» Lecircuitexploitelecourantfourniparunealimentationdansune
bouclefermée.
» Silecircuitneconsommepaslecourant,cecourantn’estplus
freinéetvaendommagerlecircuitetlasource.
» Lamanièrelaplusbasiqued’interagiravecuncircuitconsisteà
l’ouvrir.Encontrôlantquandetoùlecourantcircule,vouscontrôlez
toussesusagesdanslecircuit.
DeséquationspourcréervoscircuitsVousconnaissezmaintenantlescaractéristiquesdel’électricité:
» Latensionenvolts(VouU),comme12V.
» L’intensitéenampères(I),comme3A.
» Lapuissanceenwatts(P),comme36W.
» Larésistanceenohms(R),comme150Ω.
Cescaractéristiquespeuventêtrequantifiéesetmisesenéquation,cequivouspermetd’équilibrervoscircuitsafindevousassurerquetoutyfonctionneracommeprévu.Ilexiste bien des équations pour déterminer toutes sortes de caractéristiques dans uncircuit.Danscettesection,jevaistraiterdesdeuxéquationslesplusélémentairesquivousserontlesplusutileslorsquevoustravaillerezavecunArduino:laloid’OhmetlaloideJoule.
Laloid’OhmLarelationlaplusimportanteàmaîtriserrelielatension,l’intensitéetlarésistance.En 1827, Georg Simon Ohm a découvert que la tension et l’intensité étaient
directement proportionnelles si on appliquait une équation des plus simples(souvenez-vousque«I»correspondàdesampères):
V=IxR
Cette équation est connue sous le nom loi d’Ohm. Il est possible de reformulerl’équationpourobtenirlavaleurrecherchéeàpartirdesdeuxautres:
I=V/R
ou
R=V/I
Vouspouvezvoircetteéquationàl’œuvredansuncircuit.LaFigure6-2vousmontreuncircuitdesplussimplescomprenantunealimentationetunerésistance.
FIGURE6-2Unealimentationetunerésistance.
Dansdenombreuxcas,vousconnaîtrezlatensiondevotrealimentationetlavaleurdelarésistance,sibienquevouspourreztrouverl’intensitéducourantquivacirculer:
I=V/R=4,5V/150Ω=0,03A
Cette équation fonctionne avec toutes les combinaisons de valeurs dont vousdisposez:
R=V/I=4,5V/0,03A=150Ω
V=IxR=0,03Ax150Ω=4,5V
Le moyen le plus simple de se souvenir de la loi d’Ohm est une pyramide (voirFigure 6-3). Enmasquant mentalement un des trois éléments de la pyramide, vousretrouvezl’équation.
FIGURE6-3Lapyramidedelaloid’Ohm.
Je vous entends crier : « Mais à quoi ce calcul va me servir pour utiliser monArduino?».Voyonsunexempleconcretd’unesituationquevouspourriezrencontreravecuncircuitArduino.
Les broches numériques d’unArduino peuvent fournir jusqu’à 5V, et c’est donc latensionlapluscommunequevousutiliserez.UneLEDconstituel’unedessortieslesplusélémentairesquevoussouhaiterezcontrôler,etuneLEDstandardnécessiteunetensionde2Vetuneintensitéde30milliampères,ou30mA(0,03A).
Sivousbranchez laLEDdirectementsur l’alimentation,vousverrez laLEDbrillerintensémentavantqu’unnuagedefuméeetuneodeurdebrûlénesedégagent.Voilàceque vous souhaiterez éviter ! Pour vous assurer que vous pouvez utiliser la LEDencoreetencoresansl’endommager,vousdevriezajouterunerésistanceafindefairechuter la tension auxbornesde laLED, autrement dit de contrôler la différencedepotentiel.
Laloid’Ohmvousindiqueque:
R=V/I
Maisvousdevezutiliserdeuxtensionsdifférentes:celledel’alimentation(latensiond’alimentation)etcellerequiseparlaLED(latensiondirecte).Latensiondirecteestuntermequ’onrencontresouventdanslesfichestechniques,surtoutlorsqu’ilestfaitréférence aux diodes. Elle indique la tension recommandée que le composant peuttolérerdanslesensoùlecourantestprésumés’écouler.PouruneLED,cettedirectionest de l’anode vers la cathode, l’anode étant connectée au positif et la cathode, aunégatif. Les diodes qui ne sont pas électroluminescentes (dont il est question auchapitre8)sontutiliséespourrésisteraufluxducourantdansladirectioninverse,delacathodeversl’anode.Danscecas,letermequevousdevrezrecherchersurlafichetechniqueesttensioninverse,quiindiquelavaleurenvoltsdelatensionaudelàdelaquellelecourantvamalgrétouts’écouleràtraversladiode.
Dans notre cas, les tensions sont désignées par VALIMENTATION et VDIRECTE,respectivement.L’équationde la loid’Ohmabesoinde la tensionauxbornesde larésistance(latensionducourantquipasseparlarésistance),quiestégaleàlatensiondel’alimentationdiminuéedelatensiondirectedelaLED,soit:
VALIMENTATION-VDIRECTE
Lanouvelleéquationressembleàceci:
R=(VALIMENTATION-VDIRECTE)/I=(5V–2V)/0,03A=100ΩCequivousindiqueque vous avez besoin d’une résistance de 100 Ω pour alimenter la LED en toutesécurité;lecircuitexempleestreprésentésurlaFigure6-4.
FIGURE6-4Appliquerlaloid’OhmàuncircuitArduino.
CalculerlapuissancePour calculer la consommation d’énergie de votre circuit en watts, vous devezmultiplierlatensionparl’intensitéducircuit.L’équationest:
P=VxI
Si vous appliquez cette équation au même circuit que celui utilisé dans « La loid’Ohm»,plustôtdanscechapitre,vouspouvezcalculerlapuissance:
P=(VALIMENTATION-VDIRECTE)xI=(5V–2V)x0,03A=0,09W
Comme la loi d’Ohm, cette formule peut être reconfigurée pour trouver la valeurmanquanteàpartirdesdeuxdontvousdisposez:
V=P/I
I=P/V
Cetteformuleestutilecarcertainsmatériels,telsqueleslampesàincandescence,nementionnentque lapuissanceet la tension,cequevous laissedeviner l’intensitéducourant consommé. C’est particulièrement utile si vous essayez d’alimenter desmatérielsgrosconsommateursdecourant,telsquedesilluminationsoudesmoteurs,via les broches de votre Arduino. Un Arduino alimenté par USB est capable defournir au maximum de l’ordre de 500 mA, mais seulement 40 mA par broche
et200mAau totalpour toutes lesbrochesde sortie, cequiest trèspeu (pourplusd’informations, voyez la pagehttp://playground.arduino.cc/Main/ArduinoPinCurrentLimitations
C’estuncalcultrèssimple,maisvouspouvezlecombineràvotreconnaissancedelaloid’Ohmpourtrouverlesinconnuesdansnombredecircuitsdifférents.
LaloideJouleUn autre personnage qui a donné son nom à une équation est JamesPrescott Joule.Quoiqu’ilnesoitpasaussiconnuqu’Ohm,iladécouvertunerelationmathématiquesimilaire et peut-être complémentaire entre la puissance, l’intensité et la résistancedansuncircuit.
LaloideJoules’écritainsi:
P=I2R
Lemeilleurmoyenpourlacomprendreestdevoircommentonyarrive.
SiV=IxR(loid’Ohm)etqueP=IxR(équationdelapuissance),alors:
P=Ix(IxR)
Cequipeutaussis’écrire:
P=I2xR
Si vous l’appliquez aumême circuit que précédemment, vous pouvez découvrir lapuissanceconsomméeparcedernier:
P=I2xR=(0,03Ax0,03A)x100Ω=0,09W
Comme vous pouvez le constater, cela recoupe nos calculs précédents.Ainsi, nouspouvons calculer la puissance en ne connaissant que l’intensité et la résistance, outouteautrecombinaisondesautresvaleurs.
I=P/(IxR)
R=P/I2
Nouspouvonsaussifairelemêmecalculdanslescasoùnousneconnaissonsquelatensionetlarésistance.
SiI=V/R(loid’Ohm)etP=I/V(équationdelapuissance),alorsP=(V/R)*V
Cequipeutaussis’écrire:
P=V2/R
Essayezsurlemêmecircuitpourvérifierlerésultat:
P=V2/R=((5V-2V)*(5V-2V))/100Ω=0,09W
Vous pouvez reconfigurer l’équation pour tenir compte des valeurs dont vousdisposez:
V=P/(V*R)
R=V2/P
Nombred’arduinistes,dontmoi-même,sontpluspratiquesque théoriques,et tententde réaliseruncircuitensebasantsur lesexempleset ladocumentationavantdeselivreràdescalculs.C’esttrèsbien,totalementdansl’espritArduino!Danslaplupartdescas,votrecircuitfonctionneracommevousl’espérez,maisilesttoujoursbondeconnaître les équations lorsque vous en avez besoin.Vous pouvez ainsi trouver lesvaleurs quimanquent dans la plupart des circuits pour vous assurer que tout est enordre.N’hésitezdoncpasàvousréférerparlasuiteàcettesection.
TravailleravecdesschémasdecircuitsRécréerdescircuitsàpartirdephotosetd’illustrationspeuts’avérerdélicat,etc’estpourquoi des symboles standard sont utilisés pour représenter l’éventail descomposantsetdesconnexionsquevouspouvezyrencontrer.Cesschémasdecircuitssontcommelescartesdumétro:ilsvousmontrenttouteslesconnexionsclairement,maisilssontéloignésdelamanièredontleschosesseprésententdanslaréalité.Lessectionssuivantesexplorentunpeulesschémasdecircuits.
UnsimpleschémadecircuitCette section examine un simple circuit générant de la lumière (représenté sur laFigure6-5), composé de quatre composants : une batterie, un bouton-poussoir, unerésistanceetuneLED.
FIGURE6-5Leschémad’unsimplecircuitgénérantdelalumière.
LeTableau6-1présentelesymbolecorrespondantàchacundescomposants.
LaFigure6-6représentelecircuitréalisésuruneplatined’essai.Lapremièrechosequevouspouvezremarquer,c’estquecetexemplenefaitapparaîtreaucunebatterie.CommevotreArduinodisposedebroches5VetGND,ellesjouentlerôledesbornespositive (+) et négative (-) de la batterie et vous permettent d’atteindre le mêmerésultat.Lasecondechosequevouspourriezremarquer,c’estquelecircuitbienréelutilise un bouton-poussoir, qui n’est donc pas techniquement un interrupteur. C’estplus pratique, sachant que les boutons-poussoirs fournis dans la plupart des kitsArduinopeuventfacilementêtreremplacéspardesinterrupteurs,sivouslesouhaitez.
TABLEAU6-1Lessymbolesélémentaires.
Nom Symbole
Batterie
Bouton-poussoir
Résistance
LED
FIGURE6-6Unexempledecircuitgénérantdelalumièreréalisésuruneplatined’essai.
Jepensequelemeilleurmoyenestdecomparerunschémaducircuitaucircuitréelensuivantlesconnexionsdupositifaunégatif.
Sivouspartezdelabrochepositive(+ou5V)devotreArduino,vousdébouchezsurlebouton-poussoir.Cebouton-poussoircomprendquatrepattes,alorsquelesymbolen’en représente que deux. Les pattes du bouton-poussoir sont doublées de tellemanièrequedeuxsontconnectéesd’uncôté,etlesdeuxautres,del’autrecôté.Pourcetteraison,ilestimportantdebienorienterlebouton-poussoir.Lespattesdubouton-poussoir réel sont ainsi conçues pour permettre de multiples usages, mais sur leschéma,onnevoitqu’uninterrupteurdotéd’uneentréeetd’unesortie.
L’autrecôtédubouton-poussoirestreliéàlarésistance.Lesymboledelarésistancesur le diagrammen’est pas aussi bulbeuxque celui de la résistance réelle,mais lesymboleetlarésistanceréellecorrespondentplutôtbienautrement;ontrouveunfilquientreetunfilquisort.Lavaleurde la résistanceestécrite le longdusymbole,alorsqu’elle est codéeà l’aided’anneauxdecouleurs sur la résistance réelle.Unerésistancen’apasdepolarité(pasdepositifoudenégatif).Ellefonctionnedanslesdeuxsens.
Àl’inverse,laLEDaunepolarité.Sivouslaconnectezàl’envers,ellenes’allumerapas.Surleschémaducircuit,lesymbolequidonnelapolaritéestuneflèchepointantdansladirectiondufluxducourants’écoulantdu+(l’anode)versle-(lacathode),etunelignehorizontalefigureunebarrièredansl’autredirection.SurlaLEDréelle,lapatte laplus longueest l’anode,et lapattese trouvantducôtéplatde laLED,pluscourte, est la cathode (pour vous y retrouver si jamais les pattes sont coupées à lamêmetaille).
FIGURE6-7Lalongueurdelapatteoulafaceplatepourrepérerlapolaritéd’uneLED.
Le - (cathode)de laLEDest connectéà labrochenégative (-)GNDde l’Arduino,correspondantàlaterminaisonnégativedelabatterie,cequicomplètelecircuit.
UtiliserunschémadecircuitavecunArduinoUneautremanièredereprésenteruncircuitestleschéma(voirFigure6-8).
Cecircuitcomprendplusdecomposantsqueceluidécritdanslasectionprécédente.
Le gros module qui ressemble à un mille-pattes est le circuit Arduino. C’est lesymbole standard d’un circuit intégré, il ressemble à son incarnation réelle – unrectangle d’où sortent de nombreuses pattes. Toutes les pattes ou broches sontlibelléespourquevouspuissiezlesdistinguer.
Unebonnepratiqueàadopterlorsquevousavezuncircuitcompliqué:plutôtquedeleréaliserenuneseulefois,attaquez-leparmorceaux.Lecircuitauneentréeetunesortie.JeledécrisplusendétaildansleChapitre7.
FIGURE6-8UncircuitgénérantdelalumièreavecunArduino.
LesconventionsdecouleursLesconventionsde couleurs formentune technique importante enélectronique, et ildevient encore plus important d’y recourir quand vous progressez en réalisant descircuitspluscomplexes.Câblerdescircuitscorrectementestdéjàassezdifficile,maisseperdredansuntasdefilsdelamêmecouleurrendlatâchepresqueinsurmontable.
Voussavezsansdoutedéjàcela,mêmesivousn’avezjamaisfaitd’électronique.Parexemple,lesfeuxdesignalisationutilisentdescouleurspourindiquerclairementauxconducteurscequ’ilsdoiventfaire:
» Vertsignifiequ’ilspeuventavancer.
» Orangesignifiequ’illeurfautralentir.
» Rougesignifiequ’ilsdoivents’arrêter.
Uncodecouleurestunmoyenfacileetvisuelpourfairepasserunmessagesansavoiràutiliserbeaucoupdemots.
Toutes sortes d’applications électriques, telles que les installations électriques desdomiciles,utilisentuncodecouleur.Commecesprisesprésententunvraidanger,les
couleursdoiventêtreidentiquesd’unepriseàl’autre,selondesstandardsnationaux.Celapermetàtoutélectricienoubricoleurd’établirlesbonnesconnexionsfacilementetsansdanger.
Vous risquez moins de vous faire mal avec le courant continu basse tension enélectronique,maisvouspreneztoujourslerisquededétruiredescomposantsdélicatsdevotrecircuit.Iln’existepasderèglesabsoluespourorganiservotrecircuit,maisvoici quelques conventions qui peuvent vous aider et permettre à d’autres decomprendrecequevousfaites:
» Lerougeestpositif(+).
» Lenoirestnégatif(-).
» Différentescouleurssontutiliséespourdifférentesbroches
véhiculantunsignal.
Il en va ainsi sur la plupart des circuits sur platine d’essai. Les couleurs del’alimentationetdelamassepeuventchanger;parexemple,ilpeuts’agirdublanc(-),dunoir(-)oudubrun(+)etdubleu(-),selonlesfilsquevousavezsouslamain.Du moment que vous utilisez un code couleur et qu’il est cohérent, vous devriezpouvoirplusfacilementconstruire,comprendreetréparervoscircuits.
J’ai réparé beaucoup de circuits qui ne fonctionnaient plus du seul fait que les filsn’étaientpasbranchésauxbonsendroits.
Silacouleurd’unfilsoulèveundoute,mieuxvautvérifierlaconnexion(enutilisantletestdecontinuitédevotremultimètre)oulatension(enutilisantlemodevoltmètredevotremultimètre)pourvousassurerquetoutfonctionnecommeprévu.
LesfichestechniquesReprésentez-vouslascène.Votreamiaapprisquevousvousyconnaissezunpeuenélectronique,etvousdemandedejeterunœilsurunschématrouvésurInternet,maisquinefonctionnepas.Ilutiliseplusieurscircuitsintégrésdontlefonctionnementvousestinconnu.Quefaire?Laréponse:cherchersurleWeb!
Ilexistedesmillionsdecomposantsdifférents.L’informationdontvousavezbesoinpour comprendre ce qu’ils font se présente généralement sous la forme de fichestechniques.Chaquecomposantpossèdeune fiche technique rédigéepar le fabricant.Elle décrit tous les détails du composant et souvent vous en donne plus quenécessaire.
Lemoyenleplusfacilepourtrouverunefichetechnique,c’estInternet.Pourtrouverlabonne,vousdevezensavoirautantquepossiblesurlecomposant.L’informationla
plusimportantepourconduirevotrerechercheestlaréférenceducomposant,indiquéesurleboîtier.LaFigure6-9vousmontreoùlirecelled’untransistor.
Sivoussaisissezcetteréférencedansunmoteurderechercheenajoutantlamentionfichetechnique,vousdevrieztombersurungrandnombredefichiersPDFfournissantdesdétailssurcecomposant.Sivousnepouveztrouver labonne,adressez-vousaumagasinoùvousavezachetélecomposant.
FIGURE6-9Laréférenceimpriméesuruntransistor.
LescodescouleurdesrésistancesLesrésistancessonttrèsimportantesdanslesprojetsArduino,etvousaurezbesoindenombreusesvaleursdifférentespourcréervoscircuits.Ellespeuventaussiêtretoutàfait minuscules, ce qui signifie que contrairement au transistor représenté sur laFigure6-9, il est impossible d’écrire la valeur de la résistance sur le corps. Pourcette raison, il existe un système de codes couleur qui indique la valeur de larésistance. Si vous en regardez une de plus près, vous remarquez des anneaux decouleurtoutautour(voirFigure6-10).Ilsindiquentdansl’ordrelepremierchiffre,lesecondchiffre, lenombredezérosde lavaleurenohmsde larésistanceetenfin latolérance.
FIGURE6-10Lesanneauxdecouleurd’unerésistance.
Le Tableau 6-2 dresse l’inventaire des valeurs en ohms auxquelles les couleurscorrespondentenfonctiondelabande.
Maintenant que vous connaissez la valeur de chaque bande, il vous reste à savoirl’ordredanslequelleslire.Ontrouvegénéralementunespaceidentiqueentrelestroispremières bandes, et un espace plus large les séparant de la quatrième bande detolérance.
TABLEAU6.2Lescodescouleurd’unerésistance.
Couleur Valeur Multiplicateur Tolérance
Noir 0 x100 -
Marron 1 x101 ±1%
Rouge 2 x102 ±2%
Orange 3 x103 -
Jaune 4 x104 ±5%
Vert 5 x105 ±0,5%
Bleu 6 x106 ±0,25%
Violet 7 x107 ±0,1%
Gris 8 x108 ±0,05%
Blanc 9 x109 -
Or - x10-1 ±5%
Argent - x10-2 ±10%
Aucune - - ±20%
Parexemple,voiciquelquesvaleursquevouspourrieztrouverdansvotrekit:
» Orange,Orange,Marron,Or=3,puis3,puisunzéro=330ohms
avecunetolérancede±5%
» Rouge,Rouge,Rouge,Or=2,puis2puisdeuxzéros=
2200Ωou2,2kΩavecunetolérancede±5%
» Marron,Noir,Orange,Argent=1,puis0,puistroiszéros=
10000ou10kΩavecunetolérancede±10%
Ilpeutêtredifficiledelirelescouleurs,etparfoismêmedesavoirparoùcommenceretoùterminerlalecture.Danslaplupartdescas,ilestdoncrecommandéd’utiliserunmultimètre pour vérifier la valeur de votre résistance. Vous devriez trouver unsymbole ohm (Ω) sur la mollette de votre multimètre afin de pouvoir procéder àl’opération.
Les résistances de même valeur sont souvent livrées collées sur deux bandes depapier qui lesmaintiennent comme pour former une échelle. Ces bandes servent àalimenterautomatiquementlesmachinesquiimplantentlescomposantssurlescircuitsavantdelessouder.Cesbandesdepapierpeuventvousservir,puisquevouspouvezécrire la valeur des résistances dessus. Cela vous fera gagner du temps en vousévitant d’avoir àmesurer la résistance chaque fois que vous souhaitez utiliser unerésistance.
D
Chapitre7Entrées,sortiesetcommunication
DANSCECHAPITRE
» FaireunfonduenchaînéavecuneLED
» Sebranchersurlessorties
» Fairevarierlarésistanceavecunpotentiomètre
» Affichervosstatistiquesaveclemoniteursérie
anscechapitre,jeprésenteplusieursautrescroquisprédéfinis,doncdisponiblesdès que vous avez installé l’atelier Arduino. Il sera question d’entrées et desortiesutilisantdescapteursfaisantpartiedevotrekit.Sivousn’avezpasencore
de kit, je vous suggère de lire le Chapitre 2 pour en acquérir un de ceux que jerecommande.
LecroquisBlink(décritauChapitre4)vousadonnélesbasesd’uncroquisArduino.Ici,vousallezl’étendreenajoutantdescomposantsexternesàvotreArduino.Jevousmontre comment procéder en utilisant la platine d’essai, comme mentionné auChapitre5, et d’autres composants devotre kit qui permettent de réaliser toute unevariétédecircuits.
JemontrecommenttéléverserlecodedansvotreArduinoenvousguidantchaquefoisligneparlignepourbienencomprendrelefonctionnement.
ChargeruncroquisToutaulongdecechapitreetd’unebonnepartiedecelivre,vousdécouvrireztouteunevariétédecircuitsetlescroquiscorrespondants.Lecontenudecescircuitsetdescroquis peut grandementvarier ; il est systématiquementdétaillé dans les exemplesfournis.Avantde commencer, vousdevezvous rappeler leprocessus à suivrepourtéléverser(donctransférer)uncroquisdanslacarteArduino.
Suivezcesétapespourtéléverseruncroquis:
1. ConnectezvotreArduinoenutilisantuncâbleUSB.
LafichecarréeauboutducâbleUSBseconnecteàvotreArduino,et
laficheplateseconnecteauportUSBdevotreordinateur.
2. SélectionnezOutils->Typedecarte->ArduinoUnopourtrouver
letypedevotreArduinodanslemenu.
Danslaplupartdesexemplesdecelivre,lacarteutiliséeestune
ArduinoUno.Lemenucontientdenombreusescartes,tellesque
l’ArduinoMega2560etl’ArduinoLeonardo.
3. Sélectionnezlebonportsériepourvotrecarte.
Vouspouvezaccéderàunelistedesportssériesdisponiblesen
sélectionnantOutils->Portsérie->comXou/dev/
tty.usbmodemXXXX/Xestunnombrealéatoireassignéauport.
SousWindows,sivousvenezdeconnectervotreArduino,leport
COMcorrespondantutiliseragénéralementlenombreleplusélevé,
telquecom3oucom15.SivousavezconnectéplusieursArduino,
chacunseverraassignersonpropreport.SousMacOSX,lenombre
suivant/dev/tty.usbmodemestassignéaléatoirementetpeutdece
faitvarier,comme/dev/tty.usbmodem1421ou
/dev/tty.usbmodem262471.Cedevraitêtreleseulportvisible,à
moinsquevousn’ayezconnectéplusieursArduino.
4. CliquezsurleboutonTéléverser.
C’estleboutonquifigureuneflècheorientéeversladroitedans
l’environnementArduino,commeexpliquéauchapitre3.Vous
pouvezaussiutiliserleraccourciclavierCtrl+UsousWindowsou
Cmd+UsousMacOSX.
Pourvousaideràcomprendrelefonctionnementdupremiercroquisdecechapitre,jevaisd’abordvousexpliquerlatechniquenomméePWM(PulseWaveModulation(latraductionMLI en français est peu répandue). La section suivante vous la présentepourvousprépareràapprendrecommentréduirelaluminositéd’uneLED.
Lamodulationdelargeurd’impulsion
(PWM)LorsquejevousaiprésentélacarteauChapitre2,j’aimentionnéquel’émissiond’unsignal analogique était simulée sur une sortie numérique grâce à une techniquenomméePWM.EllepermetàvotreArduino,unappareilnumérique,desecomportercomme unmatériel analogique. Dans l’exemple qui suit, elle vous permet de fairevarierlapuissanced’uneLEDaulieudesimplementl’allumeroul’éteindre.
Voici comment cela fonctionne : une sortie numérique ne peut être que activée oudésactivée. Toutefois, il est possible de la faire osciller entre ces deux états trèsrapidement,notammentgrâceà l’extrêmevitessede travaildescomposantsactif ensilicium.Si la sortie est activée lamoitiédu temps, etdésactivée l’autremoitiédutemps,onpeutdirequ’elleaunrapportdecyclede50%.Lerapportdecycleestlapériodedurantlaquellelasortieestà5V.N’importequelautrepourcentage–20%,30%,40%,etainsidesuite,devientpossible.
Lorsque vous utilisez une LED en sortie, le rapport de cycle produit un effetparticulier. Comme elle scintille plus vite que l’œil humain n’est capable de ledétecter,laLEDquisubitunrapportdecyclede50%sembleatténuée,puisqu’ellenebrillequelamoitiédutemps.C’estlemêmeeffetquivouspermetdepercevoirdesimagesfixesdéfilantàlavitessede24imagesparseconde(ouau-delà)commes’ils’agissaitd’uneimageenmouvement.
Avecunmoteuràcourantcontinuensortie,unrapportdecyclede50%feratournerlemoteuràlamoitiédesavitesse.LaPWMpermetdecontrôlerlavitessederotationdumoteurenluienvoyantunsignalàhautefréquence.
Ainsi, quoique laPWMsoit une fonction numérique, on l’exploite avec la fonctionanalogWrite()enraisondeseffetsqu’elleproduitsurlescomposants.
CroquispouratténueruneLEDDans ce croquis, vous contrôlez une LED. À la différence du croquis qui vouspermettait simplement de la faire scintiller auChapitre4, vous aurez besoin ici dematérielsupplémentaire:Pourceprojet,ilvousfaut:
» UnecarteArduinoUno
» Uneplatined’essai
» UneLED
» Unerésistance(supérieureà120Ω)
» Desstraps
Ilesttoujoursimportantdevousassurerquevotrecircuitn’estpasalimentélorsquevous y apportez des modifications. Vous pouvez facilement faire des erreurs deconnexion, ce qui peut endommager les composants.Avant de commencer, assurez-vousquevotreArduinoestdébranchédevotreordinateuroudetouteautresourcedecourantexterne.
CâblezlecircuitreprésentésurlaFigure7-1.C’estuncircuitsimplecommeceluiducroquisBlinkduchapitre4,maisquiutilise labroche9au lieude la13.Laraisonpourlaquellenouschoisissonslabroche9etnonla13,c’estquela9estcapabledePWM.Enrevanche,cettebroche9abesoind’unerésistancepourlimiterlaquantitédecouranttraversantlaLED.Pourlabroche13,larésistanceadéjàétéprévuesurlacarteArduinoelle-même,sibienquevousn’avezpasàvousenpréoccuper.
FIGURE7-1Labroche9estconnectéeàunerésistancepuisàuneLEDquirejointlamasse.
LaFigure7-2montre le schémadu circuit.Vous y voyez une simple connexion.Labrochenumérique, la9,estreliéeàla longuepattedelaLED; lapetitepattedelaLEDestreliéeàlarésistance,laquelleestreliéeàlamasse(GND).Danscecircuit,
larésistancepeutfigureravantouaprèslaLED,dumomentqu’ellefigurebiendanslecircuit.
Ilesttoujoursbond’adopterdesconventionsdecouleurspourvoscircuits–c’est-à-dire, d’utiliser des couleurs différentes pour distinguer les circuits. Cela rend leschoses plus claires et peut faciliter grandement la résolution de problèmes. Vousdevriezvousteniràquelquesstandardsenlamatière.Lespartieslesplusimportantesà distinguer par des couleurs sont l’alimentation et la masse. Elles sont presquetoujoursenrougeetennoir,respectivement,maisvouspouvezlesrencontrerenblancetnoir,commeexpliquéauChapitre6.
FAIREPREUVEDERÉSISTANCE
Commevous l’avez appris auChapitre6, il est important debien calculer la
résistancepour garantir la sécurité etpréserver la longévitéde votre circuit.
Dans ce cas, vous allezmettre votre LED sousune tensionde 5 V (volts), la
tensionmaximalequ’unebrochenumériquepeutgénérer.UneLEDtelleque
celle que vous trouvez dans votre kit est généralement conçue pour une
tensionde2,1V(volts),sibienqu’unerésistanceestrequisepourlaprotéger.
Elle tirera un courant d’intensité maximale de 25 mA (milliampères). En
utilisantcesdonnées,vouspouvezcalculerlarésistance(ohms):
R=(VS-VL)/I
R=(5-2,1)/0,025=116ohms
Larésistancedont lavaleurest laplusprochequevouspuissiez trouver fait
120 ohms (marron, rouge, marron). Si vous en avez une, vous avez de la
chance. Sinon, vous pouvez appliquer la règle consistant à prendre la
résistancelaplusproche,maissupérieureàcettevaleur.Ellerésisteraplusàla
tension qu’il ne le faut, mais votre LED sera en sécurité et vous pourrez
toujours remplacer la résistance ultérieurement lorsque vous chercherez à
pérenniser votre projet. Vous devriez trouver des résistances adaptées de
220Ω,330Ωou560Ωdansvotrekit.
VouspouveztoujoursvousréférerauChapitre6pourtrouver larésistanceà
l’aide des codes de couleurs ou utiliser unmultimètre pour lamesurer. On
trouvemêmedesapplicationssursmartphonequiproposentdespense-bêtes
pour les couleurs des résistances (mais vos amis électroniciens pourraient
vousraillersivouslesutilisez).
L’autretypedeconnexionestgénéralementunfildesignal,c’est-à-direunfilquiémetoureçoitunsignalélectroniqueentrel’Arduinoetuncomposantextérieur.Unfildesignalpeutêtreden’importequellecouleur,pourvuequ’ellesoitdistinctedecellesdel’alimentationetdelamasse.
Une fois que vous avez assemblé votre circuit, vous avez besoin du logiciel pourl’utiliser. Dans le menu Arduino, sélectionnez Fichier->Exemples->01.Basics->FadepourchargerlecroquisFade.Lecodecompletdececroquisestlesuivant:
FIGURE7-2UnschémadevotrecircuitpouratténueruneLED.
/*
Fade
Cetexemplemontrecommentfairevarierla
luminositéde
laLEDsurlabroche9enutilisantlafonction
analogWrite().
Cetexempledecodeestdansledomainepublic.
*/
intled=9;//Labrocheàlaquellela
LEDest
reliée
intbrightness=0;//L’intensitélumineusede
laLED
intfadeAmount=5;//L’ampleurdelabaisse
d’inten-
sitélumineuse
//Laroutinesetupestexécutéequandvouspressez
le
boutonreset:
voidsetup(){
//Déclarerlabroche9commebrochedesortie
pinMode(led,OUTPUT);
}
//Laroutineloopboucleàl’infini:
voidloop(){
//Modifielaluminositésurlabroche9:
analogWrite(led,brightness);
//Changerlaluminositépourletourdeboucle
suivant:
brightness=brightness+fadeAmount;
//Inverserlavariationdelaluminositéquandon
ar-
riveàsonterme:
if(brightness==0||brightness==255){
fadeAmount=-fadeAmount;
}
//Attendre30secondespourvisualiserl’effet
delay(30);
}
Téléversezcecroquisdansvotrecarteensuivantlesinstructionsprodiguéesaudébutdecechapitre.Sitoutsedéroulecorrectement,laLEDdoits’allumerpuiss’éteindreprogressivement.
Sivousn’observezpasceteffet,vérifiezdeuxfoisvotrecâblage:
» Vérifiezquevousutilisezlesbonnesbroches.
» VérifiezquevotreLEDestbienplacée,lapattelongueétantreliée
parunstrapàlabroche9,etlapattecourtereliéeàlarésistanceet
àlamasse(GND).
» Vérifiezlesconnexionssurlaplatined’essai.Silesstrapsoules
composantsnesontpasconnectésenutilisantlesbonnesrangées
surlaplatined’essai,ellesnefonctionnerontpas.
ComprendrelecroquisFadeÀla lumièredevotreLED,regardonsdeplusprès le fonctionnementgénéraldececroquis.
Lescommentairesenhautducroquisvousexpliquentcequisepasse:enutilisantlabroche9,unefonctionnomméeanalogWrite()faitvarierl’intensitélumineusedelaLED.Aprèslescommentaires,ontrouvetroisdéclarations:
intled=9;//Labrocheàlaquellela
LEDest
reliée
intbrightness=0;//L’intensitélumineusede
laLED
intfadeAmount=5;//L’ampleurdelabaisse
d’inten-
sité
Commementionnéauchapitre4,lesdéclarationsfigurentavantlesfonctionssetupou loop. Le croquis Fade utilise trois variables : led, brightness etfadeAmount. Ce sont des variables entières capables de couvrir des plagesidentiques,maisellessonttoutesutiliséesàdesfinsdifférentes.
Les déclarations étant faites, le code rentre dans la fonction setup. Lescommentairessontlàpourvousrappelerquecettefonctionn’estexécutéequ’unefois,et qu’elle ne fait que déclarer une broche comme sortie. Vous pouvez voir ici lapremièrevariableautravail.Aulieud’écrirepinMode(9,OUTPUT),vousavezpinMode(led,OUTPUT). La variable led sert de symbole pour une valeurnumérique.
//Laroutinesetupestexécutéequandvouspressez
le
boutonreset:
voidsetup(){
//Déclarerlabroche9commebrochedesortie
pinMode(led,OUTPUT);
}
Lafonctionloopestplussophistiquée:
voidloop(){
//Modifierlaluminositésurlabroche9:
analogWrite(led,brightness);
//Modifierlaluminositépourlafoissuivante:
brightness=brightness+fadeAmount;
//Inverserlavariationdelaluminositéquandon
ar-
riveenlimite:
if(brightness==0||brightness==255){
fadeAmount=-fadeAmount;
}
//Attendre30millisecondespourvisualiser
l’effet
delay(30);
}
AulieudesvaleursONetOFF,unevariationprogressivedelaluminositéabesoindetoute une plage de valeurs.analogWrite() vous permet d’envoyer une valeurnumérique entre 0 et 255 à une broche PWM de l’Arduino. 0 correspond à 0 V,
et 255 correspond à 5 V. Toute valeur intermédiaire produit une tensionproportionnelle,cequifaitvarierlaluminositédelaLED.
La boucle commence par envoyer la valeur de la luminosité sur la broche 9. Unevaleurdebrightnességaleà0signifiequelaLEDestéteinte:
//Modifierlaluminositésurlabroche9:
analogWrite(led,brightness);
Ensuite,vousajoutezunepetitequantitéde luminositéà lavariablebrightness,pour la porter progressivement à 5. La valeur ne sera pas envoyée sur labroche9avantledébutdelaprochaineitération:
//Modifierlaluminositéunpeu,enplusouen
moins:
brightness=brightness+fadeAmount;
LaluminositédoitdemeurerdanslaplagedevaleursconvertibleenunetensionquelaLEDpeutsupporter.Ons’enassureàl’aided’uneinstructionconditionnellequitestelesvariablespourdéterminercequ’ilfautfaireensuite.
Lemotifdébutel’instruction.Deuxconditionsfigurententrelesparenthèses.Ellessontséparéesparunopérateur(lesdeuxbarres).Lapremièreexpressionsedemandesilavaleurdebrightnessestégaleà0.Lasecondetestesicettevaleurestégaleà255.Notezquenousutilisons l’opérateurdecomparaison==,ànepasconfondreavecle=.Ledoublesigneégalitéindiquequelecodedoitcomparerlesdeuxvaleurs(tester si a vaut b), et non copier la valeur de droite dans la variable de gauche(mettre b dans a). Les deux conditions sont séparées par le symbole || quicorrespondauOUlogique.
if(brightness==0||brightness==255){
fadeAmount=-fadeAmount;
}
Ainsi, l’instruction complète est « si la variablenomméebrightness est égaleà 0 ou bien si elle est égale à 255, alors exécuter tout ce qui se trouve entre lesaccoladesquisuivent» .La lignedecodequise trouveentre lesaccoladesdu testn’est exécutée que si une des deux conditions est vraie. Il s’agit d’une opérationmathématiqueélémentairequiinverselesignedelavariablenomméefadeAmount.Tantquel’intensitélumineusedelaLEDpeutêtreaccrue,lavaleur5conservéedansfadeAmountestajoutéeàbrightnessàchaqueitération.Lorsquelavaleurde
brightnessatteint 255, l’instructionif est vérifiée, etfadeAmountpassede5à-5.Désormais,àchaqueitération,lavaleur5estretranchéedebrightnessjusqu’à que cette variable atteigne la valeur 0, auquel cas l’instructionif est denouveau vérifiée. De nouveau, le signe de fadeAmount est inversé, passantde-5à5,ettoutrecommence.
fadeAmount=-fadeAmount;
Ces conditions nous permettent de générer une valeur qui ne cesse de boucler,croissantde0à255avantdedécroîtrejusqu’à0,cequifaitvarierlaluminositédevotre LED qui s’allume et s’éteint graduellement en une trentaine d’étapes(255diviséspar5).
BidouillerlecroquisFadeIlyabiendesmanièresdefairevarierlaluminositédelaLEDenutilisantlecircuitque vous avez réalisé dans la section précédente, mais je ne vais pas toutes lesexposer dans ce livre. Toutefois, je peux vous en montrer quelques-unes. Le codesuivant est celui du croquis Fading provenant d’une version antérieure d’Arduino.D’unecertainemanière,jelepréfèreàl’exemplequej’aidonné.Enapparence,ilneprovoqueaucunedifférencedanslecomportementdelaLED.Passons-leenrevue.
Jerappellequelespartiesducodesourcequisontaffichéesencouleuràl’écran,leplus souvent enorangeou enbleu signalentdesmots reconnuspar l’environnementArduino(cequipeuts’avérertrèspratiquepourrepérerlesfautesdefrappe).Commelescouleurssontdifficilesàreprésenterdansunlivreennoiretblanc,lecodecoloréapparaîtraiciengras.
/*
Fading
Cetexemplemontrecommentvarierlaluminositéde
laLED
avecanalogWrite().
Lecircuit:
*UneLEDconnectéeàlabrochenumérique9etàla
masse.
Crééle1Nov2008
ParDavidA.Mellis
modifiéle30Août2011
ParTomIgoe
http://arduino.cc/en/Tutorial/Fading
Cetexempledecodeestdansledomainepublic.
*/
intledPin=9;//LEDconnectéeàlabroche
numérique9
voidsetup(){
//Riennesepassedanssetup()
}
voidloop(){
//Montéeprogressivedelaluminositédeminàmax
par
pasde5points:
for(intfadeValue=0;fadeValue<=255;fadeValue
+=5){
//Modifierlavaleur(de0à255):
analogWrite(ledPin,fadeValue);
//Attendre30millisecondespour
visualiser
l’effet
delay(30);
}
//Baisseprogressivedelaluminositédemaxàmin
par
pasde5points:
for(intfadeValue=255;fadeValue>=0;fadeValue
-=5)
{
//Modifierlavaleur(de0à255):
analogWrite(ledPin,fadeValue);
//Attendre30millisecondespour
visualiser
l’effet
delay(30);
}
}
Lepremierexempleesttrèsefficace,maisilreposesurlafonctionstandardloop()pourmodifierlavaleurdelatensionappliquéeàlaLED.Laprésenteversionutiliseuneboucleforinséréedanslafonctionloop().
DeuxbouclesconditionnellesforUnefoisquelecroquisrentredansunebouclefor,ilspécifielaconditiondesortieetnepeutsortirdelaboucletantquecetteconditionn’estpasremplie.Lesbouclesforsont souvent utilisées pour des opérations répétitives. Ici, elles sont utiliséespourincrémenteroudécrémenterunnombreàunecertainefréquencepourproduireuneffet.
La première ligne de la boucle for réunit la définition de la valeur initiale, lacondition de poursuite de la répétition et l’ampleur de l’incrémentation ou de ladécrémentation:
for(intfadeValue=0;fadeValue<=255;fadeValue
+=5)
En clair, cela veut dire : « crée une variable nommée fadeValue (c’est unevariablelocaleàlabouclefor)égaleà0;vérifiesifadeValueestinférieureouégaleà255;sitelestlecas,fadeValueestaugmentéede5».fadeValueestégaleà0audébutdupremiertouruniquement;aprèscela,elleestincrémentéede5àchaquetourdeboucle.
Dans la boucle, le code met à jour la valeur analogWrite de la LED etattend30millisecondes(ms)avantdeprocéderàunenouvelleitération.
for(intfadeValue=0;fadeValue<=255;fadeValue
+=5){
//Modifierlavaleur(de0à255):
analogWrite(ledPin,fadeValue);
//Attendre30millisecondespourvisualiserl’effet
delay(30);
}
Cetteboucleforsecomportecommelaboucleloopprincipaledans lepremierexempleFade,maiscommefadeValuesetrouvedanssapropreboucle,etqu’onytrouveuneboucled’incrémentationetunebouclededécrémentation,ilestplusfaciledejouerdessuspourproduiredesmotifsdevariationdelaluminosité.Parexemple,essayezdechanger+=5et-=5avecdifférentesvaleurs(dont255estunmultiple),etvouspourrezgénérerentreautresuneffetd’illuminationasymétrique.
Vouspourriezaussicopier-collerlesmêmesbouclesforpourproduiredesmotifsplus sophistiqués. Toutefois, n’oubliez pas que tant qu’il boucle sur unfor, votreArduinonepeutrienfaired’autre.
LecroquisButtonC’est la première et sansdoute la plus élémentaire des entrées quevouspouvez etdevez apprendre à maîtriser pour vos futurs projets Arduino : le modeste bouton-poussoir.
Pourceprojet,vousaurezbesoinde:
» UnArduinoUno
» Uneplatined’essai
» Unerésistancede10kΩ
» Unbouton-poussoir
» UneLED
» Desstraps
LaFigure7-3vousmontrelemontagesurlaplatined’essaipourlecircuitButton.Ilest important de noter quelles pattes du bouton-poussoir sont connectées.Généralement, ces petits boutons-poussoirs sont faits pour enjamber exactement latranchée au centre de votre platine d’essai. De la sorte, les pattes que le boutonpermet de relier entre elles pour faire passer le courant se trouvent d’une part àgaucheetd’autrepartàdroitesurlediagramme.
Vous pouvez tester les pattes d’un bouton-poussoir avec un testeur de continuité sivotremultimètreenestdoté(commeexpliquéauchapitre5).
LeschémadelaFigure7-4vouspermetdeconstaterquelarésistanceestreliéeàlamasse ainsi qu’à la broche 2, et que lorsque le bouton est pressé, il connectel’ensembleà labroche5V.Cetteconfigurationestutiliséepourcomparer lamasse(0V)àunetension(5V),cequivouspermetdediresi l’interrupteurestouvertoufermé.
FIGURE7-3Labroche2litl’étatdubouton-poussoir.
FIGURE7-4Unschémaducircuitàbouton-poussoir.
Construisez ce circuit et téléversez ce code provenant de Fichier->Exemples ->02.Digital->Button.
/*
Button
AllumeetéteintuneLEDreliéeàlabroche
numérique13
lorsquelebouton-poussoirreliéàlabroche2est
pressé.
Lecircuit:
*LEDreliéedelabroche13àlamasse
*Bouton-poussoirreliédelabroche2à+5V
*Résistancede10kreliéedelabroche2àla
masse
*Note:surlaplupartdesArduino,ontrouvedéjà
une
LEDreliéeàlabroche13.
crééen2005
parDojoDave<http://www.0j0.org>
modifiéle30août2011
parTomIgoe
Cetexempledecodeestdansledomainepublic.
http://www.arduino.cc/en/Tutorial/Button
*/
//Deuxconstantespouridentifierlesnumérosdes
broches
constintbuttonPin=2;//lenumérodela
brochedu
bouton-poussoir
constintledPin=13;//lenumérodela
brochede
laLED
//Unevariable
intbuttonState=0;//Mémorisel’étatdu
bou-
ton-poussoir
voidsetup(){
//InitialiselabrochedelaLEDensortie:
pinMode(ledPin,OUTPUT);
//Initialiselabrochedubouton-poussoiren
entrée:
pinMode(buttonPin,INPUT);
}
voidloop(){
//Litl’étatdubouton-poussoir:
buttonState=digitalRead(buttonPin);
//Vérifiesilebouton-poussoirestenfoncé.
//Sioui,sonétatestHIGH:
if(buttonState==HIGH){
//DoncallumerlaLED
digitalWrite(ledPin,HIGH);
}
else{
//Sinon,éteindrelaLED:
digitalWrite(ledPin,LOW);
}
}
Une foisquevousavez téléversé le croquis, appuyez sur leboutonetvousdevriezvoirlaLEDdelabroche13s’allumer.VouspouvezajouteruneLEDpluspuissanteàvotre carte Arduino entre la broche 13 et la masse (GND) pour que ce soit plusvisible.
Sivousnevoyezriens’allumer,revérifiezvotrecâblage:
» Vérifiezquevotreboutonestconnectéàlabonnebroche.
» SivousutilisezuneautreLED,vérifiezqu’elleestbienbranchée,sa
longuepatteétantreliéeàlabroche13,etsacourte,àGND.Vous
pouvezaussil’enleveretobserverlaLEDinstalléesurlacarte
(libelléeL).
» Vérifiezlesconnexionssurlaplatined’essai.Silesstrapsoules
composantsnesontpasconnectésdanslesbonnesrangéessurla
platine,lecircuitnefonctionnerapas.
ComprendrelecroquisButtonC’estvotrepremierprojetinteractifArduino.Lescroquisprécédentsn’utilisaientquedessorties,maisvousêtesdorénavantcapabled’affectercesdernièresenfournissantuneentréeprovenantdumonedextérieur!
Tantqu’ilestenfoncé,leboutonmaintientladiodeallumée.Dèsqu’ilestrelâché,ladiodes’éteint.Relisonslecroquispourvoircommentcelasepasse.
Commeauparavant,lapremièreétapeconsisteàdéclarerdesvariables.Danscecas,ilfautnoterquelquesdifférences.Lemotconstestuneabréviationpourdésignerune constante, si bien que les valeursbuttonPinetledPin se trouvent ainsi
fixéespourladuréeduprogramme.Ilvautmieuxutilisercettesolutionqued’utiliserdesvariablesdontlavaleurnechangerapas;vousêtesainsicertainquevousneferezpas l’erreur de les modifier par mégarde. Les numéros de broches peuvent êtrestockésdansdesconstantes,carilssontfixespardéfinition.
UnevariablebuttonStateestalorsdéclaréeetforcéeàlavaleurinitiale0.Ellevaservirausuividuchangementd’étatdubouton.
constintbuttonPin=2;//Numérodelabroche
du
bouton-poussoir
constintledPin=13;//Numérodelabroche
dela
LED
//Unevariable
intbuttonState=0;//Stockel’étatdu
bou-
ton-poussoir
La fonction setup utilise la fonction pinMode pour configurer la brocheledPin (la broche 13) en sortie et la broche buttonPin (la broche 2) enentrée:
voidsetup(){
//InitialiselabrochedelaLEDcommesortie:
pinMode(ledPin,OUTPUT);
//Initialiselabrochedubouton-poussoircomme
en-
trée:
pinMode(buttonPin,INPUT);
}
Tout sepassedans la boucleprincipale.Tout d’abord, la fonctiondigitalReadestutiliséeaveclabroche2.ToutcommedigitalWritesertàécrireunevaleurHIGHouLOWsurunebrochedesortie,digitalReadsertàlireunevaleursurune broche d’entrée. Cette valeur est directement stockée dans la variablebuttonState.
voidloop(){
//Litl’étatdubouton-poussoir:
buttonState=digitalRead(buttonPin);
L’état du bouton étant connu, un test mobilisant une instruction conditionnelle ifpermetdedéterminerlasuite.L’instructionselitainsi:
« Si on détecte une valeurHIGH (le circuit est mis sous tension), alors envoyerHIGHsurlabrocheledPin(labroche13)pourallumerlaLED;»
« si c’est unevaleurLOW (le bouton-poussoir est relâché et le circuit est ouvert),alorsenvoyerLOWsurlabrocheledPinpouréteindrelaLED;
«reveniraudébutdelabouclepourrépéter.»
//Vérifiesilebouton-poussoirestenfoncé.
//Sic’estlecas,l’étatdubouton-poussoirest
HIGH:
if(buttonState==HIGH){
//AllumerlaLED:
digitalWrite(ledPin,HIGH);
}
else{
//SinonéteindrelaLED:
digitalWrite(ledPin,LOW);
}
}
BidouillerlecroquisButtonIlestsouventnécessaired’inverserunesortie,uninterrupteur,uncapteur.Vousavezdeuxmoyenspourlefaire.Leplussimpleconsisteàchangerunmotdanslecode.
Enchangeantlapremièrelignedecodeducroquisde:
if(buttonState==HIGH)
en:
if(buttonState==LOW)
lalogiqueestinversée.
CelasignifiequelaLEDestalluméetantqueleboutonn’estpaspressé.Sivousavezun ordinateur, c’est la solution la plus simple. Téléversez simplement ce coderetouchépourvérifier.Toutefois,vouspouvezvoustrouverdansdescasoùvousnevoulezpasmodifierlecode.Lasolutionpourinverserlalogiqueducircuitestalorsd’inversersapolarité.
Au lieude relier la broche2 à la résistancepuis àGND,vous reliez la résistanceà5VetlamasseGNDàl’autrecôtédubouton,commesurlaFigure7-5.
FIGURE7-5Aprèsinversiondespolaritésducircuit.
LecroquisAnalogInputLeprécédentcroquisvousamontrécommentutiliserdigitalReadpour lireunevaleur LOW ou HIGH, mais comment faire si vous souhaitez lire une valeuranalogiquecommel’étatd’unemolettedecontrôleduvolumeoud’unvariateur?
Pourceprojet,vousaurezbesoinde:
» UnArduinoUno
» Uneplatined’essai
» Unpotentiomètrede10kΩ
» UneLED
» Desstraps
SurlaFigure7-7,vouspouvoirvoirlaconfigurationdececircuit.Vousavezbesoind’une résistance et d’une LED en sortie, et d’un potentiomètre en entrée. Pour unrappelsurlespotentiomètres,reportez-vousàl’encadré«Lespotentiomètres».
Surlesfigures7-6et7-7,lepotentiomètreestconnectéàl’alimentationetàlamasseparsesdeuxpatteslatéralesetlapattecentralesertdepointdesortievariable.Pourlire cette valeur analogique, vous devez utiliser un jeu de broches analogiquesparticulièressurlacarteArduino.
Si vous inversez la polarité (inversez les straps positif et négatif) de la résistance,vousinversezlesensderotationdupotentiomètre.Faites-lesivousconstatezquelesensderotationn’estpasnaturel(lesenshorairepouraugmenter).
Montezlecircuitpuischargezl’exemplesuivantettéléversez-le:
Fichier->Exemples->03.Analog->AnalogInput
/*
AnalogInput
Litsuruneentréeanalogiqueuncapteurbranché
surla
brocheA0pourallumeretéteidreuneLEDconnectée
àla
brochenumérique13.
LaduréedurantlaquellelaLEDestalluméeou
éteinte
dépenddelavaleurlueparanalogRead().
LESPOTENTIOMÈTRES
Comme une résistance passive classique, un potentiomètre (ou résistance
variable)résisteaufluxdecourantquiletraverse.Ladifférenceestqueplutôt
qued’avoirunevaleurdéterminée,cettevaleurestréglableentrezéroetune
bornesupérieure.Généralement,labornedelaplagedevaleursestimprimée
surlecorpsdupotentiomètre.Parexemple,unpotentiomètremarqué10kΩ
vouspermetdeproduireunerésistancevariantentre0et10000ohms.
On trouvedespotentiomètresde toutes taillesetde toutes formes, comme
vous pouvez le constater sur la figure suivante. Songez à tout ce que vous
réglez graduellement dans votremaison : thermostats, volume de la châine
stéréo, bouton de température du grille-pain. Dans tous ces cas, c’est
généralementàunpotentiomètrequevousavezaffaire.
Lecircuit:
*Potentiomètrereliéàlabrocheanalogique0
*Pattecentraledupotentiomètrereliéeàla
brocheanalogique
*Unebrochelatérale(n’importelaquelle)àla
masse
*L’autrebrochelatéralereliéeau+5V
*AnodedelaLED(pattelongue)reliéeàlabroche
13
*CathodedelaLED(pattecourte)àlamasse
*Note:CommelaplupartdesArduinodisposent
d’uneLED
intégréereliéeàlabroche13delacarte,la
LED
externeestoptionnelle.
CrééparDavidCuartielles
Modifiéle30août2011
ParTomIgoe
Cetexempledecodeestdansledomainepublic.
http://arduino.cc/en/Tutorial/AnalogInput
*/
intsensorPin=A0;//Sélectionnerlabroche
d’entrée
pourlepotentiomètre
intledPin=13;//Sélectionnerlabrochepour
la
LED
intsensorValue=0;//Variablepourstockerla
valeur
issueducapteur
voidsetup(){
//DéclarerledPinensortie:
pinMode(ledPin,OUTPUT);
}
voidloop(){
//Lirelavaleurducapteur:
sensorValue=analogRead(sensorPin);
//ActiverledPin
digitalWrite(ledPin,HIGH);
//Arrêterleprogrammedurant<sensorValue>
millise-
condes:
delay(sensorValue);
//DésactiverledPin:
digitalWrite(ledPin,LOW);
//Arrêterleprogrammedurant<sensorValue>
millise-
condes:
delay(sensorValue);
}
Unefoislecroquistéléversé,tournezlepotentiomètre.LaLEDclignoteplusoumoinsrapidementselonlavaleurdelarésistance.VouspouvezajouteruneautreLEDentrelesbroches13etGNDpouraméliorerlespectacle.
FIGURE7-6LecurseurdupotentiomètreestconnectéàlabrocheA0.
FIGURE7-7UnschémaducircuitAnalogInput.
Sivousnevoyezriens’allumer,revérifiezvotrecâblage:
» Vérifiezquevousutilisezlabonnebrochepourlepotentiomètre.
» VérifiezquelaLEDestbienconnectée,lalonguepatteétantreliéeà
labroche13,etlacourteàGND.
» Vérifiezlesconnexionssurlaplatined’essai.
ComprendrelecroquisAnalogInputDanslecodesourceducroquis,lesdéclarationsinitialesprécisentlesbrochesqueleprogramme va utiliser. La broche pour la lecture analogique est nomméesensorPinet correspond àA0. C’est la première des six broches analogiques,numérotéesde0à5.LesvariablesledPinetsensorPinsontdéclaréesentantquevariablesclassiques.Vousauriezpulesdéclarercommedesconstantesentières(const int), car leurs valeurs ne changent pas. Comme la valeur desensorValuedoitpouvoirchanger,elledoitpoursapartresterdéclaréecommevariable.
intsensorPin=A0;//Broched’entréepourle
poten-
tiomètre
intledPin=13;//Brochedesortiepourla
LED
intsensorValue=0;//Variablepourstockerla
valeur
issueducapteur
Dans la fonction setup(), vous n’avez qu’à déclarer le mode d’utilisationpinModede la broche numériqueledPin. Les entrées analogiques ne sont quepourdesentrées,commeleurnoml’indique.
voidsetup(){
//DéclarerledPinensortie:
pinMode(ledPin,OUTPUT);
}
Vouspouvezaussiutiliserlesbrochesd’entréeanalogiquescommebrochesd’entréeoudesortienumériques.Danscecas,au lieude lesdésignercommebrochesA0àA5,vouslesidentifiezcommebrochesnumériquessupplémentaires14à19.Ilfaudradéclarer que chacune est une broche d’entrée ou de sortie à l’aide de la fonctionpinMode().
Tout comme le croquisButton, le croquisAnalogInput commence par lire l’état ducapteur.Lorsquevousutilisez la fonctionanalogRead(), il interprète la tensionappliquée à la broche analogique. Cette tension varie ici avec la résistance dupotentiomètre.Laprécisiondépendde laqualitédecedernier.L’Arduinoutiliseunconvertisseur analogique-vers-numérique de l’ATmega328 pour interpréter cettetension.Aulieuderenvoyer0V,0,1V,0,2Vetainsidesuite,l’Arduinoretourneunentiercomprisentre0et1023.Parexemplesi la tensionestde2,5V, l’Arduinovarenvoyerlavaleurnumériqueentière511.
C’estunebonneidéequedelirel’étatducapteuravanttoutechose.Eneffet,quoiquelabouclesoitexécutéetrèsrapidement,ilvautmieuxlirel’étatducapteuravantpouréviterdesubirundélaidanssontraitement.Celaévitedelaisserl’utilisateurpenserquel’Arduinometdutempsàrépondreàsonactionsurlecapteur.
Une fois que la variable de travail sensorValue a reçu la valeur lue par lafonction,lasuiteducroquisestapproximativementlamêmequeBlink,maisavecundélai variable.ledPin reçoitHIGH, on attend,ledPin reçoitLOW, on attend,puislavaleurducapteurestrelueetleprocessusestrépété.
Enutilisantunevaleurbruteducapteur(entre0et1023)pourdélai,celafaitvarierledélaientre0etunpeuplusd’uneseconde.
voidloop(){
//Lirelavaleurducapteur:
sensorValue=analogRead(sensorPin);
//ActiverledPin
digitalWrite(ledPin,HIGH);
//Arrêterleprogrammedurant<sensorValue>
millise-
condes:
delay(sensorValue);
//DésactiverledPin:
digitalWrite(ledPin,LOW);
//Arrêterleprogrammedurant<sensorValue>
millise-
condes:
delay(sensorValue);
}
Ce croquis fait clignoter la LED à différentes fréquences, mais n’oubliez pas quequand le clignotement ralentit, les délais utilisés dans la boucle sont toujours pluslongs,sibienque lecapteurest ludemoinsenmoinsfréquemment.Celapeutvousdonnerl’impressionquelecapteurestmoinsréactiflorsquelarésistanceestélevée.Pourd’autresconsidérationssurlescapteurs,notammentpoursavoircommentmieuxleslireetlescalibrer,reportez-vousauchapitre11.
BidouillerlecroquisAnalogInputLa fonctionanalogRead() fournit une valeur entière, et vous pouvez l’utiliserdanstoutessortesdecalculs.Danscetexemple,jevousmontrecommentvérifiersilavaleurducapteuradépasséounonunevaleurchoisiecommeseuil.
Vous pouvez fixer ce seuil en plaçant toute la partie à partir de la lignedigitalWrite()dansuneinstructionconditionnelleif.Dans lecodequisuit,laLEDneclignotequesilavaleurducapteurdépasse511.
voidloop(){
//Lirelavaleurducapteur:
sensorValue=analogRead(sensorPin);
if(sensorValue>511){
//ActiverledPin
digitalWrite(ledPin,HIGH);
//Arrêterleprogrammedurant<sensorValue>
millise-
condes:
delay(sensorValue);
//DésactiverledPin:
digitalWrite(ledPin,LOW);
//Arrêterleprogrammedurant<sensorValue>
millise-
condes:
delay(sensorValue);
}
}
Essayezd’ajoutervous-mêmed’autresconditions,maissachezquesiledélaiesttropgrand, le capteur ne sera pas lu très souvent. Reportez-vous au Chapitre 11 pourdécouvrird’autrescroquispermettantderésoudreleproblème.
LemoniteursérieVisualiserlesrésultatsproduitsparvotrecircuitàl’aided’uneLEDestamusant,maisceseraitpratiquedepouvoirvisualiserlesvaleursqueprendlavariabledetravail.Cen’estqu’ainsiquevoussaurezsi lecircuitsecomportede lamanièredontvousl’espérez. Les projets présentés dans cette section et dans la suivante permettentd’afficherlavaleurdesentréesenutilisantunoutildel’atelierArduino:lemoniteursérie.
Le terme série qualifie la façon dont se déroule un échange de données entre unpériphérique et un ordinateur. Dans notre cas, c’est une communication via le bussérieuniversel(USB,pourUniversalSerialBus).Dansuneliaisonsérie,lesdonnéessont tranmises octet par octet dans l’ordre où elles sont produites. Lorsque vousinterrogezdes capteurs avecunArduino, lesvaleursqui en résultent sont envoyéesdepuis l’ArduinoviacetteconnexionUSBetpeuventêtrestockéespuis interprétéessurvotreordinateur.
LecroquisDigitalReadSerial
Dans ce projet, nous allons surveiller l’arrivée de valeursHIGH etLOW dans lafenêtredumoniteursérie.
Pourceprojet,ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Unerésistancede10kΩ
» Unbouton-poussoir
» Desstraps
Les figures 7-8 et 7-9 présentent lemême circuitminimaliste que celui du croquisButtonplustôtdanscechapitre.Lecroquisestencoreplussimple.
FIGURE7-8Labroche2litl’étatdubouton-poussoir.
FIGURE7-9Unschémaducircuitdubouton-poussoir.
Assemblez ce circuit puis téléversez le code de Fichier->Exemples->01.Basics->DigitalReadSerial.
/*
DigitalReadSerial
Litunsignalnumériquesurlabroche2
Affichelerésultatsurlemoniteursérie
Cetexempledecodeestdansledomainepublic.
*/
//Lebouton-poussoirestreliéàlabroche
numérique2.
Onluidonneunnom:
intpushButton=2;
//Laroutinesetups’exécuteunefoisquandvous
pressez
reset
voidsetup(){
//Initialiselacommunicationsérieà9600bits
par
seconde:
Serial.begin(9600);
//Utiliselabrochedubouton-poussoirenentrée
pinMode(pushButton,INPUT);
}
//Laroutineloops’exécuteàl’infini
voidloop(){
//Lirel’étatdelabroched’entrée
intbuttonState=digitalRead(pushButton);
//Afficherl’étatdubouton-poussoir
Serial.println(buttonState);
delay(1);//Délaientredeuxlecturespour
plus
destabilité
}
Unefoisquevousaveztéléversélecroquis,cliquezsurleboutonMoniteursérieenhautàdroitedelafenêtreARDUINO.Vousaffichezlafenêtredumoniteursérie(voirFigure7-10),quimontre lesvaleurs reçuesenprovenancede l’Arduinovia leportsériesélectionné (lemêmequeceluiutilisépour téléverser lecroquis,àmoinsquevousn’enayezdécidéautrement).
Dans la fenêtre, vous devriez voir une cascade de valeurs 0. Pressez le boutonplusieursfoispourfaireafficherquelquesvaleurs1.
FIGURE7-10LafenêtredumoniteursérieesttrèspratiquepourvoircequefaitvotreArduino.
Sivousnevoyezrien,ousilesvaleurssontétranges,revérifiezvotrecâblage:
» Vérifiezquevousutilisezlabonnebrochepourlebouton-poussoir.
» Vérifiezlesconnexionssurlaplatined’essai.
» Sivousvoyezdesnombresétrangesetnondes0etdes1,vérifiez
ledébitdumoniteursérie;s’iln’estpasréglésur9600,utilisezle
menudéroulantducoininférieurdroitpoursélectionnercedébit.
ComprendrelecroquisDigitalReadSerialLaseulevariabledéclaréedanscecroquisest lenumérodebrochepourlebouton-poussoir:
intpushButton=2;
Dans la fonction de configuration, nous trouvons une nouvelle fonctionSerial.begin().Elleconfigurelavitessedelacommunicationsérie.Lenombreentreparenthèsesindiquecettevitesse,ouplutôtcedébit.Ilestexpriméenbaudsetcorrespond au nombre de bits par seconde ; dans le cas présent, 9600 bits par
seconde.Lorsque vous visualisez le contenu de la communication dans lemoniteursérie, ilest importantde lire lesdonnéesà lamêmevitessequ’ellesarrivent.Sicen’estpaslecas, lesdonnéessontécrasées,etcequevouspouvezlireàl’écrann’aplusaucunsens.Enbasàdroitedelafenêtre,vouspouvezmodifierledébit,maisildevraitpardéfautêtreréglésur9600.
voidsetup(){
//Initialiselacommunicationsérieà9600bits
par
seconde
Serial.begin(9600);
//Faitdelabrochedubouton-poussoiruneentrée
pinMode(pushButton,INPUT);
}
Danslaboucleloop, l’étatdelabrochepushButtonest luetconservédanslavariablebuttonState.
voidloop(){
//Lirel’étatdelabroched’entrée
intbuttonState=digitalRead(pushButton);
LavaleurdebuttonStateestalorsenvoyée(écrite)versleportsérieenutilisantlafonctionSerial.println().Lavarianteprintlnestutilisée,unretouràlaligneestajoutéàlafindelavaleuraffichée.Ceretouràlaligneestparticulièrementutilelorsquevouslisezdesvaleurs,carellespeuventainsiapparaîtrelesunessouslesautres,cequienfacilitelalecture,aulieud’êtrecolléeslesunesauxautres.
//Afficherl’étatdubouton-poussoir
Serial.println(buttonState);
Undélaid’unemillisecondeestajoutéàlafindelabouclepourlimiterlafréquenceàlaquellel’étatduboutonestlu.Vousrisquezdeproduiredesrésultatsimprévisiblessivouslisezplusrapidementl’état,sibienqu’ilestrecommandédeconservercedélai.
delay(1);//Délaientredeuxlecturespour
plus
destabilité
}
LecroquisAnalogInOutSerialDansceprojet,voussurveillezvialemoniteursérieunevaleuranalogiqueenvoyéeparunpotentiomètre.Cepotentiomètresecomportecommeunboutonderéglageduvolume.
Dans cet exemple, vous surveillez la valeur détectée par votre Arduino et vousl’affichezàl’écran,cequivouspermetdemieuxapprécierlaplagedesvaleursquepeutcouvriruncapteuranalogique.
Pourcecroquis,ilvousfaudra:
» UnArduinoUno
» Uneplatined’essai
» Unpotentiomètrede10kΩ
» Unerésistance(supérieurà120Ω)
» UneLED
» Desstraps
Lecircuit représentésur les figures7-11et7-12est semblableauprécédentcircuitAnalogInput,mais nous lui ajoutons uneLED reliée à la broche 9, commedans lecircuitFade.LeprogrammeallumeetéteintprogressivementlaLEDenfonctiondelarésistanceopposéeparlepotentiomètre.Commel’entréeetlasortiepeuventcouvrirdifférentesplagesdevaleurs, lecroquisdoitprévoirunemiseà l’échelle.C’estunexcellentexempled’utilisationdumoniteursériepourdébogueretafficherlesvaleursd’entréeetdesortie.
Montez le circuit et téléversez le code de Fichier->Exemples->03. Analog->AnalogInOutSerial.
/*
Analoginput,analogoutput,serialoutput
Litunevaleursurlabrocheanalogique,la
convertiten
unevaleurentière
compriseentre0et255etutilisecerésultatpour
mo-
difierlaPWMdela
FIGURE7-12Leschémaducircuit.
Afficheaussilerésultatsurlemoniteursérie.
Lecircuit:
*Unpotentiomètreconnectésurlabrochenumérique
0.
Lapattecentraledupotentiomètrevasurl’en-
tréeanalogique.
Lespatteslatéralesdupotentiomètrevontsur+5
Vet
surGND
*UneLEDreliéeàlabrochenumérique9etàGND
Crééle29Dec.2008
Modifiéle9Avr2012
parTomIgoe
Cetexempleestdansledomainepublic.
*/
//Cesconstantesnechangerontpas.Onlesutilise
pour
//désignerlesbrochesutilisées:
constintanalogInPin=A0;//Labroched’entrée
ana-
//logiqueàlaquelle
le
//potentiomètreest
relié
constintanalogOutPin=9;//Labrochepeusdo-
analo-
giqueàlaquelleest
reliée
laLED
intsensorValue=0;//Lavaleurluesurle
potentiomètre
intoutputValue=0;//Lavaleurgénéréesur
la
brochePWM
voidsetup(){
//Initialiserunecommunicationsérieà9600bits
par
seconde:
Serial.begin(9600);
}
voidloop(){
//Lirelavaleuranalogique:
sensorValue=analogRead(analogInPin);
//Laconvertirdansunevaleuranalogiqueen
sortie:
outputValue=map(sensorValue,0,1023,0,255);
//Ecrirelavaleuranalogiqueensortie:
analogWrite(analogOutPin,outputValue);
//Afficherlesrésultatssurlemoniteursérie
Serial.print(«Capteur=«);
Serial.print(sensorValue);
Serial.print(«\tSortie=«);
Serial.println(outputValue);
//Attendre2millisecondesavantunenouvelle
//itérationpourqueleconvertisseuranalo-
//gique-vers-numériquepuisses’yretrouveraprès
la
//dernièrelecture
delay(2);
}
Unefoisquevousaveztéléversélecroquis,tournezlepotentiomètre.LaLEDdevraits’allumerets’éteindreprogressivementenfonctiondelavaleurdelarésistance.
Cliquezsur leboutondumoniteur sérieenhautàdroitede la fenêtreArduinopourvoirlavaleurquevousrecevezducapteuretcellequevousrenvoyezsurlaLEDensortie.
Sivousnevoyezrien,revérifiezvotrecâblage:
» Vérifiezquevousutilisezlabonnebrochepourlepotentiomètre.
» VérifiezquelaLEDestbienconnectée,lapattelongueétantreliéeà
labroche9,etlapattecourteétantreliéeàGND,viale
potentiomètre.
» Vérifiezlesconnexionssurlaplatined’essai.
» Sivousrecevezdesnombresétrangesetnondes0etdes1,
vérifiezledébitdumoniteursérie;s’iln’estpasréglésur9600,
utilisezlemenudéroulantenbasàdroitepoursélectionnerce
débit.
ComprendrelecroquisAnalogInOutSerial
Ledébutducroquis couleplutôtde source. Ildéclare sous formedeconstantes lesdeuxbrochesutiliséespour l’entréeanalogiqueet lasortiePWM.Ildéclareensuitelesdeuxvariablespourconserverlavaleurreçueducapteur(sensorValue)etlavaleurquiestenvoyéeàlaLED(outputValue).
constintanalogInPin=A0;//Labroched’entrée
ana-
logiqueàlaquellele
//potentiomètreest
relié
constintanalogOutPin=9;//Labroche
analogiqueà
laquellelaLEDestreliée
intsensorValue=0;//Lavaleurluesurle
po-
tentiomètre
intoutputValue=0;//Lavaleurgénéréesur
la
brochePWM
Danssetup(),vousn’avezrienàfaireàpartouvrirlacommunicationsérie:
voidsetup(){
//Initialiserunecommunicationsérieà9600bits
par
seconde
Serial.begin(9600);
}
C’estdansloop()que l’actionsedéroule.Commedans lecroquisFade, il vautmieuxcommencerparlirel’entrée.LavariablesensorValueconserve lavaleurluesurlabrocheanalogInPin,quipeutvarierentre0et1024.
voidloop(){
//Lirelavaleuranalogique
sensorValue=analogRead(analogInPin);
FairevarierprogressivementlaluminositédelaLEDviaPWMsupposeuneplagedevaleursentre0et255. Il fautdoncchanger l’échellesensorValuepour qu’elletiennedanslaplagedeoutputValue.Pourcefaire,vousutilisezlafonctionmap.Cette fonction attend conq paramètres : un nom de variable, le minimum et lemaximumdelaplagededépartpuisleminimumetlemaximumdelaplaged’arrivée.En utilisant la fonction map, vous pouvez donc créer une outputValueproportionnelleàsensorValue,maisàpluspetiteéchelle.
//Laconvertirenunevaleuranalogiqueensortie
outputValue=map(sensorValue,0,1023,0,255);
Cettefonctionprédéfinieesttrèsutile,maisdanslecasprésente,nousaurionspufairelamiseàl’échelleplussimplement.Eneffet,onarriveaumêmerésultatendivisantsimplementpar4.
outputValue=sensorValue/4;
La valeur deoutputValue est alors envoyée à la LED en utilisant la fonctionanalogWrite().
// Envoyer la valeur analogique en sortie
analogWrite(analogOutPin,outputValue);
C’estassezpourquelecircuitfonctionne,maissivousvoulezsavoircequisepasse,vousdevezfaireafficherlesvaleurssurleportsérie.LecoderéclametroislignesdeSerial.print, avantSerial.println, ce qui signifie que ce qui est écritfiguresuruneseulelignechaquefoisqueleprogrammeaccomplituneitération.
Letexteentrelesguillemetssertàrajouterdeslibellésoudescaractères.Vouspouvezaussi utiliser les caractères spéciaux, tels que\t, qui rajoute une tabulation pouraérerl’affichage.
//Affichelesrésultatssurlemoniteursérie
Serial.print(«Capteur=«);
Serial.print(sensorValue);
Serial.print(«\tSortie=«);
Serial.println(outputValue);
Voiciunexempledelignegénérée:
Capteur=1023Sortie=511
Labouclesetermineparunebrèvepausepourstabiliserlesrésultatsavantderepartirpour un tour, lisant l’entrée, générant la sortie et affichant les informations sur lemoniteursérie.
//Attendre2millisecondesavantunenouvelle
//itérationpourqueleconvertisseuranalo-
//gique-vers-numériquepuisses’yretrouveraprès
la
//dernièrelecture
delay(2);
}
Cedélaiestlargementarbitraireetpourraitfortbienn’êtrequede1msaulieude2,comme dans l’exemple précédent. Si le capteur est capricieux, vous pourriezaugmenterlapausejusqu’à10ms,maiss’ilréagittrèsbien,vouspouvezsupprimerledélai.Iln’yapasdevaleurmagique.
D
Chapitre8Moteurs,servoseteffetssonores
DANSCECHAPITRE
» Exploiterunmoteuràcourantcontinu
» Contrôlerdespuissancesplusimportantesaveclestransistors
» Réglerlavitessedevotremoteur
» Contrôlerl’anglerenutilisantunmoteurpasàpas
» Réaliserunemusiqueélectroniqueavecunbuzzer
ansleChapitre7,vousavezvucommentutiliserunesimpleLEDensortiedevoscircuits. Même si au royaume d’Arduino rien n’est plus beau qu’une LEDclignotante,denombreusesautresoptionsdesortiesontàvotredisposition.
Dans ce chapitre, j’exploredeux autresdomaines : lemouvementmécanique fourniparunmoteurélectriqueetlesongénéréparunbuzzerpiézoélectrique.
ExploiterunmoteurélectriqueLesmoteursélectriquespermettentdeproduiredesdéplacementsmécaniquesgrâceàla puissance de l’électromagnétisme fourni par l’électricité. Lorsqu’un courantélectriquepasseàtraversunebobinedefil, ilcréeunchampélectromagnétique.Ceprocessusfonctionnedefaçonsimilaireàceluid’unaimantrectangulairestandard,àceciprèsquevous avez lapossibilitéde l’activeroude ledésactiver àvolonté etmêmedemodifier ladirectionduchampmagnétique.Sivousvoussouvenezdevosleçonsdel’écoleprimaire,unaimantadeuxétatspossibles:attractionourépulsion.Dansunchampélectromagnétique,vouspouvezpasserd’unétatàl’autreenmodifiantlapolarité,cequi,entermespratiques,revientàinverserlesfilspositifsetnégatifs.
On utilise des électroaimants pour de nombreux usages, qui vont des serrures àcommandeélectriqueauxélectrovannesenpassantpar la lectureet l’écrituresurundisquedur. Ils sont égalementutiliséspour souleverde la ferraille.Même legrand
collisionneur de particules du CERN utilise des électroaimants. Dans ce chapitre,j’abordeunautreusageimportantdesélectroaimants:lesmoteursélectriques.
Unmoteur électrique est constitué d’un bobinage de fil (électroaimant) qui tourneentre deux aimants classiques. En alternant la polarité de la bobine, il devientpossibledelemettreenrotation,carilestsuccessivementattiréetrepousséparlesaimants.Sicelaseproduitassezrapidement,labobinesemetalorsenrotation.
Lapremièredeschosesconsisteàcomprendrecommentlabobinepeuttourneralorsqu’elle est attachée au fil. Cela fonctionne enmontant des balais de cuivre sur unessieu. Ces balais frottent sur deux demi-cercles de cuivre, comme l’illustre laFigure8-1.Lecontactpeutêtremaintenusansavoirrecoursàdesfilsfixes.Lesdemi-cerclesimpliquentégalementquelesdeuxpointsnesontjamaisencontact,carcelacauseraituncourt-circuit.
FIGURE8-1Connexionélectriquedel’axedumoteur(rotor).
Vous pouvez affecter une bobine tournant librement autour d’un axe en plaçant àproximitédecettedernièredeuxaimantspermanents.CommelemontrelaFigure8-2,cesaimantssontplacésdepartetd’autrede labobine,unpôledifférentdechaquecôté.Sivousfaitespasseruncourantélectriquedanslabobine,vousluidonnezunepolarité – nord ou sud, comme avec des aimants conventionnels. Si la bobine estorientéenord,elleserarepousséeparl’aimantNordetattiréeparl’aimantSud.
FIGURE8-2Principedefonctionnementd’unmoteurélectrique.
Sivousregardezdenouveaulebalai,vousvousapercevrezquequelquechosearrivelorsque la bobine effectue une demi-rotation : la polarité s’inverse. Lorsque cela
arrive,lecyclerecommencedenouveauetleNorddelabobinedevientleSud.ElleestalorsrepousséeversleNordparl’aimantSud.Enraisondel’impulsionproduitelorsque la bobine est repoussée, lemouvement continu dans lamêmedirection tantqu’ilexisteuncourantsuffisant.
Ils’agitdelaformelaplusélémentairedemoteurélectrique,etlesmoteursmodernessontbienplusraffinés,ilsdisposentdeplusieursbobinesetaimantsafindeproduireun mouvement fluide. D’autres moteurs sont également basés sur ce principe maisdisposed’unmécanismepermettantuncontrôleplusfindumouvement,ilspeuventparexemplesedéplacerd’unnombrededegrésspécifiqueouversunepositionprécise.Cesontdesservomoteurs.Dansvotrekit,vousdevriezdisposerdesdeuxvariétésdemoteursélectriques:unmoteuràcourantcontinuetunservomoteur.
DécouvrirladiodeLadiodeestunélémentessentielpouralimenterunmoteurélectrique.Commenousl’avons expliqué plus haut dans ce chapitre, vous pouvez faire tourner un moteurélectriqueenlesoumettantàunetension.Cependant,sionfaittournerlebobinage(lerotor) sansqu’il soit sous tension, ilvaà son tourengénéreruneen sensopposé ;c’estainsiquefonctionnentlesgénérateursélectriquesetdynamos:ilsproduisentdel’électricitéàpartirdumouvementmécanique.
Si cette inversion survient dans votre circuit, les effets peuvent en être désastreux.Pourbloquercecourantinverse,nousutilisonsunediode.Unediodenelaissepasserle courant que dans un sens. Le courant circule de l’anode vers la cathode. LaFigure8-3montre l’aspect physique et le symbole d’une diode de faible puissancecommecellesquel’onutilisedansnosmontages.
FIGURE8-3Unediodephysiqueetsonsymboleschématique.
Fairetournerunmoteuràcourantcontinu
Lemoteuràcourantcontinudevotrekit(connusouslenomdemoteuràbalais)estleplus simple de tous les moteurs électriques et est généralement utilisé pour lesactivitésde loisirs tellesque lemodélisme.Lorsqu’uncourant traverseunmoteurà
courant continu, il tourne dans une direction jusqu’à ce que le courant s’arrête. Àmoinsqu’ilnesoitmarquéd’un+oud’un-,lesmoteursàcourantcontinun’ontpasdepolarité, cequi signifiequevouspouvez intervertir leursdeux filspour inverser lesensdumoteur.Ilexistebiend’autrestypesdemoteursplusimposants,maisdanscetexemplenousnenousfocalisonsquesurdespetitsmoteursdestinésauxactivitésdeloisirs.
Dans cette section, je vais vous montrer comment réaliser un circuit de contrôlesimplepermettantdedémarreretd’arrêtervotremoteur.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Untransistor
» Unmoteuràcourantcontinu
» Unediode
» Unerésistancede2,2kΩ
» Unstrap
La Figure 8-4 représente le circuit et le schéma de la Figure 8-5 devrait clarifierexactementsaréalisation.Pouralimenterlemoteur,vousdevezluifourniruncourantde 5V.Cette tension permet de faire tourner lemoteur,mais vous devez placer untransistor juste après le moteur pour le piloter. Le transistor, comme décrit dansl’encart « Fonctionnement des transistors » est un commutateur à commandeélectriquequipeutêtreactivéviavosbrochesdesortiesnumériquesArduino.
Danscetexemple,letransistorseracontrôléparlabroche9devotreArduino,unpeuà la manière d’une LED, à ceci près que le transistor vous permet d’ouvrir et defermerlecircuitd’alimentationdumoteur.
Cecircuitfonctionne,maisiln’estpasàl’abrid’uncourantinversedûàl’inertiedumoteur lorsque celui-ci ralentit. Si un courant négatif est généré, il partira du côténégatifdumoteuretchercheralaroutelapluscourteverslamasse.Cetitinérairepeutpasserparletransistorouparl’Arduino.Commevousnepouvezpasprévoircequivasepasser,vousdevezfournirunmoyendecontrôlercetexcèsdecourant.
Pourêtretranquille,vousplacezunediodeenparallèleaveclemoteur.Ainsi,siuncourantestgénérédansladirectionopposée,ilserabloquéetnepourraendommagerl’Arduino.
FIGURE8-5Uncircuitavectransistorcontrôlantvotremoteurélectrique.
FONCTIONNEMENTDESTRANSISTORS
Parfoisiln’estpaspossibleouenvisageabled’alimenterunesortiedirectement
à partir de vos broches Arduino. En utilisant un transistor, vous pouvez
contrôler un circuit de plus grande puissance à partir de votre modeste
Arduino.
Lesmoteursetlesdispositifsdesortieplusimportants(commedenombreux
éclairages)nécessitentsouventunetensionet/ouuncourantsupérieuràcelui
quepeuventfournirvosbrochesArduino;ilsreposentdoncsurleurspropres
circuits pour obtenir cette puissance. Pour être enmesure de les contrôler,
vous pouvez utiliser un composant appelé transistor. De la mêmemanière
qu’uncommutateurphysiquesertàouvriroufermeruncircuit,untransistor
est un commutateur électroniquequi peut êtreouvert ou ferméenutilisant
une tension de commande très faible. Il existe un très grand nombre de
transistors,chaquemodèledisposedesapropreréférence.Voustrouverezsur
Internetviases référencesdes informationsdétailléesàsonsujet.Celuique
j’utilisedansl’exempledecettesectionestun2N2222quiestuntransistorde
typeNPN(négatif-positif-négatif).IlexisteaussidestransistorsPNP.
Untransistordisposedetroisconnexions:lecollecteur,labaseetl’émetteur.
Labasecorrespondàl’endroitoùlesignalnumériqueArduinoestenvoyé;le
collecteur est la source d’alimentation et l’émetteur correspond à lamasse.
Unecatégoriespécialedetransistorsutiliseuneffetdechamp;danscecason
parle de grille pour la base, de drain pour le collecteur et de source pour
l’émetteur.Lesconnexionssontnumérotéesetnomméesafinquevousneles
confondiezpas.Surleschémadecircuit,ilssontindiquéscommesurladroite
delafiguresuivante: lecollecteurenhaut, labaseàgaucheetl’émetteuren
bas.
Sivousplacezladiodedanslemauvaissens,lecourantcontournelemoteuretvouscréezuncourt-circuit.Lecourt-circuitdrainetout lecourantvers lamasseetrisqued’endommagervotreportUSBouauminimumvadéclencherl’affichaged’unmessagevousinformantquevotreportUSBconsommetropdepuissance.
Construisezlecircuitcommeindiqué,puisouvrezunnouveaucroquisArduinoaveclacommandeFichier->Nouveau.CliquezsurleboutonEnregistreretsauvegardez-leavecunnomfacileàretenir,commemonMoteur,puissaisissezdansl’éditeurtoutesleslignesdecodesuivantes.Soyeztrèsattentifetrelisez-vous:
//monMoteur
//Programmerédigéparlelecteur
intbrocheMot=9;
voidsetup(){
pinMode(brocheMot,OUTPUT);
}
voidloop(){
digitalWrite(brocheMot,HIGH);
delay(1000);
digitalWrite(brocheMot,LOW);
delay(1000);
}
Unefoisquevousavezsaisiceslignes,enregistrezlecroquis(Fichier->Enregistrer)etutilisez leboutonVérifier pourvérifier s’il fonctionne.L’environnementArduinovérifiequ’ilnecomportepasd’erreurdesyntaxe(lagrammairedevotrecode)etlesafficheensurbrillance,lecaséchéant,danslazonedemessage(commeexpliquéauchapitre3). Les erreurs les plus fréquentes sont dues à des fautes de frappe tel unpoint-virgule manquant, et à la sensibilité à la casse des lettres (distinction entremajusculesetminuscules).
Silecroquissecompilecorrectement,cliquezsurTéléverserpourtransférerlecodeexécutablesurvotrecarte.Vousdevriezvoirvotremoteurtournerdurantunesecondepuiss’arrêterunesecondeetreprendrececyclesanscesse.
Sicen’estpascequisepasse,revérifiezvoscâblages:
» Assurez-vousdebienutiliserlabrochenuméro9.
» Assurez-vousquevotrediodeestbienorientée(aveclabandeface
àlaconnexion5V).
» Vérifiezlesconnexionssurlaplatined’essai.
ComprendrelecroquismoteurIl s’agit d’un croquis très simple, et vous remarquerez peut-être qu’il s’agit d’unevariationducroquisBlink.
Danscetexemple,nouschangeonsdematériel,maisnousutilisonslemêmecodequepourcontrôleruneLED.
Enpremierlieu,unevariableestdéclaréepourutiliserlabrochenuméro9.
intbrocheMot=9;
Danslaconfiguration,labroche9estdéfinieentantquesortie.
voidsetup(){
pinMode(brocheMot,OUTPUT);
}
Danslaboucle,lesignaldesortieprendlavaleurHIGH,puisleprogrammemarqueunepausede1000ms(1seconde),lasortieprendlavaleurLOW,suituneautrepausede1000msetlecycleserépète.
voidloop(){
digitalWrite(brocheMot,HIGH);
delay(1000);
digitalWrite(brocheMot,LOW);
delay(1000);
}
ContrôlerlavitessedevotremoteurActionner et arrêtervotremoteur est une chose,maisvous aurez souventbesoindedisposerd’uncontrôlefindelavitessederotation.
Leschémasuivantmontrecommentcontrôlerlavitessedevotremoteurenutilisantlemêmecircuit.
LecroquismonMotVitEnutilisantlemêmecircuitquedanslaprécédentesection,ouvrezunnouveaucroquisArduino, sauvez-le avec un nouveau nom facile à retenir, tel que monMotVit, etsaisissezlecodesuivant.
intbrocheMot=9;
voidsetup(){
pinMode(brocheMot,OUTPUT);
}
voidloop(){
for(intvalVitesse=0;valVitesse<=255;
valVitesse
+=5){
analogWrite(brocheMot,valVitesse);
delay(30);
}
for(intvalVitesse=255;valVitesse>=0;
valVitesse
-=5){
analogWrite(brocheMot,valVitesse);
delay(30);
}
}
Une fois le croquis saisi, enregistrez-le et cliquez sur le boutonCompiler. En casd’erreur,l’environnementArduinoindiqueraensurbrillancetouteerreurgrammaticaledanslazonedemessage.
Silecroquisestcompilécorrectement,cliquezsurTéléverserpourletransférerversvotrecarte.
Cetteopérationeffectuée,votremoteurdevrait tourner très lentementpuisaccélérerpouratteindresavitessemaximaleetralentirdenouveaujusqu’àl’arrêtetrépétercemotif.Sicesétapessontdifficilesàobserver,fixezsurl’axedumoteurquelquechosedevisiblecommeunpetitmorceauderubanadhésif,vousverrezainsimieuxcequisepasse.
Vous constaterez qu’à sa vitesse la plus faible on entend juste le ronronnement dumoteur. Cela signifie simplement que l’électroaimant ne dispose pas d’une tensionsuffisantepourlefairetourner;illuifautunetensionplusimportantepourgénérerlemagnétismeetprendredel’élan.
ComprendrelecroquismonMotVitCe croquis diffère légèrement du croquis Fade décrit au chapitre 7, cependant ilfonctionne exactement de lamêmemanière. La broche que vous allez utiliser pourcontrôlerlecircuitdumoteuretlabrochenumérique9,déclaréecommececi:
intbrocheMot=9;
Commeils’agitd’unesortie,elleestdéclaréedanslaconfiguration.
voidsetup(){
pinMode(brocheMot,OUTPUT);
}
Danslaboucleprincipale,vousutilisezanalogWrite()pourenvoyerunevaleurPWMsurlabroche9.C’estlemêmeprincipequedanslecroquisFadequenousnousutilisionspourfairevarieruneLED.Lapremièreboucleforenvoieunevaleurverslabroche9.Cettevaleuraugmentegraduellementjusqu’àcequ’elleatteignelavaleur
maximale PWM de 255. La seconde boucle for décrémente graduellement cettevaleurjusqu’à0;puislecyclereprend.
voidloop(){
for(intvalVitesse=0;valVitesse<=255;
valVitesse
+=5){
analogWrite(brocheMot,valVitesse);
delay(30);
}
for(intvalVitesse=255;valVitesse>=0;
valVitesse
-=5){
analogWrite(brocheMot,valVitesse);
delay(30);
}
}
Remarquezl’indentationdesaccoladesfermantes:cellesdesblocsconditionnelsforsont décalées de deux positions par rapport à lamarge. Cela permet de bien voirqu’ellesserventàcloredesblocsd’unsous-niveauparrapportàl’accoladefermantedelafonctionloop().
Ceprocessuspourraitêtrecomparéàceluidurégimed’unmoteurdevoiture.Sivousappuyezàfondsurlapédale,vousaccélérezàpleinrégime.Sivousdonnezuncoupsec sur la pédale d’accélération, lemoteur accélère, puis ralentit. Si vous tapez àintervallesréguliersavantquelemoteurneralentisse,vousatteindrezunéquilibreetobtiendrezunevitesseplusoumoinsconstante.
C’est exactement ce que fait le transistor, à ceci près qu’il effectue cette opérationbeaucoupplusrapidement.Lesintervallesentrelesétats«activé»et«désactivé»couplés à l’inertie du moteur permettent d’obtenir un comportement analogique àpartird’unsignalnumérique.
ContrôlerlavitessedevotremoteurLecroquisdelasectionprécédentepermetdevarierlavitessedumoteur.Danscettesection, vous allez découvrir comment, via quelques entrées, il est possible decontrôlerprécisémentsonrégimederotation.
LecroquisMotorControlPourpouvoircontrôlerlavitessedevotremoteuràvotreguise,vousdevezajouterunpotentiomètreàvotrecircuit.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Untransistor
» Unmoteuràcourantcontinu
» Unediode
» Unpotentiomètrede10kΩ
» Unerésistance(onditaussirésistor)de2,2kΩ
» Desstraps
Suivez le croquis de la Figure8-6 et le croquis de la Figure 8-7 afin d’ajouter unpotentiomètreàvotrecircuitdecommandemoteur.
FIGURE8-6Uncircuitàtransistorpourpilotervotremoteurélectrique.
FIGURE8-7Schémad’uncircuitàtransistor.
Trouvez une place sur la platine d’essai du projet précédent pour y ajouter lepotentiomètre.Labrochecentraledupotentiomètreestconnectéeàlabroche9viaunstrap,lesdeuxbrochesrestantessontconnectéesau5VetàlamasseGND.Intervertirce branchement inversera la valeur que le potentiomètre renvoie à l’Arduino.Bienquelepotentiomètreutiliselamêmemasseetlamêmepuissancequelemoteur,notezqu’ilssontsurdescircuitsséparésquicommuniquentvial’Arduino.
Lorsquevousaurezcréélecircuit,ouvrezunnouveaucroquisArduinoetenregistrez-leavecunnomexplicitetelquemonMotorControl.Puissaisissezlecodesuivant:
//monMotorControl
intbrochePotar=A0;
intbrocheMot=9;
intvalPotar=0;
intvalVitesse=0;
voidsetup(){
Serial.begin(9600);
}
voidloop(){
valPotar=analogRead(brochePotar);
valVitesse=map(valPotar,0,1023,0,255);
analogWrite(brocheMot,valVitesse);
Serial.print(“Potentiometre=“);//Pasde
lettres
accentuées!
Serial.print(valPotar);
Serial.print(“\tMoteur=“);
Serial.println(valVitesse);
delay(2);
}
Lorsquevousaurezsaisicecroquis,enregistrez-leetcliquezsur leboutonVérifierpourmettreenévidenceleserreursdesyntaxe.
Si le croquis se compile correctement, cliquez sur Téléverser pour transférer lecroquisversvotrecarte.
Unefoisletransfertestachevé,vousdevriezêtreenmesuredecontrôlervotremoteurvia le potentiomètre. Actionnez le potentiomètre dans une direction pour le faireaccélérer,puisdansl’autredirectionpourlefaireralentir.
La section suivante vous explique comment le code permet au potentiomètre demodifierlavitessedumoteur.
ComprendrelecroquisMotorControlCecroquisestunevariationducroquisAnalogInOutSerial.Ilfonctionneexactementde lamême façon.Seulsquelquesnomsont été changéspourpermettreunmeilleursuividecequiestcontrôlésurlecircuit.
Ici encore, vous commencez par déclarer les différentes variables utilisées par lecroquis. Vous utilisez la variable brochePotar pour assigner la broche dupotentiomètreetlavariablebrocheMotpourenvoyerunsignalaumoteur.LavariablebrochePotarestutiliséepourstockerlavaleurbrutedupotentiomètreetlavariablevalVitessepourstockerlavaleurconvertieàenvoyerversletransistorpouractionnerlemoteur.
intbrochePotar=A0;
intbrocheMot=9;
intvalPotar=0;
intvalVitesse=0;
Reportez-vousàl’exempleAnalogInOutSerialduchapitre7pourplusdedétailssurlefonctionnementdececroquis.
PeaufinerlecroquisMotorControlVousdécouvrirezqu’ilexisteunevitesseminimaleendessousdelaquellelemoteurcale,carcederniernedisposeplusd’assezdepuissancepourtourner.Enobservantlesvaleursenvoyéesaumoteuràl’aideducroquismonMotVit,vouspouveztrouvercettevaleurminimaleetmodifierenconséquencelavariablevalVitesseafinderesterdansleslimitespermisesparlemoteur.
Suivezlesétapesci-dessouspourdéfinirlaplagedevaleursdevalVitesse:
1. UnefoislecroquisMotorControltéléversé,cliquezsurle
boutonMoniteursériesituédanslecoinsupérieurdroitde
votrefenêtreArduino.
LafenêtreMoniteursérievousindiqueralavaleurdupotentiomètre
suivieparlavaleurdesortieenvoyéeverslemoteur:
Potentiometre=1023Moteur=255
Cesvaleurssontaffichéesdansunelongueliste.Elleschangentà
chaquefoisquevoustournezlepotentiomètre.Sivousnevoyezpas
cettelistedéroulerverslebas,assurez-vousd’avoirbiensélectionné
l’optionAutoscroll.
2. Encommençantaveclavaleurzéropourlepotentiomètre,
tournezcederniertrèslentementjusqu’àcequelemoteur
arrêtederonronneretqu’ilcommenceàtourner.
3. Preneznotedelavaleuraffichéeàcemomentprécis.
4. Utilisezuneinstructionifpourindiqueraumoteurdene
modifiersavitessequesilavaleurestsupérieureàlavitesse
minimumnécessairepourlefairetourner,commececi:
(a).Retrouvezlefragmentdevotrecodequienvoielavaleur
valVitesseaumoteur:
analogWrite(brocheMot,valVitesse);
(b).Remplacezcetteinstructionparleblocdelignessuivant:
if(valVitesse>monSeuil){
analogWrite(brocheMot,valVitesse);
}else{
digitalWrite(brocheMot,LOW);
}
5. ÀprésentremplacezmonSeuilparlenombrequevousavez
notépréalablement.
SilavaleurvalVitesseestsupérieure,lemoteuraccélère;sielle
estinférieure,labrocheestforcéeàLOWetestainsivraiment
désactivée.Vouspourriezégalementécrire
analogWrite(brocheMot,0)pouraccomplirlamêmetâche.De
tellespetitesoptimisationspeuventvousaideràréaliserdes
fonctionsplusfluidesetplusprécises.
LesservomoteursUn servomoteur est composé d’un moteur et d’un dispositif appelé encodeur quipermet de contrôler l’angle de rotation de l’axe dumoteur. Les servomoteurs sontutiliséspour lesmouvementsdeprécision. Ilspermettentde faire tourner lemoteurd’un nombre de degrés précis afin de le positionner à un emplacement exact. Enutilisant votreArduino, vous pouvez indiquer au servomoteur le nombre de degrésqu’il doit effectuer depuis sa position actuelle. La plupart des servomoteurs ne sedéplacentquesurundemi-tour,maisilestpossibledecontournercettelimitation.
Leservomoteurdevotrekitseraprobablementsimilaireàl’undeceuxreprésentésàlaFigure8-8. Ils’agitd’unservomoteuràengrenagesenplastiquenepouvantgérerque des efforts relativement légers. Lorsque vous aurez expérimenté ces petitsmoteurs, vous pourrez vous tourner vers de plus grandsmodèles capables de gérerdeschargesbienpluslourdes.
FIGURE8-8:Unservomoteur.
Les servomoteurs sont largement utilisés en robotique pour réaliser des robotsmarcheurs qui nécessitent un contrôle précis du mouvement de chacun de leursmembres.
Les exemples de la section suivante vous guideront pour réaliser les opérationsbasiques nécessaires à l’envoi d’un signal vers un servomoteur et à son contrôledirectviaunpotentiomètre.
RéaliserdesmouvementsdebalayageCe premier exemple de servomoteur ne nécessite qu’un seul moteur auquel vouspourrez appliquer toute une gamme de mouvements. Le servomoteur effectuera unbalayageallantde0oà179o,puisreviendraàsapositioninitialedansunmouvementrappelantunessuie-glacedevoiture.
LecroquisSweepIlvousfaut:
» UnArduinoUno
» Unservomoteur
» Desstraps
Lecâblaged’unservomoteurestsimple ; ilcomporte trois fils.Pour leconnecteràvotre Arduino, utilisez directement des straps entre les broches de l’Arduino et lesupport du servomoteur comme l’illustrent les figures 8-9 et 8-10. Le servomoteurdisposeparfoisdetroisconnecteursreliésàdesfilsgénéralementdecouleurrouge,noir et blanc. L’acquisition des données et les calculs nécessaires pour lesdéplacements du moteur sont effectués dans un circuit qui est embarqué dans leservomoteur lui-même. Il ne vous reste qu’à l’alimenter et à lui envoyer un signaldepuisl’Arduino.
Lerougeestconnectéau5Vdel’Arduinoafind’alimenterlemoteuretsacircuiterie.LenoirestconnectéàGND,ilsertdemasseauservomoteur;leblancestconnectéàla broche 9 afin de contrôler les rotations. La couleur des fils peut varier, aussivérifiez la documentation de votre moteur avant d’effectuer le câblage. Un autreschémadecouleurs fréquemment rencontréest rouge (5V),marron (GND)et jaune(signal).
FIGURE8-10Diagrammed’uncircuitdeservomoteur.
MontezlecircuittelquedécritetouvrezlecroquisSweepensélectionnantFichier->Exemples->Servo->Sweep.LecroquisSweepseprésentecommesuit:
//Sweep
//parBARRAGAN<http://barraganstudio.com>
//Cetexempledecodeestversédansledomaine
public.
#include<Servo.h>
Servomyservo;//Créationd’unobjetservopour
contrô-
lerleservomoteur
//Unmaximumdehuitobjetsservo
peuventêtrecréés
intpos=0;//Variablepourstockerla
position
duservo
voidsetup()
{
myservo.attach(9);//Associel’objetservoàla
bro-
che9
}
voidloop()
{
for(pos=0;pos<180;pos+=1)//Vade0degréà
180
degrés
{//parpasde1
degré
myservo.write(pos);//Demandeauservo
d’allerà
//unepositionvariable
‘pos’
delay(15);//Attendre15msafin
quele
//servopuisse
atteindresa
position
}
for(pos=180;pos>=1;pos-=1)//Vade180
degrésà
0degré
{
myservo.write(pos);//Demandeauservod’aller
àla
position‘pos’
delay(15);//Attendre15msafinquele
servo
puisseatteindresaposition
}
}
Lorsque vous aurez trouvé le croquis, utilisez le bouton Vérifier pour vérifier lasyntaxe du code. Le compilateur devrait, comme toujours, mettre en évidence leserreursgrammaticalesenlessurlignantenrougedanslazonedemessages.
Si le croquis se compile correctement, cliquez sur Téléverser pour transférer lecroquis vers votre carte. Une fois que le chargement du croquis est achevé, votremoteurdevraitcommenceràtournerde180odansunsenspuisdansl’autre.
Siriennesepasse,vérifiezvotrecâblage:
» Assurez-vousdebienutiliserlabroche9pourlalignededonnées
(blanche/jaune).
» Vérifiezquelesautresfilsduservomoteursontcorrectement
connectésauxautresbranches.
ComprendrelecroquisSweepAudébutducroquis,vousremarquezunenouvelleinstruction.C’estunedirectivequidemanded’inséreraumêmeendroitlecontenud’unfichierquidéfinitdesvariablesetdesfonctionsd’unebibliothèque(ou librairie).Unebibliothèqueréunitunensemblede fonctions autour d’un thème et vous évite de devoir écrire vous-même cesfonctions.Ici,ils’agitd’unebibliothèquepourcontrôlerdesservomoteurs.
#include<Servo.h>
La lignesuivantecréeunobjet logiquesur lemodèlede laclasseServo.Car si labibliothèquesaitcommentcommuniqueraveclesservomoteurs,ilfautdonnerunnomaux objets qui vont incarner les composants. Dans notre cas, l’objet est nommémyservo. Comme avec vos variables, vous pouvez utiliser n’importe quel nom.Veillezcependantàcequ’il soiten rapportavecvotrecodeetqu’iln’utiliseaucundesmotsréservésparlelangageArduinotelsqueintoudelay.
Servomyservo;//Créationd’unobjetservopour
contrô-
lerleservomoteur.
//Unmaximumdehuitobjetsservo
peuvent
êtrecréés
Ladernière lignededéclarationcontientunevariabledans laquelle sera stockée lapositionduservomoteur.
intpos=0;//Variablepourstockerlapositiondu
ser-
vomoteur
Dans la routine de configuration, le seul élément à renseigner est le numéro de labroche Arduino pour communiquer avec le servomoteur. Dans ce cas, vous allezutiliserlabroche9,maisilpourraits’agirden’importequellebrochePWM.
voidsetup()
{
myservo.attach(9);//Associel’objetservoàla
bro-
che9
}
La boucle exécute deux actions simples qui sont situées dans des boucles derépétition. La première boucle for incrémente la valeur de la variable posprogressivementde0à180.Grâceàlabibliothèque,vouspouvezécrirelesvaleursen degrés au lieu d’utiliser les valeurs comprises entre 0 et 255 utilisées par lecontrôlePWM.Àchaqueitérationdelaboucle,lavaleurestincrémentéede1,puisest envoyée vers le servomoteur en utilisant une fonction spécifique de labibliothèque :<nomServo>.write(<valeur>).Une fois la valeurmise àjour,lecodeattenddurantlecourtdélaide15millisecondes,tempsnécessairepourque le moteur puisse atteindre sa nouvelle position. Contrairement à d’autresdispositifs de sortie, lorsqu’un servomoteur estmis à jour, il se positionne sur sonnouvelemplacementetnenécessitepasd’autresinformationspourydemeurer.
voidloop()
{
for(pos=0;pos<180;pos+=1)
{
myservo.write(pos);
delay(15);
}
Lasecondeboucleforréaliselamêmeopération,maisdansladirectionopposée,ramenantainsileservomoteuràsapositioninitiale.
for(pos=180;pos>=1;pos-=1)
{
myservo.write(pos);
delay(15);
}
}
Cetexempleestleplussimplequel’onpuissemettreenœuvreavecunservomoteur.Ilconstitueunbonmoyenpourtestersicedernierfonctionnecorrectement.
Contrôlermieuxunservomoteur
Maintenantquevousmaîtrisez leprincipeduservomoteur,vouspouvezessayerd’yajouter un peu plus d’interaction. En utilisant un potentiomètre (un capteuranalogique),ilestpossibledecontrôlerdirectementvotreservomoteurcommevouscontrôleriezlagâchetted’unflipper.
LecroquisKnobCet autre exemple illustre la manière d’utiliser un potentiomètre pour positionnerl’axed’unservomoteurd’unnombrespécifiquededegrés.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Unservomoteur
» Unerésistancevariablede10kΩ
» Desstraps
Le servomoteur est câblé exactement comme dans l’exemple Sweep,mais ici vousaurez besoin de deux connexions supplémentaires, 5 V et GND, pour lepotentiomètre;aussivousutiliserezlaplatined’essaipourvousfournircesbrochessupplémentaires.
» Connectezlesbroches5VetGNDdel’Arduinoauxrailspositif(+)
etnégatif(-)devotreplatine.
» Connectezleservomoteuràlaplatineenutilisantsoitunerangée
detroisbroches,soittroisstraps.
» Connectezlapriserougeàlaligne5V,laprisenoire/marronàla
ligneGNDetlapriseblanche/jauneàlabroche9del’Arduino.
Trouvezuneplacesurlaplatinepourlepotentiomètre.
» ConnectezlabrochecentraleàlabrocheA0del’Arduinoetles
brochesextérieuresau5VetàlamasseGNDdepartetd’autre.
Référez-vousaucircuitdelaFigure8-11etauschémadelaFigure8-
12.
Une fois le circuit achevé, ouvrez le croquis en sélectionnantFichier->Exemples->Servo->Knob.Lecodesourcedececroquisestlesuivant:
FIGURE8-11:Unservomoteuravecunemolettedecontrôle.
FIGURE8-12:Uncircuitdeservomoteurpilotéparunpotentiomètre.
//Contrôlelapositiond’unservoavecun
potentiomètre
(résistancevariable)
//parMichalRinotthttp://people.interaction-
ivrea.
it/m.rinott
#include<Servo.h>
Servomyservo;//Créationd’unobjetservopour
contrô-
lerleservomoteur
intpotpin=0;//Brocheanalogiquepourconnecter
le
potentiomètre
intval;//Variablestockantlavaleur
depuisla
brocheanalogique
voidsetup()
{
myservo.attach(9);//Associel’objetservoàla
bro-
che9
}
voidloop()
{
val=analogRead(potpin);//litla
valeurdu
potentiomètre
//(Valeur
entre0
et1023)
val=map(val,0,1023,0,179);//Recalculela
va-
leurpourl’utiliser
//avecle
servo
(valeurentre0et180)
myservo.write(val);//Positionne
le
servoenfonctiondela
//valeur
recalculée
delay(15);
}
Vous noterez sans doute quelques divergences entre les commentaires et le code.Lorsquequ’ilestquestiondumouvementendegrésduservomoteur,ilestfaitmentiond’uneplagedevaleursentre0et179etd’uneautreplagede0à180.N’entenezpascompte, il s’agit probablement d’une petite erreur liée au nombre important detutoriauxdisponiblesetaufaitqu’ils’agitencoredeproduitsrécentsetpastoujourstotalementfinalisés.
La plage de valeurs correctes va de 0 à 179, ce qui donne bien 180 positions.L’indexationàpartirdezéroestunepratiquecouranteavecArduino.
UtilisezleboutonVérifierpourvalidervotrecode.LecompilateurdevraitsurlignerleséventuelleserreursdesyntaxedanslazoneMessage.
Si lecroquissecompilecorrectement,cliquezsurTéléverserpour le transférersurvotre carte. Votre servomoteur devrait tourner en même temps que votrepotentiomètre.Illuiestasservi.
Siteln’étaitpaslecas,vérifiezvoscâblages:
» Assurez-vousdebienutiliserlabroche9pourconnecterlalignede
données(blanche/jaune)auservomoteur.
» Vérifiezlesconnexionsdupotentiomètreetassurez-vousquela
brochecentraleestconnectéeàlabrocheanalogique.
» Vérifiezlesconnexionssurlaplatined’essai.
ComprendrelecroquisKnobEndabutdecodesource,labibliothèque(librairie)référencéeparServo.hestinclusepuisunnouvelobjetServoestinstancié.Labroched’entréeanalogiqueestdéclaréeaveclavaleur0afind’indiquerquevousutilisezl’entréemarquéeA0.
Vousavezpeut-êtrenotéquelabrocheestdésignée0etnonA0commedansl’autreexemple.Celaneposepasdeproblème,carA0est justeunaliasde0 toutcommeA1 est un alias de 1 et ainsi de suite. L’utilisation de la notation A0 permet declarifierlecode,maisresteoptionnelle.
Ladernièrevariableàstockerestlavaleurdelecturequideviendralasortie:
#include<Servo.h>
Servomyservo;//Créationd’unobjetservopour
contrô-
lerleservomoteur
intpotpin=0;//Brocheanalogiquepermetde
connecter
lepotentiomètre
intval;//Variablemémorisantlavaleurlue
sur
labrocheanalogique
Danslaconfiguration,leseulélémentàdéfinirestmyservoquiutiliselabroche9.
voidsetup()
{
myservo.attach(9);//Associel’objetservoàla
bro-
che9
}
Au lieu d’utiliser des variables séparées pour l’entrée et la sortie, ce croquis n’enutilisequ’uneseule.Enpremierlieu,valestutilisépourstockerlesdonnéesbrutesdu capteur, une valeur allant de 0 à 1023. Cette valeur est ensuite traitée par lafonction map() afin qu’elle corresponde à la plage de valeur allant de0à179utiliséeparleservo.Cettevaleurestalorsécritedansleservovialafonctionmyservo.write(). Ici encore, 15ms d’attente sont ajoutées afin que lemoteurpuisse atteindre sadestination.Puis laboucle se répète etmet à jour laposition sinécessaire.
voidloop()
{
val=analogRead(potpin);//litlavaleurdu
poten-
tiomètre
//(Valeurentre0et
1023)
val=map(val,0,1023,0,179);//Recalculela
valeur
//pour
l’utiliser
avecleservo(valeurentre0et180)
myservo.write(val);//Positionnele
servoen
//fonctiondela
valeur
recalculée
delay(15);
}
}
Aveccesimpleajoutdanslecircuit,ildevientpossibledecontrôlerunservomoteuravec n’importe quelle sorte d’entrée. Dans cet exemple, le code utilise une entréeanalogique,maisavecquelquesmodifications,ilpourraittoutaussibienutiliseruneentréenumérique.
FaitesdubruitSivousavezterminélescroquisdumoteur,vousmaîtrisezmaintenantleprincipedesactionsphysiques.Préparez-vousàunnouveaudéfi:fairedelamusique(aumoinsdubruit) avec votre Arduino. Vous pouvez en effet générer des sons électroniques enutilisantunbuzzerpiézoélectrique.
LebuzzerpiézoélectriqueOnretrouvelebuzzerpiézoélectriquedansdesmilliersd’appareils.Sivousentendezun tic, un buzz ou un bip, il provient certainement d’un buzzer.Le buzzer piézo estcomposédedeux couches, uneplaquede céramique et uneplaquedemétal reliéesentreelles.Lorsquel’électricitépassed’unecoucheàl’autre,lepiézosecourbe,auniveaumicroscopique,produisantainsiduson(voyezsurlaFigure8-13).
FIGURE8-13Uneexagérationdesmouvementsminusculesd’unpiézo.
Sivous alternez le sensducourant entre tensionetmasse, lepiézo se courbeet serecourbe, ce qui génère un son (tic). Si cela se produit assez rapidement, ce ticdevientunevibrationpuisunson.Cesonestassezbrut,semblableàlasonneriedesancienstéléphonesouauxsonsdesjeuxvidéodesannées80.Ilsonestconnusonlenomd’ondecarrée.
Àchaquefoisquelepiézochangedepolarité, ilproduituneondecarréeauxfrontsabrupts rappelant un carré. Il existe d’autres types d’ondes sonores au son moins
tranché,tellesquelesondestriangulairesendentsdescieoulesondessinusoïdales.LaFigure8-14illustreleursdifférences.
FIGURE8-14Carrées,triangulairesousinusoïdales,cesondesauxformesdifférentesproduisentdessonsdifférents.
Lesappareilsnumériquescommecelui-ci,ainsiqued’autresdispositifs,génèrentdesondes carrées produisant un bourdonnement. Le buzzer n’est pas limité à une seulehauteurdeson(enjouantsurlalargeurentrelescarrés),Enmodifiantlafréquencedechangementdepolarité,vousgénérezdesnotes.
LecroquistoneMelodyAveccecroquis,vousallezappendreàmodifierlafréquencedevotrepiézoetàjouerunemélodieprédéfinie.Cetteconfigurationvouspermettraensuitedecomposervospropresmélodies.
Lesbuzzerspiézossontfournisdansdenombreuxkitsetilenexisteungrandnombredeformesdifférentes. Ilspeuventêtrenuscommeà laFigure8-15ou intégrésdansdesganguesdeplastiquededifférentesformesressemblantàdescylindresouàdespièces de monnaie en plastique. Ils peuvent également disposer de différentesconnexions prenant la forme de tiges dépassant de la partie inférieure du piézo oualorsdefilssortantsurlecôté.
FIGURE8-15Unbuzzerpiézoendehorsdesacoquille.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Unbuzzerpiézoélectrique
» Desstraps
Connectezlebuzzerpiézosurlaplatinedetestsetutilisezunepairedestrapspourleconnecter à la broche numérique 8 d’une part et sur la masse de l’autre. Certainspiézosontunepolarité,aussi,assurez-vousdebienconnecterlabroche9aupositif+)etlamasseGNDaunégatif(-).
D’autrespiézosparcontren’ontpasdepolarité;sivousnevoyezaucunsymbole,nevousinquiétezpas.LecroquisducircuitpiézoestillustréàlaFigure8-16,leschémaducircuitàlaFigure8-17.
Construisez le circuit puis chargez le croquis approprié en sélectionnant Fichier->Exemples->02.Digital->toneMelody.Vousobtiendrezlecodesuivant:
/*
toneMelody
Joueunemélodie
Circuit:
*Unhaut-parleur8-ohmsouunbuzzersurlabroche
numé-
rique8
créele21Jan2010
modifiéle30Août2011
parTomIgoe
Cecodeexempleestdansledomainepublic
http://arduino.cc/en/Tutorial/Tone
*/
#include«pitches.h»
//Notesdelamélodie:
intmelody[]={
NOTE_C4,NOTE_G3,NOTE_G3,NOTE_A3,NOTE_G3,0,
NOTE_B3,
NOTE_C4};
//Duréedelanote:4=quartdenoteounoire,
//8=huitièmedenoteoucroche,etc.:
intnoteDurations[]={
4,8,8,4,4,4,4,4};
voidsetup(){
//Pourchaquenotedelamélodie...
for(intthisNote=0;thisNote<8;thisNote++){
//Pourcalculerladuréedelanote,ondivise
une
secondeparletypedenote
//ex.quartdenote=1000/4,huitièmedenote
=
1000/8,etc.
intnoteDuration=1000/noteDurations[thisNote];
tone(8,melody[thisNote],noteDuration);
//Pourdistinguerlesnotes,nousindiquonsun
délai
minimumentreelles
//duréedelanote+30%semblebien
fonctionner:
intpauseBetweenNotes=noteDuration*1.30;
delay(pauseBetweenNotes);
//Arrêtedejouer:
noTone(8);
}
}
voidloop(){
//Iln’estpasnécessairederépétercettemélodie.
}
FIGURE8-17Leschémad’uncircuitdebuzzerpiézo.
Dans ce projet, l’éditeur de code sourceArduino offre une seconde page, donc unsecond fichier.Voyez l’onglet intitulépitches.h. Il contient toutes les définitions devaleurspourlesnotesàfaireémettreparvotrebuzzer.DansvotredossierdecroquisArduino,cetongletapparaît sous formede fichier individuelquidoitêtre inclusenutilisant ladirective#includesuiviedunomdu fichier à inclure. Ici, nousnousutilisons#include«pitches.h».
/*************************************************
*PublicConstants
*************************************************/
#defineNOTE_B031
#defineNOTE_C133
#defineNOTE_CS135
#defineNOTE_D137
#defineNOTE_DS139
#defineNOTE_E141
#defineNOTE_F144
#defineNOTE_FS146
#defineNOTE_G149
#defineNOTE_GS152
#defineNOTE_A155
#defineNOTE_AS158
#defineNOTE_B162
#defineNOTE_C265
#defineNOTE_CS269
#defineNOTE_D273
#defineNOTE_DS278
#defineNOTE_E282
#defineNOTE_F287
#defineNOTE_FS293
#defineNOTE_G298
#defineNOTE_GS2104
#defineNOTE_A2110
#defineNOTE_AS2117
#defineNOTE_B2123
#defineNOTE_C3131
#defineNOTE_CS3139
#defineNOTE_D3147
#defineNOTE_DS3156
#defineNOTE_E3165
#defineNOTE_F3175
#defineNOTE_FS3185
#defineNOTE_G3196
#defineNOTE_GS3208
#defineNOTE_A3220
#defineNOTE_AS3233
#defineNOTE_B3247
#defineNOTE_C4262
#defineNOTE_CS4277
#defineNOTE_D4294
#defineNOTE_DS4311
#defineNOTE_E4330
#defineNOTE_F4349
#defineNOTE_FS4370
#defineNOTE_G4392
#defineNOTE_GS4415
#defineNOTE_A4440
#defineNOTE_AS4466
#defineNOTE_B4494
#defineNOTE_C5523
#defineNOTE_CS5554
#defineNOTE_D5587
#defineNOTE_DS5622
#defineNOTE_E5659
#defineNOTE_F5698
#defineNOTE_FS5740
#defineNOTE_G5784
#defineNOTE_GS5831
#defineNOTE_A5880
#defineNOTE_AS5932
#defineNOTE_B5988
#defineNOTE_C61047
#defineNOTE_CS61109
#defineNOTE_D61175
#defineNOTE_DS61245
#defineNOTE_E61319
#defineNOTE_F61397
#defineNOTE_FS61480
#defineNOTE_G61568
#defineNOTE_GS61661
#defineNOTE_A61760
#defineNOTE_AS61865
#defineNOTE_B61976
#defineNOTE_C72093
#defineNOTE_CS72217
#defineNOTE_D72349
#defineNOTE_DS72489
#defineNOTE_E72637
#defineNOTE_F72794
#defineNOTE_FS72960
#defineNOTE_G73136
#defineNOTE_GS73322
#defineNOTE_A73520
#defineNOTE_AS73729
#defineNOTE_B73951
#defineNOTE_C84186
#defineNOTE_CS84435
#defineNOTE_D84699
#defineNOTE_DS84978
Lorsquevousaurezlulecroquis,utilisezleboutonVérifierpourvérifierlecode.Lazonedemessagesenbasdevraitvousindiquer,enlessurlignantenrouge,toutesleserreursgrammaticalestrouvéesparlecompilateur.
Silecroquissecompilecorrectement,utilisezTéléverserpourletransférersurvotrecarte.Celafait,vousdevriezentendrelebuzzervouschanterunejoliemélodie.Pourlaréécouter,appuyezsurleboutonResetdevotreArduino.
Sivousn’entendezpaslebuzzer,vérifiezvotrecâblageavecsoin.
» Assurez-vousd’avoirbienchoisilabroche8pourlasortie.
» Vérifiezquevotrepiézoestcorrectementpositionné.Lessymboles,
s’ilsnesontpasdirectementvisibles,peuventêtrecachésdessous.
Sivousn’envoyezpas,essayezdepositionnerlepiézoselonl’autre
orientation.
» Vérifiezlesconnexionsverslaplatined’essai.
ComprendrelecroquistoneMelodyC’estlepremierprojetdecelivrequiutiliseplusieursonglets.Danstouslesprojetsprécédents, il n’y avait qu’un onglet avec le code source du croquis. Ici, il y a unsecond onglet intitulépitches.hquimontre le contenu d’un fichier qui sert detablederéférencedesvaleursdetouteslesnotesdemusiquepouvantêtrejouéesparlepiézo.Commececoden’apasvocationàchanger,iln’apasbesoind’encombrerlefichierdecodeprincipal.
Le fichierpitches.h sera inséré lors de la compilation. Il s’agit d’un fichierexterne.Nousallonsutiliserlessymbolesqu’ildéfinitpourdésignerleshauteursdesonsquenousvoulonsfaireémettre.
#include«pitches.h»
Maintenant que le croquis connaît les différentes notes, nous pouvons écrire lamélodie.Elleestcontenuedansuntableauafinquelesnotessoientdisposéesselonl’ordre de lecture. Pour en apprendre davantage sur les tableaux, reportez-vous àl’encart«Introductionauxtableaux»ci-dessous.LesnomstelsqueNOTE_C4 fontréférenceauxnomsdesnotescontenusdanspitches.h.
Si vous lisez le contenu de pitches.h, vous vous apercevrez qu’il utilise unedirective du langage C nommée define pour chacune des références aux notessuivie d’un nombre ; ainsi #define NOTE_ C4 262 associe la valeurnumérique262aunomNOTE_C4(lequatrièmeDoennotationanglaisepuisqueDoRéMiFaSolLaSidonneCDEFGAB).
//Notesdelamélodie:
intmelody[]={
NOTE_C4,NOTE_G3,NOTE_G3,NOTE_A3,NOTE_G3,0,
NOTE_B3,
NOTE_C4};
Sansrythme,votremélodievasemblerétrange.Nousallonsdoncstockerladuréedechaquenotedansunsecondtableau.
//Duréedesnotes:4=quartdenoteounoire,8=
hui-
tièmedenote,etc.:
intnoteDurations[]={4,8,8,4,4,4,4,4};
Danssetup,uneboucleforestutiliséepourémettretouràtourchacunedeshuitnotes,numérotéesde0à7.LavaleurthisNoteestutiliséecommeindicepourréférencerlesélémentscorrectsdechaquetableau.
voidsetup(){
//pourchaquenotedelamélodie:
for(intthisNote=0;thisNote<8;thisNote++){
La durée est calculée en divisant 1 000 (ou une seconde) par la durée souhaitée :quatrepourunquartdenoteouunenoire,huitpourunhuitièmeouunecrocheetainside suite. Cette valeur est ensuite écrite dans la fonction prédéfinie tone(), quienverralanotecourantesurlabroche8pendantladuréedéfinie.
//Pourcalculerladuréedelanote,ondiviseune
se-
conde
//parletypedenote.
//exnoire=1000/4,croche=1000/8,etc.
intnoteDuration=1000/noteDurations[thisNote];
tone(8,melody[thisNote],noteDuration);
Unecourtepauseentrelesnotesestajoutéeafindemieuxdéfinircesdernières.Danscecas,ils’agitd’uneduréerelativeàlalongueurdelanotequicorrespondà30%deladuréecourante.
//pourdistinguerlesnotes,nousindiquonsun
temps
minimumentreelles.
//duréedelanote+30%semblebienfonctionner
intpauseBetweenNotes=noteDuration*1.30;
delay(pauseBetweenNotes);
Unefoistouteslesnotesjouées,lafonctionnoTone()sertàramenerlesilenceendésactivantlabroche8.
//Arrêtedejouer
noTone(8);
}
}
Vousserezpeut-êtreétonné,maisilnesepasseriendanslaboucleprincipaleloop().Lebutétaitdejoueruneseulefoislamélodie,etnousvenonsdelefairedanssetup().Lamélodiepourraitêtredéplacéeà l’intérieurde laboucleafinqu’ellepuisseêtrejouéeindéfiniment,maisgareauxmauxdetête.
voidloop(){
//inutilederepéterlamélodie.
}
Cetexemplemontrecommentfairejouerunemélodied’accueilaudébutd’uncroquis.Vouspourrezvouseninspirerdanscertainsprojetsfuturs.
INTRODUCTIONAUXTABLEAUX
Dans sa représentation la plus simple, un tableau est une liste de valeurs.
Pensez-y commeàune listede courses, comme l’illustre la table ci-dessous.
Chaque ligne contient une donnée qui est repérée par un nombre appelé
indice.Ce typede tableauestappelé tableauàunedimension, ilnecontient
qu’unseulélémentdedonnéesparligne.
Indice Valeur
1 pommes
2 bananes
3 oranges
Maisenquoiuntableauconcerne-t-ilArduino?Lestableauxpeuventstocker
desvaleursentières,desvaleursflottantes,descaractères,outoutautretype
dedonnées,maisicij’utilisedesentierspourfaciliterlacompréhension.Voici
untableaucontenantsixvaleursentières.
inttabloSimple[]={1,255,
-51,0,102,27};
Lamentiondetypededonnéeintstipulequelesdonnéesàstockersontdes
valeurs entières. Ce type pourrait être float (pour des valeurs à virgule
flottante,doncnonentières)oucharpourdescaractèresalphanumériques.
LenomdutableauesttabloSimple,maisvouspourriezluidonnern’importe
quelautrenom.Lescrochetsouvrantsetfermants([])contiennentlatailledu
tableau (c’est-à-dire le nombre de valeurs qu’il pourra contenir). Ici, aucune
taillen’estindiquée,puisquenousfournissonslesélémentsàystocker,cequi
permet au compilateur dedéduire que le tableau contient six éléments. Les
nombresentrevirgulesetentrelesaccolades{}sontlesvaleursdéfiniesdans
le tableau. Si aucunevaleurn’estdéfinieaudépart, le tableauest vide,mais
dansccas,ilfautindiquerunetaille.
Voicid’autresmanièresvalidespourdéclarerdestableaux:
inttabloEntiers[10];
floattabloFractionnaire[5]=
{2.7,42.1,-9.1,300.6};
chartabloTexte[14]=«Salut
toutlemonde!»;
Dans le casd’un tableaudecaractères (typechar), il fautajouter le textequiseralecontenu.Respectezcetterèglesinonvousobtiendrezdeserreurs!
Maintenantquevotretableauestdéfini,vousdevezapprendreàl’utiliser.Pour
lireouécrirelesvaleursstockéesdansletableau,vousdevezvousyréférervia
leurindice.Ainsi,sivoussouhaitezenvoyerunevaleuraumoniteursérie,vous
devrezécrire:
Serial.println(tabloSimple[2]);
Cequiafficheralavaleur-51quicorrespondàl’élémententroisièmeposition
dans le tableau (souvenez-vous que nous commençons à zéro, donc c’est
l’indice2).
Vouspouvezdelamêmefaçonmodifierlesvaleursdutableau.Unemanière
efficace d’y parvenir consiste à utiliser une boucle for afin de parcourir le
tableau (se référer au Chapitre 11 pour plus de détails) comme l’illustre
l’exemplesuivant:
for(inti=0;i<6;i++){
tabloSimple[i]=analo
gRead(sensorPin);
}
La boucle for est ici exécutée six fois, augmentant la variable ici de 1 à
chaquetour.Lamêmevariablesertaussid’indicedansletableau;ainsi
chaque nouvelle lecture analogique de sensorPin est stockée à la position
désignéeparl’indicecourantetcetindiceestincrémentépourleprochaintour
deboucle.
Les tableaux peuvent être bien plus complexes, stocker de nombreuses
chaînes de caractères et même être multidimensionnels, à la manière des
tableurs dans lesquels de nombreuses valeurs sont stockées pour chaque
indice.
Pour plus d’informations, rendez-vous sur la page de référence officielle
d’Arduinoconsacréeauxàhttp://arduino.cc/en/Reference/Array.
CréervotreinstrumentinteractifDanslasectionprécédente,vousavezdécouvertcommentremplacerdansvotreprojetleclignotementd’uneLEDparunson.Dansleprochainexemple,vousirezbienplusloindans l’utilisationdessonspuisquevousallezcréervotrepropre instrument,uninstrumentsemblableàunTheremin.LeTheremin,ainsinomméenraisondunomdeson inventeur LéonTheremin, a été développé dans les années 20. Ce fut l’un despremiersinstrumentsélectroniques.Ilfonctionneendétectantlespertubationsdesonchampélectromagnétiqueprovoquéesparlesdéplacementsdesmainsdel’interprète:unemainpermetdejouersurlevolumeetl’autresurlahauteurduson.
LecroquisPitchFollowerDanscecroquis,vousallezdécouvrircommentréaliserunThereminàfaiblecoûtenutilisantunpiézoetuncapteurdelumière.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Unpiézo
» Undétecteurdelumière
» Unerésistancede4,7ohms
» Desstraps
Cecircuitestdiviséendeux:lepiézoetlecircuitdedétectiondelumière.Lepiézoestcâblécommedans lecroquis toneMelody,avecunfilsur labrochedigitale8etl’autresurGND.LecapteurdelumièreestconnectéàAnalog0etàlamasse(commel’illustrent les figures 8-18 et 8-19). Si vous ne disposez pas d’une résistancede 4,7 Kohms (jaune, violet, rouge), utilisez celle dont vous disposez qui s’enrapprocheleplus(parexcès).
Construisez le circuit puis ouvrez le croquis en sélectionnant Fichier->Exemples->02.Digital->tonePitchFollower.
/*
Pitchfollower
Produitunsonquichangedehauteurselonle
changement
d’entréeanalogique
Circuit:
*Buzzerondigitalpin8
*photoresistoronanalog0to5V
*4.7Kresistoronanalog0toground
créé21Jan2010
modifié9Avr2012
parTomIgoe
Cetexempleestdansledomainepublic.
http://arduino.cc/en/Tutorial/Tone2
*/
voidsetup(){
//initialisedescommunicationsensérie(débogage
seul):Serial.begin(9600);
}
voidloop(){
//petitsensor:
intsensorReading=analogRead(A0);
//imprimelalecturedusensorpourconnaîtrela
plage
Serial.
println(sensorReading);
//mappelesondelaplagedel’entréeanalogique.
//changeleminimumetmaximumdunumérod’entrée
//enfonctiondelaplagedusensor:
intthisPitch=map(sensorReading,400,1000,100,
1000);
//litleson:
tone(8,thisPitch,10);
delay(1);//délaientreleslecturespourstabilité
}
Commevoussavezlefairemaintenant,utilisezlacommandeCompilerpourvérifierlecode.TouteerreurdesyntaxeapparaîtraenrougedanslazoneMessage.
Silecroquissecompilecorrectement,utilisezTéléverserpourtransférerlecroquisvers votre carte. Cela fait, vous devriez disposer d’un capteur de lumière capabled’influersurlesondevotrebuzzer.
Siteln’étaitpaslecas,assurez-vousquelazoneestcorrectementéclairée,etorientezune lampe vers votre platine d’essai. Cela devrait augmenter la différence lorsquevouscouvrirezledétecteurdelumièredevotremain.
FIGURE8-19Leschémad’unTheremincontrôléparuncapteurdelumière.
Siriennesepasse,revérifiezlecâblage:
» Assurez-vousdebienutiliserlesvaleurscorrectespourlesbroches
d’entréeetdesortie.
» Vérifiezquevotrepiézoestorientéduboncôté.
» Vérifiezlesconnexionssurvotreplatined’essai.
ComprendrelecroquisSicecroquisestbienpluscourtqueleprécédent,c’estqu’ilconvertitdirectementenfréquences les informations provenant du détecteur de lumière plutôt que de passerparunetabledenotes.C’estcequipermetdeglisserd’unenoteàl’autreaulieudepasserpardesétapes.Onappellecelaleportamento.
Dans la fonction setup(), le port série est ouvert pour permettre de contrôler lesentréesdudétecteurentempsréel.
voidsetup(){
//initialisedescommunicationsensérie(débogage
seul):
Serial.begin(9600);
}
Dans la boucle principale, le détecteur de lumière est lu depuis la brocheanalogique0.Cetteinformationestégalementtransmiseaumoniteursérie.
voidloop(){
//litlesenseur:
intsensorReading=analogRead(A0);
//Affichelalecturedusenseur
println(sensorReading);
Pour convertir la plage de valeurs du détecteur vers la plage de fréquence que lebuzzerpeutcouvrir,nousutilisonslafonctionmap():
//Rééchelonneletondelaplagedel’entrée
analo-
gique.
//changeleminimumetlemaximum
//enfonctiondelaplagedusenseur
intthisPitch=map(sensorReading,400,1000,100,
1000);
Lafonctiontonegénèreensortie lanotecorrespondantà lavaleur fourniepar ledétecteuretdéfinitunedurée trèscourtede10ms.Cetteduréepermetde rendre leson audible, cependant la durée réelle sera déterminée par le temps ou votremainresteraau-dessusducapteur,commenousl’avonsindiquéprécédemment.
//Génèreleson
tone(8,thisPitch,10);
Enfin,uncourtdélai est ajoutéà la finde labouclepouraméliorer la stabilitédeslectures.
delay(1);//délaientreleslecturespour
stabilité}
}
PourquoinepascréerungroupeitinérantdejoueursdeThereminavecvosamis?
Encasdesouci,vérifiezquelepremierparamètredelafonctiontone()indiquebienlenumérodebrochedesortienumérique8.
IIIConstruiresurlesbases
DANSCETTEPARTIE
Jevaiscommencercettepartieparprésenterdifférentes
utilisationsd’Arduinoàtraversquelquesprojetsréalisésunpeu
partoutdanslemonde.Vousserezsansdouteimpatientde
passerensuiteàl’action.Vousapprendrezalorscomment
transformerunprototypedebaseenunprojetsolide.Pource
faire,vousapprendrezentreautresàsouder,àbienutiliserle
codepouraméliorerlafaisabilitéduprojetainsiqu’àchoisirde
bonscapteurs.
D
Chapitre9Quelquesexemplesderéalisations
DANSCECHAPITRE
» DécouvrirdesprojetsArduinoréussis
» Comprendreleurfonctionnement
» TrouverdesidéespourvospropresprojetsArduino
anslechapitreprécédent,jevousaiprésentédesprojetsArduinobasiques,maisiln’estpastoujoursévidentd’allerplusloin.Danscechapitre,vousdécouvrirezdesprojetsquifonctionnentactuellementunpeupartoutdanslemonde,baséssur
Arduino, et qui ont permis la réalisation d’expositions d’art étourdissantes etinteractivesoudeprototypestrèsdiversdecontrôledel’environnement.
SkubeLe projet Skube a été développé parAndrewNip, Ruben van derVleuten,MaltheBorchetAndrewSpitzdanslecadredelaréalisationd’unmoduleduprojetTangibleUser Interface destiné au Copenhagen Institute of Interaction Design (CIID). IlconstitueunexcellentexempledelamanièrederéaliserunprototypedeproduitbasésurArduino.
Skube(illustrésurlaFigure9-1)estunproduitquivouspermetd’interagiravecunservicedemusiquenumériqueauquelonaccèdetraditionnellementviaunordinateur.Le but de ce projet consiste à revisiter la manière dont les appareils audiofonctionnentetdontilssontutiliséspouroptimisercesservices.
FIGURE9-1:Avecl’aimableautorisationd’AndrewSpitz.UnSkube.
ChaqueSkube fonctionne selondeuxmodes,Playlist etDécouverte,modequevouschoisissezentapantenhautdel’appareil.LesPlaylistsjouentunesuiteprédéfiniedemorceaux, les Découvertes cherchent des morceaux ou des artistes similaires. LesSkube peuvent être également combinés de manière à mélanger des playlistsprédéfinies.Ilss’emboîtentphysiquementlesunsdanslesautres.
Commentçamarche?L’équipe Skube offre gracieusement une grande quantité de documentations etd’excellentesvidéossurlesdeuxprototypesachevés.ChaqueSkubeestcomposéd’unArduinoetd’unmodulesansfilXBee(celivrenedisposepasd’assezd’espacepourcouvrir cet incroyablemodule,mais en effectuantune recherche rapide sur leWeb,vousdevriez trouverdenombreuses ressourcesen ligne le concernant).La fonctionprincipale de l’Arduino consiste ici à agir en tant qu’intermédiaire, hébergeant denombreuxcapteurs et appareils de communicationdifférents et relayant lesdonnéescorrectesverschacund’entreeux.Lecapteurtactileestlemêmequeceluidécritauchapitre12decelivre,ilutiliseunsimpleélémentpiézoenchargedesurveillerlesvibrations.Lorsque l’onassociedesSkubeentreeux, leursaimantsagissentcommedes interrupteurs lorsque l’élément se rapproche, indiquant ainsi clairement audispositiflaprésencedel’aimant.
Le projet dispose également d’un module de radio FM, qui est utilisé par chaqueSkubepourproduiredelamusique.EnutilisantlemodulesansfilXBee,vouspouvezcommuniquer avec chaque Skube et les coordonner via un ordinateur grâce à unlogicielspécialécritaveclelangageMax/MSP.
Max/MSPestun langagedeprogrammationvisuelutilisédansdenombreuxprojetsaudio ou musicaux. Via l’utilisation de Max/MSP, l’équipe Skube récupère desdonnées provenant des services Last.fm et Spotify pour réaliser les playlists etretrouver des artistes aux caractéristiques similaires. Ces entreprises fournissenttoutes deux différents services à leurs consommateurs (par exemple, la possibilitéd’assemblerdesplaylistsbaséessurvosmorceauxfavorisoudefournirunebasededonnéessurlesalbumsetlesartistes);ellesproposentégalementcesfonctionnalitésauxdéveloppeursafinqu’ilspuissentlesintégrerdansleurspropresapplications.CetypederessourcesestnomméApplicationProgrammingInterface(API).LesAPIdeLast.fm (http://www.last.fm/api) et de Spotify(https://developer.spotify.com/technologies/web-api/) neconstituentquedeuxexemplesetilenexistebeaucoupd’autres.
Vousremarquerezqueceprojetcomportedenombreuxéléments,basésàlafoissurlacommunication sans fil utilisantArduino (ce qui est déjà un sujet en soi) et sur lacommunication avec d’autres logiciels et l’échange avec d’autres services surInternet. Pour les plus avancés d’entre vous, cettemanière d’utiliser Arduino vousenseigneracomment intégrerdumatérielavecd’autres logiciels.Dans lacinquièmepartie, je vous présenterai d’autres logiciels et nous verrons plus en détail cesprocessusdecommunication.
AllerplusloinVousobtiendrezplusd’informationssurceprojetenvousreportantauxpagesdusiteWeb CIIDhttp://ciid.dk/education/portfolio/idp12/courses/tangible-
user-interface/projects/skube/ et sur le site d’Andrew Spitz àl’adressehttp://www.soundplus-design.com/?p=5516.
ChorusChorus est une installation cinétique réalisée par United Visual Artists (UVA), ungroupe londonien spécialisé dans l’art et le design. UVA pratique de nombreusesdisciplines, telles que la sculpture, l’architecture, le spectacle vivant et d’autresinstallations visuelles. Ce groupe a la réputation de créer des projets visuellementépoustouflantsquirepoussentleslimitesdecesdisciplines.
Chorus(illustréàlaFigure9-2)utiliseleson,lalumièreetledéplacementpourdeseffets théâtraux qui illustrent parfaitement qu’Arduino peut tout aussi bien jouer unrôle dans d’immenses installations que pour de minuscules prototypes. Cetteinstallation est constituée de huit grands pendules noirs se balançant d’avant enarrière, émettant simultanément du son et de la lumière. Les spectateurs peuvent
marchersouslespendules,s’immergeantalorsdanslaperformance.Chaquependuledisposedesaproprepartition, réaliséeparMiraCalix,quidevientaudible lorsquel’auditeurserapprochesuffisamment.
Commentçamarche?Dans ce projet, unArduino est utilisé pour gérer la lumière et le son ainsi que ledéplacement des pendules. Le balancement de chaque pendule est contrôlé par unmoteur électriquemonté sur un engrenage réducteur. Cemoteur est contrôlé par uncircuitrelais,permettantàl’Arduinodepiloterlecomportementdeceténormeenginmécanique.Chaque pendule dispose de deux cartes, chacune contenant 50LEDquifournissentlalumière,etd’unhaut-parleurfixésurlabasedupendule.L’Arduinolui-mêmeestcontrôléparunlogicielspécifiquedontlerôleestd’envoyeretderecevoirconstamment des données qui permettront de coordonner les mouvements despendulesetlespartitions.
Avecl’aimableautorisationdeUnitedVisualArtists.
FIGURE9-2Chorusbatsonplein.
Ce projet démontre que la maîtrise d’une discipline artistique, mécanique ouarchitecturalecombinéeàl’utilisationd’Arduinopeutvouspermettrederéaliserdeseffetsincroyables.Séparément,chaqueélémentdeceprojetestrelativementsimple:contrôler un moteur, contrôler une LED, jouer une mélodie. Le vrai défi survientlorsque la taille de ces composants augmente. Le contrôle de moteurs puissantsnécessiteuneconnaissancedeschargesetdelamécanique,lecontrôledenombreusesLEDrequiertunebonnecompréhensiondestensionsetdescourantsélevés,jouerde
lamusiqueenhautedéfinitionnécessiteunmatérielspécifique.Vousdécouvrirezauchapitre 13 comment ajouter des cartes filles à votre Arduino pour réaliser desfonctionnalitéssimilairesàcelledeChorus.Augmenterlatailledevotreprojetousonnombre de sorties peut vite devenir un défi, nous verrons dans lesChapitres14et15lesprincipauxécueilsàéviterpourleremporter.
PourallerplusloinVoustrouverezlapagedeceprojetsurlesiteWebd’UVA:
http://www.uva.co.uk/work/chorus-wapping-project#/0
IlexisteégalementunexcellentarticledeVinceDziekancouvrantendétailleprojetChorusàl’adresse:
http://fibreculturejournal.org/wp-content/pdfs/FCJ-
122Vince%20Dziekan.pdf
PushSnowboardingPushSnowboardingestunprojetcollaboratifinitiéentreNokiaetBurtondontlebutest de permettre la visualisation des données concernant vos performances ensnowboard.
Une entreprise nommée Vitamins Design Ltd avait été contactée par l’agenceHypernaked pour concevoir et réaliser un jeu de capteurs sans fil pouvantcommuniquer avec un téléphone mobile situé dans la poche d’un pratiquant desnowboard. Vitamins, fondée par Duncan Fitzsimons, Clara Gaggero et AdrianWestaway,estuneentreprisequ’ilsdéfinissenteux-mêmescommeétant«unstudiodeconceptionetd’invention.»IlssontbasésàLondresoù ilsdéveloppentet réalisentdesproduits,desexpériences,desconceptsetdes systèmes. Ilsont travaillé surungrandnombredeprojetsetinterviennentselonleurspropresmots«surdesdéfilésdemodecommesurdesblocsopératoires,travaillantaussibienavecdessnowboardersqu’avec des ouvriers... pour du théâtre expérimental ou des retraitéstechnophobiques».
Pourleprojetdesnowboard,Vitaminsaconçuunjeudecapteursayantlaformedeboîtesimpriméesen3D(Figure9-3)destinésàmesurerlaréponsegalvaniquedelapeau, la fréquence cardiaque, le déplacement en 3D, la position, la localisationgéographique,lavitesseetl’altitude.Cesdonnéessontalorssuperposéesàlavidéod’une course de snowboard en direct afin de mettre en évidence le lien entre lesdifférentessituationsrencontréesparlesnowboarderetsesréponsesphysiologiques.Ce projet constitue un excellent exemple de réalisation d’un produit avec Arduinoplusproched’unproduitsurmesurequed’unprototype.
Avecl’aimableautorisationdeVitaminsDesingLtd.
FIGURE9-3Boîtescontenantdescapteursdestinésauxsnowboarders.
Commentçamarche?Chaque capteur se trouve dans une boîte étanche disposant d’un boutond’alimentation.Lorsqu’ilestallumé,l’Arduinoinitieunecommunicationsansfilavecle smartphone afin de lui transférer toutes les données dont il dispose. De là, lesmartphone, grâce à ses capacités de traitement avancées, traite et compile lesdonnées.
Lepremierdéfideceprojetrésidedanssataille.Eneffet,silesdétecteurspeuventêtredetailleréduite,l’Arduinolui-mêmeoccupeunpeudeplaceetlesnowboarderdoitenemporterplusieurs ; lesdonnéeselles-mêmes risquentdedevenir inutilessileurcollectegênelesmouvements.C’estpourquoichaqueboîtecontenantuncapteurestbaséesurunArduinoProMini trèsminceetd’unesurfacedeseulement18mmx 33 mm. Il en va de même de l’alimentation qui est fournie par une batterierechargeableaulithiumdumêmemodèlequecellequel’onretrouvedanslesmodèlesréduitsd’avionoudanslessmartphones.
Leprojetutiliseunevariétédecapteurs:capteursdepressiondisposéssurlespiedspour jugerde l’équilibre,unitésdemesure inertielle (IMU)aussiappeléescapteursde degrés de liberté pour trouver l’orientation en 3D du snowboarder, capteur deréponsegalvaniquedelapeaupourmesurerleniveaudesudationdusnowboarderetcapteurdefréquencecardiaquepoursuivresonrythmecardiaque.
CesdonnéessontenvoyéesautéléphoneviaunmoduledeliaisonsansfilBluetoothsitué dans chacune des boîtes. LesmodulesBluetooth sont petits, ils constituent unmoyen fiable et sécurisé de connecter sur une courte distance un capteur et letéléphonemobilerangédanslapochedusnowboarder.Lesdonnéesainsicollectéespeuvent être associées à d’autres données, comme celles du GPS fourni par letéléphone,etsontensuitetraitéesparcedernierviaunlogicielpersonnalisé.
Tous les capteurs de ce projet sont disponibles chez la plupart des revendeursArduinoenligne;ilssontaccompagnésd’exemplesetdetutoriauxvouspermettantdeles intégrer dans vos propres projets. La réalisation de ce projet est un excellentexemplepourlesaspirantsarduinistes.Lacombinaisondescapteursfournitunemined’informationsauxsnowboardersquipeuventensuitelesutiliserpouraméliorerleurtechniqueetleursperformances.Deplus,cesproduitsontétéconçuspoursupporterdes environnements extrêmes. L’électronique a été soigneusement protégée tout enrestant accessible, une couche isolante a même été ajoutée pour piéger toute traced’humidité.
AllerplusloinVous trouverezplusdedétails sur leprojet sur le siteWebdeVitaminsà l’adressehttp://vitaminsdesign.com/projects/push-snow-boarding-
for-nokia-burton/.
BakerTweetBakerTweetestunprojetréaliséparPokequiémetdestweetspourprévenirquedesproduitsviennentdesortirdufourdel’AlbionCafé.PokeestuneentrepriseinnovantebaséeàLondresetàNewYork.Elleestspécialiséedanstoutcequiarapportaveclenumérique. Le projet résulte d’une demande faite à Poke London pour promouvoirl’ouverture d’un nouveau caféAlbion dans la ville. La réponse fut de réaliser uneboîteprévenantquedupain,descroissantsoudesviennoiseriestoutchaudsattendentles clients. Vous pouvez voir une illustration de cet appareil sur la Figure 9-4.Rendez-leurvisitesivouspassezdanslecoin!
Avecl’aimableautorisationdePokeLondon.
FIGURE9-4LeBackerTweetenactionàlaboulangerieAlbion.
Commentçamarche?La boîtemagique qui produit desmessages Twitter dispose d’une interface simpleconstituéed’unsélecteur rotatif,d’unboutonetd’unécranLCD.Lesélecteursertàchoisir le type de viennoiserie qui vient de sortir du four à Twitter. Le tweet estaffiché sur l’écranLCD.Après avoir vérifié lemessage, l’utilisateur appuie sur leboutonpour envoyer le tweet. Il reçoit alors confirmation à l’écran commequoi letweetabienétéenvoyé.Cetteinterfacesimpleestidéalepouruncafétrèsfréquentécarellenerequiertquetrèspeudetempspourmettreà jour lestatutenligne.Pourajouter de nouveaux articles, le projet repose sur une interface Web qui permetd’enrichirlaliste.
Le cœur de ce projet est constitué d’un Arduino qui communique avec Internet enutilisantsoituneconnexionInternetfilairebaséesurunecartefilleEthernetArduino,soit sur une connexion sans fil basée sur un adaptateurWi-FiLinksys.Le sélecteurfournit une entrée analogique, le bouton une entrée numérique. Lorsqu’ils sontcombinés avec un écran LCD, ils composent une interface utilisateur permettantfacilementdechoisirunélémentdansunelisteetd’envoyerdestweets.
Leprototypeestprotégédansunboîtierrobusteafind’empêcherlesmainsfarineusesd’endommager ses circuits. Ce projet illustre avec brio comment un Arduino peutréaliserrapidementetsimplementunetâcherépétitiveetconsommatricedetemps.Ceprototype est adapté à son environnement, il est assez robuste pour survivre à uneutilisationconstantegrâceàdesélémentsenacierinoxydable.Ilestsimpleànettoyer,etcemêmedansuneboulangerieenpleineeffervescence.LacomplexitédeceprojetrésidedanslacommunicationavecInternetpourenvoyerdesdonnéessurleWeb.
AllerplusloinVous trouverez de plus amples informations sur le site deBakerTweet à l’adressehttp://www.bakertweet.cometsurlapageduprojetPokeLondon:
www.pokelondon.com/portfolio/bakertweet
Prenezletempsdejeterunœilsurlesexcellentesphotosdesprototypesquiillustrentledéveloppementduprojetdepuislaplancheàpainjusqu’àlaboulangerie:
http://flickr.com/photos/aszolty/sets/72157614293377430/
CompassLoungeetCompassCardLeCompassLoungeaétédéveloppédans lecadrede la réalisationd’unenouvelleaile dumusée de lamarine nationale de Londres. Le studioKin basé à Londres aconçu pour cette occasion des éléments interactifs basés surArduino permettant aupublicd’interagiraveclesarchivesnumériquesetlesdifférentespiècesexposées.
Un ensemble de visionneuses numériques rangées dans des tiroirs permettent auxvisiteursdeparcourirlesarchivesenlignedumuséeetd’accéderauxdocumentslesplus populaires en haute résolution. Lorsqu’un tiroir est ouvert, un écran tactile degrande dimension est activé, et le visiteur peut parcourir les éléments affichés.Lorsque les visiteurs consultent un document, des LED masquées affichent saréférenceafindepouvoirconsulterl’archivephysiquecorrespondante(Figure9-5).
Avecl’aimableautorisationdeKin.
FIGURE9-5LesLEDmasquéeséclairentlefondd’écran.
L’Arduino gère également un second aspect de ce projet nommé système CompassCard:chaquevisiteursevoitattribuerunecartepermettantdecollecterdesélémentsauxquatrecoinsdumusée.Despointsdecollectesontdisposésàcôtédecertainespièces qui permettent de scanner la carte et ainsi de prendre note du parcours desvisiteursetdesélémentsnumériquesqu’ilsontrecueillis.CesdernierspeuventalorsconsultercesélémentsdepuisleLoungeCompassoudechezeuxviaunnavigateur.
Commentçamarche?Les visionneusesmettent enœuvre deux projetsArduino simples afin d’enrichir lecontenunumériqueaffichéparlesgrandsécranstactiles.
Enpremierlieu,l’Arduinoestutilisépouractiverlesécranslorsquelestiroirssontouverts.Silesvisionneusesrestentalluméestoutelajournéesansêtreutilisées,leursécrans risquent d’être « marqués » (laissant une sorte d’ombre de l’image restéeimmobile). L’affichage d’un écran noir lorsque les tiroirs sont refermés permet delimitercetteusureetdeprolongerlaviedesmoniteurs.Cerésultatestobtenugrâceàun micro-interrupteur placé sur le fond de chaque tiroir. Comme avec le croquisButtonduChapitre7,àchaquefoisqueleboutonestpressé,uncaractèreestenvoyévia le port série pour indiquer au moniteur de passer en veille. Ce type decommunicationestexpliquéauChapitre8.
Au-dessusdestiroirsestdisposéunafficheuràLEDmasquéetcomposéderangéesdeLEDalignéessousformedegrille.CesrangéessontsimilairesaurubandeLED
adressabledécritauChapitre15 ;nousutilisons iciunecodificationappropriéequipermetd’afficher lesvaleursvoulues.Cesvaleurssontensuiteenvoyéessur leportsériesousformedechaînesdecaractèresviaun logicielspécifiquedesorteque laréférencecorrecteapparaisseavecl’imageassociée.
LaCompassCardconstitueunexcellentexempledel’utilisationd’une(relativement)vieilletechnologiedansunnouveauet intéressantcontexte.Lesystèmelui-mêmeestbasésurl’utilisationdecodes-barrespermettantdereconnaîtrelescartesscannées.Ilrenvoieenoutreàl’Arduinounnuméroquipourraêtretransmisàunserveurcentralqui associera le numéro du code-barres au numéro du scanner afin de déterminerl’emplacement où la carte a été numérisée et l’identité de son porteur. Toutes cesinformations sont envoyées via un réseau Ethernet vers un serveur où elles seronttraitées,grâceàunecartefilleEthernet.
Ils’agitd’unexcellentexempledel’utilisationdel’Arduinoafinderéaliserlatâcherelativement complexe de relayer des données sur un réseau sans avoir recours, àchaqueétape,àunordinateur.Cescénarioréduitnonseulementlescoûtsdetransfertdesdonnées,maispermetdesimplifierlesopérationsliéesauréseau,carl’Arduinonenécessitepasdeprocédurededémarrageoud’extinctionparticulière.Cesystèmenumérique fonctionne conjointement avec un système de marquage physiquepermettantdemarquerlescartesavecuneembosseusequiréaliseunemarquesurlacartelorsquelelevierestpoussé(voirlaFigure9-6).
Avecl’aimableautorisationdeKin.
FIGURE9-6Lepointdecollectedescartes.
Cetensembledeprojetsconstitueun trèsbonexemplede lamanièredontplusieursapplications peuvent collaborer pour fournir une grande expérience, offrant de
nombreusesformesd’interactionetderétroaction.Ilconstitueégalementunexcellentexemple d’une utilisation pérenne de l’Arduino. S’il existe en effet de nombreuxprojets Arduino fonctionnels, ils sont souvent considérés comme peu fiables outemporaires.Ici,aucontraire,lemuséesouhaitaitdisposerd’unesolutionrobuste;ceprojetmontreque l’Arduinoest capablede répondre à ces contraintes lorsqu’il estutilisécorrectement.
AllerplusloinVoustrouverezbeaucoupd’informationsagrémentéesdenombreusesillustrationssurlapageduprojetKin
http://kin-design.com/project.php?id=147
VoyezaussilesiteWebduNationalMaritimeMuseumàl’adresse
http://www.rmg.co.uk/visit/exhibitions/compass-lounge/.
LeslampesGoodNightLes lampesGoodNight sontdes famillesde lampesconnectées à Internet réaliséesparAlexandraDechamps-Sonsino.Chaquefamilleestcomposéed’unegrandelampeet de nombreuses petites. Lorsque la grande lampe est allumée, les petites lampesauxquelles elle est connectée s’allument aussi, quel que soit l’endroit où elles setrouventdanslemonde.Celapermetauxêtresprochesderesterconnectéslesunsauxautres grâce à un simple geste quotidien et sans avoir à utiliser une quelconqueapplication. Les lampes Good Night sont actuellement en développement et sontbaséessurArduinopourleurprototypage.VouspouvezapercevoirunjeudelampesàlaFigure9-7.
Commentçamarche?LesystèmedesprototypesdepréproductiondeslampesGoodNightestrelativementsimple. La grande lampe est une lampe fonctionnelle que l’on allume avec uninterrupteur à poussoir similaire à l’exemple ButtonChangeState du chapitre 11.Lorsqu’elleestenmarche,lagrandelampeenvoiesonnumérod’identifiantetsonétatàunserveurWebviaunecartefilleW-FiArduino.
FIGURE9-7Dèsquelagrandelampeestallumée,lespetiteslampesassociéess’allumentégalement,quelquesoitl’endroitoùellessetrouventdanslemonde.
Quelquepart,peut-êtredel’autrecôtédelaTerre,unepetitelampetéléchargecetétaten utilisant la même carte fille WiFi et propage l’information à toutes les autrespetiteslampesauxquelleselleestreliée.Siunegrandelampeestallumée,touteslespetiteslampesassociéess’allument.
Les lampes sont constituées de LED de haute puissance fonctionnant sous 12 V etexigeant 0,15 ampère pour les petites et 0,4 ampère pour les grandes. Ces lampesfournissent une bonne luminosité, mais elles nécessitent un circuit de commande àtransistorssemblableàceluidécritauChapitre8.
Ceprojetestunbonexempledel’utilisationd’Arduinopourcréerleprototyped’unproduitayantuncomportementrelativementcomplexe.
AllerplusloinSivous souhaitez en savoirplus sur les lampesouKnight, rendez-vous sur lapaged’accueilduproduitàl’adressehttp://goodnightlamp.com.
LittlePrinterLittlePrinter (Figure9-8) est une imprimante domestiqueminiature développée parBerg, un consultant endesignbasé àLondres.Avecvotre smartphone, vouspouvez
gérer du contenu provenant du Web et imprimer toutes sortes d’informations pourcréervotrejournalpersonnel.LeBergcloudrésideentrevotretéléphoneetleWeb.Vous pouvez accéder à ce dernier via votre smartphone afin d’envoyer du contenuvers votre Little Printer et potentiellement vers d’autres appareils à venir... LittlePrinterutiliseunmatérieletunlogicielspécifique,maisilfutàl’origineprototypéenutilisantArduino.
Avecl’aimableautorisationdeBerg.
FIGURE9-8LaLittlePrinterestprêteàimprimertouteslesdonnéesquevoussouhaitez.
Commentçamarche?LaLittlePrinterestconstituéedenombreuxéléments,àcommencerparl’imprimanteelle-même. Il s’agit d’une imprimante thermique, similaire à celle utilisée pourimprimer lesreçuset les ticketsdecaisse.L’imprimante thermiquecommuniqueviaunportsérie.Adafruitproposeuneimprimantedecetypesimpleàintégrerdansvosprojets Arduino (rendez-vous surhttps://www.adafruit.com/products/597).
L’imprimanteestreliéesansfilauBergCloudBridge.Ils’agitd’unpetitappareilquigère les données d’une façon similaire à celle de votre routeur domestique. LesdonnéessontalorsenvoyéesetreçuesviauneconnexionInternetfilaire,semblableàcelleutiliséesurlescartesfillesEthernetArduino.
Danslespremiersprototypes,unmodulesansfilXbee–similaireàceuxutiliséssurlescartesfillessansfilArduino–gèrelescommunicationsentrelaLittlePrinteretleBergCloudBridge.
Lamajeurepartiede lacomplexitédeceproduitestpriseenchargepar leserveurBerg Cloud, dans lequel les données sont collectées, triées puis envoyées àl’imprimante.
LaLittlePrinterconstitueunexcellentexempled’unproduitutilisantunArduinopourdévelopper et affiner une idée, avant de développer le projet complet basé sur unmatérielpropriétaire.
AllerplusloinPourplusd’informationssurlaLittlePrinter,voirepourencommanderune,rendez-voussurlapaged’accueilduBergCloudàl’adresse
http://bergcloud.com
FlaptoFreedomFlaptoFreedomestunjeuréaliséparICO,uneagencedeconseilendesignbaséeàLondres dans le cadre du projet V&A Village Fete. Dans ce jeu, deux joueurss’affrontaient pour aider un poulet à s’échapper d’un élevage en batterie (commel’illustrelaFigure9-9).Lorsqu’unjoueurbatdesbras,lepouletfaitdemême,maissile joueur bat trop vite des bras, le poulet meurt exténué. Chaque partie estchronométréeetlerésultatpubliésuruntableau.
Avecl’aimableautorisationdeICODesignPrintersLtd.
FIGURE9-9Lacourseaupoulet!
Commentçamarche?PourcequiconcernelapartieduprojetbaséesurArduino,despouletsenpelucheontété dépecés et remplis de circuits électroniques personnalisés chargés decommuniquer sans fil avec un ordinateur.Les circuits à l’intérieur des poulets sontreliés à l’Arduino pour contrôler les différents moteurs en charge d’actionner lesailes, lebecet lespattes.Lesmoteursreçoiventdesinformationssansfilprovenantd’unecartefilleArduinosimilaireauxmodulesXBee.
Le choix du logiciel s’est tourné vers openFrameWorks, en utilisant une webcamcachéepouranalyserlesmouvementsdesjoueursetdéterminerlavitesseàlaquellelespouletsdevaientbattredesailes.
Ils’agiticid’uneapplicationextrêmementamusanteetintéressantebaséesurArduino.Ellepermetàdesjoueursdetoutâgedejouerenayantunretourphysiqueinstantané.Ellepeutvousdonnerdes idéesdedétournementde jouets existantsdans lebut decréerdesapplicationsoriginales.
AllerplusloinVoustrouverezplusàliresurcesujetsurlapageduprojetICOàl’adresse
http://www.
icodesign.co.uk/project/V%26A%3A+Flap+to+Freedom+En-
vironment
BenjaminTomlinson etChrisO’Shea ont travaillé sur les aspects techniques de ceprojet;sivoussouhaitezunedescriptionplustechnique,rendez-voussurlapageduprojetdeChrisO’Sheaàl’adresse
http://www.chrisoshea.org/flap-to-freedom
D
Chapitre10L’artdesouder
DANSCECHAPITRE
» Toutsavoirsurlesoudage
» Acquérirdesbonsoutilspourtravailler
» Seprotégerpendantlesoudage
» Monterunecartefille
» Souderavecstyle
» Passerd’uneplatined’essaiàuneplaquedecircuitimprimé
» Préparersonprojetaumonderéel
anslesprécédentschapitres,jevousaiexpliquéendétailcommentassemblerdescircuits sur une platine d’essai. Si vous avez lu ces chapitres, vous avezprobablementquelquesidéespourtirerpartioucombinerlesquelquesexemples
debaseprésentés.Vousdevezvousdemandercequevouspouvezfairemaintenant.
Dans ce chapitre, vous allez découvrir l’art de la soudure. Vous apprendrez lesavantagesetlesinconvénientsdetouslesoutilsdontvousaurezbesoinpourmeneràbien votre projet dans le monde réel. Oubliées les platines d’essai en équilibreprécaireet lescâblesbranlants.Dorénavant,vousserezenmesurededéterminercedontvousavezbesoinpourfabriquerdescircuitsconstruitspourdurer.
ComprendrelesoudageLe soudage est une technique pour créer une liaisonmécanique et électrique entredeuxmétaux.Enfaisantfondredumétalayantunpointdefusioninférieuràceluideceuxquevousvoulezréunir,vouspouvezassemblerdespiècesdemétalpourformervotre circuit. Les jonctions seulement mécaniques suffisent bien pour faire desprototypesquivouspermettentdechangerd’avisetdemodifier trèsviteuncircuit.Unefoisquevousêtessûrdecequevousfaites,ilesttempsdepasseràl’action.
Vousutilisezun ferouunpistolet à souderpour faire fondre lasoudure, un alliagemétallique(mélangedemétaux)ayantunfaiblepointdefusionetvousl’appliquezaujoint.Quand la soudurea refroidiautourdespiècesquevousconnectez,elle formeuneliaisonfiablecarsimultanémentmécaniqueetélectrique.C’estunesolutionbiensupérieure pour fixer des composants. Les zones soudées peuvent même êtrerefonduesetressoudéessinécessaire.
Mais«quelintérêtàsouder?»vousdemandez-vous?Supposezquevousayezcrééuncircuitsuruneplatined’essaietqu’elleestprêteà l’emploi.Maisdèsquevousvousensaisissez,lesfilssedébranchent.Vouspouveztoujoursremettrelesfilsàleurplacemaisàchaquefois,vousprenezlerisquederemplacermalrebrancherunfiletd’endommager l’Arduino. Créer votre propre circuit vous offre l’occasion de lepeaufinerenconcevantdescartesquis’adaptentauxcomposants.Unefoisquevousavez déterminé ce que vous voulez faire, vous pouvez commencer le processus deminiaturisation et éventuellement aboutir à un circuit qui n’occupe que l’espacestrictementnécessaire.
LesélémentsnécessairespoursouderAvantdepasseràlapratiquedusoudage,ilfautvérifiezquevousavezbientoutcequ’ilfaut.
CréersonespacedetravailLorsquevousvouslancezdanslesoudage,vousdevezavoirunbonespacedetravail.Il fera toute la différence entre un projet réussi et des heures passées à genoux enmaudissantlesfissuresentreleslattesdevotreparquet.L’idéalseraitungrandbureauouunatelier,maisunetabledecuisine,sielleestclaire,peutfairel’affaire.Commevousallezsouderàchaudavecdumétal,protégezd’éventuelsdommageslasurfacedelatableavecquelquechosequevouspouvezabîmer,commeuntapisdedécoupe,uneplanchedeboisouunmorceaudecartonépais.Votreespacedetravaildoitêtrebienéclairé.Veillezàbaignerdans la lumièredu jouretprévoyezunbonéclairagepourletravaildenuitafindebiendistinguercesminusculescomposants.
Vousdevezaussi avoir facilement accèsàune sourced’alimentation.Sivotre fer àsoudermarcheàtempératurefixe,aunepannecourteetqu’ilsebranchedirectementsurlesecteur,vousdevezimpérativementdisposerd’unepriseélectriqueàproximité.
Un blocmultiprises est lameilleure solution, car il fournira l’alimentation à votreordinateurportable,àlalampeetauferàsouder.
Trouvez-vous un siège confortable et n’oubliez pas de vous lever toutes les demi-heurespouréviterlescrampes.Souderestprenant,etpeutvousfaireoublierquevousavezadoptéuneposturehorrible(pourvotredosnotamment).
La fuméede la souduren’estpasmortelle,maisn’estpasvraimentbonnepourvospoumons. Vous éviterez dans la mesure du possible d’en respirer les émanations.Travaillez donc toujours dans un endroit bien ventilé. Choisissez d’ailleurs unesouduresansplomb,commejevousleconseilleplusloindanscechapitre.
Si vous travaillez à lamaison et que sous la pression de votre entourage, vous nepouvezpas laisserenplace lazonede travail, trouvezdequoi faireunesurfacedesoudagemobile.Cepourraitêtreuneplanchedeboisquis’adapteraitbienàvotrekitet que vous pourriez déplacer, ranger et couvrir quand vous ne l’utilisez pas.Vousvousépargnerezainsidedevoirdéballeretremballeràchaquefoisquevousvoulezsouder.Ettoutlemondeseracontent.
ChoisirsonferàsouderL’outilleplusimportantpoursouderestévidemmentleferàsouderoulastationdesoudage.Vousavez lechoixentrequatrecatégories :à températurefixe,portable,àtempératurecontrôléeetstationdesoudagecomplète.Jevous lesprésenteendétaildans les sections suivantes et vous indique une moyenne de prix. Faites jouer laconcurrenceetrecherchezsurInternetlesmeilleursprixetquisait...peut-êtreallez-vousdénichersureBayunmodèled’occasiondebonnequalité!
LeferàsouderàtempératurefixeLeferà souderà température fixe (voirunexemple reproduità laFigure10-1) estnormalementvenducommeunsimpleferàsouderavecuncâbled’alimentationquisebranchesurlesecteur.Engénéral,ilsevendavecuneépongeetunmorceaudemétalpliéservantdereposoir.D’autressontmieuxfournisenyajoutantunréceptaclepouryposerl’épongeetunétuienformederessortpourposerlefer.
FIGURE10-1Unferàsouderàtempératurefixebasique.
Le fer à souder à température fixe est satisfaisant, mais il ne propose aucunecommandepourréglerlatempératuredufer.Ilestvenduavecunindicedepuissancerestituéesuffisantpourlegrandpublic.Pourcertainsmodèles,unepuissancerestituéesupérieure signifie une température plus élevée, même si elle peut varier d’unfabricant à l’autre.Cette variation peut causer des problèmes avec des composantsplusfragiles,carunetempératureélevéepeutrapidementsepropageretfairefondredescircuitsetcomposantsintégrésenplastique.
UneétudedusiteWebMaplin(unfournisseurbritanniqueéquivalentdeRadioShackaméricainoudeMonsieurBricolage français)montrequ’àuneplagedepuissancesde12Wà40Wcorresponduneplagedetempératuresde200à400oC.Ladifficultéestdetrouverunferàsoudersuffisammentchaudpourchaufferrapidementlapartiequevous souhaitez et faire fondre la soudure avantd’abîmer les composants.C’estpourquoiunferàsouderàbassetempératurepeutcauserplusdedégâtsqu’unàhautetempérature.Mais si vous chauffez trop, vous allez fair eface à d’autres problèmestels que des embouts qui s’abîment plus vite ou le risque de surchauffer certainesparties.
Sivousvoulezcommenceravecunferàsouderàtempératurefixe,jevousconseilled’enchoisirunde25W.Ilcoûteenviron10euros.
FeràsouderàgazUn fer à souder à gaz est libéré du besoin d’énergie électrique au profit du gaz. Ilbrûledubutanequi est plus connu sous lenomd’essenceàbriquet. Son indice depuissancerestituéepermetdelecomparerauxautresfersàsouder,maiscontrairementau fer à souder à température fixe présenté dans la section précédente, cet indiceindiquela températuremaximalequipeutêtreréduitegrâceàunevannederéglage.Lesflammesbrûlentleborddufer,cequipeutrendredifficilesonutilisationpourdesjointurestrèsprécises.Jevousendéconseilledoncl’utilisation.
Leferàsouderàgaz(voir laFigure10-2)convient lorsquevousêtes loinde toutesource d’électricité. Il est un peu trop cher et son utilisation coûte cher aussi. Laplupartdesservicesdesécuritédesaéroports leconsidèrentcommeplusdangereuxquelesfersàsouderclassiquesparcequ’ilcontientdugaz.Sivouscomptezemporterunferàsouderàl’étranger,prenez-enunélectrique.
Le prix d’un fer à souder à gaz va de 30 à 80 euros environ. Comptez aussi larechargeàenviron10euros.
FIGURE10-2Unferàsouderàgaz.
FeràsouderàtempératureréglableLe fer à souderà température réglable (Figure10-3) est celuique jepréconiseparrapportàceluiàtempératurefixe.Iloffreplusdecontrôleàunprixraisonnable.Cecontrôleaccrupeutfairetouteladifférenceentrefusionetcombustion.Cetypedefera aussi un indice de puissance restituée élevé qui représente normalement sapuissancemaximale.Pourcetypedefer,préférezunepuissancerestituéeélevée,carellevousoffreuneplusgrandeplagedetempératuresdetravail.
FIGURE10-3Unferàsouderàtempératureréglable.
Vous pouvez ajuster la température selon vos besoins grâce à un variateur. Ladifférenceentrecetypedecontrôlesurlatempératureetcellequ’offrentdesstationsdesoudageplusprécisesestquevouscontrôlezlatempératuredemandée,maisvousn’avez pas de lecture de la température réelle qui en résulte.La plupart des fers à
souder à température réglable ont un variateur qui ne permet que de choisir entrechaudettrèschaud.Vousdevrezdoncpasserparunephasedetestspourdéterminerlabonnetempérature.
Vous trouverez des bons fers à souder à température réglable à partir de 30 euros.Vousbénéficierezd’unmeilleurcontrôleetd’uneplusgrandelongévitéqu’avecunferàtempératurefixe.
StationdesoudageLa station de soudage est le nec plus ultra que l’on rêve d’acquérir... Après avoiracquisunecertaineexpérience (cequivaen justifier ladépense),vousenvisagerezd’investir dans une station de soudage. Elle est généralement composée d’un fer àsouder,d’unsupportpourleferavecépongeintégrée,d’unaffichageetd’unvariateurdetempérature.Ellepeutaussi inclured’autresaccessoirespour lebrasage,commeundébitd’airréglableencontinuparexemple,maiscesontdesaccessoiresàusageprofessionnelquinesontpasvraimentindispensables.
Ilexistedenombreusesmarquesdestationsdesoudage,maisl’unedesplusréputéeset des plus utilisées estWeller (voir la Figure 10-4). Je vous conseille dans cettemarque lemodèleWES51.MaWES51 fonctionneencoreparfaitement aprèsquatreansd’utilisation.Necomptezpasmoinsde50eurospourunestationdesoudageetprévoyezmêmeplutôtledouble.
Avantd’utiliserunestationdesoudageWeller,j’avaisunferàsouderàtempératureréglable bon marché d’une marque de magasin de bricolage qui convenait àl’utilisationquej’enfaisais.Commejel’expliqueplusendétaildanscechapitre,lameilleurefaçond’entreteniretdetirerlemeilleurdesonferàsouderestdel’utilisercorrectement. Supprimez toute trace de soudure sur la panne à l’aide de l’éponge,réappliquez de la soudure fraîche avant de l’utiliser et laissez un peu de soudurefonduesurlapannequandvousavezterminédetravaillerpourqu’ellesoitprotégée.
FIGURE10-4UnestationdesoudageWeller.
Quelquesoit lemodèledeferàsouderquevousachèterez, jevousconseilleaussid’investirdansquelquespannesderechange,parcequ’ellesfinissentparsedégrader.Ilexisteunegrandevariétédeformesdepannesenfonctiondel’usagequel’onveutenfaire,c’estpourquoiilvautmieuxenavoirunepetitepanoplie.
ChoisirsasoudureLa soudure est la matière en forme de fil que vous utilisez pour joindre voscomposants. Bien qu’il existe différents types de soudure avec différentescombinaisonsdemétal,ilexistedeuxgrandescatégories,commepourl’essencedesvoitures:avecousansplomb.Bonnombredemesconnaissancespréfèrentlasoudureauplombparcequ’elleseraitplus facileà travailler.Elleaunpointdefusionplusfaible, ce qui signifie que le fer à souder peut rester plus froid et le risqued’endommagerdescomposantsestmoindre.
En revanche, l’empoisonnement au plomb est connu depuis longtemps. Pourtant, cen’estquerécemmentquel’onacommencéàavoirdesréservesquantàsonutilisation.C’estdanslesannées1980quel’onacommencéàremplacerleplombparlecuivredanslescanalisations.L’utilisationdelasoudureauplombdansl’électroniquegrandpublic a été abordée en1996quand les directivesde l’Union européenne laRoHS(RestrictionofHazardousSubstancesDirective)etlaDEE(Déchetsd’équipementsélectriquesetélectroniques)ont légiférésur l’utilisationet l’éliminationdecertainsmatériauxdansl’électronique.
Vous trouverez la mention RoHS sur les composants qui sont conformes à laréglementation européenne, ce qui devrait êtremeilleur pour l’environnement.D’un
point de vue commercial, les entreprises européennes et américaines bénéficientd’avantagesfiscauxsiellesutilisentdelasouduresansplomb(Figure10-5).
FIGURE10-5Unebobinedesouduresansplomb.
L’undemescollègues,StevenTai,s’estrenduenChinepourmeneràbienunprojetsurlequelnoustravaillions.Quandilademandéoùilpourraitacheterdelasouduresansplomb,ons’estmoquédeluienluidisantqu’onn’enavaitjamaisentenduparleretmêmequecelan’existaitpas.Maispour lesarduinistesconsciencieux, laplupartdesfournisseursetdesmagasinsd’électroniqueproposentdelasouduresansplombquicontientd’autresmétauxcommel’étain,lecuivre,l’argentetlezinc.D’aprèsmonexpérience, la soudure sans plomb convient parfaitement à des projets Arduino.Autrement dit, si vous voulez participer à la préservation de l’environnement et devous-même, évitez d’utiliser du plomb dans votre travail ! Une autre variété desoudureestlasoudurefourréeavecunfluxcentral.Lefluxsertàréduirel’oxydationde la surface du métal quand il réagit avec l’oxygène (comme la rouille sur uneancre). La réduction de l’oxydation permet une connexion plus fiable et laisse lasoudureliquidemieuxcirculeretremplirlesintersticesdujoint.Certainessouduresontdufluxdanslenoyaudelasoudure,cequilediffusependantquelasoudurefond.Vous verrez peut-être de la fumée quand vous soudez avec ce genre de fil.Généralement,cettefuméevientdelacombustionduflux.Pourêtresûrquevousavezdufilàflux,coupezlefildesoudure:vousdevezvoiruneâmenoiredanslasectiondufildesoudure.
Cecidit,travailleztoujoursdansunendroitbienventiléetévitezderespirerlafuméedelasoudure,quelquesoitletypedesoudurequevousavezchoisi.Lavez-vousbien
les mains et le visage après avoir soudé. Le flux de soudure peut quelquefoiséclabousser;portezdesvêtementsdeprotectionetprotégez-vouslesyeux.
TroisièmemainLe soudage est une opération très minutieuse, notamment avec de l’électroniquefragile.Ilestalorsutiled’êtreaidéparquelquechosequipeuttenirsansbougerlespetitespiècesbrûlantesdemétal.Cetobjet,appelétroisièmemain(sortedemaindesecours,reproduiteàlaFigure10-6),estunjeudepincescrocodilesplacéessurunbras réglable. Les pinces permettent de tenir un composant, le circuit imprimé oumêmeleferàsouder.Leprixd’unetroisièmemainoumini-étaudeprécisions’étaleentre10eurosetunecinquantained’euros.Cetoutilesttrèsutilepourteniruncircuitimprimé dans un angle précis ou maintenir ensemble des composants pendant quevous soudez.L’inconvénientmajeur est que l’onpassebeaucoupde temps à serrer,desserrer,ajuster,brefàréglerlespinces.Sivousdevezfairebeaucoupdesoudures,ce réglage vous demandera du temps. Si vous comptez investir dans une troisièmemain,vérifiezquelemodèlequevousavezchoisiaittoutessespartiesenmétal.Lespartiesenplastique,commelespasdevis,netiendrontpaslongtemps.
FIGURE10-6Unetroisièmemain.
PâteàfixeLapâteà fixeestunealternativeà la troisièmemainpourmaintenirsansbougeruncomposantouuncircuitimprimépendantquevoussoudez.Àlaplaced’unmécanismemécanique, vous utilisez cette pâte pour tenir un côté de la carte tandis que voussoudezlesdifférentsélémentsdel’autre.Unefoislesoudagefait,retirezlapâteàfixequevouspourrezréutiliser.Notezquelapâteàfixeseramollittrèsviteaucontactdela chaleur et qu’il faut attendre un certain temps pour qu’elle retrouve toute sonadhésivité.Une fois refroidie, roulez-la enboulepour enlever toutes lesmiettesducircuitimprimé.
PincecoupanteUne pince coupante est indispensable (Figure 10-7). De nombreux modèles sontcapables de couper des câbles, mais il vaut mieux se procurer celles pour travauélectroniques. Attention aux modèles avec un bout arrondi, elles sont difficiles àutiliser pour couper dans un espace confiné ou un fil précis. Préférez des pincescoupantespointuesquiconviennentàlamajoritédestravaux.
FIGURE10-7Unepincecoupantepointuepourcoupervosfils.
Notez que les pinces coupantes pour électronique sont parfaites pour couper ducuivre, mais pas pour des fils de fer de type trombone ou agrafe. Cela lesendommagerait.
PinceàdénuderPourconnecterdesfils,vousdevezretirer leplastique isolantqui lesentoure.Vouspouvezlefaireavecuncouteausivousêtesprudentousivousnevoussouciezpasdevos doigts. Mais le moyen le plus rapide, facile et sûr pour ôter le plastique quiprotègelesfilsestlapinceàdénuderpuisquec’estsafonction.Ilexistedeuxtypesdepincesàdénuder:manuelleetmécanique(voirlaFigure10-8).
La pince à dénuder manuelle est comme une tondeuse avec des encoches semi-circulaires de différents diamètres. Lorsque vous pincez le fil, la pince coupesuffisammentprofondémentpourcouperlagaineduplastique,maiss’arrêteavantdeblesserlefil.
FIGURE10-8Unepinceàdénudermécanique(àgauche)etmanuelle(àdroite).
La pince à dénuder mécanique fonctionne avec une action de déclenchement pourdégainerl’isolantdufilsansavoiràtirerdessus.Lapincemécaniquevouspermetdegagner du temps,mais s’avèremoins fiable sur le long terme, car sesmécanismespeuventplusfacilements’abîmerqueceuxdelapinceàdénudermanuelle.
PinceàbecfinLa pince à bec fin est très utile pour atteindre des endroits difficiles d’accès. Ellevous évite de vous brûler les doigts quand vous soudez. Reportez-vous au
Chapitre5pourensavoirplussurcettepince.
MultimètreUnmultimètrepermetde tester lescircuits.Lorsquevoussoudezdesconnexions, lafonction de test de continuité vous sera très utile pour vérifier que les joints desouduresontcorrects(pasdesoudureesèche)etsontaubonendroit.Reportez-vousauChapitre5pourensavoirplussurl’utilisationdumultimètre.
Quandvoustestezlacontinuité,débrancheztoujourstouteslessourcesd’alimentationreliéesàvotrecircuitafind’éviterlesfauxbips.
PompeàdessouderToutlemondefaitdeserreursetellespeuventêtredifficilesàcorrigerquandils’agitdemétalchaud.Unepompeàdessouder(Figure10-9)ouunpistoletàdessouderestdanscecas labienvenue.Cesdeuxoutilspompent (aspirent) lasoudure fondue. Ilsontgénéralementunpistonàpresserpourchasserl’airducorps.Quandvousappuyezsur le déclencheur, un ressort repousse vivement le piston en arrière, ce qui faitaspirerlasouduredanslecorpsdupiston.Quandvousréappuyezsurledéclencheurdupiston,iléjectelasoudurefroidequiaétéenlevée.L’utilisationdecetyped’outildemandede lapratique,carvousdevezchauffer lasoudureavecvotreferàsouderdans une main et aspirer les résidus de soudure avec la pompe à dessouder dansl’autre!
FIGURE10-9Unepompeàdessouderpeutsauvervotreprojet!
TresseàdessouderLatresseàdessouderestunautremoyendesupprimerlasoudure(voirlaFigure10-10).C’estunfildecuivrequiaététresséetquel’ontrouvedanslecommercesousformedebobine. Il offrebeaucoupde surfacede soudure à fondreou à supprimer.Toutdépenddel’utilisationquevousenferez.Placezlatresseàlajointureouautrouqui présente trop de soudure, chauffez la tresse en maintenant le fer à souder au-dessusd’elle,pressezlégèrement,lasoudurecontinueàfondreetvacomblerlestrousentre lesmailles de la tresse.Retirez simultanément la tresse et le fer à souder, lasouduredevrait être retirée.Si tel n’estpas le cas, répétez l’opération.Une fois lasoudureeffacée,retirezlatresseàdessouderetcoupeslapartieuséedelatresse.
FIGURE10-10Latresseàdessouderpermetderéparerlespetiteserreurs.
Neretirezpaslatresseàdessoudersielles’estcolléeaucircuitparcequevousaveztrop attendu. Si vous tirez fort, vous risquez d’arracher des pistes de la carte et larendreinutilisable.
Lapompeetlatresseàdessoudersonttoutesdeuxefficacespourretirerdesrésidusde soudure, mais elles s’utilisent dans des situations différentes et nécessitent unecertainedextérité.Encasderisquedesurchauffedecomposants,préférezlapompeàdessouder.Sivousn’arrivezpas retirer tous les résidusdesoudureavec lapompe,optez pour la tresse à dessouder qui peut atteindre des espaces restreints. Je vousconseilled’investirdanscesdeuxoptionsafindepareràtouteslessituations.
Fildecâblage
Fildecâblageestlenomgénériquedonnéauxfilsélectriquesdepetitdiamètre.C’estaveccefilquesontfabriquéslesstraps.Vousenavezpeut-êtredansvotrekit.Cefilse vend en bobines et existe en deux modèles : monobrin ou multibrin. Le fil decâblagemonobrinestcomposéd’unseulbrindefilrigidemaisdéformable.Ilgardesaformeunefoisplié.Maiss’ilestpliétropsouventaumêmeendroit,ilserompt.Lefildecâblagemultibrinestcomposédeplusieursbrinstrèsfins.Ilsupporteplusdemanipulationsque le filmonobrin,mais ilnegardepas sa formes’il estplié.Pourutiliserunfildecâblage,vousdevezlecouperàlongueurpuisledénudersurenvironuncentimètreàchaqueextrémitéafind’accéderauxbrins.
Les fils de câblage ont différents diamètres, indiqués par des chiffres telsque7/0,2ou1/0,6.Dansceformat,lepremierchiffrecorrespondaunombredebrinsdefiletlesecondchiffreaudiamètredechaquefilcontenudanslefildecâblage.Parconséquent, 7/0,2 signifie que la gaine contient 7 brins de fil et que chacunmesure 0,2 mm, c’est donc un multibrin ; 1/0,6 est un fil monobrin de diamètrede0,6mm.
Quandvousdébutez,vousnesavezpasvraimentdansquelfildecâblageinvestir.Lesbobinesdefilétantchères,vousrisquezd’êtrecoincéavecunstockdefilquinevoussert à rien. En général, le fil de câblage multibrin convient à la plupart desapplications. Le 7/0,2 convient à la plupart des trous de platines d’essai. Je vousconseille aussi de choisir trois couleurs différentes : du rouge, du noir et unetroisièmecouleurpourlesfilsdesignal.Avectroisbobines,vousserezéquipépourréaliser vos projets. Certains magasins d’électronique de loisirs vous proposentdifférenteslongueursdansdenombeusescouleurscommereprésentéàlaFigure10-11.
FIGURE10-11Desfilsdecâblagededifférentescouleurs.
SouderentoutesécuritéLesoudagen’estpasdangereuxsivousrespectez lesquelquesconseilsque jevousdonnedanscettesection,maisilpeutviteledevenirsivousnégligezlasécurité.
BientenirsonferàsouderUn fer à souder est un outil sûr s’il est utilisé correctement, mais il restepotentiellement dangereux en cas de négligence. Il a deux extrémités : la pannechauffanteet lemanche.Ne le tenezévidemment jamaispar lapanne,mêmeparunmauvaisréflexepourleratrapperlorsqu’iltombe!
Lameilleurefaçondetenirunferàsouderestlesaisircommeunstyloentrelepouceet l’index. Lorsque vous ne l’utilisez pas, posez-le sur le support adapté au fer àsouder.Lesupportduferàsouderestaussiunemesuredesécurité.Ilpermetdefairedissiperlachaleuretd’empêcherd’éventuellesbrûluresaccidentelles.
ProtégervosyeuxVousdevezporter des lunettes de protectionquandvous soudez.Le fil de soudure,notamment celui qui contient du flux décapant, a tendance à éclabousser quand ilchauffe. Lorsque vous utilisez une pince coupante pour raccourcir les pattes descomposantsune fois qu’ils sont soudés, les petits boutsmétalliques partent souventdanstouslessensàmoinsdepouvoirfaireécranavecunemainlibre.Demême,sivous travaillez à deux, protégez-vous des projections du voisin. Les lunettes deprotectionnesontpaschères,dumoinsellessontmoinschèresqu’unechirurgiedel’œil.Portez-les!
TravaillerdansunespaceventiléL’inhalationdevapeursdetoutenatureestgénéralementmauvaisepourlasanté,ilestdonc important de toujours souder dans un environnement bien aéré. Vérifiezégalementquevousnetravaillezpasàproximitédesdétecteursdefuméeparcequelesfuméesdesoudagepeuventlesdéclencher.
NettoyerleferàsouderGénéralement, le fer à souder est fourni avec une éponge qui sert à enlever lesexcédents de soudure. Vous devez humidifier l’éponge, mais ne l’utilisez pasdétrempée!Vérifiezquevousl’avezbienessorée.Lorsquevouschauffezlasoudure,elle s’oxyde sur la panne. Si la panne s’oxyde, elle s’abîme au fil du temps. Pouréviterl’oxydation,laissezunegouttedesouduresurleboutdelapannequandleferest posé sur son support.La goutte de soudure protège l’extrémité de la panne quevousessuierezàl’aidedel’épongelorsdelaprochaineutilisationdufer.
Nepasmangerlasoudure!Lesproduitschimiquesetmétauxquecontientlasoudurenesontpasmortels,maisilsne sont certainement pas bons pour la santé.Quand vous soudez, évitez de touchervotrevisage,vosyeuxetvotrebouche.N’oubliezpasdevouslaverlesmains(etlevisagesinécessaire)aprèsavoirsoudé.
AssemblerunecartefilleLa meilleure façon d’apprendre à souder est de pratiquer. Vous commencerez paressayerderéunirdesimpleschutesdefilsetàréussirdebeauxétamages(rendrelapartie dénudée d’un fil rigide en lui appliquant de la soudure). En guie d’exemplecomplet,vousallezapprendreàmonterunecartefilleArduino.Unecartefilleestuncircuit imprimé spécifiquequi s’insère au-dessusde l’Arduinopour lui ajouter unefonction(vousensaurezplusauChapitre13). Ilexistedifférentescartes fillespourdifférentesfonctionsquevouspouvezbrancheràvotrecircuitArduino.VouspouvezvousprocurerleKitProtoshieldillustréàlaFigure10-12quiestunecarteviergesurlaquellevouspourrezensuitesouderlesdifférentsélémentsduprototypedelaplatined’essai.Vousallezaveccetexempledécouvrircommentconstruireuncircuitsimpleenmodesoudure.
FIGURE10-12Unecartefillecomplètementmontée.
Fairel’inventairedespiècesQuandvousmontezuncircuit,lapremièrechoseàfaireestdevérifierquevousaveztouteslespiècesqu’ilfaut.Votreespacedetravaildoitêtreproprepourvousfaciliterletravail.
LaFigure10-13représentelekitArduinoProtodéballécorrectement.Ilcontient:
FIGURE10-13Touslesélémentsdelacartefille.
» Unlotdebarrettesmâles(40X1);
» Unconnecteur(3X2);
» Deuxboutons-poussoirs;
» UneLEDrouge;
» UneLEDjaune;
» UneLEDverte;
» Cinqrésistancesde10kΩ1/4W;
» Cinqrésistancesde220kΩ1/4W;
» Cinqrésistancesde1kΩ1/4W.
Certainskitsnecontiennentquelacarte,etc’estvousquichoisissezlesconnecteurs.Iln’yenapasdebonsnidemauvais, tantqu’ilscorrespondentauprojetquevousavezélaboré.
Pourmonter la carte, travaillez d’après une image pour vérifier la disposition descomposants,ensuivantbienlesinstructions.Dansnotreexemple,jevousguidetoutaulongdelaconstructiondelacarteétapeparétape,etvousindiquesinécessairelesdiversesastucesdesoudage.
MontagePour monter ce kit, vous devez souder les barrettes mâles et le bouton-poussoir.Soudercesélémentspermetàlacartefilledes’insérersurvotreArduino.Touteslesconnexions Arduino deviennent accessibles sur la carte fille Proto. Notez quequelques versions de la carte Proto ont des connecteurs HE (ou des connecteurssuperposables)àlaplacedesbarrettesmâles.LesconnecteursHEsontlongsafindepouvoirs’insérerenhautdelacarteArduinocommelefontlesbarrettesmâles,maisilspermettentaussiàd’autressupportsd’êtreplacésdessus.L’avantagedesbarrettesmâlesestquelacartefilleestpluscourteetoccupemoinsd’espace.LesconnecteursHEsontutilisésdanslacartefillemontéedelaFigure10-12.Cesontlesconnecteursnoirsenhautdelacarteavecdesbrochesendessous.
Danscetexemple,j’utilisedesbarrettesmâlesetnebranchepasleconnecteurICSP(In-Circuit Serial Programming) qui est le connecteur 3X2 du centre de l’Uno.L’ICSPsertd’alternativeautéléversementdescroquisavecunprogrammeurexterneenremplacementdel’atelierArduino.Ilestdestinéauxutilisateursavancés.
BarrettesmâlesVous allez commencer par débiter les barrettes mâles aux bonnes longueurs(Figure10-14).Lekitcontientune longueurde40élémentssurunde large(1X40),doncunerangéede40brochessuruneprofondeurd’uneligne.Chaquebrocheauneencocheenplastiqueque l’onpeutcouper.Pourcorrespondreà lacarteArduino, ilfautunelongueurde6(brochesanalogiques),unede8(brochesd’alimentation),unede 8 (broches numériques) et une de 10 (broches numériques encore). Coupez lesbarrettes mâles avec votre pince coupante à la bonne longueur. Il devrait vousrester 8 broches. (Mettez-les de côté pour la prochaine fois). Les broches ont unedimension précise qui s’adapte à la carte. L’écartement entre deux broches est de2,54mm(unpouce).Notezbiencetécartsivousachetezdesbarrettesmâlesd’autresconnecteursplustard.
FIGURE10-14Grosplansurunebarrettemâle.
Maintenant que vous avez préparé les barrettesmâles, vous allez les souder à leurplace. Dans la section suivante, je vous présente quelques techniques de soudage.Lisezbiencettesectionavantdecommencer.
AcquérirunetechniquedesoudageLapremièrechoseàfaireestdevérifierquetouslesélémentssontbienmisenplaceentoutesécurité.Ilesttrèsfréquentdeposerenéquilibretouslescomposantssurlecircuit impriméoude lesmettreàportéedemainàunemplacement faciled’accès,mais à un moment donné quelque chose finit par tomber juste au moment où vousvenez de prendre le fer à souder en main. Comme expliqué dans la section«Rassemblertouslesélémentspoursouder»plushautdanscechapitre,lameilleurefaçondeprocéderentoutesécuritéestd’utiliserunetroisièmemainoudelapâteàfixe.Lespincescrocodilesdelatroisièmemainpermettrontdesaisirleplastiquedesbroches et le circuit imprimé, puis de les tenir fermement à angle droit.Demême,vouspouvezfairetenirlesbrochesverticalementenappuyantsurlapâteàfixedansla partie inférieure. Vous les pressez ensuite sur un support rigide et lourd pourmaintenir le circuit près de vous. Ilm’arrive d’utiliser une grande bobine de fil àsouderensupport.
Ilexisteunetroisièmeoptionquipourrait«sécuriser»lescomposants.J’évoqueicicette option, parce qu’elle très tentante et aussi très risquée, afin que vous ne lasuiviezpas.Onpourraiteneffetimaginerplacerlesbrochesdansl’Arduinolui-même(avecleslonguesextrémitéscolléesdanslesupport),puismettrelecircuit impriméau-dessus. Cette option fait tenir tout à 90o,mais comme les broches sont conçuespour seconnecterà l’Arduinoet conduire lecourantélectrique, ellespeuventaussiconduired’autreschoses,etnotammentlachaleur.Siellesconduisenttroplachaleurdu fer à souder, cette chaleur va traverser le circuit pour atteindre les pattes de lapucetrèssensibledumicrocontrôleuretl’endommagerirrémédiablement.
Une fois le circuit imprimé bien installé, faites-le pivoter dans un angle de travailconfortable, très vraisemblablement dans lemême angle que celui du fer à souder(commeillustréàlaFigure10-15).
FIGURE10-15Toujoursêtredansunepositionconfortable.
Allumez votre fer à souder. Mon Weller WES51 a une plage de températuresentre50et350oC.Pluslapanne(lebout)estchaude,plusvitelasoudurefondrapourfairelesjoints,maisplusviteaussisefondrontd’autreschosescommelespartiesenplastiqueetlespucesensilicone.C’estpourquoivousdeveztoujoursréglerleferàsouderàlatempératurelaplusbassepossible.Pourvérifier,faitesfondreunpeudesoudure.Siellemetdutempsàfondre,vérifiezquevousdisposezbiend’unebonnesurfacedecontactentrelapanneduferàsouderetlasoudure.Sicelanemarchepas,augmentezprogressivementlatempérature.Engénéral,jerèglemonferà340oC,cequiestassezchaud,maispastrop.
Certains fers à souder sont équipés d’un thermostat qui indique la température. Lemust actuellement est le thermostat à affichage numérique. Mais les moins chersdépendentdevotreseuljugement.
Lorsque le fer à souder est à bonne température, humidifiez l’éponge. Sur certainsmodèles, l’éponge est collée « pour plus de confort » , mais c’est avant tout uninconvénient quand vous devez la mouiller. Dans ce cas, je vous conseille de la«décoller»etdelatremperdansunepetitebassineplutôtqued’aspergerd’eauvotrefer à souder et les environs. L’éponge doit être humidifiée et non pleine d’eau.L’humiditédel’épongel’empêchedebrûlerlorsquevousypassezlapanneduferàsouder.Sil’épongeesttropmouillée,ellepeutfairechuterlatempératureduferetdelasoudure,cequisignifiequelasouduresedurcitousesolidifieetnepeutpasêtreretiréesionn’augmentepasencorepluslatempératuredufer.
Vousêtesprêt.Vousallezsouder.Pourcefaire,suivezlesétapesci-après:
1. Faitesfondreunepetitequantitédesouduresurlapannedu
feràsouder,étapequ’onappelleétamerlapanne(Figure10-16).
FIGURE10-16Étamerlapannepermetdepréserverleferàsouderetfacilitelesoudage.
Lasouduredoitcollerauboutdelapanne.Engénéral,avecun
nouveauferouunferbienentretenu,lasoudurecolleàlapanne
sansproblème.Siellen’adhèrepasauboutdelapanne,faites-la
pivoterpourtrouverleboutdelapannequin’estpasoxydé.Sivous
n’envoyezpas,utilisezunnettoyeurdepannepoursupprimertoute
couchequiseseraitformée.Enfrottantlégèrementavecle
nettoyeurdepannedeferàsouder,voussupprimezleséventuels
résidusdesoudureetvousrestaurezvotreferàsouderdanssa
gloirepassée.
Lesnettoyeursdepannedeferàsoudersontdeséponges
métalliquesquipeuventcontenirdessubstancestoxiquesquevous
nedevrezniinhaler,niingérer.
2. Lorsquevousavezunegouttedesouduresurlefer,essuyez-la
surl’épongepourrévélerlebrillantmétalliquedelapanne.
Lebutestd’appliquercebordfraîchementétamédevotrefer(et
nonlapointe)àlazonequevousjoignez.Utiliserlebordvousdonne
plusdesurfaceetpermetaujointdechaufferplusvite.Notezqu’il
existedenombreuxmodèlesdepannedeferàsouderetqu’ilssont
facilementinterchangeables,cequivouspermetdeparerà
différentessituations.Certainssontpointus,commeàlaFigure10-
16,etd’autresontuneformedelamedetournevisoudebiseau,
offrantdessurfacedetravailadaptéesàdessituationsdifférentes.
3. Encommençantparlapremièrebroched’unerangée,
appliquezlefersurlasurfacemétalliqueducircuitimpriméet
labrocheàlaquelleilestconnecté.
Celachauffelecircuitetlabroche,lespréparantàlasoudure.
4. Avecl’autremain(pascellequitientlefer),appliquezla
souduresurlapointeoùlefer,labrocheetlaplaque
métalliqueserencontrent.
Dèsquelasoudureestchaude,ellefondetsepropagepourremplir
letrou,scellantlabrocheetlecircuit.Pourappliquerplusde
soudure,appuyezdessusdanslejointoùellefond.Pouren
appliquermoins,ilsuffitderetirerlefer.Ilsuffitdequelques
millimètresdesoudurepourdepetitesjointures.
5. Quandlazoneestremplie,retirezlasoudure,maislaissezle
feruneoudesecondesdeplus.
Lasoudureestainsifonduecomplètementetremplittouslestrous.
6. Retirezleferàsouderetessuyezlespattesdelabroche.
Toutexcédentdesoudurevas’amassersurleboutdelapanneque
vouspourrezensuitecouper.
Toute cette opérationneprendquedeuxou trois secondes.Celapeut vousparaîtrefou, mais une fois que vous avez pris le rythme, c’est tout à fait réalisable. Touts’apprendparlapratique.
Sivousavezsuivilesétapesprécédentes,vousobtenezunjointdesoudureenformedepyramideetunblocmétalliquequidoit recouvrirvotrecircuit imprimé.Sivouspercevezletrouquelabrocheatraverséouunblocdesoudurequin’estpasconnectéaucircuitimprimé,re-chauffezlasoudureavecvotreferàsouderouajoutezunpeudesoudurepourcomblerlesvides.
Unefoislapremièrebrochefixée,soudezcelledel’autreextrémitédelasérie.pourquelarangéesoitbienparallèleaucircuit.Vouspouvezencoreredresserl’ensembleenchauffantlasouduredechaqueextrémité.Sivoustrouvezqu’ilyatropdesoudure,
refaites-lafondre.Sivouspensezqu’ilyenaencoretrop,utilisezunetresseouunepompeàdessouderpoursupprimerlesurplus.
Pourvoirdesexemplesdebonsetdemauvaissoudages,visitezlagaleried’imagesde http://highfields-
arc.co.uk/constructors/info/h2solder.htm.
Unefois lapremièresériebiensoudée, répétez l’opérationpour lesautresbroches.Pourlesboutons-poussoirs,ilsuffitdelesmettreàl’emplacementindiquéenhautducircuitimpriméetdelesclippergrâceauxpattesdubouton.Sinécessaire,sécurisez-lesavecde lapâteà fixe,puis tournez le circuit et soudezenpassantpar lamêmetechnique de soudage. Une fois que vous avez terminé, procédez à une dernièrevérificationpour vous assurer qu’aucundes joints de souduren’en toucheun autre.Deuxbrochesmalconnectéespeuventprovoqueruncourt-circuitetendommagervotrecircuitimprimé.Soyezprécis.Dansledoute,utilisezlafonctiondetestdecontinuitéde votre multimètre pour contrôler les broches adjacentes. Vous ne devriez pasentendredebipentrelesbrochesquinesontpasconnectées.
Placezlacartefilleàchevalsurl’Arduinoetvérifiezqu’elles’insèrecorrectement.Sic’estlecas,vousvoilàprêtàsoudervotrepremiercircuit,cequevousallezfaireàlasectionsuivante.
MonterlecircuitdetestUnefoisquevotrecartefilleestprêteàl’emploi,réfléchissezàcommentpourraitêtrelecircuitquevousvoulezconstruire.Avantd’entreprendretouteaction,planifiezbientous les points afin d’éviter toutemodification qui pourrait être difficile à réaliserensuite.Commencez par faire un prototype du circuit sur une platine d’essai.C’estfacile,rapide,etleplusimportant,temporaire.
Préparer rapidement et vérifier le bon fonctionnement d’un circuit est simple. Pourl’exemplequenousallonsréaliser, j’utiliseAnalogInOutSerail (voir leChapitre 7)pourvousmontrercommenttransformeruneplatined’essaiencircuitsoudédéfinitif.
DécouvrirlecircuitToutd’abord,vousdevezrecréerlecircuitAnalogInOutSerialsurlaplatined’essai,commeexpliquéàlafinduChapitre7.TéléversezlecroquisenpassantparFichier-> Exemples -> 03.Analog -> AnalogInOutSerial. Vous devez pouvoir régler laluminositédelaLEDaveclepotentiomètre.
Quandcecircuitestprêt,rejetezunœilaucircuitAnalogInOutSerial.Unedifférencedoitvoussauterauxyeux:lacartefilleProton’apaslesmêmeslignesetrangéesquelaplatined’essai,exceptédansuncoin.Cequiesttypiquedescircuitsintégrés(IC)
oupuces,maisilspeuventêtreutiliséspourtout.Lerestedelacartefillecomportedes trous indépendants dans lesquels on peut enfoncer puis souder les pattes descomposants.Vouspouvezyinsérerdesfilspourétablirdesconnexions.
Pourtransformerlecircuitenunecartefillefonctionnelle,examinezattentivementleschéma.Leslignesquiconnectentlescomposantspeuventêtreremplacéespardesfilssoudés directement aux broches adéquates. Quant au potentiomètre, il lui faut troisfils : un de 5 V, un GND et un pour l’entrée Analog 02. La LED et la résistancenécessitent deux fils supplémentaires : un GND et une broche 9. Commencez partracer le circuit pour plus de clarté. Il est inutile qu’il soit aussi clair que celuid’exemple,maisfaireunplanducircuitvavousépargnerbiendes«dessoudures».Commeleditunvieiladage«Mieuxvautvérifierdeuxfoisavantquepleurerdeuxfoisaprès».
Notez que tous les fils correspondent aux trous auxquels ils doivent se connecter.Comme vous ne disposez pas d’espace suffisant pour insérer les fils et pattes descomposants dans le faible diamètre d’un seul trou, vous devrez les rapprocher etcomblerl’écartentreletrouetlapatteoulefil.
PréparerlecircuitUne fois que le circuit est tracé, il faut le préparer afin de pouvoir déterminer lalongueurdesfils.Pourplacerentoutesécuritélescomposantssurlacarte,insérez-lesdansdes trousà labonnedistancepuis retourner lecircuit etpliez lespattesà45opour que le composant ne retombe pas. Le dessous devrait montrer quelque chosecommecequemontrelaFigure10-17.
FIGURE10-17UneLEDinséréedanslaplaque(vuedudessous).
ImplanterlesfilsVousconstaterezquelalongueurdesfilsrequiseestrelativementcourte.Sivousavezdufilsolide,pliez-lepourqu’ilépouselaformeplateducircuitimprimé.Avecunfilmultibrin, il estplus facilede formerunarcquipuissepasserd’un trouàunautre.N’oubliezpasdemesureroudefairel’estimationdeladistanceetd’ajouterunpetitpeude longueur d’unbout à l’autre afin que les bouts puissent s’insérer facilementavantdecouper.Dénudezlecâbleetplaquez-lelongdesalongueurpourvérifiersielleestbonne.Remarquezqu’ilarrivequelquefoisque leboutd’uncâblemultibrins’effiloche. Dans ce cas, plaquez-le entre le pouce et l’index et torsadez-enl’extrémité enunpoint.Vouspouvezmêmeapporter unpeude soudure sur le bout,c’est-à-direl’étamer.Mettezainsienplacetouslesfilssurlecircuit.
SouderlecircuitMaintenantquevousaveztouslescomposantsetlesfilsenplace,ilesttempsdelessouder.Vous avez déjà plié les pattes des composants. Les fils sont restés bien enplace.Comme la résistanceet laLEDsont côte à côte, servez-vousde leurspattespourlesrelier,ilvousseraainsiinutiled’utiliserunfil.N’oubliezpasdevérifierquela LED est dans le bon sens. Si nécessaire, utilisez de la pâte à fixe pour mieuxprotégerlescomposants,puissoudez-les,commelesbarrettesmâlesdesborniers.
Unefoistouslescomposantsbienimplantés,commencezparsouderlesfils.Commesouvent,lerésultatdusoudagevadépendredusoinaveclequelvousappliquerezlasoudure.Certainspréfèrentenroulerlefilautourdespattesducomposantpourobtenirunemeilleureprise;d’autrespréfèrentlesreliercôteàcôtepouravoirdesjonctionspluspropres.Àvousdechoisir.Tantquevousavezunebonneconnexion,toutvapourlemieux.
LESPLAQUESDEPROTOTYPAGEOUVEROBOARD
Lescartesfillesspécialementconçuespours’enfichersurvotrecarteArduino
sontrelativementchères.Lesplaquesàbandes,aussiappeléesVeroboardou
Stripboard,offrentunesolutionmoinsonéreuseetpluspolyvalente.Laplaque
à bandes est une carte comportant des pistes de cuivre parallèles
prédécoupéesetprépercéespermettantdemonteruncircuitcommesurune
platine d’essai, mais avec des soudures. La figure suivante en donne un
exemple.
L’espacement entre les trous et la disposition des pistes en cuivre sont
variablesd’unmodèleà l’autre.Engénéral,pour lesapplicationsArduino, les
plaquesàespacemententretrousde2,54mm(0,1pouce)conviennentbien,
puisquec’estl’espacementdesbrochesArduino.Vouspouvezainsiconstruire
vosproprescartesfilles.
NettoyerUnefoisquevousavezfinidesouder,vérifiezunedernièrefoisvotrecartepourvoirsivousn’avezpasoubliéunesoudure.Sitoutvousparaîtbien,vouspouvezfaireleménage.Avecvospincescoupantes,supprimezavecprécaution lapartie inutiledespattesdescomposants,justeau-dessusdujointdesoudure.
N’oubliez pas de couvrir d’une main les morceaux métalliques lorsque vous lescoupez.Ilsrisqueraientdeseprojeterdansl’airetdecréeruncourt-circuitailleurs.
TesterlacartefilleUne fois la carte fille équipée d’un circuit complètement monté, vous devez labrancheretlatester.Sitoutmarchebien,lerésultatdevraitressembleràlacartefilledelaFigure10-18.
FIGURE10-18Unenouvellecartefilleprêteàl’emploi.
ProtégerleprojetÀprésent,votrecircuitnecourtpluslerisquedetomberenruine,maisilresetàleprotégerdumondeextérieurenleplaçantdansunboîtier.
BoîtierétancheLasolutionlaplussimplepourleprotégerestdelemettredansuneboîte.Entermesd’électronique, une telle boîte s’appelle un boîtier électronique ou coffret deprotection. Vous trouverez un cvaste choix de boîtiers en plastique ou enmétal dedifférentesformesettailles,étanchesounon.Laseulechosequ’ilvousresteàfaireestdetrouverlebon!
Denombreuxfournisseursenligneproposentdesboîtiers,maisvousnesaurezpassic’est le bon modèle tant que vous ne l’aurez pas en main. Ces boîtiers ont desdimensions internes et externes qui ne tiennent en général pas compte del’encombrementdespoteauxenplastiquemoulépourfixerlesvis.Jevousconseilledoncdevousdéplacerdansunmagasind’électroniqueetd’emporteravecvousvotreArduino pour vérifier s’il entre bien dans le boîtier et qu’il reste suffisammentd’espacepourlesfilsetautrescartesfillesquevousajouterezparlasuite.
Quandvousprévoyezdemettrevotreprojetdansunboîtier,tenezcompte:
» Del’accèsauportUSBpourpouvoirtéléverserducodeet
l’alimenter.Vousdevezdévisserleboîtierpourmettreàjourle
code.Sicelavousprendtropdetemps,percezuntrouassezgrand
pourbrancherleportUSBsansouvrirlecouvercle.
» Del’alimentationpourfairetournerl’Arduino.Sil’Arduinon’est
pasalimentéviaUSB,quelleestsasourced’énergie?Cepeutêtre
unadaptateurexternequevousbranchezaumur,cequinécessite
untroupourpasserlefiletlejack.Vouspouvezsupprimerlaprise
etsouderlesfilsauxbrochesVinetGNDsivoussouhaitezquelque
chosedepermanent.Vouspouvezaussisongeràunebatterie
externe.
» Del’accèsauxentréesetauxsorties.Quelestl’intérêtd’uneLED
oud’unboutons’ilssontàl’intérieurduboîtier?Laplupartdes
projetsontbesoindequelquescontactsaveclemondeextérieur.Il
fautpouvoirvoirlaLEDouactionnerlepotentiomètre!
Réfléchissezbienàtoutcedontabesoinlecircuitavantdelesouderetdelemettredans un boîtier. Examinez tous les appareils électroniques qui vous entourent pourvous faire une petite idée des astuces auxquelles a recouru l’industrie. Vous serezsurprisparlenombredecommandesàdistancequisontenfaitdesimplesboutons-poussoirsdissimulésdansdesgadgetsquisemblentcomplexes.
CâblerPour plus de souplesse au niveau du câblage, vous pouvez prévoir de relier lesentrées/sorties à unbloc terminal que l’on appelle undomino ou unbornier à vis.Ainsi,vouspouvezvousbranchersurlesentréesetsortiessansouvrirleboîtier.Vousn’aurezplusbesoindedessouderetressouderlecircuit.
VrillerLorsque vous connectez des fils, je vous conseille de les vriller ou de les tresserensemblepourformerdesépissures.Vosfilsenserontrenforcésetenplusilsserontplus jolis !Pourvriller deux fils ensemble, coupez-les en longueur et alignez leursextrémités puis tortillez-l’ensemble jusqu’à ce que les deux fils forment une pointeunique.
TresserSivousavez trois fils,vouspouvez les tresserde lamêmemanièrequevousfaitesunetressedecheveux.Lestroisfilsdanslamain,tenez-lesfermement.Passezlefilleplusàgauchesurceluidumilieupuissousceluileplusàdroite.Répétezjusqu’àcequevousayezenmainunetressedefils.Ilsenserontplusrobustesetcelaferaplusprofessionnel.Notez que si vous choisissez des fils demême couleur, vous devrezcontinuellement tester ces fils pour savoir qui est qui. Je vous conseille donc dechoisirtroisfilsdecouleurdifférente.
BorniersoublocsterminauxLes blocs terminaux ont différentes tailles, et cela détermine la quantité de courantqu’ilspeuventsupporter.Cettevaleurmaximaleestd’ailleursindiquéesurlebornier.Quandvousenchoisissezun,sélectionnez-letoujoursavecunseuildetolérancebiensupérieur à ce dont vous avez besoin. Par exemple, si vous avez besoin d’un blocterminalde3A,choisissez-enunde5A.Pourconnecterlesfils,notammentlesfilsmultibrins,étamezleboutdufilavecunpeudesoudureourepliezlefildénudésousla gaine isolante de sorte que le bout de la vis appuie du côté de l’isolant. Celaempêcheralavisdecouperunbrindefillorsduserrage.
CalerlecontenuUnefoisquelecâblagevoussatisfaitetquevousaveztouslestrousdontvousavezbesoin, jevousconseilledecaler tous lesélémentsqui sontà l’intérieurduboîtierafinqu’ilsnes’entrechoquentpas.Utilisezduvelcro,descalesfaitesavecdeschutesdepolystyrèneoude lacolle.Utilisezdescolliersserre-câblepourrelierplusieursfilsentorons.
A
Chapitre11Améliorervotrecode
DANSCECHAPITRE
» Comprendrel’usaged’untimer
» Mettreenplacedessystèmesantirebondpourlesboutons
» Exploiterplusieursboutons
» Lisserlesrésultats
» Ajusterlasensibilitédescapteurs
ufildu temps,en trouvantdifférentsusagesetbesoinspourvotreArduino,vousallezaffinervotrecodepourlerendreplusplusefficace.Ainsi,enrepensantvotrecode,vousserezenmesuredeminimiserdansvosprojetsleseffetsetlesrésultats
imprévus qui surviennent généralement lorsque l’on travaille avec du matérielphysique.Dans ce chapitre, vous découvrirez quelques projets qui vous aideront àaffinerlesvotres.
UnmeilleurBlinkBlink a probablement été votre premier croquis.Voir la premièreLED s’allumer asans doute été pour vous unmomentmagique.Mais que diriez-vous de l’améliorerencore?LecroquisdebasedeclignotementprésentéauChapitre4fonctionnaitbienàceciprès,qu’ilnepouvaitfaireriend’autre.
Examinons-leànouveau:
/*
Blink
ActivelaLEDdurantuneseconde,puisl’éteint
durant
uneseconde,
etainsidesuite.
Cetexempleestdansledomainepublic.
*/
//LaLEDestconnectéeàlabroche13surla
plupartdes
cartesArduino.
//Donnez-luiunnom
intled=13;
//Laroutinesetupestexécutéequandvouspressez
le
boutonreset
voidsetup(){
//Fairedelabrochenumériqueunesortie.
pinMode(led,OUTPUT);
}
//Laroutineloopserépèteàl’infini
voidloop(){
digitalWrite(led,HIGH);//AllumerlaLED
delay(1000);//Attendreune
seconde
digitalWrite(led,LOW);//ÉteindrelaLED
delay(1000);//Attendreune
seconde
}
Labouclepeutêtrerésuméecommececi:
1. AllumerlaLED.
2. Attendreuneseconde.
3. ÉteindrelaLED.
4. Attendreuneseconde.
Cedélaid’attentevas’avérerproblématiquedèsquevousvoudrezintégrerlecroquisBlinkavecunautrefragmentdecode.Lorsquelecroquisutiliselafonctiondelay(),ilattend pendant la durée spécifiée (dans ce cas, une seconde) et ne peut rien faired’autre.
Si vous souhaitezmodifier quelque chose – par exemple, si vous souhaitez que laLEDneclignotequelorsquelecapteurdelumièren’estpaséclairé–ilvousfaudraécrireàl’intérieurdelaboucleunfragmentdecodeconditionnelbasésurif,commecequisuit:
voidloop(){
sensorValue=analogRead(sensorPin);
if(sensorPin<darkValue){
digitalWrite(led,HIGH);//Allumerla
LED
delay(1000);//Attendreune
seconde
digitalWrite(led,LOW);//Éteindrela
LED
delay(1000);//Attendreune
seconde
}
}
Celafonctionnepresque.LorsqueleseuildevaleurpourdarkValueestfranchi,lecontenude laboucleestexécutéet laLEDs’allume,attenduneseconde, s’éteintetattendune seconde.Maiscomme lecroquisestoccupéauclignotementdurantdeuxsecondes, il ne peut pas vérifier si le niveau d’illumination augmente de nouveauavantqueleclignotementnes’achève.
Lasolutionconsisteàutiliseruntimeraulieudemettreleprogrammesurpause.Untimeroucompteurressembleàunehorlogeque l’onpeututiliserpourchronométrerles événements. Par exemple, un timer peut compter de 0 à 1000 et réaliser uneopération lorsqu’il atteint la valeur 1000, puis recommencer à nouveau en partantde 0. Cela s’avère particulièrement utile pour prendre en charge des événementssurvenantàintervallesréguliers,telsquesurveilleruncapteuràchaqueseconde–oudanscecasmodifierl’étatd’uneLED.
MettreenplacelecroquisBlinkWithoutDelayPourréaliserceprojet,ilfaut:
» UnArduinoUno
» UneLED(facultatif)
PlacezlespattesdelaLEDentrelabroche13(pattelongue)etGND(pattecourte),comme l’illustrent les Figures 11-1 et 11-2. Cela vous permettra de voir plusfacilement le clignotement. Si vous ne disposez pas d’une LED, recherchez cellemarquéed’unLsoudéesurvotrecarteArduino.
Téléversezensuitelecroquisparlebonportsérie.VousdevezvoirlaLEDclignotercommeellelefaisaitaveclecroquisBlinkstandard.
Ouvrez le croquis BlinkWithoutDelay en sélectionnant Fichier->Exemples->02.Digital->BlinkWithoutDelay.
FIGURE11-1Ici,toutcequ’ilvousfautc’estuneLEDsurlabroche13.
FIGURE11-2LediagrammeducircuitaffichantlaLEDsurlabroche13.
VoicilecodecompletcorrespondantaucroquisBlinkWithoutDelay:
/*BlinkwithoutDelay
AllumeetéteintuneLEDconnectéeàunebroche
numé-
rique,sansutiliserlafonctiondelay().Ceci
signifie
qu’unautrecodepeuts’exécuterenmêmetempssans
être
interrompuparlecodedelaLED.
Lecircuit:
*LEDattachéeàlabroche13.
*Note:surlaplupartdesArduinos,ilyadéjà
une
LEDsurlacartereliéeàlabroche13,doncaucun
maté-
rieln’estrequispourcetexemple.
crééen2005parDavidA.Mellis
modifiéle8Fév2010parPaulStoffregen
Lecodedecetexempleestdansledomainepublic.
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
//Constantepourdéfinirlenumérodelabrochede
laLED
constintledPin=13;
//Variablepourdéfinirl’étatdelaLED
intledState=LOW;
longpreviousMillis=0;
//Lavariablesuivanteestdetypelongcar
l’heure,
//mesuréeenmillisecondes,devienttrèsviteun
très
//grandnombrequinepeutpasêtrestockédansun
int
(limitéà32767).
longinterval=1000;
//Intervalledeclignotement(millisecondes)
voidsetup(){
//Définitlabrochenumériquecommesortie:
pinMode(ledPin,OUTPUT);
}
voidloop()
{
//Placericilecodequidoits’exécuter
//sanscesse.
//vérifiesilaLEDdoitclignoter;c’est-à-dire
//siladifférenceentrel’heureencourset
//ladernièrefoisoùlaLEDaclignotéestplus
//grandequel’intervalleauquelvousvoulez
faire
clignoterlaLED.
unsignedlongcurrentMillis=millis();
if(currentMillis-previousMillis>interval){
//Mémoriselemomentdudernierclignotementde
la
LED
previousMillis=currentMillis;
//SilaLEDestsuroffactivez-laetvice
versa:
if(ledState==LOW)
ledState=HIGH;
else
ledState=LOW;
//DéfinitlaLEDSelonlavaleurdeledState
digitalWrite(ledPin,ledState);
}//Findugrandblocconditionnelif
}//Findelafonctionloop()
Cecroquisestplus longqueBlinketpeutparaîtreplusdifficile.N’hésitezpasà leparcourirligneparlignepourvousl’approprier.
Notezquelalignededébutdublocconditionnelif(currentMillis...définittoutunblocdelignes,jusqu’àl’avant-dernièreligneducroquis.
ComprendrelecroquisBlinkWithoutDelayEn premier lieu, dans les déclarations, nous définissons une constante parconstint pour stocker la valeur 13 dans ledPin car il s’agit d’un entier qui ne
changerapas.
//ConstantepourlenumérodelabrochedelaLED
constintledPin=13;
Les variables viennent ensuite. La première est letState. Elle reçoit la valeurinitialeLOWdemanièreàcequelaLEDsoitéteinteaudémarrageducroquis.
//Variable
intledState=LOW;//ledStatesertàdéfinirla
LED
Deux variables sont ensuite déclarées avec le type long au lieu du type int.Reportez-vous à l’encadré « Les types long et unsigned long » plus loin dans cechapitrepourenapprendredavantagesurcepoint.
La première variable previousMillis est utilisée pour stocker la durée enmillièmesdesecondeentredeuxtoursdeboucle.
//Mémoriselemomentdeladernièrefoismiseà
jour
longpreviousMillis=0;
La seconde variable, nommée interval, correspond au temps exprimé enmillisecondes entre deux clignotements, qui ici prend la valeur 1000 ms soit uneseconde.
//intervallepourclignoter(millisecondes)
longinterval=1000;
Dans la fonction setup(), vous n’avez qu’une seule broche à définir en tant queOUTPUT.Commedanslesdéclarations,labroche13faitréférenceàledPin.
voidsetup(){
//définitlabrochenumériquecommesortie
pinMode(ledPin,OUTPUT);
}
Danslaboucleloop(),leschosescommencentàsecompliquer.
Enpremierlieu,lecodedutimerestexécuté,lequeldéclareunenouvellevariabledetypeunsignedlongpourstockersavaleurcouranteenmillisecondes.Pourcefaire, lecodeutilise la fonctionmillis()qui renvoie lenombredemillisecondesécouléesdepuisledémarrageduprogrammeArduino.Aprèsunpeuplusde50jours,cette valeur revient à 0, parce qu’elle a atteint la plus rande valeur pouvant êtrestockéedansunentierlong.Maiscelareprésentepourlaplupartdesapplicationsuneduréeplusquesuffisante.
voidloop(){
unsignedlongcurrentMillis=millis();
Les variables déclarées à l’intérieur d’une boucle ou d’une fonction sont nomméesvariableslocales.Ellesn’existentqu’à l’intérieurde lafonctiondans laquelleellesont été déclarées (ainsi que dans les autres sous-fonctions déclarées depuis cettedernière);ellescessentd’existerdèsquelafonctions’achève.Ellesserontrecrééeslorsduprochainappelàlafonction.
Siunedevosvariablesdoitêtrelueourenseignéepard’autresfonctionsoufragmentsdecode,vousdevezutiliserunevariableglobaleetladéclareraudébutducroquisavantlaboucledeconfiguration.
Ilnous fautensuitevérifier lavaleurcourante retournéeparmillis() pour savoircombiendetempss’estécoulé.Pourcefaire,ilsuffitd’unesimpleconditionifquisoustraitlavaleurprécédenteàlavaleurcourantepourobtenirladifférence.Sicettedifférenceestplusgrandequelavaleurchoisiepourl’intervalle,lecroquissaitqu’ilesttempsdeclignoter.IlestimportantderéinitialiserpreviousMilliscarsinonl’intervalleneseraitmesuréqu’uneseulefois.L’instructionpreviousMillis=currentMilliss’encharge:
if(currentMillis-previousMillis>interval){
//EnregistreladernièrefoisoùlaLEDa
clignoté
previousMillis=currentMillis;
CommelaLEDpeutêtreactuellementalluméeouéteinte,lecodedoitvérifierl’étatde cette dernièrepour savoir cequ’il doit faire pour inverser son état.Cet état eststockédansledState,ainsiuneautresimpleconditionifpeutvérifiercetétatetréaliserl’inversion.SilavaleurestLOWalorsonlapasseàHIGHet inversement.LecodesuivantmetàjourlavariableledState:
//SilaLEDestsuroff,activez-laetviceversa:
if(ledState==LOW)
ledState=HIGH;
else
ledState=LOW;
À présent, il ne reste plus qu’à définir le nouvel état de la LED en utilisantdigitalWrite():
//DéfinitlaLEDaveclavaleurdeledState
digitalWrite(ledPin,ledState);
}
}
CecodepermetdefaireclignotervotreLEDtouteneffectuantd’autresfonctionsenmêmetemps.
LESTYPESLONGETUNSIGNEDLONG
Le mot réservé long définit un type de données numérique. Il permet de
réserverunespaceenmémoirepourstockerde trèsgrandsnombresallant
de-à+deuxmilliardsenviron(de-2147483648à+2147483647),alorsqu’un
entier de base défini avec int ne peut stoker que les valeurs entières
entre-32768et+32767.
Dans notre projet, lorsque nousmesurons le temps enmillisecondes, nous
devonsmanipulerdegrandsnombrescarchaquesecondeeststockéecomme
étant1000millisecondes.Pourvousdonnerune idéede la tailled’unentier
long, imaginezladuréemaximumqu’ilpeutstocker.Cettevaleurcorrespond
à2147483secondeset647centièmes,soit35791minutesou596,5heures
c’est-à-direapproximativement25jours(seulement)!
Parfois, nous n’avons pas besoin de valeur négative, aussi pour éviter des
calculsinutiles,nouspouvonsutiliserdesunsignedlongàlaplacedelong.
Ununsignedlongestsimilaireaulongàceciprèsqu’ilnedisposepasde
valeur négative. Ce qui donne aux unsigned long une plage de valeurs
doublée,allantde0à+4294977295.
Pourgérerleseffetsderebonddubouton
Un étrange fait se produit lorsque votre bouton revient à sa position initiale. LemicrocontrôleurdevotreArduinopeutlirel’étatducommutateurdesmilliersdefoisparseconde,cequiestbienplusrapidequecequenoussommescapablesdefaire.C’est une bonne chose d’une certaine manière, car cela nous assure une lectureinstantanée(aussiloinquelaperceptionhumaineestconcernée),maisilyaparfoisunmoment de flou lorsque le contact du commutateur n’est ni totalement enfoncé, nitotalement relâché. Cela laisse ce dernier dans un état incertain jusqu’à ce qu’ilatteigne une position bien déterminée. Pour éliminer ce désagrément, vous devezignorerleschangementssoudainslorsquevousévaluezlesétatsducommutateuravecuntimer.C’estrelativementsimpleetcelapeutgrandementaméliorer lafiabilitédevosboutons.
ConstruirelecircuitDebounceRéalisezlecircuitdelaFigure11-3puisessayezlecroquisDebounce.
FIGURE11-3Leschémaducircuitdubouton-poussoir.
Pourcela,ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Unbouton-poussoir
» UneLED
» Unerésistancede10kΩ
» Desstraps
Réalisez le circuit illustré dans les Figures 11-3 et 11-4 en utilisant une platined’essai.LaLEDpeutêtreinséréedirectementsurlabroche13etsurlabrocheGNDvoisine.
FIGURE11-4Schémaducircuitdebouton-poussoirDebounce.
Créez le circuit et choisissez Fichier->Exemples->02.Digital->Debounce pourcharger lecroquisDebouncedubouton-poussoir.LecodecompletcorrespondantaucroquisDebounceestlesuivant:
/*
Debounce
ÀchaquefoisquelabrocheentréepassedeLOWà
HIGH
(parexemplelorsquel’onappuiesurlebouton-
poussoir),
labrochesortiepassedeLOWàHIGHoudeHIGHà
LOW.Un
délaiminimumestajoutéentrelesbasculespour
éviter
desrebondssurlecircuit(pourlesignorer).
Lecircuit:
*uneLEDreliéeàlabroche13
*unbouton-poussoirreliéeàlabroche2à+5V
*unerésistancede10Kohmreliéeàlabroche2
*Note:SurlaplupartdescartesArduino,uneLED
est
déjàconnectéeàlabroche13,vousn’avezdoncpas
be-
soindecomposantssupplémentairespourcetexemple.
Crééle21Novembre2006
parDavidA.Mellis
modifiéle30Août2011
parLimorFried
Cecodeexempleestdansledomainepublic.
http://www.arduino.cc/en/Tutorial/Debounce
*/
//Constantes
//Pourdéfinirlenumérodesbroches
constintbuttonPin=2;//numérodelabrochedu
bou-
ton-poussoir
constintledPin=13;//numérodelabrochede
laLED
//Variables
intledState=HIGH;//étatactueldelabro-
chesortie
intbuttonState;//lectureactuelledela
bro-
cheentrée
intlastButtonState=LOW;//lectureprécédentede
la
brocheentrée
//Lesvariablessuivantessontdetypelongcarle
temps,mesuréenmillise-
//condes,devienttrèsviteunnombretrèsgrand
longlastDebounceTime=0;//Derniermomentoùla
sortie
abasculé
longdebounceDelay=50;//Délaidel’antirebond
voidsetup(){
pinMode(buttonPin,INPUT);
pinMode(ledPin,OUTPUT);
}
voidloop(){
//Stockel’étatducommutateurdansunevariable
locale:
intreading=digitalRead(buttonPin);
//Vérifiesionapressélebouton
//(l’entréepassedeLOWàHIGHoulecontraire).
On
//attendassezlongtempsdepuisladernière
pression
pourignorerlebruit
//Silecommutateurchange,enraisondubruitou
de
lapression:
if(reading!=lastButtonState){
//Redéfinitletimerdel’antirebond
lastDebounceTime=millis();
}
if((millis()-lastDebounceTime)>debounceDelay)
{
//Quellequesoitlalecture,dureplus
longtemps
//queledélaidel’antirebond,ilprendalors
l’étatactuel:
buttonState=reading;
}
//DéfinitlaLEDquiutiliselebouton:
digitalWrite(ledPin,buttonState);
//EnregistrelalecturedanslastButtonState.
//Puiseffectueletourdebouclesuivant.
lastButtonState=reading;
}
Lorsquevousaurez téléversé lecroquis,vousdevezobtenirunboutonàantirebondfiable. Il peut être difficile de se rendre compte des effets, car si tout fonctionnecorrectement,vousnedevrezvoiriciqu’unboutoncontrôlantprécisémentvotreLED.
ComprendrelecroquisDebounceLe croquis comporte quelques variables. Les deux premières sont des constantesutiliséespourdéfinirlesbrochesd’entréeetdesortie.
//Constantes
constintbuttonPin=2;//numérodelabrochedu
bou-
ton-poussoir
constintledPin=13;//numérodelabrochede
laLED
Le groupe de variables suivant contient des informations sur l’état du bouton. Lavariable ledState reçoit la valeur HIGH de manière à ce que la LED soitalluméedès le départ ; la variablebuttonStateest laissée vide pour contenir
l’étatcourant;lavariablelastButtonStatecontientl’étatprécédentduboutonafindepouvoircomparercedernieravecl’étatcourant.
//Variables
intledState=HIGH;
intbuttonState;
intlastButtonState=LOW;
Enfin,desvariablesdetypelongsontdéclaréespourstockerlesdurées.Ellessontutilisées dans le timer pour contrôler le temps écoulé entre les lectures afin deprévenir des changements soudains de valeur telle que celle qui survient lors desrebonds.
//Variablesdetypelong
longlastDebounceTime=0;
longdebounceDelay=50;
La partie setup() est simple, puisqu’elle ne définit que les broches d’entrée et desortie.
voidsetup(){
pinMode(buttonPin,INPUT);
pinMode(ledPin,OUTPUT);
}
Àl’intérieurdelaboucle,lalecturedelabrocheduboutonesteffectuée,puisstockéedansunevariablenomméeicireading:
voidloop(){
//Litl’étatducommutateurdansunevariable
locale:
intreading=digitalRead(buttonPin);
reading est ensuite comparée à lastButtonState. Lors de la premièreexécution,lastButtonStatevautLOW,carc’estlavaleurquiluiestassignéelorsdesadéclarationendébutdecroquis.
Dansl’instructionif,lesymboledecomparaison!=estemployé.Cequisignifie:«sireadingestdifférentdelastButtonState,alors fairequelquechose.»
Dans l’affirmative, lastDebounceTime est mise à jour et une nouvellecomparaisonpourrasefairelorsduprochaintourdeboucle.
//Silecommutateurchange,enraisondubruitou
dela
pression:
if(reading!=lastButtonState){
//Redéfinitletimerdel’antirebond
lastDebounceTime=millis();
}
Si la valeur de reading demeure la même durant un délai supérieur au délaiantirebond de 50 ms, nous pouvons considérer que la valeur n’est pas erronée etqu’ellepeutêtretransmisedanslavariablebuttonState.
if((millis()-lastDebounceTime)>debounceDelay)
{
//quellequesoitlalecture,dureplus
longtemps
//queledélaidel’antirebond,ilprendalors
l’étatactuel:
buttonState=reading;
}
Cette valeur de confiance peut ensuite être utilisée pour déclencher directement laLED.Danscecas,sileboutonvautHIGH, leboutonestenfoncéet lamêmevaleurHIGHpeutêtreécritedanslaLEDpourl’allumer.
digitalWrite(ledPin,buttonState);
La valeur courante debuttonStateprend la valeur de lastButtonStatepourleprochaintourdeboucle.
lastButtonState=reading;}
Les boutons-poussoirs et leurs déclencheurs peuvent être plus oumoins fiables, enfonctiondelamanièredontilssontfabriqués.Enemployantunblocdecodecommecelui-ci,vousévitezleséventuellesincohérencesetobtenezdemeilleursrésultats.
UnboutonencoremeilleurLes boutons sont des objets très simples. Ils sont soit enfoncés, soit relâchés ;cependant,enobservant leurschangementsd’étateten les interprétant,vouspouvezréaliserunboutonplusintelligent.Ainsi,sivouspouvezdéterminerlemomentoùunboutonaétépressé,iln’estplusnécessairedelireconstammentsavaleur.Ilsuffitdeconnaîtrelemomentoùilchangerad’état.
Cette pratique constitue unemeilleure approche pour connecter votreArduino à unordinateur ; elle permet de ne recevoir que les données nécessaires plutôt que demonopoliserleportsérie.
RéaliserlecircuitStateChangeDetectionPourréalisercecircuit,ilfaut:
» UnArduinoUno
» Uneplatined’essai;
» Unbouton-poussoir
» Unerésistancede10kΩ
» UneLED
» Desstraps
En vous basant sur le schéma et le diagramme de circuit illustrés aux Figures 11-5et11-6,vouspouvezcréerunsimplecircuitcomprenantunboutonetuneLEDensortie. Le matériel de ce circuit est le même que celui utilisé pour le croquis duboutonbasique,maisici,enutilisantunnouveauprogramme,vouspouvezrendreceboutonbienplusintelligent.
FIGURE11-6LeschémaducircuitStateChangeDetection.
TerminezlecircuitetouvrezunnouveaucroquisArduino.
ChoisissezFichier->Exemples->02.Digital->StateChangeDetectiondepuislemenuArduinopourchargerlecroquisdansl’éditeur.
/*StateChangeDetection
Détectiondechangementd’état
Vousn’avezpasbesoindeconnaîtretoutletemps
l’état
d’entréeinput,mais
seulementquandl’entréepassed’unétatàl’autre.
Par
exemple,vousvoulez
savoirquandunboutonpassedeoffàon.C’estce
qu’on
appelleladétectionde
changementd’état.
Lecircuit:
*Bouton-poussoirreliéàlabroche2de+5V
*Résistancede10Kohmreliéeàlabroche2
*LEDreliéeàlabroche13(onutiliselaLED
intégrée
danslaplupartdes
cartesArduino)
crééle27Sept2005
modifiéle30Août2011
parTomIgoe
Cecodeexempleestdansledomainepublic.
http://arduino.cc/en/Tutorial/ButtonStateChange
*/
//Constantes
constintbuttonPin=2;//brocheàlaquelleest
atta-
chélebouton-poussoir
constintledPin=13;//brocheàlaquelleest
atta-
chéelaLED
//Variables
intbuttonPushCounter=0;//compteurdunombrede
pres-
sionssurlebouton
intbuttonState=0;//étatactueldubouton
intlastButtonState=0;//étatprécédentdu
bouton
voidsetup(){
//initialiselabrocheduboutoncommeuneentrée
pinMode(buttonPin,INPUT);
//initialiselaLEDcommeunesortie
pinMode(ledPin,OUTPUT);
//initialiselacommunicationsérie
Serial.begin(9600);
}
voidloop()
//litlabroched’entréedubouton-poussoir:
buttonState=digitalRead(buttonPin);
//comparebuttonStateàsonétatprécédent
if(buttonState!=lastButtonState){
//sil’étatachangé,incrémentelecompteur
if(buttonState==HIGH){
//sil’étatactuelestHIGHalorslebouton
//estpassédeoffàon:
buttonPushCounter++;
Serial.println(“on”);
Serial.print(“nombredepressionssurle
bouton:
“);
Serial.println(buttonPushCounter);
}
else{
//sil’étatactuelestLOWalorslebouton
//estpassédeonàoff:
Serial.println(“off”);
}
}
//enregistrel’étatactuelcommeétantledernier
état,
//pourleprochaintourdeboucle
lastButtonState=buttonState;
//ActivelaLEDtoutesles4pressionsdeboutonen
//vérifiantlemoduleducompteurdubouton-
poussoir.
//Lafonctionmodulo%donnelerestedela
divisionde
deuxnombres:
if(buttonPushCounter%4==0){
digitalWrite(ledPin,HIGH);
}else{
digitalWrite(ledPin,LOW);
}
}
Lancez la compilation pour vérifier votre code. La compilation devrait mettre enévidence toute erreur grammaticale. Si le croquis se compile correctement, cliquezsurTéléverserpourenvoyerlecroquisversvotrecarte.
Lorsqueletransfertesteffectué,observezlemoniteursériequidevraitvousindiquerchaquefoisqueleboutonestenfoncéourelâché,ainsiquelenombredefoisoùila
été pressé.De plus, la LEDdevrait s’illuminer à chaque fois que quatre pressionssontcomptées.
Siriennesepasse,essayezcequisuit:
» Revérifiezvotrecâblage.
» Assurez-vousquelesnumérosdebrochessontlesbons.
» Vérifiezlesautresconnexionsàlaplatined’essai.
ComprendrelecroquisStateChangeDetectionComme les broches de sortie et d’entrée ne changeront pas de numéro, elles sontdéclarées sous forme de constantes : la broche 2 pour le bouton-poussoir et labroche13pourlaLED.
//Constantes
constintbuttonPin=2;//brocheàlaquelleest
atta-
chélebouton-poussoir
constintledPin=13;//brocheàlaquelleest
atta-
chéelaLED
Des variables sont nécessaires pour garder une trace du comportement du bouton-poussoir.L’uned’entreellescorrespondàuncompteurquicomptabiliselenombredepressions du bouton, deux autres contiennent les états courant et précédent de cedernier.Elles sontemployéespourcontrôler lespressionssur leboutonafinque lesignalpassedeHIGHàLOWetdeLOWàHIGH.
//Variables
intbuttonPushCounter=0;//compteurdunombrede
pres-
sionssurlebouton
intbuttonState=0;//étatactueldubouton
intlastButtonState=0;//étatprécédentdu
bouton
Danslasectionsetup(),lesbrochesreçoiventrespectivementlesvaleursINPUTetOUTPUT. Le port série est ouvert afin de transmettre les changements d’état dubouton-poussoir.
voidsetup(){
//initialiselabrocheduboutoncommeune
entrée:
pinMode(buttonPin,INPUT);
//initialiselaLEDcommeunesortie:
pinMode(ledPin,OUTPUT);
//initialiselacommunicationensérie:
Serial.begin(9600);
La première commande de la boucle principale consiste à lire l’état du bouton-poussoir.
voidloop()
//litlabroched’entréedubouton-poussoir:
buttonState=digitalRead(buttonPin);
Si cet état n’est pas égal à lavaleurprécédente, cequi survient lorsque lebouton-poussoirestenfoncé,leprogrammeexécuteleblocd’instructionscontrôléparletestifquisuit.
//comparebuttonStateàsonétatprécédent
if(buttonState!=lastButtonState){
LaconditionsuivantevérifiesilavaleurboutonvautHIGHouLOW.SicettedernièrevautHIGH,alorslebouton-poussoirestenfoncé.
//sil’étatachangé,incrémentelecompteur
if(buttonState==HIGH){
//sil’étatactuelestHIGHalorslebouton
passede
offàon
Ce fragmentde code incrémente le compteur, puis afficheune ligne sur lemoniteursérieindiquantl’étatduboutonetlenombredepressionsqu’ilareçues.Lecompteurestincrémentélorsqueleboutonesttotalementenfoncé.
buttonPushCounter++;
Serial.println(“on”);
Serial.print(“Nombredepressionssurlebouton:
“);
Serial.println(buttonPushCounter);
}
Silebouton-poussoirpassedeHIGHàLOW,alorsleboutonestdansl’étatrelâchéetcechangementd’étatestaffichésurlemoniteursérie,commel’illustrelaFigure11-7.
FIGURE11-7LemoniteursérieaffichelesmessagesémisparlecroquisafindevoircequisepassedansvotreArduino.
else{
//sil’étatactuelestLOWalorslebouton
//estpassédeonàoff:
Serial.println(“off”);
}
}
Cefragmentdecodevouspermetdecliquersurlebouton-poussoirplutôtqued’avoiràmaintenirlapression.
Comme un changement est survenu, l’état courant devient le dernier état enpréparationduprochaintourdeboucle.
//Enregistrel’étatactuelcommeétantledernier
état,
//pourleprochaintourdeboucle
lastButtonState=buttonState;
À la fin de la boucle, une vérification est effectuée pour s’assurer que quatrepressionsonteulieu.Silenombretotaldepressionsmoduloquatreestégalàzéro,labrocheLEDprendlavaleurHIGH.Dans lecascontraire,elleprenddenouveau lavaleurLOW.
//ActivelaLEDtoutesles4pressionsdeboutonen
//cherchantlemoduloducompteurdubouton-
poussoir.
if(buttonPushCounter%4==0){
digitalWrite(ledPin,HIGH);
}else{
digitalWrite(ledPin,LOW);
}
}
Vouspourrezlégitimementvousdemander,«maispourquoicecroquisn’inclut-ilpasd’antirebond ? » alors que nous avons présenté cete technique dans la sectionprécédente. Les croquis des exemples Arduino sont conçus pour vous aider àcomprendre facilementdesprincipes individuelsafindevousarmerpour toutes lessituations. Cependant, combiner plusieurs techniques peut rendre les choses plusdifficilespourvous,ilesteneffetplussimpledecomprendrecommentlesélémentsfonctionnentunparun.
Il est possible de combiner plusieurs exemples pour bénéficier des avantages dechacun.Cetteapprochedépasselecadredecelivre,maisnousvousconseillonsdevousyentraînerenouvrantdeuxcroquiscôteàcôteencombinantleslignesuneàuneet en vérifiant à chaque fois qu’il n’y a pas de répétition de nom de variables. Leraccourci pour la compilation (Ctrl + R ou Cmd + R) vous sera très utile. Bonnechance!
AméliorerlescapteursLescapteursanalogiquespeuventêtre trèsprécis, ilsvouspermettentdemesurer laluminositéou lesdistances très finement.Mais ilspeuventdevenir tropsensiblesettressailliraumoindrechangement.Sic’estlebutrecherché,tantmieux.
Dans le cas contraire, vous souhaiterez sans doute lisser les résultats demanière àminimiser ces effets . Lisser vos résultats revient à en faire la moyenne afin de
minimisercesanomalies.AuChapitre17,vousapprendrezàreprésentercesrésultatssous forme de graphiques via Processing, ce qui vous sera d’une grande aide pourrepérerlesincohérences.
RéaliserlecircuitSmoothingDans cet exemple, vous tenterez de lisser les valeurs produites par un capteur delumière.
Pourréalisercecroquis,ilfaut:
» UnArduinoUno
» Uneplatined’essai
» UneLED
» Uncapteurdelumière
» Unerésistancede10kΩ
» Unerésistancede220ohms
» Desstraps
Le circuit suivant contient une résistance dépendante à la lumière (LDR) commel’illustrentlesFigures11-8et11-9.
ChoisissezFichier->Exemples->03.Analog->Smoothing pour charger le croquis etletéléverser.
Lecircuitindiquequ’unpotentiomètreestenvisageablepourlestests.C’estvrai,maisil est plus difficile de voir les effets d’un lissage avec un potentiomètre, car lefonctionnementdel’appareilgénèredéjàdesentréesanalogiqueslissées.
Les capteurs de luminosité, de distance et de mouvements sont beaucoup plussusceptiblesd’avoirbesoind’unlissage.
/*
Smoothing
Litdemanièrerépétéedansl’entréeanalogique,
calcule
unemoyenned’exé-
cutionetl’affichesurl’ordinateur.Gardedix
lectures
FIGURE11-9Leschémaducircuitd’uncapteurdeluminosité.
Crééle22Avril2007
ParDavidA.Mellis<[email protected]>
Modifiéle9Avril2012
parTomIgoe
http://www.arduino.cc/en/Tutorial/Smoothing
Cecodeexempleestdansledomainepublic.
*/
//Définitlenombred’exemplairesàconserver.Plus
le
nombreestélevé,
//plusilyauradelectureslissées,maisplus
lentement
lasortierépondra
//àl’entrée.L’utilisationd’uneconstanteàla
place
d’unevariablepermet
//d’utilisercettevaleurpourdéterminerlataille
du
tableaudelectures.
constintnumReadings=10;
intreadings[numReadings];//lecturesdel’entrée
ana-
logique
intindex=0;//indexdelalecture
en
cours
inttotal=0;//totalencours
intaverage=0;//moyenne
intinputPin=A0;
voidsetup()
{
//initialiselacommunicationensérieavec
l’ordina-
teur:
Serial.begin(9600);
//initialisetoutesleslecturesà0:
for(intthisReading=0;thisReading<
numReadings;
thisReading++)
readings[thisReading]=0;
}
voidloop(){
//soustraitladernièrelecture:
total=total-readings[index];
//litlecapteur:
readings[index]=analogRead(inputPin);
//ajoutelalectureautotal:
total=total+readings[index];
//avanceàlapositionsuivantedansletableau:
index=index+1;
//siarrivéenfindetableau...
if(index>=numReadings)
//...retouraudébut:
index=0;
//calculelamoyenne:
average=total/numReadings;
//l’envoieentantquechiffreASCII
Serial.println(average);
delay(1);//délaientreleslecturespourla
stabilité
}
Ce croquis garantit une lecture propre des informations fournies par le capteur. Lelissage est obtenu en réalisant la moyenne d’un certain nombre de lectures. Leprocessusdecalculdelamoyennepeutralentirlenombredelectureseffectuéesparl’Arduino à chaque seconde. Cependant, comme ce dernier est capable de lire lesinformations bien plus vite que vous, vous ne devrez pas remarquer de grandschangements.
ComprendrelecroquisSmoothingLe croquis commence par la déclaration des constantes et des variables. Oncommence par le nombre de lectures dont on fera la moyenne, déclarées dansnumReadingavecunevaleurde10.
constintnumReadings=10;
Lesquatrevariablessuivantessontutiliséespourgarder tracedesdernièresvaleurslues.Lesvaleursprovenantdescapteurssontajoutéesdansuntableau(ouuneliste)prenant ici le nom readings. Le nombre d’éléments contenus dans le tableaureadingsestdéfinientrecrochets.CommenumReadingsadéjàétédéclaré,ilpeut être utilisé pour définir la taille du tableau à 10 (éléments numérotés ou«indexés»de0à9).
intreadings[numReadings];//lecturesdansl’entrée
ana-
logique
Lavaleurcontenuedanslavariable index indique lenumérode la lecturecourante.Comme cette valeur est incrémentée à chaque lecture, elle est utilisée pour stockercettedernièreaubonendroitdansvotretableau.
intindex=0;//indexdelalectureencours
La variable total correspond au total cumulé incrémenté à chaque lecture. Lavariableaveragestockelavaleurdelamoyenneunefoisletotalcalculé.
inttotal=0;//totalencours
intaverage=0;//moyenne
LadernièrevariableestnomméeinputPin,ellecorrespondàlabrocheanalogiqueentraind’êtrelue.
intinputPin=A0;
Lors de la configuration, le port série est initialisé afin de vous transmettre leslecturesprovenantducapteurdeluminosité.
voidsetup()
{
//initialiselacommunicationensérieavec
l’ordina-
teur:
Serial.begin(9600);
Nousarrivonsensuiteàlaboucleforutiliséepourréinitialiserletableau.Danslaboucle,unenouvellevariablelocale(thisReading)estinitialiséeetmiseàzéro.Cettevariableestensuitecomparéeàlalongueurdutableau.Sielleestinférieureàlalongueurdecedernier,l’entréecorrespondantedutableauprendlavaleur0.
//initialisetoutesleslecturesà0:
for(intthisReading=0;thisReading<
numReadings;
thisReading++)
readings[thisReading]=0;
}
Cetyped’automatisationestparfaitpourcréerdestableaux.Unealternativeconsisteàécrirecesvaleurssousformedevariablesentières.C’estmoinsefficaceàlafoispourvousetpourl’Arduino.
La première ligne de code de la boucle principale soustrait au total les valeurscontenuesàl’indexcourantdutableau.
voidloop(){
//soustraitladernièrelecture:
total=total-readings[index];
LalignesuivanterécupèreunenouvellelectureviaanalogReadetlastockedansletableauàl’indexcourant,écrasantainsilavaleurprécédente.
//litdepuislecapteur:
readings[index]=analogRead(inputPin);
Cettelectureestalorsajoutéeautotal.
//ajoutelalectureautotal:
total=total+readings[index];
//avanceàlapositionsuivantedansletableau:
index=index+1;
Il est important de savoir si la fin du tableau est atteinte afin d’éviter que leprogrammeneboucleéternellement.Pourcela,ilsuffitd’unesimpleinstructionif:silavaleurdel’indexestsupérieureouégaleaunombredelectures,l’indexestremisà zéro.Ainsi, l’instructionifpermet de savoir si la valeur d’index est compriseentre0et9etdelaremettreàzérolorsqu’elleatteint10.
//sifindutableau...
if(index>=numReadings)
//...retouraudébut:
index=0;
Pourobtenir lamoyennede toutes lesvaleurscontenuesdans le tableau, le totalestsimplementdiviséparlenombredelectures.Cettemoyenneestensuiteaffichéesurlemoniteur série. Un délai d’unemilliseconde est ensuite ajouté à fin d’améliorer lastabilitédeslectures.
//calculelamoyenne:
average=total/numReadings;
//l’envoiecommechiffreASCII
Serial.println(average);
delay(1);//délaientreleslecturespourla
stabilité
}
L’utilisationdeprocéduressimplescommecelle-cipourlisservosrésultatsvousaideàéviteretàmieuxcontrôler lescomportementserratiquesquisurviennentdansvosprojets. En calculer la moyenne s’avère très utile si les lectures du capteur sontdirectementliéesàlasortie.
ÉtalonnerlesentréesConsidérezl’étalonnagedevotrecircuitcommeleréglaged’unthermostatdansvotreappartement.Vosradiateurssontcapablesdefournirunegammedetempératures,maisselon l’endroit où vous vous situez dans le monde, elles ne seront pas toutesappropriées.Siparexemplevousvivezsousunclimattempérévousn’aurezpeut-êtrerecours au chauffage que quelquesmois par an.Mais si vous vivez sous un climatfroid,vouslepousserezaumaximumchaquenuit.
EnétalonnantlescapteursdevotreprojetArduino,vouspouvezadaptercedernieràsalocalisation.Danscetexemple,vousallezapprendreàétalonnerlaluminosité.Lalumièrebiensûrest trèsversatile,selonquevousêtesà l’intérieurouà l’extérieur,dansunepiècebienéclairéeouà la lueurd’unebougie.Malgrécesvariations trèsimportantes,touscestypesdeluminositépeuventêtrecaptésetinterprétésparvotreArduino.Lecroquissuivantnousmontrelamanièred’adapteruncapteurdelumièreàsonenvironnement.
RéaliserlecircuitCalibrationPourcetexemple,réalisezlecircuitillustréauxFigures11-10et11-11pourétalonnervotrecapteurdeluminositéautomatiquement.
FIGURE11-11Leschémaducircuitducapteurdeluminosité.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» UneLED
» Uncapteurdelumière
» Unerésistancede10kΩ
» Unerésistancede220ohms
» Desstraps
RéaliserlecircuitetouvrezFichier->Exemples->03.Analog->Calibration.Lecodedecetexempleestlesuivant:
/*
Calibration
Démontreunetechniqued’étalonnagedel’entréed’un
capteur.Lalectureducapteurpendantlescinq
premières
secondesdel’exécutionducroquisdéfinitle
minimumet
lemaximumdesvaleursluessurlabrochedu
capteur.
Lecircuit:
*Capteuranalogique(potentiomètre)attachéà
l’entrée
analogique0
*LEDattachéeàlabrochenumérique9
créé29Oct2008
ParDavidAMellis
modifié30Août2011
parTomIgoe
http://arduino.cc/en/Tutorial/Calibration
Cecodeexempleestdansledomainepublic.
*/
//Constantes
constintsensorPin=A0;//brocheàlaquelleest
atta-
chéelecapteur
constintledPin=9;//brocheàlaquelleest
atta-
chélaLED
//Variables
intsensorValue=0;//valeurducapteur
intsensorMin=1023;//valeurminimumdu
capteur
intsensorMax=0;//valeurmaximumdu
capteur
voidsetup(){
//ActivelaLEDpoursignalerledébutde
l’étalon-
nage:
pinMode(13,OUTPUT);
digitalWrite(13,HIGH);
//Etalonnependantlescinqpremièressecondes
while(millis()<5000){
sensorValue=analogRead(sensorPin);
//Enregistrelavaleurmaximaleducapteur
if(sensorValue>sensorMax){
sensorMax=sensorValue;
}
//Enregistrelavaleurminimaleducapteur
if(sensorValue<sensorMin){
sensorMin=sensorValue;
}
}
//Signalelafindel’étalonnage
digitalWrite(13,LOW);
}
voidloop(){
//Litlecapteur
sensorValue=analogRead(sensorPin);
//Appliquel’étalonnageàlalectureducapteur
sensorValue=map(sensorValue,sensorMin,
sensorMax,0,
255);
//Silavaleurducapteurestendehorsdela
plagevue
pendantl’étalonnage
sensorValue=constrain(sensorValue,0,255);
//Faitvarierl’intensitédelaLEDenutilisant
la
valeurétalonnée
analogWrite(ledPin,sensorValue);
}
//FIN
Téléversez le croquis et laissez votre Arduino s’accoutumer au niveau de lumièreambiantdurantcinqsecondes.Ensuite,essayezdepasservosmainsau-dessus.Vousdevriezletrouverbeaucoupplusréactifquelorsd’unelectureanalogiquenormale.
ComprendrelecroquisCalibrationLa première partie du croquis définit toutes les constantes et les variables. LesconstantescorrespondentauxbrochesutiliséespourlecapteurdelumièreetpourlaLED.Notez que comme l’intensité de la LED varie, il vous faut utiliser la brochePWM.
//Constantes
constintsensorPin=A0;//brocheàlaquelleest
atta-
chéelecapteur
constintledPin=9;//brocheàlaquelleest
atta-
chélaLED
Les variables sont utilisées pour la valeur courante du capteur et pour ses valeursminimales etmaximales. Vous pouvez voir quesensorMin contient initialementunevaleurélevéealorsquesensorMaxcontientunevaleurfaible.
//variables:
intsensorValue=0;//lavaleurducapteur
intsensorMin=1023;//valeurminimaledu
capteur
intsensorMax=0;//valeurmaximaledu
capteur
Lors de la configuration,pinModedéfinit la broche 13 avec la valeurOUTPUT.PuisunappelàdigitalWriteassigne lavaleurHIGHà labroche13, cequiindiquequelecapteurestdansunephrased’étalonnage.
voidsetup(){
//ActivelaLEDpoursignalerledébutde
l’étalonnage
pinMode(13,OUTPUT);
digitalWrite(13,HIGH);
Durant les cinq premières secondes, le capteur est étalonné. Comme la fonctionmillis()commenceàcompterles(milli)secondesdèsledépartduprogramme,lamanièrelaplussimpledecomptercinqsecondesestd’utiliserunebouclewhile.Le
codesuivantvérifielavaleurretournéeparmillis()jusqu’àcequecettedernièrevaille5000(5secondes).
//Etalonne(calibre)pendantlescinqpremières
se-
condes
while(millis()<5000){
Lesaccoladesduvblocwhilecontiennenttoutlecoded’étalonnage.sensorValuestocke la lecturecouranteducapteur.Sicette lectureestsupérieureaumaximumouinférieureauminimum,lesvaleurssontmisesàjour.
sensorValue=analogRead(sensorPin);
//Enregistrelavaleurmaximaleducapteur
if(sensorValue>sensorMax){
sensorMax=sensorValue;
}//Findusous-blocif
//Enregistrelavaleurminimaleducapteur
if(sensorValue<sensorMin){
sensorMin=sensorValue;
}//Findusous-blocif
La broche de la LED reçoit alors la valeur LOW afin d’indiquer que la phased’étalonnageestterminée.
//Signalelafindel’étalonnage
digitalWrite(13,LOW);
}//Findublocwhile
Maintenantquel’intervalleestconnu,ilsuffitdel’appliqueràlaLEDdesortie.UnelectureestfaitedepuissensorPin,maissavaleurestcompriseentre0et1024.Elle doit donc être convertie dans l’intervalle de la LED compris entre 0 et 255.sensorValueestainsiconvertievialafonctionmap().
voidloop(){
//litlecapteur:
sensorValue=analogRead(sensorPin);
//appliquel’étalonnageàlalectureducapteur
sensorValue=map(sensorValue,sensorMin,
sensorMax,0,
255);
Il est toujours possible pour le capteur de lire des valeurs situées en dehors del’étalonnage, aussi la valeur sensorValue doit être restreinte via la fonctionconstrain().Ce qui signifie que toutes les valeurs en dehors de la plage 0-255 seront ignorées. L’étalonnage nous donne une bonne idée de l’éventail desvaleurs,aussitouteslesvaleursplusgrandesoupluspetitessontsusceptiblesd’êtredesanomalies.
//Silavaleurducapteuresthorsdelaplagevue
pen-
dantl’étalonnage
sensorValue=constrain(sensorValue,0,255);
Ilneresteplusqu’àmettreà jour laLEDavec lesvaleursconvertiesetcontraintesviauneécritureanalogiqueversledPin.
//faitvarierl’intensitédelaLEDenutilisant
la
valeurétalonnée:
analogWrite(ledPin,sensorValue);
}
Ce code devrait vous permettre d’obtenir unemeilleure représentation des valeursrenvoyées par votre capteur en fonction de l’environnement où vous vous situez.L’étalonnagen’estexécutéqu’uneseulefoislorsdudémarrageduprogramme.Silesrésultats ne vous semblent pas convaincants, il est préférable de le relancer oud’effectuer un étalonnage sur une plus longue période. L’étalonnage est conçu poursupprimerlebruitetlesvariationserratiquesdansvoslectures.
D
Chapitre12Chocs,sonsetultrasons
DANSCECHAPITRE
» Ensavoirplussurlescapteurs
» Comprendrelacomplexitédesentrées
» Payerlejusteprix
» Savoiroùutiliserlescapteurs
» Câblerquelquesexemples
ans mon expérience de l’enseignement, j’ai souvent remarqué que dès qu’unepersonneauneidée,elleessayedelamettreenœuvreenutilisantlematérielàsadispositionplutôtquedeseconcentrersurcequ’ellesouhaiteréaliser.Mêmesi
unArduinoestuneboîteàoutilsoffrantdenombreusespossibilitéspourrésoudrevosproblèmes,l’utilisationdubonoutilestlaclédusuccès.
SivousvousrendezsurunsiteconsacréàArduino,vousytrouverezfréquemmentuneliste de capteurs qui vous laissera parfois perplexe. Une autre approche répandueconsisteàrecherchersurleWebdesprojetssimilairesauvôtreafindevoircommentleursauteurslesontréalisés.Leseffortsetlessuccèsdesautrespeuvents’avérerunegrandesourced’inspirationetd’enseignement,maiscesressourcespeuventégalementvousplongerdansunabîmedevant le tropgrandnombredesolutionspossiblesquis’offrentàvous,certainesétantmêmesurdimensionnéesparrapportàvosbesoins.
Danscechapitre,vousallezapprendrecommentutiliserdenombreuxcapteurs,maiségalement–etc’estleplusimportant–pourquoilesutiliser.
Notez que tous les prix indiqués correspondent à l’achat d’un capteur à l’unité.Cependant,enfaisantjouerlaconcurrenceouenachetantdeslots,vousdevriezêtreenmesure de réaliser des économies importantes. Reportez-vous aux Chapitres 19et20pourobtenirdes informations sur lesboutiques intéressantespourcommencervosrecherches.
Simplifierlaréalisationd’unbouton
Lepremiercapteurdécritdanscelivre(Chapitre7)estsansdouteleplussimple:lebouton-poussoir. Il en existe de nombreux types ; les interrupteurs sont égalementinclus dans cette catégorie. En général, les interrupteurs restent dans la positionchoisie,maisilexistedesexceptionsàcetterègle.Ils’agitdesmicrocommutateursetboutons à bascule. D’un point de vue électrique, ils sont quasiment identiques auxautresboutons,leurdifférenceestprincipalementmécanique.
Si vous envisagez d’utiliser un bouton pour vos projets, tenez compte des pointssuivants:
» Lacomplexité:Danssaformelaplussimple,unbouton-poussoir
peutêtrecomposédedeuxcontactsmétalliquesquel’onrapproche
l’undel’autre.Danssaversionlapluscomplexe,ilpeuts’agird’un
ensembledecontactssoigneusementusinésquiestinsérédansun
boîtier.Unbouton-poussoir,commeceluidevotrekit,estparfait
pourlaplatined’essaietleprototypage.Cependant,s’ilétaitutilisé
danslavieréelle,ilnécessiteraituneprotection.Sivousdémontez
uneanciennemanettedeconsoledejeux,vousrisquezd’ytrouver
unbouton-poussoir,maissivousavezbesoind’unboutonplus
industriel,commelesboutonsd’arrêtd’urgence,l’interrupteurdoit
êtreplusgrand,plusrobusteetdevrapeut-êtremêmeêtrepourvu
d’unressortdegrandetaillepoursupporterlescoupsdepoings.
L’avantagedesboutons-poussoirsvientdufaitqu’ilsnesontjamais
vraimentcompliqués.
» Leprix:Lecoûtd’unbouton-poussoirpeutvarierdemanière
importanteenfonctiondelaqualitédesonboîtieretdesmatériaux
quilecomposent.Lesprixvontdequelquesdizainesdecentimes
pourunmicrocommutateurjusqu’àdépasserles100€pourunboutond’arrêtindustrieldanssonboîtier.Cependant,avecunpeu
d’imagination,ilesttoutàfaitpossibled’utiliserdesboutonspeu
cherspourlaplupartdesapplications.
» L’emplacement:Vouspouvezutiliserdesboutonspourdétecter
lespressionsintentionnelleseffectuéesparunêtrehumain.Les
œuvresdanslesmuséesnousfournissentunexcellentexemplede
l’emploideboutonspourdétecteretenregistrerdescontacts
intentionnels.Cesboutonstrèssimplesd’emploiontcolonisénotre
environnementetnouslesutilisonstouslesjourssansmêmey
penser.Parfois,ilpeuts’avérerplusintelligentd’employerune
méthodeplussubtile,maisdansledouteunboutonesttoujours
uneoptionsûre.
Pensezégalementàlamanièred’utiliserunboutonavecune
installationdéjàenplace.Parexemple,vouspourriezpeut-être
mesureravecquellefréquencelaportedevotremaisonest
ouverte.Enaccolantunmicrocommutateurtrèssensiblecontre
votreportelorsqu’elleestfermée,cedernierseraenmesurede
vousinformerchaquefoisquelaporteseraouverte.
DanslesChapitres7et11decelivre,vousavezapprisàcâbleruncircuitdebouton,puisàl’améliorer.Dansleprochainexempledecechapitre,vousallezvoircommentsimplifier le matériel nécessaire pour un bouton. En effet, en utilisant lesfonctionnalitéscachéesdevotreArduino,vouspouvezutiliserunboutonsansaucunautrematérielsupplémentaire.
ImplémenterlecroquisDigitalInputPullupLe circuit de base du bouton est relativement simple, mais il peut être rendu plussimple encore en utilisant une fonction peu connue de votremicrocontrôleur. Dansl’exempledebaseduboutonduChapitre7(voirlaFigure12-1)unerésistancepull-down est reliée à la masse afin que la broche du bouton reçoive la valeur LOW.Lorsqu’il est enfoncé, le bouton est connecté au 5 V et devient donc HIGH. Cecomportementpermetdelirel’étatduboutoncommes’ils’agissaitd’uneentrée.
FIGURE12-1Leschémaducircuitdubouton-poussoir.
Danslemicrocontrôleur,ilyaunerésistancepull-upinternequipeutêtreactivéeafindevousfournirconstammentunevaleurHIGH.Ainsi,lorsqu’unboutonconnectéàlaterre est pressé, il passe la broche à LOW. Cette réalisation offre la mêmefonctionnalité que l’exemple de base du chapitre 7, mais la logique est inversée :HIGHcorrespondàl’interrupteurouvertetLOWàl’interrupteurfermé.Lecâblageest simplifié, car nous n’avons plus besoin ici de câbles supplémentaires ni derésistanceexterne.
Pourréalisercetexemple,ilfaut:
» UnArduinoUno
» Uneplatined’essai
» Unbouton-poussoir
» UneLED(optionnelle)
» Desstraps
Réalisez le circuit illustré sur les Figures 12-1 et 12-2 pour tester cette nouvelleversionplussimpledubouton-poussoirutilisantlecroquisDigitalInputPullup.
FIGURE12-2Leschémaducircuitd’unbouton-poussoir.
La carte comporte déjà une LED reliée à la broche 13, mais si vous souhaitezaccentuerlasortie,uneLEDpeutêtreinséréedirectementdanslabroche13etdanssabrocheGNDvoisine.
Complétez le circuit et choisissez Fichier->Exemples->02.Digital->DigitalInputPulluppourrécupérerlecroquis.
Il ne vous aura pas échappé qu’une faute de frappe s’est insérée dans le nom dufichier tel que présenté dans le menu des exemples (DigitalIputPullup). Il estpossiblequecettefautedefrappesoitcorrigéequandvouslirezcelivre.
/*
InputPullupSerial
Cetexempleillustrel’utilisationde
pinMode(INPUT_PUL-
LUP).Lituneentréenumériquesurlabroche2et
affiche
lesrésultatssurlemoniteurensérie.
Lecircuit:
*Commutateurtemporaireattachéàlabroche2
*LEDintégréesurlabroche13
ContrairementàpinMode(INPUT),pasderésistance
pull-
downnécessaire.Unerésistanceinternede20K-ohm
està
5V.Cetteconfigurationfaitlireàl’entréeHIGH
quandle
commutateurestouvertetLOWquandilestfermé.
Crééle14Mars2012
parScottFitzgerald
http://www.arduino.cc/en/Tutorial/InputPullupSerial
Cecodeexempleestdansledomainepublic
*/
voidsetup(){
//Ouvrelaconnexionsérie
Serial.begin(9600);
//Configurelabroche2commeentréeetactivela
ré-
sistancepull-upinterne
pinMode(2,INPUT_PULLUP);
pinMode(13,OUTPUT);
}
voidloop(){
//litlavaleurdubouton-poussoirdansune
variable
intsensorVal=digitalRead(2);
//affichelavaleurdubouton-poussoir
Serial.println(sensorVal);
//Pullupsignifiequelalogiquedubouton-
poussoirest
inversée.
//IlvautHIGHquandilestouvertetLOWquand
ilest
pressé.
//Activelabroche13quandleboutonest
pressé,t
sedésactivesinon
if(sensorVal==HIGH){
digitalWrite(13,LOW);
}
else{
digitalWrite(13,HIGH);
}
}
ComprendrelecroquisDigitalInputPullupLecroquisDigitalInputPullupestsemblableaucroquisduboutonstandardàquelquesdifférences près. Dans la configuration, une communication série est initiée pourrendre compte de l’état du bouton, puis les modes des broches correspondant àl’entrée et à la sortie sont définis. La broche 2 correspond à la broche de votrebouton,maisaulieudeladéfinircommeINPUT,vousutiliseziciINPUT_PULLUP,cequivaactiverlarésistanceinternepull-up.Labroche13estdéfiniecommesortie.
voidsetup(){
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);
pinMode(13,OUTPUT);
}
Dans laboucleprincipale, lavaleurde labrochepull-upest lue,puisstockéedansunevariablenommée sensorVal.Savaleur est envoyéevers lemoniteur sériepourvousindiquerqu’ellevientd’êtrelue.
voidloop(){
//Litlavaleurdubouton-poussoirdansune
variable
intsensorVal=digitalRead(2);
//Affichelavaleurdubouton-poussoir
Serial.println(sensorVal);
Mais comme ici la logique est inversée, vous devez également inverser votreinstruction if pour obtenir un comportement correct.LavaleurHIGHcorrespond àouvertetlavaleurLOWàfermé.Àl’intérieurdel’instructionif,vouspouvezécriretoutes lesactionsà réaliser.Danscecas, laLEDestéteinte,valantLOWàchaquefoisquelabrocheduboutonestouverte(HIGH).
if(sensorVal==HIGH){
digitalWrite(13,LOW);
}
else{
digitalWrite(13,HIGH);
}
}
Cetteméthodeestidéalepourlessituationsdanslesquellesvousnedisposezpasdesuffisammentdecomposants.Ellevouspermetégalementderéaliserun interrupteuravec seulement deux fils. Cette fonctionnalité peut être employée avec toutes lesbrochesnumériques,maisuniquementpourlesentrées.
RetouraupaysdescapteurspiézoDansleChapitre8,vousavezapprisàréaliserdessonsenutilisantunbuzzerpiézo.Vousdevezsavoirqu’ilestpossibled’utilisercemêmecomposantentantqu’entrée.Pourcréerunsonàpartirdupiézo,vousavezfaitpasseruncourantàtraverspourlefairevibrer.Ils’ensuitdoncquesivousfaitesvibrercepiézo,vousallezgénérerune
faiblequantitédecourantélectrique.Cedispositifestgénéralementappelécapteurdechoc dans lamesure où il est utilisé pourmesurer les vibrations de la surface surlaquelleilestfixé.
Lespiézosvariententaille,cettedernièredéterminel’amplitudedesvibrationsqu’ilspeuvent détecter. Les petits piézos sont extrêmement sensibles aux vibrations, lemoindrechoclesferaréagiraumaximumdeleurcapacité.Lespiézosplusgrandontuneportéeplusvastemaisnécessitentplusdevibrationspourfourniruneréponse.Ilexiste des capteurs piézos faits spécialement pour détecter les déformations, lesvibrationsouleschocs.Leurcoûtestsupérieuràceluid’unélémentpiézoclassique,mais ils sont généralement composés d’un film flexible qui les rend beaucoup plusrobustes.
Pourutiliserunpiézo,tenezcomptedespointssuivants:
» Lacomplexité:Lespiézossontrelativementsimplesàcâbler;ils
nenécessitentqu’unerésistancepourfonctionnerdansuncircuit.
Lematérielcomposantlepiézolui-mêmeestégalement
relativementsimpleetnenécessitequetrèspeudetravaildevotre
part.Commelamoitiésupérieureestcomposéed’unecéramique
fragile,ilestsouventprotégéparunboîtierenplastique,cequirend
sonmontageplussimpleetévitetoutcontactdirectaveclesjoints
desoudurefragilesàlasurfacedupiézo.
» Leprix:Lesélémentspiézosontpeucoûteux,leurprixvade0,50€pourlesmoinschersà15€pourlesbuzzerspiézodehautepuissance.Entantqu’entrée,unélémentpiézoestpréférableàun
buzzerpiézo.Lesélémentspiézodisposentgénéralementd’une
basepluslargecequilesrendplusadaptésàlacréationde
capteursdechocs,carilsfournissentunesurfacedecontactplus
grande.Voustrouverezpeut-êtreplussimpledevousprocurervos
acheterchezundétaillantoùvouspourrezvoirlesproduitset
apprécierleursdifférentesformes,styleetprotections.
» L’emplacement:Commeilssonttrèsfragiles,lescapteursde
chocnesontgénéralementpasutiliséspouruncontactdirect.Ilest
préférabledelesfixersurunesurfacerigideenboisouenplastique
ouenmétaletdelaisseràcettedernièrelesoind’encaisserles
chocs.Uncapteurdechocpourraêtrefixésurunescalieroffrant
ainsiunesourced’informationàlafoisfiable,discrèteetnon
intrusive.
Vous pouvez utiliser des piézos pour détecter les vibrations, ou demanière moinsdirectedansunebatterie faitemaison.Les exemplesde cette sectionvousmontrentcommentcâblervospropresensemblesdecapteurspiézos.
ImplémenterlecroquisKnockLescapteursdechocutilisentunélémentpiézopourmesurerlesvibrations.Lorsqu’unpiézovibre, il produituncourantquipeut être interprétéparvotreArduinocommes’il s’agissait d’un signal analogique.Les élémentspiézo sontgénéralementutiliséspour réaliser des alarmes qui à l’inverse, entrent en vibration lorsqu’elles sonttraverséesparuncourant.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Unpiézo
» Unerésistanced’1MΩ
» Desstraps
En vous basant sur le schéma et les Figures 12-3 et 12-4, assemblez le circuit ducapteur.LematérieldececircuitestsimilaireàceluiducroquisdebuzzerpiézoduChapitre8, à ceci près qu’il devient possible d’utiliser ici l’élément piézo en tantqu’entrée.
Réalisez le circuit et chargez le croquis Arduino avec Fichier->Exemples->06.Sensors->Knock.
/*KnockSensor
Cecroquisexploiteunélémentpiézopourdétecter
unson
vibrant.
Illitunebrocheanalogiqueetcomparelerésultat
pour
définirunseuil.
Silerésultatestsupérieurauseuil,ilécritle
“knock”dansleportsérie,
etallumelaLEDdelabroche13.
Lecircuit:
*connexionpositivedupiézoreliéeàlabroche
analo-
gique0
*connexionnégativedupiézo
*résistancede1megaohmreliéeenparallèleavec
le
piézo
FIGURE12-3Lecircuitdecapteurdechoc.
FIGURE12-4Leschémaducircuitdecapteurdechoc.
http://www.arduino.cc/en/Tutorial/Knock
crééle25Mars2007parDavidCuartielles
modifiéle30Août2011parTomIgoe
Cecodeexempleestdansledomainepublic.
*/
//Constantes
constintledPin=13;//LEDreliéeàlabro-
chenumérique13
constintknockSensor=A0;//Piézoreliéàla
bro-
cheanalogique0
constintthreshold=100;//Valeurduseuilpour
dé-
terminersileson
détec-
téestunchocounon
//Variables
intsensorReading=0;//variablepourstocker
la
//valeurluedelabroche
du
capteur
intledState=LOW;//variablepourstocker
le
dernierétatdeLED,
//pourpasserlalumière
voidsetup(){
pinMode(ledPin,OUTPUT);//déclareledPincomme
OUTPUT
Serial.begin(9600);//utiliseleportsérie
}
voidloop(){
//Litlecapteuretstockelavaleurdans
sensorRea-
ding:
sensorReading=analogRead(knockSensor);
//Silalectureducapteurestsupérieureau
seuil:
if(sensorReading>=threshold){
//Changerl’étatdeledPin:
ledState=!ledState;
//MettreàjourlabrocheLEDelle-même:
digitalWrite(ledPin,ledState);
//Renvoyer“Knock!”àl’ordinateur,suivid’un
saut
deligne
Serial.println(“Knock!”);
}
delay(100);//Délaipouréviterundébordementdu
tam-
ponmémoire
}
UtilisezleboutonVérifierpourvérifierlecode.Celametensurbrillancerougetoutesles erreurs grammaticales. Si le croquis se compile correctement, cliquez surTéléverserpoursurvotrecarte.
Lorsquelechargementestachevé,ouvrezlemoniteursérieetdonnezunboncoupsurlasurfaceoùse trouvevotrepiézo.Sicelafonctionne,vousdevrezvoir«Knock»s’affichersurvotremoniteursériependantquelaLEDchange.
Siriennesepasse,revérifiezvoscâblages:
» Assurez-vousd’utiliserlebonnumérodebroche.
» Vérifiezlesconnexionssurlaplatined’essai.
ComprendrelecroquisKnockLes premières déclarations sont des constantes : le numéro de la broche LED, lenumérodelabrocheducapteurdechocetlavaleurdeseuildechoc.
//Constantes
constintledPin=13;
constintknockSensor=A0;
constintthreshold=100;
Deuxvaleurs sont amenées à changer : lavaleur couranteducapteur et l’étatde laLED.Nousleurprévoyonsdoncdesvariables.
//Variables
intsensorReading=0;
intledState=LOW;
Danslafonctiondeconfiguration,labrochedelaLEDestdéfinieentantquesortieetleportsérieestouvertpourlacommunication.
voidsetup(){
pinMode(ledPin,OUTPUT);//déclareledPincomme
OUTPUT
Serial.begin(9600);//utiliseleportsérie
}
Lapremièrelignedelafonctionprincipaledebouclelitlavaleuranalogiquedepuislabrocheducapteurdechoc.
voidloop(){
//Litlecapteuretlestockedanslavariable
sensor-
Reading:
sensorReading=analogRead(knockSensor);
Cettevaleurestcomparéeàlavaleurduseuil.
//Silalectureducapteurestsupérieureau
seuil:
if(sensorReading>=threshold){
SilavaleurdesensorReadingestsupérieureouégaleàlavaleurdeseuil,l’étatdelaLEDestforcéde0à1enutilisantlesymboleNOT(!).Lesymbole!danscecas est utilisé pour retourner la valeur booléenne opposée à celle que contientleadStateàcemoment.Commevouslesavez,lesbooléensvalentsoit1soit0(vraioufaux). Ilenestdemêmepour lesvaleurspossiblesdeleadState.Cettelignedecodepourraitselirecomme«rendreleadStateégaleàlavaleurinversedecellequ’ellepossède.»
//Inverserl’étatdeledPin:
ledState=!ledState;
La valeur de leadState est ensuite envoyée vers la broche de la LED viadigitalWrite.LafonctiondigitalWriteinterprètelavaleur0commeLOWet1commeHIGH.
//MettreàjourlabrocheLED
digitalWrite(ledPin,ledState);
Enfin,lemot«Knock»estenvoyésurleportsériesuivid’uncourtdélaidestinéàaméliorerlastabilité.
//Renvoyer“Knock!”àl’ordinateur
Serial.println(“Knock!”);
}
delay(100);//délaipouréviterundébordementdu
tam-
ponmémoire
}
Capteursdepression,deforceetdecharge
Troiscapteursapparemmentrelativementprochessontsouventconfondus:pression,forceetcharge.Enfait,lecomportementdecestroiscapteurs,etlesdonnéesqu’ilsfournissent, sont extrêmement différents. Aussi, il est important de connaître cesdifférencespourchoisir lecapteuradaptéàchaquebesoin.Danscettesection,nousdéfinirons chacunde ces trois capteurs et nousverrons lorsqu’il est important d’enutiliserunplutôtquel’autre.
Pourvosprojets,tenezcomptedespointssuivants:
» Lacomplexité:Commevousvousendoutez,lacomplexité
augmenteenfonctiondelaprécisionrecherchée:
• Lesplaquettesdepressionsontconçuespourdétecterune
pressionappliquéesurunesurface.Ilenexisteunegrande
variétévariantenqualitéetenprécision.
Lesplaquettesdepressionlesplussimplessontsouventmal
nomméestantelless’apparententàdegrosinterrupteurs.Il
s’agitenfaitdedeuxcouchesdefeuillesséparéesparune
couchedemousseavecdestrous.Lorsquelamousseest
écrasée,lescontactsmétalliquessetouchentetfermentle
circuit.Celaimpliquequecetypedecapteurestcapablede
détecterlaprésenced’unpoidssuffisantpourenfoncerassez
lamousse.
• Pourplusdeprécisions,vouspouvezutiliseruncapteurde
force.Maisbienquelecapteurdeforcesoitsuffisamment
précispourdétecterunchangementdepoids,ilnel’estpas
encoreassezpourfournirunemesureprécise.Cescapteurs
seprésententgénéralementsousformederésistances
souples.Leurrésistancechangeenproportiondelaforcequi
leurestappliquée.Larésistanceelle-mêmesetrouvesurune
carteimpriméeflexibleetbienquecettedernièresoittrès
robuste,laprotégerd’uncontactdirectestunebonneidée
quipermetdeprévenirlesdéchirures.
• Silesplaquettesdepressionsontàl’unedesextrémitésdu
spectre,del’autresetrouventlescapteursdecharge.Ils
fonctionnentàlamanièredescapteursdeforce,en
changeantderésistanceselonladéformation.Dansla
plupartdescas,mecapteurdechargeestfixéàunepièce
rigidedemétal.Cetypedecapteurdélivreunsignalfaiblequi
nécessitefréquemmentuncircuitd’amplificationconnusous
lenomdepontWheatstone.Intégrercetypedecapteurest
pluscomplexe,maisvouspouveztrouverdesdocumentssur
Internetquivousguideronttoutaulongduprocessus.
» Leprix:Lecoûtdecescapteursestrelativementfaible,etce
mêmepourlesplussensiblesd’entreeux.Desplaquettesde
pressionbonmarchévouscoûterontautourde2€,etcomptez
environ12€pourl’ensembledesélémentsnécessairesaumontage.
Leprixd’uncapteurdeforcesesitueenvironentre6et20€,maisil
couvreunezonepluspetitequelesplaquettes,ilvousenfaudra
doncpeut-êtreplusieurspourcouvrirunegrandesurface.Les
capteursdechargesontégalementassezpeucoûteux,comptez
environ8€.Ilpeuts’yajouteruncoûtsupplémentaireliéautemps
nécessaireàlaconceptionetàlaréalisationducircuit.
» L’emplacement:Levraidéfiavectouscescapteursrésidedans
leurprotection.Danslecasdesplaquettesdepressionetdes
résistancessensiblesàlaforce,ilestconseilléd’ajouterunebonne
couchedemoussederembourragesurlecôtéquirecevralechoc.
Enfonctiondeladensitédelamousse,ilfaudraarbitrerentrela
protectionducapteuretsacapacitéàdélivrerunebonne
information.Endessousducapteur,ilfaudraajouterunebase
solidepermettantdes’appuyerdessusmais,qu’ils’agissedusolou
delasurfacedecontreplaqué,pensezàajoutersurcettesurface
unecouchedemoussesurlafaceextérieureafindeprotégerle
capteur.Pourlafinition,unvinylesoupled’ameublementconstitue
uneexcellenteoption.Sivousvoulezquedesgensmarchentsurle
capteur,ajoutezpar-dessusuneplanchedeboispourprendrela
moussepriseensandwichetmieuxrépartirlescharges.Les
capteursdecharge,quantàeux,doiventêtreplacésencontact
directavecunesurfacerigide.Ilvousfaudraparfoisquelquesessais
pourplacervotrecapteuraubonendroit,voireparfoismêmeen
utiliserplusieurs,pourcalculerunemoyenne.
Vous avez choisi votre capteur ?Maintenant vous devez comprendre lamanière del’utiliser:
» Lesplaquettesdepressionsontdescircuitsextrêmementsimples,
identiquesàdesboutons-poussoirs.Lematérield’uneplaquettede
pressionestégalementtrèssimple,sisimplemêmequevous
pouvezenréaliserunevous-mêmeenutilisantuneplaquede
mousseentredeuxcontactsd’aluminium,uneplaqueprotectriceet
deuxfils.Unealternativeauxplaquesmétalliquesconsisteàutiliser
untissuouunfilmétalliquequiestplussouple.
» Lescapteursdeforcesontégalementrelativementsimplesàutiliser
etpeuventprendrelaplaced’autrescapteursanalogiques,capteur
deluminositéoudetempératureparexemple,surlescircuits
Arduino.Laplagedeforcedétectablepeutvarier,maisdanstousles
cas,vousdevreznormalisercetteforcepoursimplifierlecode.
» Lescapteursdechargesontprobablementlespluscomplexes
lorsqu’ilssontdoiventserviràobtenirunemesurefine.Ils
nécessitentunecircuiteriesupplémentaireainsiqu’unamplificateur
afinquel’Arduinopuisseprendreencompteleurschangements
rapidesderésistance.Cesujetdépasselecadredecelivre.Sivous
voulezensavoirplus,consultezleweb.
Lescapteursdeforce,toutcommelesautresrésistancesvariables,peuventfacilementprendrelaplacedesrésistancessensiblesàlalumièreetdespotentiomètres.
Danslaprochainesection,nousallonsvoirunexemplegrâceauquelvousapprendrezàutiliserdesrésistancessensiblesàlaforcepourcréerunclavierdepianoaveclecroquistoneKeyboard.
RéaliserlecircuittoneKeyboardVouspourriez penser qu’unbouton-poussoir est une entrée parfaite pour un clavier,mais les résistances sensibles à la force offrent beaucoup plus de sensibilité autoucher. Au lieu de détecter une simple pression, vous pouvez détecter l’intensitéappliquéeauxtouchescommes’ils’agissaitd’unpianotraditionnel.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Troisrésistancessensiblesàlaforce
» Troisrésistancesde10kΩ
» Unerésistancede100Ω
» Unélémentpiézo
» Desstraps
EnutilisantleschémaetleesFigures12-5et12-6,disposezlesrésistancessensiblesàlaforceetlepiézopourréaliservotrepropreclavier.
Réalisez le circuit et ouvrez un nouveau croquis Arduino. Choisissez Fichier->Exemples->02.Digital->toneKeyBoard dans le menu Arduino pour charger lecroquis.
/*
toneKeyboard
Joueunmorceauquichangeenfonctiond’un
changement
d’entréeanalogique
Circuit:
*3résistancessensiblesàlaforcede+5V
d’analogique
de0à5
*3résistancesde10Kd’analogiquede0à5
*unhaut-parleurde8-ohmssurlabrochenumérique
8
Crééle21Janvier2010
Modifiéle9Avril2012
FIGURE12-5Unschémaducircuitdemini-clavier.
FIGURE12-6LeschémaducircuittoneKeyBoard.
parTomIgoe
Cecodeexempleestdansledomainepublic.
http://arduino.cc/en/Tutorial/Tone3
*/
#include“pitches.h”
constintthreshold=10;//Lectureminimaledu
capteur
pourgénérerunenote
//Notesàjouer,correspondantauxtroiscapteurs:
intnotes[]={NOTE_A4,NOTE_B4,NOTE_C3};
voidsetup(){
}
voidloop(){
for(intthisSensor=0;thisSensor<3;
thisSensor++)
{
//Récupèrelalectured’uncapteur:
intsensorReading=analogRead(thisSensor);
//Silecapteurestpresséassezfort:
if(sensorReading>threshold){
//Litlanotecorrespondantàcecapteur:
tone(8,notes[thisSensor],20);
}
}
}
Remarquezqu’ilyatroisblocsd’instructionsimbriquésici:lecorpsdelafonctionloop(),lepremierblocconditionnelforetunautreblocconditionnel.
UtilisezleboutonVérifierpourvérifiervotrecode.Lecompilateurdevraitsurlignertoute erreur grammaticale en rouge le cas échéant. Si le croquis se compilecorrectement,cliquezsurTéléverserpourenvoyerlecroquissurvotrecarte.Lorsquele transfert est effectué, testez les touches pour vous assurer de leur bonfonctionnement.Vousêtesprêtàjouer.
Siriennesepasse,revérifiezvoscâblages:
» Assurez-vousd’utiliserlesbonsnumérosdebroches.
» Vérifiezlesconnexionssurlaplatined’essai.
ComprendrelecroquistoneKeyBoardLe croquis toneKeyBoardutilise lamême table de notes que le croquisMelodyduchapitre8.Lapremièreligneinsèrelecontenudufichierdedéfinitionspitches.hqu’ilvousfaudraouvrirdansunongletséparédeceluiducroquisprincipal.
Notezquecesontdesguillemetsdroitsqu’ilfaututiliser.
#include«pitches.h»
Unseuilfaibleégalà10(suruneplagede1024)estdéfinipouréliminerlesrésultatstropfaiblesprovenantdubruitdefond.
constintthreshold=10;
Lesnotesdechaquecapteursontstockéesdansuntableaudontlesvaleurs(0,1et2)correspondentauxnumérosdesentréesdesbrochesanalogiques(A0,A1etA2).Vouspouvez modifier la valeur des notes contenues dans ce tableau manuellement enutilisant la table de référence du fichier des notes à jouer correspondant aux troiscapteurs:
intnotes[]={
NOTE_A4,NOTE_B4,NOTE_C3
};
Danslaconfiguration,iln’yarienàdéfinir,carlesbrochesanalogiquesd’entréesontdéfiniespardéfaut.
voidsetup(){}
Danslaboucleprincipale,unebouclefor()estparcouruepourlesnombresallantde0à2.
voidloop(){
for(intthisSensor=0;thisSensor<3;
thisSensor++)
{
Lavaleurdelaboucleforestutiliséeentantquenumérodebroche,etcettevaleureststockéetemporairementdanssensorReading.
//Récupèrelalectured’uncapteur:
intsensorReading=analogRead(thisSensor);
Silavaleurlueestplusgrandequeleseuil,lanotecorrespondantaucapteurestjouée
//Silecapteurestpresséassezfort:
if(sensorReading>threshold){
//Litlanotecorrespondantàcecapteur:
tone(8,notes[thisSensor],20);
}
}
}
Commelaboucles’effectuetrèsrapidement,lesdélaisdelecturedescapteursnesontpasperceptibles.
Captiver!Les capteurs capacitifs détectent les modifications des champs électromagnétiques.Toutes choses vivantes ont un champ électromagnétique – vous y compris. Lescapteurs capacitifs sont extrêmement utiles car ils sont en mesure de détecter uncontacthumaintoutenignorant lesautresfacteursenvironnementaux.Vousvousêtesprobablement déjà familiarisé avec des capteurs capacitifs haut de gamme car cesderniers sont présents sur la plupart des smartphones. Il existe des kits ArduinointégrantdescapteurscapacitifstelsqueCapacitiveTouchKeypadsquevouspourrezbrancher facilement.Mais il est tout aussi simple de réaliser votre propre capteurcapacitifavecunArduinoetuneantenne.
Lorsdevotreplanification,tenezcomptedespointssuivants:
» Lacomplexité:Commeseuleuneantenneestrequise,vous
pouvezêtretrèscréatifencequiconcernesanatureetson
emplacement.Desfilsdecuivresuffisentpouruncapteursimple.
Unmorceaudecuivresetransformesoudainementencontact
tactile,etvousn’avezplusbesoindebouton-poussoir.Vouspouvez
mêmemettrel’antenneencontactavecàunobjetmétalliqueplus
grandtelqu’unelampepourlatransformerinstantanémenten
lampetactile.
Sil’antenneestfaiteàpartird’unebobinedefiloud’unmorceau
d’aluminium,vouspouvezallerau-delàdelasimpledétection
tactile,enréalisantundétecteurconnusouslenomdecapteur
capacitifprojeté.Vouspouvezainsidétecterlesmainsd’une
personneàplusieurscentimètresdel’antenne,cequicréede
nouvellespossibilitésetpermetdemasquerlescapteursderrière
d’autresmatériaux.Cescapteurscapacitifsdiscretssontdenos
jourscommunémentrencontréssurdenombreuxappareils
électroniquesdanslebutdesupprimerlesboutonsphysiquesetde
donnerunaspectplusélégantauxproduits.
Celapermetégalementdeprotégerl’électroniqueenlaplaçantà
l’abridematériauxrésistants.
Lescapteurscapacitifstactilessontsimplesàréaliser.Lavraie
difficultéseposeaveclescapteursprojetéspourlesquelsilfaut
ajusterlaportéeduchamp.Lameilleurefaçond’yparvenirpasse
parl’expérimentationetlestests.
» Leprix:Unkitcapacitiftactileconçupourunetâchespécifique
coûtede15à20€.Ilremplitbiensonoffice,maisrestelimitéence
quiconcernelaconceptiondel’interface.Ilexisteuneconsolede
gestiondecapteurscapacitifsproduiteparSparkfunquipour
environ10€vouspermetdecontrôlerjusqu’à12capteurs
capacitifs.Vousdevrezréaliserlasurfacetactilevous-même,mais
vousserezlibredecréeruneinterfacequiconvientexactementà
votreprojet.
L’optionlamoinscoûteuseconsisteàutiliserlabibliothèque
CapSensed’Arduino(citéedansl’encadré).Ellevouspermetdecréer
uncapteurcapacitifavecuniquementunboutdefilservant
d’antenne!
» L’emplacement:Lescapteurscapacitifstactilesfonctionnentavec
touslesmétauxconducteurs.Ainsi,sivousêtesenmesurede
concevoirunecoqueélégante,ilnevousresteraplusqu’àla
connecteràvotreArduino.Sivousrecherchezquelquechosede
plusdiscret,testezdifférentstypesdeboisoudeplastiquequi
masquerontvotreantennemétallique.Unefinecouchede
contreplaquépermetaumétald’êtreprochedelasurfaceetde
déclencherlecapteur.Enrecouvrantl’antenneavecunesurfacenon
conductrice,vousladotezd’unepropriétéquasimentmagique,celle
desurprendrelesutilisateursquisedemanderontcommentle
dispositiffonctionne.
Le moyen le plus simple pour réaliser un capteur capacitif est d’utiliser labibliothèqueCapSensedePaulBadger.EnutilisantCapSense,vouspouveztoutàfaitfaire disparaître tous les commutateursmécaniques pour les remplacer par de trèsrobustescapteurstactilescapacitifsouencoredesdétecteursdeprésencecapacitifs.
LABIBLIOTHÈQUECAPSENSE
LabibliothèqueCapSenseestdisponiblesurGitHub.GitHubestundépôten
lignedelogicielsquigèrelesdifférentesversionsetvouspermetdevoirquia
misàjourlelogicieletquellessontlesmodificationsquiontétéfaites.C’estun
excellentsystèmedepartageetdecollaborationdédiéaucode.Vouspouvez
retrouverlaplateformeArduinosurGitHub.Pourcela:
1. Rendez-vous avec votre navigateur sur la page GitHub de
CapSense à l’adresse :
https://github.com/moderndevice/CapSense.
2. SurlapagedeCapSense,cliquezsurleboutonDownloadZip.
Ceboutonal’imaged’unnuageetlemotZIP.
Cetteopérationva télécharger ladernièreversionde labibliothèque
dansvotredossierdetéléchargementoutoutautredossierdevotre
choix.
3. Renommezledossier«CapSense.»
Àl’intérieurdecedernier,vousdevriezvoirunbonnombredefichiers
dont les noms se terminent par .h et .cpp ainsi qu’un dossier «
Examples».
4. Déplacez le dossier complet vers votre répertoire de
bibliothèquesArduino.
Ce dossier devrait correspondre à celui où vos croquis sont
enregistrés, par exemple <votreNom>/ Documents/Arduino/libraries. Sivousnedisposezpasd’unrépertoiredebibliothèque,créez-enun.
Vous pouvez retrouver le répertoire de sauvegarde Arduino en
choisissantArduino→PréférencesdepuislabarredemenusArduino.
LorsquelabibliothèqueCapSensesetrouvedanscedossier,ellesera
disponibleauprochaindémarragedel’atelierArduino.
5. Lancez ou relancez Arduino, puis allez sur Croquis→Importer
biliothèquesvialemenuArduino.
RecherchezCapSenseparmilesbibliothèquesproposées.Siellenes’y
trouvepas,vérifiezlesnomsdevosbibliothèquesetrelancezArduino.
ImplémenterlecroquisCapPinSketchPourceprojet,ilfaut:
» UnArduinoUno
» Unfild’antenne
» Despincescrocodiles(optionnelles)
Comme vous pouvez le voir sur la photo de la Figure 12-7, cela nécessite peu detravail.Vous pouvez vous contenter d’un simple fil connecté sur la broche 5, vouspouvez ensuite agrandir le dispositif en le connectant sur n’importe quelle autresurface conductrice. Les pinces crocodiles permettent de maintenir facilementdifférentstypesd’antennes.
Si la bibliothèque CapSense est reconnue, le dossier exemple à l’intérieur devraitl’être également. Réalisez le circuit et choisissez Fichier->Exemples->CapSense->Exemples->CapPinSketchdanslemenuArduinoafindechargerlecroquis.
FIGURE12-7Unephotod’uncapteurcapacitifminimaliste.
#include<CapPin.h>
/*CapPinSketch
*CapacitiveLibraryCapPinDemoSketch
*PaulBadger2011
*Cetteclasseutiliselesrésistancespull-up
intégrées
quilisentlacapacité
*d’unebroche.Labrocheestdéfiniecommeentrée
etle
pullupestactivé,
*Letourdebouclecorrespondaupassagedela
brocheà
HIGH.
*LaméthodereadPinestrapideetpeutêtrelue
1000
foisenmoinsde10ms.
*Enlisantlabrochedemanièrerépétée,vous
pouvez
capter“lapressiondela
*main”àpetiteéchelleavecunpetitcapteur.Un
cap-
teurplusgrand(une
*piècedemétal)retourneradesvaleursplus
grandeset
pourracapterdeplus
*loin.Pouruneméthodeplussensible,voirla
méthode
CapTouch.
*Insérezunfilavecousansunmorceaud’aluminium
dans
labroche.
*Couvrezlecapteurd’aluminium,depapieroutout
autre
isolant
*pouréviterquel’utilisateurtouchedirectement
la
broche.
*/
CapPincPin_5=CapPin(5);//litlabroche5
floatsmoothed;
voidsetup()
{
Serial.begin(115200);
Serial.println(“start”);
//slider_2_7.calibrateSlider();
}
voidloop()
{
delay(1);
longtotal1=0;
longstart=millis();
longtotal=cPin_5.readPin(2000);
//Simplefiltrepouréliminertoutvacillement
//Changezleparamètre(0estmin,.99estmax)
smoothed=smooth(total,.8,smoothed);
Serial.print(millis()-start);//temps
d’exécution
enmS
Serial.print(“\t”);
Serial.print(total);//totaldela
rangée
Serial.print(“\t”);
Serial.println((int)smoothed);//lissé
delay(5);
}
//simplefiltre
//requiertderecyclerlasortiedansleparamètre
“smoothedVal”
intsmooth(intdata,floatfilterVal,float
smoothedVal){
if(filterVal>1){//vérifiesilesparamètres
sont
danslaplagedevaleurs
filterVal=.999999;
}
elseif(filterVal<=0){
filterVal=0;
}
smoothedVal=(data*(1-filterVal))+
(smoothedVal*
filterVal);
return(int)smoothedVal;
}
UtilisezleboutonVérifierpourvérifiervotrecode.Lecompilateurvousindiqueraenrouge toute erreur grammaticale éventuelle. Si le croquis se compile correctement,cliquezsurTéléverserpourl’envoyerversvotrecarte.
Lorsquelechargementestachevé,ouvrezlemoniteursérieeteffleurezouapprochez-vousdel’antenne.Vousdevriezvoirdeuxvaleursapparaîtresurvotreécran.Sur lagauche,lavaleurbruteentraind’êtrelue;surladroite,lavaleurcorrespondanteunefoislissée.
Siriennesepasse,revérifiezvoscâblages:
» Assurez-vousd’utiliserlebonnumérodebroche.
» Vérifiezlesconnexionssurlaplatined’essai.
ComprendrelecroquisCapPinSketchAudémarrageducroquis,danslesdéclarations,unnouvelobjetCapPinestinstancié.Notez que cPin_5 correspond au nom de l’objet et qu’il est assigné à labroche5viaCapPin(5).
CapPincPin_5=CapPin(5);//litlabroche5
Une variable de type float nommée smoothed est déclarée pour stocker lavaleurducapteurunefoiscettedernièretraitée.
floatsmoothed;
Dans la configuration, la communication série est initiée pour utiliser la vitesse laplusrapidedisponiblepourArduinoquicorrespondà115200bauds.
Lemessage«Start»estensuiteenvoyépourvousindiquerqueleportsérieestbienconnecté.:voidsetup()
{
Serial.begin(115200);
Serial.println(“Start”);
La ligne commentée ci-dessous n’est pas utilisée dans ce croquis, mais elle estréférencée dans d’autres exemples deCapSense.Nous n’en parlerons pas dans cetexemple, mais elle pourra être décommentée afin d’inclure d’autres fonctions decalibragedéfiniesdanslabibliothèque.
Danscecroquis,denombreusesvariablessontdéclaréeslocalement.Eneffet,commeelles ne sont pas nécessaires en dehors de la boucle, elles sont supprimées etredéclaréesaprèschaquetourdeboucle.
Enpremierlieu,undélaid’unemillisecondeestajoutépouraméliorerlastabilitédelalecture:
voidloop()
{
delay(1);
Ensuite,unevariabletotal1detypelongestdéclarée.CettevariablepeutprêteràconfusioncarleLminusculeetlavaleurnumérique1seressemblentbeaucoupaveclaplupartdespolicesdecaractère.Deplus,ellenesemblepasêtreutiliséedanscecroquisetdoitsansdouteêtreunreliquatdesversionsprécédentes.
longtotal1=0;
La variable de type long suivante reçoit la valeur fournie par millis().Commeils’agitd’unevariablelocale,savaleurestréinitialiséeàchaquetour.
longstart=millis();
Lafonctionspécifique.readPin()litlabrochecapacitive.
longtotal=cPin_5.readPin(2000);
Si vous souhaitez explorer ce code plus en détail, reportez-vous aux fichierscapPin.ccp de la bibliothèque CapSense. À première vue, cela sembledéconcertant,maisenobservantlaligneci-dessous,vouspouvezvoirquecettevaleurcorrespondaunombred’échantillonsprisparl’Arduinoàpartirdelalecture.
longCapPin::readPin(unsignedintsamples)
Éditeretmodifierlefonctionnementinternedesfonctionsdebibliothèquesn’estpasrecommandé aux débutants, même s’il reste instructif de savoir ce qui se passeexactementdansvotrecode.
Unefonctiondelissageestinclusedanscecroquis.Ellerécupèrelesvaleursbrutesluesdepuislecapteur,leslisseetfournitdenouvellesvaleursensortie.Ici,elleestparamétréeà0,8.Maisn’hésitezpasàtesteretàmodifiercettevaleurpourtrouverletauxdelissageappropriéàvotreapplication.
Ce taux dépend de la vitesse à laquelle la boucle est exécutée et du nombre delectures réalisées durant cette période ; n’oubliez pas ce point si vous envisagezd’ajouterdenombreuxautrescontrôlesd’autresentrées.
//Simplefiltrepouréliminertoutvacillement
//Changezleparamètre(0estmin,.99estmax)
smoothed=smooth(total,.8,smoothed);
Enfin, les valeurs sont écrites sur le port série afin de pouvoir les visualiser.L’expressionmillis()-startnousdonneladuréenécessaireàlarécupérationd’unelecture.Siplusd’échantillonssontprélevésousidesdélaisquelconquessontajoutésaucode,celaaugmenteraenconséquenceletempsnécessairepourtermineruntourdeboucleetdecefaitlaréactivitéducapteur.
serial.print(millis()-start);//temps
d’exécutionen
ms
Destabulationssontajoutéesafind’espacerlesvaleurs.Letotaletlesvaleurslisséessonttousdeuxaffichésafindepouvoirlescomparer.Vousnoterezpeut-êtreunlégerdélaidansletempsderéponsedecesvaleurs.CedélaiindiquequevotreArduinoestentraindeliredesvaleurssupplémentairesafinderéaliserlelissage.Cependant,cedélaiestnormalementàpeineperceptiblecarlavitesseenbaudsconfiguréepourlecapteuresttrèsélevée.:
Serial.print(«\t»);//Tabulationpour
aérer
Serial.print(total);//Totaldelarangée
Serial.print(“\t”);
Serial.println((int)smoothed);//lissé
delay(5);
Tout en bas du croquis, en dehors de la boucle principale, se trouve une fonctionsupplémentaire. Ils’agitd’unfiltrepasse-basquirenvoieunevaleur lissée.Commevous pouvez le constater, cette fonction ne commence pas ici par void commec’étaitlecaspoursetup()etloop()maisparint.Cettesyntaxeindiquequelafonctionrenvoieunevaleurdetypeentierlorsqu’elleaterminésonexécution(aulieudenerienrenvoyercommeavecvoid).
//Simplefonctiondefiltrage
//Requiertderecyclerlasortiedansleparamètre
“smoothedVal”
intsmooth(intdata,floatfilterVal,float
smoothedVal){
if(filterVal>=1){//Forcelesparamètresà
rester
danslaplage
filterVal=.999999;
}
elseif(filterVal<0){
filterVal=0;
}
smoothedVal=(data*(1-filterVal))+
(smoothedVal*
filterVal);
return(int)smoothedVal;
}
QU’EST-CEQU’UNEVALEURFLOTTANTE?
Un float,ounombreàvirgule flottante,estunnombrecontenantunepartie
décimale.Unevariablepeutêtredéclaréepourstockeruntelnombreàvirgule
flottanteplutôtqu’unnombreentier(intoulong).Ceformatestindispensable
danscertainessituations,commelorsquevousprélevezunevaleurcapacitive
extrêmementprécise.
Cecidit,letraitementdesflottantsprendplusdetempsqueceluidesentiers
etdoitêtreévitédèsquec’estpossible.
//slider_2_7.calibrateSli
der();//Cetteligneest
neutralisée
}
UnlaserdétecteurUnfaisceaulaserdétecteurestconstituédedeuxparties:unesourcedelumièrelaseretuncapteurdelumière.Commevousavezdûl’apprendredanslesfilms,lorsqu’unfaisceauest interrompu,unealarmesedéclencheet lesgardiensaccourent.AvecunArduino,vouspouvezréaliserunteldispositiftrèssimplementetdéclenchertoutcequevousvoulez.Plutôtqued’acheterunsystèmedesécuritéderniercri,vouspouvezle fabriquer vous-même en utilisant quelques composants simples. : Pour cetteréalisation,tenezcomptedespointssuivants:
» Lacomplexité:Leslasersconstituentunsujetdélicatcarilexiste
desrisquespotentielsàlesmanipuler.Maisaulieudemettreen
dangervotrevueoudepasserplusieursannéesàlesétudier,
essayezplutôtdescomposantsquiontdéjàététestés,certifiéset
assembléssousformedeproduits.Lesstyloslaseretlespointeurs
laserparexemplesontlargementrépandusetrelativementpeu
chers.Ilsfontgénéralementpartiedeslasersdeclasse1,cequi
correspondàdeslasersvisiblesetsûrssil’onenfaitunusage
normal.Cependant,ilestconseillédevérifierlesspécificationsde
votrelaserafindevousassurerqu’ilestbienadaptéàvotrepublic
etàsonenvironnement.Lesadultessontnormalementassezavisés
pournepasregarderdirectementunlaser,maisredoublezde
prudenceaveclesenfants.Commelesfaisceauxlasersonttrès
précis,lemieuxestd’enchoisirundisposantd’unlargecapteurafin
d’avoirunegrandesurfaceàviser.Laseuledifficultédecetypede
capteurpeutprovenirdesonalimentation.Unpetitpointeurlaser
étantgénéralementalimentéparpiles,vousrisquezd’avoiràles
remplacersouvent,àmoinsdelesremplacerparunealimentation
externedepuissancesuffisante.
Afindepouvoirlesutiliserenextérieur,jevoussuggèredeprotéger
lecapteuretlelaserdansdesboîtiers.Pourfaciliterleuralignement
etajouterunecertainetouche,jevoussuggèreégalementde
montercesboîtierssurdesmini-trépieds.
» Leprix:Pourenviron10€,vouspouvezacquérirunpetitpointeurlaserdiscret.Lesprincipalesdifférencesentrelesmodèlesde
pointeursrésidentdansletypedepilesqu’ilsutilisentetdansla
couleurdeleurfaisceau.Uncapteurdelumièrecoûteenviron
de1à2€selonsataille.Comptezenviron5€pourunboîtieretde6à10€pouruntrépied.
» L’emplacement:Disposezledétecteuraussibasquepossibleafin
d’évitertoutcontactdesyeuxaveclelaser.Cedispositifdelaserfait
d’excellentsdéclencheursdecaméras.Voustrouverezdesexemples
danslechapitrebonusàlafindecelivre.
Undétecteurlaserestuneaméliorationd’undétecteurdeluminositéconventionnelle.Grâceà sacapacitéà fournirunesource lumineuseplus intenseetmieuxcontrôlée,vouspouvezaméliorersaprécision.
Dans cet exemple, nous utilisons un laser pour améliorer un détecteur de lumière.Grâce au circuit AnalogInOutSerial, nous pouvons surveiller la réponse de noscapteurslorsqu’ilssonttouchésparlerayonlaserendétectantlemomentoùlelaserne passe plus. Grâce à ces informations, vous pouvez alors déclencher autant desortiesquevouslesouhaitez.
RéaliserlecircuitAnalogInOutSerialIlvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Undétecteurdelumière
» Unstylodepointagelaser
» UneLED
» Unerésistancede10kΩetunede220Ω
» Desstraps
RéalisezlecircuitillustrédanslesFigures12-8et12-9quicorrespondentàlapartieréceptrice.Lestylolaserpeutêtrealimentésoitparpiles,soitparuntransformateurdevoltageéquivalent.Pourplusdedétailssurlechoixd’untransformateur,reportez-vousauchapitre15.
Choisissez Fichier->Exemples->03.Analog->AnalogInOutSerial depuis le menuArduinopourchargerlecroquis.
/*
Entréeanalogique,sortieanalogique,Sortiesérie
Litlabrochedel’entréeanalogique,comparele
résul-
tatdansuneplagede0à255etutiliselerésultat
pour
définirlamodulationPWMd’unebrochedesortie.
Affiche
aussilerésultatsurl’écransérie.
Lecircuit:
*Cellulephoto-électriquereliéeàlabroche
analogique
0etau+5V
*LEDreliéeàlabrochenumérique9
Crééle29Déc.2008
modifiéle9Avr2012
parTomIgoe
FIGURE12-9Schémadudétecteur(uneentréeanalogiqueetunesortieLED).
Cecodeexempleestdansledomainepublic.
*/
//Constante
constintanalogInPin=A0;//Broched’entrée
analogique
constintanalogOutPin=9;//Brochedesortie
pseu-
do-analogique(PWM)
intsensorValue=0;//valeurlueenentrée
intoutputValue=0;//valeurdesortieen
PWM
(sortieanalogique)
voidsetup(){
//Initialiselescommunicationssérieà9600bps:
Serial.begin(9600);
}
voidloop(){
//Litlavaleur:
sensorValue=analogRead(analogInPin);
//Lacompareàlaplagedesortieanalogique:
outputValue=map(sensorValue,0,1023,0,255);
//Changelavaleurdesortieanalogique:
analogWrite(analogOutPin,outputValue);
//Affichelesrésultatssurlemoniteursérie:
Serial.print(«sensor=«);
Serial.print(sensorValue);
Serial.print(«\toutput=«);
Serial.println(outputValue);
//Attend2millisecondesavantleprochaintour
de
boucle
//pourqueleconvertisseuranalogique-numérique
se
règle
//aprèsladernièrelecture:
delay(2);
}
Lancez la compilation pour vérifier votre code. Si le croquis se compilecorrectement,téléversezlecodecompilé.Celafait,pointezvotrelaserdemanièreàcequ’ilfrappelecentreducapteurdelumière.
Vousdevriezpouvoirliresurlemoniteursérielesvaleursmaximales.Enobstruantlefaisceau,cesvaleursdiminuentetlaLEDindiquecetévénement.Lorsquecesvaleursdescendent en dessous d’un certain seuil, vous pouvez déclencher toutes sortesd’actions.
Siriennesepasse,revérifiezvoscâblages:
» Assurez-vousd’utiliserlebonnumérodebroches.
» Vérifiezlesconnexionssurlaplatined’essai.
ComprendrelecroquisAnalogInOutSerialPour plus de détails sur le fonctionnement de ce croquis, reportez-vous auxexplications concernant AnalogInOutSerial dans le Chapitre 7. Vous trouverezégalementdessuggestionsconcernant le lissageet lecalibragededifférentscroquisdansleChapitre11.
DétecterlesmouvementsUn capteur infrarouge passif (PIR) est un capteur que l’on rencontre communémentdanslesboutiquesetautreslocauxcommerciaux.Vousavezpuvoircecapteurdansl’angled’uneentréesemettreàclignoterenrougedèsqu’ildétectelepassaged’unepersonne.Ildétectelachaleurdégagéeparlespersonnes,lesanimauxoutouteautresource de radiations infrarouges. Les radiations infrarouges sont invisibles auxhumains,:maisneposentaucunproblèmeauxcapteurs.
Lecapteurresembleàceuxquel’ontrouvedanslescamérasnumériquesàceciprèsqu’ilnedisposepasdelentillescomplexespourcapturerlesdétailsd’uneimage.En
fait,uncapteurPIRsesituequelquepartentreuncapteurdelumièrehauterésolutionet une caméra basse résolution. Ce type de capteur dispose de lentilles simplesconçuespourluifournirungrandangledevue.
Ce type de capteur est souvent utilisé pour la détection de mouvements par lesalarmes antivol. En fait, au lieu de détecter les mouvements, il détecte leschangementsdetempérature.
IlexistedeuxmoyensdeconstruireuncapteurPIR.Lepremierconsisteàdémonterunealarmeanti-intrusion,quicontientgénéralementunelentilleetuncapteur.Maiscedernier peut être difficile à identifier. La seconde méthode est d’en acheter unspécifiquement conçu pour un projet de microcontrôleur. Ce type de capteur estgénéralement fourni sous forme d’un objectif ressemblant à une balle de ping-pongsurmontant une barre contenant une carte nue. Avant de vous lancer dans laconception,tenezcomptedespointssuivants:
» Lacomplexité:Ilpeuts’avérerdifficilederéutiliseruncapteurPIR
existantquiestprévupourunusagespécifique.L’undesavantages
d’utilisercetypedecapteurrésidedanslefaitqu’ilestprépackagé,
cequiréduitletempsnécessaireàl’assemblagedescomposants.
Lessystèmespréfabriquéssontconçuspourêtresimplesà
installer.Ilsoffrentuncalibragemanuelenproposantun
potentiomètreajustableavecuntournevis.Celapermetunréglage
àlavoléebienplusrapidequ’unrechargementdesdonnées.
SivousutilisezuncapteurPIRquin’estpasdéjàprépackagé,les
aspectsmatérielsetlogicielsvousparaîtrontbeaucoupplus
simples,maisilvousfaudraunpeud’effortspourcréerleboîtierde
protection.CertainscapteursPIRdisposentdeleurproprelogique
embarquéeetfonctionnentàlamanièred’uncommutateur,
prenantl’étatHIGHlorsqu’unmouvementsurvient.Cetypede
capteurnécessiteunephasedecalibragepourdéterminerleseuil
dedétection.
» Leprix:UncapteurPIRcourantcoûteentre15et40€.Lecoûtprincipalestliéauboîtierquioffregénéralementundiscretaspect
high-tech.LescapteursPIRnusnecoûtentqu’unefractiondeceprix
(environ8€),maisilfautyajouterleprixduboîtierpourqu’ilssoient
d’unequelconqueutilité.
» L’emplacement:Denombreuxboîtierspermettentdeposerle
capteurdirectementsurunmur.Vouspouvezégalementleposer
surunmini-trépiedafindelestabiliser.Certainstrépiedssont
équipésd’uneventousedemontagequipermetdelesfixersurdes
surfaceslissestellesquedesvitres.
La plupart des capteurs PIR sont directement prêts à l’emploi. Il suffit de lesalimenter.Ilssontcapablesdesecalibrereux-mêmesenfonctiondecequ’ilspeuventvoir, puis vous envoient une valeur HIGH ou LOW lorsqu’ils détectent unchangement. Ce qui les rend extrêmement simples d’utilisation, car ils fonctionnentaveclemêmetypedesignalqu’unbouton-poussoir.
ImplémenterlecroquisDigitalReadSerialDanscetexemple,vousallezapprendreàutiliserleSE-10,ils’agitd’uncapteurPIRdisponible chez les principaux revendeurs Arduino. Ce capteur PIR particulierdispose de trois fils : un rouge, unmarron et un noir.Le fil rouge correspond à lasource d’alimentation et doit être connecté au 5 V. Curieusement, le fil noircorrespondausignaletnonàlamasse(voirlaFigure12-10;lefilnoirestceluileplusàgauche,lemarronestceluidumilieuetlerougeestceluidedroite).Lemarrondoitêtrereliéàlamasseetlenoiràlabroche2.
FIGURE12-10LeSE-10etsonétrangecodecouleur.
La broche du signal correspond à un circuit dit « collecteur ouvert » et doit êtrebranchéeenpositionactiveHIGH.Pourcela,utilisezunerésistancede10kΩpourlaconnecterau5V.LabrochereçoitHIGHlorsqu’iln’yapasdemouvementetLOWlorsqu’unmouvementestdétecté.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» UncapteurPIRSE-10
» Unerésistancede10kΩ
» Desstraps
Réalisez le circuit comme l’indiquent le schéma et le diagramme illustrés auxFigures12-11et12-12.
FIGURE12-11Leschémad’uncircuitdecapteurPIR.
FIGURE12-12Lediagrammed’uncircuitdecapteurPIR.
Choisissez Fichier->Exemples->01.Basics->DigitalReadSerial dans le menuArduinopourchargerlecroquis.Cecroquisestdestinéàunbouton-poussoir,maisiciil utilise lesmêmes principes. Si vous souhaitez rendre le croquis plus spécifique,vouspouvezl’enregistreravecdesnomsd’objetsetdevariablesplusappropriées.
/*
DigitalReadSerial
Lituneentréenumériquesurlabroche2,affichele
ré-
sultatsurl’écransérie
Cecodeestdansledomainepublic.
*/
//Labrochenumérique2estreliéeàunbouton-
poussoir.
intpushButton=2;
//Laroutinedeconfigurations’exécuteenune
seulefois
quandvousappuyezsurReset
voidsetup(){
//initialiselacommunicationsérieà9600bits
par
seconde:
Serial.begin(9600);
//labrochedubouton-poussoirestuneentrée:
pinMode(pushButton,INPUT);
}
//Routinedelaboucleperpétuelle
voidloop(){
//Litlabroched’entrée:
intbuttonState=digitalRead(pushButton);
//Affichel’étatdubouton:
Serial.println(buttonState);
delay(1);//délaientrelecturespourplusde
stabi-
lité
}
Lancezlacompilationpuistéléversezleprogramme.Posezalorsquelecapteurinfra-rougesurunesurfacelibreetouvrezlemoniteursérie.Cetteouvertureréinitialiselecroquis.Lecapteursecalibredelui-mêmedanslessecondesquisuivent.Lorsqu’unmouvement est détecté, vous devrez voir la valeur de buttonState changer,passantde1(pasdemouvement)à0(mouvement).
Siriennesepasse,revérifiezvoscâblages:
» EssayezderelancerlecapteurPIRendéconnectantpuisen
reconnectantlefildemasseGND,etassurez-vousquelecapteurne
bougepasnipendant,niaprèslecalibrage.
ComprendrelecroquisDigitalReadSerialLaseulevariableàdéclarerestlabrochepushButton,(danscecas,laconstantepourraitêtrerenomméepirSensor).
//labrochenumérique2estreliéeàunbouton-
poussoir.
intpushButton=2;
Dans la fonction de configuration, le port série est ouvert et réglé pour utiliser undébitde9600baudsetlabroched’entréeestconfigurée.Rappelonsquecetteroutinede configuration s’exécute en une seule fois quand vous appuyez sur Reset ouredémarrez:
voidsetup(){
//initialiselacommunicationsérieà9600bits
par
seconde:
Serial.begin(9600);
//labrochedubouton-poussoirestuneentrée:
pinMode(pushButton,INPUT);
}
Dansloop(),labroched’entréeestlueetsavaleureststockéedanslavariablebuttonState.CettevaleurvautHIGHlorsqu’aucunmouvementn’estdétecté,carla résistance pull-up reçoit la tension de la broche 5 V. Dès qu’un mouvementsurvient,lecollecteurouvertfaitchuterlatensionetindiqueLOW.
voidloop(){
//Litlabroched’entrée:
intbuttonState=digitalRead(pushButton);
Lavaleurenentréeestaffichéesurlemoniteursérie.
//Affichel’étatdubouton:
Serial.println(buttonState);
delay(1);//Délaidestabilisation
}
Ceci est un bon exemple illustrant le réemploi d’un programme avec différentsmatériels. À présent il vous est possible de déclencher plusieurs sorties en vousbasantsur lessignauxHIGHetLOWducapteurPIR.Pour simplifier l’usage et laclartédevotrecodeàl’intentiondesautrespersonnes,renommezlesvariablesavecdesnomsplusappropriés,ajoutezvoscommentairesetenregistrezlecroquissousunnomfacilementidentifiable.
MesurerlesdistancesDeux capteurs de mesure de distance sont extrêmement populaires : le capteurinfrarouge de proximité et le télémètre à ultrasons. Ils fonctionnent de manièreanalogueeteffectuentàpeuprèslamêmetâche.Cependant,ilestimportantd’utiliserle bon capteur au bon endroit. Un capteur infrarouge de proximité dispose d’unesourcelumineuseetd’uncapteurdelumière;letempsmisparlalumièrepourrevenirestmesurépourdéterminerladistanced’unobjet.
Untélémètreàultrasonslanceuneondesonoredehautefréquenceetécoutesonéchorenvoyéparunesurfacesolide.Enmesurantletempsmisparlesignalpourreveniràlasource,lecapteurestcapablededéterminerladistanceparcourueparcedernier.
Lescapteurs infrarougesdeproximiténe sontpas trèsprécisetontuneportéepluscourtequelestélémètresàultrasons.
Avantlaréalisation,tenezcomptedespointssuivants:
» Lacomplexité:Cesdeuxcapteurssontconçuspourêtre
extrêmementsimplesàintégrerdansvosprojetsArduino.Ilssont
employésdansdesapplicationsréellespourdesusagessimilaires
tellesquedesapplicationsd’aideauparking.
Iciencore,ladifficultéprincipalerésidedanslaréalisationdu
boîtier.Lescapteursinfrarougesdeproximité,telsqueceuxréalisés
parShape,disposentd’untroupourtournevispermettantde
réaliserlesréglagessansouvrirleboîtier.Maxbotix,enrevanche,
réalisedestélémètresàultrasonsquinedisposentpasdecette
fonctionnalité,maisdontlaformecylindriquefacilitelemontage
surunesurfaceenperçantuntrouautravers.
» Leprix:Lescapteursdeproximitéàinfrarougescoûtentautour
de12€etontuneportéed’environ1,50m.Lestélémètresà
ultrasonsproposentunepluslargegammeetsontplusfiables,
maisestaudétrimentdeleurprix.Comptezenviron20€pouruncapteurayantuneportéed’environ5met80€pourunmodèleplus
résistantd’uneportéejusqu’à8m.
» L’emplacement:Onutilisefréquemmentcescapteurspour
détecterlaprésenced’unepersonneoud’unobjetdansunespace
particulieretplusparticulièrementlorsqu’uncapteurdepression
devienttropsimpleàcontournerouqu’uncapteuràinfrarouges
risquededonnerdesmesureserronées.
Les capteurs de proximité à infrarouges fonctionnent bien dans un environnementsombre,maisilsdeviennentinefficacesàlalumièredirectedusoleil.LetélémètreàultrasonsdeMaxBotixestl’undemescapteursfavorisetl’undesplusfiablesquejeconnaisse.Enutilisantuntélémètreàultrasons,vouspouvezdéciderdelalargeurdurayon que vous souhaitez émettre.Un faisceau large vous permettra de détecter lesgros objets et d’avoir une vague idée de leur direction ; un faisceau fin permetd’obtenirunegrandeprécisiondemesure.
ImplémenterlecroquisMaxSonarDans cet exemple, vous allez apprendre à mesurer précisément des distances enutilisantunMaxBotixLV-EZ0.LesmodèlesEZ0,EZ1,EZ2,EZ3etEZ4fonctionnenttousde lamêmemanière et se distinguent par la largeur de faisceau.Choisissez lemodèle approprié à votre projet. : Les télémètres ne nécessitent que quelquesajustementsmineurs.
Ilyatroismanièresdeconnecterletélémètre:l’analogique,lalargeurd’impulsionoulacommunicationsérie.Danscetexemple,vousverrezcommentmesurerlalargeurd’impulsionetcommentlaconvertirendistance.Lasortieanalogiqueestplussimpleà lire depuis vos broches d’entrée analogique,mais elle ne fournit pas demesuresaussi précises que la largeur d’impulsion. Cet exemple ne couvre pas lacommunicationsérie.
Ilvousfaut:
» UnArduinoUno
» UntélémètreàultrasonsLV-EZ0
» Desstraps
RéalisezlecircuitàpartirdesFigures12-13et12-14.Lesconnexionsdu télémètresont clairement indiquées sur la face intérieure de la carte. Les connexions 5V et
GND apportent l’alimentation à votre capteur et doivent être connectées auxbornes5VetGNDdevotreArduino.LaconnexionPWcorrespondausignalde lalargeurd’impulsionquidoitêtrelueparlabroche7devotreArduino.Assurez-vousquevotretélémètreestbienfixéetorientédansladirectiondevotrechoix.
FIGURE12-13Schémademontaged’uncircuitLV-EZ0.
FIGURE12-14SchémadeprincipeexploitantunLV-EZ0.
Le code source de MaxSonar (réalisé par Bruce Allen) se trouve à l’adressewww.arduino.cc/playground/Main/MaxSonar. Démarrez un nouveaucroquis,copiezousaisissezlecodeci-dessousetenregistrez-leavecunnomsimpleàserappelertelquemonMaxSonar.
//Libreàvousd’utilisercecode.
//Demandezl’autorisationàsonauteursivous
souhaitez
l’utilisermodifié.
//Auteur:BruceAllen
//Date:23/07/09
//Brochenumérique7pourlirelalargeurde
l’impulsion
dansl’appareil
MaxSonar.
//Constante
constintpwPin=7;
//Variables(troissontdéclaréessurlamême
ligne)
longpulse,inches,cm;
voidsetup(){
//Ouvreuneconnexionsériepourmontrerles
résul-
tatsdanslePC
Serial.begin(9600);
}
voidloop(){
pinMode(pwPin,INPUT);
//Litl’impulsionenvoyéeparl’appareil
MaxSonar.
//Représentelalargeurdel’impulsionavecun
facteur
d’échellede147uS
parpouce.
pulse=pulseIn(pwPin,HIGH);
//147uSparpouce
inches=pulse/147;
//Convertitlespoucesencentimètres
cm=inches*2.54;//Attention,pointdécimal,
pas
virgule!
Serial.print(inches);
Serial.print(“in,“);
Serial.print(cm);
Serial.print(“cm”);
Serial.println();
delay(500);
}
Lancezlacompilationpuisletéléversement.
Ouvrez le moniteur série. Vous devez voir la distance mesurée en pouces et encentimètres.Silavaleurestfluctuante,essayezavecunobjetplusvolumineux.
Ce croquis permet de mesurer une distance en ligne droite avec précision. :Confrontezlesrésultatsindiquésavecunemesurefaiteavecunmètre.Ajustezlecodeenconséquencesivousconstatezdesdivergences.
Siriennesepasse,revérifiezvoscâblages:
» Assurez-vousd’utiliserlesbonsnumérosdebroches.
» Vérifiezlesconnexionssurvotreplatined’essai.
ComprendrelecroquisMaxSonarDanslesdéclarations,labroche7estdéfiniecommeconstantesouslenompwPin:
//Constante
constintpwPin=7;
Troisvariablesdetypelongsontemployéespourstockerlalargeurd’impulsionetlesdistancesexpriméesenpoucesetencentimètres.Notezquesicesvariablesn’ontpasdevaleurpardéfaut,vouspouvezlesdéclarertouteslestroisàlasuite,cequenousfaisonsici.
//Variablespourstockerlesvaleurs
longpulse,inches,cm;
Danssetup(),laconnexionsérieestouvertepourafficherlesrésultats.
voidsetup(){
//Ouvreuneconnexionsériepourafficherles
résultats
surlePC
Serial.begin(9600);
}
Dans laboucleprincipale,pwPinest définie en tant qu’entrée.Vous pouvez fairecettedéfinitiondanslaboucleouladéplacerdanssetup().
voidloop(){
pinMode(pwPin,INPUT);
LafonctionpulseIn()renvoie,enmicrosecondes,laduréemiseparl’impulsionavantderevenir.
//Litl’impulsionrenvoyéeparl’appareil
MaxSonar.
//Représentelalargeurdel’impulsionavecun
facteur
d’échellede147uS
//parpouce.
pulse=pulseIn(pwPin,HIGH);
L’impulsion parcourt 1 pouce toutes les 147 microsecondes, ainsi, nous pouvonscalculerladistanceàpartirdutemps.Aveccetteinformation,unesimpleconversionpermetd’affichercettedistanceselondifférentesunités.
//147uSparpouce
inches=pulse/147;
//Convertitlespoucesencentimètres
cm=inches*2.54;
Notezbienquel’écritured’unevaleurfractionnairedoitutiliserunpointdécimalàlaplacedelavirgulehabituelleenFrance.
Lerésultatestenvoyéaumoniteursérievial’instructionSerial.println().
Serial.print(inches);
Serial.print(“in,“);
Serial.print(cm);
Serial.print(“cm”);
Serial.println();
Pour faciliter la lecture, undélai est ajouté après l’affichagede chaque ligne, vouspouvezcependantlesupprimersilaréactivitévousimporteavanttout.
delay(500);
}
Cette opération vous permet d’obtenir une mesure de distance précise que vouspouvezincorporerdansvospropresprojets.
Un exemple d’adaptation à un besoin précis consiste à employer une instructionconditionnelleifcommeparexemple:
if(cm<50){
//Fairequelquechose!
}
Est-cequequelqu’unm’entend?Le son est une autre manière de détecter la présence, et la meilleure façon d’yparvenirconsisteàemployerunmicrophonedetypeélectret.Onpensegénéralementaux sons sous la forme analogique qui est celle des bruits qui nous entourent.Cependant,ungrandnombredesonsquenousentendonschaquejourproviennentousontconvertisd’unesourcenumérique.
Ainsi,enconvertissantunsonensignalnumérique,ilestpossibledel’interprétersurunordinateurousurunArduino.Unmicrophoneélectretressembleauxmicrophonesquel’ontrouvedanslesécouteursdescasques.Ilestassezsensible,maisrequiertunamplificateurafinquel’Arduinopuissedétecterlessignaux.
Avantlaréalisation,tenezcomptedespointssuivants:
» Lacomplexité:Ilexisteunegrandevariétédemicrophones
électret.UndesplussimplesestceluiduBreakoutBoardde
Sparkfun.Ilestfournipréassembléavecunmicromontésurune
carteetdisposed’unamplificateur.Ilpeutêtrefacilementreliéàun
Arduinosousformed’entréeanalogique.Ilestaussipossiblede
récupérerunmicrophoneélectretsuruncasqueousurdes
écouteurs,maisvousdevrezyadjoindreunamplificateurpour
pouvoirl’utiliser.Lemicrophonedevraêtreprotégéde
l’environnementetdescontactshumains.
» Leprix:Lemicrophoneenlui-mêmeesttrèspeucher(1€)chezSparkfunouchezsesrevendeurs.Unecartecomplètecoûte
environ6€,cequin’estpastrèschereuégardautravailéconomisé.
» L’emplacement:Entantquecapteurd’ambiance,lemicrophone
peutêtreplacén’importeoùdansunepièce.Sivoussouhaitez
détecterunsonspécifiquecommeunclaquementdeporte,ilest
préférabledeplacerlemicrophoneprochedecettedernièrepour
améliorerlaqualitédelalecture.
Lesmicrophones électret sont parfaits pourmesurer l’amplitude ou le volume d’unbruitetilspeuventdéclencherunevariétédesorties.
RéaliserlecircuitAnalogInOutSerialDanscetexemple,vousallezobserverlesniveauxsonorescaptésparunmicrophoneélectret.CesimplecapteurpeutêtreconsidérécommeuneentréeanalogiquedevotreArduino.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essaidemicrophoneélectret
» Desstraps
RéalisezlecircuitindiquéparlesFigures12-15et12-16enconnectant lemicroentantqu’entréeetlaLEDentantquesortie.Laplaquedetestsdumicrophonenécessiteunpeudesoudurepourlarelieràlaplatined’essaiouàvotreArduino.
Dans l’atelier Arduino, choisissez Fichier->Exemples->03. Analog->AnalogInOutSerialdanslemenuArduinopourchargerlecroquis.
/*
Entréeanalogique,sortieanalogique,Sortiesérie
Litlabrochedel’entréeanalogique,comparele
résul-
tatdansuneplagede0à255etutiliselerésultat
pour
définirlamodulationPWMd’unebrochedesortie.
Affiche
aussilerésultatsurl’écransérie.
FIGURE12-16Lediagrammed’uncircuitd’unélectret.
Lecircuit:
*Sortiedemodulationdumicrophonereliéeàla
bro-
cheanalogique0.
*Lesautresbrochespourl’alimentation+5VetGND
*LaLEDestreliéeàlabrochenumérique9
Crééle29Déc.2008
modifiéle9Avr2012
parTomIgoe
Cecodeexempleestdansledomainepublic.
*/
//Constantes
constintanalogInPin=A0;//Broched’entrée
analogique
pourlesignal
constintanalogOutPin=9;//BrochedesortiePWM
pour
laLED
//Variables
intsensorValue=0;//Valeurluedu
microphone
intoutputValue=0;//ValeurdesortiePWM
(sor-
tiepseudo-analogique)
voidsetup(){
//Initialiselescommunicationssérieà9600bps:
Serial.begin(9600);
}
voidloop(){
//Litlavaleurd’entrée
sensorValue=analogRead(analogInPin);
//Lacompareàlaplagedelasortie
outputValue=map(sensorValue,0,1023,0,255);
//Envoielavaleurensortie
analogWrite(analogOutPin,outputValue);
//Affichelesrésultatssurlemoniteursérie:
Serial.print(«Senseur=«);
Serial.print(sensorValue);
Serial.print(«\tSortie=«);
Serial.println(outputValue);
//Attend2millisecondesavantleprochaintour
de
boucle
//pourqueleconvertisseuranalogique-numérique
se
recale
//aprèsladernièrelecture
delay(2);
}
Lancez lacompilationpuiscliquezsurTéléverseretouvrez lemoniteur série.Vousdevez observer des valeurs analogiques allant de 0 à 1024 en fonction des bruitscaptésparlemicrophone.
Siriennesepasse,revérifiezvoscâblages:
» Assurez-vousd’avoirbienutilisélebonnumérodebroche.
» Vérifiezlesconnexionssurvotreplatined’essai.
» Observezlesdifférentesplagesdevaleurquevousrécupérezde
différentsenvironnementssonoresetlamanièredontvotre
microphonelesinterprète.
Vous pouvez également vous intéresser au croquis Smoothing du Chapitre 11. Enutilisantune instructionif, vouspourrez réaliseruneaction spécifiquechaque foisqueleniveausonoredépasseleseuilchoisi.
ComprendrelecroquisAnalogInOutSerialPourobtenir plusdedétails sur le fonctionnementde ce croquis, reportez-vous auxnotesconcernantAnalogInOutSerialdansleChapitre7.Vous trouverezaussiquelquessuggestionsdanslesdifférentscroquisconcernantlelissageetlecalibragedansleChapitre11.
IVBoosterlepotentieldel’Arduino
DANSCETTEPARTIE
VousallezenapprendreencoreplussurlesprojetsArduino.
VousallezdécouvrircommentutiliserunArduinoMega2560qui
peutcontrôlerplusdesortiesqu’unArduinoUno.Vous
apprendrezaussicomment,enajoutantdumatériel
supplémentaire,vouspousserezvotrecarteUnoencoreplus
loinavecuncircuitregistreàdécalageetunpilotePWM.Fortde
toutescesdécouvertes,vousserezenmesured’animerun
grandnombredeLEDpourcréervotrepropreversiondes
illuminationsdeNoëldesChamps-Élyséesoupourcontrôlerune
arméedeservomoteurs.
P
Chapitre13Cartesfillesetbibliothèquesdefonctions
DANSCECHAPITRE
» Untourd’horizondel’offredecartesfilles
» Jeterunœilauxprincipalesbibliothèquesdisponibles
» Installeretexploiterunebibliothèque
lusvousprogresserezdans l’apprentissagede l’Arduinoetplusvousvoudrezenfaire.C’estbiennaturel,maisattentionànepasvouloirallertropviteenbesogne.Ledomainequivousintéresseestpeut-êtrehautementspécialiséetrequiertpourle
maîtriseruninvestissemententermesdetempsquipeuts’avérerconséquent.Danscecas,n’oubliezpascequiestleplusimportantdansl’Arduinoestlacommunautédesgensquil’utilisent.Cettecommunautépourravousaiderlorsquevousenaurezbesoin.
Le point de vue traditionnel qui nous est inculqué lors de notre scolarité est detoujoursprotégernos idéesetde lesgarderpournous.Heureusement,denombreuxmembres de la communauté Arduino ne partagent pas ce point de vue et ont lagentillesse de partager avec nous le fruit de leur travail acharné.En partageant lesconnaissances, la communauté Arduino permet à de nombreuses personnes deréutiliserdumatérieletdulogicieletd’entirerdenouveauxusagespassionnants.Siàleurtourcespersonnespartagentleursdécouvertes,lacommunautégrossit,permettantàtousderéaliserdesprojetsencorepluscomplexes.Danscechapitre,voustrouverezdesinformationsconcernantlesressourcespartagéesquesontlescartesfillespourlapartiematérielle,etlesbibliothèques(oulibrairies)pourlapartielogicielle.
CartesfillesUnecartefilleestuncomposantmatérielfournissantdesfonctionnalitésspécifiques,ets’enfichantau-dessusdevotrecarteArduino.Parexemple,vouspouvezutiliserunecartefillepoursimplifierlaconnexionetlecontrôled’unmoteur.VouspouvezmêmetransformervotreArduinoenunappareilaussicomplexequ’untéléphonemobile.Unecarte fille peut voir le jour sous la forme d’un composant matériel réalisé par un
expérimentateur enthousiaste qui souhaite partager ses connaissances avec lacommunauté. Il peut s’agir également de la réalisation d’un individu ou d’uneentreprise qui, à la demande de la communauté Arduino, souhaite rendre uneapplicationspécifiqueplussimpleàréaliser.
Les cartes filles peuvent être très simples ou très complexes. Elles sont venduespréassemblées sous forme de kits. Les kits vous permettent plus de liberté dansl’assemblage des cartes filles ; certains nécessitent l’assemblage de la totalité descircuitssur lacarte,d’autres,pluscomplexes,sontdéjàpartiellementassembléesetnenécessitentqued’êtrereliéesàunebroche.
Lescartesfillesvouspermettentd’utiliservotreArduinopourréaliserdiversprojetstout en passant facilement de l’un à l’autre. Toute l’électronique et les circuitsqu’ellesembarquentsontcontenusdansunboîtierd’unetaillecomparableàcelledel’Arduino. Il est possible de les empiler pour combiner différentes fonctionnalités.Cependant,ellesdoiventtoutesutiliserlesmêmesbrochesdevotreArduino.Aussi,sivous empilez des cartes filles, assurez-vous que ces dernières respectent cettecontrainte. Elles doivent également proposer une broche GND, car lescommunications entre votre Arduino et un autre appareil nécessitent une massecommune.
ConsidérationssurlescombinaisonsEnthéorie,plusieurscartesfillespeuventêtreempiléeslesunessurlesautres.Avantdetenterdelescombiner,tenezcomptedespointssuivants:
» Lataillephysique:Certainescartesfillesnepeuventpasêtre
disposéespar-dessusuneprécédente.Lescomposantsplushauts
queleconnecteurHErisquentdetoucherledessousdelacarte
supérieure.Cettesituation,quipeutsesolderparuncourt-circuit,
pourraitsérieusementendommagertouteslescartesainsiréunies.
» L’obstructiondesentrées/sorties:Siuneentréeouunesortie
estobstruéeparuneautrecartefille,c’estquecettedernière
devientredondante.Parexemple,iln’yaaucunintérêtàavoirune
secondecartefillejoystickouLCDsousuneautre,cariln’est
possibleden’enutiliserqu’uneseule.
» Besoinsd’alimentation:Certainsmatérielsnécessitentbeaucoup
depuissance.Bienquel’utilisationdelamêmesource
d’alimentationetdesmêmesbrochespourlamasseneposepasde
problème,ilyaunelimiteàlaquantitédecourantpouvanttransiter
entreles10autresbrochesd’entréesortie(I/O)quiestde40mApar
broche(et200mAautotal).Sivousdépassezcettevaleur,vous
risquezd’endommagervotrecarteettouteslescartesfilles
rattachées.Danslaplupartdescas,vouspouvezfacilement
remédieràceproblèmeenalimentantvotreArduinoetsescartes
fillesavecunealimentationexternedemanièreàcequelecourant
netraversepasl’Arduino.Assurez-vousd’utiliserlamasse
communesivouscommuniquezentrelescartesviaune
communicationaustandardI2CouSPIouencoreuneliaisonsérie.
» Broches:Certainescartesfillesnécessitentl’emploidebroches
particulières.Ilestimportantdesepenchersurcetgenrede
situation.Lesrisquessontauminimumunmauvais
fonctionnement,etaupirel’envoid’unvoltageaumauvaisendroit
quiendommageraitvoscartes.
» Logiciel:Certainescartesfillesnécessitentdesbibliothèques
spécifiquespourfonctionner.Celles-cipeuvententrerenconflit
avecd’autresbibliothèquesdéfinissantdesfonctionsquiportentle
mêmenom.Tenezcomptedesspécificationsetdesbesoinsde
chacunecarte.
» Interférencesradio/Wi-Fi/GPS/GSM:Lesappareilssansfilont
besoind’espacepourfonctionner.Siuneantenneestmontéesurla
carte,ilestdéconseillédelarecouvrir.Essayezdetoujoursplacer
lescartesfillesgérantlafonctionsansfilausommetdelapile.
Untourd’horizondescartesfillesAfin de vous donner une bonne idée des cartes filles disponibles, cette section enprésente une sélection et vous indique où trouver davantage d’informations sur lesujet.
Notezquelesprixindiquéssontceuxappliquésaumomentoùnousécrivonscelivreet qu’ils sont susceptibles de changer. Les liens sont également susceptibles d’être
modifiés. Les informations techniques sont collectées sur les sites Web desconstructeurs. Vérifiez toujours les détails par vous-même afin de vous assurer debienachetercequ’ilvousfaut.Lescartessontmisesàjourdetempsàautre,vérifiezquevousdisposezdestoutesdernièresversions.
Enfin,denombreuxretoursd’expériencesurcesproduitssontconsultablesenligne,lisez-lestoujourspourvousfaireunebonneidéesurlesproduitsquevoussouhaitezacquérir.
Cettegammedecartesfillesenglobeungrandnombred’usagesdifférents,maisdansla plupart des cas, vous n’en aurez besoin que d’une seule pour mener à bien unprojet.Ces cartes constituent un excellentmoyen de tester un concept avant d’allerplusloindansunprojetetdeselancerdanslaminiaturisation.
Lesprixindiquéssontceuxgénéralementconstatéschezlesdistributeurs.Cependant,encherchantbienouenachetantengros,vouspouvez réduireconsidérablement lescoûts.
ProtoShieldKitRev3Fabricant:Arduino
Prix:10€surl’ArduinoStore
Brocheutilisée:aucune.
LeProtoShield(Figure13-1)estuneplateformedestinéeàlaréalisationdecircuitspersonnalisés pour votre Arduino. De nombreuses cartes filles présentées dans cechapitreajoutentàvotreArduinodesfonctionnalitésspécifiques.AvecProtoShield,vouspouvezdéciderdelamanièredelesutiliser.
FIGURE13-1UnProtoShiedcomplètementassemblé.
Vous partez de vos platines d’essai existantes et soudez-les à la surface du ProtoShield afin que votre projet soit plus pérenne. ProtoShield propose également uneversion large qui correspond à la taille du MegaArduino. Autre fonctionnalitéintéressantedecescartes,ellesproposentunsupportpourlescomposantsminiaturesSMD(montageensurface)quisontdifficilesàsouderautrement.
LeProtoShield est vendu soit préassemblé, soit sous formedekit qui nécessite laréalisationdessoudures.
Vous trouverez plus d’informations en anglais sur la carte sur la page produitd’Arduino à l’adresse :http://arduino.cc/en/Main/ArduinoProtoShield.
ProtoScrewShieldFabricant:WingShieldIndustries
Prix:8€
Brocheutilisée:aucune.
La carte fille ProtoScrew est proche du Proto Shield classique,mais dispose d’unbornier à vis connecté aux broches. Cette fonctionnalité est bien adaptée dans lesapplications qui ont de nombreuses entrées susceptibles d’être modifiées ouinterverties.
Cette carte simplifie également le montage et le démontage. En effet, changer unepièceouuncâbleestplussimpleavecunbornieràvisqu’avecdelasoudure,gardezcepointàl’espritlorsquevousconcevrezvotreprochainprojet.
LacartefilleProtoScrewestvenduesousformedekitetsupposedoncuneséancedesoudure. Vous pouvez trouver plus d’informations sur la page produit de SparkFun(www.sparkfun.com/products/9729).
AdafruitWaveShieldv1.1Fabricant:Adafruit
Prix:20€
Brochesutilisées:13,12,11,10,5,4,3,2suruneUnoR3
La carteWaveShield (voir laFigure13-2) est un kit relativement peu onéreuxquivouspermetdejouerdelamusiqueetdusonavecvotreArduino.LaWaveShieldsaitliredesfichiers.WAVdirectementdepuisunecarteSD,cequipermetdetéléchargerdes fichiers facilement depuis votre ordinateur. Pour utiliser cette carte fille, vousavez besoin de la bibliothèqueWaveHC disponible sur la page produit ou via unerecherchesurGoogleCode(http://code.google.com/p/wavehc/).
LaWaveShieldestvenduesousformedekitàsouder.LelecteurdecarteSDutiliselesbroches13,12et11,carilsupportel’interfacesérieàgrandevitesse(SPI)quiestunprotocoleassurantuntransfertrapidedesdonnées.Labroche10estutiliséepourcommuniquer avec le lecteur SD et les broches 5, 4, 3 et 2 sont utilisées pour leséchangesavecleconvertisseurnumérique/analogique(DAC)quiconvertitlessignauxnumériquesensignauxanalogiques.
FIGURE13-2UnecarteaudioWaveShieldtotalementmontée.
Pour plus de détails, visitez la page produit(www.adafruit.com/products/94).Voustrouverezégalementdestutoriauxàl’adressewww.ladyada.net/make/waveshield/.
MP3PlayerShieldFabricant:SparkFun
Prix:30€
Brochesutilisées:13,12,11,9,8,7,6,5,4,3,2surUnoR3
VouspouveztransformervotreArduinoenlecteurMP3aveccettecartefillefacileàassembler ! Elle peut non seulement décoder les fichiersMP3,mais également lesformatsOggVorbis,ACC,WMAetMIDI.LacarteMP3disposed’unlecteurdecarteMicroSDfacilitantlechargementdesfichiersetunminijackde3,5mmpermetdelaraccorderàunhaut-parleur.
La carte fille MP3 (voir la Figure 13-3) est assemblée, mais nécessite quelquespetitessoudurespourconnecter leconnecteurHEauxbarrettesmâles.LelecteurdecarteSDutiliselesbroches13,12et11.Labroche9estutiliséepourdialogueraveclelecteurdecarteSD.Lesbroches8,7,6et2assurentleséchangesavecledécodeuraudioMP3VS1053B.Lesbroches4et3permettent l’ajoutdefonctionnalitésMIDIsupplémentaires.
FIGURE13-3UnkitdecartefilleMP3.
Pour plus de détails, visitez la page produit de SparkFun(www.sparkfun.com/products/10628).Vous trouverezdes tutoriaux sur lesujet à l’adresse www.sparkfun.com/tutoriels/295, mais ils sont assezanciens.Heureusement,lescommentairesdesutilisateursdecetutorielcorrigentbonnombredesproblèmesquevouspourriezrencontrer;unutilisateuramêmeécritunebibliothèquedefonctionspourvoussimplifierlavie!C’estunbonexempledecequepeutréaliserlacommunautéArduinopoursoutenirunproduit.
Liseztoujourslescommentairesetlesarticlesdesforumsconcernantlesproduitsetleskits.Cescommentairescontiennentsouventunemultitudededétails spécifiques.Assurez-vousjustedenepasposterunequestionquiadéjàétéposée,vousrisquezsinondevousvoirrenvoyeràlalecturedumanuel!
MIDIShieldFabricant:SparkFun
Prix:16€
Brochesutilisées:7,6,4,3,2,A1,A0surUnoR3
MIDI est l’acronyme de Musical Instrument Digital Interface, interface quirévolutionnal’industriedelamusiquedanslesannées80.Bienquecettetechnologiesoit relativeanciennemaintenant, leMIDI resteunbonstandardpourconnecterdesinstruments, des ordinateurs, des pédales d’effets, une pléthore d’autres appareilsdansledomainedusonmaisaussidelalumièreetdelapyrotechnie.AveccettecartefilleMIDI,vouspouvez interfacer toutcequiestcapabled’envoyerouderecevoirdesdonnéesMIDIpuisincorporercesdonnéesdansvotreprojetArduino.
MIDIShieldestvendusousformedekitàsouder.
Pour plus de détails, visitez la page produit de Sparkfun(www.sparkfun.com/products/9595).Voustrouverezd’excellentstutoriauxsur le MIDI à l’adresse (http://arduino.cc/en/Tutoriel/Midi ethttp://itp.nyu.edu/physcomp/Labs/MIDIOutput). Un grand nombrede ressources relatives au MIDI sont disponibles également aux adresses(www.tigoe.net/pcomp/code/communication/midi/ ethttp://hinton-instruments.co.uk/reference/midi/protocol/).
AfficheurRGBLCD16caractèressur2lignesFabricant:Adafruit
Prix:25$chezAdafruit(N.d.T.:indisponibleeneurosaumomentdelatraductiondulivre)
Brochesutilisées:A4etA5surUnoR3
CemodueécranLCD(affichageàcristaux liquides) trèspratique rassemble toutcequi vous est nécessaire sur une seule carte. Il s’agit du genre d’écran LCD quiéquipaitlespremierstéléphonesmobilesetlesanciennesconsolesdejeuxtellesquelaGameBoydeNintendo.Ilutiliseunfilmquivientrecouvrirunesurfacedecouleurunie généralement rétroéclairée. Les pixels de ce film peuvent être activés oudésactivés afin de créer des motifs, du texte ou des graphiques que vous pouvezcontrôler avec votre Arduino. Le cœur de cette carte fille est composé d’un LCDRGB,cequisignifiequevouspouvezaussijoueraveclescouleursdetoutelapaletteRVB.LerétroéclairageRVBestcontrôlédirectementparvotreArduino.Ils’agitd’unécran capable d’afficher 16 x 2 caractères (pas de graphiques) soit deux rangéesde16lettres.Enfonctiondumodequevouschoisissez,l’écranafficherasoitdutexteen couleur sur un fond sombre (négatif), soit un texte foncé sur un fond coloré(positif). Il existe une grande variété de cartes LCD capables d’afficher descaractères,aussi,assurez-vousdechoisirceluiquiconvientlemieuxàvoscritères.
LacartefilleRGBLCDestvendueenkitetnécessitedessoudures.Aulieud’utiliserneufbrochesouplus,vouspouvezn’enutiliserquedeuxpourcontrôler leLCD, lerétroéclairageetlesboutonsenutilisantleprotocoleI2Cpourcommuniqueraveclacarte fille, la broche 4 pour les données (SDA) et la broche 5 analogique pourl’horloge (SCL). Ce protocole est utilisé par de nombreux appareils, il est doncimportantdebienleconnaître.Pourenapprendredavantagesurl’I2C,reportez-vousà l’excellent tutoriel de John Boxall à l’adressehttp://tronixstuff.wordpress.com/2010/10/20/tutoriel-
arduino-and-the-i2c-bus/.
Ilexisteégalementdescartes fillesutilisant lamême technologie,maisquinevouslimitent pas au simple emploi de caractères alphanumériques. Si vous souhaitezaffichervospropresgraphiques,vouspouvezvous tournervers lacarteColorLCDdeSparkFunquiutiliseunécrandeNokia6100ouencoreverslacarteTFTTouch.
TFTTouchShieldFabricant:Adafruit
Prix:60€
Brochesutilisées:5,6,7,8,9,10,11,12,13,A0,A1,A2,A3
Si l’écran LCD ne couvre pas tous vos besoins, vous pouvez vous tourner vers lacartefilleTFTTouchpourajouteràvotreprojetunécrantactilecouleurcomplet.CetécranestunTFTLCD(unevariationdesécransLCDquiutiliseuntransistoràcouchemince (TFT) pour améliorer la qualité des images) qui possède une résolution
de240x320pixelsetuncodagedecouleurssur18bitspermettant262144couleursdifférentes.L’écran est équipé d’un panneau tactile résistif capable d’enregistrer lapressiond’undoigtn’importeoùsursasurface.
La carte fille TFT Touch est vendue totalement assemblée et ne requiert pas desoudure.EllepeutdonctrèssimplementêtreenfichéeausommetdevotreArduino.Lacartenécessitedetrèsnombreusesbrochespourfonctionneretnelaissedisponiblesquelesbrochesnumériques2et3etlesbrochesanalogiques4et5.Labroche12peutêtrerécupéréesivousn’utilisezpaslelecteurdecarteMicroSD.
Rendez-vous sur la page produit www.adafruit.com/products/376 et surhttp://learn.adafruit.com/2-8-tft-touch-shield où voustrouverez un tutoriel complet. Adafruit a très gentiment écrit une bibliothèquecomplète permettant de dessiner des pixels, des formes et du texte(https://github.com/adafruit/TFTLCDLibrary) ainsi qu’une autredestinéeà l’écran tactilequiest capablededétecter lesmouvementshorizontauxetverticaux ainsi que la pression (https://github.com/adafruit/Touch-Screen-Library).
JoystickShieldFabricant:SparkFun
Prix:12€
Brochesutilisées:2,3,4,5,6,A0,A1
LacartefilleJoystick(voirlaFigure13-4)disposedetouteslesfonctionnalitésd’uncontrôleurdejeumodernesuruneuniquecartecompatibleavecArduino.Elleoffrequatreboutonsassignablesainsiqu’unboutonsupplémentairecachédansleJoysticklui-même.Avecsonstickergonomique,vouspouvezeffectuerdestransitionsfluidesentrelesaxesxetypourgénérerdesmouvementstrèsprécis.
LacarteJoystickestvendueenkitetnécessitedessoudures.Ellen’utilisequecinqbroches numériques et deux analogiques, laissant ainsi les autres broches del’Arduinodisponibles.Lescinqboutonsutilisentlesbrochesde2à6.Lemouvementdujoystickestmesuréàl’aidededeuxpotentiomètresanalogiques:analog0quigèrelemouvementhorizontaletanalog1quigèrelemouvementvertical.
FIGURE13-4Lacartefilledejoystick.
Voustrouverezplusdedétailssur lapageproduitdeSparkFun(www.sparkfun.com/products/9760), ainsi qu’un tutoriel d’assemblage très complet(www.sparkfun.com/tutoriels/161) et un guide de démarrage rapide(www.sparkfun.com/tutoriels/171).
GameduinoFabricant:JamesBowman
Prix:59€
Brochesutilisées:9,11,12,13
Le processeur Atmel AVR de votre Arduino est bien plus puissant que celui desconsoles de jeux8bits des années80.C’est pourquoi JamesBowmanadécidéderéaliser sa propre carte fille pour tirer parti de cette puissance et pour réaliser unadaptateur de jeu pour Arduino : le Gameduino (voir la Figure 13-5). Avec ceGameduino,vouspouvezgénérerdesgraphiquessurunmoniteur,unprojecteuroutoutappareil compatible VGA grâce au connecteur VGA de la carte. La partie audioutiliseunconnecteurminijack3,5mm.VouspouvezassociercettecarteàlacartefilleJoystick décrite dans la section précédente pour créer un tout en un : console etcontrôleur.
FIGURE13-5LeGameduinos’associeparfaitementàunecartefilleJoystick.
LeGameduinoestvendutotalementassembléetprêtàl’emploi.Ilestconsidéréparl’ArduinocommeunSPI(SerialPeripheralInterface)etutilisequatrebrochespoursacommunication.
Pour plus de détails sur les périphériques SPI, rendez-vous à l’adresse(http://fr.wikipedia.org/wiki/Serial_Peripheral_Interface).Vous trouverez des informations plus spécifiques concernant l’Arduino surhttp://arduino.cc/en/Reference/SPI. Pour information, labroche 9 correspond à SEL ou SS (slave select), 11 àMOSI (master output, slaveinput),12àMISO(masterinput,slaveoutput)etla14àSCKOUSCLK:l’horlogesérie.
Une mine de ressources est disponible sur la page produit d’Arduino(http://excamera.com/sphinx/gameduino/). Commencez partéléchargerlescroquisd’exemples,pourvoircequ’ilestpossiblederéaliserdepuisl’adresse http://excamera.com/sphinx/ gameduino/samples/. LesnombreuxdétailsconcernantleGameduinonécessitentunelectureassiduepourbiencomprendrecetravaildepointe.Bonnechance!
AdafruitMotor/Stepper/ServoShieldKitv1.0Fabricant:Adafruit
Prix:24€
Brochesutilisées:3,4,5,6,7,8,9,10,11,12
Vousaimezlesmoteurs?Voussouhaitezlesessayertous?Cettecartefilleestfaitepour vous. La carte Adafruit Motor/ Stepper/Servo vous permet en effet de fairetourner tous les moteurs que vous voulez. Vous pouvez y connecter jusqu’à deuxservomoteursde5V,deuxmoteurspasàpasetquatreautresmoteurs.Lesborniersàvis simplifient grandement le raccordement desmoteurs, et comme il est importantaveclesmoteursdedisposerdesuffisammentdepuissance,unbornieràvispermetd’ajouterrapidementunealimentationexterneàvotreArduino.
La carte fille Adafruit Motor/Stepper/Servo est vendue en kit et nécessite dessoudures.Lesbroches4,7,8et12sont requisesencasd’utilisationdemoteurDCpour faire fonctionner la puce (74HC595) qui les contrôle. Les broches 3, 5,6 et 11 contrôlent individuellement la vitesse des moteurs DC ou pas à pas. Lesbroches 9 et 10 gèrent les servomoteurs connectés. Cela vous laisse les brochesnumériques 3 et 13 ainsi qu’une série complète de broches analogiques que vouspouvezutilisercommebrochesnumériquessinécessaire.
VoustrouverezdenombreuxdétailssurlapageproduitArduino(www.adafruit.com/products/81). Un tutoriel complet est disponible sur(www.ladyada.net/make/mshield/).Faitesattentionàlachargedesmoteurs,cette carte est conçue pour fournir 600 mA par moteur avec un courant de pointede1,2A.Sivousapprochezd’1A,ajoutezundissipateurdechaleur.
Iciencore,unebibliothèquedefonctionsfacilitantl’utilisationdesmoteursestfourniepar Adafruit. Vous la trouverez surwww.ladyada.net/make/mshield/download.html.
MotorShieldR3Fabricant:Arduino
Prix:25€
Brochesutilisées:3,8,9,11,12,13,A0,A1
La carte fille Arduino Motor est la carte moteur officielle conçue par l’équipeArduino.Ellepeutcontrôlerunnombreréduitdemoteurs,soitdeuxmoteursàcourantcontinu(DC),soitunmoteurpasàpasunipolaire,maisellepeutdélivreruneintensitéallantjusqu’à2Aparcanal,cequipermetuntravailconséquent.Elleestégalementcompatible avec le TinkerKit, qui est idéal lorsqu’il n’est pas envisageable dedénuder des fils ou de les souder ou pour des expérimentations rapides utilisantdifférentstypesdecapteurspourcontrôlervosmoteurs.
LacarteArduinoMotorShieldRev3estvenduecomplètementassembléeetprêteàl’emploi.Lesbrochesdel’ArduinoMotorShieldsontrépartiesselondeuxcanauxAet B. Chaque canal permet de fournir individuellement à deux moteurs DC quatrefonctionnalités : direction, vitesse, freinage et détection de courant. Lesbroches 12 et 13 contrôlent respectivement la direction de chacun des canaux ; lesbroches 3 et 11 contrôlent la vitesse de chaque moteur en utilisant PWM ; lesbroches 9 et 8 sont utilisées pour stopper brusquement le moteur ; lesbroches 0 et 1 peuvent être utilisées pour lire la charge courante des moteurs dechaquecanal;lasortieestde3,3Vpouruneintensitémaximalede2A.
Pouralimenterlesmoteurs,vousdevezutiliserunealimentationexternequipeutêtreconnectéeviaunbornier àvis sur la carte. Il est aussi intéressant denoter que lesfichessituéesausommetdelacartesontdestinéesaumoduleTinkerKitetqu’ellesnesontpassisimplesàutilisersil’onnedisposepasdesconnecteursappropriés.
Pourensavoirplussur l’ArduinoMotorShield, reportez-vousà lapageproduitdel’Arduino store (http://store.arduino.cc/ww/index. php ?
main_page=product_info&cPath=11_5&products_id=204). Voustrouverez plus de détails sur cette carte sur le site Arduino(http://arduino.cc/en/Main/ArduinoMotorShieldR3). DesinterrogationssurlesmodulesThinkerKit?Visitezwww.tinkerkit.com.
LiPowerShieldFabricant:SparkFun
Prix:22€
Brocheutilisée:3
Lesbatteries sont laclefpour rendrevosprojetsArduinoplusmobiles.Cettecartevouspermetd’utiliserdespilesaulithiumrechargeablesàlaplacedesvolumineusespiles de type AA. Bien que ces piles ne délivrent que 3,7 V, certains dispositifspermettentdelespousserjusqu’à5Vafinqu’ellespuissentalimentervotreArduino.
LacartefilleLiPowerestassemblée,maisnécessitequelquespetitessoudurespourfixerleconnecteurHE.Commecettecartefilleestlàpourdélivrerdelapuissanceetnonpourenconsommer,ellenenécessitequ’uneseulebroche.Labroche3peutêtreconfigurée pour déclencher une alarme, lorsque sa capacité tombe en dessousde32%.
Pour plus de détails, consultez la page produit de SparkFun(www.sparkfun.com/products/10711). Vous trouverez des notesintéressantes sur le matériel concernant la difficulté de charger des batteries aulithium ; lisez bien tous les commentaires accompagnant la description. D’autresdispositifs plus petits permettant de délivrer 3,7V sont disponibles (PolymerUSB
ChargerandBatterybySparkFun(www.sparkfun.com/products/9876)etleUSB/DC Lithium Polymer battery charger 5-12 V – 3,7/4,2 V par Adafruit(www.adafruit.com/products/280).
Ces appareils sont parfaits s’ils sont appariés avec des versions basse tensiond’Arduino telles que Pro Micro – 3,3 V/8 MHz(www.sparkfun.com/products/10999)ouArduinoPro328–3,3V/8MHz(www.sparkfun.com/products/10914).Ilss’avèrenttrèspratiqueslorsqu’ilestnécessairederéduire la tailledevotreprojetArduino.Notezqu’il faut toujoursprendredesprécautionsparticulièresavecdespilesaulithium.
GPSShieldRetailKitFabricant:SparkFun
Prix:45€
Brochesutilisées:0,1ou2,3(pardéfaut)
AveccettecarteGPS(Figure13-6),vouspouvezrapidementetsimplement injecterdesdonnéesdegéolocalisationdansvotreprojet.Vouspouvezainsidéterminervotreemplacementavecuneprécisiondequelquesmètresouréaliseruneœuvreartistiquebasée survosdéplacementsdumois.Cettecartevous fourniraégalementuneheureextrêmementprécise.
FIGURE13-6LacartefilleGPSSparkFunincluantlecircuitEM-406a.
La carteGPS est proposéemontée,mais nécessite quelques soudures. Les donnéesprovenantdumoduleGPSpeuventêtresoitconnectéesdirectementsur l’UARTafind’envoyer les données de géolocalisation vers la RX de l’Arduino et les brochesTX 0 et 1, soit sur DLINE pour envoyer les données sur les brochesnumériques2et3(pardéfaut).Ducodenepeutêtreenvoyéversl’Arduinoques’ilestconfigurésurDLINE.
NotezquelekitestvenduavecsonmoduleGPS.LacarteestconçuepourlemoduleEM-406a(www.sparkfun.com/pro-ducts/465).
Vous pouvez utiliser d’autres modules comme les EM-408 et EB-85A, mais vousdevrezaussiacheterleconnecteurappropriéséparément.
Pour plus de détails, visitez la page produit de SparkFun(www.sparkfun.com/products/10710). Vous trouverez également unexcellent guide de démarrage (www.sparkfun.com/tutoriels/173/) quivouspermettradeprendrelacarteenmainenpeudetemps.SparkFunproposeaussiun excellent guide d’achat pour GPS(www.sparkfun.com/pages/GPS_Guide).
GPSLoggerShieldKitv1.1Fabricant:Adafruit
Prix:40€
Brochesutilisées:10,11,12,13etdeuxautresbrochesquelconques
LacartefilleGPSLoggervouspermetderetrouveretdestokerdesinformationsdegéolocalisation en utilisant le Global Positioning System. Vous pouvez ainsidéterminervotreemplacementavecuneprécisiondequelquesmètresouréaliseruneœuvre artistique situationnelle. Cette carte vous fournira également une référencetemporelle très précise.Les données sont stockées sur une carteSD sous formedefichiertexteetpeuventêtresuperposéessurGoogleMapsouvisualiséespard’autreslogiciels.
Aveclacapacité(toujourscroissante)descartesSD,vousêtesenmesuredestockerbeaucoup plus d’informations que ne peut le faire votre Arduino dans samémoireinterne. Ce point est particulièrement intéressant, car elle permet à votre appareilmobile d’enregistrer des données sans avoir recours à un ordinateur, ce qui vouspermetdelaisseràlamaisonvotreordinateurencombrantpendantquevotreappareilGPSparcourtlemonde!
L’Adafruit GPS Logger Shield Kit est un kit qui nécessite des soudures. Lesbroches 10, 11, 12 et 13 sont employées pour la communication avec la carte SD.Cependant,lemoduleGPSlui-mêmenerequiertquequelquesbrochesconnectéespardes straps. Les broches RX et TX doivent être connectées sur deux broches
numériques telles que les broches 2 et 3. Vous pouvez activer d’autres fonctionsnumériquescommeparexempleuneLEDsignalantl’enregistrementdesdonnées,unebroche surveillant le signal de synchronisation GPS ou une broche détectant laprésenced’unecartedanslelecteur.
Notezqu’ilvousfaudraacquérirlesmodulesGPSetSDséparément.Cettecarteestconçue pour le module EM-406a (www.adafruit.com/products/99), maisfonctionne avec une variété d’autres modules(http://ladyada.net/make/gpsshield/modules.html).
Vous pouvez obtenir la carte et d’autres informations chez Adafruit(www.adafruit.com/products/98).UntutorielapprofondiestdisponiblesurlesiteLadyada(www.ladyada.net/make/gpsshield/)quipasseenrevuetous lespoints allantde la constructiondukit au codeArduinopour lagestiondesdonnéesGPS.
WirelessProtoShieldetWirelessSDShieldRéaliséespar:Arduino
Prix:25€
Brochesutilisées:0et1pourleWirelessProtoShield;
0,1,4,11,12,13pourleWirelessShieldSD
L’ArduinoWireless Proto Shield permet de créer un réseau de dispositifs sans filutilisant des modules radio XBee. Ces modules, très polyvalents, fiables etabordables sont utilisés pour relier plusieurs cartes Arduino afin de créer votrepropreréseaudecapteurssansfil.LacartefilleWirelessShieldSDoffreégalementlapossibilitédestockerdesdonnéesquevouspouvezcollecterdevotreréseaupourles visualiser ensuite sur un ordinateur. Chaque carte fille dispose d’un grandemplacementquipermetd’ajouterplusieurscapteursoud’actionneursàvotreprojet.
LeWirelessShieldetleWirelessShieldSDsontvenduesentièrementassembléesetprêtes à l’emploi. Les cartes filles communiquent avec les croquis situés surl’Arduino ou via l’USB.Vous pouvez alterner entre ces deuxmodes en utilisant lasérie.Si vousdisposezde laWirelessShieldSD, les broches4, 11, 12 et 13 sontutiliséesparcettedernièrepourcommuniqueretnesontdoncplusdisponiblespourd’autresfonctions.
NotezquevousdevrezacquérirlemoduleXBeeséparément.LemoduleXBee1mWChipAntenna-Series1(802.15.4)estunbonchoixpourdémarreretestdisponiblechezRSComponents(http://uk.rs-online.com/web/p/zigbee-ieee-802154/0102715/) et SparkFun (www.sparkfun.com/products/8664).SparkFundisposeenanglaisd’unguided’achatdetrèsbonnequalité,quivoussera
utile si vous faites vos premiers pas dans le monde des réseaux sans fil(www.sparkfun.com/pages/xbee_guide).
La page produit d’Arduino propose plus de détails sur la carte fille(http://arduino. cc/en/Main/ArduinoWirelessShield), voustrouverez un tutoriel sur la communication via XBee 1mW ChipAntenna - Series 1 (802.15.4) sur le site Arduino(http://arduino.cc/en/Guide/ArduinoWirelessShield).
EthernetShieldR3etEthernetShieldR3withPoEFabricant:Arduino
Prix:29€
Brochesutilisées:4,10,11,12,13
LacartefilleEthernet(voirlaFigure13-7)permetàvotreArduinod’échangeravecInternet sans avoir recours à un ordinateur. Votre Arduino peut donc lui aussicontribueràenrichirlamontagnededonnéessurInternet.IlpeutsurveillerTwitteretréagir aux hashtags ou téléverser des données issues de capteurs pour les rendredisponibles au reste du monde. La carte dispose de son propre lecteur microSDpermettant d’enregistrer les résultats ou de stocker des fichiers qui seront ensuitedistribués sur le Web. La version R3, la plus récente, propose quelques brochessupplémentairespourassurerlacompatibilitéavecleUnoR3.
FIGURE13-7UnecartefilleEthernet(sanslemodulePoE).
L’Ethernet Shield R3 with Power-over-Ethernet (PoE) inclut un modulesupplémentaire disposé en diagonale sur la carte. Il s’agit d’un module PoE quipermetd’alimenter l’Arduinoàpartir du câbleEthernet.Conformément au standardIEEE 802.3af PoE, il faut pour cela disposer d’un câble Ethernet decatégorie5(CAT5).LeshubsetlesrouteursdomestiquesnesupportentgénéralementpaslePoE,maisils’agitd’unetechnologieintéressante.
L’Ethernet Shield R3 et Ethernet Shield R3 with PoE sont vendues entièrementassemblées et prêtes à l’emploi. Les broches 4, 11 et 13 sont utilisées pourcommuniquer avec la carte SD de la carte fille et ne peuvent être utilisées pourd’autresfonctions.
Vous obtiendrez plus de précisions sur ce produit à la pagehttp://arduino.cc/en/Main/ArduinoEthernetShield et sur lesbibliothèques Ethernet surhttp://arduino.cc/en/Reference/Ethernet.
WifiShieldFabricant:Arduino
Prix:69€
Brochesutilisées:4,7,10,11,12,13
LaWifiShield(voirlaFigure13-8)permetdevousconnectersansfilsurunhubouuneborneWi-Fi,cequiesttrèsutilesivousn’avezpasaccèsàunportEthernetousivous souhaitez rendre votre projet plus mobile. La carte dispose également d’unlecteurmicroSDquivouspermetdesauverdesrésultatsoud’enregistrerdesfichiersquevoussouhaitezrendredisponiblessurInternet.
FIGURE13-8LacartefilleArduinoWifi.
LacarteWifiShieldestvendueassembléeetprêteàl’emploi.L’ArduinocommuniqueaveccettedernièregrâceauprocesseurWifiShieldet au lecteurdecartemicroSDvia le bus SPI et les broches 11, 12 et 13.Vous pouvez utiliser la broche 10 poursélectionner le processeur de la carteWiFi Shield (HDG104) et la broche 4 poursélectionner la carte microSD. La broche 7 est employée pour le protocole – leprocessusquipermetdemettreenœuvrelacommunicationentredeuxappareils,dansnotrecasentrel’ArduinoetlaWifiShield.
Vous trouverez plus de détails concernant la Wifi Shield sur la page produit del’Arduino (http://arduino.cc/en/Main/Ar-duinoWiFiShield). IlexisteunexcellenttutorielquivousaideraàdémarreraveclaWifiShieldàl’adressehttp://arduino.cc/en/Guide/ArduinoWiFiShield. La bibliothèqueWi-Fi est décrite en détail sur la page de Référence d’Arduino à l’adressehttp://arduino.cc/en/Reference/WiFi.
CellularShieldavecSM5100B
Fabricant:SparkFun
Prix:75€
Brochesutilisées:0,1or2,3(pardéfaut)
LacarteCellularShield(voir laFigure13-9) transformevotremodesteArduinoentéléphonecellulaireportable.Aveccettecarte,vouspouvezenvoyeretrecevoirdesappels, desmessages textuels etmême des données.Vous n’avez besoin que d’unecarteSIMprépayéeetd’uneantennepourêtreprêtàcommuniqueravec le restedumonde.AveclafonctionSerial.print(),vouspouvezenvoyerlescodesadéquatspourcommuniqueravecleSM5100B.
La carte Cellular avec SM5100B est vendue entièrement assemblée et prête àl’emploi.Ilvousfautacheteruneantennedisposantd’unconnecteurSMBcommelaQuad-band Cellular Duck Antenna SMA(www.sparkfun.com/products/675) de SparkFun. L’Arduino communiqueavec leSM5100Bvia les brochesRXetTC0 et 1, ou enutilisant la bibliothèqueSoftwareSerial,via lesbroches2et3.Elles sont sélectionnéespardéfaut,mais cechoixpeutêtreconfigurépardescavalierssituéssurlacarte.
LacarteSIMdoitdisposerdesuffisammentdecréditspourréaliserceàquoivousladestinez. Les offres illimitées de messages textuels sont particulièrement utiles.D’autresoptions,tellesquelaprésenced’unmicrooud’unhaut-parleur,sontrequisescar sans elles vous ne serez pas capable de faire autre chose que d’appeler et deraccrocher.
FIGURE13-9LacartefilleCellular.
Vous trouverez plus d’informations sur la page produit de SparkFun(www.sparkfun.com/products/9607). Cette page propose un croquisd’exemple,maispourdisposerd’unevraieintroductionauGSM,jevousrecommandede vous rendre sur le site de John Boxall(http://tronixstuff.wordpress.com/2011/01/19/tutoriel-arduino-and-gsm-cellular-part-one/).
GeigerCounter–RadiationSensorBoardFabricant:Liberium
Prix:170$chezMicroControllerPros.
Brochesnécessaires:2,3,4,5,6,7,8,9,10,11,12,13
LaRadiationSensorBoard est probablementunedes cartes fillesArduino lesplusimpressionnantes. Elle vous permet de surveiller le niveau de radiation dans unenvironnement.CettecarteaétéréaliséepouraiderlesJaponaisàvérifierleniveauderadiationsuiteà lacatastrophedeFukushimaenmars2011.LecompteurGeiger
peut utiliser différents tubes Geiger afin de détecter différents types et niveaux deradiations. Elle dispose également, pour renvoyer des informations, d’un affichageLCD,d’uneLEDetd’unhaut-parleurpiézo.
Cette carte utilise des tubes Geiger qui fonctionnent à des tensions dangereuses(400V-1000V)etquirequièrentdoncbeaucoupdeprudencedansleurmanipulation.Ilestpréférabledeconservercettecartedansunboîtierétancheafindeprévenirtoutcontacthumain.Lesradiationssontdangereuses,maisl’électricitél’estaussi,sivousnevoyezpasdequoijeparle,passezvotrechemin!
Lehaut-parleurpiézoetlesLEDsontconnectésàlabroche2,ilssontdéclenchésàchaque impulsion générée par le tube Geiger. En fonction du tube employé et dunombre de pulsations par minute (cpm), vous pouvez déterminer le niveau deradiation exprimé en Sieverts par heure. Les broches 3 et 8 sont utilisées pourl’affichage LCD afin d’afficher le détail de la lecture du capteur. Lesbroches 9 et 13 sont utilisées pour les LED bar qui permettent d’obtenir un retourvisuel sanséquivoqueduniveaude radiation.Les troispremièresLEDsontvertes,lesdeuxdernièressontrouges.
Des informationssupplémentairessurceprojet sontdisponiblessur lapageproduitde Cooking Hack à l’adresse www.cooking-
hacks.com/index.php/documentation/tutoriels/geiger-coun-
ter-arduino-radiation-sensor-board).
PourresterinforméBeaucoup d’autres cartes filles sont disponibles et de nombreuses sont créées ouamélioréessanscesse.Voiciquelquesconseilspourresteràlapage.
Rendez-vous régulièrement dans les boutiques pour y voir leurs derniers produits.C’estunpeucommedansunmagasindebricolage,vousnesavezjamaiscequevousallezytrouver.
» ArduinoStore(http://store.arduino.cc)
» Adafruit(www.adafruit.com)
» MakerShed(www.makershed.com)
» SeeedStudio(www.seeedstudio.com)
» SparkFun(www.sparkfun.com)
Rendez-vouségalementrégulièrementsurlesblogsconsacrésàArduino;ilstraitentsouvent des nouveaux kits et applications et constituent une bonne source
d’inspiration.
» ArduinoBlog(http://arduino.cc/blog)
» Adafruit(www.adafruit.com/blog)
» HackADay(http://hackaday.com)
» Make(http://blog.makezine.com)
» SeeedStudio(www.seeedstudio.com/blog)
» SparkFun(www.sparkfun.com/news)
Certainsontfaitl’effortdedocumenterdescartesfilles,rendez-leurvisite:
» ArduinoPlayground
(www.arduino.cc/playground/Main/Sim-
ilarBoards#goShie)
» ArduinoShieldList(http://shieldlist.org)
Tirezprofitdesbibliothèques(librairies)Les croquis basiques peuvent vous mener déjà loin. Cependant, lorsque vousdeviendrezplus aguerri, vousdevrez en apprendredavantage sur les bibliothèques.Unebibliothèque (mais on parle aussi de librairie) regroupe un certain nombre defonctionsdirectementutilisablespouraugmenterlespossibilitésdevoscroquis,soiten permettant d’utiliser du matériel spécifique, soit en fournissant des fonctionscomplexes. Ainsi, de la même manière qu’une bibliothèque physique contient desconnaissances,vousajoutezunebibliothèqueàvotreArduinopourluifaireacquérirdedenouvellescapacités.Enajoutantunebibliothèqueàvoscroquis,vouspouvezrapidementetsimplementutiliserdesfonctionsquivouspermettrontd’atteindrevosbutsplusrapidement.
Débuter avec du matériel et un logiciel complexe peut s’avérer difficile.Heureusement, de nombreuses personnes ont pris le temps de documenter leurprogression et ajoutent souvent à leurs bibliothèques des exemples pouvant êtreaisément intégrés à vos propres croquis. À partir de ce point, il est possible deréaliserquelquechosede fonctionnel,etenvousaccrochant,demieuxcomprendre.C’est cette approche basée sur l’expérimentation qui vous permet de réaliserrapidementdegrandsprogrèsconcernantlelogicieletlematériel.
LesbibliothèquesstandardCette section présente une sélection des bibliothèques fournies avec la versionactuelled’Arduino(1.0.1àl’heureoùnousécrivonscetouvrage).Lesbibliothèquesstandard couvrent une vaste gamme de domaines qui correspondent à des sujetspopulaires et bien documentés. Vous pouvez trouver ces bibliothèques en ouvrantCroquis->Importerbibliothèque. Sélectionner une bibliothèque ajoute une ligne audébutdevotrecroquisdelamanièresuivante#include<EEPROM.h>,lefichier.h étant le fichier d’en-tête de la bibliothèque.Avant de comprendre commentfonctionne une bibliothèque, choisissez un exemple et testez-le. Vous en trouverezdanslesous-menuFichier->Exemples.
Voiciunebrèvedescriptiondecesbibliothèquesstandard:
» EEPROM(http://arduino.cc/en/Reference/EEPRO):Votre
Arduinoestéquipéd’uncircuitmémoireEEPROM(Electrically
ErasableProgrammableRead-OnlyMemory)quiassureunstockage
permanent.Lesdonnéesstockéesdanscetemplacement
demeurentmêmesivouséteignezvotreArduino.Enutilisantla
bibliothèqueEEPROM,vouspourrezlireetécriredesdonnéesdans
cecircuitmémoire.
» Ethernet(http://arduino.cc/en/Reference/Ethernet):Si
vousdisposezd’unecartefilleEthernet,labibliothèqueEthernet
vouspermetdecommuniquersimplementetrapidementavec
Internet.Cettebibliothèquepermetmêmed’utiliservotreArduino
commeserveurWebouentantqueclient.
» Firmata(http://arduino.cc/en/Reference/Firmata):
FirmataoffreunmoyendecontrôlervotreArduinoviaunlogiciel
d’ordinateur.Ils’agitd’unprotocoledecommunicationstandard.
Adoptercettebibliothèquevousévitededevoircréervotrelogiciel
decommunication.
» LiquidCrystal
(http://arduino.cc/en/Reference/LiquidCrys-tal):La
bibliothèqueLiquidCrystalvouspermetdefairecommuniquervotre
Arduinoaveclaplupartdesécransàcristauxliquides.Cette
bibliothèqueestbaséesurlepiloteHitachiHD44780quigèredes
écransfacilementidentifiablesàleurinterface16broches.
» SPI(http://arduino.cc/en/Reference/SPI):LaSerial
PeripheralInterface(SPI)estunprotocoledecommunicationqui
permetàvotreArduinodecommuniquertrèsrapidementavec
d’autresappareilssurdecourtesdistances.Ilpeuts’agirderecevoir
desdonnéesd’uncapteur,d’échangeravecdespériphériquestels
qu’unecarteSDouunautremicrocontrôleur.
» SD(http://arduino.cc/en/Reference/SD):Labibliothèque
SDpermetdelireetd’écriresurunecarteSDoumicro-SDinsérée
dansvotreArduino.LescartesSDexploitentSPIpourtransférerles
donnéesrapidementenutilisantlesbroches11,12et13et
éventuellementunebrochesupplémentairepoursélectionnerla
carteSD.
» Servo(http://arduino.cc/en/Reference/Servo):La
bibliothèqueServopermetdecontrôlerjusqu’à12servomoteurs
avecunUnoR3(etjusqu’à48avecunMega).Laplupartdesservos
pouramateurstournentsur180degrés;vouspouvezspécifierla
rotationduservoendegrésenutilisantcettebibliothèque.
» SoftwareSerial
(http://arduino.cc/en/Reference/SoftwareSerial):La
bibliothèqueSoftwareSerialpermetd’utilisern’importequelle
brochenumériquepourenvoyeretrecevoirdesmessagessérie,
venantainsiremplaceroucompléterlestraditionnelles
broches0et1.Celapermetdelibérerdesbrochespourla
communicationavecunordinateurafindedisposerd’une
connexionpermanentepourledébogage,toutenrestanten
mesuredetéléverserdenouveauxcroquis.
» Stepper(http://arduino.cc/en/Reference/Stepper):La
bibliothèqueStepperpermetdecontrôlerdesmoteurspasàpas
depuisArduino.Cecodenécessiteunmatérielapproprié;voyezles
notesdeTomIgosurlesujet
(www.tigoe.net/pcomp/code/circuits/motors/stepper-
motors/).
» Wi-Fi(http://arduino.cc/en/Reference/WiFi):La
bibliothèqueWi-FiestbaséesurlabibliothèqueEthernetprésentée
précédemment.Elleintègredesmodificationsspécifiquespourla
carteWi-FiquipermetuneconnexionsansfilàInternet.La
bibliothèqueWi-FifonctionneégalementaveclabibliothèqueSDce
quipermetdestockerdesdonnéessurlacarte.
» Wire(http://arduino.cc/en/Reference/Wire):La
bibliothèqueWirepermetàvotreArduinodecommuniqueravecles
appareilsI2C(connuségalementsouslenomdeTWI(two-wire
interface)).CesappareilspeuventêtreparexempledesLED
adressablesoudesNunchukWii.
InstallerunebibliothèqueadditionnelleDenombreusesbibliothèquesnesontpasinclusesdanslelogicielArduino.Certainessont dédiées à des appareils spécifiques ; d’autres sont des améliorations ou desadaptationsdebibliothèquesexistantes.Arduinopermetd’ajoutercesbibliothèquessifacilementquevouspouvezrapidementlesessayerpourvoirsiellescorrespondentàvosbesoins.
Unebibliothèque est en général distribuée sous formed’un fichier d’archive.zipportant le même nom que la bibliothèque. Ainsi la bibliothèque CapSense seradistribuéedanslefichierCapSense.zip.Lenompeutcomporterunnumérodeversioncomme dans CapSense-1.0.1 ou CapSense_20120930. Ces versions numérotéespermettentdechoisirfacilemententreladernièreversionouuneversionspécifique.
L’archivedécompresséeproduitundossiercontenantdesfichiersseterminantpar.het.cpptelsqueCapPin.hetCapPin.cppetparfoisdesdossiersd’exemples.
Dans la dernière version d’Arduino (1.0.1 à l’heure où nous écrivons ces lignes),ajouter une bibliothèque est très simple. Déposez simplement le dossier de labibliothèquedansvotredossierdescroquisArduino.
SousMacOSX,celaseprésentecommececi:
~/Documents/Arduino/libraries/CapSense/CapPin.h
~/Documents/Arduino/libraries/CapSense/CapPin.cpp
~/Documents/Arduino/libraries/CapSense/examples
SousWindows:
MyDocuments/Arduino/libraries/CapSense/CapPin.h
MyDocuments/Arduino/libraries/CapSense/CapPin.cpp
MyDocuments/Arduino/libraries/CapSense/examples
Unefoislabibliothèqueinstallée,redémarrezvotreArduinoetsélectionnezCroquis->Importerbibliothèquepourvoirsiellesetrouvebiendanslaliste(Figure13-10).La bibliothèque ne fonctionnera pas si les fichiers ne se trouvent pas dans le bondossierousisonnomaétémodifié.
FIGURE13-10LemenuArduinoaffichelesbibliothèquesdanslalistedéroulanteImporterbibliothèque.
Silabibliothèquedisposed’undossierd’exemples,vousdevrezêtreenmesuredelevoirdansFichier->Exemplessousunnomdesous-menucorrespondantàceluidelabibliothèque(Figure13-11).
FIGURE13-11Sidesexemplessontdisponiblesaveclabibliothèque,vousverrezunsous-menudemêmenom.
C’est tout ce qu’il faut faire pour installer une bibliothèque. La suppression d’unebibliothèqueest encoreplus simple, il suffit de supprimer ledossier correspondantdansledossierdescroquisd’Arduino.
RécupérerunebibliothèquedecontributeurVous trouverez une longue liste de bibliothèques créées par des contributeurs de lacommunauté sur la page des bibliothèques d’Arduino à l’adressehttp://arduino.cc/en/Reference/Libraries.Unelisteexhaustiveestdisponibleàhttp://arduino.cc/play-ground/Main/LibraryList.
CapSenseetTimerOnesontdeuxbibliothèquestrèsutilesetcommunémentutilisées:
» CapSense(www.arduino.cc/playground/Main/CapSense):
CapSensepermetdecréeruncapteurcapacitifàpartird’uneou
plusieursbrochesdevotreArduino.Vouspouvezainsiréaliserun
capteurtactileouuncapteurdeprésencetrèsrapidementavecpeu
dematériel.LapageArduinoPlaygroundproposebeaucoup
d’informationstrèsutiles,cependantvoustrouverezuneversion
plusrécenteducodesurGitHub
(https://github.com/moderndevice/CapSense).
» TimerOne(http://playground.arduino.cc//Code/Timer1):
TimerOneouTimer1utiliseunehorlogematérielledevotreArduino
pourdéclencherdesévénementsàintervallesréguliers.Cette
bibliothèqueestbienadaptéeàlalecturedesdonnéesdescapteurs
àintervallesrégulierssansinterromprelesprocessusdelaboucle
principale.IlexisteunepagedédiéeàcettebibliothèquesurArduino
Playground,lecodemisàjourestdisponiblesurGoogleCode
(http://code.google.com/p/arduino-timerone/).
Sivousêtesvraimentdésireuxd’ensavoirplussurlesbibliothèques,voired’écrirelavôtre,renseignez-voussurleWebetlisezl’articlesuivantconcernantl’écrituredebibliothèque sur la page d’Arduino à l’adressehttp://arduino.cc/en/Hacking/LibraryTutoriel.
D
Chapitre14Capterplusd’entréesetcontrôlerplusdesorties
DANSCECHAPITRE
» MultiplierlesentréesetsortiesavecunecarteMega2560
» Utiliserunregistreàdécalage
» Apprendreàcompterenbinaire
isposerd’unesortieetd’uneentréec’estdéjàbien,c’estmêmeparfoissuffisantpourvotreprojet.Maisilestsouventutiledepouvoirgérerplusieurscapteursoucontrôleurs,doncungrandnombred’entrées/sorties.Denombreusesinstallations
artistiquesnumériques sonten faitbasées surdesactionsassez simples ; leurvraiecomplexité est liée à la nécessité de gérer ces actions pour des centaines ou desmilliersd’éléments.
Danscechapitre,vousdécouvrirezcomment réaliserungrandnombred’opérationssimultanément avec votreArduino. Pour cela, vous utiliserez une carte plus grandequeleUno,l’ArduinoMega2560etdumatérielspécifiquecapabled’augmenterlescapacités de l’Arduino standard.Vous découvrirez les points positifs et négatifs dechacunedecesdeuxapproches.VousserezarmépourréaliserunprojetArduinodegrandeampleur.
ContrôlerplusieursLEDUne des méthodes les plus simples pour étendre votre projet Arduino consiste àutiliser la carteArduinoMega 2560. Cette carte, illustrée à la Figure 14-1, met àvotre disposition beaucoup de broches supplémentaires. Jugez-en vous-même : 54brochesI/Onumériques,15brochesPWMet16brochesanalogiques.
FIGURE14-1LacarteArduinoMega2560.
AveclaMega2560,vousdisposezdoncdeplusd’espaced’entrées/sorties.Maiscen’estpastout.LaMegadisposedequatreportssériesmatérielsquivouspermettentdecommuniquersimultanémentavecdemultiplesappareilsensérie.Cedernierpointest très appréciable car il permetdedédier la ligneUSBsérie à la communicationavecunordinateursansperturberlesconnexionsaveclesappareilsséries.
TouscesmoyensdecommunicationsontrenduspossiblesgrâceaumicroprocesseurATmega2560 de la carte. Si vous comparez la Mega 2560 à la Uno, la premièredifférenceremarquableestl’apparence.LapucecentraledelaUnoR3,leprocesseurATmega328,ressembleàunmille-pattes.C’estunboîtierdualin-line(DIPouDIL);iladeux lignesdebrochesparallèles.Sinousobservonsmaintenant lecentrede lacarteMega2560,nousvoyonsquelapuceestcarrée.C’estunboîtierquadlineplat(QFP),avecquatrejeuxdebrochesetunprofiltrèsplat.Plusspécifiquement,ils’agiticid’unboîtierthinquatflat(TQFP).VouspouvezvoirlesdeuxpucesàlaFigure14-2.
Le format physique n’est pas la seule différence ; les noms des puces sont aussilégèrement différents. Le nom du microcontrôleur est imprimé sur le dessus duboîtier:surlaUnovouspouvezlireATMEGA328PalorsquesurlaMega,ilestécritATMEGA2560 16-AU (les noms sont peut-être visibles dans la Figure 14-2). Ces
référencespermettentdeconnaîtrelacapacitémémoiredespuces.Lesdeuxnombresimportants sont 328 et 2560 qui correspondent à la quantité de mémoire flashdisponible, 32 Ko et 256 Ko respectivement. La mémoire flash est utilisée pourstocker les croquis. LaMega 2560 dispose donc de huit fois plus d’espace que laUno,cequis’avèreparticulièrementutilepourunprogrammequiexploitebeaucoupdedonnées.
FIGURE14-2BoîtierDIPdel’UnoetTQFPdelaMega.
PourvousfamiliariseraveclaMega,jetezunœilàladispositiondesbrochessurlacarteprésentéeàlaFigure14-3.Lamajeurepartiedelacarteestsimilaireàcelledel’Uno,maisremarquezleblocdebrochessituéàl’extrémité.Ilnefautpasutiliserlesbroches 5V etGND à la place des broches numériques.De plus, certaines cartesfilles nécessitant d’être modifiées pour fonctionner avec la Mega 2560, lisez lesinstructionsavecattention.
FIGURE14-3DescriptiondelacarteMega2560.
RéaliserleprojetAnalogWriteMegaDanscetexemple,vousallezapprendreàréaliserunebarredelumièresLED.CommelaMega2560disposepotentiellementde15brochesPWM,c’estunappareilparfaitpour contrôler avec précision de nombreuses sorties analogiques. Le croquisAnalogWriteMegapermetderéaliserdestransitionsdoucesentrelesLED.
Pourceprojet,ilvousfaut:
» UnArduinoMega2560
» Uneplatined’essai
» DouzeLED
» Douzerésistances220Ω
» Desstraps
Comme la réalisation de ce circuit est très répétitive, utilisez des fils de couleursdifférentespouryvoirplusclair.Enchoisissant lesLEDet lesrésistances,vérifiezvoscalculs.LesLEDstandardde3et5mmrequièrentdans laplupartdeskitsunetensionde2,5Vetconsomment25mAalorsquelesbrochesnumériquesdel’Arduinopeuventfourniraumaximum5V.
Cequel’onpeutrésumerpar:
(5V–2,5V)/0,025A=100Ω
Unerésistancede100ohmsestdonclavaleurexactepourutiliseruneLEDjusqu’àsapuissancemaximalerecommandée,maisenutilisantunerésistancede220ohmsvousneprenezaucunrisqueetprolongezladuréedevieducomposant.Unerèglegénéralepourchoisirunerésistanceconsisteàenchoisirunedontlavaleurestimmédiatementsupérieureàlavaleurcalculée.SivoustrouvezquelaLEDn’éclairepasassez,vouspouvez soit utiliser des résistancesplusprochesde lavaleuroptimale, soit utiliserdesLEDplusbrillantes.
Après avoir réuni vos LED, résistances et straps, assemblez le circuit commel’illustrentlesFigures14-4et14-5.Ilestcomposéde12petitscircuitsidentiquesoùchaquebrochedel’ArduinoMegaestconnectéeàunerésistancede220ohms,puisàl’anode(grandepatte)delaLED,lacathode(pattecourte)étantconnectéeàlamasse.
Aprèsavoirmontélecircuit,chargezlecroquisappropriédansl’atelierArduinoenchoisissant Fichier->Exemples->03.Analog->AnalogWriteMega. Ce croquisexploitenotammentlafonctionanalogWrite().
Lecodeducroquisestlesuivant:
FIGURE14-4UnesériededouzeLEDraccordéesàlacarteMega.
/*
MegaanalogWrite()test
Cecroquisfaitvarierl’intensitédesLEDuneàune
sur
lesbrochesnumériques2à13.Cecroquisquiest
écrit
pourArduinoMega,nefonctionnepassurlescartes
pré-
cédentes.
Lecircuit:
*DouzeLEDconnectéesauxbroches2à13.
crééle8Févr2009
parTomIgoe
Cecodeexempleestdansledomainepublic.
*/
//Constantes
constintlowestPin=2;
constinthighestPin=13;
//Configuration
voidsetup(){
//Définitlesbrochesde2à13commesorties
FIGURE14-5SchémaducircuitducontrôleurdeLED.
thisPin++){
pinMode(thisPin,OUTPUT);
}
}
voidloop(){
//Parcourttouteslesbroches
for(intthisPin=lowestPin;thisPin<=
highestPin;
thisPin++){
//FaitpasserlaLEDthisPindeéteinteà
allumée
for(intbrightness=0;brightness<255;
bright-
ness++){
analogWrite(thisPin,brightness);
delay(2);
}
//FaitvarierlaLEDthisPindealluméeà
éteinte
for(intbrightness=255;brightness>=0;
bright-
ness--){
analogWrite(thisPin,brightness);
delay(2);
}
//Pause
delay(100);
}
}
Si votre croquis se charge correctement, vous verrez toutes les LED s’allumer ets’éteindreprogressivementlesunesaprèslesautres,puisrecommencer.
Sicelanesepassepasainsi,revérifiezvoscâblages:
» Assurez-vousdebienutiliserlesbonsnumérosdebrocheset
vérifiezlesconnexionssurlaplatined’essai.
» VérifiezquevosLEDsontreliéescorrectementaveclapattelongue
reliéeàlarésistanceetlacourtereliéeàlamasse.
ComprendrelecroquisAnalogWriteMega
CecroquisestsemblableaucroquisAnalogWriteduChapitre7,maislesinstructionssonticirépétéesdenombreusesfois.Avecunebouclefor,ilestpossiblederépéterunetâchesansavoiràréécrirelesmêmesinstructionspourchaqueLED.
Audébutducroquis,vousdéclarezlesconstantes.Plutôtquededéclarer12valeurs,vouspouveznedéclarerquelesvaleurshighestPinetlowestPincarlacartedisposede12brochesPWMalignéesdelabroche2àlabroche13.
constintlowestPin=2;
constinthighestPin=13;
Dans la fonction de configuration setup(), les broches sont définies dans la boucleforen tant que sorties.Comme les numéros des broches se suivent, vous pouvezutiliserlavaleurducompteurpourlesdésignerenchoisirlemodeOUTPUT.
Danslaboucle,lavariablelocalethisPinestdéclaréecommeunentierintdontla valeur initiale est égale à lowestPin. C’est le point de départ. La variablethisPinestensuitecomparéeàhighestPin.TantquethisPinestinférieureou égale (<=) à highestPin, la broche numérique ayant le même numéro estdéfiniecommesortiepuisthisPinestincrémentéedeunpourleprochaintourdeboucle. Ce processus définit rapidement toutes les broches en tant que sorties etn’utiliseque2lignesdecodeaulieude12.
voidsetup(){
//Définitlesbrochesde2à13commesorties
for(intthisPin=lowestPin;thisPin<=
highestPin;
thisPin++){
pinMode(thisPin,OUTPUT);}
}
Danslaboucleprincipale,ilyadesbouclesforimbriquées,cequevousconfirmezvisuellementgrâceàune indentationdes instructionsparrapportà lamargegauche.Pour formater votre code automatiquement, vous disposez de la commandeOutils->Auto Format (ouCtrl + T sousWindows et Cmd/T sousMacOS). Si vous êtesperdu, déplacez le curseur sur l’accolade de droite, et vous verrez l’accoladeappariée apparaître en surbrillance. La première sous-boucle est parcourue pourchaque broche allant du numéro 2 à 13 en incrémentant à chaque tour, jusqu’àatteindre14,lavaleurdethisPin.
voidloop(){
//Parcourttouteslesbroches:
for(intthisPin=lowestPin;thisPin<=
highestPin;
thisPin++){
//FaitpasserlaLEDthisPindeéteinteà
allumée
La boucle de premier niveau fournit le numéro de la broche courante, il est doncpossible de l’utiliser dans les deux sous-boucles for. La première sous-boucleexploitelavariablebrightnessenaugmentantsavaleurde1(enl’incrémentant)enpartantde0jusqu’à255.Àchaqueincrément,lafonctionanalogWrite()estappeléeaveccommeargumentlavaleurcourantedebrightness.Undélaide2msestajoutéavantchaqueretouraudébutdelaboucle.
for(intbrightness=0;brightness<255;
bright-
ness++){
analogWrite(thisPin,brightness);
delay(2);
}
Une fois quebrightnessa atteint la valeur PWMmaximale de 255, la boucleforsuivanteestinitialiséeà0.Elleréaliseexactementlesmêmesopérationsmaiscettefoisàrebours.
for(intbrightness=255;brightness>=0;
bright-
ness--){
analogWrite(thisPin,brightness);
delay(2);
}
Àlafindelasecondebouclefor,undélaide100msestajoutéavantquelecroquisnereprennesonexécutionauniveaudelabouclesupérieure.Cettedernièrerépètelamêmetâche,maisaveclabrochesuivanteetcejusqu’àlabrochenuméro13.Aprèslabroche13eneffet,lecritèrepourbouclern’estplusremplietleprogrammes’achève.
//pause
delay(100);
}
}
CecroquisallumeetéteintprogressivementchaqueLEDentrelesbroches2et13etconstitueunbonmoyendes’assurerdubonfonctionnementd’uncircuit.Maiscen’estpas le point le plus intéressant de l’application, lisez la prochaine section, vousdécouvrirezcommentenfairedavantagependantl’étapedeconfiguration.
ModifierlecroquisAnalogWriteMegaAnimer une barre deLEDpeut s’avérer très amusant. Il y a une énorme différenceentrefaireclignoterdesLEDetlesanimer.Lapremièreétapeconsisteàmodifierlaséquence afin de la rendre plus intéressante. En ajoutant une boucle forsupplémentaireetensupprimantledélai,vouspouvezcréerunebelleanimation.Pourcela, créez un nouveau croquis, saisissez le code ci-dessous et sauvez-le en luidonnantunnomsimpleàvousrappelertelquemaLEDAnim.Vouspouvezégalementouvrir le croquis AnalogWriteMega, réaliser les modifications dans la fonctionloop()puis choisirFichier->Enregistrer pour enregistrer le croquis sous le nomdevotrechoix.Notezqueladifférenceestqu’aulieud’unboucleforavecdeuxsous-boucles,ilyadorénavantdeuxbouclesforavecunesous-boucledanschacune.
Unebonnepratiqueconsisteàmettreàjourlescommentairesdevotrecroquislorsquevouslemodifiez.
/*maLEDAnim
Cecroquisfaitvarierl’intensitédesLEDsurles
bro-
chesnumériquesde2à13puislesfaits’éteindre
uneà
unedelabroche13à2.
Cecroquisaétéécritpourl’ArduinoMega,etne
fonc-
tionnepassurlescartesprécédentes.
Lecircuit:
*DouzeLEDconnectéesauxbroches2à13.
CodeoriginaldeTomIgoe(2009)-Mega
analogWrite()
test
Modifiépar[Votre_Nom]enl’an20__
*/
constintlowestPin=2;
constinthighestPin=13;
voidsetup(){
for(intthisPin=lowestPin;thisPin<=
highestPin;
thisPin++){
pinMode(thisPin,OUTPUT);
}
}
voidloop(){
for(intthisPin=lowestPin;thisPin<=
highestPin;
thisPin++){
//FaitpasserlaLEDthisPindeéteinteà
allumée
for(intbrightness=0;brightness<255;
bright-
ness++){
analogWrite(thisPin,brightness);
delay(2);
}
}
for(intthisPin=highestPin;thisPin>=
lowestPin;
thisPin--){
for(intbrightness=255;brightness>=0;
bright-
ness--){
analogWrite(thisPin,brightness);
delay(2);
}
//Pauseneutraliséeici
//delay(100);
}
}
En exécutant le programme, vous obtenez une rangée de LED qui s’allumentrapidement les unes après les autres. Lorsque la rangée est totalement allumée, lesLEDdiminuentd’intensitéjusqu’às’éteindrepuislaséquencerecommence.
C’estunbondébut,maisvouspouvezmieux faire.Ce fragmentdecode transformevotre affichage LED en quelque chose ressemblant à KITT (le compagnonélectroniquedeDavidHasselhoffdansK2000!)
Créezunnouveaucroquis,entrezlecodesuivantetenregistrez-leavecunnomfacileàretenirtelquemyKnightRider.VouspouvezpartirducroquisAnalogWriteMega,yfairevosmodifications(commepourleprojetprécédent)puisenregistrerlecroquissouslenouveaunom.
/*myKnightRider
Cecroquisfaitvarierl’intensitédeLEDdes
broches2à
13etde13à2,commeKITTdeK2000.
Malheureseusement
cen’estpasunevoiturequiparle!
CecroquisaétéécritpourArduinoMega,etne
fonc-
tionnepassurlescartesprécédentes.
Lecircuit:
*DouzeLEDconnectéesauxbroches2à13.
CodeoriginaldeTomIgoe(2009)-Mega
analogWrite()
test
Modifiépar[Votre_Nom]enl’an20__
*/
//Constantes
constintlowestPin=2;
constinthighestPin=13;
voidsetup(){
//Définitlesbroches2à13commesorties
for(intthisPin=lowestPin;thisPin<=
highestPin;
thisPin++){
pinMode(thisPin,OUTPUT);
}
}
voidloop(){
//Parcourtlesbroches
for(intthisPin=lowestPin;thisPin<=
highestPin;
thisPin++){
//
for(intbrightness=0;brightness<255;
bright-
ness++){
analogWrite(thisPin,brightness);
delay(2);
}
for(intbrightness=255;brightness>=0;
bright-
ness--){
analogWrite(thisPin,brightness);
delay(2);
}
}
for(intthisPin=highestPin;thisPin>=
lowestPin;
thisPin--){
//
for(intbrightness=0;brightness<255;
bright-
ness++){
analogWrite(thisPin,brightness);
delay(2);
}
for(intbrightness=255;brightness>=0;
bright-
ness--){
analogWrite(thisPin,brightness);
delay(2);
}
//Pasdepause
//delay(100);
}
}
CecroquisanimevosLEDdemanièreincroyable:lesLEDs’allumentlesunesaprèsles autres dans un mouvement de gauche à droite. Vous pouvez ajuster le délai etl’intensité des LED pour obtenir exactement l’effet souhaité. Pour vous inspirer duKITToriginal,visionnezunvieilépisodedeK-2000.
ContrôlerplusieursLEDpardécalageParfois,mêmeleMega2560avecses70brochess’avèreinsuffisant,etilfauttrouverdesmoyenspourgérerencoreplusd’entréesetdesorties.Heureusement,ilexisteuntype de circuit logique permettant d’augmenter le nombre d’entrées/ sorties qu’unArduinopeut contrôler.Ce typede puce est un registre à décalage (shift register).Parmi les registres à décalage disponibles, un des plus utilisés est le 74HC595. Ilpermet 8 bits en entrée série, sortie série ou parallèle(http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf).Lamention8bitsfaitréférenceaunombredesortiesquipeuventêtrecontrôlées.Pourcomprendrecommentfonctionneunregistreàdécalage,vousdevezd’abordbienfairela différence entre binaire, bit et octet. Voyez à ce sujet l’encadré ci-après. Uncircuit74HC595estreprésentéàlaFigure14-6.
Commevouspouvez leconstaterdans l’encadré,desvaleurs illimitéespeuventêtreécritesenutilisantseulementdeszérosetdesuns.Avechuitchiffresbinaires,onpeutexprimervaleurdécimalede0à255.Chaquevaleurbinaireutiliseunemplacementmémoire (unbit) et chaquegroupedehuitbitsconstitueunoctet.Pourvousdonneruneéchelledegrandeur,uncroquisArduinoviergeutilise466octets ;unUnopeutstockerunmaximumde32256octetsetunMegaunmaximumde258048octets.
La Figure 14-7 montre le schéma de brochage du circuit 74HC595. Le nom desbroches est expliqué dans le Tableau 14-1.Dans le 74HC595, les huit broches desortie correspondent aux huit bits d’un octet. Un bit à la fois est envoyé vers leregistre à décalage. Quand la broche d’horloge (SH_CP) passe à l’étatHIGH, lesvaleursdetouslesbitssedécalentd’unrangenavant,lavaleurdeladernièrebroche«disparaît»etlapremièrebrocheprendsavaleurdepuisl’entréededonnéessérie(DS). Les bits restent tous stockés dans le registre jusqu’à ce que la broche dedéverrouillagelatch(ST_CP)passeàl’étatHIGH,cequiprovoquel’envoideshuitvaleurssurleshuitssortiesenmêmetemps.
FIGURE14-6Uncircuitlogiqueregistreàdécalage74HC595.
FIGURE14-7Brochagedu74HC595.
La valeur totale sur huit bits (ou sur un octet ou sur un nombre décimal comprisentre0et255)représentechaquecombinaisonduregistre,c’est-à-direreprésentelamanièredont le registreàdécalage transmet ses sorties.Sivousenvoyez11111111,toutes les broches de sortie passent à HIGH, si vous envoyez 10101101, lesbroches0,2,3,5et7passentàHIGH(onlitdedroiteàgauche).
TABLEAU14-1Lesbrochesdu74C595.
Broche Description Usage
Q0-Q7 Brochesdesortie ReliéesauxLED
GND Masse ReliéeàlamassedelacarteArduino
Q7’ Sortiesérie Sortiesérieutiliséepourpoursuivre
ledécalageavecunautre74HC595
MR MasterReclearenanglais,
activeLOW
Remetàzéroleregistreàdécalagesi
passeàl'étatLOW.
SH_CP ShiftRegisterClockPin(broche
del’horlogeduregistreà
décalage)
Sipasseàl'étatHIGH,décaledeun
touteslesvaleurs.
ST_CP StorageRegisterLockPin
(brochedeverrouillage)
QuandpasseàHIGH,rend
disponibleslesvaleursensortie.Doit
passeràHIGH
justeaprèsqueSH_CPpasseàLOW.
OE OutputEnable Activelasortiesiàl'étatLOWetla
désactivequandellepasseàl'étatHIGH.
DS Entréedesdonnéesséries Broched’entréedelanouvelle
donnéesérie.
Vcc Tensionpositive AlimentationducircuitetdesLED
Vouspouvezaussienchaînerdeux74HC595,cequisignifiequevouspouvezdoublerle nombre de sorties en utilisant la broche de sortie série (Q7’). Si vousenvoyez16bits(oudeuxoctetsouunnombredécimalcomprisentre0et65536),lesbitstraversentlepremierregistrepuislesecondpardécalage.
RéaliserlecircuitshiftOutCodeDans cet exemple, vous allez observer le décalage de sortie avec unseul74CH595pourcontrôlerhuitLED.LesLEDsecomptentenbinairede0à255.
BINAIRE,BITSETOCTETS
Lesystèmedécimalutilisedixchiffresde0à9 ;c’est labase10.Lesystème
binaireenutilisedeux:0et1;c’estlabase2.Ilexisteaussiunebase16,très
pratique car mutliple de la base 2. Les chiffres hexadécimaux sont en
base16lesdixchiffresde0à9etleslettresdeAàF.
Maiscomment lesystèmebinairepeut-il représentertoutes les informations
dumondealorsquevousn’avezquedeuxvaleurspossible ? La réponseest
quevousutilisezdesvaleursbinaires.
Si vousprenezunnombrebinaire enbase 2 tel que 10101101, vouspouvez
déterminer la valeuréquivalenteenbase10enutilisantunesimple tablede
conversion.Lebinaireselitdedroiteàgauche(commeledécimal).Commeil
estenbase2, chaquevaleurcorrespondà lavaleurbinairemultipliéepar la
puissance de 2 correspondant à la position du bit, en commençant par 0 à
droite.Voici commentest codée l’octetbinaire10101101.Savaleurdécimale
est173.
Binaire:1,0,1,0,1,1,0,1
Calcul:1x27,0x26,1x25,0x24,1x23,1x22,0x21,1x20Total
Décimal:128,0,32,0,8,4,0,1,173
Ilvousfaut:
» UnArduinouno
» Unegrandeplatined’essai
» Un74CH595
» HuitLED
» Huitrésistancesde220Ω
» Desstraps
Le 74CH595 est placé dans un espace au centre de la platine d’essai et devraits’insérerparfaitementparcequevotreplatined’essaiaétéconçueenprévisiondecetemplacement. L’espace du centre vous permet de connecter facilement les fils desdeuxcôtésdelapuce.Iciplusqu’ailleurs,prévoyezdechaquecôtédelaplatineuneligned’alimentationetunelignedemasse.Vouspouvezainsirelierlesbroches5Vdel’Arduinoetlesbrochesdelamassedechaquecôtédelaplatine,commel’illustrelecircuitdelaFigure14-8.
FIGURE14-8Uncircuitpourutiliser74HC595.
FIGURE14-9Schémapourutiliserun74HC595.
Ladispositiondesbrochesestassezsimple,saufcellede lapremière, labroche0,qui est sur le côté opposé de la platine par rapport aux autres. Dans cet exemple,utilisezdesstrapsdecouleursouunkitquipermetdesuivrelatracedesconnexions.Réalisezlecircuittelqu’ilestreproduitauxFigures14-8et14-9.
Unefoislecircuitmonté,vousavezbesoindulogicieladéquatpourl’utiliser.Créezunnouveaucroquisensaisissantlecodeci-dessousetenl’enregistrantsousunnomfacile à se souvenir commeMonDecalage ou bien allez récupérer cet exemple surhttp://arduino.cc/en/Tutorial/ShftOut11(ilmanquebienunelettreidanslenom).
//*****************************************************//
//Nom:shiftOutCode,HelloWorld
//Auteurs:CarlynMaw,TomIgoe,DavidA.Mellis
//Date:25Oct,2006
//Modifié:23Mar2010
//Version:2.0
//Notes:Codepourutiliserunregistreàdécalage
74HC595
//pourcompterde0à255
//*****************************************************
//BrocheconnectéesurST_CPdu74HC595
intlatchPin=8;
//BrocheconnectéesurSH_CPdu74HC595
intclockPin=12;
//BrocheconnectéesurDSdu74HC595
intdataPin=11;
voidsetup(){
//Configurelesbrochesensortie
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
}
voidloop(){
//Comptede0à255etaffichelavaleurbinaire
sur
lesLED
for(intnumberToDisplay=0;numberToDisplay<
256;
numberToDisplay++){
//ForcelabrochelatchPinàLOW
//pourquelesLEDnechangentpaspendant
l’envoi
desbits
digitalWrite(latchPin,LOW);
//Décalelesbits
shiftOut(dataPin,clockPin,MSBFIRST,
numberToDis-
play);
//prendlabrochelatchàHIGHpourquelesLED
s’éclairent:
digitalWrite(latchPin,HIGH);
//Pauseavantdetraiterunenouvellevaleur
delay(500);
}
}
LarangéedeLEDdevraitcompterenbinairede0à255.Lebinaireselitdedroiteàgaucheavec lebitdesunités,appelébitdepoids faible,àdroiteet lebitdepoidsfort, ici128,àgauche.Regardezbien lescinqpremiersnumérospourvérifier si lemotifestcorrect.LeTableau14-2reproduitlaconversionde0à9.
TABLEAU14-2Dudécimalaubinaireetde0à9.
Décimal Binaire
0 00000000
1 00000001
2 00000010
3 00000011
4 00000100
5 00000101
6 00000110
7 00000111
8 00001000
9 00001001
Sirienneseproduit,revérifiezvoscâblages:
» Vérifiezlesconnexionssurlaplatined’essai.
» VérifiezquelesLEDsontbienorientées,danslebonordreetque
lesbrochesdel’Arduinosontconnectéesauxbonnesbroches
du74H595.
ComprendrelecroquisshftOut11Au début du croquis, il faut déclarer trois broches pour contrôler le registre àdécalage. La broche 8 est celle du verrouillage, elle est utilisée pour rendredisponibles les valeurs du registre ; la broche 12 est celle de l’horloge, qui sert àdécaler les bits broche par broche ; la broche 11permet d’envoyer un nouveaubità0ouà1dansleregistre.
//BrocheconnectéesurST_CPdu74HC595
intlatchPin=8;
//BrocheconnectéesurSH_CPdu74HC595
intclockPin=12;
////BrocheconnectéesurDSdu74HC595
intdataPin=11;
Dans la configuration, il suffit de définir le pinMode de chaque broche surOUTPUT:
voidsetup(){
//Configurelesbrochesensortie
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
}
Notezquelafonctionloop()estrelativementpetitemalgrélacomplexitédelatâche.Une boucle for sert à compter de 0 à 255. Une variable locale nomméenumberToDisplayestlenombreencours.
voidloop(){
//Comptede0à255etaffichelavaleurbinaire
sur
lesLED
for(intnumberToDisplay=0;numberToDisplay<
256;
numberToDisplay++){
Labrochedeverrouillageresteàl’étatLOWafinqu’ellen’autoriseaucunevaleurensortiederegistrependantquevousleschangez.
digitalWrite(latchPin,LOW);
La fonction shiftOut() est utilisée pour remplir exactement ce rôle. Pour cefaire,elleattendquatreparamètresd’entrée:
» lepremierestlenumérodelabroched’entréedataPin;
» ledeuxièmeestceluidelabrochedel’horlogeclockPin;
» letroisièmesertàchoisirsil’octetestprésentéencommençant
parlebitdepoidsfort(MSBFIRST)ouparlebitdepoidsfaible
(LSBFIRST);
» ledernierparamètreestlavaleursurhuitbitsàdé-sérialiserpour
l’afficher.C’estlecontenudelavariablelocalenumberToDisplay.
Cettefonctionprendlavaleuretgèretouteslesimpulsionspouraboutirauxétatsdeshuitsbitssurleshuitbrochesduregistre.
//Décalelesbits
shiftOut(dataPin,clockPin,MSBFIRST,
numberToDisplay);
Il ne reste plus qu’à forcer la broche de verrouillage latch à l’état HIGH pourenvoyerlesvaleursmisesàjourauxLED.
//Autorisel’envoiensortie
digitalWrite(latchPin,HIGH);
Unecourtepaused’unedemi-secondeseproduitaveclafonctiondelay()avantqueleprogrammenerecommenceuntourdeboucleforen incrémentant lenombredeun.
//Pause
delay(500);
}
}
Ce cycle se poursuit jusqu’à ce que la bouclefor atteigne la valeur 255, ce quicorrespond à toutes les LED à l’étatHIGH (allumé). On revient ensuite à 0 pourreprendre le comptage. Compter en binaire, c’est bien,mais il ne faut pas trop enabuser. Dans la section suivante, je vais affiner le code pour traiter les LEDindividuellement.
ModifiershiftOutCodeLaprécédenteméthodebinairepermetdecomprendrelefonctionnementduregistreàdécalage,maisquefairesivousvoulezactiverunebrochespécifiquesansavoiràlaconvertir en binaire ? Le code qui suit utilise lemême circuit que dans la sectionprécédente,maispermetdesélectionnerdesLEDindividuellementdansunportsérie.
Commencez par créer un nouveau croquis en saisissant le code ci-après, puisenregistrez-lesousunnomfacileàretenircommemonDecalSerie.Oubiencopiezcetexemple depuis la page Arduinohttp://arduino.cc/en/Tutorial/ShftOut12 (toujours sans la lettre idanslenom).
/*
ShiftRegister
pourlecircuit74HC595
Cecroquislitl’entréesérieetl’utilisepour
définir
lesbrochesd’unregistreàdécalage74HC595.
Matériel:
*Registreàdécalage74HC595reliéauxbroches2,
3,et
4del’Arduino
*LEDreliéesauxsortiesduregistreàdécalage
Crééle22Mai2009
Crééle23Mars2010
parTomIgoe
*/
//Brocheconnectéeàlabrochelatch(ST_CP)du
74HC595
constintlatchPin=8;
//Brocheconnectéeàlabrochehorloge(SH_CP)du
74HC595
constintclockPin=12;
//BrocheconnectéeauxDatadans(DS)du74HC595
constintdataPin=11;
voidsetup(){
//Définitlesbrochesensorties
pinMode(latchPin,OUTPUT);
pinMode(dataPin,OUTPUT);
pinMode(clockPin,OUTPUT);
Serial.begin(9600);
Serial.println(“reset”);
}
voidloop(){
if(Serial.available()>0){
//LescaractèresASCII‘0’à‘9’correspondent
//auxvaleursdécimales48à57.
//Sil’utilisateurentreunchiffreentre0et
9en
ASCII,
//ilfautsoustraire48pourrécupérerla
valeur
réelle.
intbitToSet=Serial.read()-48;
//Ecritdansleregistreàdécalageaveclebit
cor-
rect:
registerWrite(bitToSet,HIGH);
}
}
//Cetteméthodeenvoiedesbitsauregistreà
décalage:
voidregisterWrite(intwhichPin,intwhichState){
//Bitsàenvoyer
bytebitsToSend=0;
//Bloquelasortiepourquelesbrochesne
s’allument
pas
//pendantquelebitestsupprimé
digitalWrite(latchPin,LOW);
//ActivelebitsupérieurdansbitsToSend
bitWrite(bitsToSend,whichPin,whichState);
//Décalelesbitsensortie
shiftOut(dataPin,clockPin,MSBFIRST,bitsToSend);
//DébloquelasortiepourquelesLEDpuissent
s’al-
lumer
digitalWrite(latchPin,HIGH);
}
Unefoislecroquistéléversé,ouvrezlemoniteursérie.Lepremiermotaffichédevraitêtre«reset»suiteà‘linstructiondanssetup()audémarrageducroquis.Saisissezunnombreentre0et7puiscliquezsurSend(Envoyer)ouappuyezsurEntréepouractiverunedeshuitLEDdanslarangée.
Dans ce code, vous convertissez le systèmed’adressage binaire en un décimal.Aulieu d’entrer une combinaison binaire, vous sélectionnez l’adresse individuelle dechaqueLEDenentrantunnombredécimalcomprisentre0et7.
Dans la boucle principale, l’instructionifvérifie s’il y a des données à lire. LafonctiondetestSerial.available()consulteletamponmémoire(l’espacedestockage des octets entrants). Si l’instruction if vaut TRUE, on continue et desdonnéessonttransmises:
if(Serial.available()>0){
LescaractèresenvoyésvialeportsériesonttransmisentantquecaractèresASCII.IlssontlusparSerial.read()etinterprétéscommevaleursentièresselonlecodageASCII.Seloncecodage,leschiffrescomprisentre0et9correspondentàlaplagedevaleurs de 48 à 57. Pour récupérer la bonne plage, il suffit de soustraire 48 à lavaleur:
intbitToSet=Serial.read()-48;
Unefonctiondéfinieparvoussous lenomregisterWrite()est appeléepourfaire la conversionde0 à 9 enunoctet binaire.Cette fonction est définie après laboucleprincipaleenbasdecroquis:
registerWrite(bitToSet,HIGH);
}
Lesdeuxparamètresd’entréederegisterWrite()sontdéclarésdans la lignede tête de la nouvelle fonction sous les nomswhichPin etwhichState. Cesvariables et tout ce qui est défini dans la fonction sont des éléments locaux qui nepeuventdoncpasêtrementionnésdanslaboucleprincipale:
voidregisterWrite(intwhichPin,intwhichState){
Unevariabled’octetlocale(typebyte)estdéclaréeetinitialiséeà0:
//bitàenvoyer
bytebitsToSend=0;
Commedansl’exempleprécédent,labrochedeverrouillageestforcéeàLOWavantdedécalerlesbits:
//Désactivelasortie,lesbrochesnes’allument
pas
//pendantquelesbitssontdécalés
digitalWrite(latchPin,LOW);
Une nouvelle fonction prédéfinie nommée bitWrite() est utilisée. Elle attendtroisparamètres:lavariablequevousvenezd’écrire,icibitsToSend;lebitdel’octetàécrire,de0(lepluspetitetleplusàdroite)à7(leplusgrandetleplusàgauche)etl’étatHIGHouLOW.
//Activeleprochainbitdepoidsfortdans
bitsToSend
bitWrite(bitsToSend,whichPin,whichState);
Parexemple,sil’octetbitsToSendestégalà0,ilestégalà00000000enbinaire.Si vous utilisez la fonction bitWrite() avec whichPin égale à 4 etwhichStateégalàHIGH(ou1),bitsToSendseraégalà00010000.
Une fois que bitWrite() a mis à jour la valeur de l’octet bitsToSend,bitsToSend est transmis via la fonction shiftOut() pour mettre à jour leregistre:
//Décalelesbitsensortie
shiftOut(dataPin,clockPin,MSBFIRST,bitsToSend);
Enfin,labrochedeverrouillageestforcéeàHIGHetlesrésultatssontmisàjoursurlessorties,doncsurlesLED.
//Activelessorties
digitalWrite(latchPin,HIGH);
}
PlusloinaveclemêmecircuitCe dernier exemple vous permet de communiquer les valeurs en série, mais vouspouvez aussi automatiser cette procédure avec une boucle for pour compterde 0 à7 et recommencer. La valeur peut aussi provenir d’un capteur ou d’unpotentiomètre, en utilisant la fonctionmappour faire varier une jauge quand voustournez lebouton.Vous trouverezdenombreuxautresexemples sur le siteArduino,
augmentantencomplexité(http://arduino.cc/en/Tutorial/ShiftOut)dontplusieursregistresàdécalageencascade.
Sivousenvisagezd’utiliserdeux registres àdécalageencascade,vous serezaviséd’alimenterlesLEDdel’extérieurpourréduirelaquantitédecourantquipasseparl’Arduino. Si vous utilisez beaucoup de LED, vous pouvez facilement dépasserles200mA.Utilisezunmultimètrepourvérifierl’intensitéducourantd’alimentationducircuitetsasécurité.
L’exemple de ce chapitre a présenté un modèle de registre. Il en existe d’autrescomme le TLC5940 qui peut contrôler 16 sorties PWM et fonctionne sur lemêmeprincipe.LapageGoogleCodecontientdenombreusesinformationsdétailléesainsiqu’une bibliothèque d’Alex Leone(http://code.google.com/p/tlc5940arduino/). Vous pouvez aussifaire l’inverse et lire beaucoup d’entrées. Pour en savoir plus sur le décalage,consultez le site Arduino à la page athttp://arduino.cc/en/Tutorial/ShiftIn.
C
Chapitre15
MultiplierlessortiesavecI2C
DANSCECHAPITRE
» DécouvrirleprotocoleI2C
» Contrôlerplusieursservos
» Trouverunebonnealimentationélectrique
echapitrevousproposededécouvrir leprotocoledecommunicationnomméI2C(prononcezeye-squared-seeouplussimplementIdeuxC),quipermetdecontrôler
ungrandnombredesorties.Pourillustrerlescapacitésdecetrèsbonprotocole,nousverronscommentcontrôlernonpasquelquesLED(commeauChapitre14),maisunearméedeservomoteurs.Maispouvoircontrôlerdesdizainesdeservosestunechose,les alimenter correctement en est une autre.Nous aborderons également ce point etvousprésenteronslesnombreusesoptionsquis’offrentàvousdanscedomaine.
Qu’est-cequeI2C?I2Cestunprotocoledecommunicationdestinéàdistribuerdessignauxsurungrandnombre de sorties. (Il vient en complément des autres méthodes décrites dans leChapitre14).Ilexisted’excellentsproduitsquiutilisentlapucePCA9685contrôléeparI2CcommelepilotePWMquivouspermetdecontrôlerjusqu’à16servomoteursavec une Seule carte. L’interface I2C(http://www.adafruit.com/products/815) 16 canaux sur 12 bitsPWM/Servo Driver de chez Adafruit (voir Figure 15-1) est un kit partiellementassembléquifacilitelecontrôledenombreuxmoteurs,LEDetautrescomposants.
FIGURE15-1LacarteI2CPWM/ServoDriver.
La carte I2C de Adafruit est conçue pour contrôler des servos qui utilisent troisbrochesdeconnexion(masse,5V,etsignal),elleestdonccomposéede16groupesde troisbrochespermettant ainsidebrancher facilementvos servosenutilisantdesconnecteurs 3 broches standard. Physiquement, ces broches sont regroupées parquatre. Sur les petis côtés de la carte se trouvent six broches destinées à lacommunicationaveclapucePCA9685.
Un servo, comme déjà indiqué dans leChapitre8, est unmoteur à courant continu(DC, Direct Current) associé à un encodeur qui pilote sa position angulaire. Lesmoteurs DC standard sont durs à la tâche et fonctionnent bien lorsqu’il s’agit detournerviteetdemanièrecontinuedansunseulsens,commec’estlecasdesmoteursd’asenseursoudelave-linge.
Enrevanche,lesservosparcontresontfaitspoureffectuerdesmouvementsprécissurunseultouroumoins;ilstournentd’unnombrespécifiquededegrésetsontparfaitspour un grand nombre d’applications allant des robots marcheurs aux treuilsélectroniquespourlesvoilesdesbateaux.
Lessixbrochesdespetitscôtéssont,enpartantduhautverslebas:
» GND:Lamasse
» OE:Activationdelasortie(OutputEnable)
» SCL:Horlogesérie
» SDA:Donnéessérie
» VCC:AlimentationducircuitPCA9685
» V+:Alimentationdepuissancedesservos
Surcesbroches,ilsuffitd’utiliserVCCetGNDpouralimenterlapucePCA9685etSCL et SDA pour permettre à l’I2C de communiquer avec l’Arduino et les autrescartes.Commelacartealesmêmesbrochesdesdeuxcôtés,vouspouviezendéduirequeplusieurscartespeuventêtrereliées«encascade».Ondonneàchaquecarteuneadressephysiqueviaunpetitterminalsituéenhautàdroitequel’onnommecavalieràsouder.Cescavalierspermettentensoudantlesliaisonsdedéfinirpourchaquecarteunevaleurbinaire.Lacarte0n’apasdeliaison,etlesautrescartessontconfiguréesàpartir de 1 en soudant les liaisons entre eux. Il s’agit d’une configuration semi-permanentequipeutêtredéfaiteavecunepompeàdessouder.
LabrocheV+estreliéeauderniercomposant,lebornieràvisdisposéenhautdelacarte. Il s’agit là d’une fonctionnalité importante de cette carte. Bien qu’il soitpossible d’alimenter des moteurs et leurs contrôleurs en utilisant la même sourced’alimentation,cen’estpasconseillé.Eneffet, lesmoteursnécessitent fréquemmentunepuissanceimportantepourfaireleurtravail.Parfois,despointessontatteintesetellespeuventavoiruneffettrèsnéfastesurlapucePCA9685.Surcettecarte,lesdeuxalimentations sont séparées. Les servomoteurs (ou les LED) peuvent profter d’unealimentation en 12V alors que la puce travaille à partir du faible courant sur 5Vfourniparl’Arduino.
Contrairement aux registres à décalage 74HC595 ou TLV58940, le circuitPCA9685 dispose d’une horloge interne. Il n’est donc pas nécessaire que votreArduino envoie un signal permanent pour sa mise à jour, ce qui le laisse libred’effectuerd’autrestâches.
Dansl’exemplesuivant,vousallezapprendreàassembleretàcontrôlerunecarteI2CPWM Servo Driver pour réaliser votre propre projet de contrôle d’une série demoteursélectriques.
Assemblerl’I2CPWM/ServoDriverTous les composants essentiels de la carte I2C PWM/Servo Driver ont été déjàassembléspourvous,maisvousdevezyapporterunetouchefinale.Avantcela,faitesunessaiàblancendisposantlescomposantsavantdevouslancer:
Danslekit,vousdisposezdesélémentssuivants:
» unecarteI2CPWM/ServoDriver,
» quatrebarrettesdebroches3x4,
» unebarrettedebrochesmâles,
» unbornieràvis.
Suivezlesétapesci-aprèspourréaliserunessaiàblancdevotreassemblage.
1. Avecunepincecoupante,coupezlabarrettedanslesensdela
longueurafind’obtenirdeuxbarrettesde1x6(voirlaFigure15-
2).
Vouslesutiliserezàchaqueextrémitépourconnecterenpremier
lieulacarteàvotreArduinopuispourenchaînercescartes.
2. Disposeztouteslespiècesenvracsurlacarteafindevous
assurerqu’ilyauneplacesuffisante.
FIGURE15-2Couperlabarrettedanslesensdelalongueur.
Labarrettedoitêtreorientéedanssalongueurverslehaut,etle
bornieràvisdoitêtreenfacedelacartepourfaciliterle
branchementdescâbles.Lorsquevousêtessatisfaitde
l’emplacementdesbroches,vouspouvezcommenceràsouder.
3. Faitesplacenette(voirladescriptionauChapitre5).Faites
chauffervotreferàsouder,humidifiezvotreépongeetsortez
votresoudure.
Avantdecommenceràsouder,notezquecesontlesbrochesdedonnéesdelacartequi sont lesplus sensiblesà la chaleur, etqu’ellespeuvent êtreendommagées si latempérature est trop élevée. Je vous recommande paradoxalement une bonnetempérature de fer afin de faire fondre la soudure très vite. Cela implique que lasoudurefondeautourdelajonctionavantqu’ellenes’écoulelelongdelapuce,ayantainsiletempsderefroidir.Sivousn’êtespasàl’aiseaveccestechniquesdesoudure,entraînez-vousdansunpremiertempssurunmorceaudeplaquedecircuitimpriméetsurquelquesbroches.
Comme les barrettes de broches 3 x 4 sont les plus difficiles, il vaut mieuxcommencer avecelles.L’objectif estd’atteindre la couchedeplastiquede la carte.Vouspouvezyarriver soitenplaquantunmorceaud’adhésif sur lecomposantet lacarte, soit enutilisantunepincede type troisièmemain.Personnellement, je trouvequelestroisièmesmainssontutilespourmaintenirlescartes,maisqu’ellesgénèrentplus de problèmes qu’elles n’en résolvent lorsqu’il s’agit de maintenir descomposants.
Elles peuvent également endommager les circuits délicats, aussi maintenez cesderniersàbonnedistancedeleursdents.UtilisezplutôtduBlueTackpourmaintenirle composant jusqu’à la réalisation des points de soudure. Vous devez ensuitedisposerlabarrettedebroches.JerecommandedeconnecterenpremierGNDetV+carellespeuventsupporterplusdechaleurqueleslignesdedonnées.Lorsquevoussoudez les connecteurs à l’intérieur de la barrette 3 x 4, il peut être difficile demaintenirleferenposition.Essayezdemaintenirvotrefersuruncoinetdesouderdegaucheàdroitesivousêtesdroitier.Celaéviteradetravaillerau-dessusdessouduresdéjàréaliséesetdiminueraleschancesdecréeruneconnexionaveccesdernières.Encasd’incident,utilisezunepompeàsouderpoursupprimerl’excédent.
Une fois les souduresde labarrette3x4 réalisées, soudez lesbarrettesdechaqueextrémité ; cela devrait être beaucoup plus simple, d’autant que votre techniques’améliore.
Enfin,connectezlebornieràvis.Vousnoterezquelesbrochesetlestroussontbienplus larges que ceux des barrettes, car ici les broches sont destinées à fournir lecourantnécessairepourtouslesmoteursconnectés.Siuneconnexionesttroppetite,ellechauffeetfond,ilestdoncimportantdetoujoursdisposerdefilsconçuspourdescourantssupérieursàceuxquevousutilisez.Cependant,enraisondecetteconnexionplus large, vous noterez que le bornier à vis met plus longtemps à atteindre latempératurenécessairepourfairefondre lasoudure.Attention,sivousattendez troplongtemps,lapartieenplastiquepourraitfondre.
C’est toutsimple,n’est-cepas?Voussavezàprésentmettreenplaceunecarte I2CPWM/ServoDrive prête à l’emploi. Vérifiez bien vos connexions pour éviter toutrisquedecourt-circuit.Utilisezlamesuredeconductivitédevotremultimètrelorsquevotrecarten’estpasalimentéepourvérifierlesconnexionsdontvousn’êtespassûr.LeslignesV+etGNDdevosservosdoiventêtrereliéessurdeuxrangéescarellesreçoivent leur alimentation de la même source. Pour l’instant, ne soudez pas lecavalier d’adressage, car nous commençons avec la première carte qui porte lenuméro0.
Utiliserl’I2CPWM/ServoDriverMaintenant que vous avez appris à assembler l’I2C PWM/Servo Driver, voyonscommentl’utiliser.L’exempledecettesectionvousmontrecommentenvoyerunsignalvers lacartepourcontrôlerplusieursservos.Vouspouvez testercettefonctionnalitéavec un seul servo, mais une fois que vous l’aurez vu à l’œuvre, vous voudrezcertainementencommanderd’autres.Pourceprojet,enplusdelacarteI2C, ilvousfaut:
» UnArduinoUno
» Unservomoteur
» Unealimentationexterne
» Untournevisdeprécision
» Desstraps
La carte fille dispose d’une barrette de broches à connecter, mais ces broches nepeuventpasêtredirectementbranchéessurl’Arduino.Ilfaututiliserdesstrapsavecdesprisesd’uncôtéetdesbrochesdel’autre(femelleetmâle)–tellesqu’illustréàlaFigure 15-3. Vous en trouverez par exemple chez Cool Components(http://www.coolcomponents.co.uk/catalog/ju-mper-wires-male-female-p-355.html) ou chez SparkFun(https://www.sparkfun.com/products/9140).
Sivousêtesunvraipro,vouspouvezréaliservosproprescâblesenutilisantdesfilsprétorsadés et des prises que vous pouvez trouver chez Technobots(http://www.technobotsonline.com/cable-and-accessories/cable/pre-crimped-wires.html ethttp://www.technobotsonline.com/connectors-and-
headers/cable-assembly-hou-sings.html) ou encore chez Pololu
(http://www.pololu.com/cata-log/category/71 ethttp://www.pololu.com/catalog/category/70).Vousobtiendrezainsides fils avec des connecteurs à chaque extrémité qui auront un aspect superprofessionnel, sivous les regroupezavecunegainespiralecommecelledisponiblechez RS Components (http://uk.rs-online.com/mobile/p/cable-spiral-wrapping/6826842/).
FIGURE15-3Desstrapsavecprise.
ALIMENTATIONBENCH-TOP
Une alimentation d’atelier (bench-top) comme celle de la figure ci-dessous
permet de tester des circuits rapidement en appliquant une tension et un
courant maximum et peremttant de connaître la consommation de votre
circuit.Rendez-voussurlessitesdesrevendeursdecomposantsélectroniques.
Notez que les modèles d’entrée de gamme n’affichent pas le courant
consomméparvotrecircuit.Sivousoptezpourunealimentationdecetype,il
voussuffitdeconnecterdeuxfilssurlesbornespositiveetnégativeetdeles
relierauxbornesnégativeetpositivedubornieràvisdelacarteàalimenter.
Prenez toujours la précaution d’amener le bouton de réglage de tension au
minimumavantd’allumer.Ilpeutarriverquelederniervoltageutilisésoitréglé
trop haut et qu’il endommage votre circuit lorsque vous le remettez sous
tension.
Vérifiezquelatensionet l’intensitédel’alimentationcorrespondentbienaunombredeservosquevousutilisez.Certainspetits servosutilisent le5V,mais il enexistetouteunevariétéquiutiliseplutôtdu12V.Pouralimentercesservos,vousdisposezdedeuxoptions:unealimentationBenchToppourconnecterrapidementvotrecarteou une alimentation externe modifiée comme celle utilisée par les chargeurs detéléphonesmobiles ou les ordinateurs. Reportez-vous aux encadrés « AlimentationBench-top»et«Alimentationsexternes»decechapitrepourplusd’informations.
ALIMENTATIONSEXTERNESETADAPTATEURSSECTEUR
Lorsquevousrecherchezunealimentationélectriqueexterne(voirlafigureci-
dessous),n’achetezquecellesqui sont réglementaires.Comme lesappareils
non réglementés ne délivrent pas une tension précise, ils sontmoins chers
mais aussi bienmoins fiables. Regardez sur la boîte des appareils pour voir
ceuxquisontconformes.Cesappareilspeuventdélivreruneseuletensionou
plusieursselon lemodèle,engénéral3,4,5,6,9et12V.Certainsoffrentun
réglage de l’intensité, permettant une intensité plus importante pour les
basses tensions. L’alimentation de la société anglaiseMaplin, le High Power
Multi-Voltage Desktop Power Supply (http://www.maplin.co.uk/high-
power-multi-vol-tage-desktop-power-supply-48517), est un bon
appareil,chermaisquidélivretouteunegammedetensiontrèsutile(5,6,9,
12,13,5et15V)etfournituneintensitémaximumallantjusqu’à4A,cequiest
plusquesuffisantpour laplupartdesapplications.Vouspouvez trouverdes
alimentations similaires comme l’Enercell Universal 1000 mA AC Adapter
(http://www.radioshack.com/product/index.jsp?
productId=3875403). Ces appareils sont généralement fournis avec une
variétédeconnecteursstandardetnotammentlaprised’alimentation2,1mm
del’Arduino,cequiesttrèsutilepourlespetitscourants(jusqu’a500mA)caril
peut être branché sur votre Arduino afin de permettre d’alimenter des
composants depuis la broche Vin. Cependant, bon nombre de servos
nécessitent un courant plus important, pouvant dépasser les 1 A. N’essayez
pasdelesalimenterdepuisvotreArduino.
Dénudez plutôt les bouts des fils afin qu’ils puissent être directement
connectésaubornieràvisdevotrecartegérant lesservosouàundomino.
Vérifiezd’abordquel’alimentationestdébranchée.Coupezenviron10cmdefil
à partir de la base du connecteur (de cette façon, vous pourrez toujours le
reconnecter). Le fil de l’alimentation est probablement bi-axial (deux fils
multibrinscôteàcôte)oucoaxial(unfilmultibrinaucentreetunautreautour).
Lebi-axialest facileàdénuderenutilisantunepinceàdénuderetpeutalors
êtreétaméavecunpeudesoudure.Lepositifestgénéralement repéréd’un
symbolediscret,commedestraitsblancsoudespointsrouges,maiscen’est
pastoujourslecas,n’oubliezdoncpasdetesteravecunmultimètre.
Ilestunpeuplusdifficiledetravailleraveclecoaxial.Eneffet,sivousenlevezla
coucheexterneisolantlefilavecunepinceàdénuder,vousrévélezunetresse
defils.Cesdernierspeuventêtreretortillésetrenvoyésd’uncôtépourrévéler
le fil central. Vous pouvez alors dénuder le fil central tout en laissant
suffisammentd’isolationdesorteque lesdeux filsnese touchentpas.Vous
pouvezensuitesoudercesdeuxfilsdemanièreàmaintenirlesbrinsensemble
puis à les connecter au bornier à vis. Lamasse est normalement reliée au
maillageextérieurdufil,maiscen’estpastoujourslecas,ilfautdoncletester
avecunmultimètre.Lorsquevousétamez,veillezànepasfairefondrel’isolant
autourdunoyaucentral,carcelapourraitcréeruncourt-circuit.
Pour tester la polarité de votre alimentation, fixez ces extrémités à votre
surface de travail de sorte qu’elles ne puissent pas se toucher ; un ruban
isolant d’électricien accomplira cette tâche parfaitement. Branchez ensuite
votre alimentation et réglez lemultimètre pour obtenir du courant continu,
puisplacezlessondesàl’extrémitédechaquefil.
Les sondes sont généralement rouges et noires. Si vous lisez une tension
négative, c’est que vous lisez l’alimentation dans lemauvais sens – inversez
alorsvossondes.Débranchezl’alimentationjusqu’àcequechaquefilsoitfixé
aubornieràvis.
Vérifieztoujours latensiondevotrealimentationexterneavecunmultimètre
avant de l’utiliser pour alimenter votre projet (comme indiqué dans le
Chapitre5). Il est faciled’oublier la tension fournieparvotrealimentation.Si
vousréutilisezuneanciennealimentation,vérifiezqu’elleesttoujourscapable
dedélivrerlestensionsindiquées.
Si vous avez une alimentation externe ou une alimentation d’atelier capable
d’afficherdesvaleurs, reliezvotremultimètreensérie soitavec lapuissance
soitavec lamasseafind’obteniruneévaluationducourantconsommé.Pour
cela,unefoisquevousêtessûrdevosfilspositifsetnégatifs,mettezl’appareil
hors tension et attachez-les fils au bornier à vis à l’aide d’un tournevis
miniature.Lapolaritéestindiquéesurledessusdelacarte,vérifiezbienquele
+5VetGNDsontdanslebonsens.
moteurs. Pour cela, connectez l’alimentation aux bornes positives et négatives enutilisantuntournevisdeprécision.
Une fois le circuit réalisé, vous aurez besoin d’un logiciel adéquat pour le fairefonctionner.Pourlerécupérer,suivezcesétapes:
1. TéléchargezAdafruitPWM/ServoDriverLibrarydepuislesite
Github(https://github.com/adafruit/Ada-fruit-PWM-
Servo-Driver-Library).
2. Depuislapageduprojet,téléchargezlefichier.zipet
décompressez-lepourobtenirledossierdelabibliothèque.
3. RenommezledossiersouslenomAdafruit_PWMServo-Driver
etplacez-ledansvotredossierdebibliothèquessituédans
votredossierdecroquisArduino.
FIGURE15-4SchémadecâblagedelacartePWMDriver.
FIGURE15-5SchémadeprincipedelacartePWMDriver.
4. RelancezvotreArduinoetcliquezsurFichier->Exemplespour
retrouverlecroquisAdafruit_PWMServoDriver.
Voicilecodesourcedececroquis:
/***************************************************
ExemplepourAdafruit16-channelPWM&Servodriver
TestServo-pilote16servos,l’unaprèsl’autre
Choisissezunmodèledanslaboutiqued’Adafruit!
------>http://www.adafruit.com/products/815
UtiliseI2Cavec2brochespourl’Interface.
PourArduinoUNOancien,SCL->Analog5,SDA->
Analog4
ÉcritparLimorFried/LadyadapourAdafruit
Industries.
BSDlicense,alltextabovemustbeincludedinany
re-
distribution
****************************************************/
#include<Wire.h>
#include<Adafruit_PWMServoDriver.h>
//Utilisel’adressepardéfaut0x40
Adafruit_PWMServoDriverpwm=
Adafruit_PWMServoDriver();
//Vouspouvezutiliseruneautreadressesivous
voulez
//Adafruit_PWMServoDriverpwm=
Adafruit_PWMServoDriv-
er(0x41);
//Selonleservo,latailleminetmaxde
l’impulsion
varie
//qu’ellesoitaussipetite/grandequepossible
//Modifiezsinécessaireselonlesservos
quevous
avez!
#defineSERVOMIN150//Longueurd’impulsion
minimale(sur
4096)
#defineSERVOMAX600//Longueurd’impulsion
maximale(sur
4096)
//Numéroduservo
uint8_tservonum=0;
voidsetup(){
Serial.begin(9600);
Serial.println(“16channelServotest!”);
pwm.begin();
pwm.setPWMFreq(60);//servosanalogs’exécuteà
~60
Hz
}
//Utilisezcettefonctionsivousaimezune
impulsion
longueensecondes
//setServoPulse(0,0.001)donneunelargeur
d’impulsion
de~1milliseconde.
voidsetServoPulse(uint8_tn,doublepulse){
doublepulselength;
pulselength=1000000;//1,000,000demicrosec
par
seconde
pulselength/=60;//60Hz
Serial.print(pulselength);Serial.println(“usper
pe-
riod”);
pulselength/=4096;//12bitsofresolution
Serial.print(pulselength);Serial.println(“usper
bit”);
pulse*=1000;
pulse/=pulselength;
Serial.println(pulse);
pwm.setPWM(n,0,pulse);
}
voidloop(){
//Pilotechaqueservounaprèsl’autre
Serial.println(servonum);
for(uint16_tpulselen=SERVOMIN;pulselen<
SERVOMAX;
pulselen++){
pwm.setPWM(servonum,0,pulselen);
}
delay(500);
for(uint16_tpulselen=SERVOMAX;pulselen>
SERVOMIN;
pulselen--){
pwm.setPWM(servonum,0,pulselen);
}
delay(500);
servonum++;
if(servonum>15)
servonum=0;
}
Téléversez le croquis et branchez votre alimentation. Le servo tourne jusqu’à savaleurmaximaleendegrés,puisrevientenposition0.Observezlaconsommationducircuit.
Sivousn’avezpasatteintlescapacitésmaximalesdevotrealimentation,vouspouvezajouter plus de servos sur la carte. Si vous souhaitez visualiser la progression duprogramme, ouvrez le Moniteur Série pour voir le moteur correspondant auxsorties0à15.
Sivousnevoyezaucunmouvementouconstatezuncomportementétrange,revérifiezvoscâblages:
» Assurez-vousdebienutiliserunnumérodebrochecorrect.
» Sivosservosontdesmouvementssaccadés,c’estsansdoutequ’ils
nereçoiventpasassezdecourant.Relevezlaconsommation
correspondantàunpicetcomparez-laaveclacapacitédevotre
alimentation.
» Sivousentendezdessonsdefrottementdésagréablesprovenant
devosservos,débranchez-lesimmédiatement;vousallezsans
doutedevoirajusterlesvaleursSERVOMAXetSERVOMIN.Reportez-
vouspourcelaàlasectionsuivante.
ComprendrelecroquisI2CPWM/ServoDriver
Deux bibliothèques sont incluses avant setup(). Elles sont indisepnsables pourutiliser ce matériel. Wire.h se charge des échanges entre I2C et la carte ;Adafruit_PWMServoDriver.hréalisedesfonctionsplusspécifiques.
#include<Wire.h>
#include<Adafruit_PWMServoDriver.h>
Un nouvel objet nommépwm est déclaré via une fonction particulière fournie parAdafruit_PWMServoDriver.h. Elle définit l’adresse de la carte qui par défautvaut0x40.Cettevaleurdéfinitl’adressedebase,aussisivoussouhaitezaccéderàlacarte1,vousindiquerez0x41.
//Utilisel’adressepardéfaut0x40
Adafruit_PWMServoDriverpwm=
Adafruit_PWMServoDriver();
//Vouspouvezutiliseruneautreadressesivous
voulez
//Adafruit_PWMServoDriverpwm=
Adafruit_PWMServoDriv-
er(0x41);
Les deux instructions suivantes utilisent #define pour définir la longueurd’impulsionmaximumetminimum;cettevaleurdéfinitl’anglederotationendegrésdes servos ; ainsi si vous pensez que vos servos tournent trop ou pas assez, vouspouvezajustercettevaleurpouraffinerleurscomportements.
//Selonleservo,latailleminetmaxde
l’impulsion
//varie,qu’ellesoitaussipetite/grandeque
possible
//Modifiezsinécessaireselonlesservosquevous
avez!
#defineSERVOMIN150
#defineSERVOMAX600
Letermeuint8_testuntypededonnéeCquicorrespondàunevaleurnonsignéesur8bits.Nonsignée signifie qu’elle n’utilise que des valeurs positives, et 8 bitssignifiequecesvaleurssontcomprisesen0et255.Dansnotrecas,nousutilisonsceterme pour déclarer servonum, la variable qui contient le servo courant. DansArduino,unentierintstandardestcodésurdeuxoctets(de-32768à+32767).Ilestaussiappeléint16_t.Vouspouvezensavoirdavantagesur les intà l’adressesuivante:http://arduino.cc/en/Reference/Int.
//Numéroduservo
uint8_tservonum=0;
Danssetup(),leportsérieestouvertavecunevitessedetransfertde9600baudsetlemessaged’ouverture«16channelServotest!»estenvoyépourmarquerledébutdu programme. L’objet pwm (la carte 0) est initialisé via pwm.begin() et lafréquenceduservoestdéfinieà60Hz.
voidsetup(){
Serial.begin(9600);
Serial.println(“16channelServotest!”);
pwm.begin();
pwm.setPWMFreq(60);//ENviron~60Hz
Vientensuite la fonctionsetServoPulse()quidéfinit laduréeensecondesaulieudelefaireenhertz.Cependantcettefonctionn’estpasutiliséeici.
//Utilisezcettefonctionsivousaimezune
impulsion
longueensecondes
voidsetServoPulse(uint8_tn,doublepulse){
doublepulselength;
pulselength=1000000;//1,000,000microsecpar
sec-
onde
pulselength/=60;//60Hz
Serial.print(pulselength);
Serial.println(“usperperiod”);
pulselength/=4096;//12bitsderésolution
Serial.print(pulselength);
Serial.println(“usperbit”);
pulse*=1000;
pulse/=pulselength;
Serial.println(pulse);
pwm.setPWM(n,0,pulse);
}
Dansloop(),lenuméroduservocourantestaffichéparleMoniteursérie.
voidloop(){
//Pilotechaqueservounaprèsl’autre
Serial.println(servonum);
Àprésent, ilest tempsde faire tourner leservo.Uneboucleforest utiliséepourdéplacer le servo actuel de sa valeur minimale à sa valeur maximale. Lorsque leservoatteintlavaleurmaximum(SERVOMAX), ilattendunedemi-seconde,puisune
autre bouclefor repasse cette valeur à sonminimum (SERVOMIN). Ceminimumatteint, un nouveau délai d’une demi-seconde est appliqué. La boucle forincrémente l’impulsion d’une valeur à la fois afin d’obtenir un mouvement fluide.Notezqueuint16_testemployépourdéclarerlavariablelocalepulselen,cequirevientàutiliserunintnonsignéstandard.Voustrouverezplusd’informationssur les valeurs int à l’adresse :http://arduino.cc/en/Reference/UnsignedInt.
for(uint16_tpulselen=SERVOMIN;pulselen<
SERVOMAX;
pulselen++){
pwm.setPWM(servonum,0,pulselen);
}
delay(500);
for(uint16_tpulselen=SERVOMAX;pulselen>
SERVOMIN;
pulselen--){
pwm.setPWM(servonum,0,pulselen);
}
delay(500);
servonum++;
Dès qu’un servo a terminé son mouvement,servonum est incrémenté de un. Siservonumdépasse15,ilrepasseàzérocarilaatteintledernierservo.
IlyaégalementiciuneautrespécificitédulangageC,uneinstructionifpeutêtreécrite sur une seule ligne sans avoir recourt aux accolades ({ }) s’il n’y a qu’uneinstruction.
if(servonum>15)servonum=0;
}
C’estuntrèsboncroquispourtesterlacommunicationaveclacartetoutencontrôlantvos servos comme vous le souhaitez en utilisantpwm.SetPWM(servonum,0,pulselen). Cependant, comme la plupart desbibliothèques, celle-ci est en constante évolution, et vous aurez peut-être desquestionsqui ne trouvent pasde réponse.Le forumAdafruit est lemeilleur endroitpourposervosquestionssurcettecarteetsur labibliothèque.Vousy trouverezdes
sujetssimilairesauxvôtresainsiquedenombreusespersonnesquiessaierontdevousaider. Rendez-vous sur http://forums.adafruit.com et lisez la sectionOtherArduinoproducts.
AchetervosservomoteursVousdisposezàprésentd’unmoyendecontrôlerungrandnombredeservos,ilvousrestemaintenantàsavoiroùlesacheteretquelssontlescritèresàsurveiller.Ilexisteungrandnombredesitesquivendentdesservomoteursenligne,unerequêterapidesurGooglevousdonneraunbonnombred’options.Lesdeuxdomainesquiutilisentlepluslesservomoteurssontlarobotiqueetl’aéromodélisme.Lesboutiquesetlessitesqui fournissent ce type de produits proposent généralement toute une gamme deservos.
La force de vos servos est appelée couple ou moment de torsion. Elle estgénéralementmesuréeenkilogrammesparcentimètre(kg/cm)ouenlivresparpouce(lb/in).Lecoupled’unservopeutallerde0,2kg/cmpourunminusculemoteurdestinéàactionnerlesgouvernesd’unavionàunénorme10kg/cmpourhisserlesvoilesd’unbateau.Justepourcomparaison,lecouplecrééparlesmainsd’unhommeadulteestapproximativementde8kg(source:NASA’shumanperformancecharts,disponiblesurlapagehttp://msis.jsc.nasa.gov/sections/section04.htm).
Évidemment, le couple dépend de la force du moteur et de la qualité de sescomposants.Laplupartdesservomoteursutilisentde4à12Vetcouvrentlaplupartdes besoins. Leurs principales différences résident dans la quantité de courantnécessairelorsqueleservotravaille,c’est-à-direest«encharge».Lorsqueleservoest en charge, il consomme beaucoup plus de courant qu’à vide.Mieux vaut donctester les moteurs individuellement avec un multimètre connecté à la ligned’alimentation et mesurer leurs consommations (comme décrit au Chapitre 5).Prévoyezunemargeraisonnable.Ilestbondenoterqu’unealimentationélectriquenedélivre que de 70 à 80 % de son intensité théorique, ce qui signifie qu’unealimentationde1Anedélivreraenréalitéque700à800mA.Bienqu’ilsoitpossibled’entirer1A,ellerisqueraitdanscecasdesedétériorerrapidement.
Lapuissancenefaitpasleprixaveclesservos.Vousverrezqu’unegrandevariétédepetitsmoteurs ont des prix élevés.Cela provient de la difficulté de fabrication.Laqualité des composants de cesmini-servos entraîne de grandes différences dans leprix et les performances. La plupart des servos sont destinés à des chargesrelativementfaiblesetutilisentdesengrenagesennylon.Lenylonconvientbiencariln’exercepratiquementaucunfrottementsurlesautresélémentsennylon,etcemêmeaprèsdesmilliersd’utilisations.Lenylonestautolubrifiantetnerequiertdoncpasdegraisse additionnelle. Cependant les servos plus importants ont des engrenages enmétalquisontcapablesdesupporterdeschargesplusimportantes,carilsnesontplusrigidesquelenylonetprésententmoinsderisquedesecasserencasDesurcharge.
Selon la façon dont ils sont contrôlés, les servos peuvent être analogiques ounumériques. Les deux types de servos ont les mêmes composants et trois fils deconnexion.Cependant,lesservosnumériquesdisposentd’unmicroprocesseurcapabled’analyser le signal qu’ils reçoivent et transmettent des impulsions aux moteursbeaucoup plus rapidement que les servos traditionnels à électronique analogique.Avecplusdesignauxparseconde,cetypedeservoauntempsderéponsepluscourt.Cependant, comme chaque impulsion consomme du courant, les servos numériquesconsomment plus, mais leur couple plus important leur permet de supporter descharges plus lourdes. Le mauvais côté de ce type de servo réside donc dans laconsommationetleprixd’achat.
Pour vous faire une idée, commencez vos recherches sur le sitewww.servodatabase.com qui propose un comparatif prix/performancesintéressant,ainsiquedesinformationssurlesmodèleslespluspopulaires.
Si vous recherchez un servo basique abordable un peu plus gros que les servosproposésdanslaplupartdeskits,regardezducôtéduservod’aéromodélismeFutabaS3003quevouspourrezvousprocurersanssouci.
AutresutilisationsdeI2CLes servomoteurs ne sont pas les seuls objets que vous pouvez contrôler via I2C.D’autres produits sont prêts à être raccordés à votre Arduino pour vous aider àréaliser une installation. Un de ces produits est le Addressable LED Ribbon(https://www.sparkfun.com/products/11272) visible à la Figure 15-6. Ce ruban deLEDflexiblepermetderecouvrirunesurfaceavecdesLED.Lerubanlui-mêmeestcomposéd’unesortedecircuitimpriméflexiblerecouvertdeLED,derésistancesetdecontacts.Cegenrederubanestproposéàunprixraisonnable.Vousenavezpeut-êtredéjàvudansdeslieuxavecunéclairaged’ambiancelelongdesmurs.
FIGURE15-6UnrubandeLEDadressables.
CommeaveclesLEDindividuelles,certainsmodèlesnedisposentqued’unecouleur,d’autresvouspermettentderégler lavaleurdescompoosantesRGBpourobtenir lacouleurdevotrechoix.LaplupartdesrubansdeLEDn’utilisentqu’unseulcircuitetnepermettentquedechangerlacouleuroulaluminositépourtouteslesLEDàlafois.Cependant, les rubansdeLEDadressablesoffrentuncontrôle individueldechaqueLED,cequipermetdecréerdesanimationsvraimenttrèsintéressantes.
IlexistedenombreuxettrèsbontutoriauxquivousaiderontàintégrerdesrubansdeLED adressables dans vos projets. Visitez les pages produits de SparkFun(https://www.sparkfun.com/products/11272) et d’Adafruit(http://learn.adafruit.com/digitalled-strip)pourvoir celaplusendétail.
VArduinoetleslogiciels
DANSCETTEPARTIE
Àcestadedevotrelecture,voussavezcâbler,souder,charger
ducode,bref,voussavezfairetoutcequirelèvedelaphysique
danslemonderéel.Maisavez-vouspenséauvirtuel?Savez-
vousqu’ilestpossibledecombinervosconnaissancesde
l’électroniqueavecunepuissanteapplicationsurvotre
ordinateurpourcréerdesuperbeseffetsvisuelsinteractifsou
pourutiliserlesdonnéesdevotreordinateuroudel’Internet
pourcréerdelalumière,dessonsoudesmouvementsdansle
monderéel?
D
Chapitre16DécouvrirProcessing
DANSCECHAPITRE
» DécouvrirProcessing
» Dessinerdesformesdedifférentescouleursettailles
ans les chapitresprécédents, tout cequevous avez appris concernait l’Arduinocommeappareilautonome.Unprogrammeest téléversépuis l’Arduinol’exécutejusqu’à ce qu’on lui dise d’arrêter ou jusqu’à ce qu’on l’éteigne. On apprécie
l’Arduino pour sa simplicité et sa clarté. Tant qu’il n’y a pas d’interférencesextérieuresoud’erreursdans lecode,etsi lescomposantsontunebonne longévité,Arduinoremplirasafonctiondefaçonfiable.Cettesimplicitéestextrêmementutileetpermet d’utiliser l’Arduino non seulement comme plateforme de prototypage, maisaussicommeunoutilsûrpourdesproduitsetdesinstallationsinteractifscommec’estdéjàlecasdepuisquelquesannéesdansdenombreuxmusées.
Mêmesicettesimplicitéesttrèsappréciable,denombreusesapplicationsdépassentlecadredescapacitésd’unArduino.L’uned’entreelles (dumoins jusqu’àprésent)est l’exécution d’un logiciel complexe. Bien que l’Arduino soit à la base unordinateur, ses capacités d’exécution sont bien loin d’être aussi développées etcomplexesquecellesdevotreordinateurdebureauouportable.Onpeuty installerdeslogicielstrèsspécialisés.Vouspourriezlargementenbénéficiersiseulementvouspouviezreliercegenredelogicielaumonderéelenpilotantl’Arduino.
Commel’Arduinopeutseconnecteràvotreordinateurpar leportsérie, ilpeutêtreexploité par un programme de la mêmemanière que votre ordinateur communiqueavec une imprimante, un scanner, ou un appareil photo.En combinant les capacitésd’interaction avec le monde physique de l’Arduino et les capacités logicielles detraitement de données de l’ordinateur, il devient possible de créer des projets trèsdiversexploitantlesentréesetlessorties.
Bonnombredeprogrammessontconçuspoureffectuerdes tâches spécifiques.Tantque vous n’avez pas déterminé ce que vous voulez fire, il vaut mieux utiliser unlogicielgénérique.Processingestunbonpointdedépart.
Danscechapitre,vousallezfairelaconnaissancedeProcessing,leprojetjumeauquis’estdéveloppéenmêmetempsqueceluid’Arduino.Processingestunenvironnementlogiciel(unatelier)qui,delamêmemanièrequeceluidel’Arduino,sertàtesterdescircuits capables d’exécuter des croquis. C’est un logiciel libre assez puissant etgrâceàsessimilaritésavecl’Arduino,ilesttrèsfacileàmaîtriser.
Processing,c’estquoi?Puisque l’Arduino sait communiquer par son port série, n’importe quel programmequi sait le faire aussi peut travailler avec. Parmi les nombreux programmesdisponibles,Processingestleplusconnu.
Processing est un atelier de création de programmes. Il est accopagné d’une vastegammed’applicationsquivontdelavisualisationdedonnéesàlacréationd’œuvresinteractives en passant par la capture demouvements avec une caméra numérique.Vous pouvez voir quelques exemples d’applications à l’adressehttp://processing.org/exhibition/.
ProcessingestaussiunlangagebasésurJavaquiressemblefortementauC(surlequelestbasélecodedel’Arduino)etauC++.IlestdisponiblepourWindows,MacOSetLinux.BenFryetCaseyReasontdéveloppéProcessingpourpermettreauxartistes,designers et autres de tester du code afin que ce ne soit pas uniquement la chassegardée des développeurs et des ingénieurs. Tout comme les idées sont souventcouchées sur papier, Processing est conçu pour faire le croquis d’un logiciel ; lesprogrammespeuventêtrerédigésetmodifiéssansavoiràypassertropdetemps.
Processingestunenvironnementdedéveloppement intégré(IDE)enmodetexte toutcomme celui de l’Arduino (en réalité, ce dernier a été « emprunté » par l’équiped’Arduino lors d’une phase de développement deProcessing).Une fenêtre (voir laFigure16-1)affichel’appletteJavaquegénèrelecode.CommeArduino,laforcedeProcessing est sa communauté importante qui partage et commente les croquis, etpermet aux participants de bénéficier de diverses applications Processing OpensourceaussibienquedemodifierlecodedeProcessing.Danscechapitre,vousallezapprendre à utiliser Processing, mais pour en savoir plus sur cet environnement,consultezsonsiteWebofficielàl’adressehttp://processing.org/.
D’autreslangagesdeprogrammationpeuvents’interfaceravecl’Arduino.JeprésenteMax/PureDataetOpenFrameworksdanslesdeuxencadrésdecechapitre.Pouruneliste complète de ces langages, allez à l’adressehttp://arduino.cc/playground/Main/In-terfacing.
FIGURE16-1L’atelierdecréationProcessingaveclecodesourced’unprojetetlafenêtred’exécutionaupremier-plan.
MAX/PUREDATA
Max(connuaussisouslenomdeMax/MSP)estunlangagedeprogrammation
graphiqueauxnombreusesutilisations,maisquisertsurtoutauxapplications
audio, de synthèse demusique et de sons. Il est disponible pourWindows,
MacOS,Linuxetd’autressystèmesd’exploitationplusobscurs.
Contrairement aux langages de programmation traditionnels basés sur du
texte, Max passe par une interface graphique pour connecter des objets à
d’autres, toutcomme lessynthétiseursanalogiquespeuventêtre«patchés»
avec des câbles pour connecter les différentes fonctions de l’instrument. La
société Cycling 74 a mis à jour la version commerciale du logiciel Max
en1990ensebasantsurletravaildeMillerPuckettepourcréerunsystèmede
création musicale. Bien que le logiciel ne soit pas libre, l’interface de
programmationpermetauxtiersdecréerleurspropresextensionsdulogiciel
pour des usages spécifiques. Miller Puckette a également développé une
versionlibreetgratuite,maiscomplètementreconçue,nomméePureData.
Voustrouverezplusd’informationssurMaxetPureDatasurlespagesdeleur
site respectif : http://cycling74.com/products/max/ et
http://puredata.info. Pour lancer la communication entre Max et
Arduino, recherchez le composant judicieusement nommé Maxuino
(http://www.maxuino.org/archives/category/updates), et pour
PureData et Arduino, recherchez Pduino
(http://at.or.at/hans/pd/objects.html).
Vous trouverez d’autres liens utiles sur le site d’Arduino
(http://www.arduino.cc/playground/interfacing/MaxMSP et
http://www.arduino.cc/playground/in-terfacing/MaxMSP).
OPENFRAMEWORKS
openFrameworksestunkitd’outilsC++Opensourcepourcréerducode.Ila
étédéveloppéparZacharyLieberman,ThéoWatsonetArturoCastroainsique
d’autres membres de la communauté openFrameworks. openFrameworks
s’exécutesousWindows,MacOS,Linux, iOSetAndroid. Iln’estpasbasésur
Java comme Processing. C’est une bibliothèque C++ qui est conçue comme
basepourdébuterdanslaproductiond’applicationsaudiovisuelles.
openFrameworks est particulièrement puissant pour les images, vous
permettantd’utiliserfacilementOpenGLpourfairedesrendusintensesoudes
applications vidéo. Contrairement à Processing, à Max et à PureData,
openFrameworks n’est pas un langage ; en fait, c’est une collection de
bibliothèqueslibres,unframeworklogicielouvert,d’oùsonnom.
Comme openFrameworks n’a pas son propre environnement de
développement intégré, le logiciel utilisé pour écrire et compiler le code
dépenddusystèmed’exploitation.Cettefonctionnalitéreprésentesouventune
difficultépourlesdébutants,cariln’yapasd’atelierIDEassocié.L’avantageest
queleC++esttrèspolyvalentetpeutêtreutilisésur laplupartdessystèmes
d’exploitation,ycomprisceuxdestéléphonesportables.
Pour en savoir plus et consulter des tutoriaux, rendez-vous sur les sites
http://www.openframeworks.cc/ ethttp://www.openframeworks.cc/tuto-
rials/introduction/000_introduction.html. SparkFun propose aussi
un bon tutoriel pour l’utiliser avec Arduino sous Windows à
http://www.sparkfun.com/tutorials/318.
InstallerProcessing
Processing est gratuit. Pour le télécharger, rendez-vous dans la page detéléchargement http://processing.org/download/ et sélectionnez votresystèmed’exploitation.Aumomentdelarédactiondecelivre,Processingenétaitàlaversion3,0,2etétaitprisenchargesousMacOSX,Windows32et64bits,Linux32et64bits.
VoicicommentinstallerProcessing:
» SousMacOS:Lefichier.zipsedécompresseautomatiquement
etseplacedansledossier~/Applications/Processing.Vous
pouvezaussileposersurvotrebureau.Dubureau,vouspouvezle
glisserdansleDockpouravoirunaccèsplusfacileoucréerunalias
surlebureau.
» SousWindows:Décompressezlefichier.zipetplacezledossier
ProcessingsurleBureauoudansunemplacementcommele
dossierProgrammes(C:/ProgramFiles/Processing/).Créez
unraccourciversl’exécutableprocessing.exeetplacez-leà
l’endroitquivousconvientlemieux:leBureauoulemenu
Démarrer.
L’interfacedeProcessingUnefoisProcessinginstallé,lancezl’application.Processings’ouvreavecuncroquisvide(voirFigure16-2)unpeucommelafenêtred’Arduino.Safenêtreestcomposéedecinqzonesprincipales:
» unebarred’outilsavecdesboutons;
» desonglets;
» unéditeurdetextesource;
» unezonedemessage;
» uneconsole.
Lecroquisvidecontientaussilabarredemenusdel’atelier,cequidonneaccèsauxmenus déroulants des options de l’application, au chargement des croquis, àl’importationdesbibliothèquesetàbiend’autresfonctions.
FIGURE16-2L’applicationProcessingestassezsimilaire,toutenétantdifférente,àcelledel’Arduino.
Voiciunaperçudelabarred’outilsdeProcessing:
» boutonRun:Exécuteoufaittournerlecodedansl’éditeurdetexte
commeuneapplette(petiteapplication)dansunenouvellefenêtre.
LesraccourcisclaviersontCtrl+RpourWindowsetCmd+Rpour
MacOS.
» boutonStop:Arrêtel’exécutionducodeetfermelafenêtrede
l’applette.
» boutonNew:Ouvreunnouveaucroquisviergeavecpournomla
dateetunelettrepourdistinguerlescroquiscomme
sketch_161230a.
» boutonOpen:Permetdesélectionnerdescroquisrécentsdans
unrépertoireouledossierExamples.
» boutonSave:Enregistrelecroquis.Quandvousl’enregistrez,
donnez-luiunnomdescriptifàlaplacedunomprédéfini.
» boutonExportApplication:Permetd’exporterlecroquis
Processingsousuneapplication,cequipeutêtreutilesivousdevez
exécuterl’applicationaudémarrageoudistribuerlecodeàdes
personnagesquin’ontpasProcessing.
» boutonMode:VouspermetdechangerdemodeentreJava
(standard),Android(mobileettablettes)etJavaScript(applications
enligne).Pourensavoirplussurcesmodes,consultezlespages
suivantes:http://wiki.processing.org/w/Androidethttp://wiki.processing.org/w/JavaScript.
» boutonTabs:Permetdetravailleravecplusieursfichiersouverts
pourlemêmeprojetProcessing.Vousutiliserezlesongletsdansles
grandsprojetspourrépartirlesobjetsducroquisprincipaloupour
intégrerdestablesderecherchededonnéesdansuncroquis.
» l’éditeurdetexte:Sertàsaisiretcorrigerlecodesourcedes
croquis.Lesmotsoufonctionsreconnussontmisensurbrillance
dansdescouleursappropriées.Cetéditeurestlemêmequecelui
del’Arduino.
» zonedemessage:Afficheleserreurs,lesretoursoudes
informationssurlatâcheencours.Vousverrezunenotification
commelorsquel’enregistrementducroquisestréussi,maisplus
souvent,ils’agitdemessagesquiindiquentoùsontleserreursdans
lecode.
» console:Affichedesinformationsdétailléessurlecroquis.Utilisez
lafonctionprintln()pourfaireafficherlesvaleursdevotre
croquis.Vousverrezaussidesdétailssupplémentairesausujetdes
erreurs.
PremierspasavecProcessingContrairement à Arduino, vous n’avez pas besoin de kit supplémentaire pourtravailleravecProcessing,cequilerendtrèsutilepourapprendreàcoder:ilsuffitdesaisiruneoudeuxlignesdecode,decliquerensuitesurRunetdevoirlerésultat.Pourl’instant,nousn’avonsmêmepasbesoindelacarteArduino.
Commencezvotrepremiercroquiscommesuit:
1. AppuyezsurCtrl+N(dansWindows)ouCmd+N(surunMac)
pourouvrirunnouveaucroquis.
2. Cliquezdansl’éditeurdetexteetsaisissezcettelignedecode:
ellipse(50,50,20,20);
3. CliquezsurleboutonRun.Lafenêtredelanouvelleapplette
s’ouvre,affichantuncercleblancaumilieudelazonegrise,comme
l’illustrelaFigure16-3.
FIGURE16-3UncroquisProcessingquidessineuneellipseremarquable.
Félicitations!Vousvenezd’écrirevotrepremierprogrammeProcessing!
C’est beau, un cercle.L’instruction demande de dessiner une ellipse,mais vous luiavezdonnélesparamètrespourfaireuncercle.Lemotellipseestmisensurbrillanceorangedansl’éditeur,voussignalantqu’ilareconnuunedesesfonctionsstandard.
Voyonssasyntaxe.Lesdeuxpremiersnombressontlescoordonnéesdel’ellipse,50,50, ici en pixels. Comme la fenêtre par défaut est de 100 x 100 pixels, les
coordonnées de 50, 50 placent l’ellipse au centre. Les valeurs 20, 20 indiquent lalargeur et la hauteur de l’ellipse, formant ainsi un cercle qui est une ellipseparticulière.
Voicilasyntaxegénériquedecettefonction:
ellipse(x,y,width,height)
Les coordonnées de l’ellipse (ou de toute autre forme ou point, peu importe) sontdéfiniesavecxetypourdésignerunpointdansunespaceendeuxdimensions(2D),qui est ici exprimé en pixels d’écran. La position horizontale correspond à lacoordonnée x et la position verticale à y. (Vous verrez plus tard que la profondeurdansunespace3Dseréfèreàz.)Ajoutezmaintenantlalignedecodequisuit,justeau-dessusdel’instructionellipse():
size(300,200);
CliquezsurleboutonRun.Vousobtenezuneellipsedanslecoinsupérieurgauchedelafenêtre,commeillustréàlaFigure16-4.Lafonctionsize()permetdedéfinirlataille de la fenêtre de l’application enpixels, ce qui fait ici 300pixels de large et200pixelsdehaut.SivotreécranestdifférentdelaFigure16-4,vousavezsansdouteplacé les instructions dans le mauvais ordre. Les lignes de code sont lues dansl’ordre,aussisilecodedel’ellipsevientenpremier,l’ellipseoccuperaentièrementlafenêtrevierge.Etavecunefenêtred’affichagerectangulaire,vousconstaterezquelescoordonnéessontenhautàgauche.
FIGURE16-4Unefenêtred’affichageplusgrande.
Lescoordonnéessontmesuréessurunegrille invisibleavecunpointaucentreà0,0pourunespace2D(ou0,0,0pourunespace3D),quiestlaréférencedel’originedanslesystèmedecordonnéescartésienquevousavezapprisàl’école.Lesnombres
peuventêtreaussibienpositifsquenégatifs,toutdépendducôtéoùilsseplacentparrapportà l’origine.Sur l’écrande l’ordinateur, l’origineestenhautàgaucheparcequelespixelssedessinentdepuislecoinsupérieurgaucheverslecoininférieurdroit,une ligne à la suite de l’autre (voir la Figure 16-5). Ce qui veut dire que notreinstruction size (300, 200) affiche une fenêtre de 300 pixels en largeursur200pixelsdehauteur.
FIGURE16-5Lagrilled’affichagesurunécran.
Dessinerd’autresformesPourvoirquellesformesvouspouvezdessiner,voicilesfonctionslesplusbasiques:
point()Unseulpointestlaformelaplusbasiqueetesttrèsutilepourconstruiredesformespluscomplexes.Saisissezlecodeci-dessousetcliquezsurleboutonRun.Regardezdetrèsprès,vousverrezunseulpixelnoiraucentrede lafenêtred’affichage(voirFigure16-6).C’estlepointquelecodeatracé:
size(300,200);
point(150,100);
FIGURE16-6Enregardantdeprèsonvoitlepoint.
Voicilasyntaxegénériquedecettefonction:
point(x,y);
line()Uneligneestlaconnexiondedeuxpoints,cequel’onfaitendéfinissantlespointsdedébutetdefin.SaisissezlecodequisuitpourgénérerunsegmentsimilaireàceluidelaFigure16-7.
FIGURE16-7Unelignetracéeentredeuxpoints.
size(300,200);
line(50,50,250,150);
Voicilasyntaxegénériquedecettefonction:
line(x1,y1,x2,y2);
rect()Vouspouvezdessinerunrectanglededifférentesmanières.Danslepremierexemple,lerectangleestdessinéenidentifiantunpointdedépart,puislalargeuretlahauteurdurectangle.Saisissezlecodequisuitpourtracerunrectangleaucentredelafenêtred’affichage:
size(300,200);
rect(150,100,50,50);
Danscetexemple, lerectanglecommenceaupoint150,100aucentrede lafenêtre.Cettefonctionestparticulièrementutilesivousvoulezquelatailledurectangleresteconstante,maisquesapositionchange.
Voicilasyntaxegénériquedecettefonction:
rect(x,y,largeur,hauteur);
Vous avez le choix entre différents modes : CENTER, CORNER, CORNERS etRADIUS.Essayez-les!(voirlaFigure16-8).
FIGURE16-8Unesélectionderectanglesdifféremmenttracés.
Si lemodeestdéfiniaucentreparCENTER, le rectangleestcentréepar rapportàcetteorigine.Saisissezlecodeci-dessouspourvoirlerésultat.
rectMode(CENTER);
size(300,200);
rect(150,100,50,50);
Lerectangleestcentrédanslafenêtred’affichage.Laformes’étenddemanièreégaleducentredupointdegaucheàdroiteetdehautenbas.
Voicilasyntaxegénériquedecettefonction:
rect(x,y,width,height);
Vous pouvez également afficher un rectangle en déclarant deux coins opposés endiagonale. Saisissez le code ci-dessous, cette fois avec rectMode spécifiantCORNERS:
rectMode(CORNERS);
size(300,200);
rect(150,100,50,50);
Le rectangle est commenceaucentre en150,100,mais se termineaupoint50,50,doncenremontantversl’anglesupérieurgauche.
Voicilasyntaxegénériquedecettefonction:
rect(x1,y1,x2,y2);
ellipse()Lepremierélémenttraitédanscechapitreétaitl’ellipse.Recopiezlecodeci-dessouspourtraceruneellipseaucentredelafenêtred’affichage:
ellipse(150,100,50,30);
Lemodepar défaut estCENTER, contrairement àrect()qui utiliseCORNERS.Voicilasyntaxegénériquedecettefonction:
ellipse(x,y,largeur,hauteur);
Comme avec rectMode(), vous pouvez définir différents modes (voir laFigure16-9)pourdessinerdesellipsesavecellipseMode().Recopiezlecodeci-dessouspourtraceruneellipseàpartird’uncoinetnondesoncentre:
ellipseMode(CORNERS);
size(300,200);
ellipse(150,100,50,50);
FIGURE16-9Unesélectiond’ellipses.
Voicilasyntaxegénériquedecettefonction:
ellipse(x,y,width,height);
Contrôlerlacouleuretl’opacitéÀprésentquevousensavezunpeuplussur lesformes,vouspouvezlesrempliretcontrôler leurapparence.Lamanière laplus simplede le faireestde jouer sur lescouleurs et l’opacité. Vous pouvez ainsi voir à travers une forme et mélanger sescouleurs.
Voyonslesfonctionsprincipales.
background()Cettefonctionchangel’arrière-plandevotrecroquis.Vouspouvezindiquerunevaleurd’échelledegrisoutroisvaleursdecouleurs.
Échelledegris
Ouvrezunnouveaucroquisetsaisissezlecodequisuitpourchangerlacouleurgrisepardéfautdelafenêtreennoir:
background(0);
Passezde0à255pourpasseraublanc:
background(255);
Touteslesvaleurssituéesentre0(noir)et255(blanc)sontdesvaleursd’échelledegris.Cetteplagedevaleurspartde0à255parcequ’ilya8bitsdedonnéesdansunoctet(voirchapitre14),cequisignifiequevousavezbesoind’unoctetpourstockerunevaleurdecouleurd’échelledegris.
Couleur
Pourmettreunpeudevie,ajoutezdelacouleurdansl’arrière-planducroquis.Àlaplace de l’échelle de gris sur 8 bits, vous utilisez des couleurs de 24 bits, ce quirevientàindiqueunevaleurpourlerougesur8bits,unautrepourlevertsur8bitsetunedernièrepourlebleusur8bits.Lacouleurdel’arrière-planestdéfinieparcestroisvaleurs.
background(200,100,0);
Celadonneunarrière-planorange.Lateinteorangeestcomposéed’unevaleurrougede 200, d’une valeur verte de 100 et d’une valeur bleue de 0. Voici la syntaxegénériquedecettefonction:
background(rouge,vert,bleu);
fill()Voulez-vouschangerlacouleurdesformesquevousdessinez?Utilisezfillpourdéfinirlacouleurtoutencontrôlantl’opacitédelaforme:
couleur
fill()définitlacouleurdesformestracéesaprèssonappel.Enappelantplusieursfoisfill(), vous pouvez changer la couleur de différentes formes. Recopiez lecode ci-dessous pour tracer trois ellipses de couleurs différentes, comme à laFigure16-10.
background(255);
noStroke();
//Rougebrillant
fill(255,0,0);
ellipse(50,35,40,40);
//Vertbrillant
fill(0,255,0);
ellipse(38,55,40,40);
//Bleubrillant
fill(0,0,255);
ellipse(62,55,40,40);
L’arrière-plan est repeint en blanc (255) puis la fonctionnoStroke() supprimeles contours des formes (vous pouvez le commenter pour en voir les effets). Lepremiercercledessinéestrouge.Vouslevoyezdansl’applettemaislesdeuxautrescercleslechevauchent.Lavaleurrougeestlaplusélevée(255),ladeuxièmeestcelleduvertetlatroisièmecelledubleu.Siondessineuneautreformeàlafinducode,elleauralamêmecouleurbleuequeladernièrevaleurdéfinieparfill().
FIGURE16-10Différentscerclesencouleur.
Opacité
Vous pouvez aussi contrôler l’opacité aux couleurs, créant ainsi des formes semi-transparentes. En fournissant un quatrième paramètre lors de l’appel à la fonctionfill(),vousdéfinissezl’opacitéentre0(complètementtransparent)à255(couleursolide, par défaut).Mettez à jour le code précédent en lui ajoutant les valeurs quisuiventpourdonnerdelatransparenceauxcercles:
background(255);
noStroke();
//Rougebrillant
fill(255,0,0,100);
ellipse(50,35,40,40);
//Vertbrillant
fill(0,255,0,100);
ellipse(38,55,40,40);
//Bleubrillant
fill(0,0,255,100);
ellipse(62,55,40,40);
ProgrammerdesinteractionsTous ces jolis dessins sont sympathiques, mais terriblement statiques. Nous allonsinjecterunpeudevieauxcroquisennousservantdelasouriscommeuneentrée.Ilfaudramettre constamment le croquis à jour en effectuant des tours de boucle pourenvoyerdenouvellesvaleurs.Heureusement,Processingprédéfinitune fonctionquis’encharge.Recopiezlecodeci-dessouspourcréeruncroquisinteractif:
voidsetup(){
size(300,200);//Facultatif
}
voiddraw(){
ellipse(mouseX,mouseY,20,20);
}
Cecodetraceuneformecentréesurlescoordonnéesducurseurdelasouris.Quandvousdéplacez la souris,vous laissezune traînée, comme l’illustre laFigure 16-11.LesfonctionsmouseXetmouseYsontmisesensurbrillancebleuedans l’éditeurde texte et prennent les coordonnées du curseur de la souris dans la fenêtred’affichage.
FIGURE16-11Leprogrammesuitlepointeurdesourisàlatrace.
Cecodenedevraitpasvousêtretotalementétranger.Àlaplacedesfonctionsvoidsetup()etvoidloop()d’Arduino,Processingutilisevoidsetup()etvoid draw(). Toutes deux fonctionnent exactement de la même manière :setup() s’exécute une seule fois au début du croquis, tandis que draw()s’exécutedefaçonrépétéejusqu’àcequevousfermezlafenêtredetestouutilisezleboutonArrêter.
ModifiezlégèrementlecroquispourrecouvrirlestracésprécédentsetnegardequelaplusrécentFigure16-12):
voidsetup(){
}
voiddraw(){
background(0);
ellipse(mouseX,mouseY,20,20);
}
VouspouvezfairebienplusavecProcessing,maiscontinuerdedévelopperd’autressujets dépasserait le cadre de ce livre. J’espère que ces quelques éléments vousdonnerontune idéedeseffetsvisuelsquepeutproduire lecode.Vous trouverezunequantitéd’exemplessurlesiteetdanslelogicielProcessing.Lameilleureapprocheestcommetoujoursdetestercesexemples,d’enmodifierlesvaleurspourvoircequisepasse.
FIGURE16-12Uneseuleformeapparaîtensuivantlecurseurdelasouris.
LeprincipalintérêtdecetteprésentationestdevousprépareràassocierProcessingetArduino.C’estlesujetduprochainchapitre.
D
Chapitre17Agirsurlemonderéel
DANSCECHAPITRE
» Allumerunevraielampeparunclicàl’cran
» Représenteràl’écrandeschangementsdumonderéel
» Gérerplusieurssignauxentrel’ArduinoetProcessing
ans le chapitre précédent, vous avez appris les bases de Processing, sesdifférencesetsessimilitudesavecArduino.Cechapitreportesurlacombinaisondes deux outils pour intégrer les mondes virtuels et physiques. Ces quelques
exercicesvousapprendrontcommentenvoyeretrecevoirdesdonnéesdansArduinoetdans Processing. Vous pourrez créer vos propres projets en vous en inspirant, parexemple pour générer des animations visuelles à partir des informations remontéesparvoscapteurs,oupourallumerunelumièrechaquefoisquevousêtesmentionnésurTwitter.
AgirsurleréeldepuisunboutonvirtuelDanscetexemple,vousapprenezàafficherunboutonàl’écranavecProcessing,etceboutonvacontrôlerunevraieLEDreliéeàvotreArduino.C’estunexcellentcroquispour apprendre à produire des interactions entre les ordinateurs et le monde réel,ainsiqu’entrelacarteArduinoetl’atelierProcessing.
Ilvousfaudra:
» UnArduinoUno
» UneLED
La configuration est très simple pour cette introduction à Arduino et Processing,puisqu’ilnevousfautqu’uneLED.
Comme le montrent les Figures 17-1 et 17-2, insérez la longue patte dans labroche 13 et la courte dans GND. Si vous n’avez pas de LED, vous pouvezsimplementobserverlaLEDembarquéesurlacarteetlibellée«L».
FIGURE17-1Plandecâblagedel’ArduinoavecuneLEDreliéeàlabroche13.
MettreenplacelecodepourArduinoUnefoisquevotrecircuitestassemblé,vousavezbesoindulogicielappropriépourl’utiliser. Dans le menu Arduino, sélectionnez Fichier->Exemples->04.Communications->PhysicalPixelquiestunnouveaugenredecroquis.
Eneffet,cecroquiscontientducodeArduinoetducodeProcessing(ettoutàlafin,ilyaunblocdecodepourMax/MSP5quenouslaisseronsencommentaires).LecodequiapparaîtaprèslecodeArduinoestpourl’instantcommentépourqu’ilnesoitpasprisencompteparlecompilateurdel’atelierArduino.
Dans les anciennes versions d’Arduino, les noms des fichiers de croquis seterminaientpar.pde,quiétaitetrestel’extensiondenomsdefichiersdeProcessing.Cela engendraitde la confusion, si bienque les fichiersArduinoportentdésormaisl’extension .ino. Ces extensions distinctes permettent de conserver les fichiersArduino et Processing au même endroit. Si vous tentez d’ouvrir un .pde dansArduino, l’application supposera qu’il s’agit d’un vieux croquis Arduino et vousdemanderasivoussouhaitezremplacersonextensionpar.ino.
FIGURE17-2Schémadel’ArduinoavecuneLEDen13.
/*
PhysicalPixel
Unexempled’utilisationdelacarteArduinopour
rece-
voirdesdonnéesdel’ordinateur.Danscecas,la
carte
ArduinoallumeuneLEDquandellereçoitle
caractère‘H’
etl’éteintquandellereçoitlecaractère‘L’.
Lesdonnéespeuventêtreenvoyéesàl’Arduinovia
le
moniteursérie,ouviatoutautreprogrammecomme
Pro-
cessing(voirlecodeplusbas),Flesh(viaunproxy
serial),PDouMax/MSP.
Lecircuit:
*LEDreliéeàlabrochenumérique13etàlamasse
Crééen2006
ParDavidA.Mellis
Modifiéle30août2011
parTomIgoeetScottFitzgerald
Cetexempledecodeestdansledomainepublic.
http://www.arduino.cc/en/Tutorial/PhysicalPixel
*/
constintledPin=13;//BrocheàlaquellelaLED
est
reliée
intincomingByte;//Variablepourlesdonnées
par-
venantparsérie
voidsetup(){
//Initialiselacommunicationsérie
Serial.begin(9600);
//ConfigurelabrochedelaLEDensortie
pinMode(ledPin,OUTPUT);
}
voidloop(){
//Voirsidesdonnéessériesontarrivées:
if(Serial.available()>0){
//Lirel’octetleplusanciendansletampon
série:
incomingByte=Serial.read();
//Sic’estunHmajuscule(ASCII72),allumer
la
LED:
if(incomingByte==‘H’){
digitalWrite(ledPin,HIGH);
}
//Sic’estunLmajuscule(ASCII76)éteindre
la
LED:
if(incomingByte==‘L’){
digitalWrite(ledPin,LOW);
}
}
}
Vérifiezettéléversezmaintenantlecroquis.
Unefoisquel’ArduinoestainsiconfigurépourrecevoirunmessagedeProcessing,ilreste à implanter l’autre croquis dans l’atelier Processing puis à le démarrer pourenvoyerunmessagesurlemêmeportsériequeceluiqu’utilisevotreArduino.
MettreenplacelecodedeProcessingLecodesetrouveentrelesmarquesdecommentairessurplusieurslignes(/*et*/),aprèslecroquisArduino.Copieztoutcecode,puisdémarrezl’atelierProcessingetcollez le tout dans un nouveau croquis Processing. Sauvegardez-le avec un nomapproprié,commePhysicalPixel.Dufaitquelesextensionsdenomsdefichierssontdifférentes,iln’yaurapasdeconflitavecl’autrefichier.
/*CodeProcessingpourcetexemple.PhysicalPixel
//Survoldelasourisdétectéparleportsérie
//Démontrecommentenvoyerlesdonnéesàlacarte
Ar-
duino
//pourallumerunelumièreparclicdansuncarré
//Crééenavril2003
//BasésurdesexemplesdeCaseyReasetHernando
Bar-
ragan
//Modifiéle30août2011parTomIgoe
//Cetexempledecodeestdansledomainepublic.
importprocessing.serial.*;
floatboxX;
floatboxY;
intboxSize=20;
booleanmouseOverBox=false;
Serialport;
voidsetup(){
size(200,200);
boxX=width/2.0;
boxY=height/2.0;
rectMode(RADIUS);
//Dresselalistedetouslesportsséries
disponibles
ensortie.
//Vousdevrezchoisirleportauquellacarte
Arduino
estconnectée.
//Lepremierportdanslalisteestleport#0et
le
troisièmeleport#2.
println(Serial.list());//Facultatif,carpeut
créer
uneerreur
//OuvrirleportauquellacarteArduinoest
connectée
(ici,leport#0).
//S’assurerd’ouvrirleportaumêmedébitquela
carte
Arduino(9600bps)
//LamentionSerial.list()[0]ci-dessouspeutêtre
rem-
placéepar
//lenomduportentreguillemets
//commedansSerial(this,“/dev/tty.usbmodem1431”,
9600);
port=newSerial(this,Serial.list()[0],9600);
}
voiddraw()
{
background(0);
//Testersilepointeurdesourisestdansles
limites
ducarré
if(mouseX>boxX-boxSize&&mouseX<boxX+boxSize
&&
mouseY>boxY-boxSize&&mouseY<boxY+boxSize){
mouseOverBox=true;
//Dessineruncontouretmodifierlacouleurdu
carré
stroke(255);
fill(153);
//Envoyerun‘H’pourindiquerquelasouris
estsur
lecarré
port.write(‘H’);
}
else{
//Réafficherlecarrédanssonétatd’origine
stroke(153);
fill(153);
//Envoyerun‘L’pouréteindrelaLED
port.write(‘L’);
mouseOverBox=false;
}
//Dessinerlecarré
rect(boxX,boxY,boxSize,boxSize);
}
Cliquez sur le bouton Exécuter pour lancer le croquis Processing. Une fenêtred’applettedoitapparaîtreavecunfondnoiraucentreduquelsetrouveuncarrégris.Cecarréreprésentevotreboutonvirtuel(voirFigure17-3).
FIGURE17-3Lafenêtred’appletteProcessingafficheunbouton-pixeldecommande.
Si vous amenez le pointeur dans ce carré gris, vous pouvez voir que les contourschangent.Sivous jetezunœil survotrecarteArduino,vousverrezquechaque foisquevotresourispassedanslecarrégris,laLEDs’allume,matérialisantlesurvolducarré.
SivotreLEDnes’allumepas,revérifiezvotrecode:
» VérifiezquevousavezlaissélapartieProcessingencommentaires
dansl’atelierArduino.
» VérifiezquelecodeProcessingestdécommenté,saufleblocfinal
pourMax/MSP.
» Vousnepouvezpastéléverserversl’Arduinotantquelecroquis
ProcessingestenexécutionetcommuniqueavecvotreArduino;
vousdevrezarrêterlecroquisProcessingd’abord.
» Silecarréréagit,maispaslaLED,c’estunproblèmedeportdansla
partieProcessing.Lisezlasuitepourunesolution.
» VérifiezquelespattesdelaLEDsontdanslebonsens.
LecroquisProcessingdePhysicalPixelChaque fois que possible, c’est une bonne idée de diviser vos projets en plusieurséléments.Vousutilisezpeut-êtreplusieursentréesetsorties,maissivousn’entraitezqu’uneà la fois, il seraplus facilede lescomprendreetdedétecter lesproblèmesqu’ellespeuventposer.CommelecôtéProcessingcorrespondàl’entrée,vousdevriezcommencerparlà.
La structure du croquis Processing ressemble à celle du croquis Arduino. Vousimportezdesbibliothèquesetdéclarezdesvariablesaudébutducroquis,etspécifiezquelquesvaleursàdéterminerdanssetup().Lafonctiondraw() répèteensuiteleprocessustantqu’ellen’estpasarrêtée.
ProcessingutilisedesbibliothèquespourajouterdesfonctionnalitéscommeArduino.Dansnotrecas,unebibliothèquedecommunicationsérieest requisepourdialogueravec l’Arduino. Dans Arduino, cette bibliothèque serait référencée en utilisant#include <nomBibliotheque.h>, mais dans Processing, vous utilisez lemot-cléimport,suividunometducaractère*pourchargertoutlecontenudelabibliothèque.
importprocessing.serial.*;
Un flottant est un nombre décimal avec des chiffres après la virgule (un point enprogrammation,pasunevirgule),comme0.5ou10.9,etainsidesuite.Dansnotrecas,deuxflottantssontdéclarés,boxXetboxY.Cesontlescoordonnéespourplacerlecarré.
floatboxX;
floatboxY;
Ensuite,boxSizedéfinit la dimension du carré avec un entier. Comme c’est uncarré,seuleunevaleurestrequise.
intboxSize=20;
Un booléen (qui ne peut valoir que vrai ou faux, soit true et falserespectivement)estutilisépourindiquersilasourisestdanslecarré.Ilestàfalseaudépart,carl’exécutioncommencetoujoursdansl’anglesupérieurgauche.
booleanmouseOverBox=false;
Ladernièrechosequevousdevez faire,c’estdecréerunnouvelobjetpour leportsérie.D’autresconnexionssériespourraientêtredéjàutiliséessurvotrePC,etilest
doncimportantquechacunesoitlibelléepourêtreutiliséeaubesoin.Dansnotrecas,vousn’utilisezqu’unseulport.LemotSerialestspécifiqueà labibliothèqueserialpourindiquerquevoussouhaitezcréerunnouvelobjetcorrespondantàunportsérie(une connexion), et lemotport est le nom que vous souhaitez donner à l’objet enquestion.
Serialport;
Danssetup(), ilfautd’aborddéfinirlesdimensionsdelafenêtred’affichage.Ceserauncarréde200pixelsdecôté.
voidsetup(){
size(200,200);
LesvariablesboxXetboxYsontcalculéespourêtreproportionnellesàlargeuretàlahauteurdelafenêtred’affichage.Ellessonttoujourségalesàlamoitiédelalargeuretàlamoitiédelahauteur,respectivement.Ensuite,rectMode()active lemodeRADIUS.cequiindiquecommentlesvaleurstransmisesplusloinàrectangle()doiventêtreinterprétées.Enl’occurrence,RADIUSspécifiequelesdeuxpremièresvaleurs fournissent les coordonnées du centre du carré, tandis que les deux autrescorrespondentàlamoitiédelalargeuretdelahauteur,respectivement.Delasorte,lecarrésetrouveparfaitementcentré.
boxX=width/2.0;
boxY=height/2.0;
rectMode(RADIUS);
Votreordinateurpouvantdisposerdeplusieursconnexionsséries,nousenaffichonslalistepourlocalisercelledevotreArduino.
println(Serial.list());
Leportleplusrécentapparaîtenhautdelalisteàlaposition0,alorssivousvenezdeconnectervotreArduino,c’estceportquevousdevriezsélectionner.Vouspouvezne pas utiliser la fonctionSerial.list(), car elle semble rétive sur certainesmachines.Danscecas,vousremplaceztoutl’appelàSerial.list()[0]parlenomexactduport,comme/dev/tty.usbmodem26221ouCOM5,entreguillemets.Lavaleur9600correspondaudébitenbitsparseconde,lavitesseàlaquellevousvousavezréglélescommunicationsavecvotreArduino.
Siledébitn’estpasidentiqueauxdeuxextrémités(celuiquienvoie,celuiquireçoit),lesdonnéesnesontpasreçues.
port=newSerial(this,Serial.list()[0],9600);
}
Dansdraw(),lapremièretâcheestdedessinerunfondnoir.
voiddraw()
{
background(0);
Processing utilise les mêmes instructions conditionnelles qu’Arduino. L’instructionif(surdeuxlignes,ici)testelapositiondelasourispoursavoirsiellesetrouvesurlecarré.Sil’abscissedelasourismouseXestplusgrandequel’abscisseducentredu carré diminuée de la moitié du côté, et plus petite que l’abscisse du centreaugmentéedelamoitiéducôté,alorslasourisestsurlacolonneducarré.Cetestestcombinéàl’aidedel’instructionET(&&)àuntestdemêmenaturepourdéterminersila souris se trouve sur la ligne du carré. Ce n’est donc que si les deux tests sontvalidésquelebooléenmouseOverBoxprendlavaleurtrue.
//Testersilecurseurdelasourisestsurle
carré
if(mouseX>boxX-boxSize&&mouseX<boxX+boxSize
&&
mouseY>boxY-boxSize&&mouseY<boxY+boxSize){
mouseOverBox=true;
PourindiquerquemouseOverBoxesttrue,lecodetraceuncontourblancautourdu carré. Plutôt que de tracer un nouveau carré, il suffit demodifier la couleur ducontouràl’aidedestroke().Lavaleur255estuncodepourlacouleurblanc.
//Dessineruncontouretmodifierlacouleurdu
carré
stroke(255);
Quant à fill() qui permet de modifier la couleur du carré, elle prend lavaleur153correspondantàungrismoyen.
fill(153);
C’est maintenant que les communications sont effectuées. L’instructionport.write()estcommeSerial.print(),maiselleestutiliséepourécriresurunportsériedepuisProcessing.LecaractèreenvoyéestunH,pourHIGH.
//Envoyerun‘H’pourindiquerquelasourisest
dans
lecarré
port.write(‘H’);
}
L’instructionelseindiqueàProcessingcequ’ildoitfairesilasourisn’estpasdanslecarré.
else{
Lavaleurcommuniquéeàstroke()estungrismédian.Lacouleurderemplissagerestedoncidentique,quelecurseurdelasourissoitdessusounon.
//Rétablirlecarrédanssonétatd’origine
stroke(153);
fill(153);
LecaractèreLestenvoyésurleportsériepouréteindrelaLED.
//Envoyerun‘L’pouréteindrelaLED
port.write(‘L’);
LebooléenmouseOverBoxestforcéàfalse.
mouseOverBox=false;
}
Pourfinir,lecarréesttracé.Sescoordonnéesetdimensionsnechangentpas;laseuledifférence est dans la couleur appliquée à l’instructionif. Si la souris est dans lecarré, le contour devient blanc (actif) ; sinon, le contour est grismédian comme lecontenuetnes’endistingueplus(inactif).
//Dessinerlecarré
rect(boxX,boxY,boxSize,boxSize);
}
LecroquisArduinodePhysicalPixelDans la section précédente, vous avez vu comment la partie Processing fonctionnepourfournirunsignal.CesignalestenvoyéàvotreArduinoparlaconnexionsérie.Danscettesection,voyonscequelapartieArduinoenfait.LecodeArduinopourcetexempleestrelativementsimpleencomparaisondesautresexemplesfigurantdanscelivre, et parfaitement indiqué pour comprendre comment fonctionne une connexionsérie.Jerecommandetoujoursdecommenceraveccecroquispourselancerdansunprojet impliquant une communication de Processing vers Arduino. C’est uneexcellenteméthodepours’assurerquevotrematérieletvotre logiciel fonctionnent ;vouspouvezensuitel’adapteràvosbesoins.
Tout d’abord, la constante et la variable sont déclarées. La broche de la LED(broche 13) correspond à la sortie et ne change pas, si bien qu’elle est déclaréecomme constante. La valeur incomingByte reçoit les données ; conduite àchanger, elle est déclarée comme un entier (int), et non un caractère (char).J’expliquepourquoiplusloin.
constintledPin=13;//Labrocheàlaquellela
LEDest
reliée
intincomingByte;//Unevariablepourles
données
parvenantparsérie
Danssetup(),lacommunicationsérieestconfiguréeàundébitde9600.
N’oubliezpasquedansProcessingetArduino,sivousmodifiezledébitdumatérielou de l’application qui envoie les données, vous devez aussi changer le débit dumatériel ou de l’application qui les reçoit. Lorsque vous communiquez avec unordinateur, vous pouvez choisir parmi les débits suivants : 300, 600, 1200, 2400,4800,9600,14400,19200,28800,34800,57600ou115200.
voidsetup(){
//Initialiselacommunicationsérie
Serial.begin(9600);
Labroche13,ledPin,estconfiguréeensortie.
//FairedelabrochedelaLEDunesortie
pinMode(ledPin,OUTPUT);
}
La première action dans loop() consiste à déterminer si des données sontdisponibles. Serial.available() teste le tampon série, qui contient toutedonnéeenvoyéeàl’Arduinoenattendantqu’ellesoitlue.
Envérifiant que la valeur retournée est supérieure à 0 avant d’envisager de lire letampon,vousréduisez lenombredelecturesdecedernier,puisquevousne le lisezque si une donnée s’y trouve. Si vous lisiez systématiquement le tampon, vousralentiriez le fonctionnement de votre Arduino ainsi que celui de tout matériel oulogicielassocié.
voidloop(){
//Voirsidesdonnéessériessontarrivées
if(Serial.available()>0){
Si lavaleur estplusgrandeque0, le contenudu tamponest lu et conservédans lavariableincomingBytedetypeint.
//Lirel’octetleplusanciendansletamponsérie:
incomingByte=Serial.read();
Vousdevezmaintenantsavoirsilesdonnéesreçuessontcellesquevotreprogrammeattend.ProcessingenvoieuncaractèreH,mais cen’estqu’unoctetdedonnéesquevous pouvez traiter comme un entier ou un caractère.Dans le cas présent, vous letraitez comme un entier. L’instructionif teste s’il correspond à la valeur 72, quicorrespondaucodeASCIIducaractèreH.LesguillemetsindiquentqueHdésignelecaractère,etnonunevariablenomméeH.L’instructionif(incomingByte==72)secomporteraitdelamêmemanière.
//Sic’estunHmajuscule(ASCII72),allumerla
LED
if(incomingByte==‘H’){
Silesvaleurssontégales,labroche13passeàHIGH.
digitalWrite(ledPin,HIGH);
}
Si lavaleurestuncaractèreL,soitunentierdevaleur76, lamêmebrochepasseàLOW.
//Sic’estunLmajuscule(ASCII76)éteindrela
LED
if(incomingByte==‘L’){
digitalWrite(ledPin,LOW);
}
}
}
CetteinteractiontrèsélémentaireentreProcessingetArduinoconstitueuneexcellentebasepourdesprojetsplusélaborés.Danscetexemple,l’interactionavecl’écranestl’entrée,mais il serait possible d’y substituer une entréeplus complexe, comleunereconnaissance faciale : lorsque votre visage est au centre de l’écran, le signal estenvoyé.Demême,ducôtéArduino,ilseraitpossibledegéreruneautresortieplutôtquedesecontenterd’allumeruneLED(aussiamusantquecesoit).Parexemple,vouspourriezrelierdesphotocoupleursàunetélécommandeetcommenceràlirequelquechosechaquefoisque lesignalHIGHestenvoyé,etvouspourriez faireunepausechaquefoisqu’unsignalLOWestenvoyé.
DessineravecunArduinoDans la section précédente, nous avons vu comment envoyer des données dans unsens.Commentenvoyerdessignauxdansl’autresens,c’est-à-diredel’ArduinoversProcessing ? Dans cet exemple, vous découvrez comment lire la valeur d’unpotentiomètrereliéàvotreArduinoetaffichervisuellementlerésultatdansuneappletProcessing.
Ilvousfaudra:
» UnArduinoUno
» Uneplatined’essai
» Unpotentiomètre
» Desstraps
Le circuit de base utilise un potentiomètre pour envoyer une valeur analogique àProcessingquipeutêtreinterprétéeetaffichéesurungraphiqueàl’écran.Assemblezlecircuitensuivant lesFigures17-4et17-5.Lapattecentraledupotentiomètreestreliée à la broche analogique 0.Concernant les deux autres pattes, l’une est reliéeau 5 V et l’autre à GND. En inversant ces broches, vous modifiez le sens deprogressiondelavaleurgénéréequandvoustournezlepotentiomètre.
FIGURE17-4Schémadecâblagepouruneentréeparpotentiomètre.
MettreenplacelecodepourArduinoUne fois que vous avez assemblé votre circuit, vous avez besoin du logiciel pourl’utiliser. Dans le menu Arduino, sélectionnez Fichier->Exemples->04.Communication->Graph pour charger le croquis. Comme le précédent, ilcontient le code Arduino et le code Processing (ainsi qu’une variante pourMax/MSP5).LecodeProcessingse trouvesous lecodeArduino ; ilestcommentépournepasinterféreraveccedernier.
FIGURE17-5Schémaducircuitpouruneentréeparpotentiomètre.
/*
Graph
Unexempledecommunicationdel’Arduinovers
l’ordina-
teur.Lavaleurdelabrocheanalogique0est
envoyéesur
leportsérie.Nousparlonsdecommunication
«série»,car
laconnexionapparaîttantàl’Arduinoqu’à
l’ordinateur
souslaformed’unportsérie,quoiquenous
n’utilisions
pasdecâbleUSB.Lesoctetssontenvoyéslesuns
après
lesautres(ensérie)del’Arduinoàl’ordinateur.
VouspouvezutiliserlemoniteursérieArduinopour
visualiserlesdonnéesenvoyées,ouvouspouvezles
lire
avecProcessing,PD,Max/MSPoutoutautreprogramme
capabledeliredesdonnéessurunportsérie.Le
code
Processingquifigureplusbasafficheungraphique
avec
lesdonnéesreçuespourquevouspuissiezvisualiser
la
valeurdel’entréeanalogiquedansletemps.
Lecircuit:
Uncapteuranalogiquequelconqueestconnectéàla
bro-
cheanalogique0.
Crééen2006parDavidA.Mellis
Modifiéle9avril2012parTomIgoeetScott
Fitzgerald
Cetexempledecodeestdansledomainepublic.
http://www.arduino.cc/en/Tutorial/Graph
*/
voidsetup(){
//Initialiselacommunicationsérie
Serial.begin(9600);
}
voidloop(){
//Envoyerlavaleursurlabrocheanalogique0
Serial.println(analogRead(A0));
//Attendreunpeupourstabiliserle
convertisseur
//analogique-vers-numériqueaprèsladernière
lecture
delay(2);
}
Téléversezmaintenantvotrecroquisdanslacarte.
L’ArduinoétantconfigurépourrecevoirunmessagedeProcessing,vousdevezmettreenplacelecroquisProcessingpourrecevoirlemessageparvenantsurleportsérie.
MettreenplacelecodeProcessingLecodesetrouveentrelesmarquesdecommentairessurplusieurslignes(/*et*/),après le croquis Arduino. Démarrez Processing, copiez le bloc de code depuisArduinoetcollez-ledansunnouveaucroquisProcessingquevoussauvegardezavecunnomappropriécommeGraph.
Enlevez lesmarques de commentaires de toute la partie Processing. Ne laissez encommentairesqueleblocfinalpourMax,ousupprimez-le.
//CroquisGraphing
//Ceprogrammerécupèreunechaînedecaractères
codés
enASCII
//surleportsérieà9600bpsetlesaffichesous
forme
d’ungraphique.
//Ils’attendàcequelesvaleurssoient
comprises
entre0et1023,
//suiviesd’unretouràlaligne
//Crééle20avril2005
//Misàjourle18janvier2008
//parTomIgoe
//Cetexempledecodeestdansledomainepublic.
importprocessing.serial.*;
SerialmyPort;//Leportsérie
intxPos=1;//L’abscissedugraphique
voidsetup(){
//Spécifierlesdimensionsdelafenêtre
size(400,300);
//Dresserlalistedetouslesportsséries
dispo-
nibles
println(Serial.list());
//VOIRLESCOMMENTAIRESDUPREMIERPROJET
myPort=newSerial(this,Serial.list()[0],
9600);
//NegénérezpasserialEvent()àmoinsde
recevoirun
caractèrede
//passageàlaligne
myPort.bufferUntil(‘\n’);
//Configurerlacouleurinitialedufond
background(0);
}
voiddraw(){
//ToutsedérouledansserialEvent()
}
voidserialEvent(SerialmyPort){
//RécupérerlachaîneASCII
StringinString=myPort.readStringUntil(‘\n’);
if(inString!=null){
//Supprimertouslescaractèresespaceàlafin
inString=trim(inString);
//Convertirenentieretrapporteràlahauteurde
l’écran
floatinByte=float(inString);
inByte=map(inByte,0,1023,0,height);
//Dessinerlaligne
stroke(127,34,255);
line(xPos,height,xPos,height-inByte);
//Alafindel’écran,reveniràsondébut
if(xPos>=width){
xPos=0;
background(0);
}
else{
//Incrémenterl’abscisse
xPos++;
}
}
}
Cliquez le bouton Exécuter pour exécuter le croquis Processing, et une fenêtred’applette devrait apparaître. Elle a un fond noir et affiche un graphique violetreprésentantlesvaleursgénéréesparl’entréeanalogiquedel’Arduino,commesurlaFigure17-6.
Lorsque vous tournez le potentiomètre, le graphique violet s’ajuste pour en rendrecompte. Le graphique est mis à jour dans le temps, si bien qu’il progresseinsensiblement.Lorsqu’ilatteintl’extrémitédelafenêtred’affichage,ilrecommenceaupointdedépart,surlagauchedelafenêtre.
FIGURE17-6Ungraphiquevioletreprésentelesvaleurschoisiesaveclepotentiomètre.
Sivousnevoyezpaslegraphique,revérifiezlecodeetlecâblage:
» Vérifiezquelenumérodeportsérieestlebon.
» Vérifiezquevousutilisezlesbonsnumérosdebroche.
» Vérifiezquelepotentiomètreestbienconnecté.
» VérifiezquevotrecodeArduinoaététéléversécorrectementetque
votrecodeProcessingnecontientpasd’erreur.Notezquevousne
pouvezpastéléversertandisquelecroquisProcessing
communiqueavecvotreArduino;vousdevrezarrêterlecroquis
d’abord.
ComprendrelecroquisGraphpourArduino
Danssetup(), lecode initialise leport série. Il suffitd’indiquerque ledébitestde9600,cequidoitcorrespondreaudébitindiquédanslecroquisProcessing.
Lesbrochesd’entréeanalogiquessontconfiguréesenentréespardéfaut,sibienquevousn’avezpasàappelerpinMode().
voidsetup(){
//Initialiserlacommunicationsérie:
Serial.begin(9600);
}
Dansloop(),uneseuleligneestutiliséepourtransmettrelavaleurducapteursurleportsérie.Labrocheestdirectementdésignéeplutôtquedepasserparunevariable(tellequeanalogPin),car iln’yestpasfait référencepar lasuite.LabrocheestA0,c’est-à-direl’entréeanalogique0.
voidloop(){
//Envoyerlavaleursurlabrocheanalogique0:
Serial.println(analogRead(A0));
Les lectures analogiques sont extrêmement rapides, généralement plus rapides quelorsqu’elles doivent être converties en numérique. Parfois, cette vitesse peut
engendrerdeserreurs,sibienqu’attendreunbrefdélaide2millisecondesentredeuxlecturespeutaideràstabiliserlesrésultats.
//Attendreunpeupourstabiliserle
convertisseur
//analogique-vers-numériqueaprèsladernière
lecture:
delay(2);
}
ComprendrelecroquisGraphpourProcessingPuisque les données sont envoyées sur le port série, Processing va les lire et lesinterpréter pour dessiner le graphique. Tout d’abord, vous devez importer labibliothèquedans lecroquisetcréerunenouvelle instanceduport.Danscecas, lenouvelobjetcorrespondantauportsérieestnommémyPort.
importprocessing.serial.*;
SerialmyPort;//Leportsérie
Unentier,définiparxPos, conserve la tracede ladernièrecolonne tracéedans legraphique(l’abscisse).
intxPos=1;//L’abscissedugraphique
Dans setup(), la fenêtre d’affichage est définie comme faisant 400 pixels delargeuret300pixelsdehauteur.
voidsetup(){
//Spécifierlesdimensionsdelafenêtre
size(400,300);
Pour trouver le bon port série, Serial.list() est appelée. Les informationsqu’elle renvoie sont affichées dans la console avec println(). La fonctionprintln()estsemblableàSerial.println()dansArduino,maiselleestutilisée dans Processing pour observer des valeurs arrivant sur le port série. Ces
valeurss’affichentsurlaconsoleplutôtquedepartirsurleportsérie,etsontutiliséespourdéboguerplutôtquepourcommuniquer.
//Dresserlalistedetouslesportsséries
dispo-
nibles
println(Serial.list());
Leport utilisé par votreArduinodevrait apparaître enhaut de la liste, si bienquemyPort utilise la position 0 pour le repérer. Si vous n’utilisez par la fonctionSerial.list(), vous pouvez remplacer Serial.list()[0] par un autrenombre dans la liste affichée dans la console. Vous pouvez aussi remplacerSerial.list()[0] par le nom exact du port, comme « /dev/tty.usbmodem26221»ou«COM5»,entreguillemets.IlestutiledespécifierlenomsivousavezconnectéplusieursArduinoàl’ordinateur.Lenombre9600correspondaudébit, lavitesseà laquellevouscommuniquezavecvotreArduino.Si ledébitn’estpaslemêmedepartetd’autre,lesdonnéesneserontpasreçues.
myPort=newSerial(this,Serial.list()[0],9600);
Danscetexemple,vousdisposezd’uneautremanièredefaireletrientrelesbonnesetlesmauvaisesdonnées.LafonctionserialEvent()estappeléeautomatiquementchaquefoisqu’unedonnéearrivedansletamponduportsérie.Ici,lafonctionvérifiequ’il s’agit d’un caractère suivi d’un saut de ligne, en cohérence avecSerial.println(100)utiliséducôtéArduino.Lesautdeligne,équivalentàlatouche Entrée du clavier, correspond au caractère ASCII symbolisé par \n. Lafonction pourrait parfaitement rechercher n’importe quel autre caractère, comme latabulation\t.
//NepasdéclencherserialEvent()àmoinsde
recevoir
uncaractèrede
//sautdeligne
myPort.bufferUntil(‘\n’);
Lefonddefenêtreestrepeintennoir.
//Configurerlacouleurinitialedufond
background(0);
}
Dansdraw(),iln’yarienàfairecarserialEvent()surveilleleportsérieetse déclenche chaque fois que vous recevez un caractère de saut de ligne. Lecommentairefigurantdanslecodelerappelle.
voiddraw(){
//ToutsedérouledansserialEvent()
}
La fonction serialEvent() fait partie de la bibliothèque serial et sedéclenchechaquefoisquedesdonnéesarriventdansletamponduportsérie.CommelaconditionbufferUntil(‘\n’)estutilisée,serialEvent()sedéclenchechaquefoisqu’uncaractèredesautdeligneestdétecté.
voidserialEvent(SerialmyPort){
Unevariabledetypechaînedecaractères(string)estdéclaréepourconserverlesdonnées lues sur le port myPort. Les données sont lues jusqu’à rencontrer uncaractèredesautde ligne.Commel’Arduinoenvoieunentiersuivid’unretourà laligne,suivid’unentier,etainsidesuite,lesvaleurssontluesuneparune.
//RécupérerlachaîneASCII
StringinString=myPort.readStringUntil(‘\n’);
Uneinstructionifvérifieque lachaînecontientdesdonnéesetqu’ellen’estdoncpasvide(null).
if(inString!=null){
Pour s’assurer qu’il n’y a pas d’anomalies, la fonctiontrim() est utilisée poursupprimerlesespaces,lestabulationsetlessautsdelignedanslachaîne,donctousles caractères de mise en forme pour que les caractères utiles (les chiffres de lavaleur)puissentêtrelusclairement.
//Supprimertouslescaractèresinutiles
inString=trim(inString);
Maintenantquelachaînedeunàquatrechiffresestpropre,ellepeutêtreconvertieenune valeur numérique stockée dans une variable nommée inByte. Son type estdéclaré avant sonnom.Lavariable reçoit le résultat de la conversionde la chaîneinString.Vouspouvezaussiutiliserdesparenthèsesautourdelavariablepourlaconvertirdansd’autrestypesdedonnées,commeaveclong()oubyte().
//Convertirenentieretrapporteràlahauteur
de
l’écran
floatinByte=float(inString);
inBytedoitmaintenantêtreremisàl’échelle.Laplagedesvaleursducapteurvade 0 à 1023 ; maisinBytedoit être rapporté à une plage s’étendant de 0 à lahauteur de la fenêtre d’affichage, de sorte que les valeurs reçues puissent êtrereprésentéesproportionnellementàcequ’ellesvalentsansdépasserlahauteurdelafenêtre.
inByte=map(inByte,0,1023,0,height);
Cegraphiqueesttrèsfin,unevaleurétantreprésentéeparunecolonnedepixels.Ceteffetgraphiqueestgénéréparlafonctiondetracéline().Pourpasserlacouleurdela colonne au violet, la fonction stroke() est alimentée avec les valeursappropriéesdescomposantesrouge,verteetbleue.Lacolonneestdéfinieparunpointde départ et un point d’arrivée. Comme il s’agit d’afficher un graphique, voussouhaitezafficherbeaucoupdecolonnesdehauteursvariables.Commevouspouvezle constater, les abscisses des points de départ et d’arrivée sont les mêmes.L’ordonnéedupremiercorrespondàlahauteurdelafenêtre,cequileplacetoutenbasdecettedernière.Celledel’autrepointestégaleàcettehauteurdiminuéedelavaleurdeinByte,cequisignifiequepluscettevaleurestgrande,pluslehautdelacolonneestprocheduhautdelafenêtre.
//Dessinerlaligne
stroke(127,34,255);
line(xPos,height,xPos,height-inByte);
Sivousavezdessoucispourchoisirlameilleurecouleur,vouspouvezutiliserl’outilOutils->Sélecteurde couleur dans la barre demenusdeProcessing. Il afficheunepalettequivousdonnelesvaleursdescomposantesrouge,verteetbleuedelacouleursélectionnée,ainsiqueleursvaleurshexadécimales,commevouspouvezlevoirsurlaFigure17-7.
FIGURE17-7CettepalettedecouleursProcessingpeuts’avérertrèsutile.
Lemorceau de code qui suit gère le déplacement dexPos le long de l’axe desabscissesdugraphiquependantqueletempss’écoule.SixPosdevientsupérieurouégal à la largeur de la fenêtre, la colonne suivante sortirait de cette dernière. Lavariableestdoncremiseà0,etunnouveaufondestaffichépoureffacerlegraphiquequivientdeseremplir.
//Arrivéenfind’écran,reveniràsondébut
if(xPos>=width){
xPos=0;
background(0);
}
Si xPos n’est pas égal à la largeur de la fenêtre, elle est incrémentée pour laprochainevaleuràafficher.
else{
//Incrémenterl’abscisse
xPos++;
}
}
}
L’Arduino pourrait facilement envoyer des données d’un capteur analogique pourdétecterduson,dumouvementoude la lumière.DucôtédeProcessing, leschosessont un peu plus complexes, mais c’est surtout parce que vous générez ici unereprésentationgraphiquedesdonnéesreçuescomplexe.
GérerplusieurssignauxEnvoyer un signal à Processing depuis un capteur relié à la carte Arduino estindispensable,maissouvent,ilfautenvoyerplusieurssignauxetnonunseul.S’ilestfaciled’envoyerlessignauxdedifférentscapteurs,ilpeutêtredifficiledelestraiterdanslebonordreducôtédurécepteur.Danscetexemple,vousapprenezàenvoyerlesdonnéesdetroiscapteursdistinctsconnectésàvotreArduinoversvotrecroquisProcessing.
Ilvousfaut:
» UnArduinoUno
» Uneplatined’essai
» Deuxpotentiomètres10kΩ
» Unbouton-poussoir
» Troisrésistance10kΩ
» Desstraps
Le circuit est une combinaison de trois entrées distinctes. Quoiqu’elles utilisent lamême alimentation et la mêmemasse, vous devez les considérer individuellement.Deuxpotentiomètresvousfournissentdeuxvaleursdistinctes.Ilssontcâbléscommevouscâbleriezuncapteurdelumière:uncôtéreliéau5V,l’autreàlamasseGNDetlepointmilieuàunebroched’entréeanalogiquepourcollecterlesignal.Lebouton-poussoir fournit un signal numérique. IL est connecté entre le 5 V et la brochenumériqueD2 ainsi qu’à lamasseGND via une résistance. Le circuit complet estreprésentésurlesFigures17-8et17-9.
FIGURE17-9Leschémad’uncircuitpourdeuxentréesanalogiquesetuneentréenumérique.
MettreenplacelecodepourArduinoUne fois que vous avez assemblé votre circuit, dans lemenuArduino, sélectionnezFichier->Exemples->04.Communication->SerialCallResponse pour charger lecroquis.Commelesdeuxprécédentsprojetsduchapitre, lecroquiscontientlecodeArduino et le code Processing (ainsi qu’un bloc pour Max/MSP 5). Le codeProcessing se trouve sous le codeArduino ; il est commentépournepas interféreraveccedernier.
/*
SerialCallResponse
Langage:Wiring/Arduino
CeprogrammeenvoieunAASCII(octetdevaleur65)
au
démarrageetrépètejusqu’àcequ’ilreçoivedes
données.
Ilattendalorsunoctetsurleportsérie,et
envoie
troisvaleursproduitesparlescapteurschaquefois
qu’ilreçoitunoctet.
MerciàGregShakaretScottFitzgeraldpourles
amélio-
rations
Lecircuit:
*2potentiomètresreliésauxbrochesd’entrée
analo-
giques0et1
*bouton-poussoirreliéàl’entrée/sortienumérique
2
Crééle26septembre2005
ParTomIgoe
Modifiéle24avril2012
ParTomIgoeetScottFitzgerald
Cetexempledecodeestdansledomainepublic.
http://www.arduino.cc/en/Tutorial/SerialCallResponse
*/
intfirstSensor=0;//Premiercapteur
analogique
intsecondSensor=0;//Secondcapteuranalogique
intthirdSensor=0;//Capteurnumérique
(bouton)
intinByte=0;//Octetprovenantparle
port
série
voidsetup()
{
//Configurerleportsérieà9600
Serial.begin(9600);
while(!Serial){
;//Attendrequeleportsérieconnecte.Pour
Leo-
nardouniquement
}
pinMode(2,INPUT);//Lecapteurnumériqueest
surla
brochenumérique2
establishContact();//Envoieunoctetpour
établirle
contactjusqu’àce
//queledestinataire
réponde
}
voidloop()
{
//Sinousrecevonsunoctetvalide,lireles
entrées
analogiques
if(Serial.available()>0){
//Récupérerl’octetreçu
inByte=Serial.read();
//Lirelapremièreentréeanalogique,et
diviserpar
4pourrapporter
//lavaleuràlaplagede0à255
firstSensor=analogRead(A0)/4;
//Attendre10mspourqueleconvertisseur
récupère
delay(10);
//Lirelasecondeentréeanalogique,etdiviser
par
4pourrapporter
//lavaleuràlaplagede0à255
secondSensor=analogRead(1)/4;
//Lirel’étatduboutonetlerapporterà0ou
255
thirdSensor=map(digitalRead(2),0,1,0,255)
//Envoyerlesvaleursdescapteurs
Serial.write(firstSensor);
Serial.write(secondSensor);
Serial.write(thirdSensor);
}
}
voidestablishContact(){
while(Serial.available()<=0){
Serial.print(‘A’);//EnvoyerunAmajuscule
delay(300);
}
}
TéléversezcecodedansvotreArduino.VotreArduinoémetdesdonnées.Vousdevezmaintenantcréeretconfigurer lecroquisProcessingpour recevoiret interpréter lesdonnéesémisessurleportsérie.
MettreenplacelecodepourProcessingLecodesetrouveentrelesmarquesdecommentairessurplusieurslignes(/*et*/),après le croquis Arduino. Copiez le code, et collez-le dans un nouveau croquisProcessing,puissauvegardez-leavecunnomapproprié,commeSerialCallResponse.
//Cetexempledecodeestdansledomainepublic.
importprocessing.serial.*;
intbgcolor;//Couleurde
fond
intfgcolor;//Couleurde
remplissage
SerialmyPort;//Leportsérie
int[]serialInArray=newint[3];//Làoùnous
stockons
cequiestreçu
intserialCount=0;//Nombred’octets
reçus
intxpos,ypos;//Positionde
départde
laballe
booleanfirstContact=false;//Sinousavons
entendu
parlerlemicro-contrôleur
voidsetup(){
size(256,256);//Dimensionsduterrain
noStroke();//Pasdebordurepourla
prochaine
formedessinée
//Positiondedépartdelaballe(milieudu
terrain)
xpos=width/2;
ypos=height/2;
//Afficherunelistedesportsséries,pour
débogage
println(Serial.list());
//VOIRCOMMENTAIRESDU1ERPROJET.
StringportName=Serial.list()[0];
myPort=newSerial(this,portName,9600);
}
voiddraw(){
background(bgcolor);
fill(fgcolor);
//Dessinerlaforme
ellipse(xpos,ypos,20,20);
}
voidserialEvent(SerialmyPort){
//Lireunoctetsurleportsérie
intinByte=myPort.read();
//Sic’estlepremieroctetreçu,etsic’estun
A,
//viderleportsérieetnoterque
//nousvenonsd’entrerencontactavecle
microcontrô-
leur.
//Autrement,ajouterl’octetàuntableau
if(firstContact==false){
if(inByte==‘A’){
myPort.clear();//Viderletampondu
port
série
firstContact=true;//Vousêtesentré
en
contactaveclemicrocon-trôleur
myPort.write(‘A’);//Endemander
davantage
}
}
else{
//Ajouterledernieroctetprovenantduport
sérieà
untableau
serialInArray[serialCount]=inByte;
serialCount++;
//Sinousavons3octets
if(serialCount>2){
xpos=serialInArray[0];
ypos=serialInArray[1];
fgcolor=serialInArray[2];
//Afficherlesvaleurs(pourledébogage)
println(xpos+«\t»+ypos+«\t»+fgcolor);
//EnvoyerunAmajusculepourdemanderplus
de
donnéesdescapteurs
myPort.write(‘A’);
//RéinitialiserserialCount
serialCount=0;
}
}
}
Cliquez sur leboutonExécuterpour fairedémarrer l’applette et afficher sa fenêtre.L’appletteaunfondnoir.Chaquefoisquevousenfoncezlebouton-poussoir,unpointblancapparaît.Ajustez lespotentiomètrespourdéplacer lepointhorizontalementetverticalement.Lorsquevousrelâchezlebouton-poussoir,lepointdisparaît.
Sivousn’observezpascecomportement,revérifiezvotrecâblageetvotrecode:
» Vérifiezquelenumérodeportsérieestlebon.
» Vérifiezquelespotentiomètresetleboutonsontbienconnectés.
» VérifiezquevotrecodeArduinoaététéléversécorrectementetque
votreProcessingnecontientpasd’erreur.Notezquevousne
pouvezpastéléversertandisquelecroquisProcessing
communiqueavecvotreArduino;vousdevrezarrêterlecroquis
d’abord.
LecodeSerialCallResponseducroquis
ArduinoAudémarrageducroquis,quatrevariablessontdéclarées.Troissontpourconserverlesvaleurs retournéespar les capteurs, et unepour conserver l’octet envoyépar lecroquisProcessing.
intfirstSensor=0;//Premiercapteur
analogique
intsecondSensor=0;//Secondcapteuranalogique
intthirdSensor=0;//Capteurnumérique
intinByte=0;//Octetprovenantduport
série
Danssetup(),leportsérieestinitialiséetsondébitestajustéà9600.
L’instructionwhilen’aaucuneffetici,carlavariabletestéeesttoujoursdifférentedezéro,saufsurlemodèleLeonardoquifaitpatienterunpeupourdémarrer.Laseuleinstructiondeceblocconditionnelestunsignepoint-virgulepourquelecompilateurnedétectepasuneerreur.L’instructionselit«tantqu’iln’yapasdeconnexionsérie,nerienfaire».
voidsetup()
{
//Configurerleportsérieà9600
Serial.begin(9600);
while(!Serial){
;//Attendrequeleportsérieconnecte.Pour
Leo-
nardouniquement
}
La broche 2 est celle du bouton-poussoir, et est configurée en entrée à l’aide depinMode().
pinMode(2,INPUT);//Lecapteurnumériqueest
surla
brochenumérique2
Une fonction non prédéfinie appelée establishContact() est appelée poursignaleraucroquisProcessingquel’Arduinoestprêt.
establishContact();//Envoieunoctetpour
établirle
contactjusqu’àce
//queledestinataire
réponde
}
Dansloop(), une instructionifvérifie si des données sont arrivées sur le portsérie.Sic’estlecas,l’octetestluetconservédansinByte.
voidloop()
{
//Sinousrecevonsunoctetvalide,lireles
entrées
analogiques
if(Serial.available()>0){
//Récupérerl’octetreçu
inByte=Serial.read();
LavariablefirstSensorcontientlavaleurdélivréeparlepotentiomètrereliéàlabrocheanalogique0,unefoisdiviséepar4.Cetteopérationpermetderapporterlavaleuràuneéchellede0à255.
//Lirelapremièreentréeanalogique,etdiviser
par
4pourrapporter
//lavaleuràlaplagede0à255
firstSensor=analogRead(A0)/4;
Une brève pause de 10 millisecondes permet au convertisseur analogique-vers-numériquedeconvertirlavaleur.
//Attendre10mspourqueleconvertisseur
récupère
delay(10);
Lavaleurgénéréeparlesecondcapteurestelleaussilueetconvertieenutilisantlamêmeméthode,etconservéedanslavariablesecondSensor.
//Lirelasecondeentréeanalogique,etdiviser
par
4pourrapporter
//lavaleuràlaplagede0à255
secondSensor=analogRead(1)/4;
Lecasdubouton-poussoirestparticulier.Pourrapportersavaleuràl’échelleutiliséepourlesautrescapteurs,lafonctionmap()estutilisée.Lapremièrevaleurfournieàcette fonctionest lavariableàconvertir.Dansnotrecas, cen’estpasunevariable,maislerésultatrenvoyépardigitalRead()surlabroche2.Ilseraitpossibledeplacer ce résultat dans une variable, mais ce n’est pas nécessaire. Le bouton peutrenvoyer0ou1.Cesvaleurssontrapportéesàl’échelledesautrescapteurs,soit0et255.LavaleurconvertieestconservéedanslavariablethirdSensor.
//Lirel’étatduboutonetlerapporterà0ou255
thirdSensor=map(digitalRead(2),0,1,0,255)
LesvaleursdestroiscapteurssontalorsenvoyéeslesunesaprèslesautresparleportsérieenutilisantSerial.write().
//Envoyerlesvaleursdescapteurs
Serial.write(firstSensor);
Serial.write(secondSensor);
Serial.write(thirdSensor);
}
}
Àlafinducroquis,ontrouvelafonctionspécifiqueestablishContact()quiaétéappeléedanssetup().Elle surveille leport sériepourvoir siuneconnexionsérieestdisponible.Tantquecen’estpaslecas,establishContact()envoieun A majuscule sur le port série toutes les 300 millisecondes. On ne sort de lafonctionqu’unefoisquelaconnexionestétablie.
voidestablishContact(){
while(Serial.available()<=0){
Serial.print(‘A’);//EnvoyerunA
majuscule
delay(300);
}
}
LecroquisSerialCallReponsedeProcessingExaminons maintenant ce qui se passe du côté Processing pour établir le contact,interpréter les valeurs et les afficher. La première action entreprise dans le scriptProcessingestd’importerlabibliothèqueserial.
importprocessing.serial.*;
Nombredevariablesdoiventêtredéclaréespourcecroquis.Lesdeuxpremièressontlescouleurspourlefondetlesformes.
intbgcolor;//Couleurdefond
intfgcolor;//Couleurderemplissage
Unenouvelleinstancedeportsérieestcréée,nomméemyPort.
SerialmyPort;//Leport
série
Untableaudetroisvaleursentièresestcréé.
int[]serialInArray=newint[3];//Làoùnous
stoc-
konscequiestreçu
Uncompteurentierestdéclarépourconserverlatracedunombred’octetsquiontétélus.
intserialCount=0;//Lenombred’octets
reçus
Lesvaleursentièresxposetyposconserventlescoordonnéesdupoint.
intxpos,ypos;//Positiondedépartdelaballe
Unbooléenconserveunevaleurindiquantsilecontactaétéétabliavecl’Arduino.
booleanfirstContact=false;//
Dans setup(), nous définissons les dimensions de la fenêtre d’affichage. LafonctionnoStroke()s’assurequelesformesserontdessinéessansbordure.
voidsetup(){
size(256,256);//Dimensionsdelasurface
d’affichage
noStroke();//Pasdebordurepourla
prochaine
formedessinée
Lesvaleursdedépartdescoordonnéesdupointlepositionnentaucentredelafenêtred’affichage:lamoitiédelalargeuretlamoitiédelahauteur,respectivement.
//Positiondedépartdelaballe(milieudu
terrain)
xpos=width/2;
ypos=height/2;
Pour créer une connexion série, une liste des ports séries est affichée, mais vouspouvezlaneutraliserenlacommentant.
//Afficherunelistedesportsséries,pour
débogage
println(Serial.list());
LeportutiliséparvotreArduinofiguregénéralementenhautdelaliste,sibienquelachaîneportNamecontientpardéfaut0,etmyPortdevientleportcorrespondant.Notez qu’il est possible de l’écrire autrement : Serial(this,
Serial.list()[0],9600);.
Vouspouvezremplacerl’appelàSerial.list()[0]parlenuméroexpliciteduportsérieutiliséparArduino.Revoyezlesexplicationsetmisesengardefournisdanslepremierprojetduchapitre.Lenombre9600faitréférenceaudébitduportsérie,etdoitêtreidentiquedepartetd’autre.
StringportName=Serial.list()[0];
myPort=newSerial(this,portName,9600);
}
Dansdraw(), le fond est d’abord affiché.Comme la couleur du fond n’a pas étédéfinie,ellevaut0pardéfaut,cequicorrespondàdunoir.Demême,lacouleurderemplissagen’ayantpasétédéfinie,ellecorrespondàdunoirpourl’instant.
En effet, nous avons déclaré deux variables fgcolor et bgcolor pour cescouleurs,maissansleurdonnerdevaleurinitiale.Ellesvalentdonczéroaudépart.
voiddraw(){
background(bgcolor);
fill(fgcolor);
Uneellipseestdessinéeaucentrede la fenêtred’affichage.En fait, c’estuncerclede20pixelsdediamètrequivaservirdemarqueur
//Dessinerlaforme
ellipse(xpos,ypos,20,20);
}
L’essentielde l’actionsedérouledans la fonctionspécialeserialEvent(), quidéplacelemarqueurredessinéenpermanenceparlaboucledraw().
voidserialEvent(SerialmyPort){
Sidesdonnéesparviennentsurleportsérie,celadéclencheserialEvent().Lepremieroctetdedonnéesest luenutilisantmyPort.read()puisstockédans lavariableinByte.
//Lireunoctetsurleportsérie
intinByte=myPort.read();
SilecroquisProcessingnecommuniquepasdéjàavecl’Arduinovialeportsérie,ilpasseà l’instructionifqui suit pour voir si l’octet est un caractèreA. Si oui, letamponduportsérieestvidé,lebooléenfirstContactestpasséàtrue,etlemêmecaractèreAestrenvoyéàl’Arduino.
Vous vous souvenez de la fonction establishContact() dans le croquisArduino ? Elle envoie sans cesse un caractèreA jusqu’à ce que la connexion soitétablie. Lorsqu’un A est envoyé en réponse à l’Arduino, la fonctionestablishContact()se termine,etloop()peutcommenceràenvoyerdesdonnées. Cette technique se nommehandshaking (littéralement, se serrer lamain),unenégociationentredeuxsystèmespourétablirlacommunication.
if(firstContact==false){
if(inByte==‘A’){
myPort.clear();//Viderletamponduport
série
firstContact=true;//Encontactavecle
micro-
contrôleur
myPort.write(‘A’);//Confirmerle
contact
}
}
SifirstContact esttrue, le programme lit l’octet arrivé et le rajoute à untableaud’octetsreçusserialInArray,dansl’ordreoùilsparviennent.
else{
//Ajouteledernieroctetprovenantduport
sérieà
untableau
serialInArray[serialCount]=inByte;
Chaque fois qu’unoctet est ainsi lu, le compteur qui désigne la place qu’il occupedansletableauestincrémenté.
serialCount++;
Lorsquelecompteurestsupérieurà2,c’estquetroisoctetsontétélus.
//Sinousavons3octets
if(serialCount>2){
Le potentiomètre sur la broche analogique 0 fournit l’abscisse du point ; lepotentiomètresur labrocheanalogique1fournitsonordonnée ; leboutonfournitsacouleurderemplissage.
xpos=serialInArray[0];
ypos=serialInArray[1];
fgcolor=serialInArray[2];
Cesvaleurssontaussiaffichéesdans laconsoleafindevérifierque tout fonctionnebien.DansProcessing,vouspouvezcombinerplusieursvaleursdansune instructionprint()ouprintln()enutilisantlesymbole+.
Vouspouvezaussiutiliserlesymbole\tpourinsérerunetabulationentrelesvaleurspourlesespacerproprement.
//Affichelesvaleurs(pourledébogage)
println(xpos+«\t»+ypos+«\t»+fgcolor);
Un autre A majuscule est envoyé pour déclencher la conditionif(Serial.available()>0)etrépéterleprocessus.
//EnvoyerunAmajusculepourdemanderplusde
donnéesdescapteurs
myPort.write(‘A’);
LavaleurserialCountestréinitialiséeà0pourrecommenceràstockerlesoctetsdansletableau.
serialCount=0;
}
}
}
Cetexempleconstitueunexcellentpointdedépartpourapprendrecomment lire lesvaleursdeplusieurscapteursdansunprogrammerésidantsurl’ordinateur.Pourquoinepascollecterparexemple lesdonnéesd’unesériedecapteurspoursurveiller lamétéochezvous?
Lasortiegénéréeparcecroquisestdesplusélémentaires,maisvouspouvezexploiterl’incroyable potentiel de Processing pour envisager des projets autrement plussophistiqués.Quelques recherchesavec«Processingvisualisationdonnées» sur leWebvousdonnerontunebonneidéedecequiestpossible.
Sommaire
Couverture
ArduinopourlesNulspoche,2eédition
Copyright
Introduction
Àproposdecelivre
Quelquesfolleshypothèses
Commentcelivreestorganisé
Lesicônesutiliséesdanscelivre
Lesfichiersdesexemples
Paroùcommencer?
I.DécouvrirArduino
Chapitre1.Qu’est-cequ’Arduino,etd’oùvient-il?
D’oùvientArduino?
Apprendreenfaisant
L’électronique
Lesentrées
Lessorties
L’espritOpensource
Chapitre2.PremierscontactsavecvotreArduinoUno
Découvrirl’ArduinoUnoR3
D’autrescartesArduino
AcheterunArduino
Pourcommencer:lekitdudébutant
Aménagerunespacedetravail
Chapitre3.TéléchargeretinstallerArduino
InstallerArduino
Passerenrevuel’environnementArduino
Chapitre4.FaireclignoteruneLED
TravaillersurvotrepremiercroquisArduino
ExaminerlecroquisBlink
II.PlongerdanslesprojetsArduino
Chapitre5.Lesbonsoutilsfontlebonouvrier
Lesbonsoutilspourtravailler
Utiliserlemultimètrepourmesurerunetension,uneintensité,unerésistance
Chapitre6.Uneinitiationàl’électricitéetàlacircuiterie
Comprendrel’électricité
Deséquationspourcréervoscircuits
Travailleravecdesschémasdecircuits
Lesconventionsdecouleurs
Lesfichestechniques
Lescodescouleurdesrésistances
Chapitre7.Entrées,sortiesetcommunication
Chargeruncroquis
Lamodulationdelargeurd’impulsion(PWM)
CroquispouratténueruneLED
LecroquisButton
LecroquisAnalogInput
Lemoniteursérie
LecroquisDigitalReadSerial
LecroquisAnalogInOutSerial
Chapitre8.Moteurs,servoseteffetssonores
Exploiterunmoteurélectrique
Découvrirladiode
Fairetournerunmoteuràcourantcontinu
Contrôlerlavitessedevotremoteur
Contrôlerlavitessedevotremoteur
Lesservomoteurs
Réaliserdesmouvementsdebalayage
Contrôlermieuxunservomoteur
Faitesdubruit
Créervotreinstrumentinteractif
III.Construiresurlesbases
Chapitre9.Quelquesexemplesderéalisations
Skube
Chorus
PushSnowboarding
BakerTweet
CompassLoungeetCompassCard
LeslampesGoodNight
LittlePrinter
FlaptoFreedom
Chapitre10.L’artdesouder
Comprendrelesoudage
Lesélémentsnécessairespoursouder
Souderentoutesécurité
Assemblerunecartefille
Acquérirunetechniquedesoudage
Monterlecircuitdetest
Protégerleprojet
Chapitre11.Améliorervotrecode
UnmeilleurBlink
Pourgérerleseffetsderebonddubouton
Unboutonencoremeilleur
Améliorerlescapteurs
Étalonnerlesentrées
Chapitre12.Chocs,sonsetultrasons
Simplifierlaréalisationd’unbouton
Retouraupaysdescapteurspiézo
Capteursdepression,deforceetdecharge
Captiver!
Unlaserdétecteur
Détecterlesmouvements
Mesurerlesdistances
Est-cequequelqu’unm’entend?
IV.Boosterlepotentieldel’Arduino
Chapitre13.Cartesfillesetbibliothèquesdefonctions
Cartesfilles
Tirezprofitdesbibliothèques(librairies)
Chapitre14.Capterplusd’entréesetcontrôlerplusdesorties
ContrôlerplusieursLED
ContrôlerplusieursLEDpardécalage
Chapitre15.MultiplierlessortiesavecI2C
Qu’est-cequeI2C?
Assemblerl’I2CPWM/ServoDriver
Utiliserl’I2CPWM/ServoDriver
ComprendrelecroquisI2CPWM/ServoDriver
Achetervosservomoteurs
AutresutilisationsdeI2C
V.Arduinoetleslogiciels
Chapitre16.DécouvrirProcessing
Processing,c’estquoi?
PremierspasavecProcessing
Chapitre17.Agirsurlemonderéel
Agirsurleréeldepuisunboutonvirtuel