arduino pour les nuls poche, 2e édition (poche pour …...pour les nuls est une marque déposée de...

492

Upload: others

Post on 20-May-2020

11 views

Category:

Documents


1 download

TRANSCRIPT

Arduino

2eédition

JohnNussey

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-2LecroquisBlinkpourArduino.

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.

FIGURE5-9Vérifierlacontinuitéd’uncircuit.

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

brochedesortie.

FIGURE7-11Lecircuitpourlireuncapteurvialemoniteursérie.

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-4Unschémadecircuitcontenantuntransistor.

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-9UnservomoteurcâblépourvotreArduino.

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-16Uncircuitdebuzzerpiézo.Ilyaparfoisdeuxtrousd’écartentrelespattesdubuzzer.

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-18UncircuitTheremincontrôléparuncapteurdelumière.

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-5LeschémadecâblageducircuitStateChangeDetection.

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

dansuntableaueten

faitlamoyennedemanièrecontinue.

FIGURE11-8Leschémaducircuitducapteurdeluminosité.

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-10Leschémaducircuitdecapteurdeluminosité.

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-8Schémademontagedurécepteurdudétecteurlaser.

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-15Schémaducircuitd’unmicrophoneélectret.

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-8Plandemontagepourdeuxentréesanalogiquesetuneentréenumérique.

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

DessineravecunArduino

ComprendrelecroquisGraphpourArduino

Gérerplusieurssignaux