You are on page 1of 492

Arduino

2e dition

John Nussey



Arduino pour les Nuls (2e dition)
Titre de ldition originale : Arduino For Dummies
Pour les Nuls est une marque dpose de Wiley Publishing, Inc.
For Dummies est une marque dpose de Wiley Publishing, Inc.

Collection dirige par Jean-Pierre Cano
Traduction : Denis Duplan et Stphane Bontemps
Rvision pour la deuxime dition : Gaston Demitton
Mise en page : maged

Edition franaise publie en accord avec Wiley Publishing, Inc.
ditions First, un dpartement ddi8, 2017
ditions First, un dpartement ddi8
12 avenue dItalie
75013 Paris
Tl. : 01 44 16 09 00
Fax : 01 44 16 09 01
E-mail : firstinfo@efirst.com
Web : www.editionsfirst.fr
ISBN : 978-2-412-02580-2
ISBN numrique : 9782412029589
Dpt lgal : 2e trimestre 2017
Cette uvre est protge par le droit dauteur et strictement rserve lusage priv du client.
Toute reproduction ou diffusion au profit de tiers, titre gratuit ou onreux, de tout ou partie de
cette uvre est strictement interdite et constitue une contrefaon prvue par les articles L 335-
2 et suivants du Code de la proprit intellectuelle. Lditeur se rserve le droit de poursuivre
toute atteinte ses droits de proprit intellectuelle devant les juridictions civiles ou pnales.

Ce livre numrique a t converti initialement au format EPUB par Isako www.isako.com partir
de l'dition papier du mme ouvrage.
Introduction

A
rduino est un outil, une communaut et une faon de penser qui transforme notre
regard sur la technologie et lusage que nous en faisons. Il a raviv lintrt pour
llectronique chez de nombreuses personnes et leur a permis de mieux la
comprendre, alors quelles pouvaient penser que llectronique tait pour elles reste
sur les bancs de lcole.

Arduino est un minuscule circuit imprim au potentiel gigantesque. Selon la manire


dont vous lapprochez, il peut tre utilis pour mettre un signal en code Morse
laide dune LED ou pour contrler toute les lumires dun btiment. Ses possibilits
dpassent de loin tout ce que vous pourriez imaginer. Arduino, cest aussi une
nouvelle approche pratique de lducation la technique, qui rduit le cot dentre
pour ceux qui souhaitent utiliser llectronique pour raliser de petits projets puis, je
lespre, trouver lenvie de se lancer dans des projets plus importants.
Une communaut compose de toujours plus darduinistes a vu le jour des
utilisateurs et des dveloppeurs qui apprennent les uns des autres et qui contribuent
la philosophie Open source en partageant tous les dtails de leurs projets. Cette
attitude des arduinistes et de ceux qui les aident est largement lorigine du succs
dArduino.
Arduino est plus quun kit dinitiation ; cest un outil. Un concentr de technologie
qui permet de comprendre et dutiliser plus facilement les outils lectroniques
daujourdhui.
Si la perspective de dcouvrir puis de matriser les possibilits immense de la
technologie vous intresse, ce livre se propose de vous accompagner dans vos
premiers pas.
En route !
propos de ce livre
Ceci est un livre technique, mais ce nest pas un livre rserv aux techniciens.
Arduino a t conu pour tre utilisable par nimporte qui, quil soit technicien,
cratif, habile ou simplement curieux. Tout ce dont vous avez besoin, cest
douverture desprit ou dun problme rsoudre. Vous dcouvrirez rapidement
comment Arduino peut vous tre utile.
Arduino a raviv mon intrt pour llectronique et ma donn accs nombre de
dbouchs professionnels. Jai crit ce livre pour partager mon exprience. Lorsque
je me suis rendu pour la premire fois un atelier Arduino, je ne savais pas
programmer et je ne pouvais que vaguement me rappeler par quelle extrmit tenir un
fer souder (ne vous inquitez pas, je parlerai de la soudure aussi). Actuellement,
lessentiel de mon travail consiste concevoir et raliser des installations
interactives, des prototypes, et plus gnralement trouver de nouvelles manires de
jouer avec la technologie en mappuyant sur Arduino.
Je pense que cest une excellente plate-forme qui rduit le cot dentre pour
apprendre llectronique et la programmation. Il permet des personnes qui nont pas
eu trop de fibre scolaire de se plonger dans les domaines qui les intressent, et de les
explorer par eux-mmes.
Quelques folles hypothses
Ce livre ne prsuppose rien en termes de connaissances techniques. Arduino est une
plate-forme facile utiliser pour apprendre llectronique et la programmation. En
tant que telle, elle est destine tous, que vous soyez un concepteur, un artiste ou que
vous ne cherchiez quun passe-temps.
Cest aussi une excellente plate-forme pour les gens qui sont dj verss dans la
technique. Peut-tre avez-vous dj programm ? Vous souhaitez que vos projets
prennent corps dune manire ou dune autre. Vous avez dj travaill avec
llectronique ? Vous voudrez dans ce cas dcouvrir ce dont Arduino est capable.
Qui que vous soyez, vous verrez quArduino a un grand potentiel. Cest vous de
dcider ce que vous souhaitez en faire.
Ce livre dmarre au niveau le plus lmentaire pour vous permettre de commencer
utiliser et comprendre Arduino sans rticences. De temps autre dans le livre, je
peux me rfrer des choses plus techniques. Il vous faudra, comme en toutes choses,
un peu plus de temps pour les comprendre. Partant des bases, je vous guiderai
progressivement pour conduire des activits plus labores.
Ce livre repose pour lessentiel sur mon exprience de lapprentissage et de
lenseignement dArduino. Je me suis initi Arduino partir de rien, mais jai
toujours trouv que la meilleure manire dapprendre tait la pratique, en ralisant ses
propres projets. La cl, cest dintgrer les bases que je prsente dans ce livre, puis
de sappuyer sur ces connaissances en cherchant comment les mettre en uvre pour
rsoudre de nouveaux problmes, pour crer des projets, ou tout simplement pour
vous amuser.
Comment ce livre est organis
Arduino pour les Nuls est organis pour vous permettre de sauter dun endroit un
autre au gr de vos besoins. Si vous avez dj manipul Arduino, vous souhaiterez
sans doute sauter aux derniers chapitres, mais si vous avez oubli les bases, vous
aurez intrt entamer le livre par son dbut.

Premire partie : Dcouvrir Arduino


Dans la partie 1, je prsente Arduino en pointant les diverses circonstances qui ont
cr un besoin pour Arduino et qui en ont par la suite influenc le dveloppement.
Jentre ensuite plus en dtail dans Arduino, en tant que dispositif physique, mais aussi
en tant quenvironnement de dveloppement, et je vous aide tlcharger votre
premier programme (appel croquis).

Deuxime partie : Entres et sorties


Arduino
Dans cette partie, vous dcouvrez comment raliser un prototype en utilisant une
platine dessai et quelques composants afin de permettre votre Arduino dinteragir
avec le monde. En utilisant simplement quelques composants, vous pouvez tester toute
une varit dapplications pour Arduino et construire une base qui servira dautres
projets. Les chapitres de cette partie traitent de toute une varit dentres et de
sorties, dont la lumire, le mouvement et le son. Vous pourrez combiner ces techniques
pour raliser vos propres projets.

Troisime partie : Btir sur des


fondations
Une fois que vous avez acquis les bases, vous serez dmang par lenvie den faire
plus. Dans la partie 3, je prsente quelques projets du monde rel et je montre
comment ils fonctionnent. Vous apprenez raliser votre propre circuit imprim pour
rendre votre projet moins fragile. Vous apprenez aussi choisir le bon capteur et
comment crire du code source pour ajuster ou modifier le comportement de vos
circuits.

Quatrime partie : Librer le potentiel


de votre Arduino
Cette partie vous propose dexploiter plus encore les possibilits de votre projet
Arduino. Vous apprenez utiliser des cartes filles pour enrichir votre Arduino de
fonctionnalits spcifiques, utiliser du matriel et des techniques pour dvelopper
votre projet, hacker (modifier) du matriel existant. Vous dcouvrez aussi comment
communiquer avec Processing, le projet jumeau dArduino, pour combiner matriel et
logiciel.

Cinquime partie : Arduino et les


logiciels
Si vous parvenez cette partie, cest que vous aurez acquis une bonne comprhension
de la manire dont vous pouvez utiliser llectronique et le matriel dans vos projets.
Dans cette partie, vous apprenez combiner cette connaissance du monde physique
avec le monde du logiciel. Je vous prsente quelques environnements de
programmation Open source, et plus particulirement Processing, le carnet de croquis
lectronique que vous pouvez utiliser pour raliser un vaste ensemble dapplications
afin damliorer votre projet Arduino.
Les icnes utilises dans ce livre
Arduino pour les Nuls utilise des icnes pour attirer votre attention sur certains
paragraphes :
Cette icne signale une information utile. Il peut sagir dune information technique
pour vous aider terminer un projet plus facilement, ou dune rponse un problme
communment rencontr.
Le circuit Arduinos net pas dangereux en soi ; en fait, il est mme particulirement
scuris. Toutefois, sil est utilis dans un circuit sans avoir fait preuve dassez
dattention et de soin, il peut causer des dommages au circuit, votre ordinateur ou
un appareil qui y est connect. Lorsque vous rencontrez une icne Attention, veillez
prendre bonne note de ce dont il est question.
Il faut souvent connatre certains points prcis avant dentreprendre une tche.
Jutilise ces icnes en guide de rappel.

Quelques informations sont plus techniques que les autres, et ne sont donc pas
destines tous. Le bonheur avec Arduino, cest que vous navez pas comprendre
tous les dtails techniques sur-le-champ. Vous pouvez faire limpasse sur ce qui est
indiqu ct de cette icne si cest trop compliqu pour vous sur linstant ; vous
pourrez y revenir lorsque vous vous sentirez prt.
Les fichiers des exemples
Les exercices dapplication sont bass sur des programmes qui sont compils sur
votre ordinateur puis transfrs (tlverss) vers votre carte Arduino. Prs
de 40 programmes sont tudis. Ils sont presque tous disponibles ds le dpart
lorsque vous installez latelier Arduino. En revanche, ils sont en anglais. Pour plus de
confort, la reproduction des textes sources dans le livre traduit tous ces commentaires,
mais pas les noms des variables.
Si, suite une nouvelle version de latelier Arduino ou de Processing, un programme
mrite une amlioration, les fichiers appropris seront mis disposition sur le site de
lditeur dans la section Tlchargements.
Par o commencer ?
Si vous ne savez pas trop par o commencer, je vous suggre de partir du dbut. Vers
la fin du Chapitre 2, vous aurez assimil les bases dArduino, et vous saurez o
acqurir un kit pour continuer votre apprentissage.
Si vous avez dj utilis Arduino, vous souhaiterez sans doute vous rendre au
Chapitre 4 pour rviser vos bases, ou alors vous rendre directement la partie qui
vous intresse.
I
Dcouvrir Arduino

DANS CETTE PARTIE

Mais quest-ce quun Arduino, exactement ? Dans les chapitres


qui suivent, vous dcouvrirez tout sur ce petit circuit imprim
bleu et blanc, comment il a t cr et quoi il peut bien servir.
Aprs une brve introduction, je vous montrerai toutes les
choses dont vous avez besoin pour commencer avec Arduino et
o vous pouvez les acheter. Ensuite, vous apprendrez comment
mettre en uvre le pouvoir stupfiant dune LED, en la faisant
clignoter sur commande laide de quelques lignes de code
source.
Chapitre 1
Quest-ce quArduino, et do vient-il ?
DANS CE CHAPITRE
Dcouvrir Arduino

Apprendre do vient Arduino et quoi tient son succs

Une introduction aux principes de base

A
rduino est compos de matriel et de logiciel.

La carte Arduino est un circuit imprim spcifiquement conu pour hberger un


microcontrleur et donner accs toutes ses entres et sorties. Elle comprend aussi
quelques autres composants lectroniques qui permettent de faire fonctionner le
microcontrleur ou den tendre les fonctionnalits.
Un microcontrleur est un petit ordinateur confin dans un unique circuit intgr (une
puce). Il constitue un excellent moyen pour programmer et pour contrler des
quipements lectroniques. Il existe une grande varit de telles cartes
microcontrleur, certaines des plus utilises sont la platine Wiring, le PIC, le Basic
Stamp et bien sr Arduino.
Vous crivez du code source dans lenvironnement de dveloppement Arduino pour
dire au microcontrleur ce que vous souhaitez quil fasse. Par exemple, en crivant
une seule ligne de code (une instruction), vous pouvez faire clignoter une LED. Si
vous connectez un bouton-poussoir, vous pouvez ajouter une autre ligne de code pour
que la LED sallume quand le bouton est enfonc. Avec dautres instructions, vous
pouvez faire en sorte que la LED ne clignote que lorsque le bouton est enfonc. Ainsi,
vous pouvez facilement amener le systme se comporter dune certaine manire, ce
qui serait difficile faire sans microcontrleur.
Comme un ordinateur de bureau, Arduino peut assurer une multitude de fonctions,
mais il ne sert pas grand-chose tout seul. Il a besoin que quelque chose soit connect
sur au moins une de ses entres et/ou de ses sorties pour tre utile. Comme le clavier
et la souris dun ordinateur, ces canaux de communication permettent lArduino de
sentir des objets du monde rel et dagir dessus.
Avant de continuer, il peut tre utile de dcouvrir les grandes lignes de lhistoire
dArduino.

Do vient Arduino ?
Arduino a commenc en Italie, chez Interaction Design Institute Ivera (IDII), une cole
spcialise en design qui se focalise sur la manire dont nous interagissons avec les
produits, les systmes et les environnements numriques, et comment ces derniers
nous influencent en retour.
Le terme de design dinteraction a t labor par Bill Verplank et Bill Moggridge
vers le milieu des annes 80. Le dessin de Verkplank repris en Figure 1-1 illustre
parfaitement le principe de base du design dinteraction : si vous faites quelque chose,
vous ressentez un changement, et cest partir de l que vous pouvez savoir quelque
chose du monde qui vous entoure.
Quoiquil sagisse dun principe gnral, le design dinteraction se rfre plus
spcifiquement la manire dont nous interagissons avec des ordinateurs
conventionnels laide de priphriques, tels que les souris, les claviers et les crans
tactiles, pour naviguer dans un environnement numrique dont une reprsentation
graphique est affiche lcran.
Il existe une autre approche, quon dsigne par informatique concrte (physical
computing) et qui consiste tendre la porte des programmes, logiciels ou systmes
informatiques. Grce de llectronique, les ordinateurs peuvent capter des
informations provenant du monde physique, et tre ainsi capables dagir en retour sur
ce dernier.
FIGURE 1-1 Le principe du design dinteraction, illustr par Bill Verplank.

Ces deux domaines le design dinteraction et linformatique concrte sont


nouveaux. Ils requirent donc de pouvoir crer des prototypes pour comprendre et
explorer les interactions. Or, produire des prototypes reprsentait une difficult
considrable pour des tudiants en design qui ntaient pas techniciens, ni richissimes.
En 2001, Casey Reas et Bengamin Fry ont commenc un projet nomm Processing.
Lobjectif tait de permettre des non-programmeurs de se mettre la programmation
en permettant facilement et rapidement de pro
duire des reprsentations lcran. Le projet permettrait lutilisateur de disposer
dun carnet de croquis numriques (des programmes) pour tester des ides au prix
dun investissement temporel minimal. Le projet a ensuite inspir un projet similaire
pour tester des ides dans le monde rel.
Sappuyant sur les mmes bases que Processing, Hernando Barragan a commenc
dvelopper une carte microcontrleur en 2004, quil a nomme Wiring. Cette carte
tait le prdcesseur dArduino.
Comme Processing, le projet Wiring cherchait impliquer des artistes, des designers
et dautres personnes non verses dans la technique. Wiring dsirait les encourager
se lancer dans llectronique plutt que dans la programmation. La carte Wiring
(reprsente sur la Figure 1-2) tait moins onreuse que certains microcontrleurs tels
que le PIC ou le Basic Stamp, mais elle constituait toujours un investissement non
ngligeable pour des tudiants.
FIGURE 1-2 Une des premires cartes Wiring.

Cest ainsi quen 2005, le projet Arduino a t lanc pour fournir un matriel bon
march et facile utiliser destination des tudiants en design dinteraction. On dit
que Massimo Banzi et David Cuartielles nommrent leur projet daprs Arduin
dIvera, un roi italien, mais des sources fiables mont rapport que ce serait le nom
dun bar proche de leur universit.
Le projet Arduino a puis dans nombre des expriences de Wiring et de Processing.
Par exemple, linfluence de Processing se fait sentir dans linterface graphique
utilise pour le logiciel de cration des croquis Arduino. Cette interface fut
initialement emprunte Processing ; mme si elle est similaire, elle a depuis t
personnalise pour Arduino. Je traite plus en dtail de linterface dArduino au
Chapitre 4.
Arduino a aussi conserv la terminologie de Processing en dsignant ses programmes
sources des croquis (des sketches). Comme Processing, Arduino est fourni avec un
carnet de croquis prdfinis pour concevoir et tester rapidement les premiers projets.
Tout au long de ce livre, je rutilise de nombreux croquis dexemples qui permettent
votre Arduino daccomplir une grande diversit de tches. En utilisant et en modifiant
les croquis de ce livre, vous pourrez rapidement comprendre comment ils
fonctionnent, et vous enchanerez sur la cration des vtres en un rien de temps.
Chaque croquis est suivi dune explication ligne par ligne de son fonctionnement pour
tre certain de ne rien laisser dans lombre.
La carte Arduino, reprsente sur la Figure 1-3, a t conue pour tre plus robuste et
mieux pardonner les erreurs que Wiring et dautres microcontrleurs antrieurs. En
effet, il ntait pas rare que les tudiants et les professionnels, surtout quand ils
venaient du design ou de la cration graphique, dtruisent le microcontrleur aprs
quelques minutes dutilisation, simplement en faisant une erreur de cblage. Cette
fragilit tait un vrai problme, non seulement du fait du cot engendr, mais aussi
pour le succs de la carte en dehors des cnacles de techniciens.
Sur la carte Arduino, le microcontrleur nest pas soud, mais enfich sur un support.
Si vous grillez le processeur, vous pouvez le remplacer au lieu de devoir racheter une
carte.
Une autre diffrence importante entre Arduino et les autres cartes microcontrleur
est le prix. En 2006, un autre microcontrleur populaire, le Basic Stamp, ne cotait
pas loin de quatre fois plus quun Arduino. De nos jours, une carte Wiring cote
toujours prs du double dun Arduino.

FIGURE 1-3 La carte srie Arduino originelle.

loccasion dun de mes premiers ateliers Arduino, on ma rapport que le prix avait
t labor en tenant compte des moyens des tudiants. Le prix dun bon repas avec un
verre de vin avoisinait alors les 30 euros, si bien que si vous deviez raliser un
projet, vous pouviez vous priver de ce repas et financer votre projet.
De nos jours, lventail des cartes Arduino disponibles est bien plus vaste
quen 2006. Le Chapitre 2 prsente quelques-unes des cartes Arduino et compatibles
Arduino les plus utiles, en vous prcisant en quoi elles diffrent. Le Chapitre 13 vous
dit tout sur un type de circuit particulier, nomm carte fille, qui permet de doter votre
Arduino de capacits complmentaires, parfois phnomnales, comme par exemple
pour le transformer en rcepteur GPS, en compteur Geiger ou encore en tlphone
mobile.

Apprendre en faisant
Bien des gens parviennent utiliser llectronique pour atteindre des objectifs trs
divers sans jamais rentrer dans les dtails du sujet. Voici quelques coles de pense
qui ont encourag tout un chacun se lancer dans llectronique sans avoir reu de
formation particulire.

Le patching
Patching nest pas seulement une bourgade des tats-Unis ; cest aussi une technique
pour exprimenter des systmes. Lexemple le plus connu de patching est lancien
tableau de commutation tlphonique. Pour que loprateur vous permette de joindre
votre correspondant, il devait brancher physiquement un cble de brassage.
Ce brassage de cbles est la mme technique qui tait utilise pour crer des sons aux
dbuts de la musique lectronique, comme avec les synthtiseurs analogiques Moog.
Lorsquun instrument lectronique gnre un son, il gnre en fait du courant.
Diffrents composants prsents dans linstrument manipulent ce courant avant quil ne
soit converti en un son audible. Le synthtiseur Moog permet de modifier le chemin
que le courant emprunte en lenvoyant vers diffrents composants pour lui appliquer
des effets.
Comme il existe un nombre norme de combinaisons, le musicien procde largement
par essais et erreurs. Toutefois, linterface simplifie lui permet dy arriver trs vite,
sans avoir beaucoup se prparer.

Le hacking
Hacking est un terme trs utilis pour faire rfrence aux agissements subversifs sur
Internet. Mais plus gnralement, le terme dsigne lexploration de systmes afin den
tirer le meilleur parti ou de les dtourner pour les adapter de nouveaux besoins.
Entendu ainsi, le hacking est possible tant avec le matriel quavec le logiciel. Un
excellent exemple de hacking matriel est le recyclage dun clavier. Disons que vous
souhaitez utiliser un gros bouton rouge pour faire dfiler des images. La plupart des
logiciels utilisent des raccourcis clavier, et la plupart des visionneuses de PDF font
dfiler les pages quand lutilisateur presse la touche Espace. Si votre besoin consiste
faire dfiler des images sur une borne accs public, vous pourriez prfrer un
clavier rduit la touche Espace. Comment faire ?
Il savre que les claviers ont t tellement perfectionns quon y trouve un petit
circuit imprim, un peu plus petit quune carte de crdit (voir Figure 1-4). Ce circuit
dispose de nombreux points de contact qui sont activs lorsque vous pressez les
touches. Si vous pouvez trouver la bonne combinaison, vous pourrez connecter
quelques fils aux points de contact dun ct, et un bouton-poussoir de lautre.
Chaque fois que vous presserez le bouton, ce sera alors comme si vous pressiez la
touche Espace.

FIGURE 1-4 Le circuit imprim dun clavier, prt tre hack.

Cette technique est idale pour atteindre les rsultats que vous souhaitez en
contournant les mandres du matriel. Dans le chapitre bonus, vous en apprendrez
plus sur les joies du hacking, et comment vous pouvez relier du matriel hack votre
projet Arduino afin de contrler facilement des priphriques sans fil, des appareils
photo et mme des ordinateurs.

Le dtournement de circuits
Le dtournement de circuits choquera les partisans de lducation traditionnelle et
ravira ceux de lexprimentation spontane. Les jouets constituent la nourriture de
base des auteurs de dtournements, mais lexprience peut tre ralise sur nimporte
quel engin base dlectronique.
En ouvrant un jouet ou un engin pour accder son circuit, vous pouvez modifier le
chemin du courant pour affecter son comportement. Cette technique est similaire au
patching, mais elle est bien plus imprvisible. Toutefois, quand vous avez trouv des
combinaisons, vous pouvez aussi ajouter ou remplacer des composants, tels que des
rsistances ou des interrupteurs, pour permettre lutilisateur de mieux contrler
lobjet.
Le dtournement de circuits concerne par exemple le domaine du son. Linstrument
une fois termin devient un synthtiseur ou une bote rythmes rudimentaire.
Deux des engins les plus populaires sont Speak & Spell (voir Figure 1-5) et la
Gameboy de Nintendo. Selon leurs termes, des musiciens tels que Modified Toy
Orchestra (modifiedtoyorchestra.com) explorent le potentiel cach et le
surplus de valeur latente qui rside dans la technologie redondante. Pensez-y donc
deux fois avant de vendre vos vieux jouets sur sur le Web !

Llectronique
Quoiquil existe de nombreuses manires de dtourner la technologie, vous finirez par
vouloir plus de tout : plus de prcision, plus de complexit, plus de contrle.
FIGURE 1-5 Un jouet Speak & Spell dtourn par Modified Toy Orchestra.

Si vous avez dcouvert llectronique lcole, on vous a sans doute appris


construire des circuits en utilisant des composants spcifiques. Ces circuits sont bass
sur les seules proprits lectriques des composants et doivent tre calculs en dtail
pour sassurer que la bonne quantit de courant passe par les bons composants.
Cest le genre de circuits que vous trouvez sous forme de kits chez les revendeurs de
composants lectroniques pour effectuer une tche unique, comme un minuteur pour
cuire un uf, ou une alarme qui sonne quand quelquun ouvre la bote biscuits. Ces
kits ddis font parfaitement leur travail, mais ils ne peuvent pas faire grand-chose
dautre.
Cest l quinterviennent les microcontrleurs. Ce sont de minuscules ordinateurs.
Utiliss avec des composants analogiques, ils permettent cette circuiterie de se
comporter de manire bien plus sophistique et polyvalente. Ils peuvent tre
reprogramms pour effectuer diffrentes fonctions au besoin. Votre Arduino est conu
autour dun de ces microcontrleurs, et il vous aide en tirer le meilleur parti. Dans
le Chapitre 2, vous pourrez observer de prs lArduino Uno pour comprendre
comment il est conu et ce dont il est capable.
Le microcontrleur est le cerveau de votre systme, mais il a besoin de donnes pour
sentir des choses ou pour agir dessus. Pour ce faire, il utilise des entres et des
sorties.

Les entres
Les entres sont les organes des sens de votre Arduino. Elles linforment sur ce qui se
passe dans le monde rel. Sous sa forme la plus lmentaire, une entre peut tre un
interrupteur, comme celui qui vous permet dallumer et dteindre la lumire chez
vous. lautre bout du spectre des possibles, ce peut tre un gyroscope, qui indique
lArduino la direction laquelle il fait face dans les trois dimensions. Vous en
apprendrez plus sur les entres de base dans le Chapitre 7, et vous dcouvrirez la
varit des capteurs et comment les utiliser dans le Chapitre 12.

Les sorties
Les sorties permettent votre Arduino dagir sur le monde rel dune manire ou
dune autre. Une sortie peut tre trs subtile et discrte, la manire dun tlphone
qui vibre, mais ce peut tre tout aussi bien un affichage gant sur la faade dun
btiment quon pourra voir des kilomtres la ronde. Le premier croquis de ce livre
vous permet de faire clignoter une LED (Chapitre 4). De l, vous apprendrez
contrler un moteur (Chapitre 8), et mme un grand nombre de sorties
(Chapitres 14 et 15) pour dcouvrir la varit des sorties dont vous pouvez doter
votre projet Arduino.

Lesprit Open source


Les logiciels Open source, en particulier Processing, ont eu une norme influence sur
le dveloppement dArduino. Dans le monde du logiciel, lOpen source est une
philosophie consistant partager les dtails dun programme et encourager les
autres lutiliser, le modifier et le redistribuer comme ils le souhaitent.
Tout comme le logiciel Processing le logiciel et le matriel Arduino sont Open
source. Cela signifie que ce logiciel et ce matriel peuvent tre librement adapts
vos besoins. Cest sans doute du fait de cette ouverture quon retrouve lesprit de la
communaut Open source dans les forums consacrs Arduino. Sur les forums
Arduino officiels (www.arduino.cc/forum/) et sur bien dautres dans le monde
entier, les gens partagent avec leurs collgues leur code source, leurs projets et leurs
questions. Ce partage permet toutes sortes de gens, dont des ingnieurs
expriments, des dveloppeurs talentueux, des designers pratiques, et des artistes
innovants dapporter leur expertise des novices complets dans lun ou lautre de ces
domaines. Il permet aussi de cerner les centres dintrt des gens, ce qui amne
parfois des amliorations ou des extensions du logiciel ou du matriel Arduino
officiels. Le site Web dArduino comprend une zone nomme Playground
(www.playground.arduino.cc) o les gens peuvent tlcharger leur code
pour que la communaut puisse lutiliser, le partager et le modifier.
Ce type de philosophie a pouss une petite communaut diffuser des connaissances
sur les forums, les blogs et les sites Web, crant ainsi un vaste ensemble de ressources
dans lequel les nouveaux arduinistes peuvent librement puiser.
Cest un trange paradoxe : en dpit de la nature Open source dArduino, on relve
une grande loyaut la marque Arduino tel point quil existe une convention de
nommage Arduino consistant rajouter -duino ou -ino au nom des cartes et des
accessoires.
N.d.T. : En Europe, les crateurs dArduino commercialisent dornavant leurs
propres cartes officielles sont le nom Genuino, car la marque Arduino a t dpose
par lun deux pour son propre compte.
Chapitre 2
Premiers contacts avec votre Arduino
Uno
DANS CE CHAPITRE
Dcouvrir lArduino Uno R3

Les autres cartes de la famille Arduino

O acheter une Arduino

Un bon kit Arduino pour dbuter

Amnager son espace de travail

D
ans le Chapitre 1, jai dcrit Arduino en termes gnraux. Il est maintenant temps
dy voir de plus prs. Le nom Arduino dsigne un ensemble de choses. Il peut
sagir de la carte Arduino, du matriel, de lenvironnement Arduino cest--
dire, un logiciel qui fonctionne sur votre ordinateur et finalement, dArduino en tant
que sujet, comme celui de ce livre : comment le matriel et le logiciel sont combins
en mobilisant un savoir-faire et des connaissances en lectronique pour crer un kit
utilisable en toute situation.
Ce chapitre est relativement court. Il vous offre un aperu de ce que vous devez savoir
pour commencer utiliser Arduino. Peut-tre avez-vous envie de vous plonger
rapidement dans le sujet. Dans ces conditions, contentez-vous de survoler ce chapitre,
vous arrtant sur les sujets que vous ne matrisez pas, et rfrez-vous-y ultrieurement
au gr de vos besoins.
Dans ce chapitre, vous dcouvrez les composants utiliss sur la carte Arduino Uno
R3, laquelle constitue le point de dpart pour la plupart des arduinistes. Vverrez
ensuite les autres cartes Arduino disponibles, en quoi elles diffrent, et quels sont
leurs usages. Ce chapitre passe en revue une srie de fournisseurs qui peuvent vous
procurer tous les lments dont vous avez besoin. Il examine aussi les kits de
dmarrage qui sont idaux pour le dbutant et pour accompagner cette lecture. Une
fois que vous disposez dun kit, vous navez plus besoin que dun espace de travail
pour dmarrer.
Dcouvrir lArduino Uno R3
Il nexiste pas de modle unique de carte Arduino ; on trouve plusieurs variations sur
Arduino, chacune tant conue pour convenir diffrents usages. Choisir la bonne
carte nest pas toujours ais, car le nombre des cartes saccrot sans cesse. Toutefois,
une carte peut tre considre comme la pierre angulaire de toute aventure dans le
monde Arduino ; cest celle avec laquelle la plupart des gens dbutent et qui est
adapte la plupart des usages. Cest lArduino (ou Genuino) Uno.
La version la plus rcente reste pour lheure lArduino Uno R3 (sortie en 2011).
Considrez-la comme la carte Arduino de base. Cest un bon matriel, fiable, qui
conviendra de nombreux projets. Si vous dbutez, cest la carte quil vous faut
(Figures 2-1 et 2-2).
Uno est le mot italien pour le chiffre un, qui correspond ici la version 1.0 du logiciel
Arduino. Les prdcesseurs ont pris toute une varit de noms, comme Serial, NG,
Diecimila (10 000 en italien, pour signaler que 10 000 cartes avaient t vendues) et
Duemilanove (2009 en italien, la date de sortie de cette carte). Uno a dbarqu pour
remettre un peu dordre dans la dnomination des cartes. R3 fait rfrence la
rvision des capacits de la carte, qui correspond un ensemble de mises jour,
damliorations et de correctifs. Dans le cas prsent, il sagit donc de la troisime
rvision.
La carte comporte, outre le microcontrleur, un certain nombre de petits composants,
dcrits au fil de ce chapitre.

FIGURE 2-1 La face composants dune Arduino Uno R3.


FIGURE 2-2 La face circuit dune Arduino Uno R3.

Le cerveau : le microcontrleur
ATmega328
Vous pouvez vous reprsenter le microcontrleur comme le cerveau de la carte.
Dans lArduino Uno, cest un ATmega328, fabriqu par Atmel. Cest le gros circuit
intgr noir qui se trouve non loin du centre de la carte. On le dsigne aussi par
circuit intgr ou puce. Cest le seul composant non soud ; il est plac sur un
support. Si vous le retiriez (dlicatement), il serait tel que montr en Figure 2-3.
FIGURE 2-3 Un microcontrleur ATmega328 tout seul.

Ce circuit se retrouve sous plusieurs formats physiques, appels packages. Celui de


lArduino Uno R3 est un package PTH, o les composants sont mis en contact avec la
carte en glissant leurs broches dans les trous dun support. Une variante est lArduino
Uno R3 SMD, o les broches de la puce sont soudes sur la carte. Un circuit SMD
(montage en surface) est bien plus petit, mais il ne peut pas tre chang comme le
PTH. cela prs, du moment que le nom du circuit est le mme, il fonctionne
lidentique ; seules les apparences diffrent. Vous pourrez voir un autre exemple de
circuit dans le Chapitre 14, lorsque vous en apprendrez plus sur lArduino
Mega 2560.

Les connecteurs HE
Le support du microcontrleur permet de relier toutes les broches du circuit
ATmega328 des connecteurs souds sur les bords de la carte et libells pour tre
faciles dutilisation. Ce sont les supports noirs qui se trouvent donc sur les cts de la
carte Arduino. Ils sont rpartis en trois groupes principaux : les broches numriques,
les broches des entres analogiques et les broches dalimentation.
Toutes ces broches vhiculent un courant, qui peut tre envoy en sortie ou reu en
entre. Pourquoi ces broches sont-elles importantes ? Elles permettent de connecter
de la circuiterie supplmentaire la carte rapidement et facilement, ce qui est trs
pratique lorsque vous fabriquez un prototype avec une platine dessai (dcrite au
chapitre 7). De plus, elles permettent denficher une carte fille additionnelle par le
dessus de votre carte Arduino (voir le Chapitre 13 pour plus dinformations sur les
cartes filles).
Le mme processus fond sur lmission et la rception de signaux se retrouve dans
les ordinateurs modernes, mais comme ils sont bien plus sophistiqus quun Arduino,
il est difficile de relier directement un ordinateur qui est habitu traiter des signaux
numriques (des 0 et des 1) un circuit qui traite des signaux analogiques (des
tensions allant de 0 V 5 V dans le cas de lATmega328).
LArduino (reportez-vous au croquis de la Figure 2-4) est trs particulier, car il est
capable dinterprter ces signaux lectriques et de les convertir en signaux
numriques que le programme peut comprendre et inversement. Il vous permet aussi
dcrire un programme en utilisant un logiciel sur un ordinateur conventionnel, lequel
programme sera converti ou compil en utilisant lenvironnement de dveloppement
(EDI) Arduino pour gnrer des signaux lectriques que votre circuit pourra
comprendre.
En comblant cet cart entre numrique et analogique, il est possible de b-nficier des
avantages dun ordinateur conventionnel facilit dutilisation, interface ergonomique
et code facile comprendre pour un humain pour contrler une grande varit de
circuits lectroniques, et leur faire adopter des comportements complexes assez
aisment.

FIGURE 2-4 Un Arduino Uno dont tous les lments importants sont libells.

Les broches numriques


Vous utilisez les broches numriques, qui se trouvent le long du haut de la carte sur la
Figure 2-1 prcdente, pour envoyer et recevoir des signaux numriques. Numrique
signifie que le signal ne possde que lun des deux tats haut ou bas. En termes
lectriques, cela signifie une tension de 0 volts ou de 5 volts, sans tension
intermdiaire.

Les broches analogiques


Les broches analogiques se trouvent en bas de la carte sur la Figure 2-1. Elles
servent recevoir des valeurs analogiques. Une valeur est dite analogique lorsquelle
peut prendre une valeur parmi toutes celles dune plage prdfinie. Dans le cas
prsent, la plage va de 0 5 volts, et la valeur peut se situer nimporte o entre les
deux bornes : 0,1 volt, 1,2 volt, 4,9 volt, etc.

Et les sorties analogiques ?


Les plus attentifs dentre vous auront remarqu quil ne semble pas y avoir de broches
de sortie analogique. En fait, il y en a, mais elles sont simules par les broches
numriques signales en tant que PWM laide du symbole ~ . PWM est
labrviation de Pulse With Modulation (Modulation de Largeur dImpulsion), une
technique que vous pouvez utiliser pour simuler une sortie analogique avec une sortie
numrique. Jexplique comment PWM fonctionne dans le Chapitre 7. Le symbole ~
apparat ct des broches 3, 5, 6, 9, 10 et 11 ; vous disposez donc de 6 broches
capables dmettre une modulation PWM.

Les broches dalimentation


Les broches dalimentation servent distribuer de lnergie aux circuits et aux
entres et sorties.
La broche Vin, qui est labrviation de Voltage in (en franais, tension dentre), peut
tre utilise comme source de courant quivalente celle utilise par le connecteur
dalimentation (par exemple, 12 V). Vous pouvez aussi utiliser cette broche pour
alimenter lArduino depuis une autre source.
Les trois broches marques GND (ground, masse) sont celles de masse (ou de terre),
essentielles pour fermer le circuit de lnergie. Il y a deux broches de masse en bas,
prs des broches analogiques, et une troisime en haut ct de la broche 13. Toutes
ces broches sont relies pour partager la mme masse. Vous pouvez utiliser la
broche 5 V pour alimenter les composants ou les circuits en 5 volts.
Vous disposez enfin dune broche 3,3 V pour alimenter les composants et les circuits
avec cette tension infrieure de 3,3 volts.
Le connecteur USB
Pour indiquer au microcontrleur de lArduino ce quil doit faire, vous devez lui
envoyer un programme. Sur lUno, vous transmettez (tlversez) vos les programmes
via la connexion USB. Ce connecteur mtallique est un port USB que vous pouvez
relier un cble USB A-B, le mme que celui utilis par votre imprimante ou votre
scanner. LArduino utilise le port USB pour les transferts de donnes, mais aussi pour
sa propre alimentation en nergie, car il consomme trs peu de courant. Le port USB
convient parfaitement pour raliser des applications qui consomment peu de courant.

Le jack dalimentation
ct du connecteur USB, vous trouvez un autre connecteur ; celui-l sert une
alimentation externe pour rpondre des besoins de puissance qui dpassent les
possibilits du port USB. Vous y reliez un adaptateur AC-DC (semblable un de ceux
utiliss pour alimenter les produits lectroniques grand public), une batterie ou mme
un panneau solaire.
Le connecteur est du type jack de 2,1 mm avec positif au centre. Le jack a une partie
externe et une partie interne, et la partie interne doit tre relie au ple positif de
lalimentation. Vous devriez pouvoir trouver ce genre de prise parmi les connecteurs
standard de la plupart des botiers dalimentation ; autrement, vous pouvez acheter le
connecteur et le brancher vous-mme via des fils.
Si vous connectez une alimentation dans le sens inverse (ngatif au centre), vous
produirez ce quon appelle une inversion de polarit . LArduino Uno R3 est
prvu pour rsister ce genre de bourde, mais ses composants de protection peuvent
fondre pendant quils tentent de protger la carte si vous envoyez trop de courant et
prenez trop de temps ragir ! Si vous inversez la polarit sur les broches Vin, 5 V
ou 3,3 V, vous ne bnficiez pas de la protection et dtruisez presque instantanment
plusieurs parties de votre carte, ainsi que le processeur ATmega328.
La tension recommande pour la carte Uno R3 est comprise entre 7 et 12 V. Si vous
fournissez trop peu de courant, votre carte risque de ne pas fonctionner correctement.

Les LED
La carte Uno dispose de quatre diodes mettant de la lumire (LED, pour Light-
Emitting Diode) nommes L, RX, TX et ON. Une LED est un composant qui produit
de la lumire quand il est parcouru par un courant.
On trouve des LED de toutes formes et de toutes tailles dans presque tout matriel
lectronique de grande consommation, du tmoin de veille du tlviseur votre lave-
linge. Et les LED envahissent dornavant nos routes. Cest un composant du futur.
Nous en ferons ample usage dans les exemples de ce livre. Les quatre LED soudes
sur le circuit sont toutes utilises pour indiquer lactivit de votre carte, comme suit :
ON est verte et signifie que votre Arduino est aliment.

RX et TX ne sallument que lorsque des donnes sont reues ou


mises par la carte.

L est une LED particulire. Elle est directement connecte la


broche 13 et permet de procder des tests et des montages
simples sans vous obliger ajouter au circuit une LED externe sur la
broche numrique 13.

Si votre Arduino est branch, mais que vous ne voyez rien sallumer, vous devriez
sans doute vrifier ceci :
Le cble USB est bien branch.

Le port USB de lordinateur fonctionne essayez de brancher un


autre matriel.

Le cble est en bon tat essayez un autre cble, si possible.

Si aucune de ces solutions ne fait silluminer les LED, il y a sans doute un problme
avec votre Arduino. Votre premier rflexe devrait tre de chercher sur Internet et dans
les forums du site Arduino (http://forum.arduino.cc). Si vous narrivez
toujours pas vous sortir daffaire, demandez au vendeur de vous remplacer
lArduino.

Le bouton Reset
La carte Uno dispose enfin dun bouton ct du connecteur USB. Cest le bouton de
rinitialisation (RESET). Il rinitialise lArduino ou larrte compltement lorsquil
est maintenu appuy un certain temps. Vous parvenez au mme rsultat en reliant par
un strap la broche du bas marque Reset la masse, une des deux broches GND plus
droite dans la mme range. La carte contient bien dautres composants, qui assurent
tous des fonctions importantes, mais ceux qui viennent dtre dcrits sont ceux quil
vous importe de connatre actuellement.

Dautres cartes Arduino


La section prcdente dcrit la carte Arduino Uno standard, mais il en existe dautres,
conues pour rpondre diffrents besoins. Quelques-unes proposent plus de
fonctionnalits, dautres sont minimalistes et trs compactes, mais elles adoptent
gnralement un design similaire celui de lArduino Uno R3. Pour cette raison, tous
les exemples de ce livre sont bass sur lUno R3 (lArduino Mega 2560 est
brivement mentionn au Chapitre 14). Les versions prcdentes de lUno devraient
fonctionner sans modifications, mais si vous utilisez une carte plus ancienne ou plus
spcialise, veillez bien suivre les instructions spcifiques. Cette section vous
prsente rapidement les autres cartes disponibles.

Les cartes Arduino/Genuino officielles


Arduino est Open source, mais cest aussi une marque protge. Pour garantir la
qualit de ses produits, les nouvelles cartes doivent tre approuves par lquipe
Arduino avant dtre officiellement reconnues et de pouvoir prendre le nom
dArduino. Vous pouvez reconnatre une carte officielle avant tout par son nom
Arduino Pro, Fio ou Lilypad, par exemple. Dautres cartes, qui ne sont pas
officielles, sont souvent nommes en mentionnant compatible Arduino ou pour
Arduino . Quelques entreprises ont russi faire reconnatre leurs cartes comme des
cartes officielles, si bien que vous pourriez trouver leurs noms imprims dessus,
comme Adafruit Industries ou Sparkfun.
Pour reconnatre une carte Arduino officielle, fabrique par lquipe Arduino, les
choses sont moins simples depuis 2015. En effet, les fondateurs navaient pas pris la
prcaution de dposer le nom Arduino ailleurs quaux USA. De ce fait, un des
fondateurs a, notamment en Europe, dpos la marque pour le compte dune socit
italienne (Arduino SRL) qui est depuis seule autorise utiliser le nom Arduino pour
vendre ces circuits. Les vrais circuits Arduino de lquipe dorigine sont dornavant
vendus sous le nom Genuino. Ceci dit, une carte officielle Arduino et une carte
officielle Genuino sont absolument interchangeables. Sur les Arduino, on voit un
symbole infini imprim quelque part et un lien vers un nouveau site arduino.org. Sur
les Genuino, il y a quatre petits symboles la place et ladresse du site est celle
connue depuis les origines, arduino.cc.
Comme le schma dune carte Arduino est Open source, les cartes Arduino
officieuses peuvent grandement varier, les gens les ayant conues en fonction de leurs
besoins. Elles sont gnralement bases sur le mme microcontrleur, et sont
compatibles avec le logiciel Arduino, mais il faut donc y prter attention et faire un
peu de lecture pour sassurer quelles fonctionneront bien comme vous pouvez vous y
attendre. Par exemple, Seeduino (par Seed Studio) est base sur un Arduino
Duemilanove ; elle est cent pour cent compatibles, mais elle dispose de divers
interrupteurs, connexions et supports supplmentaires, et peut de ce fait savrer plus
adapte certaines circonstances que la carte Arduino originale.
Un dbutant devrait choisir une carte officielle, car la majorit des exemples
dArduino quon trouve en ligne sont bass sur ces cartes. Comme les cartes
officielles sont plus largement utilises, les erreurs ou les bogues dans leur design ont
plus de chance dtre corrigs loccasion de la rvision suivante, ou au moins dtre
mieux documents.

Arduino Leonardo
Leonardo est lune des toutes dernires cartes de la gamme Arduino officielle. Elle
adopte la mme empreinte (forme de circuit imprim), mais le microcontrleur utilis
est diffrent, ce qui lui permet de reconnatre un clavier ou une souris dordinateur. Je
donne plus de dtails sur les diffrences avec lUno et comment lutiliser dans le
chapitre bonus.

Arduino Mega 2560 R2


Comme son nom le suggre, Mega 2560 est une carte plus grande que lUno. Elle est
destine ceux qui en veulent plus : plus dentres, plus de sorties, et plus de
puissance de calcul ! Le Mega dispose de 54 broches numriques et de 16 broches
analogiques, alors que lUno naligne que 15 broches numriques et 6 broches
analogiques. Cette carte sera vue en dtail au Chapitre 14.

Arduino Mega ADK


LArduino Mega ADK est approximativement la mme carte que la Mega 2560, mais
conue pour sinterfacer avec des tlphones Android. Cela signifie que vous pouvez
partager des donnes entre votre mobile ou votre tablette Android et un Arduino pour
largir lventail des fonctionnalits de chacun.

Arduino Nano 3.0


LArduino Nano est un condens dArduino qui ne mesure que 1,85 cm sur 4,3 cm.
Ces dimensions sont parfaites pour rduire celles de votre projet. Le Nano a toute la
puissance de lArduino Uno, puisquil utilise le mme microcontrleur ATmega328,
mais ne fait quune fraction de sa taille. Il tient merveille sur une platine dessai, ce
qui le rend idal pour le prototypage.

Arduino Mini R5
Contrairement ce que son nom suggre, lArduino Mini est plus petit que le Nano.
Cette carte utilise aussi le microcontrleur ATmega328, mais elle est plus concentre,
les connecteurs externes et le connecteur Mini-USB du Nano disparaissant. Elle est
parfaitement indique si lespace est pour vous un enjeu, mais il faut la manipuler
avec soin lorsquon la connecte, car une connexion incorrecte peut facilement la
dtruire.

Arduino Ethernet
Cet Arduino a la mme empreinte que lUno, mais il est spcifiquement conu pour
communiquer avec Internet. Plutt que daccder de vastes quantits de donnes
disponibles via votre ordinateur, vous pouvez demander votre Arduino Ethernet dy
accder directement. Un navigateur Web sur votre ordinateur ne fait quinterprter le
texte qui lui indique quoi afficher lcran : alignement, mise en forme, affichage des
images, par exemple. Si ces commandes sont connues, lArduino Ethernet peut
accder au texte directement, et lutiliser toutes fins utiles. Une utilisation qui
rencontre du succs, cest daccder Twitter pour afficher des tweets sur un cran
LCD ou faire sonner une alarme chaque fois que vous tes mentionn. On trouve
quelques croquis dexemple dans le logiciel Arduino, mais vous aurez besoin de
connaissances avances en termes de dveloppement Web pour utiliser cette carte.

Arduino BT
LArduino BT permet votre Arduino de communiquer avec des engins Bluetooth
proximit. Cest parfait pour sinterfacer avec des tlphones mobiles, des tablettes
ou nimporte quel appareil Bluetooth !

Les Arduino de contributeurs


(approuvs)
Nombre de cartes Arduino sont maintenant standardises et conues par lquipe
Arduino, mais quelques-unes sont des contributions dautres entreprises, telles
quAdafruit Industries ou SparkFun, qui ont t reconnues comme des cartes
officielles. Je dresse ci-aprs la liste des meilleures dentre elles.

Arduino LilyPad
LArduino LilyPad tait destin aux projets combinant la technologie et les textiles
pour aider le dveloppement de-textiles ou dlectronique quil serait possible de
revtir. Le LilyPad et ses cartes innovantes (des circuits imprims qui permettent
dintgrer facilement diffrents composants sans avoir crer vos propres cartes)
peuvent tre cousues ensemble en utilisant un fil conducteur plutt que du fil
conventionnel. Cette carte a t conue et ralise par Leah Buechley du MIT
(http://web.media.mit.edu/~leah/) et SparkFun Electronics. Si vous
tes intress par les e-textiles ou llectronique dont on peut shabiller, reportez-
vous lexcellent didacticiel sur le site de SparkFun pour dcouvrir la dernire
version de la carte et le kit ProtoSnap
(http://www.sparkfun.com/tutorials/308).

Arduino Fio
Le Fio (dont le nom entier est lArduino Funnel I/O) a t conu par Shigeru
Kobayashi dans lide de raliser des applications sans fil. Il sappuie sur la
conception du LilyPad, mais il comprend un port mini-USB, un connecteur pour une
batterie au lithium, et un espace pour un module sans fil XBee.

Arduino Pro
LArduino Pro est une version minimaliste et super-plate de lArduino, ralise par
SparkFun Electronics, base sur le mme microcontrleur que lUno R3. Il ne
comprend pas les connecteurs HE, mais il a les mmes fonctionnalits que lUno. Il
est idal quand votre projet est contraint par lpaisseur. De plus, il dispose dun
support pour batterie qui vous permet de rendre facilement votre projet mobile.

Arduino Pro Mini


Le Pro mini est un autre produit de SparkFun qui pousse le minimalisme de lArduino
Pro dans de nouveaux retranchements. lchelle des Arduino, celui-ci se tient entre
le Nano et le Mini. Il ne dispose daucun des connecteurs HE ni du port Mini-USB du
Nano. Il ne dispose pas des fonctions de protection de lUno R3, alors prenez grand
soin lorsque vous le cblez, car une mauvaise connexion peut facilement le dtruire.

Acheter un Arduino
Initialement, lArduino ntait disponible que dans de rares choppes disperses de
par le monde. Dsormais, vous trouvez normment dendroits o acheter un Arduino,
comme vous pourrez le constater. Plus loin, je prsente aussi les kits pour dbutants
qui comprennent les composants de base dont vous avez besoin, solution que je vous
recommande pour dbuter.

Le magasin officiel dArduino


Un bon endroit pour commencer est le magasin Arduino (store.arduino.cc). Vous y
trouverez les dernires cartes et kits Arduino, ainsi quune slection de composants.
Toutefois, le site nest pour lheure quen anglais ou italien. Rappelons que les cartes
portent le nom Genuino en Europe. Le site qui possde les droits sur le nom Arduino
est ladresse http://www.arduino.org.

Les distributeurs en France


Plusieurs boutiques dlectronique existent depuis bien plus longtemps quArduino.
Dsormais, en plus de vendre toutes sortes de composants lectroniques, ces
boutiques commercialisent une quantit considrable de composants et dquipements
pour Arduino. Voici quelques-unes dentre elles :
Lextronic : www.lextronic.fr

Selectronic : www.selectronic.fr

Gotronic : www.gotronic.fr

Conrad : www.conrad.fr

Voyez aussi Farnell et RS Composants.

Amazon
La popularit dArduino est devenue telle quon en trouve maintenant sur Amazon
(www.amazon.fr). La plupart des cartes Arduino ainsi que divers composants et
kits y sont disponibles, mme sils sont plus difficiles trouver que sur des sites
ddis.

Pour commencer : le kit du dbutant


Vous en savez maintenant un peu plus sur la carte Arduino, mais ce nest quun
morceau du puzzle ; vous aurez besoin de bien dautres lments pour tre en mesure
de lutiliser. Tout comme un ordinateur serait inutile sans souris et clavier, un Arduino
serait inutile sans ses composants. Ou du moins, pas aussi amusant.
Nombre dexemples de base permettent larduiniste de base dacqurir par la
pratique la matrise des fondamentaux dArduino (dont il est question dans les
Chapitres 4 8). Vous pouvez y parvenir laide de quelques composants
lmentaires. Pour vous pargner le temps et leffort de les trouver vous-mmes,
quelques entrepreneurs et entreprises ont assembl des kits qui vous permettent de
vous lancer dans des exprimentations sans attendre !
Nombre des kits disponibles ont t conus par ces entrepreneurs et entreprises en
fonction de leurs expriences, de ce quils aiment et de ce quils naiment pas. Vous
pouvez trouver bien des composants qui feront le mme boulot, mais dont lapparence
sera diffrente, selon lusage quon leur rserve.
Tout cela pour dire quun kit pour dbutant peut correspondre quelque chose de
trs diffrent dune personne lautre, surtout pour les dbutants. Tout cela peut
rajouter la confusion lorsque vous entamez votre premier projet.
Voici une liste des composants lmentaires que tout kit pour dbutant avec Arduino
digne de ce nom doit comprendre :
Arduino Uno : La carte que vous connaissez et que vous adorez.

Un cble USB A-B : Il est essentiel pour utiliser votre Arduino. Cest
le mme que celui qui relie votre ordinateur une imprimante ou
un scanner.

Des LED : Les diodes lectroluminescentes de diffrentes couleurs


sont parfaites pour constituer une voie de retour visuelle dans vos
projets, ainsi que pour tester des projets dillumination petite
chelle.

Des rsistances : Ce sont des composants lectriques


fondamentaux utiliss pour sopposer lcoulement du courant
dans un circuit. Elles sont essentielles au bon fonctionnement de la
plupart des circuits. Elles ont une valeur fixe indique laide
danneaux de couleurs qui se trouvent sur le corps.

Des potentiomtres : Ce sont des rsistances qui sopposent la


circulation du courant comme les rsistances de valeur fixe, mais
dont on peut varier la valeur. Ils sont plus particulirement utiliss
dans les quipements radio et hi-fi pour les boutons de rglage de
frquence et de volume, mais on en trouve aussi destins dautres
usages, comme pour dtecter une force applique une surface.

Des diodes : Ce sont des diodes comme les LED, mais elles
nmettent pas de lumire. Elles opposent une rsistance
considrable la circulation du courant dans une direction, et trs
faible (dans lidal, nulle) dans lautre. Cest pour la mme raison
quune LED ne fonctionne que dans un sens, mais au lieu dmettre
de la lumire, les diodes sont utilises pour contrler la circulation
du courant dans votre circuit.

Des boutons-poussoirs : On en trouve derrire la coque de bien


des matriels lectroniques grand public, comme les manettes de
jeu vido et les tlcommandes. Ils sont utiliss soit pour connecter,
soit pour dconnecter des parties dun circuit, ce qui permet votre
Arduino de capter des actions humaines.

Des photodiodes (LDR) : Elles changent de rsistance en fonction


de la luminosit ambiante.

Des capteurs de temprature : Ces capteurs vous indiquent la


temprature ambiante du milieu o ils sont placs. Ils sont parfaits
pour observer des changements dans votre environnement.

Des bipeurs pizos : On les dcrit techniquement comme des


engins metteurs de sons numriques. Ces composants peuvent
tre aliments pour produire des notes ou de la musique. Ils
peuvent aussi tre relis des surfaces pour mettre des
vibrations.

Des relais : Ces interrupteurs activs par llectricit sont utiliss


pour activer des circuits plus puissants en utilisant votre Arduino
basse tension. La moiti du relais est un lectro-aimant, et lautre un
interrupteur magntique. Llectro-aimant peut tre activ par le
courant de 5 V de lArduino, qui bascule linterrupteur. Les relais
sont essentiels pour les projets visant contrler des illuminations
et des moteurs lectriques.

Des transistors : Ce sont les composants de base de tous les


ordinateurs modernes. Ce sont des interrupteurs activs par
llectricit, semblables des relais, mais linterrupteur est activ
par le courant et non manuellement. Cela signifie que sa bascule
peut tre hyper-rapide, ce qui fait des transistors la solution idale
pour des oprations haute frquence comme lillumination par
des LED ou le contrle de la vitesse de moteurs.

Des moteurs courant continu : Ce sont de simples moteurs


lectriques. Lorsque le courant passe dans le moteur, il tourne dans
une direction ; et lorsque le courant est invers, le moteur tourne en
sens inverse. On trouve une grande varit de moteurs lectriques,
de ceux qui font vibrer votre tlphone ceux qui servent dans des
perceuses.

Des servomoteurs : Ces moteurs embarquent une circuiterie qui


analyse leur rotation. Les servomoteurs sont gnralement utiliss
pour des oprations requrant de la prcision, comme louverture
de vannes ou le mouvement des articulations des robots.

Voici quelques-uns des kits les plus rpandus. Ils comprennent tous les composants
qui viennent dtre prsents. Le prix est de lordre de 80 euros. Tous font
parfaitement laffaire pour raliser les exemples figurant dans ce livre :
Le Starter Kit pour Arduino (ARDX)
http://www.selectronic.fr/adafruit-kit-d-
experimentation-ardx.html.

Le kit Sparkfun Inventor par Sparkfun (reprsent sur la Figure 2-5)


http://www.lextronic.fr/P19085-sparkfun-inventors-
kit--v31.html.

Le kit Proto-PIC Boffin pour Arduino de Proto-Pic http://proto-


pic.co.uk/proto-pic-boffin-kit-for-arduinou-no/.

Le kit Arduino Starter Kit dArduino


http://www.lextronic.fr/P27664-starter-kit-
arduino.html.
FIGURE 2-5 Le kit SparkFun Inventor comprend un bon ventail de composants, dont des
potentiomtres linaires et sensibles la flexion.

Tous les exemples prsents dans ce livre peuvent tre raliss avec nimporte lequel
de ces kits, mme sils diffrent lgrement par le nombre et les types de leurs
composants. Parfois, un mme composant peut prendre diffrentes formes, alors
veillez bien lire attentivement la liste pour vous assurer que vous pouvez identifier
chaque composant avant de commencer. On trouve des kits meilleur march, mais ils
nincluront sans doute pas certains composants, tels que les moteurs ou le jeu de
capteurs.

Amnager un espace de travail


Pour travailler sur un projet Arduino, vous pourriez tre assis sur votre sofa et
travailler sur votre circuit, ou alors vous trouver en haut dune chelle pour configurer
une installation. Je suis pass par l ! Mais ce nest pas parce quil est possible de
travailler de ces manires quelles sont bonnes. Vous feriez bien mieux de vous
amnager un espace de travail avant de vous lancer dans vos exprimentations, et
cest doublement important lorsque vous dmarrez avec Arduino.
Travailler avec llectronique est une affaire minutieuse. Vous manipulez beaucoup de
minuscules composants trs fragiles, et vous avez besoin de prcision et de patience
pour assembler votre circuit. Si vous tes dans une salle faiblement claire et que
vous cherchez sans cesse de la place sur votre plan de travail, vous allez rapidement
puiser votre patience et votre stock de composants (en les perdant ou en les
dtruisant).
Tout ce que vous pourrez faire pour vous simplifier la vie sera une bonne chose.
Lespace de travail idal comprend :
un grand bureau ou une grande table bien stable ;

une bonne lampe de travail ;

un fauteuil confortable ;

une ambiance calme (recommand).


Chapitre 3
Tlcharger et installer Arduino
DANS CE CHAPITRE
Rcuprer et installer le logiciel Arduino

Prendre en main lenvironnement Arduino

A
vant de commencer travailler avec votre carte Arduino, vous devez installer sur
votre ordinateur un logiciel indispensable. Il est semblable ceux que vous avez
sur votre ordinateur personnel, votre portable, votre tablette ou votre tlphone : il
est requis pour utiliser votre matriel.

Le logiciel Arduino est du type environnement de dveloppement intgr (EDI). Cest


une sorte datelier communment utilis pour le dveloppement logiciel. Il vous
permet dcrire, de tester et de tlcharger des programmes. On trouve des versions
de ce logiciel Arduino pour Windows, Macintosh OS X et Linux.
Dans ce chapitre, vous apprendrez o obtenir le logiciel pour le systme que vous
utilisez, et je vous guiderai pas pas pour le tlcharger et linstaller. Je vous
propose ensuite de faire un tour du propritaire de lenvironnement dans lequel vous
allez dvelopper vos programmes Arduino.

Installer Arduino
Cette section vous explique comment installer lenvironnement Arduino sur la plate-
forme de votre choix. Les instructions sont spcifiques linstallation de
lenvironnement de lArduino Uno R3, mais elles valent tout aussi bien pour les cartes
prcdentes, telles que Mega2560, Duemilanove, Mega ou Diecimila. La seule
diffrence peut rsider dans les pilotes requis pour linstallation sous Windows.

Installer Arduino pour Windows


Les instructions et les captures dcran figurant dans cette section dcrivent
linstallation du logiciel Arduino et des pilotes Arduino Uno pour les version de
Windows depuis la version 7. Toutefois, les mmes instructions valent pour Windows
Vista et Windows XP.
La seule difficult est de passer Windows 8 ou 10, sur lequel il faut, encore pour le
moment, mettre en uvre quelques astuces pour installer les pilotes. Vous pouvez
trouver des instructions sur http://vx450-
domotique.blogspot.fr/2013/04/instal-lez-larduino-uno-
sous-windows-8.html.
Avec votre Arduino Uno et un cble USB A-B (reprsent sur la Figure 3-1) porte
de main, suivez ces tapes pour rcuprer et installer la dernire version dArduino
sur votre version de Windows :

FIGURE 3-1 Un cble USB A-B et un Arduino Uno.

1. Ouvrez la page de tlchargement dArduino sur


http://arduino.cc/en/Main/Software, et cliquez sur le lien
Windows pour tlcharger le fichier .zip qui contient une copie
de lapplication Arduino pour Windows.

lheure o jcris ces lignes, le fichier zipp fait environ 100 Mo.
Cest un fichier plutt volumineux, si bien quil vous faudra quelque
temps pour le tlcharger. Lorsque le tlchargement est termin,
dsarchivez le fichier et placez le dossier Arduino un endroit
appropri, comme :
C : /Program Files/Arduino/
2. Branchez lembout carr de votre cble USB dans lArduino et
lembout plat dans le port de votre PC pour connecter lArduino
votre ordinateur.

Aussitt que la carte est connecte, la LED verte libelle ON indique


que votre Arduino est alimente. Windows fait alors de vaillants
efforts pour trouver les pilotes, mais il va vraisemblablement
chouer, comme reprsent sur la Figure 3-2. Mieux vaut fermer
lassistant et installer le pilote vous-mme, comme expliqu dans les
tapes qui suivent.

FIGURE 3-2 Nouveau matriel trouv ou pas, selon le cas.

3. Ouvrez le menu Dmarrer et saisissez devmgmt.msc dans le


champ de recherche, puis pressez Entre.

La fentre du Gestionnaire de priphriques apparat. Ce


gestionnaire vous affiche tous les diffrents matriels et
priphriques relis votre ordinateur, dont votre carte Arduino.

Si vous regardez vers le bas de la liste, vous devriez tomber sur


lArduino Uno, ct duquel figure un point dexclamation. Ce point
dexclamation signale que lArduino nest pas encore reconnu.

4. Cliquez du bouton droit sur lArduino Uno et slectionnez


Mettre jour le pilote dans la liste qui apparat ; cliquez ensuite
sur Rechercher un pilote sur mon ordinateur (voir Figure 3-3).
FIGURE 3-3 Installer les pilotes dans le Gestionnaire de priphriques.

La fentre affiche une nouvelle tape.

5. Cliquez sur Parcourir pour trouver votre dossier Arduino. Vous


devriez trouver ce dossier dans celui o vous avez dsarchiv le
fichier .zip ltape 1.

6. Dans votre dossier Arduino, cliquez sur le dossier Drivers, puis


cliquez sur le fichier Arduino Uno. Notez que si vous tes dans le
sous-dossier FTDU USB Drivers, cest que vous tes all trop loin.

7. Cliquez sur Suivant, et Windows achve linstallation.


Une fois que vous avez install le logiciel, vous pouvez facilement lancer le
programme en crant un raccourci sur le bureau de votre ordinateur ou dans son menu
Dmarrer, selon ce que vous prfrez. Rendez-vous dans le dossier Arduino, localisez
le fichier Arduino.exe, cliquez du bouton droit, et slectionnez Crer un raccourci
pour crer le raccourci en question. Double-cliquez sur licne du raccourci chaque
fois que vous souhaitez dmarrer lapplication Arduino. Cela ouvre une fentre pour
un nouveau croquis, comme sur la Figure 3-4.
FIGURE 3-4 La fentre de latelier Arduino sous Windows.

Installer Arduino pour Mac OS X


Les instructions dispenses dans cette section dcrivent linstallation du logiciel
Arduino sur Mac OS X Lion, mais elles fonctionneront pareillement sur Leopard,
Snow Leopard et Moutain Lion. Si vous utilisez une version antrieure du systme
dexploitation, vous devrez faire des recherches sur le Web pour trouver des
instructions spcifiques.
Suivez ces tapes pour installer le logiciel Arduino sur Mac :
1. Ouvrez la page de tlchargement dArduino sur
http://arduino.cc/en/Main/Software, et cliquez sur le lien
Mac OS X pour tlcharger le fichier .zip qui contient une copie
de lapplication Arduino pour Mac OS X.

lheure o jcris ces lignes, le fichier zipp fait 127 Mo. Cest un
fichier plutt volumineux, si bien quil vous faudra quelque temps
pour le tlcharger. Lorsque le tlchargement est termin, double-
cliquez sur le fichier et placez son contenu dans votre dossier
Applications, comme sur la Figure 3-5.

FIGURE 3-5 Placez lapplication Arduino dans votre dossier Applications.

2. Branchez lembout carr de votre cble USB dans lArduino et


lembout plat dans le port de votre Mac pour connecter
lArduino votre ordinateur.

Aussitt que la carte est connecte, une bote de dialogue apparat,


qui affiche le message A new network interface has been
detected (voir Figure 3-6).

3. Cliquez sur Prfrences rseau, puis sur Appliquer dans la


fentre qui apparat.

Notez que votre Arduino apparat dans la liste sur le ct gauche de


la fentre comme tant Non configur. Toutefois, croyez-moi sur
parole, le logiciel est bien install et votre carte Arduino
fonctionnera.
4. Fermez la fentre Prfrences rseau.

FIGURE 3-6 Votre Mac va penser que la carte Arduino est une nouvelle carte rseau.

Pour dmarrer lapplication Arduino, rendez-vous dans votre dossier Arduino,


localisez lapplication Arduino, glissez-la sur le Dock, puis cliquez sur licne
Arduino pour ouvrir lapplication (la Figure 3-7 vous montre la fentre qui apparat
alors). Si vous prfrez, vous pouvez aussi glisser-poser lapplication sur votre
bureau pour crer un alias.

Installer Arduino pour Linux


Linstallation sur Linux est plus complexe et dpend de la distribution que vous
utilisez, si bien quil nen sera pas question dans ce livre. Si vous utilisez Linux, vous
serez probablement plus que comptent pour installer le logiciel et vous naurez aucun
mal relever le dfi. Vous trouverez tous les dtails requis pour installer Arduino sur
Linux ladresse suivante :

http://arduino.cc/playground/Learning/Linux

Passer en revue lenvironnement


Arduino
Les programmes crits pour Arduino sappellent des croquis. Cest une convention de
nommage hrite de Processing, qui permettait aux utilisateurs de crer des
programmes rapidement, de la mme manire que vous pouvez croquer une ide dans
un carnet de croquis.
Avant de jeter un il sur votre premier croquis, je vous encourage faire un tour du
logiciel Arduino. cette fin, cette section va vous guider. Le logiciel Arduino est un
environnement de dveloppement intgr, ou EDI, qui se prsente sous la forme dune
interface graphique.
FIGURE 3-7 La fentre de latelier Arduino sous Mac OS X.

Linterface graphique vous permet dinteragir dune manire visuelle avec


lordinateur. Sans elle, vous devriez lire et crire des lignes de texte, un peu comme
lorsque vous devez saisir des commandes dans la ligne de commandes DOS, dans
Terminal sur Mac OS X, ou comme au dbut de Matrix.
La fentre turquoise constitue linterface dArduino. Elle est divise en quatre zones
principales (repres sur la Figure 3-8) :
La barre de menus : Semblable la barre de menus dautres
programmes qui vous sont familiers, la barre de menus Arduino
contient des menus droulants pour tous les outils, paramtres et
informations du programme. Sous Mac OS X, la barre de menus se
trouve en haut de lcran ; sous Windows et Linux, elle se trouve en
haut de la fentre Arduino active.
FIGURE 3-8 Les zones de linterface graphique.

La barre doutils : La barre doutils contient plusieurs boutons qui


sont communment utiliss lorsque vous crivez des croquis pour
Arduino. Ces boutons, qui sont aussi accessibles dans la barre de
menus, permettent daccomplir les actions suivantes :

Vrifier : Vrifie que votre code fait sens pour le logiciel


Arduino. Aussi dsign par le terme de compilation, ce
processus correspond un peu une correction
orthographique et grammaticale. Toutefois, sachez que si le
compilateur vrifie que votre code ne contient pas derreurs
videntes, il ne garantit pas que votre croquis fonctionnera
correctement.
Tlverser : Envoie votre croquis la carte Arduino connecte
lordinateur. Votre croquis est compil avant dtre envoy.

Nouveau : Cre un nouveau croquis.

Ouvrir : Ouvre un croquis existant.

Enregistrer : Sauvegarde le croquis courant.

Moniteur srie : Vous permet de visualiser les donnes qui


sont envoyes ou reues par votre carte Arduino.

diteur de texte : Cette zone affiche votre croquis sous la forme


de texte. Cest approximativement un diteur de texte, mais avec
des fonctionnalits supplmentaires. Une partie du texte est
colorie, si ce dernier est reconnu par le logiciel Arduino. Vous
pouvez aussi mettre en forme automatiquement le texte pour quil
soit plus facile lire.

Zone des messages : Mme aprs avoir utilis Arduino des annes
durant, vous ferez toujours des erreurs (tout le monde en fait), et
cette zone de messages est lune des premires sources
dexplications laquelle vous vous rfrerez (Note : lautre source
est la carte elle-mme, quand elle dgage une forte odeur de
plastique brl).
Chapitre 4
Faire clignoter une LED
DANS CE CHAPITRE
Trouver le croquis Blink

Identifier votre carte

Configurer le logiciel

Tlverser Blink

Raliser votre premier croquis Arduino

Expliquer le croquis

Enrichir Blink

R
jouissez-vous. Vous tes sur le point de faire votre premier projet Arduino ! Vous
avez achet la carte, sans doute un kit de dmarrage (peut-tre auprs dun des
fournisseurs que je vous ai indiqus), et vous tes prt dmarrer.

Cest toujours une bonne ide damnager un plan de travail ou un bureau propre
lorsque vous bricolez. Il nest pas rare quon laisse tomber ou quon range au mauvais
endroit quelques-uns des minuscules composants avec lesquels on travaille, alors
veillez ce que votre espace de travail soit propre, bien clair et quil comprenne un
fauteuil confortable.
De par sa nature, Arduino est un matriel qui conduit pratiquer un travail manuel. La
meilleure manire den apprendre plus sur Arduino, cest donc la pratique en
exploitant ce matriel pour faire quelque chose. Cest exactement dans cet esprit que
jai crit ce livre. Dans ce chapitre, je vous guide via des tapes simples pour que
vous parveniez produire quelque chose.
Je vous guide aussi pour parvenir tlverser votre premier croquis Arduino. Aprs
cela, vous examinerez la manire dont il fonctionne et comment vous pouvez le
modifier au gr de vos besoins.
Travailler sur votre premier croquis
Arduino
Vous devriez maintenant avoir devant vous un Arduino Uno R3, un cble USB, et un
ordinateur fonctionnant avec le systme dexploitation de votre choix (Windows, Mac
OS ou Linux). La section suivante vous laisse entrevoir ce que vous pouvez faire avec
ce petit engin.

Trouver le croquis Blink


Le rle essentiel du logiciel (latelier) Arduino est de compiler puis de transfrer un
programme vers la mmoire du microcontrleur sur la carte Arduino.Le texte source
de ce programme est un croquis. Quest-ce quun croquis, direz-vous ? Arduino a t
conu pour permettre aux gens de prototyper rapidement des ides en utilisant des
petits bouts de code qui matrialisent cette ide un peu comme lorsque vous jetez
une ide sur le papier. Pour cette raison, les programmes crits pour Arduino sont
nomms croquis. Toutefois, on utilise dsormais Arduino pour raliser des oprations
toujours plus complexes. Ce nest donc pas parce quon parle de croquis quun
programme Arduino est forcment de faible envergure.
Le croquis que vous allez utiliser ici sappelle Blink (clignoter). Cest sans doute le
croquis le plus lmentaire que vous puissiez crire, une sorte de Hello, world !
pour Arduino. Cliquez dans la fentre Arduino. Dans la barre de menus, ouvrez le
menu Fichier puis le sous-menu Exemples, puis la catgorie 01.Basics pour
slectionner enfin Blink (voir Figure 4-1).
Une nouvelle fentre apparat devant votre croquis vierge (Figure 4.2).
FIGURE 4-1 Trouvez votre chemin dans le croquis Blink.

Identifier votre carte


Avant de pouvoir tlverser votre croquis, vous devez vrifier quelques petites
choses. Tout dabord, vous devez confirmer le type de carte dont vous disposez.
Comme mentionn dans le Chapitre 2, vous pouvez faire votre choix parmi toute une
varit de matriels Arduino et plusieurs variantes de la carte USB. La dernire
gnration de carte Uno est la R3. Si vous avez achet du matriel neuf, vous pouvez
tre quasiment certain que cest le type de carte dont vous disposez. Regardez
larrire de la carte. Vous devriez lire des dtails sur le modle de la carte, sous une
forme similaire celle de la Figure 4-3. Notez que la marque peut tre tout aussi bien
Genuino.
Vrifiez aussi le circuit intgr ATMEL sur lArduino. Comme je lai expliqu dans le
Chapitre 2, ce circuit est le cerveau de votre Arduino, comme le processeur (CPU) de
votre ordinateur. Comme lUno permet de remplacer ce circuit, il y a toujours un
risque, surtout sur une carte non neuve, pour quil ait t remplac par un autre
modle.
FIGURE 4-2 Le croquis Blink pour Arduino.
FIGURE 4-3 Larrire dun Arduino Uno.

Quoique lapparence du circuit ATMEL permette de le distinguer facilement sur une


carte, il serait difficile de dire sil a t chang en le comparant un vieil Arduino.
Ce qui permet de le savoir, cest ce qui crit sur le circuit. Dans le cas prsent,
recherchez la mention ATmega328-P. La Figure 4-4 reprsente le circuit en gros plan.

FIGURE 4-4 Gros plan sur le circuit ATMEGA328P.

Configurer le logiciel
Une fois que vous avez confirm le type de carte que vous utilisez, vous devez fournir
cette information au logiciel. Dans la barre de menus Arduino (en haut de la fentre
Arduino sous Windows, et en haut de lcran sous Mac OS X), slectionnez Outils-
>Type de carte. Vous accderez alors une liste des diffrents types de cartes grs
par le logiciel Arduino. Slectionnez votre carte dans la liste, comme sur la Figure 4-
5.
Vous devez ensuite slectionner le port srie. Le port srie est la connexion qui permet
votre ordinateur et au matriel Arduino de communiquer. Srie dcrit la manire
dont les donnes sont envoyes, bit (0 ou 1) aprs bit. Le port est linterface physique,
dans le cas prsent : la prise USB. Je reviens plus en dtail sur la communication au
chapitre 7.
FIGURE 4-5 Slectionnez lArduino Uno dans le menu Type de carte.

Pour dterminer le port srie, slectionnez Outils->Port srie. Une liste des matriels
connects votre ordinateur apparat (voir Figure 4-6). La liste contient tous les
priphriques avec lesquels vous pouvez communiquer par srie, mais vous ntes
pour lheure intress que par lArduino. Si vous venez dinstaller Arduino et que
vous avez branch la carte, elle devrait apparatre en haut de la liste. Sous Mac OS X,
elle apparat sous le nom /dev/tty.usbmodemXXXXX (o XXXXX est un
nombre alatoire). Sous Windows, cest pareil, mais les ports sries sont nomms
COM1, COM2, COM3, et ainsi de suite. Le nombre le plus lev correspond
gnralement au dernier priphrique connect. Une fois que vous avez trouv le port
srie, slectionnez-le. Il devrait apparatre en bas de linterface de lArduino, avec la
carte que vous avez slectionne (voir Figure 4-7).

Tlverser le croquis
Maintenant que vous avez signal au logiciel Arduino avec quel type de carte vous
communiquez et quel port srie vous utilisez, vous pouvez tlverser le croquis Blink
que vous avez ouvert plus tt dans ce chapitre.
FIGURE 4-6 Une liste des connexions sries disponibles dans lenvironnement Arduino.

FIGURE 4-7 Linterface Arduino une fois le port srie et la carte slectionns.
Tout dabord, utilisez le bouton Vrifier. Cela permet de vrifier le code afin de
sassurer quil fait sens. Cela ne signifie pas forcment que votre code fera ce que
vous attendez, mais cela garantit que sa syntaxe est telle quArduino saura la
comprendre (voir Chapitre 2). Vous devriez visualiser une barre de progression et le
texte Compilation du croquis (voir Figure 4-8) durant quelques secondes,
puis le texte Compilation termine une fois le processus achev.

FIGURE 4-8 Vrification du code.

Si le croquis est bien compil, vous pouvez cliquer sur le bouton Tlverser ct du
bouton Vrifier. Une barre de progression apparat. Vous observez des activits sur
votre carte : les deux LED libelles RX et TX clignotent. Cela montre que lArduino
est en train de recevoir et dmettre des donnes. Aprs quelques secondes, les LED
RX et TX cessent de clignoter, et le message Tlversement termin
apparat en bas de la fentre Arduino (voir Figure 4-9).

FIGURE 4-9 Linterface a termin de tlverser.

Flicitez-vous !
Vous devriez voir la LED libelle L clignoter comme le demande le programme : une
seconde allume, une seconde teinte. Dans ce cas, vous pouvez vous congratuler.
Vous venez juste de tlverser votre premier bout de code Arduino et donc dentrer
dans le monde de linformatique physique.
Si vous ne voyez pas la LED L clignoter, reprenez toutes les tapes prcdentes.
Vrifiez que vous avez install latelier Arduino correctement et tentez un nouvel
essai. Si vous ne voyez toujours pas la LED L clignoter, recherchez de laide sur
Internet et sur le site officiel dArduino.

Que sest-il pass ?


Sans verser la moindre goutte de sueur, vous venez juste de tlverser votre premier
croquis dans un Arduino. Bien jou.
Pour rcapituler, vous avez :
branch un Arduino votre ordinateur ;

dmarr le logiciel Arduino ;

spcifi la carte et le port srie ;

charg le code source du croquis Blink depuis un sous-dossier de


Examples ;

tlvers le programme excutable dans la carte.

Analysons ligne aprs ligne le code source de ce premier croquis.

Examiner le croquis Blink


Dans cette section, je vous prsente le croquis Blink plus en dtail pour que vous
puissiez comprendre ce qui se droule. Lorsque le logiciel Arduino lit un croquis, il
lexcute trs rapidement ligne aprs ligne, dans lordre. La meilleure manire de
comprendre le code est de le passer en revue de la mme manire, mais trs
lentement.
Arduino utilise le langage de programmation C, lun des langages les plus utiliss de
tous les temps. Cest un langage extrmement puissant et versatile, mais il faut quelque
temps pour sy faire.
Si vous avez suivi les sections prcdentes, le croquis Blink devrait toujours tre
affich. Si ce nest pas le cas, vous pouvez le recharger en slectionnant Fichier-
>Exemples->01.Basics->Blink (voir Figure 4-1).
Une fois le croquis ouvert, vous devriez visualiser quelque chose de cet ordre :

/*
Blink
Active la LED durant une seconde, puis lteint
durant
une seconde, et ainsi de suite.
Cet exemple est dans le domaine public.
*/

// La LED est connecte la broche 13 sur la


plupart des
cartes Arduino.

// Donnons-lui un nom:
int led = 13;

// La routine setup est excute quand vous pressez


le
bouton reset:
void setup() {
// Faire de la broche numrique une sortie.
pinMode(led, OUTPUT);
}

// La routine loop se rpte linfini:


void loop() {
digitalWrite(led, HIGH); // Allumer la LED
(HIGH,
tension haute)
delay(1000); // Attendre une
seconde
digitalWrite(led, LOW); // teindre la LED
(LOW,
tension nulle)
delay(1000); // Attendre une
seconde
}

Ce croquis est compos de lignes de code. Lorsque vous considrez le code de loin,
vous pouvez identifier plusieurs sections :
des commentaires ;

une dclaration de donne ;

une fonction setup() ;

une fonction loop().

Lisez la suite pour en savoir plus sur chacune de ces sections.

Les commentaires
Voici quoi ressemble la premire section de code :

/*
Blink
Active la LED durant une seconde, puis lteint
durant
une seconde, et ainsi de suite.
Cet exemple est dans le domaine public.
*/

Un commentaire multilignes
Notez comment les lignes de code sont comprises entre les symboles /* et */. Ces
symboles dlimitent le dbut et la fin dun commentaire sur plusieurs lignes, ou bloc
de commentaires. Les commentaires sont crits en langage naturel (ici, en anglais), et
fournissent des informations sur le code, comme leur nom lindique. Ils sont
royalement ignors par le logiciel lorsque le croquis est compil et tlvers. En
consquence, les commentaires peuvent contenir nimporte quelle information utile
la comprhension du code sans interfrer avec le fonctionnement de ce dernier.
Dans cet exemple, le commentaire vous indique le nom du croquis, ce quil fait
(allumer la LED durant une seconde, lteindre une seconde, et rpter), et contient
aussi une note expliquant que le code est dans le domaine public. Les commentaires
comprennent souvent dautres dtails tels que le nom de lauteur ou de lditeur, la
date laquelle le code a t crit ou modifi, une brve description de ce que fait le
code, lURL du projet, et ventuellement les coordonnes de lauteur pour le
contacter.

Un commentaire sur une seule ligne


Plus bas dans le croquis, lintrieur des fonctions setup et loop, vous trouvez du
texte apparaissant lcran en gris comme les commentaires prcdents. Ce texte est
aussi un commentaire. Les symboles // signifient quil sagit dun commentaire sur
une seule ligne et non sur plusieurs. Tout ce qui est crit aprs ces symboles est
ignor, jusqu la fin de la ligne. Dans le cas prsent, le commentaire dcrit le code
qui vient aprs :

// La LED est connecte la broche 13 sur la


plupart des
cartes Arduino.
// Donnons-lui un nom:
int led = 13;

Ce qui suit le commentaire correspond la section des dclarations du croquis.


Mais quest-ce quune dclaration , direz-vous ? Continuez votre lecture pour en
savoir plus.

Les dclarations
Les dclarations sont des valeurs qui sont conserves pour tre utilises plus loin
dans le programme. Dans le cas prsent, une seule variable est dclare, mais vous
pourriez dclarer bien dautres variables, voire inclure des bibliothques de code
dans votre croquis. Pour lheure, il est simplement important de savoir que les
variables peuvent tre dclares avant la fonction setup.

Les variables
Une variable est un nom qui symbolise une adresse numrique dans la mmoire du
processeur. Cette adresse correspond un contenu qui est une valeur. Ce contenu peut
varier selon la manire dont le programme les utilise. En C, vous pouvez dclarer le
type, le nom et la valeur de la variable avant le corps du code, un peu comme vous
feriez linventaire pralable des ingrdients dune recette.

int led = 13;

La premire partie dclare le type de la variable, crant ici un entier (int, pour
integer). Un entier est un nombre entier quelconque, positif ou ngatif, si bien
quaucune dcimale nest requise. Le processeur de lArduino Uno offre deux octets
de largeur pour les entiers simples, soit les valeurs entre -32678 et +32768. Au-del
ou en-de, vous devez utiliser un autre type de variable, quon nomme long (vous
en apprendrez plus ce sujet dans le Chapitre 11). Pour linstant, un int fera
largement laffaire. Le nom de la variable est led, mais cest juste pour y faire
rfrence ; vous pourriez la nommer comme vous le souhaitez, en utilisant un nom
significatif pour vous rappeler quoi sert la variable. Enfin, la variable se voit
affecter la valeur 13. Cest ici le numro de la broche de sortie qui sera utilise.
Les variables sont indispensables lorsque vous vous rfrez une valeur de manire
rpte. Dans cet exemple, la variable est nomme led, car elle fait rfrence la
broche laquelle la LED est connecte. Chaque fois que vous souhaiterez vous
rfrer la broche 13, vous pourrez dsormais utiliser le mot led. Cette approche
peut vous sembler gnrer plus de travail au premier abord, mais si vous voulez plus
tard utiliser la broche 11, vous nauriez ainsi qu changer la valeur affecte la
variable led une fois dans le code ; toutes les rfrences led qui suivent en
tiendront compte automatiquement. Vous gagnerez donc normment de temps, puisque
vous naurez pas passer en revue le code pour remplacer par 11 toutes les
occurrences de 13.

La dclaration ayant t effectue, le code entre dans la fonction setup().

Les fonctions
Les deux sections qui suivent sont des fonctions qui commencent par le mot-cl void
: void setup et void loop. Une fonction est un bloc de plusieurs lignes de
code qui effectue une tche, laquelle est souvent rptitive. Plutt que dcrire le
mme code encore et encore, vous dfinissez une fonction que vous pouvez ensuite
appeler autant de fois que ncessaire.
Rappelez-vous comment vous procdez pour monter un meuble IKEA. Si vous
souhaitez crire les instructions suivre sous forme de code laide dune fonction,
elle ressemblerait ceci :

void monterUnMeuble() {
acheter le meuble;
dballer le meuble;
lire les instructions;
assembler les morceaux;
contempler votre travail;
jurer quon ne vous y reprendra plus;
}

La prochaine fois que vous souhaiterez suivre ces instructions, plutt que de les crire
de nouveau une une, vous pourrez simplement appeler la procdure nomme
monterUnMeuble().
Il existe une convention de nommage pour les variables et fonctions lorsque le nom est
compos de plusieurs mots. Comme vous ne pouvez pas utiliser despace, vous devez
trouver un moyen pour indiquer o commence et o se termine un mot dans le nom ;
autrement, il serait pnible lire. Une convention consiste mettre en majuscule la
premire lettre de chaque mot, commencer par le second, ce que lon appelle
lcriture DromaDaire. Cela amliore la lisibilit de votre code lorsque vous devez
le passer en revue. Je vous recommande donc de respecter cette rgle dans tous vos
croquis pour votre plus grand bnfice et pour celui de ceux qui liront votre code !
Le mot void est utilis quand la fonction ne retourne aucune valeur, et le mot qui suit
est le nom de la fonction en question. Dans certains cas, vous pourriez souhaiter que
la fonction soit alimente par une valeur et quelle en retourne une, un peu comme
vous saisissez les nombres additionner sur une calculatrice qui affiche la somme.
Les deux dclaration de fonctions void setup et void loop doivent figurer
dans tout croquis Arduino ; cest le minimum requis pour un tlversement. Vous
pouvez ensuite ajouter vos propres fonctions pour accomplir des tches spcifiques.
Pour linstant, retenez quil faut faire figurer void setup et void loop dans
tout croquis Arduino que vous crez. Sans ces fonctions, le croquis ne se compilera
pas.

setup
setup est la premire fonction qui sera excute par lArduino. Son objet est de
configurer lArduino, en assignant des valeurs et des proprits la carte qui ne
changeront pas pendant le fonctionnement. La fonction setup ressemble ceci :

// La routine setup est excute quand vous pressez


le
bouton reset:
void setup() {
// Faire de la broche numrique led une sortie.
pinMode(led, OUTPUT);
}

Notez lcran que le texte void setup est en orange. Cette couleur indique que
le logiciel Arduino la reconnat comme une fonction interne, linverse dune
fonction que vous auriez crite vous-mme. Si vous modifiez la casse des mots en
crivant par exemple Void Setup, vous verrez quils sont raffichs en noir, parce
quils ne sont plus reconnus comme tels. Cest la preuve que le langage de lArduino
distingue les majuscules des minuscules (il est sensible la casse). Cest un point
dont il faut se rappeler, surtout tard la nuit, quand votre code sobstine ne pas
fonctionner.
Le corps de la fonction setup se trouve entre les deux accolades { et }. Chaque
fonction doit comporter cette paire daccolades. Si vous avez trop ou trop peu
daccolades, le code ne compilera pas, et vous recevrez un message derreur qui
ressemble celui de la Figure 4-10 (regardez en bas).

pinMode()
La fonction pinMode() configure une broche particulire en sortie ou en entre :
soit pour mettre, soit pour recevoir des donnes. La fonction prend deux paramtres
dentre :
pin : le numro de la broche que vous souhaitez modifier ;

mode : soit INPUT, soit OUTPUT.

Dans le croquis Blink, aprs la ligne de commentaires, vous arrivez cette


instruction :

pinMode(led, OUTPUT);
FIGURE 4-10 Le logiciel Arduino vous dit que vous avez oubli une accolade.

Le mot pinMode est en orange. Comme mentionn prcdemment, lorange indique


quArduino reconnat ici une fonction interne. OUTPUT est aussi color en bleu, ce
qui permet de lidentifier comme une constante, cest--dire une variable prdfinie
par le langage Arduino. Dans notre cas, la constante indique le mode de la broche.
Vous en apprendrez plus au sujet des constantes au chapitre 7.
Cest tout ce que vous devez savoir pour setup. Voyons la fonction loop().

loop()
La fonction loop() est affiche en orange, car Arduino reconnat l une de ses
fonctions internes. Cest une fonction, mais au lieu de ntre excute quune fois
comme setup(), elle est excute encore et encore jusqu ce que vous pressiez le
bouton Reset sur la carte Arduino ou que vous coupiez le courant. Voici le corps de la
fonction :

void loop() {
digitalWrite(led, HIGH); // Allumer la LED
delay(1000); // Attendre une
seconde
digitalWrite(led, LOW); // teindre la LED
delay(1000); // Attendre une
seconde
}

digitalWrite()
Dans la fonction loop(), vous trouvez de nouveau des accolades et deux fonctions
en orange : digitalWrite() et delay().
La premire est digitalWrite() :

digitalWrite(led, HIGH); // Allumer la LED

Le commentaire indique Allumer la LED... , mais quest-ce que cela signifie


exactement ? La fonction digitalWrite() dfinit un tat lectrique sur la
broche. Comme mentionn au chapitre 2, les broches numriques nont que deux
tats : haut (HIGH) ou bas (LOW), ce qui correspond au niveau de la tension qui leur
est applique en rfrence la tension dans la carte.
Un Arduino Uno a besoin dune tension de 12 V, fournie par une source USB ou une
alimentation externe, que la carte Arduino rduit 5 V pour ses sorties numriques.
Cela signifie que la valeur HIGH est quivalente une tension de 5 V, et que la
valeur LOW est quivalente une tension de 0 V.
La fonction attend deux paramtres pour dmarrer :
pin : le numro de la broche faire varier ;

value : une des deux valeurs binaires possibles, soit HIGH, soit
LOW.

En consquence, digitalWrite(led, HIGH) signifie envoyer 5 V sur la


broche 13 de lArduino , ce qui allume la LED. Autrement dit, crire une valeur
binaire 1 sur la broche numrique 13 .
delay()
En poursuivant la lecture dans la boucle loop(), vous trouvez cette ligne :

delay(1000); // Attendre une seconde

Cette fonction arrte le programme durant un certain temps, indiqu en millisecondes.


Dans ce cas, la valeur est de 1000 millisecondes, ce qui correspond donc une
seconde. Durant cet intervalle, rien ne se passe. Votre Arduino attend seulement
lexpiration du dlai.
La ligne suivante dans le croquis est un second appel la fonction
digitalWrite(), qui force LOW la broche de sortie :

digitalWrite(led, LOW); // teindre la LED

Cela indique lArduino quil doit appliquer une tension de 0 V la broche 13, ce
qui teint la LED. La ligne est suivie dune autre occurrence de delay() pour
suspendre de nouveau le programme durant une seconde :

delay(1000); // Attendre une seconde

Aprs cette instruction, le programme revient au dbut de la boucle et la squence se


rpte, linfini.
Ainsi, la boucle est la suivante :
Envoyer 5 V sur la broche 13, allumant la LED.

Attendre une seconde.

Envoyer 0 V sur la broche 13, teignant la LED.

Attendre une seconde.

Comme vous le voyez, cela fait clignoter la LED !

Faire clignoter plus vivement


Jai mentionn la broche 13 plusieurs fois dans ce chapitre. Pourquoi cette broche
fait-elle clignoter la LED sur la carte Arduino ? La LED libelle L est connecte au
mme circuit que la broche 13. Sur les premires cartes, il tait ncessaire dajouter
une LED. Comme une LED est tellement utile pour dboguer et gnrer un signal, il
sen trouve dsormais une soude demeure sur les cartes.
Mais pour aller plus loin, vous aurez besoin dune LED provenant de votre kit. On
trouve des LED de toutes formes, couleurs, et tailles, mais elle devrait ressembler
celle prsente sur la Figure 4-11.

FIGURE 4-11 Une LED, prte tre utilise.

Jetez un il votre LED, et remarquez quune patte est plus longue que lautre. Placez
la longue (lanode, ou +) sur la broche 13, et la courte (la cathode, ou -) sur la broche
GND (la masse), juste ct. Vous verrez que la LED clignote comme celle qui est
soude, mais plus vivement selon le type de LED que vous utilisez. Insrez la LED
comme sur la Figure 4-12.
La description de la fonction digitalWrite() donne dans la section prcdente
vous permet de savoir que votre Arduino envoie 5 V sur la broche 13 lorsquon
spcifie HIGH. Cest peut-tre une tension trop forte pour la plupart des LED. Fort
heureusement, une autre fonctionnalit de la broche 13 est dintgrer une rsistance de
rappel (pull-down). Elle permet dappliquer une tension supportable votre LED
pour lui garantir une vie longue et heureuse.
FIGURE 4-12 La LED sur la broche 13 de lArduino.

Bidouiller le croquis
Jai pass le croquis en dtail, et jespre que tout cela a fait sens pour vous. Quoi
quil en soit, la meilleure manire de comprendre ce qui se passe, cest
dexprimenter ! Essayez de modifier les dlais pour voir le rsultat que cela produit.
Voici quelques choses que vous pouvez tenter :
Faire clignoter la LED en sorte de gnrer un signal SOS.

Voir quelle frquence vous devez faire clignoter la LED pour


quelle semble tout le temps allume (en jouant sur les dures des
pauses).
II
Plonger dans les projets Arduino

DANS CETTE PARTIE

Prt pour les choses srieuses ? La partie 1 de ce livre constituait


une introduction. Dans cette seconde partie, vous en apprendrez
plus sur les outils de prototypage dont vous avez besoin pour
crer vos projets. Vous plongerez lgrement dans la thorie de
llectronique avant de revenir la pratique de votre carte
Arduino. De l, vous dcouvrirez de nouvelles choses
intressantes sur le potentiel de votre Arduino en ralisant
quelques exemples de base. Il ne vous restera qu penser la
manire dont vous pourriez utiliser Arduino pour raliser vos
propres projets.
Chapitre 5
Les bons outils font le bon ouvrier
DANS CE CHAPITRE
La platine dessai, un canevas pour les circuits

Se doter des bons outils

Devenir un fin limier lectronicien grce un multimtre

D
ans le Chapitre 4, jai prsent une des applications les plus lmentaires
dArduino : faire clignoter une LED. Cette application nutilise que lArduino et
quelques lignes de code dj crites. Quoiquil soit amusant de faire clignoter une
LED, vous pouvez utiliser Arduino pour raliser toutes sortes de choses des
installations interactives, un contrle dappareil mnager, des changes via Internet,
pour ne citer que celles-l.
Dans ce chapitre, vous tendrez vos connaissances en dcouvrant lart du prototypage
et en dcouvrant comment utiliser quelques outils de base pour faire plus avec votre
Arduino. Ces outils vous permettent de raliser des circuits temporaires pour essayer
de nouveaux composants, tester des circuits, et plus gnralement pour crer des
prototypes simples.

Les bons outils pour travailler


Lobjet du prototypage est dexplorer des ides, et cest justement ce pour quoi
Arduino a t conu. La thorie est importante, mais vous apprenez souvent plus vite
et bien mieux en procdant par exprimentation.
Vous disposez dun vaste ventail doutils pour vous aider dans vos exprimentations.
Vous trouverez ici une brve liste de ceux que je recommande. Les platines dessai et
les cavaliers se trouvent dans la plupart des kits ; ils sont essentiels pour raliser les
circuits pour votre projet Arduino. Les pinces bec fin ne sont pas indispensables,
mais hautement recommandes.

La platine dessai
La platine dessai constitue lassise de votre prototype. Cest la base sur laquelle
vous pouvez monter vos circuits. Elle permet dutiliser temporairement des
composants au lieu de devoir les souder pour les tenir en place (il est question du
soudage au Chapitre 10).
La platine dessai est compose dun botier en plastique comportant des lignes et des
colonnes de trous, sous lesquelles courent des rails de cuivre. Ces rails vous
permettent de connecter rapidement et facilement les composants.
On trouve des platines dessai de diffrentes formes et dimensions. La Figure 5-
1 prsente une platine dessai des plus standard. Si vous deviez retirer la coque en
plastique crme, vous verriez des rails en cuivre qui courent le long de chacun des
grands cts de la platine, et dautres rails plus courts dans le sens de la largeur qui
relient les trous de chaque demi-tange (les liaisons sont interrompues au milieu).
Les rails latraux sur la grande longueur sont gnralement utiliss pour fournir la
source dalimentation (PWR) et la masse (GND). Ils sont parfois libelles avec un
symbole positif (+) ou ngatif (-) ou une ligne rouge et noire ou rouge et bleue. Le
rouge correspond toujours au positif (+), tandis que le noir ou le bleu correspond au
ngatif (-).
la base, un rail PWR ou GND est une source de courant ou une masse. Les
circuits ont toujours besoin de courant pour leurs diffrentes fonctions, et il arrive
souvent quun point de branchement ne suffise pas. Lorsque vous devez relier
plusieurs composants la mme source de courant ou la masse, vous les reliez en
diffrents points du rail correspondant en utilisant au besoin des straps, dont il sera
question plus loin. Un rail permet ainsi de dmultiplier les possibilits de connexions.

FIGURE 5-1 Une platine dessai.


Quoique les rails soient libells, vous pouvez les utiliser pour nimporte quel usage.
Toutefois, respecter les conventions permet de vous assurer que dautres personnes
pourront facilement comprendre votre circuit ; je vous conseille donc de le faire.
Sur le reste de la surface de la platine dessai, on trouve de nombreux rails courts
parallles aux petits cts de la platine, spars par une tranche au milieu. La raison
dtre principale de cette tranche est de permettre linsertion de circuits intgrs
(tels que le registre dcalage 74HC595 dcrit au chapitre 15), car la tranche
signifie que les pattes qui se trouvent dun ct ne sont pas connectes celles qui se
trouvent de lautre. Beaucoup dautres composants peuvent aussi tirer parti de cette
tranche, dont les boutons-poussoirs (dont il est question au chapitre 5) et les
photocoupleurs (voir le chapitre bonus).
Lorsque vous placez un strap ou la patte dun composant dans lun des trous, vous
devez sentir une rsistance lenfoncement. Cest leffet du ressort qui maintient le
strap ou la patte en place dans le trou. Il serre assez pour tenir les choses en place
tandis que vous travaillez sur votre projet sur un bureau, mais pas trop, pour que vous
puissiez facilement retirer le strap ou la patte en tirant verticalement avec vos doigts.
Jai vu des gens ranger une platine dessai dans un botier pour finaliser leur projet,
mais ce nest pas conseill. Les composants les plus petits ou les straps les plus
lches peuvent facilement se dconnecter, et ce peut tre particulirement pnible de
reprer ce qui ne fonctionne plus. Si vous travaillez sur un projet et que vous
souhaitez le rvler au grand jour, vous devriez vous mettre au fer souder (la
soudure est traite au chapitre 10) pour crer un circuit dfinitif. Cest ce qui vous
permettra de faire durer vos projets.

Les straps
Les straps (reprsents sur la Figure 5-2) sont essentiels pour utiliser votre platine
dessai. Ce sont des fils isols assez courts qui permettent de relier vos composants
aux ranges de votre platine dessai, dautres composants, et votre Arduino. Un
strap nest pas diffrent dun fil en gnral, mais il est gnralement coup court en
possde en gnral des broches isoles ses extrmits.
Vous pouvez trouver des fils isols nimporte o. Il peut sagir de fils pais utiliss
pour brancher nimporte quel matriel lectromnager, ou des fils bien plus fins,
comme ceux utiliss pour des couteurs. la base, un fil isol est un fil mtallique
conducteur entour dun isolant qui vous protge de llectricit (quoique
avec 5 ou 12 >V, vous ne risquez rien), et qui protge le signal lectrique de toute
interfrence extrieure.
Le fil le plus utilis dans ce livre (et qui vous sera le plus utile dans vos projets
Arduino) pourrait tre class dans la catgorie des fils dquipement isols. Ce type
de fil est gnralement utilis petite chelle pour des applications lectriques
basse tension.
Le fil que vous utilisez est dune de ces deux sortes : monobrin ou multibrin. Un fil
monobrin est conu pour conserver la forme quon lui donne, mais si vous le pliez
trop au mme endroit, il se rompt. Cest pourquoi ce type de fil est utile pour raliser
soigneusement des connexions sur votre platine dessai du moment que vous naurez
pas trop les modifier.

FIGURE 5-2 Une slection de straps.

Un fil multibrin peut avoir le mme diamtre quun monobrin, mais au lieu dtre
compos dun seul fil, il est compos de plusieurs, qui sont trs fins. Ces petits fils
sont torsads, ce qui donne au fil plus de rsistance la courbure quun fil monobrin.
Cette conception est similaire celle des cbles de suspension des ponts. Les fils
multibrins sont particulirement adapts aux connexions quon change souvent, et ils
durent plus longtemps, mais ils doivent tre termins par des broches mles.
Vous pouvez couper les straps vous-mme, mais on en trouve aussi des packs
pratiques de diffrentes couleurs et de diffrentes longueurs. Lune et lautre de ces
solutions ont des avantages et des inconvnients.
Couper les fils vous-mme est significativement meilleur march, car vous pouvez
acheter une grosse bobine de fil. Dun autre ct, si vous souhaitez disposer dune
gamme de couleurs, vous devrez acheter une bobine pour chacune, ce qui peut
savrer un investissement considrable pour votre premier circuit. Les packs ne vous
coteront pas aussi cher au dbut, et vous donneront accs la varit que vous
recherchez. Vous pourrez acheter des grosses bobines lorsque vous serez certain den
avoir le besoin.
Aussi, lorsque vous envisagez de couper les fils, noubliez pas la diffrence de
finition des fils faits maison. Les fils monobrins sont gnralement identiques, que
vous les coupiez vous-mme ou que vous les fassiez couper, mais ils se dtriorent
plus rapidement sils sont courbs. Les fils multibrins durent plus longtemps, mais
lorsquils sont coups sur une bobine, ils peuvent seffilocher aux extrmits comme
au bout dun fil de laine. Vous devez les tripoter souvent en les torsadant entre votre
pouce et votre index entre deux usages pour vous assurer que les petits fils restent
aussi droits et lis que possible.
Les straps multibrins multicolores vendus en packs prsentent lintrt dtre soit
tams pour rigidifier les bouts, soit quips de broches de connexion. Cette
fabrication garantit que lextrmit est aussi rigide quun fil monobrin, tout en
bnficiant de la souplesse du multibrin.
Dans lidal, vous devriez disposer dun pack de straps multibrins multicolores pour
commencer. Ce sont les composants les plus versatiles et les plus durables de votre
kit. Il est bon den avoir toute une varit pour faire face nimporte quelle situation.

Pince bec fin


Une pince bec fin, reprsente sur la Figure 5-3, est comme une pince classique,
mais pointue. Elle est idale pour tenir des composants minuscules. Llectronique
peut savrer un art dlicat, et il est trs facile de dformer les fragiles pattes des
composants lorsquon les enfonce dans une platine dessai. Ces pinces ne sont pas
indispensables, mais elles permettent de faire preuve de plus de finesse et de
prcision en construisant vos circuits.
FIGURE 5-3 La pince bec fin un choix de connaisseur.

Le multimtre
Un multimtre est un instrument pour mesurer des tensions (en volts), des intensits
(en ampres) et des rsistances (en ohms). Il peut vous indiquer les valeurs de
diffrents composants et ce quil se passe en diffrents endroits de votre circuit.
Comme vous ne pouvez pas voir ce qui se passe dans un circuit ou dans un composant,
le multimtre est essentiel pour comprendre son fonctionnement interne. Sans
multimtre, vous devrez vous en remettre au pifomtre, ce qui est toujours une
mauvaise ide en lectronique.
La Figure 5-4 reprsente un multimtre numrique de milieu de gamme. La plupart des
multimtres proposent :
Un affichage numrique : Cest le mme que sur votre rveil
digital. Comme le nombre de chiffres est limit, ceux qui figurent
aprs la dcimale se dplacent en fonction de limportance du
nombre affich. Le nombre est produit par le multimtre en
ajustant automatiquement le calibre (lordre de grandeur de la
mesure maximale effectuer), mais si votre multimtre nest pas
capable dajuster ainsi le calibre, vous devrez lajuster la main en
changeant de plage avec le commutateur rotatif.
FIGURE 5-4 Un bon multimtre numrique peut souvent sauver votre projet.

Une molette de slection du mode et de la plage : Cette molette


vous permet de choisir entre les diffrentes fonctions du
multimtre. Il peut sagir de mesurer une tension, une intensit, une
rsistance, avec plusieurs calibres ou plages de mesure pour
chacune de ces units, comme mesurer une rsistance jusqu cent,
mille, dix mille, cent mille ou un million dohms. Les meilleurs
multimtres disposent aussi dun test de continuit qui vous indique
si vos connexions sont bonnes, cest--dire quand elles nopposent
quune rsistance infime au passage du courant. Cette
fonctionnalit ma vit de passer en revue pendant des heures
toutes les tapes de certains projets, et je recommande donc
dfinitivement dinvestir dans un bon multimtre de milieu de
gamme qui en dispose.

Un jeu de sondes : Ce sont les fils quips de pointes que vous


utilisez pour tester votre circuit. La plupart des multimtres sont
livrs avec deux sondes ressemblant des broches, quon met en
contact avec les points de mesure dsirs. Vous pouvez aussi
trouver des sondes dotes de pinces crocodiles. ventuellement,
vous pouvez acheter ce type de pinces pour les connecter aux
pointes. Elles sont particulirement utiles pour retenir les fils.

Plusieurs prises dentre : Les sondes peuvent tre branches


dans diffrentes prises du multimtre selon lusage. Dans le cas
prsent, ces prises sont libelles A, mA, COM et VHz. La prise
libelle A sert mesurer lintensit de courants importants en
ampres (A), jusqu 20 A. Sachez que la plupart des multimtres ne
peuvent supporter un tel courant que 10 secondes au plus. Dans ce
mode que nous nutiliserons pas une sonde doit tre branche dans
la prise A (la sonde rouge), et lautre dans la prise COM (la sonde
noire). La prise mA (sonde rouge) est pour les courants de moins
de 500 mA. La prise COM (sonde noire) est une abrviation de
Common (commun), et constitue un point de rfrence pour vos
mesures. Dans la plupart des cas, cest la masse de votre circuit, et
on y branche toujours la sonde noire. La prise marque VHz
(sonde rouge) est utilise pour mesurer la tension (en V, pour volts),
la rsistance (en , pour ohms), et la frquence (en Hz, pour hertz)
entre cette prise et la prise COM (sonde noire).

Utiliser le multimtre pour mesurer une


tension, une intensit, une rsistance
Tout arduiniste se doit de matriser certaines techniques de base pour vrifier le bon
fonctionnement de son circuit. Les volts, les ampres et les ohms peuvent en thorie
tre calculs lavance (comme vous lapprendrez au chapitre 6), mais dans le monde
rel, nombre de facteurs peuvent intervenir, que vous ne pouvez anticiper. Si un de
vos composants est dfaillant ou si une connexion oppose une rsistance, vous pouvez
perdre des heures localiser le problme, et cest l o un multimtre devient
essentiel pour le faire vite. Dans cette section, vous apprenez mesurer la tension,
lintensit et la rsistance, ainsi qu vrifier la continuit de vos connexions.

Mesurer la tension (en volts) dans un


circuit
Il est essentiel de savoir mesurer une tension. Ce peut tre pour tester la tension dune
batterie ou indirectement celle du courant parcourant un composant. Si votre projet ne
sillumine pas ou ne vrombit pas, vous avez peut-tre une connexion dbranche ou
bien vous avez envoy trop de courant, carbonisant ce que vous essayiez dalimenter.
Il faut alors tester la tension dans votre circuit et vous assurer quelle est bonne.
Tout dabord, vous devez vrifier que les sondes de votre multimtre sont branches
dans les bonnes prises. Ces prises doivent porter la mention V pour volts en ce qui
concerne la sonde rouge, et COM pour la masse en ce qui concerna la sonde noire.
Ensuite, vous devez configurer votre multimtre pour mesurer un courant continu
(DC), ce qui peut tre reprsent par un signe V suivi de deux traits droits, par
opposition au courant alternatif (AC), qui est reprsent par le signe V suivi dune
vague. Dans mon cas, le multimtre dispose dun bouton pour basculer entre AC et
DC.
La tension est mesure en parallle, ce qui signifie que vous devez vous positionner
de part et dautre de la partie du circuit dont vous souhaitez mesurer la tension aux
bornes. La Figure 5-5 vous montre comment procder. La sonde positive doit toujours
se trouver du ct positif, et la sonde ngative de lautre. Si vous inversez les sondes,
vous nendommagerez pas votre circuit, mais vous lirez une valeur ngative au lieu
dune valeur positive.

FIGURE 5-5 Un multimtre est utilis en parallle pour mesurer une tension.

Une bonne manire de tester voter multimtre est de mesure la tension entre les
broches 5 V et la broche GND de votre Arduino. Vrifiez que lArduino est bien
branch, et connectez un strap sur chaque broche afin de vous y connecter plus
facilement avec les sondes. Placez la sonde rouge sur le strap 5 V et la sonde noire
sur le strap GND. Une valeur de 5 V devrait safficher lcran de votre multimtre,
vous prouvant ainsi que votre Arduino fournitbien une tension de 5 volts, comme
attendu.
Mesurer lintensit (en ampres) dans
un circuit
Vous avez peut-tre la bonne tension, mais vous pourriez ne pas avoir assez de courant
pour alimenter la lumire ou le moteur que vous souhaitez piloter. La meilleure
manire de le savoir, cest de mesurer lintensit consomme et la comparer ce que
peut fournir lalimentation utilise.
Vrifiez que vos sondes sont connectes aux bonnes prises dans le multimtre.
Quelques multimtres proposent deux prises, une pour les courants trs intenses, dont
lintensit est mesure en ampres (A), et une autre pour les courants plus faibles,
dont lintensit est mesure en milliampres (mA). Gnralement, les circuits Arduino
de base nont besoin que de quelques milliampres, mais si vous utilisez des lampes,
des moteurs ou dautres matriels, vous devriez mesurer en ampres. Tournez ensuite
la molette pour slectionner le bon calibre : A, mA, voire A (microampres).
Lintensit se mesure en srie, ce qui signifie que quelque chose doit tre dbranch
pour insrer le multimtre dans la continuit des composants du circuit parcourus par
le courant. Le courant doit passer dans le multimtre comme si ce dernier ntait quun
composant de plus. La Figure 5-6 vous montre comment procder.
Si vous ralisez un circuit semblable celui de la figure sur votre platine dessai,
vous pourrez utiliser deux straps pour couper le circuit en un point, ce qui permettra
de placer votre multimtre entre les deux pour faire la jonction. Cela permettra
dafficher lintensit du courant dans le circuit.
Note : Si vous faites clignoter quelque chose, vous faites sans doute varier
lintensit du courant. Stabilisez le courant pour en mesurer lintensit maximale.

FIGURE 5-6 Un multimtre est utilis en srie pour mesurer une intensit.
Mesurer la rsistance (en ohms) dune
rsistance
Pour lire la valeur dune rsistance, il faut apprendre le code de couleurs. SInon, vous
pouvez la mesurer laide dun multimtre. Rglez le multimtre sur Ohms, ou , et
placez une sonde sur chaque patte de la rsistance non monte dans un circuit, comme
sur la Figure 5-7.

FIGURE 5-7 Mesurer la rsistance dune rsistance.

Mesurer la rsistance (en ohms) dun


potentiomtre
En matire de potentiomtres, mieux vaut sassurer que vous couvrez bien toute la
plage de rsistance annonce. Les potentiomtres sont comme des rsistances
passives, mais ils ont trois pattes. Si vous connectez les sondes sur les pattes
latrales, vous devriez pouvoir mesurer la rsistance maximale du potentiomtre, et
cette mesure ne devrait pas varier, que vous actionniez ou non la molette du
potentiomtre. Si vous placez les sondes sur la patte du centre et une autre des pattes,
vous devriez pouvoir mesurer la valeur variable de la rsistance, laquelle change
quand vous tournez la molette, comme sur la Figure 5-8.
FIGURE 5-8 Trouver la rsistance dun potentiomtre.

Tester la continuit (en bips) de votre


circuit
Si vous disposez dun multimtre de qualit, un symbole figurant un haut-parleur ou un
son devrait figurer sur sa molette. Cest le testeur de continuit. Vous lutilisez pour
vrifier que les parties de votre circuit sont connectes, et le multimtre vous
lindique en mettant un son. Un son continu signifie que la connexion est bonne.
Tournez la molette sur le symbole du test de continuit et faites toucher les extrmits
des deux sondes pour vrifier que le test fonctionne. Si vous entendez un son continu,
la connexion est bonne. Placez les sondes de part et dautre de la connexion tester,
comme sur la Figure 5-9.
FIGURE 5-9 Vrifier la continuit dun circuit.
Chapitre 6
Une initiation llectricit et la
circuiterie
DANS CE CHAPITRE
Matriser llectricit

Voir ou revoir quelques quations utiles

Vous y retrouver dans les schmas de circuits

Apprendre le code de couleurs des rsistances

D
ans ce chapitre, je vous propose de vous initier aux fondamentaux de llectricit.
Dans les chapitres suivants, vous devrez rentrerer dans les dtails de
llectronique ; il est donc important que vous disposiez dune connaissance de
base du comportement de llectricit dans votre circuit.

Ce qui est formidable avec Arduino, cest que vous navez pas besoin dtudier
llectronique durant des annes avant de lutiliser. Ceci tant, mieux vaut connatre
un peu de thorie pour assurer votre pratique. Dans ce chapitre, vous allez dcouvrir
quelques quations pour vous aider raliser un circuit quilibr et efficient ; vous
verrez aussi comment lire les schmas de circuits qui vous guident pour raliser votre
circuit et apprendrez le code de couleurs des rsistances.

Comprendre llectricit
Llectricit est lune des choses que les gens considrent comme allant de soi, mais
quils ont bien du mal dfinir. Pour le dire simplement, llectricit est une forme
dnergie rsultant de lexistence de particules charges (des lectrons), considres
soit statiquement sous la forme de charges, soit dynamiquement sous la forme dun
flux de charge, donc un courant.
Cette dfinition de llectricit se situe au niveau atomique, ce qui est bien plus
complexe que ce dont vous avez besoin pour crer la circuiterie de vos projets
Arduino. Il vous suffira de savoir que llectricit est de lnergie, et quelle se
manifeste sous forme dun courant qui circule entre un ple plus et un ple moins.
Pour illustrer lide du flux quest le courant, observons de plus prs un simple circuit
dot dun interrupteur pour allumer une lumire (Figure 6-1). Ce circuit est semblable
ceux que vous avez sans doute pu raliser lors des cours de physique ou
dlectronique lcole sans utiliser Arduino, avec seulement une batterie, un
interrupteur, une rsistance et une ampoule.

FIGURE 6-1 Un circuit de base pour contrler une lampe.

Dans ce circuit, on trouve une source dalimentation lectrique sous la forme dune
batterie. Sa puissance est exprime en watts, faite de tension (en volts) et dintensit
(en ampres). La tension et lintensit sont gnres par la borne positive (+) de la
batterie.
Vous pouvez utiliser un interrupteur pour contrler le courant dans le circuit.
Linterrupteur peut tre soit ouvert, ce qui coupe le circuit et arrte la circulation du
courant, soit ferm, ce qui ferme le circuit et lui permet de fonctionner.
Le courant peut tre utilis pour diverses applications. Dans le cas prsent, le circuit
alimente une LED. La batterie alimente la LED avec 4,5 V, ce qui est plus quune LED
a besoin pour gnrer de la lumire. Si la LED devait tre alimente par une tension
aussi leve, vous risqueriez de lendommager. Pour cette raison, vous avez besoin
dune rsistance afin quelle rsiste et rduise la tension. Inversement, si la
tension est trop faible, la LED ne brillera pas autant quelle le peut.
Pour circuler, le courant doit pouvoir rejoindre la masse sur la borne ngative (-) de
la batterie. La LED tire autant de courant que ncessaire pour briller autant quelle
peut.
En tirant du courant, la LED rsiste aussi son flux, sassurant que seul le courant
dont elle a besoin lui parvient. Si la borne positive est directement connecte la
borne ngative, toute lnergie stocke dans la pile sera exploite pour crer le plus
fort courant possible. Cest ce quon appelle un court-cicuit. La pile peut rapidement
exploser par surchauffe.
Les principes de base que vous devez matriser sont que :
Un circuit lectrique est, comme son nom le suggre, un systme
circulant, comme une tuyauterie deau.

Le circuit exploite le courant fourni par une alimentation dans une


boucle ferme.

Si le circuit ne consomme pas le courant, ce courant nest plus


frein et va endommager le circuit et la source.

La manire la plus basique dinteragir avec un circuit consiste


louvrir. En contrlant quand et o le courant circule, vous contrlez
tous ses usages dans le circuit.

Des quations pour crer vos circuits


Vous connaissez maintenant les caractristiques de llectricit :
La tension en volts (V ou U), comme 12 V.

Lintensit en ampres (I), comme 3 A.

La puissance en watts (P), comme 36 W.

La rsistance en ohms (R), comme 150 .

Ces caractristiques peuvent tre quantifies et mises en quation, ce qui vous permet
dquilibrer vos circuits afin de vous assurer que tout y fonctionnera comme prvu. Il
existe bien des quations pour dterminer toutes sortes de caractristiques dans un
circuit. Dans cette section, je vais traiter des deux quations les plus lmentaires qui
vous seront les plus utiles lorsque vous travaillerez avec un Arduino : la loi dOhm et
la loi de Joule.

La loi dOhm
La relation la plus importante matriser relie la tension, lintensit et la rsistance.
En 1827, Georg Simon Ohm a dcouvert que la tension et lintensit taient
directement proportionnelles si on appliquait une quation des plus simples
(souvenez-vous que I correspond des ampres) :
V=IxR
Cette quation est connue sous le nom loi dOhm. Il est possible de reformuler
lquation pour obtenir la valeur recherche partir des deux autres :
I=V/R
ou
R=V/I
Vous pouvez voir cette quation luvre dans un circuit. La Figure 6-2 vous montre
un circuit des plus simples comprenant une alimentation et une rsistance.

FIGURE 6-2 Une alimentation et une rsistance.

Dans de nombreux cas, vous connatrez la tension de votre alimentation et la valeur de


la rsistance, si bien que vous pourrez trouver lintensit du courant qui va circuler :
I = V / R = 4,5 V / 150 = 0,03 A
Cette quation fonctionne avec toutes les combinaisons de valeurs dont vous
disposez :
R = V / I = 4,5 V / 0,03 A = 150
V = I x R = 0,03 A x 150 = 4,5 V
Le moyen le plus simple de se souvenir de la loi dOhm est une pyramide (voir
Figure 6-3). En masquant mentalement un des trois lments de la pyramide, vous
retrouvez lquation.

FIGURE 6-3 La pyramide de la loi dOhm.


Je vous entends crier : Mais quoi ce calcul va me servir pour utiliser mon
Arduino ? . Voyons un exemple concret dune situation que vous pourriez rencontrer
avec un circuit Arduino.
Les broches numriques dun Arduino peuvent fournir jusqu 5 V, et cest donc la
tension la plus commune que vous utiliserez. Une LED constitue lune des sorties les
plus lmentaires que vous souhaiterez contrler, et une LED standard ncessite une
tension de 2 V et une intensit de 30 milliampres, ou 30 mA (0,03 A).
Si vous branchez la LED directement sur lalimentation, vous verrez la LED briller
intensment avant quun nuage de fume et une odeur de brl ne se dgagent. Voil ce
que vous souhaiterez viter ! Pour vous assurer que vous pouvez utiliser la LED
encore et encore sans lendommager, vous devriez ajouter une rsistance afin de faire
chuter la tension aux bornes de la LED, autrement dit de contrler la diffrence de
potentiel.
La loi dOhm vous indique que :
R=V/I
Mais vous devez utiliser deux tensions diffrentes : celle de lalimentation (la tension
dalimentation) et celle requise par la LED (la tension directe). La tension directe est
un terme quon rencontre souvent dans les fiches techniques, surtout lorsquil est fait
rfrence aux diodes. Elle indique la tension recommande que le composant peut
tolrer dans le sens o le courant est prsum scouler. Pour une LED, cette direction
est de lanode vers la cathode, lanode tant connecte au positif et la cathode, au
ngatif. Les diodes qui ne sont pas lectroluminescentes (dont il est question au
chapitre 8) sont utilises pour rsister au flux du courant dans la direction inverse, de
la cathode vers lanode. Dans ce cas, le terme que vous devrez rechercher sur la fiche
technique est tension inverse, qui indique la valeur en volts de la tension au del de
laquelle le courant va malgr tout scouler travers la diode.
Dans notre cas, les tensions sont dsignes par VALIM ENTATION et VDIRECTE,
respectivement. Lquation de la loi dOhm a besoin de la tension aux bornes de la
rsistance (la tension du courant qui passe par la rsistance), qui est gale la tension
de lalimentation diminue de la tension directe de la LED, soit :
VALIM ENTATION- VDIRECTE
La nouvelle quation ressemble ceci :
R = (VALIM ENTATION - VDIRECTE) / I = (5 V 2 V) / 0,03 A = 100 Ce qui vous indique
que vous avez besoin dune rsistance de 100 pour alimenter la LED en toute
scurit ; le circuit exemple est reprsent sur la Figure 6-4.
FIGURE 6-4 Appliquer la loi dOhm un circuit Arduino.

Calculer la puissance
Pour calculer la consommation dnergie de votre circuit en watts, vous devez
multiplier la tension par lintensit du circuit. Lquation est :
P=VxI
Si vous appliquez cette quation au mme circuit que celui utilis dans La loi
dOhm , plus tt dans ce chapitre, vous pouvez calculer la puissance :
P = (VALIMENTATION - VDIRECTE) x I = (5 V 2 V) x 0,03 A = 0,09 W
Comme la loi dOhm, cette formule peut tre reconfigure pour trouver la valeur
manquante partir des deux dont vous disposez :
V=P/I
I=P/V
Cette formule est utile car certains matriels, tels que les lampes incandescence, ne
mentionnent que la puissance et la tension, ce que vous laisse deviner lintensit du
courant consomm. Cest particulirement utile si vous essayez dalimenter des
matriels gros consommateurs de courant, tels que des illuminations ou des moteurs,
via les broches de votre Arduino. Un Arduino aliment par USB est capable de
fournir au maximum de lordre de 500 mA, mais seulement 40 mA par broche
et 200 mA au total pour toutes les broches de sortie, ce qui est trs peu (pour plus
dinformations, voyez la page
http://playground.arduino.cc/Main/ArduinoPinCurrentLimitation
Cest un calcul trs simple, mais vous pouvez le combiner votre connaissance de la
loi dOhm pour trouver les inconnues dans nombre de circuits diffrents.

La loi de Joule
Un autre personnage qui a donn son nom une quation est James Prescott Joule.
Quoiquil ne soit pas aussi connu quOhm, il a dcouvert une relation mathmatique
similaire et peut-tre complmentaire entre la puissance, lintensit et la rsistance
dans un circuit.
La loi de Joule scrit ainsi :
P = I2R
Le meilleur moyen pour la comprendre est de voir comment on y arrive.
Si V = I x R (loi dOhm) et que P = I x R (quation de la puissance), alors :
P = I x (I x R)
Ce qui peut aussi scrire :
P = I2 x R
Si vous lappliquez au mme circuit que prcdemment, vous pouvez dcouvrir la
puissance consomme par ce dernier :
P = I2 x R = (0,03 A x 0,03 A) x 100 = 0,09 W
Comme vous pouvez le constater, cela recoupe nos calculs prcdents. Ainsi, nous
pouvons calculer la puissance en ne connaissant que lintensit et la rsistance, ou
toute autre combinaison des autres valeurs.
I = P / (I x R)
R = P / I2
Nous pouvons aussi faire le mme calcul dans les cas o nous ne connaissons que la
tension et la rsistance.
Si I = V / R (loi dOhm) et P = I / V (quation de la puissance), alors P = (V / R) * V
Ce qui peut aussi scrire :
P = V2 / R
Essayez sur le mme circuit pour vrifier le rsultat :
P = V2 / R = ((5 V - 2 V) * (5 V - 2 V)) / 100 = 0,09 W
Vous pouvez reconfigurer lquation pour tenir compte des valeurs dont vous
disposez :
V = P / (V * R)
R = V2 / P
Nombre darduinistes, dont moi-mme, sont plus pratiques que thoriques, et tentent
de raliser un circuit en se basant sur les exemples et la documentation avant de se
livrer des calculs. Cest trs bien, totalement dans lesprit Arduino ! Dans la plupart
des cas, votre circuit fonctionnera comme vous lesprez, mais il est toujours bon de
connatre les quations lorsque vous en avez besoin. Vous pouvez ainsi trouver les
valeurs qui manquent dans la plupart des circuits pour vous assurer que tout est en
ordre. Nhsitez donc pas vous rfrer par la suite cette section.

Travailler avec des schmas de circuits


Rcrer des circuits partir de photos et dillustrations peut savrer dlicat, et cest
pourquoi des symboles standard sont utiliss pour reprsenter lventail des
composants et des connexions que vous pouvez y rencontrer. Ces schmas de circuits
sont comme les cartes du mtro : ils vous montrent toutes les connexions clairement,
mais ils sont loigns de la manire dont les choses se prsentent dans la ralit. Les
sections suivantes explorent un peu les schmas de circuits.

Un simple schma de circuit


Cette section examine un simple circuit gnrant de la lumire (reprsent sur la
Figure 6-5), compos de quatre composants : une batterie, un bouton-poussoir, une
rsistance et une LED.

FIGURE 6-5 Le schma dun simple circuit gnrant de la lumire.


Le Tableau 6-1 prsente le symbole correspondant chacun des composants.
La Figure 6-6 reprsente le circuit ralis sur une platine dessai. La premire chose
que vous pouvez remarquer, cest que cet exemple ne fait apparatre aucune batterie.
Comme votre Arduino dispose de broches 5 V et GND, elles jouent le rle des bornes
positive (+) et ngative (-) de la batterie et vous permettent datteindre le mme
rsultat. La seconde chose que vous pourriez remarquer, cest que le circuit bien rel
utilise un bouton-poussoir, qui nest donc pas techniquement un interrupteur. Cest
plus pratique, sachant que les boutons-poussoirs fournis dans la plupart des kits
Arduino peuvent facilement tre remplacs par des interrupteurs, si vous le souhaitez.

TABLEAU 6-1 Les symboles lmentaires.

Nom Symbole

Batterie

Bouton-poussoir

Rsistance

LED
FIGURE 6-6 Un exemple de circuit gnrant de la lumire ralis sur une platine dessai.

Je pense que le meilleur moyen est de comparer un schma du circuit au circuit rel en
suivant les connexions du positif au ngatif.
Si vous partez de la broche positive (+ ou 5V) de votre Arduino, vous dbouchez sur
le bouton-poussoir. Ce bouton-poussoir comprend quatre pattes, alors que le symbole
nen reprsente que deux. Les pattes du bouton-poussoir sont doubles de telle
manire que deux sont connectes dun ct, et les deux autres, de lautre ct. Pour
cette raison, il est important de bien orienter le bouton-poussoir. Les pattes du bouton-
poussoir rel sont ainsi conues pour permettre de multiples usages, mais sur le
schma, on ne voit quun interrupteur dot dune entre et dune sortie.
Lautre ct du bouton-poussoir est reli la rsistance. Le symbole de la rsistance
sur le diagramme nest pas aussi bulbeux que celui de la rsistance relle, mais le
symbole et la rsistance relle correspondent plutt bien autrement ; on trouve un fil
qui entre et un fil qui sort. La valeur de la rsistance est crite le long du symbole,
alors quelle est code laide danneaux de couleurs sur la rsistance relle. Une
rsistance na pas de polarit (pas de positif ou de ngatif). Elle fonctionne dans les
deux sens.
linverse, la LED a une polarit. Si vous la connectez lenvers, elle ne sallumera
pas. Sur le schma du circuit, le symbole qui donne la polarit est une flche pointant
dans la direction du flux du courant scoulant du + (lanode) vers le - (la cathode), et
une ligne horizontale figure une barrire dans lautre direction. Sur la LED relle, la
patte la plus longue est lanode, et la patte se trouvant du ct plat de la LED, plus
courte, est la cathode (pour vous y retrouver si jamais les pattes sont coupes la
mme taille).

FIGURE 6-7 La longueur de la patte ou la face plate pour reprer la polarit dune LED.

Le - (cathode) de la LED est connect la broche ngative (-) GND de lArduino,


correspondant la terminaison ngative de la batterie, ce qui complte le circuit.

Utiliser un schma de circuit avec un


Arduino
Une autre manire de reprsenter un circuit est le schma (voir Figure 6-8).
Ce circuit comprend plus de composants que celui dcrit dans la section prcdente.
Le gros module qui ressemble un mille-pattes est le circuit Arduino. Cest le
symbole standard dun circuit intgr, il ressemble son incarnation relle un
rectangle do sortent de nombreuses pattes. Toutes les pattes ou broches sont
libelles pour que vous puissiez les distinguer.
Une bonne pratique adopter lorsque vous avez un circuit compliqu : plutt que de
le raliser en une seule fois, attaquez-le par morceaux. Le circuit a une entre et une
sortie. Je le dcris plus en dtail dans le Chapitre 7.
FIGURE 6-8 Un circuit gnrant de la lumire avec un Arduino.

Les conventions de couleurs


Les conventions de couleurs forment une technique importante en lectronique, et il
devient encore plus important dy recourir quand vous progressez en ralisant des
circuits plus complexes. Cbler des circuits correctement est dj assez difficile, mais
se perdre dans un tas de fils de la mme couleur rend la tche presque insurmontable.
Vous savez sans doute dj cela, mme si vous navez jamais fait dlectronique. Par
exemple, les feux de signalisation utilisent des couleurs pour indiquer clairement aux
conducteurs ce quils doivent faire :
Vert signifie quils peuvent avancer.

Orange signifie quil leur faut ralentir.

Rouge signifie quils doivent sarrter.

Un code couleur est un moyen facile et visuel pour faire passer un message sans avoir
utiliser beaucoup de mots.
Toutes sortes dapplications lectriques, telles que les installations lectriques des
domiciles, utilisent un code couleur. Comme ces prises prsentent un vrai danger, les
couleurs doivent tre identiques dune prise lautre, selon des standards nationaux.
Cela permet tout lectricien ou bricoleur dtablir les bonnes connexions facilement
et sans danger.
Vous risquez moins de vous faire mal avec le courant continu basse tension en
lectronique, mais vous prenez toujours le risque de dtruire des composants dlicats
de votre circuit. Il nexiste pas de rgles absolues pour organiser votre circuit, mais
voici quelques conventions qui peuvent vous aider et permettre dautres de
comprendre ce que vous faites :
Le rouge est positif (+).

Le noir est ngatif (-).

Diffrentes couleurs sont utilises pour diffrentes broches


vhiculant un signal.

Il en va ainsi sur la plupart des circuits sur platine dessai. Les couleurs de
lalimentation et de la masse peuvent changer ; par exemple, il peut sagir du blanc (-
), du noir (-) ou du brun (+) et du bleu (-), selon les fils que vous avez sous la main.
Du moment que vous utilisez un code couleur et quil est cohrent, vous devriez
pouvoir plus facilement construire, comprendre et rparer vos circuits.
Jai rpar beaucoup de circuits qui ne fonctionnaient plus du seul fait que les fils
ntaient pas branchs aux bons endroits.
Si la couleur dun fil soulve un doute, mieux vaut vrifier la connexion (en utilisant
le test de continuit de votre multimtre) ou la tension (en utilisant le mode voltmtre
de votre multimtre) pour vous assurer que tout fonctionne comme prvu.

Les fiches techniques


Reprsentez-vous la scne. Votre ami a appris que vous vous y connaissez un peu en
lectronique, et vous demande de jeter un il sur un schma trouv sur Internet, mais
qui ne fonctionne pas. Il utilise plusieurs circuits intgrs dont le fonctionnement vous
est inconnu. Que faire ? La rponse : chercher sur le Web !
Il existe des millions de composants diffrents. Linformation dont vous avez besoin
pour comprendre ce quils font se prsente gnralement sous la forme de fiches
techniques. Chaque composant possde une fiche technique rdige par le fabricant.
Elle dcrit tous les dtails du composant et souvent vous en donne plus que
ncessaire.
Le moyen le plus facile pour trouver une fiche technique, cest Internet. Pour trouver
la bonne, vous devez en savoir autant que possible sur le composant. Linformation la
plus importante pour conduire votre recherche est la rfrence du composant, indique
sur le botier. La Figure 6-9 vous montre o lire celle dun transistor.
Si vous saisissez cette rfrence dans un moteur de recherche en ajoutant la mention
fiche technique, vous devriez tomber sur un grand nombre de fichiers PDF fournissant
des dtails sur ce composant. Si vous ne pouvez trouver la bonne, adressez-vous au
magasin o vous avez achet le composant.

FIGURE 6-9 La rfrence imprime sur un transistor.

Les codes couleur des rsistances


Les rsistances sont trs importantes dans les projets Arduino, et vous aurez besoin de
nombreuses valeurs diffrentes pour crer vos circuits. Elles peuvent aussi tre tout
fait minuscules, ce qui signifie que contrairement au transistor reprsent sur la
Figure 6-9, il est impossible dcrire la valeur de la rsistance sur le corps. Pour
cette raison, il existe un systme de codes couleur qui indique la valeur de la
rsistance. Si vous en regardez une de plus prs, vous remarquez des anneaux de
couleur tout autour (voir Figure 6-10). Ils indiquent dans lordre le premier chiffre, le
second chiffre, le nombre de zros de la valeur en ohms de la rsistance et enfin la
tolrance.
FIGURE 6-10 Les anneaux de couleur dune rsistance.

Le Tableau 6-2 dresse linventaire des valeurs en ohms auxquelles les couleurs
correspondent en fonction de la bande.
Maintenant que vous connaissez la valeur de chaque bande, il vous reste savoir
lordre dans lequel les lire. On trouve gnralement un espace identique entre les trois
premires bandes, et un espace plus large les sparant de la quatrime bande de
tolrance.

TABLEAU 6.2 Les codes couleur dune rsistance.

Couleur Valeur Multiplicateur Tolrance

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 %

Par exemple, voici quelques valeurs que vous pourriez trouver dans votre kit :
Orange, Orange, Marron, Or = 3, puis 3, puis un zro = 330 ohms
avec une tolrance de 5 %

Rouge, Rouge, Rouge, Or = 2, puis 2 puis deux zros =

2200 ou 2,2 k avec une tolrance de 5 %

Marron, Noir, Orange, Argent = 1, puis 0, puis trois zros =

10000 ou 10 k avec une tolrance de 10 %

Il peut tre difficile de lire les couleurs, et parfois mme de savoir par o commencer
et o terminer la lecture. Dans la plupart des cas, il est donc recommand dutiliser un
multimtre pour vrifier la valeur de votre rsistance. Vous devriez trouver un
symbole ohm () sur la mollette de votre multimtre afin de pouvoir procder
lopration.
Les rsistances de mme valeur sont souvent livres colles sur deux bandes de
papier qui les maintiennent comme pour former une chelle. Ces bandes servent
alimenter automatiquement les machines qui implantent les composants sur les circuits
avant de les souder. Ces bandes de papier peuvent vous servir, puisque vous pouvez
crire la valeur des rsistances dessus. Cela vous fera gagner du temps en vous
vitant davoir mesurer la rsistance chaque fois que vous souhaitez utiliser une
rsistance.
Chapitre 7
Entres, sorties et communication
DANS CE CHAPITRE
Faire un fondu enchan avec une LED

Se brancher sur les sorties

Faire varier la rsistance avec un potentiomtre

Afficher vos statistiques avec le moniteur srie

D
ans ce chapitre, je prsente plusieurs autres croquis prdfinis, donc disponibles
ds que vous avez install latelier Arduino. Il sera question dentres et de
sorties utilisant des capteurs faisant partie de votre kit. Si vous navez pas encore
de kit, je vous suggre de lire le Chapitre 2 pour en acqurir un de ceux que je
recommande.

Le croquis Blink (dcrit au Chapitre 4) vous a donn les bases dun croquis Arduino.
Ici, vous allez ltendre en ajoutant des composants externes votre Arduino. Je vous
montre comment procder en utilisant la platine dessai, comme mentionn au
Chapitre 5, et dautres composants de votre kit qui permettent de raliser toute une
varit de circuits.
Je montre comment tlverser le code dans votre Arduino en vous guidant chaque fois
ligne par ligne pour bien en comprendre le fonctionnement.

Charger un croquis
Tout au long de ce chapitre et dune bonne partie de ce livre, vous dcouvrirez toute
une varit de circuits et les croquis correspondants. Le contenu de ces circuits et des
croquis peut grandement varier ; il est systmatiquement dtaill dans les exemples
fournis. Avant de commencer, vous devez vous rappeler le processus suivre pour
tlverser (donc transfrer) un croquis dans la carte Arduino.
Suivez ces tapes pour tlverser un croquis :

1. Connectez votre Arduino en utilisant un cble USB.


La fiche carre au bout du cble USB se connecte votre Arduino, et
la fiche plate se connecte au port USB de votre ordinateur.

2. Slectionnez Outils->Type de carte->Arduino Uno pour trouver


le type de votre Arduino dans le menu.

Dans la plupart des exemples de ce livre, la carte utilise est une


Arduino Uno. Le menu contient de nombreuses cartes, telles que
lArduino Mega 2560 et lArduino Leonardo.

3. Slectionnez le bon port srie pour votre carte.

Vous pouvez accder une liste des ports sries disponibles en


slectionnant Outils->Port srie->comX ou /dev/
tty.usbmodemXXXX/ X est un nombre alatoire assign au port.
Sous Windows, si vous venez de connecter votre Arduino, le port
COM correspondant utilisera gnralement le nombre le plus lev,
tel que com 3 ou com 15. Si vous avez connect plusieurs Arduino,
chacun se verra assigner son propre port. Sous Mac OS X, le nombre
suivant /dev/ tty.usbmodem est assign alatoirement et peut de ce
fait varier, comme /dev/tty.usbmodem1421 ou
/dev/tty.usbmodem262471. Ce devrait tre le seul port visible,
moins que vous nayez connect plusieurs Arduino.

4. Cliquez sur le bouton Tlverser.

Cest le bouton qui figure une flche oriente vers la droite dans
lenvironnement Arduino, comme expliqu au chapitre 3. Vous
pouvez aussi utiliser le raccourci clavier Ctrl + U sous Windows ou
Cmd + U sous Mac OS X.
Pour vous aider comprendre le fonctionnement du premier croquis de ce chapitre, je
vais dabord vous expliquer la technique nomme PWM (Pulse Wave Modulation (la
traduction MLI en franais est peu rpandue). La section suivante vous la prsente
pour vous prparer apprendre comment rduire la luminosit dune LED.

La modulation de largeur dimpulsion


(PWM)
Lorsque je vous ai prsent la carte au Chapitre 2, jai mentionn que lmission dun
signal analogique tait simule sur une sortie numrique grce une technique
nomme PWM. Elle permet votre Arduino, un appareil numrique, de se comporter
comme un matriel analogique. Dans lexemple qui suit, elle vous permet de faire
varier la puissance dune LED au lieu de simplement lallumer ou lteindre.
Voici comment cela fonctionne : une sortie numrique ne peut tre que active ou
dsactive. Toutefois, il est possible de la faire osciller entre ces deux tats trs
rapidement, notamment grce lextrme vitesse de travail des composants actif en
silicium. Si la sortie est active la moiti du temps, et dsactive lautre moiti du
temps, on peut dire quelle a un rapport de cycle de 50 %. Le rapport de cycle est la
priode durant laquelle la sortie est 5 V. Nimporte quel autre pourcentage 20 %,
30 %, 40 %, et ainsi de suite, devient possible.
Lorsque vous utilisez une LED en sortie, le rapport de cycle produit un effet
particulier. Comme elle scintille plus vite que lil humain nest capable de le
dtecter, la LED qui subit un rapport de cycle de 50 % semble attnue, puisquelle ne
brille que la moiti du temps. Cest le mme effet qui vous permet de percevoir des
images fixes dfilant la vitesse de 24 images par seconde (ou au-del) comme sil
sagissait dune image en mouvement.
Avec un moteur courant continu en sortie, un rapport de cycle de 50 % fera tourner
le moteur la moiti de sa vitesse. La PWM permet de contrler la vitesse de rotation
du moteur en lui envoyant un signal haute frquence.
Ainsi, quoique la PWM soit une fonction numrique, on lexploite avec la fonction
analogWrite() en raison des effets quelle produit sur les composants.

Croquis pour attnuer une LED


Dans ce croquis, vous contrlez une LED. la diffrence du croquis qui vous
permettait simplement de la faire scintiller au Chapitre 4, vous aurez besoin ici de
matriel supplmentaire : Pour ce projet, il vous faut :
Une carte Arduino Uno

Une platine dessai

Une LED

Une rsistance (suprieure 120 )

Des straps
Il est toujours important de vous assurer que votre circuit nest pas aliment lorsque
vous y apportez des modifications. Vous pouvez facilement faire des erreurs de
connexion, ce qui peut endommager les composants. Avant de commencer, assurez-
vous que votre Arduino est dbranch de votre ordinateur ou de toute autre source de
courant externe.
Cblez le circuit reprsent sur la Figure 7-1. Cest un circuit simple comme celui du
croquis Blink du chapitre 4, mais qui utilise la broche 9 au lieu de la 13. La raison
pour laquelle nous choisissons la broche 9 et non la 13, cest que la 9 est capable de
PWM. En revanche, cette broche 9 a besoin dune rsistance pour limiter la quantit
de courant traversant la LED. Pour la broche 13, la rsistance a dj t prvue sur la
carte Arduino elle-mme, si bien que vous navez pas vous en proccuper.

FIGURE 7-1 La broche 9 est connecte une rsistance puis une LED qui rejoint la masse.

La Figure 7-2 montre le schma du circuit. Vous y voyez une simple connexion. La
broche numrique, la 9, est relie la longue patte de la LED ; la petite patte de la
LED est relie la rsistance, laquelle est relie la masse (GND). Dans ce circuit,
la rsistance peut figurer avant ou aprs la LED, du moment quelle figure bien dans
le circuit.
Il est toujours bon dadopter des conventions de couleurs pour vos circuits cest--
dire, dutiliser des couleurs diffrentes pour distinguer les circuits. Cela rend les
choses plus claires et peut faciliter grandement la rsolution de problmes. Vous
devriez vous tenir quelques standards en la matire. Les parties les plus importantes
distinguer par des couleurs sont lalimentation et la masse. Elles sont presque
toujours en rouge et en noir, respectivement, mais vous pouvez les rencontrer en blanc
et noir, comme expliqu au Chapitre 6.

FAIRE PREUVE DE RSISTANCE

Comme vous lavez appris au Chapitre 6, il est important de bien calculer la


rsistance pour garantir la scurit et prserver la longvit de votre circuit.
Dans ce cas, vous allez mettre votre LED sous une tension de 5 V (volts), la
tension maximale quune broche numrique peut gnrer. Une LED telle que
celle que vous trouvez dans votre kit est gnralement conue pour une
tension de 2,1 V (volts), si bien quune rsistance est requise pour la protger.
Elle tirera un courant dintensit maximale de 25 mA (milliampres). En
utilisant ces donnes, vous pouvez calculer la rsistance (ohms) :

R = (VS - VL) / I

R = (5 - 2,1) / 0,025 = 116 ohms

La rsistance dont la valeur est la plus proche que vous puissiez trouver fait
120 ohms (marron, rouge, marron). Si vous en avez une, vous avez de la
chance. Sinon, vous pouvez appliquer la rgle consistant prendre la
rsistance la plus proche, mais suprieure cette valeur. Elle rsistera plus la
tension quil ne le faut, mais votre LED sera en scurit et vous pourrez
toujours remplacer la rsistance ultrieurement lorsque vous chercherez
prenniser votre projet. Vous devriez trouver des rsistances adaptes de
220 , 330 ou 560 dans votre kit.

Vous pouvez toujours vous rfrer au Chapitre 6 pour trouver la rsistance


laide des codes de couleurs ou utiliser un multimtre pour la mesurer. On
trouve mme des applications sur smartphone qui proposent des pense-btes
pour les couleurs des rsistances (mais vos amis lectroniciens pourraient
vous railler si vous les utilisez).

Lautre type de connexion est gnralement un fil de signal, cest--dire un fil qui met
ou reoit un signal lectronique entre lArduino et un composant extrieur. Un fil de
signal peut tre de nimporte quelle couleur, pourvue quelle soit distincte de celles
de lalimentation et de la masse.
Une fois que vous avez assembl votre circuit, vous avez besoin du logiciel pour
lutiliser. Dans le menu Arduino, slectionnez Fichier->Exemples->01.Basics-
>Fade pour charger le croquis Fade. Le code complet de ce croquis est le suivant :

FIGURE 7-2 Un schma de votre circuit pour attnuer une LED.

/*
Fade

Cet exemple montre comment faire varier la


luminosit de
la LED sur la broche 9 en utilisant la fonction
analogWrite().
Cet exemple de code est dans le domaine public.
*/

int led = 9; // La broche laquelle la


LED est

relie
int brightness = 0; // Lintensit lumineuse de
la LED
int fadeAmount = 5; // Lampleur de la baisse
dinten-

sit lumineuse
// La routine setup est excute quand vous pressez
le
bouton reset:
void setup() {
// Dclarer la broche 9 comme broche de sortie
pinMode(led, OUTPUT);
}

// La routine loop boucle linfini:


void loop() {
// Modifie la luminosit sur la broche 9:
analogWrite(led, brightness);

// Changer la luminosit pour le tour de boucle


suivant:
brightness = brightness + fadeAmount;

// Inverser la variation de la luminosit quand on


ar-
rive son terme:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// Attendre 30 secondes pour visualiser leffet
delay(30);
}

Tlversez ce croquis dans votre carte en suivant les instructions prodigues au dbut
de ce chapitre. Si tout se droule correctement, la LED doit sallumer puis steindre
progressivement.
Si vous nobservez pas cet effet, vrifiez deux fois votre cblage :
Vrifiez que vous utilisez les bonnes broches.

Vrifiez que votre LED est bien place, la patte longue tant relie
par un strap la broche 9, et la patte courte relie la rsistance et
la masse (GND).

Vrifiez les connexions sur la platine dessai. Si les straps ou les


composants ne sont pas connects en utilisant les bonnes ranges
sur la platine dessai, elles ne fonctionneront pas.

Comprendre le croquis Fade


la lumire de votre LED, regardons de plus prs le fonctionnement gnral de ce
croquis.
Les commentaires en haut du croquis vous expliquent ce qui se passe : en utilisant la
broche 9, une fonction nomme analogWrite() fait varier lintensit lumineuse de la
LED. Aprs les commentaires, on trouve trois dclarations :

int led = 9; // La broche laquelle la


LED est
relie
int brightness = 0; // Lintensit lumineuse de
la LED
int fadeAmount = 5; // Lampleur de la baisse
dinten-
sit

Comme mentionn au chapitre 4, les dclarations figurent avant les fonctions setup
ou loop. Le croquis Fade utilise trois variables : led, brightness et
fadeAmount. Ce sont des variables entires capables de couvrir des plages
identiques, mais elles sont toutes utilises des fins diffrentes.
Les dclarations tant faites, le code rentre dans la fonction setup. Les
commentaires sont l pour vous rappeler que cette fonction nest excute quune fois,
et quelle ne fait que dclarer une broche comme sortie. Vous pouvez voir ici la
premire variable au travail. Au lieu dcrire pinMode(9, OUTPUT), vous avez
pinMode(led, OUTPUT). La variable led sert de symbole pour une valeur
numrique.

// La routine setup est excute quand vous pressez


le
bouton reset:
void setup() {
// Dclarer la broche 9 comme broche de sortie
pinMode(led, OUTPUT);
}

La fonction loop est plus sophistique :

void loop() {
// Modifier la luminosit sur la broche 9:
analogWrite(led, brightness);

// Modifier la luminosit pour la fois suivante:


brightness = brightness + fadeAmount;

// Inverser la variation de la luminosit quand on


ar-
rive en limite:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// Attendre 30 millisecondes pour visualiser
leffet
delay(30);
}

Au lieu des valeurs ON et OFF, une variation progressive de la luminosit a besoin de


toute une plage de valeurs. analogWrite() vous permet denvoyer une valeur
numrique entre 0 et 255 une broche PWM de lArduino. 0 correspond 0 V,
et 255 correspond 5 V. Toute valeur intermdiaire produit une tension
proportionnelle, ce qui fait varier la luminosit de la LED.
La boucle commence par envoyer la valeur de la luminosit sur la broche 9. Une
valeur de brightness gale 0 signifie que la LED est teinte :

// Modifier la luminosit sur la broche 9:


analogWrite(led, brightness);

Ensuite, vous ajoutez une petite quantit de luminosit la variable brightness,


pour la porter progressivement 5. La valeur ne sera pas envoye sur la
broche 9 avant le dbut de la prochaine itration :

// Modifier la luminosit un peu, en plus ou en


moins:
brightness = brightness + fadeAmount;

La luminosit doit demeurer dans la plage de valeurs convertible en une tension que la
LED peut supporter. On sen assure laide dune instruction conditionnelle qui teste
les variables pour dterminer ce quil faut faire ensuite.
Le mot if dbute linstruction. Deux conditions figurent entre les parenthses. Elles
sont spares par un oprateur (les deux barres). La premire expression se demande
si la valeur de brightness est gale 0. La seconde teste si cette valeur est gale
255. Notez que nous utilisons loprateur de comparaison ==, ne pas confondre
avec le =. Le double signe galit indique que le code doit comparer les deux valeurs
(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 spares par le symbole || qui
correspond au OU logique.

if (brightness == 0 || brightness == 255) {


fadeAmount = -fadeAmount ;
}

Ainsi, linstruction complte est si la variable nomme brightness est gale


0 ou bien si elle est gale 255, alors excuter tout ce qui se trouve entre les
accolades qui suivent . La ligne de code qui se trouve entre les accolades du test
nest excute que si une des deux conditions est vraie. Il sagit dune opration
mathmatique lmentaire qui inverse le signe de la variable nomme fadeAmount.
Tant que lintensit lumineuse de la LED peut tre accrue, la valeur 5 conserve dans
fadeAmount est ajoute brightness chaque itration. Lorsque la valeur de
brightness atteint 255, linstruction if est vrifie, et fadeAmount passe
de 5 -5. Dsormais, chaque itration, la valeur 5 est retranche de brightness
jusqu que cette variable atteigne la valeur 0, auquel cas linstruction if est de
nouveau vrifie. De nouveau, le signe de fadeAmount est invers, passant
de -5 5, et tout recommence.

fadeAmount = -fadeAmount;

Ces conditions nous permettent de gnrer une valeur qui ne cesse de boucler,
croissant de 0 255 avant de dcrotre jusqu 0, ce qui fait varier la luminosit de
votre LED qui sallume et steint graduellement en une trentaine dtapes
(255 diviss par 5).

Bidouiller le croquis Fade


Il y a bien des manires de faire varier la luminosit de la LED en utilisant le circuit
que vous avez ralis dans la section prcdente, mais je ne vais pas toutes les
exposer dans ce livre. Toutefois, je peux vous en montrer quelques-unes. Le code
suivant est celui du croquis Fading provenant dune version antrieure dArduino.
Dune certaine manire, je le prfre lexemple que jai donn. En apparence, il ne
provoque aucune diffrence dans le comportement de la LED. Passons-le en revue.
Je rappelle que les parties du code source qui sont affiches en couleur lcran, le
plus souvent en orange ou en bleu signalent des mots reconnus par lenvironnement
Arduino (ce qui peut savrer trs pratique pour reprer les fautes de frappe). Comme
les couleurs sont difficiles reprsenter dans un livre en noir et blanc, le code color
apparatra ici en gras.

/*
Fading

Cet exemple montre comment varier la luminosit de


la LED
avec analogWrite().
Le circuit:
* Une LED connecte la broche numrique 9 et la
masse.

Cr le 1 Nov 2008
Par David A. Mellis
modifi le 30 Aot2011
Par Tom Igoe

http://arduino.cc/en/Tutorial/Fading

Cet exemple de code est dans le domaine public.


*/

int ledPin = 9; // LED connecte la broche


numrique 9

void setup() {
// Rien ne se passe dans setup()
}

void loop() {
// Monte progressive de la luminosit de min max
par
pas de 5 points:
for(int fadeValue = 0;fadeValue <= 255;fadeValue
+=5) {
// Modifier la valeur (de 0 255):
analogWrite(ledPin, fadeValue);
// Attendre 30 millisecondes pour
visualiser
leffet
delay(30);
}

// Baisse progressive de la luminosit de max min


par
pas de 5 points:
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue
-=5)
{
// Modifier la valeur (de 0 255):
analogWrite(ledPin, fadeValue);
// Attendre 30 millisecondes pour
visualiser
leffet
delay(30);
}
}

Le premier exemple est trs efficace, mais il repose sur la fonction standard loop()
pour modifier la valeur de la tension applique la LED. La prsente version utilise
une boucle for insre dans la fonction loop().

Deux boucles conditionnelles for


Une fois que le croquis rentre dans une boucle for, il spcifie la condition de sortie
et ne peut sortir de la boucle tant que cette condition nest pas remplie. Les boucles
for sont souvent utilises pour des oprations rptitives. Ici, elles sont utilises
pour incrmenter ou dcrmenter un nombre une certaine frquence pour produire un
effet.
La premire ligne de la boucle for runit la dfinition de la valeur initiale, la
condition de poursuite de la rptition et lampleur de lincrmentation ou de la
dcrmentation :

for(int fadeValue = 0;fadeValue <= 255;fadeValue


+=5)

En clair, cela veut dire : cre une variable nomme fadeValue (cest une
variable locale la boucle for) gale 0 ; vrifie si fadeValue est infrieure ou
gale 255 ; si tel est le cas, fadeValue est augmente de 5 . fadeValue est
gale 0 au dbut du premier tour uniquement ; aprs cela, elle est incrmente de 5
chaque tour de boucle.
Dans la boucle, le code met jour la valeur analogWrite de la LED et
attend 30 millisecondes (ms) avant de procder une nouvelle itration.

for(int fadeValue = 0; fadeValue <= 255; fadeValue


+=5) {
// Modifier la valeur (de 0 255):
analogWrite(ledPin, fadeValue);
// Attendre 30 millisecondes pour visualiser leffet
delay(30);
}

Cette boucle for se comporte comme la boucle loop principale dans le premier
exemple Fade, mais comme fadeValue se trouve dans sa propre boucle, et quon y
trouve une boucle dincrmentation et une boucle de dcrmentation, il est plus facile
de jouer dessus pour produire des motifs de variation de la luminosit. Par exemple,
essayez de changer +=5 et -=5 avec diffrentes valeurs (dont 255 est un multiple),
et vous pourrez gnrer entre autres un effet dillumination asymtrique.
Vous pourriez aussi copier-coller les mmes boucles for pour produire des motifs
plus sophistiqus. Toutefois, noubliez pas que tant quil boucle sur un for, votre
Arduino ne peut rien faire dautre.

Le croquis Button
Cest la premire et sans doute la plus lmentaire des entres que vous pouvez et
devez apprendre matriser pour vos futurs projets Arduino : le modeste bouton-
poussoir.
Pour ce projet, vous aurez besoin de :
Un Arduino Uno

Une platine dessai

Une rsistance de 10 k

Un bouton-poussoir

Une LED

Des straps

La Figure 7-3 vous montre le montage sur la platine dessai pour le circuit Button. Il
est important de noter quelles pattes du bouton-poussoir sont connectes.
Gnralement, ces petits boutons-poussoirs sont faits pour enjamber exactement la
tranche au centre de votre platine dessai. De la sorte, les pattes que le bouton
permet de relier entre elles pour faire passer le courant se trouvent dune part
gauche et dautre part droite sur le diagramme.
Vous pouvez tester les pattes dun bouton-poussoir avec un testeur de continuit si
votre multimtre en est dot (comme expliqu au chapitre 5).
Le schma de la Figure 7-4 vous permet de constater que la rsistance est relie la
masse ainsi qu la broche 2, et que lorsque le bouton est press, il connecte
lensemble la broche 5 V. Cette configuration est utilise pour comparer la masse
(0 V) une tension (5 V), ce qui vous permet de dire si linterrupteur est ouvert ou
ferm.

FIGURE 7-3 La broche 2 lit ltat du bouton-poussoir.


FIGURE 7-4 Un schma du circuit bouton-poussoir.

Construisez ce circuit et tlversez ce code provenant de Fichier->Exemples -


>02.Digital->Button.

/*
Button

Allume et teint une LED relie la broche


numrique 13
lorsque le bouton-poussoir reli la broche 2 est
press.

Le circuit:
* LED relie de la broche 13 la masse
* Bouton-poussoir reli de la broche 2 +5 V
* Rsistance de 10 k relie de la broche 2 la
masse
* Note: sur la plupart des Arduino, on trouve dj
une
LED relie la broche 13.

cr en 2005
par DojoDave <http://www.0j0.org>
modifi le 30 aot 2011
par Tom Igoe

Cet exemple de code est dans le domaine public.

http://www.arduino.cc/en/Tutorial/Button
*/

// Deux constantes pour identifier les numros des


broches
const int buttonPin = 2; // le numro de la
broche du
bouton-poussoir
const int ledPin = 13; // le numro de la
broche de
la LED

// Une variable
int buttonState = 0; // Mmorise ltat du
bou-
ton-poussoir

void setup() {
// Initialise la broche de la LED en sortie:
pinMode(ledPin, OUTPUT);
// Initialise la broche du bouton-poussoir en
entre:
pinMode(buttonPin, INPUT);
}

void loop(){
// Lit ltat du bouton-poussoir:
buttonState = digitalRead(buttonPin);

// Vrifie si le bouton-poussoir est enfonc.


// Si oui, son tat est HIGH:
if (buttonState == HIGH) {
// Donc allumer la LED
digitalWrite(ledPin, HIGH);
}
else {
// Sinon, teindre la LED:
digitalWrite(ledPin, LOW);
}
}

Une fois que vous avez tlvers le croquis, appuyez sur le bouton et vous devriez
voir la LED de la broche 13 sallumer. Vous pouvez ajouter une LED plus puissante
votre carte Arduino entre la broche 13 et la masse (GND) pour que ce soit plus
visible.
Si vous ne voyez rien sallumer, revrifiez votre cblage :
Vrifiez que votre bouton est connect la bonne broche.

Si vous utilisez une autre LED, vrifiez quelle est bien branche, sa
longue patte tant relie la broche 13, et sa courte, GND. Vous
pouvez aussi lenlever et observer la LED installe sur la carte
(libelle L).

Vrifiez les connexions sur la platine dessai. Si les straps ou les


composants ne sont pas connects dans les bonnes ranges sur la
platine, le circuit ne fonctionnera pas.

Comprendre le croquis Button


Cest votre premier projet interactif Arduino. Les croquis prcdents nutilisaient que
des sorties, mais vous tes dornavant capable daffecter ces dernires en fournissant
une entre provenant du moned extrieur !
Tant quil est enfonc, le bouton maintient la diode allume. Ds quil est relch, la
diode steint. Relisons le croquis pour voir comment cela se passe.
Comme auparavant, la premire tape consiste dclarer des variables. Dans ce cas,
il faut noter quelques diffrences. Le mot const est une abrviation pour dsigner
une constante, si bien que les valeurs buttonPin et ledPin se trouvent ainsi
fixes pour la dure du programme. Il vaut mieux utiliser cette solution que dutiliser
des variables dont la valeur ne changera pas ; vous tes ainsi certain que vous ne ferez
pas lerreur de les modifier par mgarde. Les numros de broches peuvent tre
stocks dans des constantes, car ils sont fixes par dfinition.
Une variable buttonState est alors dclare et force la valeur initiale 0. Elle
va servir au suivi du changement dtat du bouton.

const int buttonPin = 2; // Numro de la broche


du
bouton-poussoir
const int ledPin = 13; // Numro de la broche
de la
LED

// Une variable
int buttonState = 0; // Stocke ltat du
bou-
ton-poussoir

La fonction setup utilise la fonction pinMode pour configurer la broche


ledPin (la broche 13) en sortie et la broche buttonPin (la broche 2) en
entre :

void setup() {
// Initialise la broche de la LED comme sortie:
pinMode(ledPin, OUTPUT);
// Initialise la broche du bouton-poussoir comme
en-
tre:
pinMode(buttonPin, INPUT);
}

Tout se passe dans la boucle principale. Tout dabord, la fonction digitalRead


est utilise avec la broche 2. Tout comme digitalWrite sert crire une valeur
HIGH ou LOW sur une broche de sortie, digitalRead sert lire une valeur sur
une broche dentre. Cette valeur est directement stocke dans la variable
buttonState.
void loop(){
// Lit ltat du bouton-poussoir:
buttonState = digitalRead(buttonPin);

Ltat du bouton tant connu, un test mobilisant une instruction conditionnelle if


permet de dterminer la suite. Linstruction se lit ainsi :
Si on dtecte une valeur HIGH (le circuit est mis sous tension), alors envoyer
HIGH sur la broche ledPin (la broche 13) pour allumer la LED ;

si cest une valeur LOW (le bouton-poussoir est relch et le circuit est ouvert),
alors envoyer LOW sur la broche ledPin pour teindre la LED ;
revenir au dbut de la boucle pour rpter.

// Vrifie si le bouton-poussoir est enfonc.


// Si cest le cas, ltat du bouton-poussoir est
HIGH:
if (buttonState == HIGH) {
// Allumer la LED:
digitalWrite(ledPin, HIGH);
}
else {
// Sinon teindre la LED:
digitalWrite(ledPin, LOW);
}
}

Bidouiller le croquis Button


Il est souvent ncessaire dinverser une sortie, un interrupteur, un capteur. Vous avez
deux moyens pour le faire. Le plus simple consiste changer un mot dans le code.
En changeant la premire ligne de code du croquis de :

if (buttonState == HIGH)

en :

if (buttonState == LOW)
la logique est inverse.
Cela signifie que la LED est allume tant que le bouton nest pas press. Si vous avez
un ordinateur, cest la solution la plus simple. Tlversez simplement ce code
retouch pour vrifier. Toutefois, vous pouvez vous trouver dans des cas o vous ne
voulez pas modifier le code. La solution pour inverser la logique du circuit est alors
dinverser sa polarit.
Au lieu de relier la broche 2 la rsistance puis GND, vous reliez la rsistance
5 V et la masse GND lautre ct du bouton, comme sur la Figure 7-5.

FIGURE 7-5 Aprs inversion des polarits du circuit.


Le croquis AnalogInput
Le prcdent croquis vous a montr comment utiliser digitalRead pour lire une
valeur LOW ou HIGH, mais comment faire si vous souhaitez lire une valeur
analogique comme ltat dune molette de contrle du volume ou dun variateur ?
Pour ce projet, vous aurez besoin de :
Un Arduino Uno

Une platine dessai

Un potentiomtre de 10 k

Une LED

Des straps

Sur la Figure 7-7, vous pouvoir voir la configuration de ce circuit. Vous avez besoin
dune rsistance et dune LED en sortie, et dun potentiomtre en entre. Pour un
rappel sur les potentiomtres, reportez-vous lencadr Les potentiomtres .
Sur les figures 7-6 et 7-7, le potentiomtre est connect lalimentation et la masse
par ses deux pattes latrales et la patte centrale sert de point de sortie variable. Pour
lire cette valeur analogique, vous devez utiliser un jeu de broches analogiques
particulires sur la carte Arduino.
Si vous inversez la polarit (inversez les straps positif et ngatif) de la rsistance,
vous inversez le sens de rotation du potentiomtre. Faites-le si vous constatez que le
sens de rotation nest pas naturel (le sens horaire pour augmenter).
Montez le circuit puis chargez lexemple suivant et tlversez-le :
Fichier->Exemples->03. Analog->AnalogInput

/*
Analog Input
Lit sur une entre analogique un capteur branch
sur la
broche A0 pour allumer et teidre une LED connecte
la
broche numrique 13.
La dure durant laquelle la LED est allume ou
teinte
dpend de la valeur lue par analogRead().

LES POTENTIOMTRES

Comme une rsistance passive classique, un potentiomtre (ou rsistance


variable) rsiste au flux de courant qui le traverse. La diffrence est que plutt
que davoir une valeur dtermine, cette valeur est rglable entre zro et une
borne suprieure. Gnralement, la borne de la plage de valeurs est imprime
sur le corps du potentiomtre. Par exemple, un potentiomtre marqu 10 k
vous permet de produire une rsistance variant entre 0 et 10 000 ohms.

On trouve des potentiomtres de toutes tailles et de toutes formes, comme


vous pouvez le constater sur la figure suivante. Songez tout ce que vous
rglez graduellement dans votre maison : thermostats, volume de la chine
stro, bouton de temprature du grille-pain. Dans tous ces cas, cest
gnralement un potentiomtre que vous avez affaire.

Le circuit:
* Potentiomtre reli la broche analogique 0
* Patte centrale du potentiomtre relie la
broche analogique
* Une broche latrale (nimporte laquelle) la
masse
* Lautre broche latrale relie au +5 V
* Anode de la LED (patte longue) relie la broche
13
* Cathode de la LED (patte courte) la masse
* Note: Comme la plupart des Arduino disposent
dune LED
intgre relie la broche 13 de la carte, la
LED
externe est optionnelle.
Cr par David Cuartielles
Modifi le 30 aot 2011
Par Tom Igoe

Cet exemple de code est dans le domaine public.

http://arduino.cc/en/Tutorial/AnalogInput

*/

int sensorPin = A0; // Slectionner la broche


dentre
pour le potentiomtre
int ledPin = 13; // Slectionner la broche pour
la
LED
int sensorValue = 0; // Variable pour stocker la
valeur
issue du capteur

void setup() {
// Dclarer ledPin en sortie:
pinMode(ledPin, OUTPUT);
}

void loop() {
// Lire la valeur du capteur:
sensorValue = analogRead(sensorPin);
// Activer ledPin
digitalWrite(ledPin, HIGH);
// Arrter le programme durant <sensorValue>
millise-
condes:
delay(sensorValue);
// Dsactiver ledPin:
digitalWrite(ledPin, LOW);
// Arrter le programme durant <sensorValue>
millise-
condes:
delay(sensorValue);
}

Une fois le croquis tlvers, tournez le potentiomtre. La LED clignote plus ou moins
rapidement selon la valeur de la rsistance. Vous pouvez ajouter une autre LED entre
les broches 13 et GND pour amliorer le spectacle.

FIGURE 7-6 Le curseur du potentiomtre est connect la broche A0.


FIGURE 7-7 Un schma du circuit AnalogInput.

Si vous ne voyez rien sallumer, revrifiez votre cblage :


Vrifiez que vous utilisez la bonne broche pour le potentiomtre.

Vrifiez que la LED est bien connecte, la longue patte tant relie
la broche 13, et la courte GND.

Vrifiez les connexions sur la platine dessai.

Comprendre le croquis AnalogInput


Dans le code source du croquis, les dclarations initiales prcisent les broches que le
programme va utiliser. La broche pour la lecture analogique est nomme
sensorPin et correspond A0. Cest la premire des six broches analogiques,
numrotes de 0 5. Les variables ledPin et sensorPin sont dclares en tant
que variables classiques. Vous auriez pu les dclarer comme des constantes entires
(const int), car leurs valeurs ne changent pas. Comme la valeur de
sensorValue doit pouvoir changer, elle doit pour sa part rester dclare comme
variable.

int sensorPin = A0; // Broche dentre pour le


poten-
tiomtre
int ledPin = 13; // Broche de sortie pour la
LED
int sensorValue = 0; // Variable pour stocker la
valeur
issue du capteur

Dans la fonction setup(), vous navez qu dclarer le mode dutilisation


pinMode de la broche numrique ledPin. Les entres analogiques ne sont que
pour des entres, comme leur nom lindique.

void setup() {
// Dclarer ledPin en sortie:
pinMode(ledPin, OUTPUT);
}

Vous pouvez aussi utiliser les broches dentre analogiques comme broches dentre
ou de sortie numriques. Dans ce cas, au lieu de les dsigner comme broches A0
A5, vous les identifiez comme broches numriques supplmentaires 14 19. Il faudra
dclarer que chacune est une broche dentre ou de sortie laide de la fonction
pinMode().
Tout comme le croquis Button, le croquis AnalogInput commence par lire ltat du
capteur. Lorsque vous utilisez la fonction analogRead(), il interprte la tension
applique la broche analogique. Cette tension varie ici avec la rsistance du
potentiomtre. La prcision dpend de la qualit de ce dernier. LArduino utilise un
convertisseur analogique-vers-numrique de lATmega328 pour interprter cette
tension. Au lieu de renvoyer 0 V, 0,1 V, 0,2 V et ainsi de suite, lArduino retourne un
entier compris entre 0 et 1023. Par exemple si la tension est de 2,5 V, lArduino va
renvoyer la valeur numrique entire 511.
Cest une bonne ide que de lire ltat du capteur avant toute chose. En effet, quoique
la boucle soit excute trs rapidement, il vaut mieux lire ltat du capteur avant pour
viter de subir un dlai dans son traitement. Cela vite de laisser lutilisateur penser
que lArduino met du temps rpondre son action sur le capteur.
Une fois que la variable de travail sensorValue a reu la valeur lue par la
fonction, la suite du croquis est approximativement la mme que Blink, mais avec un
dlai variable. ledPin reoit HIGH, on attend, ledPin reoit LOW, on attend,
puis la valeur du capteur est relue et le processus est rpt.
En utilisant une valeur brute du capteur (entre 0 et 1023) pour dlai, cela fait varier le
dlai entre 0 et un peu plus dune seconde.

void loop() {
// Lire la valeur du capteur:
sensorValue = analogRead(sensorPin);
// Activer ledPin
digitalWrite(ledPin, HIGH);
// Arrter le programme durant <sensorValue>
millise-
condes:
delay(sensorValue);
// Dsactiver ledPin:
digitalWrite(ledPin, LOW);
// Arrter le programme durant <sensorValue>
millise-
condes:
delay(sensorValue);
}

Ce croquis fait clignoter la LED diffrentes frquences, mais noubliez pas que
quand le clignotement ralentit, les dlais utiliss dans la boucle sont toujours plus
longs, si bien que le capteur est lu de moins en moins frquemment. Cela peut vous
donner limpression que le capteur est moins ractif lorsque la rsistance est leve.
Pour dautres considrations sur les capteurs, notamment pour savoir comment mieux
les lire et les calibrer, reportez-vous au chapitre 11.

Bidouiller le croquis AnalogInput


La fonction analogRead() fournit une valeur entire, et vous pouvez lutiliser
dans toutes sortes de calculs. Dans cet exemple, je vous montre comment vrifier si la
valeur du capteur a dpass ou non une valeur choisie comme seuil.
Vous pouvez fixer ce seuil en plaant toute la partie partir de la ligne
digitalWrite() dans une instruction conditionnelle if. Dans le code qui suit,
la LED ne clignote que si la valeur du capteur dpasse 511.

void loop() {
// Lire la valeur du capteur:
sensorValue = analogRead(sensorPin);
if (sensorValue > 511){
// Activer ledPin
digitalWrite(ledPin, HIGH);
// Arrter le programme durant <sensorValue>
millise-
condes:
delay(sensorValue);
// Dsactiver ledPin:
digitalWrite(ledPin, LOW);
// Arrter le programme durant <sensorValue>
millise-
condes:
delay(sensorValue);
}
}

Essayez dajouter vous-mme dautres conditions, mais sachez que si le dlai est trop
grand, le capteur ne sera pas lu trs souvent. Reportez-vous au Chapitre 11 pour
dcouvrir dautres croquis permettant de rsoudre le problme.

Le moniteur srie
Visualiser les rsultats produits par votre circuit laide dune LED est amusant, mais
ce serait pratique de pouvoir visualiser les valeurs que prend la variable de travail.
Ce nest quainsi que vous saurez si le circuit se comporte de la manire dont vous
lesprez. Les projets prsents dans cette section et dans la suivante permettent
dafficher la valeur des entres en utilisant un outil de latelier Arduino : le moniteur
srie.
Le terme srie qualifie la faon dont se droule un change de donnes entre un
priphrique et un ordinateur. Dans notre cas, cest une communication via le bus
srie universel (USB, pour Universal Serial Bus). Dans une liaison srie, les donnes
sont tranmises octet par octet dans lordre o elles sont produites. Lorsque vous
interrogez des capteurs avec un Arduino, les valeurs qui en rsultent sont envoyes
depuis lArduino via cette connexion USB et peuvent tre stockes puis interprtes
sur votre ordinateur.

Le croquis DigitalReadSerial
Dans ce projet, nous allons surveiller larrive de valeurs HIGH et LOW dans la
fentre du moniteur srie.
Pour ce projet, il vous faut :
Un Arduino Uno

Une platine dessai

Une rsistance de 10 k

Un bouton-poussoir

Des straps

Les figures 7-8 et 7-9 prsentent le mme circuit minimaliste que celui du croquis
Button plus tt dans ce chapitre. Le croquis est encore plus simple.

FIGURE 7-8 La broche 2 lit ltat du bouton-poussoir.


FIGURE 7-9 Un schma du circuit du bouton-poussoir.

Assemblez ce circuit puis tlversez le code de Fichier->Exemples->01.Basics-


>DigitalReadSerial.

/*
DigitalReadSerial
Lit un signal numrique sur la broche 2
Affiche le rsultat sur le moniteur srie

Cet exemple de code est dans le domaine public.


*/

// Le bouton-poussoir est reli la broche


numrique 2.
On lui donne un nom:
int pushButton = 2;

// La routine setup sexcute une fois quand vous


pressez
reset
void setup() {
// Initialise la communication srie 9600 bits
par
seconde:
Serial.begin(9600);
// Utilise la broche du bouton-poussoir en entre
pinMode(pushButton, INPUT);
}

// La routine loop sexcute linfini


void loop() {
// Lire ltat de la broche dentre
int buttonState = digitalRead(pushButton);
// Afficher ltat du bouton-poussoir
Serial.println(buttonState);
delay(1); // Dlai entre deux lectures pour
plus
de stabilit
}

Une fois que vous avez tlvers le croquis, cliquez sur le bouton Moniteur srie en
haut droite de la fentre ARDUINO. Vous affichez la fentre du moniteur srie (voir
Figure 7-10), qui montre les valeurs reues en provenance de lArduino via le port
srie slectionn (le mme que celui utilis pour tlverser le croquis, moins que
vous nen ayez dcid autrement).
Dans la fentre, vous devriez voir une cascade de valeurs 0. Pressez le bouton
plusieurs fois pour faire afficher quelques valeurs 1.
FIGURE 7-10 La fentre du moniteur srie est trs pratique pour voir ce que fait votre
Arduino.

Si vous ne voyez rien, ou si les valeurs sont tranges, revrifiez votre cblage :
Vrifiez que vous utilisez la bonne broche pour le bouton-poussoir.

Vrifiez les connexions sur la platine dessai.

Si vous voyez des nombres tranges et non des 0 et des 1, vrifiez


le dbit du moniteur srie ; sil nest pas rgl sur 9600, utilisez le
menu droulant du coin infrieur droit pour slectionner ce dbit.

Comprendre le croquis DigitalReadSerial


La seule variable dclare dans ce croquis est le numro de broche pour le bouton-
poussoir :

int pushButton = 2;

Dans la fonction de configuration, nous trouvons une nouvelle fonction


Serial.begin(). Elle configure la vitesse de la communication srie. Le nombre
entre parenthses indique cette vitesse, ou plutt ce dbit. Il est exprim en bauds et
correspond au nombre de bits par seconde ; dans le cas prsent, 9600 bits par
seconde. Lorsque vous visualisez le contenu de la communication dans le moniteur
srie, il est important de lire les donnes la mme vitesse quelles arrivent. Si ce
nest pas le cas, les donnes sont crases, et ce que vous pouvez lire lcran na
plus aucun sens. En bas droite de la fentre, vous pouvez modifier le dbit, mais il
devrait par dfaut tre rgl sur 9600.

void setup() {
// Initialise la communication srie 9600 bits
par
seconde
Serial.begin(9600);
// Fait de la broche du bouton-poussoir une entre
pinMode(pushButton, INPUT);
}

Dans la boucle loop, ltat de la broche pushButton est lu et conserv dans la


variable buttonState.

void loop() {
// Lire ltat de la broche dentre
int buttonState = digitalRead(pushButton);

La valeur de buttonState est alors envoye (crite) vers le port srie en utilisant
la fonction Serial.println(). La variante println est utilise, un retour la
ligne est ajout la fin de la valeur affiche. Ce retour la ligne est particulirement
utile lorsque vous lisez des valeurs, car elles peuvent ainsi apparatre les unes sous
les autres, ce qui en facilite la lecture, au lieu dtre colles les unes aux autres.

// Afficher ltat du bouton-poussoir


Serial.println(buttonState);

Un dlai dune milliseconde est ajout la fin de la boucle pour limiter la frquence
laquelle ltat du bouton est lu. Vous risquez de produire des rsultats imprvisibles si
vous lisez plus rapidement ltat, si bien quil est recommand de conserver ce dlai.

delay(1); // Dlai entre deux lectures pour


plus
de stabilit
}
Le croquis AnalogInOutSerial
Dans ce projet, vous surveillez via le moniteur srie une valeur analogique envoye
par un potentiomtre. Ce potentiomtre se comporte comme un bouton de rglage du
volume.
Dans cet exemple, vous surveillez la valeur dtecte par votre Arduino et vous
laffichez lcran, ce qui vous permet de mieux apprcier la plage des valeurs que
peut couvrir un capteur analogique.
Pour ce croquis, il vous faudra :
Un Arduino Uno

Une platine dessai

Un potentiomtre de 10 k

Une rsistance (suprieur 120 )

Une LED

Des straps

Le circuit reprsent sur les figures 7-11 et 7-12 est semblable au prcdent circuit
AnalogInput, mais nous lui ajoutons une LED relie la broche 9, comme dans le
circuit Fade. Le programme allume et teint progressivement la LED en fonction de la
rsistance oppose par le potentiomtre. Comme lentre et la sortie peuvent couvrir
diffrentes plages de valeurs, le croquis doit prvoir une mise lchelle. Cest un
excellent exemple dutilisation du moniteur srie pour dboguer et afficher les valeurs
dentre et de sortie.
Montez le circuit et tlversez le code de Fichier->Exemples->03. Analog-
>AnalogInOutSerial.

/*
Analog input, analog output, serial output

Lit une valeur sur la broche analogique, la


convertit en
une valeur entire
comprise entre 0 et 255 et utilise ce rsultat pour
mo-
difier la PWM de la
broche de sortie.

FIGURE 7-11 Le circuit pour lire un capteur via le moniteur srie.


FIGURE 7-12 Le schma du circuit.

Affiche aussi le rsultat sur le moniteur srie.

Le circuit:
* Un potentiomtre connect sur la broche numrique
0.
La patte centrale du potentiomtre va sur len-
tre analogique.
Les pattes latrales du potentiomtre vont sur +5
V et
sur GND
* Une LED relie la broche numrique 9 et GND

Cr le 29 Dec. 2008
Modifi le 9 Avr 2012
par Tom Igoe

Cet exemple est dans le domaine public.

*/

// Ces constantes ne changeront pas. On les utilise


pour
// dsigner les broches utilises:
const int analogInPin = A0; // La broche dentre
ana-

// logique laquelle
le
// potentiomtre est
reli
const int analogOutPin = 9; // La broche peusdo-
analo-

gique laquelleest
relie
la LED
int sensorValue = 0; // La valeur lue sur le
potentiomtre
int outputValue = 0; // La valeur gnre sur
la
broche PWM

void setup() {
// Initialiser une communication srie 9600 bits
par
seconde:
Serial.begin(9600);

}
void loop() {
// Lire la valeur analogique:
sensorValue = analogRead(analogInPin);
// La convertir dans une valeur analogique en
sortie:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// Ecrire la valeur analogique en sortie:
analogWrite(analogOutPin, outputValue);
// Afficher les rsultats sur le moniteur srie
Serial.print(Capteur = );
Serial.print(sensorValue);
Serial.print(\t Sortie = );
Serial.println(outputValue);

// Attendre 2 millisecondes avant une nouvelle


// itration pour que le convertisseur analo-
// gique-vers-numrique puisse sy retrouver aprs
la
// dernire lecture
delay(2);
}

Une fois que vous avez tlvers le croquis, tournez le potentiomtre. La LED devrait
sallumer et steindre progressivement en fonction de la valeur de la rsistance.
Cliquez sur le bouton du moniteur srie en haut droite de la fentre Arduino pour
voir la valeur que vous recevez du capteur et celle que vous renvoyez sur la LED en
sortie.
Si vous ne voyez rien, revrifiez votre cblage :
Vrifiez que vous utilisez la bonne broche pour le potentiomtre.

Vrifiez que la LED est bien connecte, la patte longue tant relie
la broche 9, et la patte courte tant relie GND, via le
potentiomtre.

Vrifiez les connexions sur la platine dessai.

Si vous recevez des nombres tranges et non des 0 et des 1,


vrifiez le dbit du moniteur srie ; sil nest pas rgl sur 9600,
utilisez le menu droulant en bas droite pour slectionner ce
dbit.

Comprendre le croquis
AnalogInOutSerial
Le dbut du croquis coule plutt de source. Il dclare sous forme de constantes les
deux broches utilises pour lentre analogique et la sortie PWM. Il dclare ensuite
les deux variables pour conserver la valeur reue du capteur (sensorValue) et la
valeur qui est envoye la LED (outputValue).

const int analogInPin = A0; // La broche dentre


ana-
logique laquelle le
// potentiomtre est
reli
const int analogOutPin = 9; // La broche
analogique
laquelle la LED est relie

int sensorValue = 0; // La valeur lue sur le


po-
tentiomtre
int outputValue = 0; // La valeur gnre sur
la
broche PWM

Dans setup(), vous navez rien faire part ouvrir la communication srie :

void setup() {
// Initialiser une communication srie 9600 bits
par
seconde
Serial.begin(9600);
}

Cest dans loop() que laction se droule. Comme dans le croquis Fade, il vaut
mieux commencer par lire lentre. La variable sensorValue conserve la valeur
lue sur la broche analogInPin, qui peut varier entre 0 et 1024.

void loop() {
// Lire la valeur analogique
sensorValue = analogRead(analogInPin);
Faire varier progressivement la luminosit de la LED via PWM suppose une plage de
valeurs entre 0 et 255. Il faut donc changer lchelle sensorValue pour quelle
tienne dans la plage de outputValue. Pour ce faire, vous utilisez la fonction map.
Cette fonction attend conq paramtres : un nom de variable, le minimum et le
maximum de la plage de dpart puis le minimum et le maximum de la plage darrive.
En utilisant la fonction map, vous pouvez donc crer une outputValue
proportionnelle sensorValue, mais plus petite chelle.

// La convertir en une valeur analogique en sortie


outputValue = map(sensorValue, 0, 1023, 0, 255);

Cette fonction prdfinie est trsutile, mais dans le cas prsente, nous aurions pu faire
la mise lchelle plus simplement. En effet, on arrive au mme rsultat en divisant
simplement par 4.

outputValue = sensorValue / 4;

La valeur de outputValue est alors envoye la LED en utilisant la fonction


analogWrite().

// Envoyer la valeur analogique en sortie


analogWrite(analogOutPin, outputValue) ;
Cest assez pour que le circuit fonctionne, mais si vous voulez savoir ce qui se passe,
vous devez faire afficher les valeurs sur le port srie. Le code rclame trois lignes de
Serial.print, avant Serial.println, ce qui signifie que ce qui est crit
figure sur une seule ligne chaque fois que le programme accomplit une itration.
Le texte entre les guillemets sert rajouter des libells ou des caractres. Vous pouvez
aussi utiliser les caractres spciaux, tels que \t, qui rajoute une tabulation pour
arer laffichage.

// Affiche les rsultats sur le moniteur srie


Serial.print(Capteur = );
Serial.print(sensorValue);
Serial.print(\t Sortie = );
Serial.println(outputValue);

Voici un exemple de ligne gnre :

Capteur = 1023 Sortie = 511


La boucle se termine par une brve pause pour stabiliser les rsultats avant de repartir
pour un tour, lisant lentre, gnrant la sortie et affichant les informations sur le
moniteur srie.

// Attendre 2 millisecondes avant une nouvelle


// itration pour que le convertisseur analo-
// gique-vers-numrique puisse sy retrouver aprs
la
// dernire lecture
delay(2);
}

Ce dlai est largement arbitraire et pourrait fort bien ntre que de 1 ms au lieu de 2,
comme dans lexemple prcdent. Si le capteur est capricieux, vous pourriez
augmenter la pause jusqu 10 ms, mais sil ragit trs bien, vous pouvez supprimer le
dlai. Il ny a pas de valeur magique.
Chapitre 8
Moteurs, servos et effets sonores
DANS CE CHAPITRE
Exploiter un moteur courant continu

Contrler des puissances plus importantes avec les transistors

Rgler la vitesse de votre moteur

Contrler langler en utilisant un moteur pas pas

Raliser une musique lectronique avec un buzzer

D
ans le Chapitre 7, vous avez vu comment utiliser une simple LED en sortie de vos
circuits. Mme si au royaume dArduino rien nest plus beau quune LED
clignotante, de nombreuses autres options de sortie sont votre disposition.

Dans ce chapitre, jexplore deux autres domaines : le mouvement mcanique fourni


par un moteur lectrique et le son gnr par un buzzer pizolectrique.

Exploiter un moteur lectrique


Les moteurs lectriques permettent de produire des dplacements mcaniques grce
la puissance de llectromagntisme fourni par llectricit. Lorsquun courant
lectrique passe travers une bobine de fil, il cre un champ lectromagntique. Ce
processus fonctionne de faon similaire celui dun aimant rectangulaire standard,
ceci prs que vous avez la possibilit de lactiver ou de le dsactiver volont et
mme de modifier la direction du champ magntique. Si vous vous souvenez de vos
leons de lcole primaire, un aimant a deux tats possibles : attraction ou rpulsion.
Dans un champ lectromagntique, vous pouvez passer dun tat lautre en modifiant
la polarit, ce qui, en termes pratiques, revient inverser les fils positifs et ngatifs.
On utilise des lectroaimants pour de nombreux usages, qui vont des serrures
commande lectrique aux lectrovannes en passant par la lecture et lcriture sur un
disque dur. Ils sont galement utiliss pour soulever de la ferraille. Mme le grand
collisionneur de particules du CERN utilise des lectroaimants. Dans ce chapitre,
jaborde un autre usage important des lectroaimants : les moteurs lectriques.
Un moteur lectrique est constitu dun bobinage de fil (lectroaimant) qui tourne
entre deux aimants classiques. En alternant la polarit de la bobine, il devient
possible de le mettre en rotation, car il est successivement attir et repouss par les
aimants. Si cela se produit assez rapidement, la bobine se met alors en rotation.
La premire des choses consiste comprendre comment la bobine peut tourner alors
quelle est attache au fil. Cela fonctionne en montant des balais de cuivre sur un
essieu. Ces balais frottent sur deux demi-cercles de cuivre, comme lillustre la
Figure 8-1. Le contact peut tre maintenu sans avoir recours des fils fixes. Les demi-
cercles impliquent galement que les deux points ne sont jamais en contact, car cela
causerait un court-circuit.

FIGURE 8-1 Connexion lectrique de laxe du moteur (rotor).

Vous pouvez affecter une bobine tournant librement autour dun axe en plaant
proximit de cette dernire deux aimants permanents. Comme le montre la Figure 8-2,
ces aimants sont placs de part et dautre de la bobine, un ple diffrent de chaque
ct. Si vous faites passer un courant lectrique dans la bobine, vous lui donnez une
polarit nord ou sud, comme avec des aimants conventionnels. Si la bobine est
oriente nord, elle sera repousse par laimant Nord et attire par laimant Sud.

FIGURE 8-2 Principe de fonctionnement dun moteur lectrique.

Si vous regardez de nouveau le balai, vous vous apercevrez que quelque chose arrive
lorsque la bobine effectue une demi-rotation : la polarit sinverse. Lorsque cela
arrive, le cycle recommence de nouveau et le Nord de la bobine devient le Sud. Elle
est alors repousse vers le Nord par laimant Sud. En raison de limpulsion produite
lorsque la bobine est repousse, le mouvement continu dans la mme direction tant
quil existe un courant suffisant.
Il sagit de la forme la plus lmentaire de moteur lectrique, et les moteurs modernes
sont bien plus raffins, ils disposent de plusieurs bobines et aimants afin de produire
un mouvement fluide. Dautres moteurs sont galement bass sur ce principe mais
dispose dun mcanisme permettant un contrle plus fin du mouvement, ils peuvent par
exemple se dplacer dun nombre de degrs spcifique ou vers une position prcise.
Ce sont des servomoteurs. Dans votre kit, vous devriez disposer des deux varits de
moteurs lectriques : un moteur courant continu et un servomoteur.

Dcouvrir la diode
La diode est un lment essentiel pour alimenter un moteur lectrique. Comme nous
lavons expliqu plus haut dans ce chapitre, vous pouvez faire tourner un moteur
lectrique en le soumettant une tension. Cependant, si on fait tourner le bobinage (le
rotor) sans quil soit sous tension, il va son tour en gnrer une en sens oppos ;
cest ainsi que fonctionnent les gnrateurs lectriques et dynamos : ils produisent de
llectricit partir du mouvement mcanique.
Si cette inversion survient dans votre circuit, les effets peuvent en tre dsastreux.
Pour bloquer ce courant inverse, nous utilisons une diode. Une diode ne laisse passer
le courant que dans un sens. Le courant circule de lanode vers la cathode. La
Figure 8-3 montre laspect physique et le symbole dune diode de faible puissance
comme celles que lon utilise dans nos montages.

FIGURE 8-3 Une diode physique et son symbole schmatique.

Faire tourner un moteur courant


continu
Le moteur courant continu de votre kit (connu sous le nom de moteur balais) est le
plus simple de tous les moteurs lectriques et est gnralement utilis pour les
activits de loisirs telles que le modlisme. Lorsquun courant traverse un moteur
courant continu, il tourne dans une direction jusqu ce que le courant sarrte.
moins quil ne soit marqu dun + ou dun -, les moteurs courant continu nont pas de
polarit, ce qui signifie que vous pouvez intervertir leurs deux fils pour inverser le
sens du moteur. Il existe bien dautres types de moteurs plus imposants, mais dans cet
exemple nous ne nous focalisons que sur des petits moteurs destins aux activits de
loisirs.
Dans cette section, je vais vous montrer comment raliser un circuit de contrle
simple permettant de dmarrer et darrter votre moteur.
Il vous faut :
Un Arduino Uno

Une platine dessai

Un transistor

Un moteur courant continu

Une diode

Une rsistance de 2,2 k

Un strap

La Figure 8-4 reprsente le circuit et le schma de la Figure 8-5 devrait clarifier


exactement sa ralisation. Pour alimenter le moteur, vous devez lui fournir un courant
de 5 V. Cette tension permet de faire tourner le moteur, mais vous devez placer un
transistor juste aprs le moteur pour le piloter. Le transistor, comme dcrit dans
lencart Fonctionnement des transistors est un commutateur commande
lectrique qui peut tre activ via vos broches de sorties numriques Arduino.
Dans cet exemple, le transistor sera contrl par la broche 9 de votre Arduino, un peu
la manire dune LED, ceci prs que le transistor vous permet douvrir et de
fermer le circuit dalimentationdu moteur.
Ce circuit fonctionne, mais il nest pas labri dun courant inverse d linertie du
moteur lorsque celui-ci ralentit. Si un courant ngatif est gnr, il partira du ct
ngatif du moteur et cherchera la route la plus courte vers la masse. Cet itinraire peut
passer par le transistor ou par lArduino. Comme vous ne pouvez pas prvoir ce qui
va se passer, vous devez fournir un moyen de contrler cet excs de courant.
Pour tre tranquille, vous placez une diode en parallle avec le moteur. Ainsi, si un
courant est gnr dans la direction oppose, il sera bloqu et ne pourra endommager
lArduino.
FIGURE 8-4 Un schma de circuit contenant un transistor.
FIGURE 8-5 Un circuit avec transistor contrlant votre moteur lectrique.

FONCTIONNEMENT DES TRANSISTORS

Parfois il nest pas possible ou envisageable dalimenter une sortie directement


partir de vos broches Arduino. En utilisant un transistor, vous pouvez
contrler un circuit de plus grande puissance partir de votre modeste
Arduino.

Les moteurs et les dispositifs de sortie plus importants (comme de nombreux


clairages) ncessitent souvent une tension et/ou un courant suprieur celui
que peuvent fournir vos broches Arduino ; ils reposent donc sur leurs propres
circuits pour obtenir cette puissance. Pour tre en mesure de les contrler,
vous pouvez utiliser un composant appel transistor. De la mme manire
quun commutateur physique sert ouvrir ou fermer un circuit, un transistor
est un commutateur lectronique qui peut tre ouvert ou ferm en utilisant
une tension de commande trs faible. Il existe un trs grand nombre de
transistors, chaque modle dispose de sa propre rfrence. Vous trouverez sur
Internet via ses rfrences des informations dtailles son sujet. Celui que
jutilise dans lexemple de cette section est un 2N2222 qui est un transistor de
type NPN (ngatif-positif-ngatif). Il existe aussi des transistors PNP.

Un transistor dispose de trois connexions : le collecteur, la base et lmetteur.


La base correspond lendroit o le signal numrique Arduino est envoy ; le
collecteur est la source dalimentation et lmetteur correspond la masse.
Une catgorie spciale de transistors utilise un effet de champ ; dans ce cas on
parle de grille pour la base, de drain pour le collecteur et de source pour
lmetteur. Les connexions sont numrotes et nommes afin que vous ne les
confondiez pas. Sur le schma de circuit, ils sont indiqus comme sur la droite
de la figure suivante : le collecteur en haut, la base gauche et lmetteur en
bas.
Si vous placez la diode dans le mauvais sens, le courant contourne le moteur et vous
crez un court-circuit. Le court-circuit draine tout le courant vers la masse et risque
dendommager votre port USB ou au minimum va dclencher laffichage dun message
vous informant que votre port USB consomme trop de puissance.
Construisez le circuit comme indiqu, puis ouvrez un nouveau croquis Arduino avec
la commande Fichier->Nouveau. Cliquez sur le bouton Enregistrer et sauvegardez-le
avec un nom facile retenir, comme monMoteur, puis saisissez dans lditeur toutes
les lignes de code suivantes. Soyez trs attentif et relisez-vous :

// monMoteur
// Programme rdig par le lecteur

int brocheMot = 9;

void setup() {
pinMode(brocheMot, OUTPUT);
}

void loop() {
digitalWrite(brocheMot, HIGH);
delay(1000);

digitalWrite(brocheMot, LOW);
delay(1000);
}
Une fois que vous avez saisi ces lignes, enregistrez le croquis (Fichier->Enregistrer)
et utilisez le bouton Vrifier pour vrifier sil fonctionne. Lenvironnement Arduino
vrifie quil ne comporte pas derreur de syntaxe (la grammaire de votre code) et les
affiche en surbrillance, le cas chant, dans la zone de message (comme expliqu au
chapitre 3). Les erreurs les plus frquentes sont dues des fautes de frappe tel un
point-virgule manquant, et la sensibilit la casse des lettres (distinction entre
majuscules et minuscules).
Si le croquis se compile correctement, cliquez sur Tlverser pour transfrer le code
excutable sur votre carte. Vous devriez voir votre moteur tourner durant une seconde
puis sarrter une seconde et reprendre ce cycle sans cesse.
Si ce nest pas ce qui se passe, revrifiez vos cblages :
Assurez-vous de bien utiliser la broche numro 9.

Assurez-vous que votre diode est bien oriente (avec la bande face
la connexion 5 V).

Vrifiez les connexions sur la platine dessai.

Comprendre le croquis moteur


Il sagit dun croquis trs simple, et vous remarquerez peut-tre quil sagit dune
variation du croquis Blink.
Dans cet exemple, nous changeons de matriel, mais nous utilisons le mme code que
pour contrler une LED.
En premier lieu, une variable est dclare pour utiliser la broche numro 9.

int brocheMot = 9;

Dans la configuration, la broche 9 est dfinie en tant que sortie.

void setup() {
pinMode(brocheMot, OUTPUT);
}

Dans la boucle, le signal de sortie prend la valeur HIGH, puis le programme marque
une pause de 1000 ms (1 seconde), la sortie prend la valeur LOW, suit une autre pause
de 1000 ms et le cycle se rpte.

void loop() {
digitalWrite(brocheMot, HIGH);
delay(1000);

digitalWrite(brocheMot, LOW);
delay(1000);
}

Contrler la vitesse de votre moteur


Actionner et arrter votre moteur est une chose, mais vous aurez souvent besoin de
disposer dun contrle fin de la vitesse de rotation.
Le schma suivant montre comment contrler la vitesse de votre moteur en utilisant le
mme circuit.

Le croquis monMotVit
En utilisant le mme circuit que dans la prcdente section, ouvrez un nouveau croquis
Arduino, sauvez-le avec un nouveau nom facile retenir, tel que monMotVit, et
saisissez le code suivant.

int brocheMot = 9;

void setup(){
pinMode(brocheMot, OUTPUT);
}

void loop() {
for(int valVitesse = 0 ; valVitesse <= 255;
valVitesse
+=5) {
analogWrite(brocheMot, valVitesse);
delay(30);
}

for(int valVitesse = 255 ; valVitesse >= 0;


valVitesse
-=5) {
analogWrite(brocheMot, valVitesse);
delay(30);
}
}

Une fois le croquis saisi, enregistrez-le et cliquez sur le bouton Compiler. En cas
derreur, lenvironnement Arduino indiquera en surbrillance toute erreur grammaticale
dans la zone de message.
Si le croquis est compil correctement, cliquez sur Tlverser pour le transfrer vers
votre carte.
Cette opration effectue, votre moteur devrait tourner trs lentement puis acclrer
pour atteindre sa vitesse maximale et ralentir de nouveau jusqu larrt et rpter ce
motif. Si ces tapes sont difficiles observer, fixez sur laxe du moteur quelque chose
de visible comme un petit morceau de ruban adhsif, vous verrez ainsi mieux ce qui se
passe.
Vous constaterez qu sa vitesse la plus faible on entend juste le ronronnement du
moteur. Cela signifie simplement que llectroaimant ne dispose pas dune tension
suffisante pour le faire tourner ; il lui faut une tension plus importante pour gnrer le
magntisme et prendre de llan.

Comprendre le croquis monMotVit


Ce croquis diffre lgrement du croquis Fade dcrit au chapitre 7, cependant il
fonctionne exactement de la mme manire. La broche que vous allez utiliser pour
contrler le circuit du moteur et la broche numrique 9, dclare comme ceci :

int brocheMot = 9;

Comme il sagit dune sortie, elle est dclare dans la configuration.

void setup() {
pinMode(brocheMot, OUTPUT);
}

Dans la boucle principale, vous utilisez analogWrite() pour envoyer une valeur
PWM sur la broche 9. Cest le mme principe que dans le croquis Fade que nous nous
utilisions pour faire varier une LED. La premire boucle for envoie une valeur vers
la broche 9. Cette valeur augmente graduellement jusqu ce quelle atteigne la valeur
maximale PWM de 255. La seconde boucle for dcrmente graduellement cette
valeur jusqu 0 ; puis le cycle reprend.

void loop() {

for(int valVitesse = 0 ; valVitesse <= 255;


valVitesse
+=5) {
analogWrite(brocheMot, valVitesse);
delay(30);
}

for(int valVitesse = 255 ; valVitesse >= 0;


valVitesse
-=5) {
analogWrite(brocheMot, valVitesse);
delay(30);
}
}

Remarquez lindentation des accolades fermantes : celles des blocs conditionnels for
sont dcales de deux positions par rapport la marge. Cela permet de bien voir
quelles servent clore des blocs dun sous-niveau par rapport laccolade fermante
de la fonction loop().
Ce processus pourrait tre compar celui du rgime dun moteur de voiture. Si vous
appuyez fond sur la pdale, vous acclrez plein rgime. Si vous donnez un coup
sec sur la pdale dacclration, le moteur acclre, puis ralentit. Si vous tapez
intervalles rguliers avant que le moteur ne ralentisse, vous atteindrez un quilibre et
obtiendrez une vitesse plus ou moins constante.
Cest exactement ce que fait le transistor, ceci prs quil effectue cette opration
beaucoup plus rapidement. Les intervalles entre les tats activ et dsactiv
coupls linertie du moteur permettent dobtenir un comportement analogique
partir dun signal numrique.

Contrler la vitesse de votre moteur


Le croquis de la section prcdente permet de varier la vitesse du moteur. Dans cette
section, vous allez dcouvrir comment, via quelques entres, il est possible de
contrler prcisment son rgime de rotation.
Le croquis MotorControl
Pour pouvoir contrler la vitesse de votre moteur votre guise, vous devez ajouter un
potentiomtre votre circuit.
Il vous faut :
Un Arduino Uno

Une platine dessai

Un transistor

Un moteur courant continu

Une diode

Un potentiomtre de 10 k

Une rsistance (on dit aussi rsistor) de 2,2 k

Des straps

Suivez le croquis de la Figure 8-6 et le croquis de la Figure 8-7 afin dajouter un


potentiomtre votre circuit de commande moteur.
FIGURE 8-6 Un circuit transistor pour piloter votre moteur lectrique.

FIGURE 8-7 Schma dun circuit transistor.


Trouvez une place sur la platine dessai du projet prcdent pour y ajouter le
potentiomtre. La broche centrale du potentiomtre est connecte la broche 9 via un
strap, les deux broches restantes sont connectes au 5 V et la masse GND. Intervertir
ce branchement inversera la valeur que le potentiomtre renvoie lArduino. Bien
que le potentiomtre utilise la mme masse et la mme puissance que le moteur, notez
quils sont sur des circuits spars qui communiquent via lArduino.
Lorsque vous aurez cr le circuit, ouvrez un nouveau croquis Arduino et enregistrez-
le avec un nom explicite tel que monMotorControl. Puis saisissez le code suivant :

// monMotorControl

int brochePotar = A0;


int brocheMot = 9;

int valPotar = 0;
int valVitesse = 0;

void setup() {
Serial.begin(9600);
}

void loop() {
valPotar = analogRead(brochePotar);
valVitesse = map(valPotar, 0, 1023, 0, 255);
analogWrite(brocheMot, valVitesse);

Serial.print(Potentiometre = ); // Pas de
lettres
accentues !
Serial.print(valPotar);
Serial.print(\t Moteur = );
Serial.println(valVitesse);

delay(2);
}

Lorsque vous aurez saisi ce croquis, enregistrez-le et cliquez sur le bouton Vrifier
pour mettre en vidence les erreurs de syntaxe.
Si le croquis se compile correctement, cliquez sur Tlverser pour transfrer le
croquis vers votre carte.
Une fois le transfert est achev, vous devriez tre en mesure de contrler votre moteur
via le potentiomtre. Actionnez le potentiomtre dans une direction pour le faire
acclrer, puis dans lautre direction pour le faire ralentir.
La section suivante vous explique comment le code permet au potentiomtre de
modifier la vitesse du moteur.

Comprendre le croquis MotorControl


Ce croquis est une variation du croquis AnalogInOutSerial. Il fonctionne exactement
de la mme faon. Seuls quelques noms ont t changs pour permettre un meilleur
suivi de ce qui est contrl sur le circuit.
Ici encore, vous commencez par dclarer les diffrentes variables utilises par le
croquis. Vous utilisez la variable brochePotar pour assigner la broche du
potentiomtre et la variable brocheMot pour envoyer un signal au moteur. La variable
brochePotar est utilise pour stocker la valeur brute du potentiomtre et la variable
valVitesse pour stocker la valeur convertie envoyer vers le transistor pour actionner
le moteur.

int brochePotar = A0;


int brocheMot = 9;

int valPotar = 0;
int valVitesse = 0;

Reportez-vous lexemple AnalogInOutSerial du chapitre 7 pour plus de dtails sur


le fonctionnement de ce croquis.

Peaufiner le croquis MotorControl


Vous dcouvrirez quil existe une vitesse minimale en dessous de laquelle le moteur
cale, car ce dernier ne dispose plus dassez de puissance pour tourner. En observant
les valeurs envoyes au moteur laide du croquis monMotVit, vous pouvez trouver
cette valeur minimale et modifier en consquence la variable valVitesse afin de rester
dans les limites permises par le moteur.
Suivez les tapes ci-dessous pour dfinir la plage de valeurs de valVitesse :
1. Une fois le croquis MotorControl tlvers, cliquez sur le
bouton Moniteur srie situ dans le coin suprieur droit de
votre fentre Arduino.

La fentre Moniteur srie vous indiquera la valeur du potentiomtre


suivie par la valeur de sortie envoye vers le moteur :

Potentiometre = 1023 Moteur = 255

Ces valeurs sont affiches dans une longue liste. Elles changent
chaque fois que vous tournez le potentiomtre. Si vous ne voyez pas
cette liste drouler vers le bas, assurez-vous davoir bien slectionn
loption Autoscroll.

2. En commenant avec la valeur zro pour le potentiomtre,


tournez ce dernier trs lentement jusqu ce que le moteur
arrte de ronronner et quil commence tourner.

3. Prenez note de la valeur affiche ce moment prcis.

4. Utilisez une instruction if pour indiquer au moteur de ne


modifier sa vitesse que si la valeur est suprieure la vitesse
minimum ncessaire pour le faire tourner, comme ceci :

(a).Retrouvez le fragment de votre code qui envoie la valeur


valVitesse au moteur :

analogWrite(brocheMot, valVitesse);

(b).Remplacez cette instruction par le bloc de lignes suivant :

if(valVitesse > monSeuil) {


analogWrite(brocheMot, valVitesse);
} else {
digitalWrite(brocheMot, LOW);
}

5. prsent remplacez monSeuil par le nombre que vous avez


not pralablement.
Si la valeur valVitesse est suprieure, le moteur acclre ; si elle
est infrieure, la broche est force LOW et est ainsi vraiment
dsactive. Vous pourriez galement crire
analogWrite(brocheMot, 0) pour accomplir la mme tche. De
telles petites optimisations peuvent vous aider raliser des
fonctions plus fluides et plus prcises.

Les servomoteurs
Un servomoteur est compos dun moteur et dun dispositif appel encodeur qui
permet de contrler langle de rotation de laxe du moteur. Les servomoteurs sont
utiliss pour les mouvements de prcision. Ils permettent de faire tourner le moteur
dun nombre de degrs prcis afin de le positionner un emplacement exact. En
utilisant votre Arduino, vous pouvez indiquer au servomoteur le nombre de degrs
quil doit effectuer depuis sa position actuelle. La plupart des servomoteurs ne se
dplacent que sur un demi-tour, mais il est possible de contourner cette limitation.
Le servomoteur de votre kit sera probablement similaire lun de ceux reprsents
la Figure 8-8. Il sagit dun servomoteur engrenages en plastique ne pouvant grer
que des efforts relativement lgers. Lorsque vous aurez expriment ces petits
moteurs, vous pourrez vous tourner vers de plus grands modles capables de grer
des charges bien plus lourdes.

FIGURE 8-8: Un servomoteur.

Les servomoteurs sont largement utiliss en robotique pour raliser des robots
marcheurs qui ncessitent un contrle prcis du mouvement de chacun de leurs
membres.
Les exemples de la section suivante vous guideront pour raliser les oprations
basiques ncessaires lenvoi dun signal vers un servomoteur et son contrle
direct via un potentiomtre.

Raliser des mouvements de balayage


Ce premier exemple de servomoteur ne ncessite quun seul moteur auquel vous
pourrez appliquer toute une gamme de mouvements. Le servomoteur effectuera un
balayage allant de 0 o 179 o, puis reviendra sa position initiale dans un mouvement
rappelant un essuie-glace de voiture.

Le croquis Sweep
Il vous faut :
Un Arduino Uno

Un servomoteur

Des straps

Le cblage dun servomoteur est simple ; il comporte trois fils. Pour le connecter
votre Arduino, utilisez directement des straps entre les broches de lArduino et le
support du servomoteur comme lillustrent les figures 8-9 et 8-10. Le servomoteur
dispose parfois de trois connecteurs relis des fils gnralement de couleur rouge,
noir et blanc. Lacquisition des donnes et les calculs ncessaires pour les
dplacements du moteur sont effectus dans un circuit qui est embarqu dans le
servomoteur lui-mme. Il ne vous reste qu lalimenter et lui envoyer un signal
depuis lArduino.
Le rouge est connect au 5 V de lArduino afin dalimenter le moteur et sa circuiterie.
Le noir est connect GND, il sert de masse au servomoteur ; le blanc est connect
la broche 9 afin de contrler les rotations. La couleur des fils peut varier, aussi
vrifiez la documentation de votre moteur avant deffectuer le cblage. Un autre
schma de couleurs frquemment rencontr est rouge (5 V), marron (GND) et jaune
(signal).
FIGURE 8-9 Un servomoteur cbl pour votre Arduino.
FIGURE 8-10 Diagramme dun circuit de servomoteur.

Montez le circuit tel que dcrit et ouvrez le croquis Sweep en slectionnant Fichier-
>Exemples->Servo->Sweep. Le croquis Sweep se prsente comme suit :

// Sweep
// par BARRAGAN <http://barraganstudio.com>
// Cet exemple de code est vers dans le domaine
public.

#include <Servo.h>

Servo myservo; // Cration dun objet servo pour


contr-
ler le servomoteur
// Un maximum de huit objets servo
peuvent tre crs

int pos = 0; // Variable pour stocker la


position
du servo

void setup()
{
myservo.attach(9); // Associe lobjet servo la
bro-
che 9
}

void loop()
{
for(pos = 0; pos < 180; pos += 1) // Va de 0 degr
180
degrs
{ // par pas de 1
degr
myservo.write(pos); // Demande au servo
daller
// une position variable
pos

delay(15); // Attendre 15 ms afin


que le
// servo puisse
atteindre sa
position
}

for(pos = 180; pos >= 1; pos -= 1) // Va de 180


degrs
0 degr
{
myservo.write(pos); // Demande au servo daller
la
position pos

delay(15); // Attendre 15 ms afin que le


servo
puisse atteindre sa position
}
}

Lorsque vous aurez trouv le croquis, utilisez le bouton Vrifier pour vrifier la
syntaxe du code. Le compilateur devrait, comme toujours, mettre en vidence les
erreurs grammaticales en les surlignant en rouge dans la zone de messages.
Si le croquis se compile correctement, cliquez sur Tlverser pour transfrer le
croquis vers votre carte. Une fois que le chargement du croquis est achev, votre
moteur devrait commencer tourner de 180 o dans un sens puis dans lautre.
Si rien ne se passe, vrifiez votre cblage :
Assurez-vous de bien utiliser la broche 9 pour la ligne de donnes
(blanche/jaune).
Vrifiez que les autres fils du servomoteur sont correctement
connects aux autres branches.

Comprendre le croquis Sweep


Au dbut du croquis, vous remarquez une nouvelle instruction. Cest une directive qui
demande dinsrer au mme endroit le contenu dun fichier qui dfinit des variables et
des fonctions dune bibliothque (ou librairie). Une bibliothque runit un ensemble
de fonctions autour dun thme et vous vite de devoir crire vous-mme ces
fonctions. Ici, il sagit dune bibliothque pour contrler des servomoteurs.

#include <Servo.h>

La ligne suivante cre un objet logique sur le modle de la classe Servo. Car si la
bibliothque sait comment communiquer avec les servomoteurs, il faut donner un nom
aux objets qui vont incarner les composants. Dans notre cas, lobjet est nomm
myservo. Comme avec vos variables, vous pouvez utiliser nimporte quel nom.
Veillez cependant ce quil soit en rapport avec votre code et quil nutilise aucun
des mots rservs par le langage Arduino tels que int ou delay.

Servo myservo; // Cration dun objet servo pour


contr-
ler le servomoteur.
// Un maximum de huit objets servo
peuvent
tre crs

La dernire ligne de dclaration contient une variable dans laquelle sera stocke la
position du servomoteur.

int pos = 0; // Variable pour stocker la position du


ser-
vomoteur

Dans la routine de configuration, le seul lment renseigner est le numro de la


broche Arduino pour communiquer avec le servomoteur. Dans ce cas, vous allez
utiliser la broche 9, mais il pourrait sagir de nimporte quelle broche PWM.

void setup()
{
myservo.attach(9); // Associe lobjet servo la
bro-
che 9
}

La boucle excute deux actions simples qui sont situes dans des boucles de
rptition. La premire boucle for incrmente la valeur de la variable pos
progressivement de 0 180. Grce la bibliothque, vous pouvez crire les valeurs
en degrs au lieu dutiliser les valeurs comprises entre 0 et 255 utilises par le
contrle PWM. chaque itration de la boucle, la valeur est incrmente de 1, puis
est envoye vers le servomoteur en utilisant une fonction spcifique de la
bibliothque : <nomServo>. write(<valeur>). Une fois la valeur mise
jour, le code attend durant le court dlai de 15 millisecondes, temps ncessaire pour
que le moteur puisse atteindre sa nouvelle position. Contrairement dautres
dispositifs de sortie, lorsquun servomoteur est mis jour, il se positionne sur son
nouvel emplacement et ne ncessite pas dautres informations pour y demeurer.

void loop()
{
for(pos = 0; pos < 180; pos += 1)
{
myservo.write(pos);
delay(15);
}

La seconde boucle for ralise la mme opration, mais dans la direction oppose,
ramenant ainsi le servomoteur sa position initiale.

for(pos = 180; pos>=1; pos-=1)


{
myservo.write(pos);
delay(15);
}
}

Cet exemple est le plus simple que lon puisse mettre en uvre avec un servomoteur.
Il constitue un bon moyen pour tester si ce dernier fonctionne correctement.

Contrler mieux un servomoteur


Maintenant que vous matrisez le principe du servomoteur, vous pouvez essayer dy
ajouter un peu plus dinteraction. En utilisant un potentiomtre (un capteur
analogique), il est possible de contrler directement votre servomoteur comme vous
contrleriez la gchette dun flipper.

Le croquis Knob
Cet autre exemple illustre la manire dutiliser un potentiomtre pour positionner
laxe dun servomoteur dun nombre spcifique de degrs.
Il vous faut :
Un Arduino Uno

Une platine dessai

Un servomoteur

Une rsistance variable de 10 k

Des straps

Le servomoteur est cbl exactement comme dans lexemple Sweep, mais ici vous
aurez besoin de deux connexions supplmentaires, 5 V et GND, pour le
potentiomtre ; aussi vous utiliserez la platine dessai pour vous fournir ces broches
supplmentaires.
Connectez les broches 5 V et GND de lArduino aux rails positif (+)
et ngatif (-) de votre platine.

Connectez le servomoteur la platine en utilisant soit une range


de trois broches, soit trois straps.

Connectez la prise rouge la ligne 5 V, la prise noire/marron la


ligne GND et la prise blanche/jaune la broche 9 de lArduino.
Trouvez une place sur la platine pour le potentiomtre.

Connectez la broche centrale la broche A0 de lArduino et les


broches extrieures au 5 V et la masse GND de part et dautre.
Rfrez-vous au circuit de la Figure 8-11 et au schma de la Figure 8-
12.
Une fois le circuit achev, ouvrez le croquis en slectionnant Fichier->Exemples-
>Servo->Knob. Le code source de ce croquis est le suivant :

FIGURE 8-11 : Un servomoteur avec une molette de contrle.


FIGURE 8-12 : Un circuit de servomoteur pilot par un potentiomtre.

//Contrle la position dun servo avec un


potentiomtre
(rsistance variable)
// par Michal Rinott http://people.interaction-
ivrea.
it/m.rinott

#include <Servo.h>

Servo myservo; // Cration dun objet servo pour


contr-
ler le servomoteur

int potpin = 0; // Broche analogique pour connecter


le
potentiomtre
int val; // Variable stockant la valeur
depuis la
broche analogique

void setup()
{
myservo.attach(9); // Associe lobjet servo la
bro-
che 9
}

void loop()
{
val = analogRead(potpin); // lit la
valeur du
potentiomtre
// (Valeur
entre 0
et 1023)
val = map(val, 0, 1023, 0, 179); // Recalcule la
va-
leur pour lutiliser
// avec le
servo
(valeur entre 0 et 180)
myservo.write(val); // Positionne
le
servo en fonction de la
// valeur
recalcule
delay(15) ;
}

Vous noterez sans doute quelques divergences entre les commentaires et le code.
Lorsque quil est question du mouvement en degrs du servomoteur, il est fait mention
dune plage de valeurs entre 0 et 179 et dune autre plage de 0 180. Nen tenez pas
compte, il sagit probablement dune petite erreur lie au nombre important de
tutoriaux disponibles et au fait quil sagit encore de produits rcents et pas toujours
totalement finaliss.
La plage de valeurs correctes va de 0 179, ce qui donne bien 180 positions.
Lindexation partir de zro est une pratique courante avec Arduino.
Utilisez le bouton Vrifier pour valider votre code. Le compilateur devrait surligner
les ventuelles erreurs de syntaxe dans la zone Message.
Si le croquis se compile correctement, cliquez sur Tlverser pour le transfrer sur
votre carte. Votre servomoteur devrait tourner en mme temps que votre
potentiomtre. Il lui est asservi.
Si tel ntait pas le cas, vrifiez vos cblages :
Assurez-vous de bien utiliser la broche 9 pour connecter la ligne de
donnes (blanche/jaune) au servomoteur.

Vrifiez les connexions du potentiomtre et assurez-vous que la


broche centrale est connecte la broche analogique.

Vrifiez les connexions sur la platine dessai.

Comprendre le croquis Knob


En dabut de code source, la bibliothque (librairie) rfrence par Servo.h est incluse
puis un nouvel objet Servo est instanci. La broche dentre analogique est dclare
avec la valeur 0 afin dindiquer que vous utilisez lentre marque A0.
Vous avez peut-tre not que la broche est dsigne 0 et non A0 comme dans lautre
exemple. Cela ne pose pas de problme, car A0 est juste un alias de 0 tout comme
A1 est un alias de 1 et ainsi de suite. Lutilisation de la notation A0 permet de
clarifier le code, mais reste optionnelle.
La dernire variable stocker est la valeur de lecture qui deviendra la sortie :

#include <Servo.h>

Servo myservo; // Cration dun objet servo pour


contr-
ler le servomoteur
int potpin = 0; // Broche analogique permet de
connecter
le potentiomtre
int val; // Variable mmorisant la valeur lue
sur
la broche analogique

Dans la configuration, le seul lment dfinir est myservo qui utilise la broche 9.

void setup()
{
myservo.attach(9); // Associe lobjet servo la
bro-
che 9
}

Au lieu dutiliser des variables spares pour lentre et la sortie, ce croquis nen
utilise quune seule. En premier lieu, val est utilis pour stocker les donnes brutes
du capteur, une valeur allant de 0 1023. Cette valeur est ensuite traite par la
fonction map() afin quelle corresponde la plage de valeur allant de
0 179 utilise par le servo. Cette valeur est alors crite dans le servo via la fonction
myservo.write(). Ici encore, 15 ms dattente sont ajoutes afin que le moteur
puisse atteindre sa destination. Puis la boucle se rpte et met jour la position si
ncessaire.

void loop()
{
val = analogRead(potpin); // lit la valeur du
poten-
tiomtre
// (Valeur entre 0 et
1023)

val = map(val, 0, 1023, 0, 179); // Recalcule la


valeur
// pour
lutiliser
avec le servo (valeur entre 0 et 180)

myservo.write(val); // Positionne le
servo en
// fonction de la
valeur
recalcule
delay(15);
}
}

Avec ce simple ajout dans le circuit, il devient possible de contrler un servomoteur


avec nimporte quelle sorte dentre. Dans cet exemple, le code utilise une entre
analogique, mais avec quelques modifications, il pourrait tout aussi bien utiliser une
entre numrique.

Faites du bruit
Si vous avez termin les croquis du moteur, vous matrisez maintenant le principe des
actions physiques. Prparez-vous un nouveau dfi : faire de la musique (au moins du
bruit) avec votre Arduino. Vous pouvez en effet gnrer des sons lectroniques en
utilisant un buzzer pizolectrique.

Le buzzer pizolectrique
On retrouve le buzzer pizolectrique dans des milliers dappareils. Si vous entendez
un tic, un buzz ou un bip, il provient certainement dun buzzer. Le buzzer pizo est
compos de deux couches, une plaque de cramique et une plaque de mtal relies
entre elles. Lorsque llectricit passe dune couche lautre, le pizo se courbe, au
niveau microscopique, produisant ainsi du son (voyez sur la Figure 8-13).

FIGURE 8-13 Une exagration des mouvements minuscules dun pizo.

Si vous alternez le sens du courant entre tension et masse, le pizo se courbe et se


recourbe, ce qui gnre un son (tic). Si cela se produit assez rapidement, ce tic
devient une vibration puis un son. Ce son est assez brut, semblable la sonnerie des
anciens tlphones ou aux sons des jeux vido des annes 80. Il son est connu son le
nom donde carre.
chaque fois que le pizo change de polarit, il produit une onde carre aux fronts
abrupts rappelant un carr. Il existe dautres types dondes sonores au son moins
tranch, telles que les ondes triangulaires en dents de scie ou les ondes sinusodales.
La Figure 8-14 illustre leurs diffrences.

FIGURE 8-14 Carres, triangulaires ou sinusodales, ces ondes aux formes diffrentes
produisent des sons diffrents.

Les appareils numriques comme celui-ci, ainsi que dautres dispositifs, gnrent des
ondes carres produisant un bourdonnement. Le buzzer nest pas limit une seule
hauteur de son (en jouant sur la largeur entre les carrs), En modifiant la frquence de
changement de polarit, vous gnrez des notes.

Le croquis toneMelody
Avec ce croquis, vous allez appendre modifier la frquence de votre pizo et jouer
une mlodie prdfinie. Cette configuration vous permettra ensuite de composer vos
propres mlodies.
Les buzzers pizos sont fournis dans de nombreux kits et il en existe un grand nombre
de formes diffrentes. Ils peuvent tre nus comme la Figure 8-15 ou intgrs dans
des gangues de plastique de diffrentes formes ressemblant des cylindres ou des
pices de monnaie en plastique. Ils peuvent galement disposer de diffrentes
connexions prenant la forme de tiges dpassant de la partie infrieure du pizo ou
alors de fils sortant sur le ct.
FIGURE 8-15 Un buzzer pizo en dehors de sa coquille.

Il vous faut :
Un Arduino Uno

Une platine dessai

Un buzzer pizolectrique

Des straps

Connectez le buzzer pizo sur la platine de tests et utilisez une paire de straps pour le
connecter la broche numrique 8 dune part et sur la masse de lautre. Certains
pizos ont une polarit, aussi, assurez-vous de bien connecter la broche 9 au positif +)
et la masse GND au ngatif (-).
Dautres pizos par contre nont pas de polarit ; si vous ne voyez aucun symbole, ne
vous inquitez pas. Le croquis du circuit pizo est illustr la Figure 8-16, le schma
du circuit la Figure 8-17.
Construisez le circuit puis chargez le croquis appropri en slectionnant Fichier-
>Exemples->02. Digital->toneMelody. Vous obtiendrez le code suivant :

/*

toneMelody

Joue une mlodie

Circuit:
* Un haut-parleur 8-ohms ou un buzzer sur la broche
num-
rique 8

cre le 21 Jan 2010


modifi le 30 Aot 2011
par Tom Igoe

Ce code exemple est dans le domaine public

http://arduino.cc/en/Tutorial/Tone

*/
#include pitches.h

// Notes de la mlodie:
int melody[] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0,
NOTE_B3,
NOTE_C4};

// Dure de la note: 4 = quart de note ou noire,


// 8 = huitime de note ou croche, etc.:

int noteDurations[] = {
4, 8, 8, 4,4,4,4,4 };

void setup() {
// Pour chaque note de la mlodie...
for (int thisNote = 0; thisNote < 8; thisNote++) {
// Pour calculer la dure de la note, on divise
une
seconde par le type de note
// ex. quart de note = 1000 / 4, huitime de note
=
1000/8, etc.
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);

// Pour distinguer les notes, nous indiquons un


dlai
minimum entre elles
// dure de la note + 30 % semble bien
fonctionner:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// Arrte de jouer:
noTone(8);
}
}
void loop() {
// Il nest pas ncessaire de rpter cette mlodie.
}
FIGURE 8-16 Un circuit de buzzer pizo. Il y a parfois deux trous dcart entre les pattes du
buzzer.
FIGURE 8-17 Le schma dun circuit de buzzer pizo.

Dans ce projet, lditeur de code source Arduino offre une seconde page, donc un
second fichier. Voyez longlet intitul pitches.h. Il contient toutes les dfinitions de
valeurs pour les notes faire mettre par votre buzzer. Dans votre dossier de croquis
Arduino, cet onglet apparat sous forme de fichier individuel qui doit tre inclus en
utilisant la directive #include suivie du nom du fichier inclure. Ici, nous nous
utilisons #include pitches.h .

/*************************************************
* Public Constants
*************************************************/
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58

#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880

#define NOTE_AS5 932


#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978

Lorsque vous aurez lu le croquis, utilisez le bouton Vrifier pour vrifier le code. La
zone de messages en bas devrait vous indiquer, en les surlignant en rouge, toutes les
erreurs grammaticales trouves par le compilateur.
Si le croquis se compile correctement, utilisez Tlverser pour le transfrer sur votre
carte. Cela fait, vous devriez entendre le buzzer vous chanter une jolie mlodie. Pour
la rcouter, appuyez sur le bouton Reset de votre Arduino.
Si vous nentendez pas le buzzer, vrifiez votre cblage avec soin.
Assurez-vous davoir bien choisi la broche 8 pour la sortie.

Vrifiez que votre pizo est correctement positionn. Les symboles,


sils ne sont pas directement visibles, peuvent tre cachs dessous.
Si vous nen voyez pas, essayez de positionner le pizo selon lautre
orientation.

Vrifiez les connexions vers la platine dessai.

Comprendre le croquis toneMelody


Cest le premier projet de ce livre qui utilise plusieurs onglets. Dans tous les projets
prcdents, il ny avait quun onglet avec le code source du croquis. Ici, il y a un
second onglet intitul pitches.h qui montre le contenu dun fichier qui sert de
table de rfrence des valeurs de toutes les notes de musique pouvant tre joues par
le pizo. Comme ce code na pas vocation changer, il na pas besoin dencombrer le
fichier de code principal.
Le fichier pitches.h sera insr lors de la compilation. Il sagit dun fichier
externe. Nous allons utiliser les symboles quil dfinit pour dsigner les hauteurs de
sons que nous voulons faire mettre.

#include pitches.h
Maintenant que le croquis connat les diffrentes notes, nous pouvons crire la
mlodie. Elle est contenue dans un tableau afin que les notes soient disposes selon
lordre de lecture. Pour en apprendre davantage sur les tableaux, reportez-vous
lencart Introduction aux tableaux ci-dessous. Les noms tels que NOTE_C4 font
rfrence aux noms des notes contenus dans pitches.h.
Si vous lisez le contenu de pitches.h, vous vous apercevrez quil utilise une
directive du langage C nomme define pour chacune des rfrences aux notes
suivie dun nombre ; ainsi #define NOTE_ C4 262 associe la valeur
numrique 262 au nom NOTE_C4 (le quatrime Do en notation anglaise puisque Do
R Mi Fa Sol La Si donneCDEFGAB).

// Notes de la mlodie:
int melody[] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0,
NOTE_B3,
NOTE_C4};

Sans rythme, votre mlodie va sembler trange. Nous allons donc stocker la dure de
chaque note dans un second tableau.

// Dure des notes : 4 = quart de note ou noire, 8 =


hui-
time de note, etc.:
int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 };

Dans setup, une boucle for est utilise pour mettre tour tour chacune des huit
notes, numrotes de 0 7. La valeur thisNote est utilise comme indice pour
rfrencer les lments corrects de chaque tableau.

void setup() {
// pour chaque note de la mlodie:
for (int thisNote = 0; thisNote < 8; thisNote++) {

La dure est calcule en divisant 1 000 (ou une seconde) par la dure souhaite :
quatre pour un quart de note ou une noire, huit pour un huitime ou une croche et ainsi
de suite. Cette valeur est ensuite crite dans la fonction prdfinie tone(), qui
enverra la note courante sur la broche 8 pendant la dure dfinie.

// Pour calculer la dure de la note, on divise une


se-
conde
// par le type de note.
// ex noire = 1000 / 4, croche = 1000/8, etc.
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);

Une courte pause entre les notes est ajoute afin de mieux dfinir ces dernires. Dans
ce cas, il sagit dune dure relative la longueur de la note qui correspond 30 % de
la dure courante.

// pour distinguer les notes, nous indiquons un


temps
minimum entre elles.
// dure de la note + 30 % semble bien fonctionner
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);

Une fois toutes les notes joues, la fonction noTone() sert ramener le silence en
dsactivant la broche 8.

// Arrte de jouer
noTone(8);
}
}

Vous serez peut-tre tonn, mais il ne se passe rien dans la boucle principale loop().
Le but tait de jouer une seule fois la mlodie, et nous venons de le faire dans setup().
La mlodie pourrait tre dplace lintrieur de la boucle afin quelle puisse tre
joue indfiniment, mais gare aux maux de tte.

void loop() {
// inutile de repter la mlodie.
}

Cet exemple montre comment faire jouer une mlodie daccueil au dbut dun croquis.
Vous pourrez vous en inspirer dans certains projets futurs.
INTRODUCTION AUX TABLEAUX

Dans sa reprsentation la plus simple, un tableau est une liste de valeurs.


Pensez-y comme une liste de courses, comme lillustre la table ci-dessous.
Chaque ligne contient une donne qui est repre par un nombre appel
indice. Ce type de tableau est appel tableau une dimension, il ne contient
quun seul lment de donnes par ligne.

Indice Valeur

1 pommes

2 bananes

3 oranges

Mais en quoi un tableau concerne-t-il Arduino ? Les tableaux peuvent stocker


des valeurs entires, des valeurs flottantes, des caractres, ou tout autre type
de donnes, mais ici jutilise des entiers pour faciliter la comprhension. Voici
un tableau contenant six valeurs entires.

int tabloSimple[] = {1, 255,


-51, 0, 102, 27};

La mention de type de donne int stipule que les donnes stocker sont des
valeurs entires. Ce type pourrait tre float (pour des valeurs virgule
flottante, donc non entires) ou char pour des caractres alphanumriques.
Le nom du tableau est tabloSimple, mais vous pourriez lui donner nimporte
quel autre nom. Les crochets ouvrants et fermants ([ ]) contiennent la taille du
tableau (cest--dire le nombre de valeurs quil pourra contenir). Ici, aucune
taille nest indique, puisque nous fournissons les lments y stocker, ce qui
permet au compilateur de dduire que le tableau contient six lments. Les
nombres entre virgules et entre les accolades { } sont les valeurs dfinies dans
le tableau. Si aucune valeur nest dfinie au dpart, le tableau est vide, mais
dans c cas, il faut indiquer une taille.
Voici dautres manires valides pour dclarer des tableaux :

int tabloEntiers[10];

float tabloFractionnaire[5] =
{2.7, 42.1, -9.1, 300.6};

char tabloTexte[14] = Salut


tout le monde ! ;

Dans le cas dun tableau de caractres (type char), il faut ajouter le texte qui
sera le contenu. Respectez cette rgle sinon vous obtiendrez des erreurs !

Maintenant que votre tableau est dfini, vous devez apprendre lutiliser. Pour
lire ou crire les valeurs stockes dans le tableau, vous devez vous y rfrer via
leur indice. Ainsi, si vous souhaitez envoyer une valeur au moniteur srie, vous
devrez crire :

Serial.println(tabloSimple[2]);

Ce qui affichera la valeur -51 qui correspond llment en troisime position


dans le tableau (souvenez-vous que nous commenons zro, donc cest
lindice 2).

Vous pouvez de la mme faon modifier les valeurs du tableau. Une manire
efficace dy parvenir consiste utiliser une boucle for afin de parcourir le
tableau (se rfrer au Chapitre 11 pour plus de dtails) comme lillustre
lexemple suivant :

for (int i = 0; i < 6; i++) {

tabloSimple[i] = analo
gRead(sensorPin);

}
La boucle for est ici excute six fois, augmentant la variable ici de 1
chaque tour. La mme variable sert aussi dindice dans le tableau ; ainsi

chaque nouvelle lecture analogique de sensorPin est stocke la position


dsigne par lindice courant et cet indice est incrment pour le prochain tour
de boucle.

Les tableaux peuvent tre bien plus complexes, stocker de nombreuses


chanes de caractres et mme tre multidimensionnels, la manire des
tableurs dans lesquels de nombreuses valeurs sont stockes pour chaque
indice.

Pour plus dinformations, rendez-vous sur la page de rfrence officielle


dArduino consacre aux http://arduino.cc/en/Reference/Array.

Crer votre instrument interactif


Dans la section prcdente, vous avez dcouvert comment remplacer dans votre projet
le clignotement dune LED par un son. Dans le prochain exemple, vous irez bien plus
loin dans lutilisation des sons puisque vous allez crer votre propre instrument, un
instrument semblable un Theremin. Le Theremin, ainsi nomm en raison du nom de
son inventeur Lon Theremin, a t dvelopp dans les annes 20. Ce fut lun des
premiers instruments lectroniques. Il fonctionne en dtectant les pertubations de son
champ lectromagntique provoques par les dplacements des mains de linterprte :
une main permet de jouer sur le volume et lautre sur la hauteur du son.

Le croquis PitchFollower
Dans ce croquis, vous allez dcouvrir comment raliser un Theremin faible cot en
utilisant un pizo et un capteur de lumire.
Il vous faut :
Un Arduino Uno

Une platine dessai

Un pizo

Un dtecteur de lumire
Une rsistance de 4,7 ohms

Des straps

Ce circuit est divis en deux : le pizo et le circuit de dtection de lumire. Le pizo


est cbl comme dans le croquis toneMelody, avec un fil sur la broche digitale 8 et
lautre sur GND. Le capteur de lumire est connect Analog 0 et la masse (comme
lillustrent les figures 8-18 et 8-19). Si vous ne disposez pas dune rsistance
de 4,7 Kohms (jaune, violet, rouge), utilisez celle dont vous disposez qui sen
rapproche le plus (par excs).
Construisez le circuit puis ouvrez le croquis en slectionnant Fichier->Exemples-
>02.Digital->tonePitchFollower.

/*
Pitch follower

Produit un son qui change de hauteur selon le


changement
dentre analogique

Circuit :
* Buzzer on digital pin 8
* photoresistor on analog 0 to 5 V
* 4.7K resistor on analog 0 to ground

cr 21 Jan 2010
modifi 9 Avr 2012
par Tom Igoe

Cet exemple est dans le domaine public.

http://arduino.cc/en/Tutorial/Tone2

*/

void setup() {

// initialise des communications en srie (dbogage


seul): Serial.begin(9600);
}

void loop() {
// petit sensor:
int sensorReading = analogRead(A0);
// imprime la lecture du sensor pour connatre la
plage
Serial.
println(sensorReading);
// mappe le son de la plage de lentre analogique.
// change le minimum et maximum du numro dentre
// en fonction de la plage du sensor :
int thisPitch = map(sensorReading, 400, 1000, 100,
1000);

// lit le son:
tone(8, thisPitch, 10);
delay(1); // dlai entre les lectures pour stabilit
}

Comme vous savez le faire maintenant, utilisez la commande Compiler pour vrifier
le code. Toute erreur de syntaxe apparatra en rouge dans la zone Message.
Si le croquis se compile correctement, utilisez Tlverser pour transfrer le croquis
vers votre carte. Cela fait, vous devriez disposer dun capteur de lumire capable
dinfluer sur le son de votre buzzer.
Si tel ntait pas le cas, assurez-vous que la zone est correctement claire, et orientez
une lampe vers votre platine dessai. Cela devrait augmenter la diffrence lorsque
vous couvrirez le dtecteur de lumire de votre main.
FIGURE 8-18 Un circuit Theremin contrl par un capteur de lumire.
FIGURE 8-19 Le schma dun Theremin contrl par un capteur de lumire.

Si rien ne se passe, revrifiez le cblage :


Assurez-vous de bien utiliser les valeurs correctes pour les broches
dentre et de sortie.

Vrifiez que votre pizo est orient du bon ct.

Vrifiez les connexions sur votre platine dessai.

Comprendre le croquis
Si ce croquis est bien plus court que le prcdent, cest quil convertit directement en
frquences les informations provenant du dtecteur de lumire plutt que de passer
par une table de notes. Cest ce qui permet de glisser dune note lautre au lieu de
passer par des tapes. On appelle cela le portamento.
Dans la fonction setup(), le port srie est ouvert pour permettre de contrler les
entres du dtecteur en temps rel.

void setup() {
// initialise des communications en srie(dbogage
seul):
Serial.begin(9600);
}

Dans la boucle principale, le dtecteur de lumire est lu depuis la broche


analogique 0. Cette information est galement transmise au moniteur srie.

void loop() {
// lit le senseur:
int sensorReading = analogRead(A0);

// Affiche la lecture du senseur


println(sensorReading);

Pour convertir la plage de valeurs du dtecteur vers la plage de frquence que le


buzzer peut couvrir, nous utilisons la fonction map() :

// Rchelonne le ton de la plage de lentre


analo-
gique.
// change le minimum et le maximum
// en fonction de la plage du senseur
int thisPitch = map(sensorReading, 400, 1000, 100,
1000);

La fonction tone gnre en sortie la note correspondant la valeur fournie par le


dtecteur et dfinit une dure trs courte de 10 ms. Cette dure permet de rendre le
son audible, cependant la dure relle sera dtermine par le temps ou votre main
restera au-dessus du capteur, comme nous lavons indiqu prcdemment.

// Gnre le son
tone(8, thisPitch, 10);

Enfin, un court dlai est ajout la fin de la boucle pour amliorer la stabilit des
lectures.

delay(1); // dlai entre les lectures pour


stabilit}
}

Pourquoi ne pas crer un groupe itinrant de joueurs de Theremin avec vos amis ?
En cas de souci, vrifiez que le premier paramtre de la fonction tone() indique bien
le numro de broche de sortie numrique 8.
III
Construire sur les bases

DANS CETTE PARTIE

Je vais commencer cette partie par prsenter diffrentes


utilisations dArduino travers quelques projets raliss un peu
partout dans le monde. Vous serez sans doute impatient de
passer ensuite laction. Vous apprendrez alors comment
transformer un prototype de base en un projet solide. Pour ce
faire, vous apprendrez entre autres souder, bien utiliser le
code pour amliorer la faisabilit du projet ainsi qu choisir de
bons capteurs.
Chapitre 9
Quelques exemples de ralisations
DANS CE CHAPITRE
Dcouvrir des projets Arduino russis

Comprendre leur fonctionnement

Trouver des ides pour vos propres projets Arduino

D
ans le chapitre prcdent, je vous ai prsent des projets Arduino basiques, mais
il nest pas toujours vident daller plus loin. Dans ce chapitre, vous dcouvrirez
des projets qui fonctionnent actuellement un peu partout dans le monde, bass sur
Arduino, et qui ont permis la ralisation dexpositions dart tourdissantes et
interactives ou de prototypes trs divers de contrle de lenvironnement.

Skube
Le projet Skube a t dvelopp par Andrew Nip, Ruben van der Vleuten, Malthe
Borch et Andrew Spitz dans le cadre de la ralisation dun module du projet Tangible
User Interface destin au Copenhagen Institute of Interaction Design (CIID). Il
constitue un excellent exemple de la manire de raliser un prototype de produit bas
sur Arduino.
Skube (illustr sur la Figure 9-1) est un produit qui vous permet dinteragir avec un
service de musique numrique auquel on accde traditionnellement via un ordinateur.
Le but de ce projet consiste revisiter la manire dont les appareils audio
fonctionnent et dont ils sont utiliss pour optimiser ces services.
FIGURE 9-1: Avec laimable autorisation dAndrew Spitz. Un Skube.

Chaque Skube fonctionne selon deux modes, Playlist et Dcouverte, mode que vous
choisissez en tapant en haut de lappareil. Les Playlists jouent une suite prdfinie de
morceaux, les Dcouvertes cherchent des morceaux ou des artistes similaires. Les
Skube peuvent tre galement combins de manire mlanger des playlists
prdfinies. Ils sembotent physiquement les uns dans les autres.

Comment a marche ?
Lquipe Skube offre gracieusement une grande quantit de documentations et
dexcellentes vidos sur les deux prototypes achevs. Chaque Skube est compos dun
Arduino et dun module sans fil XBee (ce livre ne dispose pas dassez despace pour
couvrir cet incroyable module, mais en effectuant une recherche rapide sur le Web,
vous devriez trouver de nombreuses ressources en ligne le concernant). La fonction
principale de lArduino consiste ici agir en tant quintermdiaire, hbergeant de
nombreux capteurs et appareils de communication diffrents et relayant les donnes
correctes vers chacun dentre eux. Le capteur tactile est le mme que celui dcrit au
chapitre 12 de ce livre, il utilise un simple lment pizo en charge de surveiller les
vibrations. Lorsque lon associe des Skube entre eux, leurs aimants agissent comme
des interrupteurs lorsque llment se rapproche, indiquant ainsi clairement au
dispositif la prsence de laimant.
Le projet dispose galement dun module de radio FM, qui est utilis par chaque
Skube pour produire de la musique. En utilisant le module sans fil XBee, vous pouvez
communiquer avec chaque Skube et les coordonner via un ordinateur grce un
logiciel spcial crit avec le langage Max/MSP.
Max/MSP est un langage de programmation visuel utilis dans de nombreux projets
audio ou musicaux. Via lutilisation de Max/MSP, lquipe Skube rcupre des
donnes provenant des services Last.fm et Spotify pour raliser les playlists et
retrouver des artistes aux caractristiques similaires. Ces entreprises fournissent
toutes deux diffrents services leurs consommateurs (par exemple, la possibilit
dassembler des playlists bases sur vos morceaux favoris ou de fournir une base de
donnes sur les albums et les artistes) ; elles proposent galement ces fonctionnalits
aux dveloppeurs afin quils puissent les intgrer dans leurs propres applications. Ce
type de ressources est nomm Application Programming Interface (API). Les API de
Last.fm (http://www.last.fm/api) et de Spotify
(https://developer.spotify.com/technologies/web-api/) ne
constituent que deux exemples et il en existe beaucoup dautres.
Vous remarquerez que ce projet comporte de nombreux lments, bass la fois sur la
communication sans fil utilisant Arduino (ce qui est dj un sujet en soi) et sur la
communication avec dautres logiciels et lchange avec dautres services sur
Internet. Pour les plus avancs dentre vous, cette manire dutiliser Arduino vous
enseignera comment intgrer du matriel avec dautres logiciels. Dans la cinquime
partie, je vous prsenterai dautres logiciels et nous verrons plus en dtail ces
processus de communication.

Aller plus loin


Vous obtiendrez plus dinformations sur ce projet en vous reportant aux pages du site
Web CIID
http://ciid.dk/education/portfolio/idp12/courses/tangible-
user-interface/projects/skube/ et sur le site dAndrew Spitz
ladresse http://www.soundplus-design.com/?p=5516.

Chorus
Chorus est une installation cintique ralise par United Visual Artists (UVA), un
groupe londonien spcialis dans lart et le design. UVA pratique de nombreuses
disciplines, telles que la sculpture, larchitecture, le spectacle vivant et dautres
installations visuelles. Ce groupe a la rputation de crer des projets visuellement
poustouflants qui repoussent les limites de ces disciplines.
Chorus (illustr la Figure 9-2) utilise le son, la lumire et le dplacement pour des
effets thtraux qui illustrent parfaitement quArduino peut tout aussi bien jouer un
rle dans dimmenses installations que pour de minuscules prototypes. Cette
installation est constitue de huit grands pendules noirs se balanant davant en
arrire, mettant simultanment du son et de la lumire. Les spectateurs peuvent
marcher sous les pendules, simmergeant alors dans la performance. Chaque pendule
dispose de sa propre partition, ralise par Mira Calix, qui devient audible lorsque
lauditeur se rapproche suffisamment.

Comment a marche ?
Dans ce projet, un Arduino est utilis pour grer la lumire et le son ainsi que le
dplacement des pendules. Le balancement de chaque pendule est contrl par un
moteur lectrique mont sur un engrenage rducteur. Ce moteur est contrl par un
circuit relais, permettant lArduino de piloter le comportement de cet norme engin
mcanique. Chaque pendule dispose de deux cartes, chacune contenant 50 LED qui
fournissent la lumire, et dun haut-parleur fix sur la base du pendule. LArduino lui-
mme est contrl par un logiciel spcifique dont le rle est denvoyer et de recevoir
constamment des donnes qui permettront de coordonner les mouvements des
pendules et les partitions.

Avec laimable autorisation de United Visual Artists.

FIGURE 9-2 Chorus bat son plein.

Ce projet dmontre que la matrise dune discipline artistique, mcanique ou


architecturale combine lutilisation dArduino peut vous permettre de raliser des
effets incroyables. Sparment, chaque lment de ce projet est relativement simple :
contrler un moteur, contrler une LED, jouer une mlodie. Le vrai dfi survient
lorsque la taille de ces composants augmente. Le contrle de moteurs puissants
ncessite une connaissance des charges et de la mcanique, le contrle de nombreuses
LED requiert une bonne comprhension des tensions et des courants levs, jouer de
la musique en haute dfinition ncessite un matriel spcifique. Vous dcouvrirez au
chapitre 13 comment ajouter des cartes filles votre Arduino pour raliser des
fonctionnalits similaires celle de Chorus. Augmenter la taille de votre projet ou son
nombre de sorties peut vite devenir un dfi, nous verrons dans les
Chapitres 14 et 15 les principaux cueils viter pour le remporter.

Pour aller plus loin


Vous trouverez la page de ce projet sur le site Web dUVA :
http://www.uva.co.uk/work/chorus-wapping-project#/0
Il existe galement un excellent article de Vince Dziekan couvrant en dtail le projet
Chorus ladresse :
http://fibreculturejournal.org/wp-content/pdfs/FCJ-
122Vince%20Dziekan.pdf

Push Snowboarding
Push Snowboarding est un projet collaboratif initi entre Nokia et Burton dont le but
est de permettre la visualisation des donnes concernant vos performances en
snowboard.
Une entreprise nomme Vitamins Design Ltd avait t contacte par lagence
Hypernaked pour concevoir et raliser un jeu de capteurs sans fil pouvant
communiquer avec un tlphone mobile situ dans la poche dun pratiquant de
snowboard. Vitamins, fonde par Duncan Fitzsimons, Clara Gaggero et Adrian
Westaway, est une entreprise quils dfinissent eux-mmes comme tant un studio de
conception et dinvention. Ils sont bass Londres o ils dveloppent et ralisent
des produits, des expriences, des concepts et des systmes. Ils ont travaill sur un
grand nombre de projets et interviennent selon leurs propres mots sur des dfils de
mode comme sur des blocs opratoires, travaillant aussi bien avec des snowboarders
quavec des ouvriers... pour du thtre exprimental ou des retraits
technophobiques .
Pour le projet de snowboard, Vitamins a conu un jeu de capteurs ayant la forme de
botes imprimes en 3D (Figure 9-3) destins mesurer la rponse galvanique de la
peau, la frquence cardiaque, le dplacement en 3D, la position, la localisation
gographique, la vitesse et laltitude. Ces donnes sont alors superposes la vido
dune course de snowboard en direct afin de mettre en vidence le lien entre les
diffrentes situations rencontres par le snowboarder et ses rponses physiologiques.
Ce projet constitue un excellent exemple de ralisation dun produit avec Arduino
plus proche dun produit sur mesure que dun prototype.
Avec laimable autorisation de Vitamins Desing Ltd.

FIGURE 9-3 Botes contenant des capteurs destins aux snowboarders.

Comment a marche ?
Chaque capteur se trouve dans une bote tanche disposant dun bouton
dalimentation. Lorsquil est allum, lArduino initie une communication sans fil avec
le smartphone afin de lui transfrer toutes les donnes dont il dispose. De l, le
smartphone, grce ses capacits de traitement avances, traite et compile les
donnes.
Le premier dfi de ce projet rside dans sa taille. En effet, si les dtecteurs peuvent
tre de taille rduite, lArduino lui-mme occupe un peu de place et le snowboarder
doit en emporter plusieurs ; les donnes elles-mmes risquent de devenir inutiles si
leur collecte gne les mouvements. Cest pourquoi chaque bote contenant un capteur
est base sur un Arduino Pro Mini trs mince et dune surface de seulement 18 mm
x 33 mm. Il en va de mme de lalimentation qui est fournie par une batterie
rechargeable au lithium du mme modle que celle que lon retrouve dans les modles
rduits davion ou dans les smartphones.
Le projet utilise une varit de capteurs : capteurs de pression disposs sur les pieds
pour juger de lquilibre, units de mesure inertielle (IMU) aussi appeles capteurs
de degrs de libert pour trouver lorientation en 3D du snowboarder, capteur de
rponse galvanique de la peau pour mesurer le niveau de sudation du snowboarder et
capteur de frquence cardiaque pour suivre son rythme cardiaque.
Ces donnes sont envoyes au tlphone via un module de liaison sans fil Bluetooth
situ dans chacune des botes. Les modules Bluetooth sont petits, ils constituent un
moyen fiable et scuris de connecter sur une courte distance un capteur et le
tlphone mobile rang dans la poche du snowboarder. Les donnes ainsi collectes
peuvent tre associes dautres donnes, comme celles du GPS fourni par le
tlphone, et sont ensuite traites par ce dernier via un logiciel personnalis.
Tous les capteurs de ce projet sont disponibles chez la plupart des revendeurs
Arduino en ligne ; ils sont accompagns dexemples et de tutoriaux vous permettant de
les intgrer dans vos propres projets. La ralisation de ce projet est un excellent
exemple pour les aspirants arduinistes. La combinaison des capteurs fournit une mine
dinformations aux snowboarders qui peuvent ensuite les utiliser pour amliorer leur
technique et leurs performances. De plus, ces produits ont t conus pour supporter
des environnements extrmes. Llectronique a t soigneusement protge tout en
restant accessible, une couche isolante a mme t ajoute pour piger toute trace
dhumidit.

Aller plus loin


Vous trouverez plus de dtails sur le projet sur le site Web de Vitamins ladresse
http://vitaminsdesign.com/projects/push-snow-boarding-
for-nokia-burton/.

Baker Tweet
Baker Tweet est un projet ralis par Poke qui met des tweets pour prvenir que des
produits viennent de sortir du four de lAlbion Caf. Poke est une entreprise innovante
base Londres et New York. Elle est spcialise dans tout ce qui a rapport avec le
numrique. Le projet rsulte dune demande faite Poke London pour promouvoir
louverture dun nouveau caf Albion dans la ville. La rponse fut de raliser une
bote prvenant que du pain, des croissants ou des viennoiseries tout chauds attendent
les clients. Vous pouvez voir une illustration de cet appareil sur la Figure 9-4.
Rendez-leur visite si vous passez dans le coin !
Avec laimable autorisation de Poke London.

FIGURE 9-4 Le Backer Tweet en action la boulangerie Albion.

Comment a marche ?
La bote magique qui produit des messages Twitter dispose dune interface simple
constitue dun slecteur rotatif, dun bouton et dun cran LCD. Le slecteur sert
choisir le type de viennoiserie qui vient de sortir du four Twitter. Le tweet est
affich sur lcran LCD. Aprs avoir vrifi le message, lutilisateur appuie sur le
bouton pour envoyer le tweet. Il reoit alors confirmation lcran comme quoi le
tweet a bien t envoy. Cette interface simple est idale pour un caf trs frquent
car elle ne requiert que trs peu de temps pour mettre jour le statut en ligne. Pour
ajouter de nouveaux articles, le projet repose sur une interface Web qui permet
denrichir la liste.
Le cur de ce projet est constitu dun Arduino qui communique avec Internet en
utilisant soit une connexion Internet filaire base sur une carte fille Ethernet Arduino,
soit sur une connexion sans fil base sur un adaptateur Wi-Fi Linksys. Le slecteur
fournit une entre analogique, le bouton une entre numrique. Lorsquils sont
combins avec un cran LCD, ils composent une interface utilisateur permettant
facilement de choisir un lment dans une liste et denvoyer des tweets.
Le prototype est protg dans un botier robuste afin dempcher les mains farineuses
dendommager ses circuits. Ce projet illustre avec brio comment un Arduino peut
raliser rapidement et simplement une tche rptitive et consommatrice de temps. Ce
prototype est adapt son environnement, il est assez robuste pour survivre une
utilisation constante grce des lments en acier inoxydable. Il est simple nettoyer,
et ce mme dans une boulangerie en pleine effervescence. La complexit de ce projet
rside dans la communication avec Internet pour envoyer des donnes sur le Web.

Aller plus loin


Vous trouverez de plus amples informations sur le site de Baker Tweet ladresse
http : // www.bakertweet.com et sur la page du projet Poke London :

www.pokelondon.com/portfolio/bakertweet
Prenez le temps de jeter un il sur les excellentes photos des prototypes qui illustrent
le dveloppement du projet depuis la planche pain jusqu la boulangerie :
http://flickr.com/photos/aszolty/sets/72157614293377430/

Compass Lounge et Compass Card


Le Compass Lounge a t dvelopp dans le cadre de la ralisation dune nouvelle
aile du muse de la marine nationale de Londres. Le studio Kin bas Londres a
conu pour cette occasion des lments interactifs bass sur Arduino permettant au
public dinteragir avec les archives numriques et les diffrentes pices exposes.
Un ensemble de visionneuses numriques ranges dans des tiroirs permettent aux
visiteurs de parcourir les archives en ligne du muse et daccder aux documents les
plus populaires en haute rsolution. Lorsquun tiroir est ouvert, un cran tactile de
grande dimension est activ, et le visiteur peut parcourir les lments affichs.
Lorsque les visiteurs consultent un document, des LED masques affichent sa
rfrence afin de pouvoir consulter larchive physique correspondante (Figure 9-5).
Avec laimable autorisation de Kin.

FIGURE 9-5 Les LED masques clairent le fond dcran.

LArduino gre galement un second aspect de ce projet nomm systme Compass


Card : chaque visiteur se voit attribuer une carte permettant de collecter des lments
aux quatre coins du muse. Des points de collecte sont disposs ct de certaines
pices qui permettent de scanner la carte et ainsi de prendre note du parcours des
visiteurs et des lments numriques quils ont recueillis. Ces derniers peuvent alors
consulter ces lments depuis le Lounge Compass ou de chez eux via un navigateur.

Comment a marche ?
Les visionneuses mettent en uvre deux projets Arduino simples afin denrichir le
contenu numrique affich par les grands crans tactiles.
En premier lieu, lArduino est utilis pour activer les crans lorsque les tiroirs sont
ouverts. Si les visionneuses restent allumes toute la journe sans tre utilises, leurs
crans risquent dtre marqus (laissant une sorte dombre de limage reste
immobile). Laffichage dun cran noir lorsque les tiroirs sont referms permet de
limiter cette usure et de prolonger la vie des moniteurs. Ce rsultat est obtenu grce
un micro-interrupteur plac sur le fond de chaque tiroir. Comme avec le croquis
Button du Chapitre 7, chaque fois que le bouton est press, un caractre est envoy
via le port srie pour indiquer au moniteur de passer en veille. Ce type de
communication est expliqu au Chapitre 8.
Au-dessus des tiroirs est dispos un afficheur LED masqu et compos de ranges
de LED alignes sous forme de grille. Ces ranges sont similaires au ruban de LED
adressable dcrit au Chapitre 15 ; nous utilisons ici une codification approprie qui
permet dafficher les valeurs voulues. Ces valeurs sont ensuite envoyes sur le port
srie sous forme de chanes de caractres via un logiciel spcifique de sorte que la
rfrence correcte apparaisse avec limage associe.
La Compass Card constitue un excellent exemple de lutilisation dune (relativement)
vieille technologie dans un nouveau et intressant contexte. Le systme lui-mme est
bas sur lutilisation de codes-barres permettant de reconnatre les cartes scannes. Il
renvoie en outre lArduino un numro qui pourra tre transmis un serveur central
qui associera le numro du code-barres au numro du scanner afin de dterminer
lemplacement o la carte a t numrise et lidentit de son porteur. Toutes ces
informations sont envoyes via un rseau Ethernet vers un serveur o elles seront
traites, grce une carte fille Ethernet.
Il sagit dun excellent exemple de lutilisation de lArduino afin de raliser la tche
relativement complexe de relayer des donnes sur un rseau sans avoir recours,
chaque tape, un ordinateur. Ce scnario rduit non seulement les cots de transfert
des donnes, mais permet de simplifier les oprations lies au rseau, car lArduino
ne ncessite pas de procdure de dmarrage ou dextinction particulire. Ce systme
numrique fonctionne conjointement avec un systme de marquage physique
permettant de marquer les cartes avec une embosseuse qui ralise une marque sur la
carte lorsque le levier est pouss (voir la Figure 9-6).

Avec laimable autorisation de Kin.

FIGURE 9-6 Le point de collecte des cartes.

Cet ensemble de projets constitue un trs bon exemple de la manire dont plusieurs
applications peuvent collaborer pour fournir une grande exprience, offrant de
nombreuses formes dinteraction et de rtroaction. Il constitue galement un excellent
exemple dune utilisation prenne de lArduino. Sil existe en effet de nombreux
projets Arduino fonctionnels, ils sont souvent considrs comme peu fiables ou
temporaires. Ici, au contraire, le muse souhaitait disposer dune solution robuste ; ce
projet montre que lArduino est capable de rpondre ces contraintes lorsquil est
utilis correctement.

Aller plus loin


Vous trouverez beaucoup dinformations agrmentes de nombreuses illustrations sur
la page du projet Kin
http://kin-design.com/project.php?id=147
Voyez aussi le site Web du National Maritime Museum ladresse
http://www.rmg.co.uk/visit/ exhibitions/compass-lounge/.

Les lampes Good Night


Les lampes Good Night sont des familles de lampes connectes Internet ralises
par Alexandra Dechamps-Sonsino. Chaque famille est compose dune grande lampe
et de nombreuses petites. Lorsque la grande lampe est allume, les petites lampes
auxquelles elle est connecte sallument aussi, quel que soit lendroit o elles se
trouvent dans le monde. Cela permet aux tres proches de rester connects les uns aux
autres grce un simple geste quotidien et sans avoir utiliser une quelconque
application. Les lampes Good Night sont actuellement en dveloppement et sont
bases sur Arduino pour leur prototypage. Vous pouvez apercevoir un jeu de lampes
la Figure 9-7.

Comment a marche ?
Le systme des prototypes de prproduction des lampes Good Night est relativement
simple. La grande lampe est une lampe fonctionnelle que lon allume avec un
interrupteur poussoir similaire lexemple ButtonChangeState du chapitre 11.
Lorsquelle est en marche, la grande lampe envoie son numro didentifiant et son tat
un serveur Web via une carte fille W-Fi Arduino.
FIGURE 9-7 Ds que la grande lampe est allume, les petites lampes associes sallument
galement, quel que soit lendroit o elles se trouvent dans le monde.

Quelque part, peut-tre de lautre ct de la Terre, une petite lampe tlcharge cet tat
en utilisant la mme carte fille WiFi et propage linformation toutes les autres
petites lampes auxquelles elle est relie. Si une grande lampe est allume, toutes les
petites lampes associes sallument.
Les lampes sont constitues de LED de haute puissance fonctionnant sous 12 V et
exigeant 0,15 ampre pour les petites et 0,4 ampre pour les grandes. Ces lampes
fournissent une bonne luminosit, mais elles ncessitent un circuit de commande
transistors semblable celui dcrit au Chapitre 8.
Ce projet est un bon exemple de lutilisation dArduino pour crer le prototype dun
produit ayant un comportement relativement complexe.

Aller plus loin


Si vous souhaitez en savoir plus sur les lampes ou Knight, rendez-vous sur la page
daccueil du produit ladresse http://goodnightlamp.com.

Little Printer
Little Printer (Figure 9-8) est une imprimante domestique miniature dveloppe par
Berg, un consultant en design bas Londres. Avec votre smartphone, vous pouvez
grer du contenu provenant du Web et imprimer toutes sortes dinformations pour
crer votre journal personnel. Le Berg cloud rside entre votre tlphone et le Web.
Vous pouvez accder ce dernier via votre smartphone afin denvoyer du contenu
vers votre Little Printer et potentiellement vers dautres appareils venir... Little
Printer utilise un matriel et un logiciel spcifique, mais il fut lorigine prototyp en
utilisant Arduino.

Avec laimable autorisation de Berg.

FIGURE 9-8 La Little Printer est prte imprimer toutes les donnes que vous souhaitez.

Comment a marche ?
La Little Printer est constitue de nombreux lments, commencer par limprimante
elle-mme. Il sagit dune imprimante thermique, similaire celle utilise pour
imprimer les reus et les tickets de caisse. Limprimante thermique communique via
un port srie. Adafruit propose une imprimante de ce type simple intgrer dans vos
projets Arduino (rendez-vous sur
https://www.adafruit.com/products/597).
Limprimante est relie sans fil au Berg Cloud Bridge. Il sagit dun petit appareil qui
gre les donnes dune faon similaire celle de votre routeur domestique. Les
donnes sont alors envoyes et reues via une connexion Internet filaire, semblable
celle utilise sur les cartes filles Ethernet Arduino.
Dans les premiers prototypes, un module sans fil Xbee similaire ceux utiliss sur
les cartes filles sans fil Arduino gre les communications entre la Little Printer et le
Berg Cloud Bridge.
La majeure partie de la complexit de ce produit est prise en charge par le serveur
Berg Cloud, dans lequel les donnes sont collectes, tries puis envoyes
limprimante.
La Little Printer constitue un excellent exemple dun produit utilisant un Arduino pour
dvelopper et affiner une ide, avant de dvelopper le projet complet bas sur un
matriel propritaire.

Aller plus loin


Pour plus dinformations sur la Little Printer, voire pour en commander une, rendez-
vous sur la page daccueil du Berg Cloud ladresse
http://bergcloud.com

Flap to Freedom
Flap to Freedom est un jeu ralis par ICO, une agence de conseil en design base
Londres dans le cadre du projet V&A Village Fete. Dans ce jeu, deux joueurs
saffrontaient pour aider un poulet schapper dun levage en batterie (comme
lillustre la Figure 9-9). Lorsquun joueur bat des bras, le poulet fait de mme, mais si
le joueur bat trop vite des bras, le poulet meurt extnu. Chaque partie est
chronomtre et le rsultat publi sur un tableau.
Avec laimable autorisation de ICO Design Printers Ltd.

FIGURE 9-9 La course au poulet !

Comment a marche ?
Pour ce qui concerne la partie du projet base sur Arduino, des poulets en peluche ont
t dpecs et remplis de circuits lectroniques personnaliss chargs de
communiquer sans fil avec un ordinateur. Les circuits lintrieur des poulets sont
relis lArduino pour contrler les diffrents moteurs en charge dactionner les
ailes, le bec et les pattes. Les moteurs reoivent des informations sans fil provenant
dune carte fille Arduino similaire aux modules XBee.
Le choix du logiciel sest tourn vers openFrameWorks, en utilisant une webcam
cache pour analyser les mouvements des joueurs et dterminer la vitesse laquelle
les poulets devaient battre des ailes.
Il sagit ici dune application extrmement amusante et intressante base sur Arduino.
Elle permet des joueurs de tout ge de jouer en ayant un retour physique instantan.
Elle peut vous donner des ides de dtournement de jouets existants dans le but de
crer des applications originales.

Aller plus loin


Vous trouverez plus lire sur ce sujet sur la page du projet ICO ladresse
http://www.
icodesign.co.uk/project/V%26A%3A+Flap+to+Freedom+En-
vironment
Benjamin Tomlinson et Chris OShea ont travaill sur les aspects techniques de ce
projet ; si vous souhaitez une description plus technique, rendez-vous sur la page du
projet de Chris OShea ladresse
http://www.chrisoshea.org/flap-to-freedom
Chapitre 10
Lart de souder
DANS CE CHAPITRE
Tout savoir sur le soudage

Acqurir des bons outils pour travailler

Se protger pendant le soudage

Monter une carte fille

Souder avec style

Passer dune platine dessai une plaque de circuit imprim

Prparer son projet au monde rel

D
ans les prcdents chapitres, je vous ai expliqu en dtail comment assembler des
circuits sur une platine dessai. Si vous avez lu ces chapitres, vous avez
probablement quelques ides pour tirer parti ou combiner les quelques exemples
de base prsents. Vous devez vous demander ce que vous pouvez faire maintenant.

Dans ce chapitre, vous allez dcouvrir lart de la soudure. Vous apprendrez les
avantages et les inconvnients de tous les outils dont vous aurez besoin pour mener
bien votre projet dans le monde rel. Oublies les platines dessai en quilibre
prcaire et les cbles branlants. Dornavant, vous serez en mesure de dterminer ce
dont vous avez besoin pour fabriquer des circuits construits pour durer.

Comprendre le soudage
Le soudage est une technique pour crer une liaison mcanique et lectrique entre
deux mtaux. En faisant fondre du mtal ayant un point de fusion infrieur celui de
ceux que vous voulez runir, vous pouvez assembler des pices de mtal pour former
votre circuit. Les jonctions seulement mcaniques suffisent bien pour faire des
prototypes qui vous permettent de changer davis et de modifier trs vite un circuit.
Une fois que vous tes sr de ce que vous faites, il est temps de passer laction.
Vous utilisez un fer ou un pistolet souder pour faire fondre la soudure, un alliage
mtallique (mlange de mtaux) ayant un faible point de fusion et vous lappliquez au
joint. Quand la soudure a refroidi autour des pices que vous connectez, elle forme
une liaison fiable car simultanment mcanique et lectrique. Cest une solution bien
suprieure pour fixer des composants. Les zones soudes peuvent mme tre
refondues et ressoudes si ncessaire.
Mais quel intrt souder ? vous demandez-vous ? Supposez que vous ayez cr
un circuit sur une platine dessai et quelle est prte lemploi. Mais ds que vous
vous en saisissez, les fils se dbranchent. Vous pouvez toujours remettre les fils leur
place mais chaque fois, vous prenez le risque de remplacer mal rebrancher un fil et
dendommager lArduino. Crer votre propre circuit vous offre loccasion de le
peaufiner en concevant des cartes qui sadaptent aux composants. Une fois que vous
avez dtermin ce que vous voulez faire, vous pouvez commencer le processus de
miniaturisation et ventuellement aboutir un circuit qui noccupe que lespace
strictement ncessaire.

Les lments ncessaires pour souder


Avant de passer la pratique du soudage, il faut vrifiez que vous avez bien tout ce
quil faut.

Crer son espace de travail


Lorsque vous vous lancez dans le soudage, vous devez avoir un bon espace de travail.
Il fera toute la diffrence entre un projet russi et des heures passes genoux en
maudissant les fissures entre les lattes de votre parquet. Lidal serait un grand bureau
ou un atelier, mais une table de cuisine, si elle est claire, peut faire laffaire. Comme
vous allez souder chaud avec du mtal, protgez dventuels dommages la surface
de la table avec quelque chose que vous pouvez abmer, comme un tapis de dcoupe,
une planche de bois ou un morceau de carton pais. Votre espace de travail doit tre
bien clair. Veillez baigner dans la lumire du jour et prvoyez un bon clairage
pour le travail de nuit afin de bien distinguer ces minuscules composants.
Vous devez aussi avoir facilement accs une source dalimentation. Si votre fer
souder marche temprature fixe, a une panne courte et quil se branche directement
sur le secteur, vous devez imprativement disposer dune prise lectrique proximit.
Un bloc multiprises est la meilleure solution, car il fournira lalimentation votre
ordinateur portable, la lampe et au fer souder.
Trouvez-vous un sige confortable et noubliez pas de vous lever toutes les demi-
heures pour viter les crampes. Souder est prenant, et peut vous faire oublier que vous
avez adopt une posture horrible (pour votre dos notamment).
La fume de la soudure nest pas mortelle, mais nest pas vraiment bonne pour vos
poumons. Vous viterez dans la mesure du possible den respirer les manations.
Travaillez donc toujours dans un endroit bien ventil. Choisissez dailleurs une
soudure sans plomb, comme je vous le conseille plus loin dans ce chapitre.
Si vous travaillez la maison et que sous la pression de votre entourage, vous ne
pouvez pas laisser en place la zone de travail, trouvez de quoi faire une surface de
soudage mobile. Ce pourrait tre une planche de bois qui sadapterait bien votre kit
et que vous pourriez dplacer, ranger et couvrir quand vous ne lutilisez pas. Vous
vous pargnerez ainsi de devoir dballer et remballer chaque fois que vous voulez
souder. Et tout le monde sera content.

Choisir son fer souder


Loutil le plus important pour souder est videmment le fer souder ou la station de
soudage. Vous avez le choix entre quatre catgories : temprature fixe, portable,
temprature contrle et station de soudage complte. Je vous les prsente en dtail
dans les sections suivantes et vous indique une moyenne de prix. Faites jouer la
concurrence et recherchez sur Internet les meilleurs prix et qui sait... peut-tre allez-
vous dnicher sur eBay un modle doccasion de bonne qualit !

Le fer souder temprature fixe


Le fer souder temprature fixe (voir un exemple reproduit la Figure 10-1) est
normalement vendu comme un simple fer souder avec un cble dalimentation qui se
branche sur le secteur. En gnral, il se vend avec une ponge et un morceau de mtal
pli servant de reposoir. Dautres sont mieux fournis en y ajoutant un rceptacle pour
y poser lponge et un tui en forme de ressort pour poser le fer.

FIGURE 10-1 Un fer souder temprature fixe basique.


Le fer souder temprature fixe est satisfaisant, mais il ne propose aucune
commande pour rgler la temprature du fer. Il est vendu avec un indice de puissance
restitue suffisant pour le grand public. Pour certains modles, une puissance restitue
suprieure signifie une temprature plus leve, mme si elle peut varier dun
fabricant lautre. Cette variation peut causer des problmes avec des composants
plus fragiles, car une temprature leve peut rapidement se propager et faire fondre
des circuits et composants intgrs en plastique.
Une tude du site Web Maplin (un fournisseur britannique quivalent de RadioShack
amricain ou de Monsieur Bricolage franais) montre qu une plage de puissances
de 12 W 40 W correspond une plage de tempratures de 200 400 oC. La difficult
est de trouver un fer souder suffisamment chaud pour chauffer rapidement la partie
que vous souhaitez et faire fondre la soudure avant dabmer les composants. Cest
pourquoi un fer souder basse temprature peut causer plus de dgts quun haute
temprature. Mais si vous chauffez trop, vous allez fair eface dautres problmes
tels que des embouts qui sabment plus vite ou le risque de surchauffer certaines
parties.
Si vous voulez commencer avec un fer souder temprature fixe, je vous conseille
den choisir un de 25 W. Il cote environ 10 euros.

Fer souder gaz


Un fer souder gaz est libr du besoin dnergie lectrique au profit du gaz. Il
brle du butane qui est plus connu sous le nom dessence briquet. Son indice de
puissance restitue permet de le comparer aux autres fers souder, mais contrairement
au fer souder temprature fixe prsent dans la section prcdente, cet indice
indique la temprature maximale qui peut tre rduite grce une vanne de rglage.
Les flammes brlent le bord du fer, ce qui peut rendre difficile son utilisation pour des
jointures trs prcises. Je vous en dconseille donc lutilisation.
Le fer souder gaz (voir la Figure 10-2) convient lorsque vous tes loin de toute
source dlectricit. Il est un peu trop cher et son utilisation cote cher aussi. La
plupart des services de scurit des aroports le considrent comme plus dangereux
que les fers souder classiques parce quil contient du gaz. Si vous comptez emporter
un fer souder ltranger, prenez-en un lectrique.
Le prix dun fer souder gaz va de 30 80 euros environ. Comptez aussi la
recharge environ 10 euros.
FIGURE 10-2 Un fer souder gaz.

Fer souder temprature rglable


Le fer souder temprature rglable (Figure 10-3) est celui que je prconise par
rapport celui temprature fixe. Il offre plus de contrle un prix raisonnable. Ce
contrle accru peut faire toute la diffrence entre fusion et combustion. Ce type de fer
a aussi un indice de puissance restitue lev qui reprsente normalement sa
puissance maximale. Pour ce type de fer, prfrez une puissance restitue leve, car
elle vous offre une plus grande plage de tempratures de travail.

FIGURE 10-3 Un fer souder temprature rglable.

Vous pouvez ajuster la temprature selon vos besoins grce un variateur. La


diffrence entre ce type de contrle sur la temprature et celle quoffrent des stations
de soudage plus prcises est que vous contrlez la temprature demande, mais vous
navez pas de lecture de la temprature relle qui en rsulte. La plupart des fers
souder temprature rglable ont un variateur qui ne permet que de choisir entre
chaud et trs chaud. Vous devrez donc passer par une phase de tests pour dterminer la
bonne temprature.
Vous trouverez des bons fers souder temprature rglable partir de 30 euros.
Vous bnficierez dun meilleur contrle et dune plus grande longvit quavec un fer
temprature fixe.

Station de soudage
La station de soudage est le nec plus ultra que lon rve dacqurir... Aprs avoir
acquis une certaine exprience (ce qui va en justifier la dpense), vous envisagerez
dinvestir dans une station de soudage. Elle est gnralement compose dun fer
souder, dun support pour le fer avec ponge intgre, dun affichage et dun variateur
de temprature. Elle peut aussi inclure dautres accessoires pour le brasage, comme
un dbit dair rglable en continu par exemple, mais ce sont des accessoires usage
professionnel qui ne sont pas vraiment indispensables.
Il existe de nombreuses marques de stations de soudage, mais lune des plus rputes
et des plus utilises est Weller (voir la Figure 10-4). Je vous conseille dans cette
marque le modle WES51. Ma WES51 fonctionne encore parfaitement aprs quatre
ans dutilisation. Ne comptez pas moins de 50 euros pour une station de soudage et
prvoyez mme plutt le double.
Avant dutiliser une station de soudage Weller, javais un fer souder temprature
rglable bon march dune marque de magasin de bricolage qui convenait
lutilisation que jen faisais. Comme je lexplique plus en dtail dans ce chapitre, la
meilleure faon dentretenir et de tirer le meilleur de son fer souder est de lutiliser
correctement. Supprimez toute trace de soudure sur la panne laide de lponge,
rappliquez de la soudure frache avant de lutiliser et laissez un peu de soudure
fondue sur la panne quand vous avez termin de travailler pour quelle soit protge.
FIGURE 10-4 Une station de soudage Weller.

Quel que soit le modle de fer souder que vous achterez, je vous conseille aussi
dinvestir dans quelques pannes de rechange, parce quelles finissent par se dgrader.
Il existe une grande varit de formes de pannes en fonction de lusage que lon veut
en faire, cest pourquoi il vaut mieux en avoir une petite panoplie.

Choisir sa soudure
La soudure est la matire en forme de fil que vous utilisez pour joindre vos
composants. Bien quil existe diffrents types de soudure avec diffrentes
combinaisons de mtal, il existe deux grandes catgories, comme pour lessence des
voitures : avec ou sans plomb. Bon nombre de mes connaissances prfrent la soudure
au plomb parce quelle serait plus facile travailler. Elle a un point de fusion plus
faible, ce qui signifie que le fer souder peut rester plus froid et le risque
dendommager des composants est moindre.
En revanche, lempoisonnement au plomb est connu depuis longtemps. Pourtant, ce
nest que rcemment que lon a commenc avoir des rserves quant son utilisation.
Cest dans les annes 1980 que lon a commenc remplacer le plomb par le cuivre
dans les canalisations. Lutilisation de la soudure au plomb dans llectronique grand
public a t aborde en 1996 quand les directives de lUnion europenne la RoHS
(Restriction of Hazardous Substances Directive) et la DEE (Dchets dquipements
lectriques et lectroniques) ont lgifr sur lutilisation et llimination de certains
matriaux dans llectronique.
Vous trouverez la mention RoHS sur les composants qui sont conformes la
rglementation europenne, ce qui devrait tre meilleur pour lenvironnement. Dun
point de vue commercial, les entreprises europennes et amricaines bnficient
davantages fiscaux si elles utilisent de la soudure sans plomb (Figure 10-5).

FIGURE 10-5 Une bobine de soudure sans plomb.

Lun de mes collgues, Steven Tai, sest rendu en Chine pour mener bien un projet
sur lequel nous travaillions. Quand il a demand o il pourrait acheter de la soudure
sans plomb, on sest moqu de lui en lui disant quon nen avait jamais entendu parler
et mme que cela nexistait pas. Mais pour les arduinistes consciencieux, la plupart
des fournisseurs et des magasins dlectronique proposent de la soudure sans plomb
qui contient dautres mtaux comme ltain, le cuivre, largent et le zinc. Daprs mon
exprience, la soudure sans plomb convient parfaitement des projets Arduino.
Autrement dit, si vous voulez participer la prservation de lenvironnement et de
vous-mme, vitez dutiliser du plomb dans votre travail ! Une autre varit de
soudure est la soudure fourre avec un flux central. Le flux sert rduire loxydation
de la surface du mtal quand il ragit avec loxygne (comme la rouille sur une
ancre). La rduction de loxydation permet une connexion plus fiable et laisse la
soudure liquide mieux circuler et remplir les interstices du joint. Certaines soudures
ont du flux dans le noyau de la soudure, ce qui le diffuse pendant que la soudure fond.
Vous verrez peut-tre de la fume quand vous soudez avec ce genre de fil.
Gnralement, cette fume vient de la combustion du flux. Pour tre sr que vous avez
du fil flux, coupez le fil de soudure : vous devez voir une me noire dans la section
du fil de soudure.
Ceci dit, travaillez toujours dans un endroit bien ventil et vitez de respirer la fume
de la soudure, quel que soit le type de soudure que vous avez choisi. Lavez-vous bien
les mains et le visage aprs avoir soud. Le flux de soudure peut quelquefois
clabousser ; portez des vtements de protection et protgez-vous les yeux.

Troisime main
Le soudage est une opration trs minutieuse, notamment avec de llectronique
fragile. Il est alors utile dtre aid par quelque chose qui peut tenir sans bouger les
petites pices brlantes de mtal. Cet objet, appel troisime main (sorte de main de
secours, reproduite la Figure 10-6), est un jeu de pinces crocodiles places sur un
bras rglable. Les pinces permettent de tenir un composant, le circuit imprim ou
mme le fer souder. Le prix dune troisime main ou mini-tau de prcision stale
entre 10 euros et une cinquantaine deuros. Cet outil est trs utile pour tenir un circuit
imprim dans un angle prcis ou maintenir ensemble des composants pendant que
vous soudez. Linconvnient majeur est que lon passe beaucoup de temps serrer,
desserrer, ajuster, bref rgler les pinces. Si vous devez faire beaucoup de soudures,
ce rglage vous demandera du temps. Si vous comptez investir dans une troisime
main, vrifiez que le modle que vous avez choisi ait toutes ses parties en mtal. Les
parties en plastique, comme les pas de vis, ne tiendront pas longtemps.

FIGURE 10-6 Une troisime main.


Pte fixe
La pte fixe est une alternative la troisime main pour maintenir sans bouger un
composant ou un circuit imprim pendant que vous soudez. la place dun mcanisme
mcanique, vous utilisez cette pte pour tenir un ct de la carte tandis que vous
soudez les diffrents lments de lautre. Une fois le soudage fait, retirez la pte fixe
que vous pourrez rutiliser. Notez que la pte fixe se ramollit trs vite au contact de
la chaleur et quil faut attendre un certain temps pour quelle retrouve toute son
adhsivit. Une fois refroidie, roulez-la en boule pour enlever toutes les miettes du
circuit imprim.

Pince coupante
Une pince coupante est indispensable (Figure 10-7). De nombreux modles sont
capables de couper des cbles, mais il vaut mieux se procurer celles pour travau
lectroniques. Attention aux modles avec un bout arrondi, elles sont difficiles
utiliser pour couper dans un espace confin ou un fil prcis. Prfrez des pinces
coupantes pointues qui conviennent la majorit des travaux.

FIGURE 10-7 Une pince coupante pointue pour couper vos fils.

Notez que les pinces coupantes pour lectronique sont parfaites pour couper du
cuivre, mais pas pour des fils de fer de type trombone ou agrafe. Cela les
endommagerait.
Pince dnuder
Pour connecter des fils, vous devez retirer le plastique isolant qui les entoure. Vous
pouvez le faire avec un couteau si vous tes prudent ou si vous ne vous souciez pas de
vos doigts. Mais le moyen le plus rapide, facile et sr pour ter le plastique qui
protge les fils est la pince dnuder puisque cest sa fonction. Il existe deux types de
pinces dnuder : manuelle et mcanique (voir la Figure 10-8).
La pince dnuder manuelle est comme une tondeuse avec des encoches semi-
circulaires de diffrents diamtres. Lorsque vous pincez le fil, la pince coupe
suffisamment profondment pour couper la gaine du plastique, mais sarrte avant de
blesser le fil.

FIGURE 10-8 Une pince dnuder mcanique ( gauche) et manuelle ( droite).

La pince dnuder mcanique fonctionne avec une action de dclenchement pour


dgainer lisolant du fil sans avoir tirer dessus. La pince mcanique vous permet de
gagner du temps, mais savre moins fiable sur le long terme, car ses mcanismes
peuvent plus facilement sabmer que ceux de la pince dnuder manuelle.

Pince bec fin


La pince bec fin est trs utile pour atteindre des endroits difficiles daccs. Elle
vous vite de vous brler les doigts quand vous soudez. Reportez-vous au
Chapitre 5 pour en savoir plus sur cette pince.

Multimtre
Un multimtre permet de tester les circuits. Lorsque vous soudez des connexions, la
fonction de test de continuit vous sera trs utile pour vrifier que les joints de
soudure sont corrects (pas de souduree sche) et sont au bon endroit. Reportez-vous
au Chapitre 5 pour en savoir plus sur lutilisation du multimtre.
Quand vous testez la continuit, dbranchez toujours toutes les sources dalimentation
relies votre circuit afin dviter les faux bips.

Pompe dessouder
Tout le monde fait des erreurs et elles peuvent tre difficiles corriger quand il sagit
de mtal chaud. Une pompe dessouder (Figure 10-9) ou un pistolet dessouder est
dans ce cas la bienvenue. Ces deux outils pompent (aspirent) la soudure fondue. Ils
ont gnralement un piston presser pour chasser lair du corps. Quand vous appuyez
sur le dclencheur, un ressort repousse vivement le piston en arrire, ce qui fait
aspirer la soudure dans le corps du piston. Quand vous rappuyez sur le dclencheur
du piston, il jecte la soudure froide qui a t enleve. Lutilisation de ce type doutil
demande de la pratique, car vous devez chauffer la soudure avec votre fer souder
dans une main et aspirer les rsidus de soudure avec la pompe dessouder dans
lautre !

FIGURE 10-9 Une pompe dessouder peut sauver votre projet !


Tresse dessouder
La tresse dessouder est un autre moyen de supprimer la soudure (voir la Figure 10-
10). Cest un fil de cuivre qui a t tress et que lon trouve dans le commerce sous
forme de bobine. Il offre beaucoup de surface de soudure fondre ou supprimer.
Tout dpend de lutilisation que vous en ferez. Placez la tresse la jointure ou au trou
qui prsente trop de soudure, chauffez la tresse en maintenant le fer souder au-
dessus delle, pressez lgrement, la soudure continue fondre et va combler les trous
entre les mailles de la tresse. Retirez simultanment la tresse et le fer souder, la
soudure devrait tre retire. Si tel nest pas le cas, rptez lopration. Une fois la
soudure efface, retirez la tresse dessouder et coupes la partie use de la tresse.

FIGURE 10-10 La tresse dessouder permet de rparer les petites erreurs.

Ne retirez pas la tresse dessouder si elle sest colle au circuit parce que vous avez
trop attendu. Si vous tirez fort, vous risquez darracher des pistes de la carte et la
rendre inutilisable.
La pompe et la tresse dessouder sont toutes deux efficaces pour retirer des rsidus
de soudure, mais elles sutilisent dans des situations diffrentes et ncessitent une
certaine dextrit. En cas de risque de surchauffe de composants, prfrez la pompe
dessouder. Si vous narrivez pas retirer tous les rsidus de soudure avec la pompe,
optez pour la tresse dessouder qui peut atteindre des espaces restreints. Je vous
conseille dinvestir dans ces deux options afin de parer toutes les situations.

Fil de cblage
Fil de cblage est le nom gnrique donn aux fils lectriques de petit diamtre. Cest
avec ce fil que sont fabriqus les straps. Vous en avez peut-tre dans votre kit. Ce fil
se vend en bobines et existe en deux modles : monobrin ou multibrin. Le fil de
cblage monobrin est compos dun seul brin de fil rigide mais dformable. Il garde
sa forme une fois pli. Mais sil est pli trop souvent au mme endroit, il se rompt. Le
fil de cblage multibrin est compos de plusieurs brins trs fins. Il supporte plus de
manipulations que le fil monobrin, mais il ne garde pas sa forme sil est pli. Pour
utiliser un fil de cblage, vous devez le couper longueur puis le dnuder sur environ
un centimtre chaque extrmit afin daccder aux brins.
Les fils de cblage ont diffrents diamtres, indiqus par des chiffres tels
que 7/0,2 ou 1/0,6. Dans ce format, le premier chiffre correspond au nombre de brins
de fil et le second chiffre au diamtre de chaque fil contenu dans le fil de cblage. Par
consquent, 7/0,2 signifie que la gaine contient 7 brins de fil et que chacun
mesure 0,2 mm, cest donc un multibrin ; 1/0,6 est un fil monobrin de diamtre
de 0,6 mm.
Quand vous dbutez, vous ne savez pas vraiment dans quel fil de cblage investir. Les
bobines de fil tant chres, vous risquez dtre coinc avec un stock de fil qui ne vous
sert rien. En gnral, le fil de cblage multibrin convient la plupart des
applications. Le 7/0,2 convient la plupart des trous de platines dessai. Je vous
conseille aussi de choisir trois couleurs diffrentes : du rouge, du noir et une
troisime couleur pour les fils de signal. Avec trois bobines, vous serez quip pour
raliser vos projets. Certains magasins dlectronique de loisirs vous proposent
diffrentes longueurs dans de nombeuses couleurs comme reprsent la Figure 10-
11.

FIGURE 10-11 Des fils de cblage de diffrentes couleurs.

Souder en toute scurit


Le soudage nest pas dangereux si vous respectez les quelques conseils que je vous
donne dans cette section, mais il peut vite le devenir si vous ngligez la scurit.
Bien tenir son fer souder
Un fer souder est un outil sr sil est utilis correctement, mais il reste
potentiellement dangereux en cas de ngligence. Il a deux extrmits : la panne
chauffante et le manche. Ne le tenez videmment jamais par la panne, mme par un
mauvais rflexe pour le ratrapper lorsquil tombe !
La meilleure faon de tenir un fer souder est le saisir comme un stylo entre le pouce
et lindex. Lorsque vous ne lutilisez pas, posez-le sur le support adapt au fer
souder. Le support du fer souder est aussi une mesure de scurit. Il permet de faire
dissiper la chaleur et dempcher dventuelles brlures accidentelles.

Protger vos yeux


Vous devez porter des lunettes de protection quand vous soudez. Le fil de soudure,
notamment celui qui contient du flux dcapant, a tendance clabousser quand il
chauffe. Lorsque vous utilisez une pince coupante pour raccourcir les pattes des
composants une fois quils sont souds, les petits bouts mtalliques partent souvent
dans tous les sens moins de pouvoir faire cran avec une main libre. De mme, si
vous travaillez deux, protgez-vous des projections du voisin. Les lunettes de
protection ne sont pas chres, du moins elles sont moins chres quune chirurgie de
lil. Portez-les !

Travailler dans un espace ventil


Linhalation de vapeurs de toute nature est gnralement mauvaise pour la sant, il est
donc important de toujours souder dans un environnement bien ar. Vrifiez
galement que vous ne travaillez pas proximit des dtecteurs de fume parce que
les fumes de soudage peuvent les dclencher.

Nettoyer le fer souder


Gnralement, le fer souder est fourni avec une ponge qui sert enlever les
excdents de soudure. Vous devez humidifier lponge, mais ne lutilisez pas
dtrempe ! Vrifiez que vous lavez bien essore. Lorsque vous chauffez la soudure,
elle soxyde sur la panne. Si la panne soxyde, elle sabme au fil du temps. Pour
viter loxydation, laissez une goutte de soudure sur le bout de la panne quand le fer
est pos sur son support. La goutte de soudure protge lextrmit de la panne que
vous essuierez laide de lponge lors de la prochaine utilisation du fer.
Ne pas manger la soudure !
Les produits chimiques et mtaux que contient la soudure ne sont pas mortels, mais ils
ne sont certainement pas bons pour la sant. Quand vous soudez, vitez de toucher
votre visage, vos yeux et votre bouche. Noubliez pas de vous laver les mains (et le
visage si ncessaire) aprs avoir soud.

Assembler une carte fille


La meilleure faon dapprendre souder est de pratiquer. Vous commencerez par
essayer de runir de simples chutes de fils et russir de beaux tamages (rendre la
partie dnude dun fil rigide en lui appliquant de la soudure). En guie dexemple
complet, vous allez apprendre monter une carte fille Arduino. Une carte fille est un
circuit imprim spcifique qui sinsre au-dessus de lArduino pour lui ajouter une
fonction (vous en saurez plus au Chapitre 13). Il existe diffrentes cartes filles pour
diffrentes fonctions que vous pouvez brancher votre circuit Arduino. Vous pouvez
vous procurer le Kit Proto shield illustr la Figure 10-12 qui est une carte vierge sur
laquelle vous pourrez ensuite souder les diffrents lments du prototype de la platine
dessai. Vous allez avec cet exemple dcouvrir comment construire un circuit simple
en mode soudure.

FIGURE 10-12 Une carte fille compltement monte.


Faire linventaire des pices
Quand vous montez un circuit, la premire chose faire est de vrifier que vous avez
toutes les pices quil faut. Votre espace de travail doit tre propre pour vous faciliter
le travail.
La Figure 10-13 reprsente le kit Arduino Proto dball correctement. Il contient :

FIGURE 10-13 Tous les lments de la carte fille.

Un lot de barrettes mles (40X1) ;

Un connecteur (3X2) ;

Deux boutons-poussoirs ;

Une LED rouge ;

Une LED jaune ;

Une LED verte ;

Cinq rsistances de 10 k 1/4 W ;

Cinq rsistances de 220 k 1/4 W ;

Cinq rsistances de 1 k 1/4 W.


Certains kits ne contiennent que la carte, et cest vous qui choisissez les connecteurs.
Il ny en a pas de bons ni de mauvais, tant quils correspondent au projet que vous
avez labor.
Pour monter la carte, travaillez daprs une image pour vrifier la disposition des
composants, en suivant bien les instructions. Dans notre exemple, je vous guide tout au
long de la construction de la carte tape par tape, et vous indique si ncessaire les
diverses astuces de soudage.

Montage
Pour monter ce kit, vous devez souder les barrettes mles et le bouton-poussoir.
Souder ces lments permet la carte fille de sinsrer sur votre Arduino. Toutes les
connexions Arduino deviennent accessibles sur la carte fille Proto. Notez que
quelques versions de la carte Proto ont des connecteurs HE (ou des connecteurs
superposables) la place des barrettes mles. Les connecteurs HE sont longs afin de
pouvoir sinsrer en haut de la carte Arduino comme le font les barrettes mles, mais
ils permettent aussi dautres supports dtre placs dessus. Lavantage des barrettes
mles est que la carte fille est plus courte et occupe moins despace. Les connecteurs
HE sont utiliss dans la carte fille monte de la Figure 10-12. Ce sont les connecteurs
noirs en haut de la carte avec des broches en dessous.
Dans cet exemple, jutilise des barrettes mles et ne branche pas le connecteur ICSP
(In-Circuit Serial Programming) qui est le connecteur 3X2 du centre de lUno.
LICSP sert dalternative au tlversement des croquis avec un programmeur externe
en remplacement de latelier Arduino. Il est destin aux utilisateurs avancs.

Barrettes mles
Vous allez commencer par dbiter les barrettes mles aux bonnes longueurs
(Figure 10-14). Le kit contient une longueur de 40 lments sur un de large (1X40),
donc une range de 40 broches sur une profondeur dune ligne. Chaque broche a une
encoche en plastique que lon peut couper. Pour correspondre la carte Arduino, il
faut une longueur de 6 (broches analogiques), une de 8 (broches dalimentation), une
de 8 (broches numriques) et une de 10 (broches numriques encore). Coupez les
barrettes mles avec votre pince coupante la bonne longueur. Il devrait vous
rester 8 broches. (Mettez-les de ct pour la prochaine fois). Les broches ont une
dimension prcise qui sadapte la carte. Lcartement entre deux broches est de
2,54 mm (un pouce). Notez bien cet cart si vous achetez des barrettes mles dautres
connecteurs plus tard.
FIGURE 10-14 Gros plan sur une barrette mle.

Maintenant que vous avez prpar les barrettes mles, vous allez les souder leur
place. Dans la section suivante, je vous prsente quelques techniques de soudage.
Lisez bien cette section avant de commencer.

Acqurir une technique de soudage


La premire chose faire est de vrifier que tous les lments sont bien mis en place
en toute scurit. Il est trs frquent de poser en quilibre tous les composants sur le
circuit imprim ou de les mettre porte de main un emplacement facile daccs,
mais un moment donn quelque chose finit par tomber juste au moment o vous
venez de prendre le fer souder en main. Comme expliqu dans la section
Rassembler tous les lments pour souder plus haut dans ce chapitre, la meilleure
faon de procder en toute scurit est dutiliser une troisime main ou de la pte
fixe. Les pinces crocodiles de la troisime main permettront de saisir le plastique des
broches et le circuit imprim, puis de les tenir fermement angle droit. De mme,
vous pouvez faire tenir les broches verticalement en appuyant sur la pte fixe dans
la partie infrieure. Vous les pressez ensuite sur un support rigide et lourd pour
maintenir le circuit prs de vous. Il marrive dutiliser une grande bobine de fil
souder en support.
Il existe une troisime option qui pourrait scuriser les composants. Jvoque ici
cette option, parce quelle trs tentante et aussi trs risque, afin que vous ne la
suiviez pas. On pourrait en effet imaginer placer les broches dans lArduino lui-mme
(avec les longues extrmits colles dans le support), puis mettre le circuit imprim
au-dessus. Cette option fait tenir tout 90o, mais comme les broches sont conues
pour se connecter lArduino et conduire le courant lectrique, elles peuvent aussi
conduire dautres choses, et notamment la chaleur. Si elles conduisent trop la chaleur
du fer souder, cette chaleur va traverser le circuit pour atteindre les pattes de la
puce trs sensible du microcontrleur et lendommager irrmdiablement.
Une fois le circuit imprim bien install, faites-le pivoter dans un angle de travail
confortable, trs vraisemblablement dans le mme angle que celui du fer souder
(comme illustr la Figure 10-15).

FIGURE 10-15 Toujours tre dans une position confortable.

Allumez votre fer souder. Mon Weller WES51 a une plage de tempratures
entre 50 et 350 oC. Plus la panne (le bout) est chaude, plus vite la soudure fondra pour
faire les joints, mais plus vite aussi se fondront dautres choses comme les parties en
plastique et les puces en silicone. Cest pourquoi vous devez toujours rgler le fer
souder la temprature la plus basse possible. Pour vrifier, faites fondre un peu de
soudure. Si elle met du temps fondre, vrifiez que vous disposez bien dune bonne
surface de contact entre la panne du fer souder et la soudure. Si cela ne marche pas,
augmentez progressivement la temprature. En gnral, je rgle mon fer 340 oC, ce
qui est assez chaud, mais pas trop.
Certains fers souder sont quips dun thermostat qui indique la temprature. Le
must actuellement est le thermostat affichage numrique. Mais les moins chers
dpendent de votre seul jugement.
Lorsque le fer souder est bonne temprature, humidifiez lponge. Sur certains
modles, lponge est colle pour plus de confort , mais cest avant tout un
inconvnient quand vous devez la mouiller. Dans ce cas, je vous conseille de la
dcoller et de la tremper dans une petite bassine plutt que dasperger deau votre
fer souder et les environs. Lponge doit tre humidifie et non pleine deau.
Lhumidit de lponge lempche de brler lorsque vous y passez la panne du fer
souder. Si lponge est trop mouille, elle peut faire chuter la temprature du fer et de
la soudure, ce qui signifie que la soudure se durcit ou se solidifie et ne peut pas tre
retire si on naugmente pas encore plus la temprature du fer.
Vous tes prt. Vous allez souder. Pour ce faire, suivez les tapes ci-aprs :
1. Faites fondre une petite quantit de soudure sur la panne du
fer souder, tape quon appelle tamer la panne (Figure 10-16).

FIGURE 10-16 tamer la panne permet de prserver le fer souder et facilite le soudage.

La soudure doit coller au bout de la panne. En gnral, avec un


nouveau fer ou un fer bien entretenu, la soudure colle la panne
sans problme. Si elle nadhre pas au bout de la panne, faites-la
pivoter pour trouver le bout de la panne qui nest pas oxyd. Si vous
nen voyez pas, utilisez un nettoyeur de panne pour supprimer toute
couche qui se serait forme. En frottant lgrement avec le
nettoyeur de panne de fer souder, vous supprimez les ventuels
rsidus de soudure et vous restaurez votre fer souder dans sa
gloire passe.

Les nettoyeurs de panne de fer souder sont des ponges


mtalliques qui peuvent contenir des substances toxiques que vous
ne devrez ni inhaler, ni ingrer.

2. Lorsque vous avez une goutte de soudure sur le fer, essuyez-la


sur lponge pour rvler le brillant mtallique de la panne.

Le but est dappliquer ce bord frachement tam de votre fer (et


non la pointe) la zone que vous joignez. Utiliser le bord vous donne
plus de surface et permet au joint de chauffer plus vite. Notez quil
existe de nombreux modles de panne de fer souder et quils sont
facilement interchangeables, ce qui vous permet de parer
diffrentes situations. Certains sont pointus, comme la Figure 10-
16, et dautres ont une forme de lame de tournevis ou de biseau,
offrant des surface de travail adaptes des situations diffrentes.

3. En commenant par la premire broche dune range,


appliquez le fer sur la surface mtallique du circuit imprim et
la broche laquelle il est connect.

Cela chauffe le circuit et la broche, les prparant la soudure.

4. Avec lautre main (pas celle qui tient le fer), appliquez la


soudure sur la pointe o le fer, la broche et la plaque
mtallique se rencontrent.

Ds que la soudure est chaude, elle fond et se propage pour remplir


le trou, scellant la broche et le circuit. Pour appliquer plus de
soudure, appuyez dessus dans le joint o elle fond. Pour en
appliquer moins, il suffit de retirer le fer. Il suffit de quelques
millimtres de soudure pour de petites jointures.

5. Quand la zone est remplie, retirez la soudure, mais laissez le


fer une ou de secondes de plus.

La soudure est ainsi fondue compltement et remplit tous les trous.

6. Retirez le fer souder et essuyez les pattes de la broche.

Tout excdent de soudure va samasser sur le bout de la panne que


vous pourrez ensuite couper.
Toute cette opration ne prend que deux ou trois secondes. Cela peut vous paratre
fou, mais une fois que vous avez pris le rythme, cest tout fait ralisable. Tout
sapprend par la pratique.
Si vous avez suivi les tapes prcdentes, vous obtenez un joint de soudure en forme
de pyramide et un bloc mtallique qui doit recouvrir votre circuit imprim. Si vous
percevez le trou que la broche a travers ou un bloc de soudure qui nest pas connect
au circuit imprim, re-chauffez la soudure avec votre fer souder ou ajoutez un peu de
soudure pour combler les vides.
Une fois la premire broche fixe, soudez celle de lautre extrmit de la srie. pour
que la range soit bien parallle au circuit. Vous pouvez encore redresser lensemble
en chauffant la soudure de chaque extrmit. Si vous trouvez quil y a trop de soudure,
refaites-la fondre. Si vous pensez quil y en a encore trop, utilisez une tresse ou une
pompe dessouder pour supprimer le surplus.
Pour voir des exemples de bons et de mauvais soudages, visitez la galerie dimages
de http://highfields-
arc.co.uk/constructors/info/h2solder.htm.
Une fois la premire srie bien soude, rptez lopration pour les autres broches.
Pour les boutons-poussoirs, il suffit de les mettre lemplacement indiqu en haut du
circuit imprim et de les clipper grce aux pattes du bouton. Si ncessaire, scurisez-
les avec de la pte fixe, puis tournez le circuit et soudez en passant par la mme
technique de soudage. Une fois que vous avez termin, procdez une dernire
vrification pour vous assurer quaucun des joints de soudure nen touche un autre.
Deux broches mal connectes peuvent provoquer un court-circuit et endommager votre
circuit imprim. Soyez prcis. Dans le doute, utilisez la fonction de test de continuit
de votre multimtre pour contrler les broches adjacentes. Vous ne devriez pas
entendre de bip entre les broches qui ne sont pas connectes.
Placez la carte fille cheval sur lArduino et vrifiez quelle sinsre correctement.
Si cest le cas, vous voil prt souder votre premier circuit, ce que vous allez faire
la section suivante.

Monter le circuit de test


Une fois que votre carte fille est prte lemploi, rflchissez comment pourrait tre
le circuit que vous voulez construire. Avant dentreprendre toute action, planifiez bien
tous les points afin dviter toute modification qui pourrait tre difficile raliser
ensuite. Commencez par faire un prototype du circuit sur une platine dessai. Cest
facile, rapide, et le plus important, temporaire.
Prparer rapidement et vrifier le bon fonctionnement dun circuit est simple. Pour
lexemple que nous allons raliser, jutilise AnalogInOutSerail (voir le Chapitre 7)
pour vous montrer comment transformer une platine dessai en circuit soud dfinitif.

Dcouvrir le circuit
Tout dabord, vous devez recrer le circuit AnalogInOutSerial sur la platine dessai,
comme expliqu la fin du Chapitre 7. Tlversez le croquis en passant par Fichier -
> Exemples -> 03.Analog -> AnalogInOutSerial. Vous devez pouvoir rgler la
luminosit de la LED avec le potentiomtre.
Quand ce circuit est prt, rejetez un il au circuit AnalogInOutSerial. Une diffrence
doit vous sauter aux yeux : la carte fille Proto na pas les mmes lignes et ranges que
la platine dessai, except dans un coin. Ce qui est typique des circuits intgrs (IC)
ou puces, mais ils peuvent tre utiliss pour tout. Le reste de la carte fille comporte
des trous indpendants dans lesquels on peut enfoncer puis souder les pattes des
composants. Vous pouvez y insrer des fils pour tablir des connexions.
Pour transformer le circuit en une carte fille fonctionnelle, examinez attentivement le
schma. Les lignes qui connectent les composants peuvent tre remplaces par des fils
souds directement aux broches adquates. Quant au potentiomtre, il lui faut trois
fils : un de 5 V, un GND et un pour lentre Analog 02. La LED et la rsistance
ncessitent deux fils supplmentaires : un GND et une broche 9. Commencez par
tracer le circuit pour plus de clart. Il est inutile quil soit aussi clair que celui
dexemple, mais faire un plan du circuit va vous pargner bien des dessoudures .
Comme le dit un vieil adage Mieux vaut vrifier deux fois avant que pleurer deux
fois aprs .
Notez que tous les fils correspondent aux trous auxquels ils doivent se connecter.
Comme vous ne disposez pas despace suffisant pour insrer les fils et pattes des
composants dans le faible diamtre dun seul trou, vous devrez les rapprocher et
combler lcart entre le trou et la patte ou le fil.

Prparer le circuit
Une fois que le circuit est trac, il faut le prparer afin de pouvoir dterminer la
longueur des fils. Pour placer en toute scurit les composants sur la carte, insrez-les
dans des trous la bonne distance puis retourner le circuit et pliez les pattes 45o
pour que le composant ne retombe pas. Le dessous devrait montrer quelque chose
comme ce que montre la Figure 10-17.

FIGURE 10-17 Une LED insre dans la plaque (vue du dessous).


Implanter les fils
Vous constaterez que la longueur des fils requise est relativement courte. Si vous avez
du fil solide, pliez-le pour quil pouse la forme plate du circuit imprim. Avec un fil
multibrin, il est plus facile de former un arc qui puisse passer dun trou un autre.
Noubliez pas de mesurer ou de faire lestimation de la distance et dajouter un petit
peu de longueur dun bout lautre afin que les bouts puissent sinsrer facilement
avant de couper. Dnudez le cble et plaquez-le long de sa longueur pour vrifier si
elle est bonne. Remarquez quil arrive quelquefois que le bout dun cble multibrin
seffiloche. Dans ce cas, plaquez-le entre le pouce et lindex et torsadez-en
lextrmit en un point. Vous pouvez mme apporter un peu de soudure sur le bout,
cest--dire ltamer. Mettez ainsi en place tous les fils sur le circuit.

Souder le circuit
Maintenant que vous avez tous les composants et les fils en place, il est temps de les
souder. Vous avez dj pli les pattes des composants. Les fils sont rests bien en
place. Comme la rsistance et la LED sont cte cte, servez-vous de leurs pattes
pour les relier, il vous sera ainsi inutile dutiliser un fil. Noubliez pas de vrifier que
la LED est dans le bon sens. Si ncessaire, utilisez de la pte fixe pour mieux
protger les composants, puis soudez-les, comme les barrettes mles des borniers.
Une fois tous les composants bien implants, commencez par souder les fils. Comme
souvent, le rsultat du soudage va dpendre du soin avec lequel vous appliquerez la
soudure. Certains prfrent enrouler le fil autour des pattes du composant pour obtenir
une meilleure prise ; dautres prfrent les relier cte cte pour avoir des jonctions
plus propres. vous de choisir. Tant que vous avez une bonne connexion, tout va pour
le mieux.

LES PLAQUES DE PROTOTYPAGE OU VEROBOARD

Les cartes filles spcialement conues pour senficher sur votre carte Arduino
sont relativement chres. Les plaques bandes, aussi appeles Veroboard ou
Stripboard, offrent une solution moins onreuse et plus polyvalente. La plaque
bandes est une carte comportant des pistes de cuivre parallles
prdcoupes et prperces permettant de monter un circuit comme sur une
platine dessai, mais avec des soudures. La figure suivante en donne un
exemple.
Lespacement entre les trous et la disposition des pistes en cuivre sont
variables dun modle lautre. En gnral, pour les applications Arduino, les
plaques espacement entre trous de 2,54 mm (0,1 pouce) conviennent bien,
puisque cest lespacement des broches Arduino. Vous pouvez ainsi construire
vos propres cartes filles.

Nettoyer
Une fois que vous avez fini de souder, vrifiez une dernire fois votre carte pour voir
si vous navez pas oubli une soudure. Si tout vous parat bien, vous pouvez faire le
mnage. Avec vos pinces coupantes, supprimez avec prcaution la partie inutile des
pattes des composants, juste au-dessus du joint de soudure.
Noubliez pas de couvrir dune main les morceaux mtalliques lorsque vous les
coupez. Ils risqueraient de se projeter dans lair et de crer un court-circuit ailleurs.

Tester la carte fille


Une fois la carte fille quipe dun circuit compltement mont, vous devez la
brancher et la tester. Si tout marche bien, le rsultat devrait ressembler la carte fille
de la Figure 10-18.
FIGURE 10-18 Une nouvelle carte fille prte lemploi.

Protger le projet
prsent, votre circuit ne court plus le risque de tomber en ruine, mais il reset le
protger du monde extrieur en le plaant dans un botier.

Botier tanche
La solution la plus simple pour le protger est de le mettre dans une bote. En termes
dlectronique, une telle bote sappelle un botier lectronique ou coffret de
protection. Vous trouverez un cvaste choix de botiers en plastique ou en mtal de
diffrentes formes et tailles, tanches ou non. La seule chose quil vous reste faire
est de trouver le bon !
De nombreux fournisseurs en ligne proposent des botiers, mais vous ne saurez pas si
cest le bon modle tant que vous ne laurez pas en main. Ces botiers ont des
dimensions internes et externes qui ne tiennent en gnral pas compte de
lencombrement des poteaux en plastique moul pour fixer les vis. Je vous conseille
donc de vous dplacer dans un magasin dlectronique et demporter avec vous votre
Arduino pour vrifier sil entre bien dans le botier et quil reste suffisamment
despace pour les fils et autres cartes filles que vous ajouterez par la suite.
Quand vous prvoyez de mettre votre projet dans un botier, tenez compte :
De laccs au port USB pour pouvoir tlverser du code et
lalimenter. Vous devez dvisser le botier pour mettre jour le
code. Si cela vous prend trop de temps, percez un trou assez grand
pour brancher le port USB sans ouvrir le couvercle.

De lalimentation pour faire tourner lArduino. Si lArduino nest


pas aliment via USB, quelle est sa source dnergie ? Ce peut tre
un adaptateur externe que vous branchez au mur, ce qui ncessite
un trou pour passer le fil et le jack. Vous pouvez supprimer la prise
et souder les fils aux broches Vin et GND si vous souhaitez quelque
chose de permanent. Vous pouvez aussi songer une batterie
externe.

De laccs aux entres et aux sorties. Quel est lintrt dune LED
ou dun bouton sils sont lintrieur du botier ? La plupart des
projets ont besoin de quelques contacts avec le monde extrieur. Il
faut pouvoir voir la LED ou actionner le potentiomtre !

Rflchissez bien tout ce dont a besoin le circuit avant de le souder et de le mettre


dans un botier. Examinez tous les appareils lectroniques qui vous entourent pour
vous faire une petite ide des astuces auxquelles a recouru lindustrie. Vous serez
surpris par le nombre de commandes distance qui sont en fait de simples boutons-
poussoirs dissimuls dans des gadgets qui semblent complexes.

Cbler
Pour plus de souplesse au niveau du cblage, vous pouvez prvoir de relier les
entres/sorties un bloc terminal que lon appelle un domino ou un bornier vis.
Ainsi, vous pouvez vous brancher sur les entres et sorties sans ouvrir le botier. Vous
naurez plus besoin de dessouder et ressouder le circuit.

Vriller
Lorsque vous connectez des fils, je vous conseille de les vriller ou de les tresser
ensemble pour former des pissures. Vos fils en seront renforcs et en plus ils seront
plus jolis ! Pour vriller deux fils ensemble, coupez-les en longueur et alignez leurs
extrmits puis tortillez-lensemble jusqu ce que les deux fils forment une pointe
unique.
Tresser
Si vous avez trois fils, vous pouvez les tresser de la mme manire que vous faites
une tresse de cheveux. Les trois fils dans la main, tenez-les fermement. Passez le fil le
plus gauche sur celui du milieu puis sous celui le plus droite. Rptez jusqu ce
que vous ayez en main une tresse de fils. Ils en seront plus robustes et cela fera plus
professionnel. Notez que si vous choisissez des fils de mme couleur, vous devrez
continuellement tester ces fils pour savoir qui est qui. Je vous conseille donc de
choisir trois fils de couleur diffrente.

Borniers ou blocs terminaux


Les blocs terminaux ont diffrentes tailles, et cela dtermine la quantit de courant
quils peuvent supporter. Cette valeur maximale est dailleurs indique sur le bornier.
Quand vous en choisissez un, slectionnez-le toujours avec un seuil de tolrance bien
suprieur ce dont vous avez besoin. Par exemple, si vous avez besoin dun bloc
terminal de 3 A, choisissez-en un de 5 A. Pour connecter les fils, notamment les fils
multibrins, tamez le bout du fil avec un peu de soudure ou repliez le fil dnud sous
la gaine isolante de sorte que le bout de la vis appuie du ct de lisolant. Cela
empchera la vis de couper un brin de fil lors du serrage.

Caler le contenu
Une fois que le cblage vous satisfait et que vous avez tous les trous dont vous avez
besoin, je vous conseille de caler tous les lments qui sont lintrieur du botier
afin quils ne sentrechoquent pas. Utilisez du velcro, des cales faites avec des chutes
de polystyrne ou de la colle. Utilisez des colliers serre-cble pour relier plusieurs
fils en torons.
Chapitre 11
Amliorer votre code
DANS CE CHAPITRE
Comprendre lusage dun timer

Mettre en place des systmes antirebond pour les boutons

Exploiter plusieurs boutons

Lisser les rsultats

Ajuster la sensibilit des capteurs

A
u fil du temps, en trouvant diffrents usages et besoins pour votre Arduino, vous
allez affiner votre code pour le rendre plus plus efficace. Ainsi, en repensant votre
code, vous serez en mesure de minimiser dans vos projets les effets et les rsultats
imprvus qui surviennent gnralement lorsque lon travaille avec du matriel
physique. Dans ce chapitre, vous dcouvrirez quelques projets qui vous aideront
affiner les votres.

Un meilleur Blink
Blink a probablement t votre premier croquis. Voir la premire LED sallumer a
sans doute t pour vous un moment magique. Mais que diriez-vous de lamliorer
encore ? Le croquis de base de clignotement prsent au Chapitre 4 fonctionnait bien
ceci prs, quil ne pouvait faire rien dautre.
Examinons-le nouveau :

/*
Blink
Active la LED durant une seconde, puis lteint
durant
une seconde,
et ainsi de suite.
Cet exemple est dans le domaine public.
*/

// La LED est connecte la broche 13 sur la


plupart des
cartes Arduino.
// Donnez-lui un nom
int led = 13;

// La routine setup est excute quand vous pressez


le
bouton reset
void setup() {
// Faire de la broche numrique une sortie.
pinMode(led, OUTPUT);
}

// La routine loop se rpte linfini


void loop() {
digitalWrite(led, HIGH); // Allumer la LED
delay(1000); // Attendre une
seconde
digitalWrite(led, LOW); // teindre la LED
delay(1000); // Attendre une
seconde
}

La boucle peut tre rsume comme ceci :

1. Allumer la LED.

2. Attendre une seconde.

3. teindre la LED.

4. Attendre une seconde.


Ce dlai dattente va savrer problmatique ds que vous voudrez intgrer le croquis
Blink avec un autre fragment de code. Lorsque le croquis utilise la fonction delay(), il
attend pendant la dure spcifie (dans ce cas, une seconde) et ne peut rien faire
dautre.
Si vous souhaitez modifier quelque chose par exemple, si vous souhaitez que la
LED ne clignote que lorsque le capteur de lumire nest pas clair il vous faudra
crire lintrieur de la boucle un fragment de code conditionnel bas sur if, comme
ce qui suit :

void loop() {
sensorValue=analogRead (sensorPin) ;
if(sensorPin < darkValue){
digitalWrite(led, HIGH); // Allumer la
LED
delay(1000); // Attendre une
seconde
digitalWrite(led, LOW); // teindre la
LED
delay(1000); // Attendre une
seconde
}
}

Cela fonctionne presque. Lorsque le seuil de valeur pour darkValue est franchi, le
contenu de la boucle est excut et la LED sallume, attend une seconde, steint et
attend une seconde. Mais comme le croquis est occup au clignotement durant deux
secondes, il ne peut pas vrifier si le niveau dillumination augmente de nouveau
avant que le clignotement ne sachve.
La solution consiste utiliser un timer au lieu de mettre le programme sur pause. Un
timer ou compteur ressemble une horloge que lon peut utiliser pour chronomtrer
les vnements. Par exemple, un timer peut compter de 0 1000 et raliser une
opration lorsquil atteint la valeur 1000, puis recommencer nouveau en partant
de 0. Cela savre particulirement utile pour prendre en charge des vnements
survenant intervalles rguliers, tels que surveiller un capteur chaque seconde ou
dans ce cas modifier ltat dune LED.

Mettre en place le croquis


BlinkWithoutDelay
Pour raliser ce projet, il faut :
Un Arduino Uno

Une LED (facultatif)


Placez les pattes de la LED entre la broche 13 (patte longue) et GND (patte courte),
comme lillustrent les Figures 11-1 et 11-2. Cela vous permettra de voir plus
facilement le clignotement. Si vous ne disposez pas dune LED, recherchez celle
marque dun L soudesur votre carte Arduino.
Tlversez ensuite le croquis par le bon port srie. Vous devez voir la LED clignoter
comme elle le faisait avec le croquis Blink standard.
Ouvrez le croquis BlinkWithoutDelay en slectionnant Fichier->Exemples-
>02.Digital->BlinkWithoutDelay.

FIGURE 11-1 Ici, tout ce quil vous faut cest une LED sur la broche 13.
FIGURE 11-2 Le diagramme du circuit affichant la LED sur la broche 13.

Voici le code complet correspondant au croquis BlinkWithoutDelay :

/* Blink without Delay

Allume et teint une LED connecte une broche


num-
rique, sans utiliser la fonction delay(). Ceci
signifie
quun autre code peut sexcuter en mme temps sans
tre
interrompu par le code de la LED.

Le circuit:
* LED attache la broche 13.
* Note: sur la plupart des Arduinos, il y a dj
une
LED sur la carte relie la broche 13, donc aucun
mat-
riel nest requis pour cet exemple.
cr en 2005 par David A. Mellis
modifi le 8 Fv 2010 par Paul Stoffregen
Le code de cet exemple est dans le domaine public.

http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// Constante pour dfinir le numro de la broche de


la LED
const int ledPin = 13;

// Variable pour dfinir ltat de la LED


int ledState = LOW;

long previousMillis = 0;

// La variable suivante est de type long car


lheure,
// mesure en millisecondes, devient trs vite un
trs
// grand nombre qui ne peut pas tre stock dans un
int
(limit 32767).
long interval = 1000;
// Intervalle de clignotement (millisecondes)

void setup() {
// Dfinit la broche numrique comme sortie :
pinMode(ledPin, OUTPUT);
}

void loop()
{
// Placer ici le code qui doit sexcuter
// sans cesse.
// vrifie si la LED doit clignoter; cest--dire
// si la diffrence entre lheure en cours et
// la dernire fois o la LED a clignot est plus
// grande que lintervalle auquel vous voulez
faire
clignoter la LED.
unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {


// Mmorise le moment du dernier clignotement de
la
LED
previousMillis = currentMillis;

// Si la LED est sur off activez-la et vice


versa:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;

// Dfinit la LED Selon la valeur de ledState


digitalWrite(ledPin, ledState);
} // Fin du grand bloc conditionnel if
} // Fin de la fonction loop()

Ce croquis est plus long que Blink et peut paratre plus difficile. Nhsitez pas le
parcourir ligne par ligne pour vous lapproprier.
Notez que la ligne de dbut du bloc conditionnel if(currentMillis... dfinit
tout un bloc de lignes, jusqu lavant-dernire ligne du croquis.

Comprendre le croquis
BlinkWithoutDelay
En premier lieu, dans les dclarations, nous dfinissons une constante par const
int pour stocker la valeur 13 dans ledPin car il sagit dun entier qui ne
changera pas.

// Constante pour le numro de la broche de la LED


const int ledPin = 13;

Les variables viennent ensuite. La premire est letState. Elle reoit la valeur
initiale LOW de manire ce que la LED soit teinte au dmarrage du croquis.

// Variable
int ledState = LOW; // ledState sert dfinir la
LED

Deux variables sont ensuite dclares avec le type long au lieu du type int.
Reportez-vous lencadr Les types long et unsigned long plus loin dans ce
chapitre pour en apprendre davantage sur ce point.
La premire variable previousMillis est utilise pour stocker la dure en
millimes de seconde entre deux tours de boucle.

// Mmorise le moment de la dernire fois mise


jour
long previousMillis = 0;

La seconde variable, nomme interval, correspond au temps exprim en


millisecondes entre deux clignotements, qui ici prend la valeur 1000 ms soit une
seconde.

// intervalle pour clignoter (millisecondes)


long interval = 1000;

Dans la fonction setup(), vous navez quune seule broche dfinir en tant que
OUTPUT. Comme dans les dclarations, la broche 13 fait rfrence ledPin.

void setup() {
// dfinit la broche numrique comme sortie
pinMode(ledPin, OUTPUT);
}

Dans la boucle loop(), les choses commencent se compliquer.


En premier lieu, le code du timer est excut, lequel dclare une nouvelle variable de
type unsigned long pour stocker sa valeur courante en millisecondes. Pour ce
faire, le code utilise la fonction millis() qui renvoie le nombre de millisecondes
coules depuis le dmarrage du programme Arduino. Aprs un peu plus de 50 jours,
cette valeur revient 0, parce quelle a atteint la plus rande valeur pouvant tre
stocke dans un entier long. Mais cela reprsente pour la plupart des applications une
dure plus que suffisante.

void loop() {
unsigned long currentMillis = millis();

Les variables dclares lintrieur dune boucle ou dune fonction sont nommes
variables locales. Elles nexistent qu lintrieur de la fonction dans laquelle elles
ont t dclares (ainsi que dans les autres sous-fonctions dclares depuis cette
dernire) ; elles cessent dexister ds que la fonction sachve. Elles seront recres
lors du prochain appel la fonction.
Si une de vos variables doit tre lue ou renseigne par dautres fonctions ou fragments
de code, vous devez utiliser une variable globale et la dclarer au dbut du croquis
avant la boucle de configuration.
Il nous faut ensuite vrifier la valeur courante retourne par millis() pour savoir
combien de temps sest coul. Pour ce faire, il suffit dune simple condition if qui
soustrait la valeur prcdente la valeur courante pour obtenir la diffrence. Si cette
diffrence est plus grande que la valeur choisie pour lintervalle, le croquis sait quil
est temps de clignoter. Il est important de rinitialiser previousMillis car sinon
lintervalle ne serait mesur quune seule fois. Linstruction previousMillis =
currentMillis sen charge :

if(currentMillis - previousMillis > interval) {


// Enregistre la dernire fois o la LED a
clignot
previousMillis = currentMillis;

Comme la LED peut tre actuellement allume ou teinte, le code doit vrifier ltat
de cette dernire pour savoir ce quil doit faire pour inverser son tat. Cet tat est
stock dans ledState, ainsi une autre simple condition if peut vrifier cet tat et
raliser linversion. Si la valeur est LOW alors on la passe HIGH et inversement.
Le code suivant met jour la variable ledState :

// Si la LED est sur off, activez-la et vice versa:


if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;

prsent, il ne reste plus qu dfinir le nouvel tat de la LED en utilisant


digitalWrite() :

// Dfinit la LED avec la valeur de ledState


digitalWrite(ledPin, ledState);
}
}

Ce code permet de faire clignoter votre LED tout en effectuant dautres fonctions en
mme temps.

LES TYPES LONG ET UNSIGNED LONG

Le mot rserv long dfinit un type de donnes numrique. Il permet de


rserver un espace en mmoire pour stocker de trs grands nombres allant
de - + deux milliards environ (de -2 147 483 648 +2 147 483 647), alors quun
entier de base dfini avec int ne peut stoker que les valeurs entires
entre -32 768 et +32 767.

Dans notre projet, lorsque nous mesurons le temps en millisecondes, nous


devons manipuler de grands nombres car chaque seconde est stocke comme
tant 1 000 millisecondes. Pour vous donner une ide de la taille dun entier
long, imaginez la dure maximum quil peut stocker. Cette valeur correspond
2 147 483 secondes et 647 centimes, soit 35 791 minutes ou 596,5 heures
cest--dire approximativement 25 jours (seulement) !

Parfois, nous navons pas besoin de valeur ngative, aussi pour viter des
calculs inutiles, nous pouvons utiliser des unsigned long la place de long.
Un unsigned long est similaire au long ceci prs quil ne dispose pas de
valeur ngative. Ce qui donne aux unsigned long une plage de valeurs
double, allant de 0 +4 294 977 295.
Pour grer les effets de rebond du
bouton
Un trange fait se produit lorsque votre bouton revient sa position initiale. Le
microcontrleur de votre Arduino peut lire ltat du commutateur des milliers de fois
par seconde, ce qui est bien plus rapide que ce que nous sommes capables de faire.
Cest une bonne chose dune certaine manire, car cela nous assure une lecture
instantane (aussi loin que la perception humaine est concerne), mais il y a parfois un
moment de flou lorsque le contact du commutateur nest ni totalement enfonc, ni
totalement relch. Cela laisse ce dernier dans un tat incertain jusqu ce quil
atteigne une position bien dtermine. Pour liminer ce dsagrment, vous devez
ignorer les changements soudains lorsque vous valuez les tats du commutateur avec
un timer. Cest relativement simple et cela peut grandement amliorer la fiabilit de
vos boutons.

Construire le circuit Debounce


Ralisez le circuit de la Figure 11-3 puis essayez le croquis Debounce.
FIGURE 11-3 Le schma du circuit du bouton-poussoir.

Pour cela, il vous faut :


Un Arduino Uno

Une platine dessai

Un bouton-poussoir

Une LED

Une rsistance de 10 k

Des straps
Ralisez le circuit illustr dans les Figures 11-3 et 11-4 en utilisant une platine
dessai. La LED peut tre insre directement sur la broche 13 et sur la broche GND
voisine.

FIGURE 11-4 Schma du circuit de bouton-poussoir Debounce.

Crez le circuit et choisissez Fichier->Exemples->02.Digital->Debounce pour


charger le croquis Debounce du bouton-poussoir. Le code complet correspondant au
croquis Debounce est le suivant :

/*
Debounce

chaque fois que la broche entre passe de LOW


HIGH
(par exemple lorsque lon appuie sur le bouton-
poussoir),
la broche sortie passe de LOW HIGH ou de HIGH
LOW. Un
dlai minimum est ajout entre les bascules pour
viter
des rebonds sur le circuit (pour les ignorer).
Le circuit:
* une LED relie la broche 13
* un bouton-poussoir relie la broche 2 +5V
* une rsistance de 10 Kohm relie la broche 2
* Note: Sur la plupart des cartes Arduino, une LED
est
dj connecte la broche 13, vous navez donc pas
be-
soin de composants supplmentaires pour cet exemple.

Cr le 21 Novembre 2006
par David A. Mellis
modifi le 30 Aot 2011
par Limor Fried

Ce code exemple est dans le domaine public.

http://www.arduino.cc/en/Tutorial/Debounce
*/

// Constantes
// Pour dfinir le numro des broches
const int buttonPin = 2; // numro de la broche du
bou-
ton-poussoir
const int ledPin = 13; // numro de la broche de
la LED

// Variables
int ledState = HIGH; // tat actuel de la bro-
che sortie
int buttonState; // lecture actuelle de la
bro-
che entre
int lastButtonState = LOW; // lecture prcdente de
la
broche entre

// Les variables suivantes sont de type long car le


temps, mesur en millise-
// condes, devient trs vite un nombre trs grand

long lastDebounceTime = 0; // Dernier moment o la


sortie
a bascul
long debounceDelay = 50; // Dlai de lantirebond

void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}

void loop() {
// Stocke ltat du commutateur dans une variable
locale:
int reading = digitalRead(buttonPin);

// Vrifie si on a press le bouton


// (lentre passe de LOW HIGH ou le contraire).
On
// attend assez longtemps depuis la dernire
pression
pour ignorer le bruit

// Si le commutateur change, en raison du bruit ou


de
la pression:
if (reading != lastButtonState) {
// Redfinit le timer de lantirebond
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay)
{
// Quelle que soit la lecture, dure plus
longtemps
// que le dlai de lantirebond, il prend alors
ltat actuel:
buttonState = reading;
}

// Dfinit la LED qui utilise le bouton:


digitalWrite(ledPin, buttonState);
// Enregistre la lecture dans lastButtonState.
// Puis effectue le tour de boucle suivant.
lastButtonState = reading;

Lorsque vous aurez tlvers le croquis, vous devez obtenir un bouton antirebond
fiable. Il peut tre difficile de se rendre compte des effets, car si tout fonctionne
correctement, vous ne devrez voir ici quun bouton contrlant prcisment votre LED.

Comprendre le croquis Debounce


Le croquis comporte quelques variables. Les deux premires sont des constantes
utilises pour dfinir les broches dentre et de sortie.

// Constantes
const int buttonPin = 2; // numro de la broche du
bou-
ton-poussoir
const int ledPin = 13; // numro de la broche de
la LED

Le groupe de variables suivant contient des informations sur ltat du bouton. La


variable ledState reoit la valeur HIGH de manire ce que la LED soit
allume ds le dpart ; la variable buttonState est laisse vide pour contenir
ltat courant ; la variable lastButtonState contient ltat prcdent du bouton
afin de pouvoir comparer ce dernier avec ltat courant.

// Variables
int ledState = HIGH;
int buttonState;
int lastButtonState = LOW;

Enfin, des variables de type long sont dclares pour stocker les dures. Elles sont
utilises dans le timer pour contrler le temps coul entre les lectures afin de
prvenir des changements soudains de valeur telle que celle qui survient lors des
rebonds.

// Variables de type long


long lastDebounceTime = 0;
long debounceDelay = 50;

La partie setup() est simple, puisquelle ne dfinit que les broches dentre et de
sortie.

void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}

lintrieur de la boucle, la lecture de la broche du bouton est effectue, puis stocke


dans une variable nomme ici reading :

void loop() {
// Lit ltat du commutateur dans une variable
locale:
int reading = digitalRead(buttonPin);

reading est ensuite compare lastButtonState. Lors de la premire


excution, lastButtonState vaut LOW, car cest la valeur qui lui est assigne
lors de sa dclaration en dbut de croquis.
Dans linstruction if, le symbole de comparaison ! = est employ. Ce qui signifie :
si reading est diffrent de lastButtonState, alors faire quelque chose.
Dans laffirmative, lastDebounceTime est mise jour et une nouvelle
comparaison pourra se faire lors du prochain tour de boucle.

// Si le commutateur change, en raison du bruit ou


de la
pression:
if (reading != lastButtonState) {
// Redfinit le timer de lantirebond
lastDebounceTime = millis();
}

Si la valeur de reading demeure la mme durant un dlai suprieur au dlai


antirebond de 50 ms, nous pouvons considrer que la valeur nest pas errone et
quelle peut tre transmise dans la variable buttonState.

if ((millis() - lastDebounceTime) > debounceDelay)


{
// quelle que soit la lecture, dure plus
longtemps
// que le dlai de lantirebond, il prend alors
ltat actuel:
buttonState = reading;
}

Cette valeur de confiance peut ensuite tre utilise pour dclencher directement la
LED. Dans ce cas, si le bouton vaut HIGH, le bouton est enfonc et la mme valeur
HIGH peut tre crite dans la LED pour lallumer.

digitalWrite(ledPin, buttonState);

La valeur courante de buttonState prend la valeur de lastButtonState


pour le prochain tour de boucle.

lastButtonState = reading; }

Les boutons-poussoirs et leurs dclencheurs peuvent tre plus ou moins fiables, en


fonction de la manire dont ils sont fabriqus. En employant un bloc de code comme
celui-ci, vous vitez les ventuelles incohrences et obtenez de meilleurs rsultats.
Un bouton encore meilleur
Les boutons sont des objets trs simples. Ils sont soit enfoncs, soit relchs ;
cependant, en observant leurs changements dtat et en les interprtant, vous pouvez
raliser un bouton plus intelligent. Ainsi, si vous pouvez dterminer le moment o un
bouton a t press, il nest plus ncessaire de lire constamment sa valeur. Il suffit de
connatre le moment o il changera dtat.
Cette pratique constitue une meilleure approche pour connecter votre Arduino un
ordinateur ; elle permet de ne recevoir que les donnes ncessaires plutt que de
monopoliser le port srie.

Raliser le circuit StateChangeDetection


Pour raliser ce circuit, il faut :
Un Arduino Uno

Une platine dessai ;

Un bouton-poussoir

Une rsistance de 10 k

Une LED

Des straps

En vous basant sur le schma et le diagramme de circuit illustrs aux Figures 11-
5 et 11-6, vous pouvez crer un simple circuit comprenant un bouton et une LED en
sortie. Le matriel de ce circuit est le mme que celui utilis pour le croquis du
bouton basique, mais ici, en utilisant un nouveau programme, vous pouvez rendre ce
bouton bien plus intelligent.
FIGURE 11-5 Le schma de cblage du circuit StateChangeDetection.
FIGURE 11-6 Le schma du circuit StateChangeDetection.

Terminez le circuit et ouvrez un nouveau croquis Arduino.


Choisissez Fichier->Exemples->02.Digital->StateChangeDetection depuis le menu
Arduino pour charger le croquis dans lditeur.

/* StateChangeDetection

Dtection de changement dtat


Vous navez pas besoin de connatre tout le temps
ltat
dentre input, mais
seulement quand lentre passe dun tat lautre.
Par
exemple, vous voulez
savoir quand un bouton passe de off on. Cest ce
quon
appelle la dtection de
changement dtat.

Le circuit:
* Bouton-poussoir reli la broche 2 de +5V
* Rsistance de 10 Kohm relie la broche 2
* LED relie la broche 13 (on utilise la LED
intgre
dans la plupart des
cartes Arduino)

cr le 27 Sept 2005
modifi le 30 Aot 2011
par Tom Igoe

Ce code exemple est dans le domaine public.

http://arduino.cc/en/Tutorial/ButtonStateChange
*/
// Constantes
const int buttonPin = 2; // broche laquelle est
atta-
ch le bouton-poussoir
const int ledPin = 13; // broche laquelle est
atta-
che la LED

// Variables
int buttonPushCounter = 0; // compteur du nombre de
pres-
sions sur le bouton
int buttonState = 0; // tat actuel du bouton
int lastButtonState = 0; // tat prcdent du
bouton

void setup() {
// initialise la broche du bouton comme une entre
pinMode(buttonPin, INPUT);
// initialise la LED comme une sortie
pinMode(ledPin, OUTPUT);
// initialise la communication srie
Serial.begin(9600);

}
void loop()
// lit la broche dentre du bouton-poussoir:
buttonState = digitalRead(buttonPin);

// compare buttonState son tat prcdent


if (buttonState != lastButtonState) {
// si ltat a chang, incrmente le compteur
if (buttonState == HIGH) {
// si ltat actuel est HIGH alors le bouton
// est pass de off on:
buttonPushCounter++;
Serial.println(on);
Serial.print(nombre de pressions sur le
bouton:
);
Serial.println(buttonPushCounter);
}
else {
// si ltat actuel est LOW alors le bouton
// est pass de on off:
Serial.println(off);
}
}
// enregistre ltat actuel comme tant le dernier
tat,
// pour le prochain tour de boucle
lastButtonState = buttonState;

// Active la LED toutes les 4 pressions de bouton en


// vrifiant le module du compteur du bouton-
poussoir.
// La fonction modulo % donne le reste de la
division de
deux nombres:
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}

Lancez la compilation pour vrifier votre code. La compilation devrait mettre en


vidence toute erreur grammaticale. Si le croquis se compile correctement, cliquez
sur Tlverser pour envoyer le croquis vers votre carte.
Lorsque le transfert est effectu, observez le moniteur srie qui devrait vous indiquer
chaque fois que le bouton est enfonc ou relch, ainsi que le nombre de fois o il a
t press. De plus, la LED devrait silluminer chaque fois que quatre pressions
sont comptes.
Si rien ne se passe, essayez ce qui suit :
Revrifiez votre cblage.

Assurez-vous que les numros de broches sont les bons.

Vrifiez les autres connexions la platine dessai.

Comprendre le croquis
StateChangeDetection
Comme les broches de sortie et dentre ne changeront pas de numro, elles sont
dclares sous forme de constantes : la broche 2 pour le bouton-poussoir et la
broche 13 pour la LED.

// Constantes
const int buttonPin = 2; // broche laquelle est
atta-
ch le bouton-poussoir
const int ledPin = 13; // broche laquelle est
atta-
che la LED

Des variables sont ncessaires pour garder une trace du comportement du bouton-
poussoir. Lune dentre elles correspond un compteur qui comptabilise le nombre de
pressions du bouton, deux autres contiennent les tats courant et prcdent de ce
dernier. Elles sont employes pour contrler les pressions sur le bouton afin que le
signal passe de HIGH LOW et de LOW HIGH.

// Variables
int buttonPushCounter = 0; // compteur du nombre de
pres-
sions sur le bouton
int buttonState = 0; // tat actuel du bouton
int lastButtonState = 0; // tat prcdent du
bouton
Dans la section setup(), les broches reoivent respectivement les valeurs INPUT et
OUTPUT. Le port srie est ouvert afin de transmettre les changements dtat du
bouton-poussoir.

void setup() {
// initialise la broche du bouton comme une
entre:
pinMode(buttonPin, INPUT);
// initialise la LED comme une sortie:
pinMode(ledPin, OUTPUT);
// initialise la communication en srie:
Serial.begin(9600);

La premire commande de la boucle principale consiste lire ltat du bouton-


poussoir.

void loop()
// lit la broche dentre du bouton-poussoir:
buttonState = digitalRead(buttonPin);

Si cet tat nest pas gal la valeur prcdente, ce qui survient lorsque le bouton-
poussoir est enfonc, le programme excute le bloc dinstructions contrl par le test
if qui suit.

// compare buttonState son tat prcdent


if (buttonState != lastButtonState) {

La condition suivante vrifie si la valeur bouton vaut HIGH ou LOW. Si cette dernire
vaut HIGH, alors le bouton-poussoir est enfonc.

// si ltat a chang, incrmente le compteur


if (buttonState == HIGH) {
// si ltat actuel est HIGH alors le bouton
passe de
off on

Ce fragment de code incrmente le compteur, puis affiche une ligne sur le moniteur
srie indiquant ltat du bouton et le nombre de pressions quil a reues. Le compteur
est incrment lorsque le bouton est totalement enfonc.
buttonPushCounter++;
Serial.println(on);
Serial.print(Nombre de pressions sur le bouton :
);
Serial.println(buttonPushCounter);
}

Si le bouton-poussoir passe de HIGH LOW, alors le bouton est dans ltat relch et
ce changement dtat est affich sur le moniteur srie, comme lillustre la Figure 11-7.

FIGURE 11-7 Le moniteur srie affiche les messages mis par le croquis afin de voir ce qui se
passe dans votre Arduino.

else {
// si ltat actuel est LOW alors le bouton
// est pass de on off:
Serial.println(off);
}
}

Ce fragment de code vous permet de cliquer sur le bouton-poussoir plutt que davoir
maintenir la pression.
Comme un changement est survenu, ltat courant devient le dernier tat en
prparation du prochain tour de boucle.

// Enregistre ltat actuel comme tant le dernier


tat,
// pour le prochain tour de boucle
lastButtonState = buttonState;

la fin de la boucle, une vrification est effectue pour sassurer que quatre
pressions ont eu lieu. Si le nombre total de pressions modulo quatre est gal zro, la
broche LED prend la valeur HIGH. Dans le cas contraire, elle prend de nouveau la
valeur LOW.

// Active la LED toutes les 4 pressions de bouton en


// cherchant le modulo du compteur du bouton-
poussoir.
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}

Vous pourrez lgitimement vous demander, mais pourquoi ce croquis ninclut-il pas
dantirebond ? alors que nous avons prsent cete technique dans la section
prcdente. Les croquis des exemples Arduino sont conus pour vous aider
comprendre facilement des principes individuels afin de vous armer pour toutes les
situations. Cependant, combiner plusieurs techniques peut rendre les choses plus
difficiles pour vous, il est en effet plus simple de comprendre comment les lments
fonctionnent un par un.
Il est possible de combiner plusieurs exemples pour bnficier des avantages de
chacun. Cette approche dpasse le cadre de ce livre, mais nous vous conseillons de
vous y entraner en ouvrant deux croquis cte cte en combinant les lignes une une
et en vrifiant chaque fois quil ny a pas de rptition de nom de variables. Le
raccourci pour la compilation (Ctrl + R ou Cmd + R) vous sera trs utile. Bonne
chance !

Amliorer les capteurs


Les capteurs analogiques peuvent tre trs prcis, ils vous permettent de mesurer la
luminosit ou les distances trs finement. Mais ils peuvent devenir trop sensibles et
tressaillir au moindre changement. Si cest le but recherch, tant mieux.
Dans le cas contraire, vous souhaiterez sans doute lisser les rsultats de manire
minimiser ces effets . Lisser vos rsultats revient en faire la moyenne afin de
minimiser ces anomalies. Au Chapitre 17, vous apprendrez reprsenter ces rsultats
sous forme de graphiques via Processing, ce qui vous sera dune grande aide pour
reprer les incohrences.

Raliser le circuit Smoothing


Dans cet exemple, vous tenterez de lisser les valeurs produites par un capteur de
lumire.
Pour raliser ce croquis, il faut :
Un Arduino Uno

Une platine dessai

Une LED

Un capteur de lumire

Une rsistance de 10 k

Une rsistance de 220 ohms

Des straps

Le circuit suivant contient une rsistance dpendante la lumire (LDR) comme


lillustrent les Figures 11-8 et 11-9.
Choisissez Fichier->Exemples->03.Analog->Smoothing pour charger le croquis et
le tlverser.
Le circuit indique quun potentiomtre est envisageable pour les tests. Cest vrai, mais
il est plus difficile de voir les effets dun lissage avec un potentiomtre, car le
fonctionnement de lappareil gnre dj des entres analogiques lisses.
Les capteurs de luminosit, de distance et de mouvements sont beaucoup plus
susceptibles davoir besoin dun lissage.

/*
Smoothing
Lit de manire rpte dans lentre analogique,
calcule
une moyenne dex-
cution et laffiche sur lordinateur. Garde dix
lectures
dans un tableau et en
fait la moyenne de manire continue.

FIGURE 11-8 Le schma du circuit du capteur de luminosit.


FIGURE 11-9 Le schma du circuit dun capteur de luminosit.

Cr le 22 Avril 2007
Par David A. Mellis <dam@mellis.org>
Modifi le 9 Avril 2012
par Tom Igoe
http://www.arduino.cc/en/Tutorial/Smoothing

Ce code exemple est dans le domaine public.


*/

//Dfinit le nombre dexemplaires conserver. Plus


le
nombre est lev,
//plus il y aura de lectures lisses, mais plus
lentement
la sortie rpondra
// lentre. Lutilisation dune constante la
place
dune variable permet
//dutiliser cette valeur pour dterminer la taille
du
tableau de lectures.

const int numReadings = 10;

int readings[numReadings]; // lectures de lentre


ana-
logique
int index = 0; // index de la lecture
en
cours
int total = 0; // total en cours
int average = 0; // moyenne

int inputPin = A0;

void setup()
{
// initialise la communication en srie avec
lordina-
teur:
Serial.begin(9600);
// initialise toutes les lectures 0:
for (int thisReading = 0; thisReading <
numReadings;
thisReading++)
readings[thisReading] = 0;
}

void loop() {
// soustrait la dernire lecture:
total= total - readings[index];
// lit le capteur:
readings[index] = analogRead(inputPin);
// ajoute la lecture au total:
total= total + readings[index];
// avance la position suivante dans le tableau:
index = index + 1;

// si arriv en fin de tableau...


if (index >= numReadings)
// ...retour au dbut:
index = 0;

// calcule la moyenne:
average = total / numReadings;
// lenvoie en tant que chiffre ASCII
Serial.println(average);
delay(1); // dlai entre les lectures pour la
stabilit
}

Ce croquis garantit une lecture propre des informations fournies par le capteur. Le
lissage est obtenu en ralisant la moyenne dun certain nombre de lectures. Le
processus de calcul de la moyenne peut ralentir le nombre de lectures effectues par
lArduino chaque seconde. Cependant, comme ce dernier est capable de lire les
informations bien plus vite que vous, vous ne devrez pas remarquer de grands
changements.

Comprendre le croquis Smoothing


Le croquis commence par la dclaration des constantes et des variables. On
commence par le nombre de lectures dont on fera la moyenne, dclares dans
numReading avec une valeur de 10.

const int numReadings = 10;

Les quatre variables suivantes sont utilises pour garder trace des dernires valeurs
lues. Les valeurs provenant des capteurs sont ajoutes dans un tableau (ou une liste)
prenant ici le nom readings. Le nombre dlments contenus dans le tableau
readings est dfini entre crochets. Comme numReadings a dj t dclar, il
peut tre utilis pour dfinir la taille du tableau 10 (lments numrots ou
indexs de 0 9).

int readings[numReadings]; // lectures dans lentre


ana-
logique

La valeur contenue dans la variable index indique le numro de la lecture courante.


Comme cette valeur est incrmente chaque lecture, elle est utilise pour stocker
cette dernire au bon endroit dans votre tableau.

int index = 0; // index de la lecture en cours

La variable total correspond au total cumul incrment chaque lecture. La


variable average stocke la valeur de la moyenne une fois le total calcul.

int total = 0; // total en cours


int average = 0; // moyenne

La dernire variable est nomme inputPin, elle correspond la broche analogique


en train dtre lue.

int inputPin = A0;

Lors de la configuration, le port srie est initialis afin de vous transmettre les
lectures provenant du capteur de luminosit.

void setup()
{
// initialise la communication en srie avec
lordina-
teur:
Serial.begin(9600);

Nous arrivons ensuite la boucle for utilise pour rinitialiser le tableau. Dans la
boucle, une nouvelle variable locale (thisReading) est initialise et mise zro.
Cette variable est ensuite compare la longueur du tableau. Si elle est infrieure la
longueur de ce dernier, lentre correspondante du tableau prend la valeur 0.

// initialise toutes les lectures 0:


for (int thisReading = 0; thisReading <
numReadings;
thisReading++)
readings[thisReading] = 0;
}

Ce type dautomatisation est parfait pour crer des tableaux. Une alternative consiste
crire ces valeurs sous forme de variables entires. Cest moins efficace la fois
pour vous et pour lArduino.
La premire ligne de code de la boucle principale soustrait au total les valeurs
contenues lindex courant du tableau.

void loop() {
// soustrait la dernire lecture:
total= total - readings[index];

La ligne suivante rcupre une nouvelle lecture via analogRead et la stocke dans
le tableau lindex courant, crasant ainsi la valeur prcdente.

// lit depuis le capteur:


readings[index] = analogRead(inputPin);

Cette lecture est alors ajoute au total.

// ajoute la lecture au total:


total= total + readings[index];
// avance la position suivante dans le tableau:
index = index + 1;

Il est important de savoir si la fin du tableau est atteinte afin dviter que le
programme ne boucle ternellement. Pour cela, il suffit dune simple instruction if :
si la valeur de lindex est suprieure ou gale au nombre de lectures, lindex est remis
zro. Ainsi, linstruction if permet de savoir si la valeur dindex est comprise
entre 0 et 9 et de la remettre zro lorsquelle atteint 10.

// si fin du tableau...
if (index >= numReadings)
// ...retour au dbut:
index = 0;

Pour obtenir la moyenne de toutes les valeurs contenues dans le tableau, le total est
simplement divis par le nombre de lectures. Cette moyenne est ensuite affiche sur le
moniteur srie. Un dlai dune milliseconde est ensuite ajout fin damliorer la
stabilit des lectures.
// calcule la moyenne:
average = total / numReadings;
// lenvoie comme chiffre ASCII
Serial.println(average);

delay(1); // dlai entre les lectures pour la


stabilit
}

Lutilisation de procdures simples comme celle-ci pour lisser vos rsultats vous aide
viter et mieux contrler les comportements erratiques qui surviennent dans vos
projets. En calculer la moyenne savre trs utile si les lectures du capteur sont
directement lies la sortie.

talonner les entres


Considrez ltalonnage de votre circuit comme le rglage dun thermostat dans votre
appartement. Vos radiateurs sont capables de fournir une gamme de tempratures, mais
selon lendroit o vous vous situez dans le monde, elles ne seront pas toutes
appropries. Si par exemple vous vivez sous un climat tempr vous naurez peut-tre
recours au chauffage que quelques mois par an. Mais si vous vivez sous un climat
froid, vous le pousserez au maximum chaque nuit.
En talonnant les capteurs de votre projet Arduino, vous pouvez adapter ce dernier
sa localisation. Dans cet exemple, vous allez apprendre talonner la luminosit. La
lumire bien sr est trs versatile, selon que vous tes lintrieur ou lextrieur,
dans une pice bien claire ou la lueur dune bougie. Malgr ces variations trs
importantes, tous ces types de luminosit peuvent tre capts et interprts par votre
Arduino. Le croquis suivant nous montre la manire dadapter un capteur de lumire
son environnement.

Raliser le circuit Calibration


Pour cet exemple, ralisez le circuit illustr aux Figures 11-10 et 11-11 pour talonner
votre capteur de luminosit automatiquement.
FIGURE 11-10 Le schma du circuit de capteur de luminosit.
FIGURE 11-11 Le schma du circuit du capteur de luminosit.

Il vous faut :
Un Arduino Uno

Une platine dessai

Une LED

Un capteur de lumire

Une rsistance de 10 k

Une rsistance de 220 ohms

Des straps

Raliser le circuit et ouvrez Fichier->Exemples->03.Analog->Calibration. Le code


de cet exemple est le suivant :

/*
Calibration

Dmontre une technique dtalonnage de lentre dun


capteur. La lecture du capteur pendant les cinq
premires
secondes de lexcution du croquis dfinit le
minimum et
le maximum des valeurs lues sur la broche du
capteur.

Le circuit:
* Capteur analogique (potentiomtre) attach
lentre
analogique 0
* LED attache la broche numrique 9

cr 29 Oct 2008
Par David A Mellis
modifi 30 Aot 2011
par Tom Igoe

http://arduino.cc/en/Tutorial/Calibration

Ce code exemple est dans le domaine public.


*/

// Constantes
const int sensorPin = A0; // broche laquelle est
atta-
che le capteur
const int ledPin = 9; // broche laquelle est
atta-
ch la LED

// Variables
int sensorValue = 0; // valeur du capteur
int sensorMin = 1023; // valeur minimum du
capteur
int sensorMax = 0; // valeur maximum du
capteur

void setup() {
// Active la LED pour signaler le dbut de
ltalon-
nage:
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);

// Etalonne pendant les cinq premires secondes


while (millis() < 5000) {
sensorValue = analogRead(sensorPin);
// Enregistre la valeur maximale du capteur
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}

// Enregistre la valeur minimale du capteur


if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
// Signale la fin de ltalonnage
digitalWrite(13, LOW);
}

void loop() {
// Lit le capteur
sensorValue = analogRead(sensorPin);

// Applique ltalonnage la lecture du capteur


sensorValue = map(sensorValue, sensorMin,
sensorMax, 0,
255);

// Si la valeur du capteur est en dehors de la


plage vue
pendant ltalonnage
sensorValue = constrain(sensorValue, 0, 255);

// Fait varier lintensit de la LED en utilisant


la
valeur talonne
analogWrite(ledPin, sensorValue);
}
// FIN

Tlversez le croquis et laissez votre Arduino saccoutumer au niveau de lumire


ambiant durant cinq secondes. Ensuite, essayez de passer vos mains au-dessus. Vous
devriez le trouver beaucoup plus ractif que lors dune lecture analogique normale.
Comprendre le croquis Calibration
La premire partie du croquis dfinit toutes les constantes et les variables. Les
constantes correspondent aux broches utilises pour le capteur de lumire et pour la
LED. Notez que comme lintensit de la LED varie, il vous faut utiliser la broche
PWM.

// Constantes
const int sensorPin = A0; // broche laquelle est
atta-
che le capteur
const int ledPin = 9; // broche laquelle est
atta-
ch la LED

Les variables sont utilises pour la valeur courante du capteur et pour ses valeurs
minimales et maximales. Vous pouvez voir que sensorMin contient initialement
une valeur leve alors que sensorMax contient une valeur faible.

// variables:
int sensorValue = 0; // la valeur du capteur
int sensorMin = 1023; // valeur minimale du
capteur
int sensorMax = 0; // valeur maximale du
capteur

Lors de la configuration, pinMode dfinit la broche 13 avec la valeur OUTPUT.


Puis un appel digitalWrite assigne la valeur HIGH la broche 13, ce qui
indique que le capteur est dans une phrase dtalonnage.

void setup() {
// Active la LED pour signaler le dbut de
ltalonnage
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);

Durant les cinq premires secondes, le capteur est talonn. Comme la fonction
millis() commence compter les (milli)secondes ds le dpart du programme, la
manire la plus simple de compter cinq secondes est dutiliser une boucle while. Le
code suivant vrifie la valeur retourne par millis() jusqu ce que cette dernire
vaille 5000 (5 secondes).

// Etalonne (calibre) pendant les cinq premires


se-
condes
while (millis() < 5000) {

Les accolades du vbloc while contiennent tout le code dtalonnage. sensorValue


stocke la lecture courante du capteur. Si cette lecture est suprieure au maximum ou
infrieure au minimum, les valeurs sont mises jour.

sensorValue = analogRead(sensorPin);

// Enregistre la valeur maximale du capteur


if (sensorValue > sensorMax) {
sensorMax = sensorValue;
} // Fin du sous-bloc if

// Enregistre la valeur minimale du capteur


if (sensorValue < sensorMin) {
sensorMin = sensorValue;
} // Fin du sous-bloc if

La broche de la LED reoit alors la valeur LOW afin dindiquer que la phase
dtalonnage est termine.

// Signale la fin de ltalonnage


digitalWrite(13, LOW);
} // Fin du bloc while

Maintenant que lintervalle est connu, il suffit de lappliquer la LED de sortie. Une
lecture est faite depuis sensorPin, mais sa valeur est comprise entre 0 et 1 024.
Elle doit donc tre convertie dans lintervalle de la LED compris entre 0 et 255.
sensorValue est ainsi convertie via la fonction map().

void loop() {
// lit le capteur:
sensorValue = analogRead(sensorPin);
// applique ltalonnage la lecture du capteur
sensorValue = map(sensorValue, sensorMin,
sensorMax, 0,
255);

Il est toujours possible pour le capteur de lire des valeurs situes en dehors de
ltalonnage, aussi la valeur sensorValue doit tre restreinte via la fonction
constrain(). Ce qui signifie que toutes les valeurs en dehors de la plage 0-
255 seront ignores. Ltalonnage nous donne une bonne ide de lventail des
valeurs, aussi toutes les valeurs plus grandes ou plus petites sont susceptibles dtre
des anomalies.

// Si la valeur du capteur est hors de la plage vue


pen-
dant ltalonnage
sensorValue = constrain(sensorValue, 0, 255);

Il ne reste plus qu mettre jour la LED avec les valeurs converties et contraintes
via une criture analogique vers ledPin.

// fait varier lintensit de la LED en utilisant


la
valeur talonne:
analogWrite(ledPin, sensorValue);
}

Ce code devrait vous permettre dobtenir une meilleure reprsentation des valeurs
renvoyes par votre capteur en fonction de lenvironnement o vous vous situez.
Ltalonnage nest excut quune seule fois lors du dmarrage du programme. Si les
rsultats ne vous semblent pas convaincants, il est prfrable de le relancer ou
deffectuer un talonnage sur une plus longue priode. Ltalonnage est conu pour
supprimer le bruit et les variations erratiques dans vos lectures.
Chapitre 12
Chocs, sons et ultrasons
DANS CE CHAPITRE
En savoir plus sur les capteurs

Comprendre la complexit des entres

Payer le juste prix

Savoir o utiliser les capteurs

Cbler quelques exemples

D
ans mon exprience de lenseignement, jai souvent remarqu que ds quune
personne a une ide, elle essaye de la mettre en uvre en utilisant le matriel sa
disposition plutt que de se concentrer sur ce quelle souhaite raliser. Mme si
un Arduino est une bote outils offrant de nombreuses possibilits pour rsoudre vos
problmes, lutilisation du bon outil est la cl du succs.

Si vous vous rendez sur un site consacr Arduino, vous y trouverez frquemment une
liste de capteurs qui vous laissera parfois perplexe. Une autre approche rpandue
consiste rechercher sur le Web des projets similaires au vtre afin de voir comment
leurs auteurs les ont raliss. Les efforts et les succs des autres peuvent savrer une
grande source dinspiration et denseignement, mais ces ressources peuvent galement
vous plonger dans un abme devant le trop grand nombre de solutions possibles qui
soffrent vous, certaines tant mme surdimensionnes par rapport vos besoins.
Dans ce chapitre, vous allez apprendre comment utiliser de nombreux capteurs, mais
galement et cest le plus important pourquoi les utiliser.
Notez que tous les prix indiqus correspondent lachat dun capteur lunit.
Cependant, en faisant jouer la concurrence ou en achetant des lots, vous devriez tre
en mesure de raliser des conomies importantes. Reportez-vous aux Chapitres 19
et 20 pour obtenir des informations sur les boutiques intressantes pour commencer
vos recherches.

Simplifier la ralisation dun bouton


Le premier capteur dcrit dans ce livre (Chapitre 7) est sans doute le plus simple : le
bouton-poussoir. Il en existe de nombreux types ; les interrupteurs sont galement
inclus dans cette catgorie. En gnral, les interrupteurs restent dans la position
choisie, mais il existe des exceptions cette rgle. Il sagit des microcommutateurs et
boutons bascule. Dun point de vue lectrique, ils sont quasiment identiques aux
autres boutons, leur diffrence est principalement mcanique.
Si vous envisagez dutiliser un bouton pour vos projets, tenez compte des points
suivants :
La complexit : Dans sa forme la plus simple, un bouton-poussoir
peut tre compos de deux contacts mtalliques que lon rapproche
lun de lautre. Dans sa version la plus complexe, il peut sagir dun
ensemble de contacts soigneusement usins qui est insr dans un
botier. Un bouton-poussoir, comme celui de votre kit, est parfait
pour la platine dessai et le prototypage. Cependant, sil tait utilis
dans la vie relle, il ncessiterait une protection. Si vous dmontez
une ancienne manette de console de jeux, vous risquez dy trouver
un bouton-poussoir, mais si vous avez besoin dun bouton plus
industriel, comme les boutons darrt durgence, linterrupteur doit
tre plus grand, plus robuste et devra peut-tre mme tre pourvu
dun ressort de grande taille pour supporter les coups de poings.

Lavantage des boutons-poussoirs vient du fait quils ne sont jamais


vraiment compliqus.

Le prix : Le cot dun bouton-poussoir peut varier de manire


importante en fonction de la qualit de son botier et des matriaux
qui le composent. Les prix vont de quelques dizaines de centimes
pour un microcommutateur jusqu dpasser les 100 pour un
bouton darrt industriel dans son botier. Cependant, avec un peu
dimagination, il est tout fait possible dutiliser des boutons peu
chers pour la plupart des applications.

Lemplacement : Vous pouvez utiliser des boutons pour dtecter


les pressions intentionnelles effectues par un tre humain. Les
uvres dans les muses nous fournissent un excellent exemple de
lemploi de boutons pour dtecter et enregistrer des contacts
intentionnels. Ces boutons trs simples demploi ont colonis notre
environnement et nous les utilisons tous les jours sans mme y
penser. Parfois, il peut savrer plus intelligent demployer une
mthode plus subtile, mais dans le doute un bouton est toujours
une option sre.

Pensez galement la manire dutiliser un bouton avec une


installation dj en place. Par exemple, vous pourriez peut-tre
mesurer avec quelle frquence la porte de votre maison est
ouverte. En accolant un microcommutateur trs sensible contre
votre porte lorsquelle est ferme, ce dernier sera en mesure de
vous informer chaque fois que la porte sera ouverte.

Dans les Chapitres 7 et 11 de ce livre, vous avez appris cbler un circuit de bouton,
puis lamliorer. Dans le prochain exemple de ce chapitre, vous allez voir comment
simplifier le matriel ncessaire pour un bouton. En effet, en utilisant les
fonctionnalits caches de votre Arduino, vous pouvez utiliser un bouton sans aucun
autre matriel supplmentaire.

Implmenter le croquis
DigitalInputPullup
Le circuit de base du bouton est relativement simple, mais il peut tre rendu plus
simple encore en utilisant une fonction peu connue de votre microcontrleur. Dans
lexemple de base du bouton du Chapitre 7 (voir la Figure 12-1) une rsistance pull-
down est relie la masse afin que la broche du bouton reoive la valeur LOW.
Lorsquil est enfonc, le bouton est connect au 5 V et devient donc HIGH. Ce
comportement permet de lire ltat du bouton comme sil sagissait dune entre.
FIGURE 12-1 Le schma du circuit du bouton-poussoir.

Dans le microcontrleur, il y a une rsistance pull-up interne qui peut tre active afin
de vous fournir constamment une valeur HIGH. Ainsi, lorsquun bouton connect la
terre est press, il passe la broche LOW. Cette ralisation offre la mme
fonctionnalit que lexemple de base du chapitre 7, mais la logique est inverse :
HIGH correspond linterrupteur ouvert et LOW linterrupteur ferm. Le cblage
est simplifi, car nous navons plus besoin ici de cbles supplmentaires ni de
rsistance externe.
Pour raliser cet exemple, il faut :
Un Arduino Uno

Une platine dessai

Un bouton-poussoir
Une LED (optionnelle)

Des straps

Ralisez le circuit illustr sur les Figures 12-1 et 12-2 pour tester cette nouvelle
version plus simple du bouton-poussoir utilisant le croquis DigitalInputPullup.

FIGURE 12-2 Le schma du circuit dun bouton-poussoir.

La carte comporte dj une LED relie la broche 13, mais si vous souhaitez
accentuer la sortie, une LED peut tre insre directement dans la broche 13 et dans
sa broche GND voisine.
Compltez le circuit et choisissez Fichier->Exemples->02.Digital-
>DigitalInputPullup pour rcuprer le croquis.
Il ne vous aura pas chapp quune faute de frappe sest insre dans le nom du
fichier tel que prsent dans le menu des exemples (DigitalIputPullup). Il est
possible que cette faute de frappe soit corrige quand vous lirez ce livre.

/*
Input Pullup Serial

Cet exemple illustre lutilisation de


pinMode(INPUT_PUL-
LUP). Lit une entre numrique sur la broche 2 et
affiche
les rsultats sur le moniteur en srie.

Le circuit:
* Commutateur temporaire attach la broche 2
* LED intgre sur la broche 13

Contrairement pinMode(INPUT), pas de rsistance


pull-
down ncessaire. Une rsistance interne de 20K-ohm
est
5V. Cette configuration fait lire lentre HIGH
quand le
commutateur est ouvert et LOW quand il est ferm.

Cr le 14 Mars 2012
par Scott Fitzgerald

http://www.arduino.cc/en/Tutorial/InputPullupSerial

Ce code exemple est dans le domaine public

*/

void setup() {
// Ouvre la connexion srie
Serial.begin(9600);
// Configure la broche 2 comme entre et active la
r-
sistance pull-up interne
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop(){
//lit la valeur du bouton-poussoir dans une
variable
int sensorVal = digitalRead(2);
//affiche la valeur du bouton-poussoir
Serial.println(sensorVal);

// Pullup signifie que la logique du bouton-


poussoir est
inverse.
// Il vaut HIGH quand il est ouvert et LOW quand
il est
press.
// Active la broche 13 quand le bouton est
press, t
se dsactive sinon
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}

Comprendre le croquis
DigitalInputPullup
Le croquis DigitalInputPullup est semblable au croquis du bouton standard quelques
diffrences prs. Dans la configuration, une communication srie est initie pour
rendre compte de ltat du bouton, puis les modes des broches correspondant
lentre et la sortie sont dfinis. La broche 2 correspond la broche de votre
bouton, mais au lieu de la dfinir comme INPUT, vous utilisez ici INPUT_PULLUP,
ce qui va activer la rsistance interne pull-up. La broche 13 est dfinie comme sortie.

void setup(){
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}

Dans la boucle principale, la valeur de la broche pull-up est lue, puis stocke dans
une variable nomme sensorVal. Sa valeur est envoye vers le moniteur srie pour
vous indiquer quelle vient dtre lue.

void loop(){
// Lit la valeur du bouton-poussoir dans une
variable
int sensorVal = digitalRead(2);
// Affiche la valeur du bouton-poussoir
Serial.println(sensorVal);

Mais comme ici la logique est inverse, vous devez galement inverser votre
instruction if pour obtenir un comportement correct. La valeur HIGH correspond
ouvert et la valeur LOW ferm. lintrieur de linstruction if, vous pouvez crire
toutes les actions raliser. Dans ce cas, la LED est teinte, valant LOW chaque
fois que la broche du bouton est ouverte (HIGH).

if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
else {
digitalWrite(13, HIGH);
}
}

Cette mthode est idale pour les situations dans lesquelles vous ne disposez pas de
suffisamment de composants. Elle vous permet galement de raliser un interrupteur
avec seulement deux fils. Cette fonctionnalit peut tre employe avec toutes les
broches numriques, mais uniquement pour les entres.

Retour au pays des capteurs pizo


Dans le Chapitre 8, vous avez appris raliser des sons en utilisant un buzzer pizo.
Vous devez savoir quil est possible dutiliser ce mme composant en tant quentre.
Pour crer un son partir du pizo, vous avez fait passer un courant travers pour le
faire vibrer. Il sensuit donc que si vous faites vibrer ce pizo, vous allez gnrer une
faible quantit de courant lectrique. Ce dispositif est gnralement appel capteur de
choc dans la mesure o il est utilis pour mesurer les vibrations de la surface sur
laquelle il est fix.
Les pizos varient en taille, cette dernire dtermine lamplitude des vibrations quils
peuvent dtecter. Les petits pizos sont extrmement sensibles aux vibrations, le
moindre choc les fera ragir au maximum de leur capacit. Les pizos plus grand ont
une porte plus vaste mais ncessitent plus de vibrations pour fournir une rponse. Il
existe des capteurs pizos faits spcialement pour dtecter les dformations, les
vibrations ou les chocs. Leur cot est suprieur celui dun lment pizo classique,
mais ils sont gnralement composs dun film flexible qui les rend beaucoup plus
robustes.
Pour utiliser un pizo, tenez compte des points suivants :
La complexit : Les pizos sont relativement simples cbler ; ils
ne ncessitent quune rsistance pour fonctionner dans un circuit.
Le matriel composant le pizo lui-mme est galement
relativement simple et ne ncessite que trs peu de travail de votre
part. Comme la moiti suprieure est compose dune cramique
fragile, il est souvent protg par un botier en plastique, ce qui rend
son montage plus simple et vite tout contact direct avec les joints
de soudure fragiles la surface du pizo.

Le prix : Les lments pizo sont peu coteux, leur prix va de 0,50
pour les moins chers 15 pour les buzzers pizo de haute
puissance. En tant quentre, un lment pizo est prfrable un
buzzer pizo. Les lments pizo disposent gnralement dune
base plus large ce qui les rend plus adapts la cration de
capteurs de chocs, car ils fournissent une surface de contact plus
grande. Vous trouverez peut-tre plus simple de vous procurer vos
acheter chez un dtaillant o vous pourrez voir les produits et
apprcier leurs diffrentes formes, style et protections.

Lemplacement : Comme ils sont trs fragiles, les capteurs de


choc ne sont gnralement pas utiliss pour un contact direct. Il est
prfrable de les fixer sur une surface rigide en bois ou en plastique
ou en mtal et de laisser cette dernire le soin dencaisser les
chocs. Un capteur de choc pourra tre fix sur un escalier offrant
ainsi une source dinformation la fois fiable, discrte et non
intrusive.

Vous pouvez utiliser des pizos pour dtecter les vibrations, ou de manire moins
directe dans une batterie faite maison. Les exemples de cette section vous montrent
comment cbler vos propres ensembles de capteurs pizos.

Implmenter le croquis Knock


Les capteurs de choc utilisent un lment pizo pour mesurer les vibrations. Lorsquun
pizo vibre, il produit un courant qui peut tre interprt par votre Arduino comme
sil sagissait dun signal analogique. Les lments pizo sont gnralement utiliss
pour raliser des alarmes qui linverse, entrent en vibration lorsquelles sont
traverses par un courant.
Il vous faut :
Un Arduino Uno

Une platine dessai

Un pizo

Une rsistance d1 M

Des straps

En vous basant sur le schma et les Figures 12-3 et 12-4, assemblez le circuit du
capteur. Le matriel de ce circuit est similaire celui du croquis de buzzer pizo du
Chapitre 8, ceci prs quil devient possible dutiliser ici llment pizo en tant
quentre.
Ralisez le circuit et chargez le croquis Arduino avec Fichier->Exemples-
>06.Sensors->Knock.

/* Knock Sensor

Ce croquis exploite un lment pizo pour dtecter


un son
vibrant.
Il lit une broche analogique et compare le rsultat
pour
dfinir un seuil.
Si le rsultat est suprieur au seuil, il crit le
knock dans le port srie,
et allume la LED de la broche 13.

Le circuit:
* connexion positive du pizo relie la broche
analo-
gique 0
* connexion ngative du pizo
* rsistance de 1 megaohm relie en parallle avec
le
pizo

FIGURE 12-3 Le circuit de capteur de choc.


FIGURE 12-4 Le schma du circuit de capteur de choc.

http://www.arduino.cc/en/Tutorial/Knock

cr le 25 Mars 2007 par David Cuartielles


modifi le 30 Aot 2011 par Tom Igoe

Ce code exemple est dans le domaine public.


*/

// Constantes
const int ledPin = 13; // LED relie la bro-
che numrique 13
const int knockSensor = A0; // Pizo reli la
bro-
che analogique 0
const int threshold = 100; // Valeur du seuil pour
d-

terminer si le son
dtec-
t est un choc ou non
// Variables
int sensorReading = 0; // variable pour stocker
la
// valeur lue de la broche
du
capteur
int ledState = LOW; // variable pour stocker
le
dernier tat de LED,

// pour passer la lumire


void setup() {
pinMode(ledPin, OUTPUT); // dclare ledPin comme
OUTPUT
Serial.begin(9600); // utilise le port srie
}

void loop() {
// Lit le capteur et stocke la valeur dans
sensorRea-
ding:
sensorReading = analogRead(knockSensor);

// Si la lecture du capteur est suprieure au


seuil:
if (sensorReading >= threshold) {
// Changer ltat de ledPin:
ledState = !ledState;
// Mettre jour la broche LED elle-mme:
digitalWrite(ledPin, ledState);
// Renvoyer Knock! lordinateur, suivi dun
saut
de ligne
Serial.println(Knock!);
}
delay(100); // Dlai pour viter un dbordement du
tam-
pon mmoire
}

Utilisez le bouton Vrifier pour vrifier le code. Cela met en surbrillance rouge toutes
les erreurs grammaticales. Si le croquis se compile correctement, cliquez sur
Tlverser pour sur votre carte.
Lorsque le chargement est achev, ouvrez le moniteur srie et donnez un bon coup sur
la surface o se trouve votre pizo. Si cela fonctionne, vous devrez voir Knock
safficher sur votre moniteur srie pendant que la LED change.
Si rien ne se passe, revrifiez vos cblages :
Assurez-vous dutiliser le bon numro de broche.

Vrifiez les connexions sur la platine dessai.

Comprendre le croquis Knock


Les premires dclarations sont des constantes : le numro de la broche LED, le
numro de la broche du capteur de choc et la valeur de seuil de choc.

// Constantes
const int ledPin = 13;
const int knockSensor = A0;
const int threshold = 100;

Deux valeurs sont amenes changer : la valeur courante du capteur et ltat de la


LED. Nous leur prvoyons donc des variables.

// Variables
int sensorReading = 0;
int ledState = LOW;

Dans la fonction de configuration, la broche de la LED est dfinie en tant que sortie et
le port srie est ouvert pour la communication.

void setup() {
pinMode(ledPin, OUTPUT); // dclare ledPin comme
OUTPUT
Serial.begin(9600); // utilise le port srie
}

La premire ligne de la fonction principale de boucle lit la valeur analogique depuis


la broche du capteur de choc.

void loop() {
// Lit le capteur et le stocke dans la variable
sensor-
Reading:
sensorReading = analogRead(knockSensor);

Cette valeur est compare la valeur du seuil.

// Si la lecture du capteur est suprieure au


seuil:
if (sensorReading >= threshold) {

Si la valeur de sensorReading est suprieure ou gale la valeur de seuil, ltat


de la LED est forc de 0 1 en utilisant le symbole NOT ( ! ). Le symbole ! dans ce
cas est utilis pour retourner la valeur boolenne oppose celle que contient
leadState ce moment. Comme vous le savez, les boolens valent soit 1 soit 0
(vrai ou faux). Il en est de mme pour les valeurs possibles de leadState. Cette
ligne de code pourrait se lire comme rendre leadState gale la valeur inverse
de celle quelle possde.

// Inverser ltat de ledPin:


ledState = !ledState;

La valeur de leadState est ensuite envoye vers la broche de la LED via


digitalWrite. La fonction digitalWrite interprte la valeur 0 comme LOW
et 1 comme HIGH.

// Mettre jour la broche LED


digitalWrite(ledPin, ledState);

Enfin, le mot Knock est envoy sur le port srie suivi dun court dlai destin
amliorer la stabilit.

// Renvoyer Knock! lordinateur


Serial.println(Knock!);
}
delay(100); // dlai pour viter un dbordement du
tam-
pon mmoire
}

Capteurs de pression, de force et de


charge
Trois capteurs apparemment relativement proches sont souvent confondus : pression,
force et charge. En fait, le comportement de ces trois capteurs, et les donnes quils
fournissent, sont extrmement diffrents. Aussi, il est important de connatre ces
diffrences pour choisir le capteur adapt chaque besoin. Dans cette section, nous
dfinirons chacun de ces trois capteurs et nous verrons lorsquil est important den
utiliser un plutt que lautre.
Pour vos projets, tenez compte des points suivants :
La complexit : Comme vous vous en doutez, la complexit
augmente en fonction de la prcision recherche :

Les plaquettes de pression sont conues pour dtecter une


pression applique sur une surface. Il en existe une grande
varit variant en qualit et en prcision.

Les plaquettes de pression les plus simples sont souvent mal


nommes tant elles sapparentent de gros interrupteurs. Il
sagit en fait de deux couches de feuilles spares par une
couche de mousse avec des trous. Lorsque la mousse est
crase, les contacts mtalliques se touchent et ferment le
circuit. Cela implique que ce type de capteur est capable de
dtecter la prsence dun poids suffisant pour enfoncer assez
la mousse.

Pour plus de prcisions, vous pouvez utiliser un capteur de


force. Mais bien que le capteur de force soit suffisamment
prcis pour dtecter un changement de poids, il ne lest pas
encore assez pour fournir une mesure prcise. Ces capteurs
se prsentent gnralement sous forme de rsistances
souples. Leur rsistance change en proportion de la force qui
leur est applique. La rsistance elle-mme se trouve sur une
carte imprime flexible et bien que cette dernire soit trs
robuste, la protger dun contact direct est une bonne ide
qui permet de prvenir les dchirures.

Si les plaquettes de pression sont lune des extrmits du


spectre, de lautre se trouvent les capteurs de charge. Ils
fonctionnent la manire des capteurs de force, en
changeant de rsistance selon la dformation. Dans la
plupart des cas, me capteur de charge est fix une pice
rigide de mtal. Ce type de capteur dlivre un signal faible qui
ncessite frquemment un circuit damplification connu sous
le nom de pont Wheatstone. Intgrer ce type de capteur est
plus complexe, mais vous pouvez trouver des documents sur
Internet qui vous guideront tout au long du processus.

Le prix : Le cot de ces capteurs est relativement faible, et ce


mme pour les plus sensibles dentre eux. Des plaquettes de
pression bon march vous coteront autour de 2 , et comptez
environ 12 pour lensemble des lments ncessaires au montage.
Le prix dun capteur de force se situe environ entre 6 et 20 , mais il
couvre une zone plus petite que les plaquettes, il vous en faudra
donc peut-tre plusieurs pour couvrir une grande surface. Les
capteurs de charge sont galement assez peu coteux, comptez
environ 8 . Il peut sy ajouter un cot supplmentaire li au temps
ncessaire la conception et la ralisation du circuit.

Lemplacement : Le vrai dfi avec tous ces capteurs rside dans


leur protection. Dans le cas des plaquettes de pression et des
rsistances sensibles la force, il est conseill dajouter une bonne
couche de mousse de rembourrage sur le ct qui recevra le choc.
En fonction de la densit de la mousse, il faudra arbitrer entre la
protection du capteur et sa capacit dlivrer une bonne
information. En dessous du capteur, il faudra ajouter une base
solide permettant de sappuyer dessus mais, quil sagisse du sol ou
de la surface de contreplaqu, pensez ajouter sur cette surface
une couche de mousse sur la face extrieure afin de protger le
capteur. Pour la finition, un vinyle souple dameublement constitue
une excellente option. Si vous voulez que des gens marchent sur le
capteur, ajoutez par-dessus une planche de bois pour prendre la
mousse prise en sandwich et mieux rpartir les charges. Les
capteurs de charge, quant eux, doivent tre placs en contact
direct avec une surface rigide. Il vous faudra parfois quelques essais
pour placer votre capteur au bon endroit, voire parfois mme en
utiliser plusieurs, pour calculer une moyenne.

Vous avez choisi votre capteur ? Maintenant vous devez comprendre la manire de
lutiliser :
Les plaquettes de pression sont des circuits extrmement simples,
identiques des boutons-poussoirs. Le matriel dune plaquette de
pression est galement trs simple, si simple mme que vous
pouvez en raliser une vous-mme en utilisant une plaque de
mousse entre deux contacts daluminium, une plaque protectrice et
deux fils. Une alternative aux plaques mtalliques consiste utiliser
un tissu ou un fil mtallique qui est plus souple.

Les capteurs de force sont galement relativement simples utiliser


et peuvent prendre la place dautres capteurs analogiques, capteur
de luminosit ou de temprature par exemple, sur les circuits
Arduino. La plage de force dtectable peut varier, mais dans tous les
cas, vous devrez normaliser cette force pour simplifier le code.

Les capteurs de charge sont probablement les plus complexes


lorsquils sont doivent servir obtenir une mesure fine. Ils
ncessitent une circuiterie supplmentaire ainsi quun amplificateur
afin que lArduino puisse prendre en compte leurs changements
rapides de rsistance. Ce sujet dpasse le cadre de ce livre. Si vous
voulez en savoir plus, consultez le web.

Les capteurs de force, tout comme les autres rsistances variables, peuvent facilement
prendre la place des rsistances sensibles la lumire et des potentiomtres.
Dans la prochaine section, nous allons voir un exemple grce auquel vous apprendrez
utiliser des rsistances sensibles la force pour crer un clavier de piano avec le
croquis toneKeyboard.

Raliser le circuit toneKeyboard


Vous pourriez penser quun bouton-poussoir est une entre parfaite pour un clavier,
mais les rsistances sensibles la force offrent beaucoup plus de sensibilit au
toucher. Au lieu de dtecter une simple pression, vous pouvez dtecter lintensit
applique aux touches comme sil sagissait dun piano traditionnel.
Il vous faut :
Un Arduino Uno

Une platine dessai

Trois rsistances sensibles la force

Trois rsistances de 10 k

Une rsistance de 100

Un lment pizo

Des straps

En utilisant le schma et lees Figures 12-5 et 12-6, disposez les rsistances sensibles
la force et le pizo pour raliser votre propre clavier.
Ralisez le circuit et ouvrez un nouveau croquis Arduino. Choisissez Fichier-
>Exemples->02.Digital->toneKeyBoard dans le menu Arduino pour charger le
croquis.

/*

toneKeyboard

Joue un morceau qui change en fonction dun


changement
dentre analogique
Circuit:
* 3 rsistances sensibles la force de +5V
danalogique
de 0 5
* 3 rsistances de 10K danalogique de 0 5
* un haut-parleur de 8-ohms sur la broche numrique
8

Cr le 21 Janvier 2010
Modifi le 9 Avril 2012

FIGURE 12-5 Un schma du circuit de mini-clavier.


FIGURE 12-6 Le schma du circuit toneKeyBoard.

par Tom Igoe

Ce code exemple est dans le domaine public.

http://arduino.cc/en/Tutorial/Tone3
*/

#include pitches.h

const int threshold = 10; // Lecture minimale du


capteur
pour gnrer une note

// Notes jouer, correspondant aux trois capteurs:


int notes[] = { NOTE_A4, NOTE_B4,NOTE_C3 };

void setup() {
}

void loop() {
for (int thisSensor = 0; thisSensor < 3;
thisSensor++)
{
// Rcupre la lecture dun capteur:
int sensorReading = analogRead(thisSensor);
// Si le capteur est press assez fort:
if (sensorReading > threshold) {
// Lit la note correspondant ce capteur:
tone(8, notes[thisSensor], 20);
}
}
}

Remarquez quil y a trois blocs dinstructions imbriqus ici : le corps de la fonction


loop(), le premier bloc conditionnel for et un autre bloc conditionnel.
Utilisez le bouton Vrifier pour vrifier votre code. Le compilateur devrait surligner
toute erreur grammaticale en rouge le cas chant. Si le croquis se compile
correctement, cliquez sur Tlverser pour envoyer le croquis sur votre carte. Lorsque
le transfert est effectu, testez les touches pour vous assurer de leur bon
fonctionnement. Vous tes prt jouer.
Si rien ne se passe, revrifiez vos cblages :
Assurez-vous dutiliser les bons numros de broches.

Vrifiez les connexions sur la platine dessai.

Comprendre le croquis toneKeyBoard


Le croquis toneKeyBoard utilise la mme table de notes que le croquis Melody du
chapitre 8. La premire ligne insre le contenu du fichier de dfinitions pitches.h
quil vous faudra ouvrir dans un onglet spar de celui du croquis principal.
Notez que ce sont des guillemets droits quil faut utiliser.

#include pitches.h

Un seuil faible gal 10 (sur une plage de 1024) est dfini pour liminer les rsultats
trop faibles provenant du bruit de fond.

const int threshold = 10;


Les notes de chaque capteur sont stockes dans un tableau dont les valeurs (0, 1 et 2)
correspondent aux numros des entres des broches analogiques (A0, A1 et A2). Vous
pouvez modifier la valeur des notes contenues dans ce tableau manuellement en
utilisant la table de rfrence du fichier des notes jouer correspondant aux trois
capteurs :

int notes[] = {
NOTE_A4, NOTE_B4,NOTE_C3
};

Dans la configuration, il ny a rien dfinir, car les broches analogiques dentre sont
dfinies par dfaut.

void setup() { }

Dans la boucle principale, une boucle for() est parcourue pour les nombres allant
de 0 2.

void loop() {
for (int thisSensor = 0; thisSensor < 3;
thisSensor++)
{

La valeur de la boucle for est utilise en tant que numro de broche, et cette valeur
est stocke temporairement dans sensorReading.

// Rcupre la lecture dun capteur:


int sensorReading = analogRead(thisSensor);

Si la valeur lue est plus grande que le seuil, la note correspondant au capteur est joue

// Si le capteur est press assez fort:


if (sensorReading > threshold) {
// Lit la note correspondant ce capteur:
tone(8, notes[thisSensor], 20);
}
}
}

Comme la boucle seffectue trs rapidement, les dlais de lecture des capteurs ne sont
pas perceptibles.
Captiver !
Les capteurs capacitifs dtectent les modifications des champs lectromagntiques.
Toutes choses vivantes ont un champ lectromagntique vous y compris. Les
capteurs capacitifs sont extrmement utiles car ils sont en mesure de dtecter un
contact humain tout en ignorant les autres facteurs environnementaux. Vous vous tes
probablement dj familiaris avec des capteurs capacitifs haut de gamme car ces
derniers sont prsents sur la plupart des smartphones. Il existe des kits Arduino
intgrant des capteurs capacitifs tels que Capacitive Touch Keypads que vous pourrez
brancher facilement. Mais il est tout aussi simple de raliser votre propre capteur
capacitif avec un Arduino et une antenne.
Lors de votre planification, tenez compte des points suivants :
La complexit : Comme seule une antenne est requise, vous
pouvez tre trs cratif en ce qui concerne sa nature et son
emplacement. Des fils de cuivre suffisent pour un capteur simple.
Un morceau de cuivre se transforme soudainement en contact
tactile, et vous navez plus besoin de bouton-poussoir. Vous pouvez
mme mettre l antenne en contact avec un objet mtallique plus
grand tel quune lampe pour la transformer instantanment en
lampe tactile.

Si lantenne est faite partir dune bobine de fil ou dun morceau


daluminium, vous pouvez aller au-del de la simple dtection
tactile, en ralisant un dtecteur connu sous le nom de capteur
capacitif projet. Vous pouvez ainsi dtecter les mains dune
personne plusieurs centimtres de lantenne, ce qui cre de
nouvelles possibilits et permet de masquer les capteurs derrire
dautres matriaux. Ces capteurs capacitifs discrets sont de nos
jours communment rencontrs sur de nombreux appareils
lectroniques dans le but de supprimer les boutons physiques et de
donner un aspect plus lgant aux produits.

Cela permet galement de protger llectronique en la plaant


labri de matriaux rsistants.
Les capteurs capacitifs tactiles sont simples raliser. La vraie
difficult se pose avec les capteurs projets pour lesquels il faut
ajuster la porte du champ. La meilleure faon dy parvenir passe
par lexprimentation et les tests.

Le prix : Un kit capacitif tactile conu pour une tche spcifique


cote de 15 20 . Il remplit bien son office, mais reste limit en ce
qui concerne la conception de linterface. Il existe une console de
gestion de capteurs capacitifs produite par Sparkfun qui pour
environ 10 vous permet de contrler jusqu 12 capteurs
capacitifs. Vous devrez raliser la surface tactile vous-mme, mais
vous serez libre de crer une interface qui convient exactement
votre projet.

Loption la moins coteuse consiste utiliser la bibliothque


CapSense dArduino (cite dans lencadr). Elle vous permet de crer
un capteur capacitif avec uniquement un bout de fil servant
dantenne !

Lemplacement : Les capteurs capacitifs tactiles fonctionnent avec


tous les mtaux conducteurs . Ainsi, si vous tes en mesure de
concevoir une coque lgante, il ne vous restera plus qu la
connecter votre Arduino. Si vous recherchez quelque chose de
plus discret, testez diffrents types de bois ou de plastique qui
masqueront votre antenne mtallique. Une fine couche de
contreplaqu permet au mtal dtre proche de la surface et de
dclencher le capteur. En recouvrant lantenne avec une surface non
conductrice, vous la dotez dune proprit quasiment magique, celle
de surprendre les utilisateurs qui se demanderont comment le
dispositif fonctionne.

Le moyen le plus simple pour raliser un capteur capacitif est dutiliser la


bibliothque CapSense de Paul Badger. En utilisant CapSense, vous pouvez tout fait
faire disparatre tous les commutateurs mcaniques pour les remplacer par de trs
robustes capteurs tactiles capacitifs ou encore des dtecteurs de prsence capacitifs.
LA BIBLIOTHQUE CAPSENSE

La bibliothque CapSense est disponible sur GitHub. GitHub est un dpt en


ligne de logiciels qui gre les diffrentes versions et vous permet de voir qui a
mis jour le logiciel et quelles sont les modifications qui ont t faites. Cest un
excellent systme de partage et de collaboration ddi au code. Vous pouvez
retrouver la plateforme Arduino sur GitHub. Pour cela :

1. Rendez-vous avec votre navigateur sur la page GitHub de


CapSense ladresse :
https://github.com/moderndevice/CapSense.

2. Sur la page de CapSense, cliquez sur le bouton Download Zip.

Ce bouton a limage dun nuage et le mot ZIP.

Cette opration va tlcharger la dernire version de la bibliothque


dans votre dossier de tlchargement ou tout autre dossier de votre
choix.

3. Renommez le dossier CapSense.

lintrieur de ce dernier, vous devriez voir un bon nombre de fichiers


dont les noms se terminent par .h et .cpp ainsi quun dossier
Examples .

4. Dplacez le dossier complet vers votre rpertoire de


bibliothques Arduino.

Ce dossier devrait correspondre celui o vos croquis sont


enregistrs, par exemple <votreNom>/ Documents/Arduino/libraries. Si
vous ne disposez pas dun rpertoire de bibliothque, crez-en un.

Vous pouvez retrouver le rpertoire de sauvegarde Arduino en


choisissant ArduinoPrfrences depuis la barre de menus Arduino.
Lorsque la bibliothque CapSense se trouve dans ce dossier, elle sera
disponible au prochain dmarrage de latelier Arduino.
5. Lancez ou relancez Arduino, puis allez sur CroquisImporter
biliothques via le menu Arduino.

Recherchez CapSense parmi les bibliothques proposes. Si elle ne sy


trouve pas, vrifiez les noms de vos bibliothques et relancez Arduino.

Implmenter le croquis CapPinSketch


Pour ce projet, il faut :
Un Arduino Uno
Un fil dantenne

Des pinces crocodiles (optionnelles)

Comme vous pouvez le voir sur la photo de la Figure 12-7, cela ncessite peu de
travail. Vous pouvez vous contenter dun simple fil connect sur la broche 5, vous
pouvez ensuite agrandir le dispositif en le connectant sur nimporte quelle autre
surface conductrice. Les pinces crocodiles permettent de maintenir facilement
diffrents types dantennes.
Si la bibliothque CapSense est reconnue, le dossier exemple lintrieur devrait
ltre galement. Ralisez le circuit et choisissez Fichier->Exemples->CapSense-
>Exemples->CapPinSketch dans le menu Arduino afin de charger le croquis.

FIGURE 12-7 Une photo dun capteur capacitif minimaliste.

#include <CapPin.h>
/* CapPinSketch
* Capacitive Library CapPin Demo Sketch
* Paul Badger 2011
* Cette classe utilise les rsistances pull-up
intgres
qui lisent la capacit
* dune broche. La broche est dfinie comme entre
et le
pullup est activ,
* Le tour de boucle correspond au passage de la
broche
HIGH.
* La mthode readPin est rapide et peut tre lue
1000
fois en moins de 10 ms.
* En lisant la broche de manire rpte, vous
pouvez
capter la pression de la
* main petite chelle avec un petit capteur. Un
cap-
teur plus grand (une
* pice de mtal) retournera des valeurs plus
grandes et
pourra capter de plus
* loin. Pour une mthode plus sensible, voir la
mthode
CapTouch.
* Insrez un fil avec ou sans un morceau daluminium
dans
la broche.
* Couvrez le capteur daluminium, de papier ou tout
autre
isolant
* pour viter que lutilisateur touche directement
la
broche.
*/

CapPin cPin_5 = CapPin(5); // lit la broche 5

float smoothed;
void setup()
{
Serial.begin(115200);
Serial.println(start);
// slider_2_7.calibrateSlider();
}

void loop()
{
delay(1);
long total1 = 0;
long start = millis();
long total = cPin_5.readPin(2000);

// Simple filtre pour liminer tout vacillement


// Changez le paramtre (0 est min, .99 est max)
smoothed = smooth(total, .8, smoothed);

Serial.print( millis() - start); // temps


dexcution
en mS
Serial.print(\t);
Serial.print(total); // total de la
range
Serial.print(\t);
Serial.println((int) smoothed); // liss
delay(5);
}

// simple filtre
// requiert de recycler la sortie dans le paramtre
smoothedVal
int smooth(int data, float filterVal, float
smoothedVal){
if (filterVal > 1){ // vrifie si les paramtres
sont
dans la plage de valeurs
filterVal = .999999;
}
else if (filterVal <= 0){
filterVal = 0;
}

smoothedVal = (data * (1 - filterVal)) +


(smoothedVal *
filterVal);

return (int)smoothedVal;
}

Utilisez le bouton Vrifier pour vrifier votre code. Le compilateur vous indiquera en
rouge toute erreur grammaticale ventuelle. Si le croquis se compile correctement,
cliquez sur Tlverser pour lenvoyer vers votre carte.
Lorsque le chargement est achev, ouvrez le moniteur srie et effleurez ou approchez-
vous de lantenne. Vous devriez voir deux valeurs apparatre sur votre cran. Sur la
gauche, la valeur brute en train dtre lue ; sur la droite, la valeur correspondante une
fois lisse.
Si rien ne se passe, revrifiez vos cblages :
Assurez-vous dutiliser le bon numro de broche.

Vrifiez les connexions sur la platine dessai.

Comprendre le croquis CapPinSketch


Au dmarrage du croquis, dans les dclarations, un nouvel objet CapPin est instanci.
Notez que cPin_5 correspond au nom de lobjet et quil est assign la
broche 5 via CapPin(5).

CapPin cPin_5 = CapPin(5); // lit la broche 5

Une variable de type float nomme smoothed est dclare pour stocker la
valeur du capteur une fois cette dernire traite.
float smoothed ;

Dans la configuration, la communication srie est initie pour utiliser la vitesse la


plus rapide disponible pour Arduino qui correspond 115200 bauds.
Le message Start est ensuite envoy pour vous indiquer que le port srie est bien
connect. : void setup()

{
Serial.begin(115200);
Serial.println(Start);

La ligne commente ci-dessous nest pas utilise dans ce croquis, mais elle est
rfrence dans dautres exemples de CapSense. Nous nen parlerons pas dans cet
exemple, mais elle pourra tre dcommente afin dinclure dautres fonctions de
calibrage dfinies dans la bibliothque.
Dans ce croquis, de nombreuses variables sont dclares localement. En effet, comme
elles ne sont pas ncessaires en dehors de la boucle, elles sont supprimes et
redclares aprs chaque tour de boucle.
En premier lieu, un dlai dune milliseconde est ajout pour amliorer la stabilit de
la lecture :

void loop()
{
delay(1);

Ensuite, une variable total1 de type long est dclare. Cette variable peut prter
confusion car le L minuscule et la valeur numrique 1 se ressemblent beaucoup avec
la plupart des polices de caractre. De plus, elle ne semble pas tre utilise dans ce
croquis et doit sans doute tre un reliquat des versions prcdentes.

long total1 = 0;

La variable de type long suivante reoit la valeur fournie par millis().


Comme il sagit dune variable locale, sa valeur est rinitialise chaque tour.

long start = millis();

La fonction spcifique .readPin() lit la broche capacitive.

long total = cPin_5.readPin(2000);


Si vous souhaitez explorer ce code plus en dtail, reportez-vous aux fichiers
capPin.ccp de la bibliothque CapSense. premire vue, cela semble
dconcertant, mais en observant la ligne ci-dessous, vous pouvez voir que cette valeur
correspond au nombre dchantillons pris par lArduino partir de la lecture.

long CapPin: :readPin(unsigned int samples)

diter et modifier le fonctionnement interne des fonctions de bibliothques nest pas


recommand aux dbutants, mme sil reste instructif de savoir ce qui se passe
exactement dans votre code.
Une fonction de lissage est incluse dans ce croquis. Elle rcupre les valeurs brutes
lues depuis le capteur, les lisse et fournit de nouvelles valeurs en sortie. Ici, elle est
paramtre 0,8. Mais nhsitez pas tester et modifier cette valeur pour trouver le
taux de lissage appropri votre application.
Ce taux dpend de la vitesse laquelle la boucle est excute et du nombre de
lectures ralises durant cette priode ; noubliez pas ce point si vous envisagez
dajouter de nombreux autres contrles dautres entres.

// Simple filtre pour liminer tout vacillement


// Changez le paramtre (0 est min, .99 est max)
smoothed = smooth(total, .8, smoothed);

Enfin, les valeurs sont crites sur le port srie afin de pouvoir les visualiser.
Lexpression millis()-start nous donne la dure ncessaire la rcupration
dune lecture. Si plus dchantillons sont prlevs ou si des dlais quelconques sont
ajouts au code, cela augmentera en consquence le temps ncessaire pour terminer un
tour de boucle et de ce fait la ractivit du capteur.

serial.print( millis() - start); // temps


dexcution en
ms

Des tabulations sont ajoutes afin despacer les valeurs. Le total et les valeurs lisses
sont tous deux affichs afin de pouvoir les comparer. Vous noterez peut-tre un lger
dlai dans le temps de rponse de ces valeurs. Ce dlai indique que votre Arduino est
en train de lire des valeurs supplmentaires afin de raliser le lissage. Cependant, ce
dlai est normalement peine perceptible car la vitesse en bauds configure pour le
capteur est trs leve. :

Serial.print(\t); // Tabulation pour


arer
Serial.print(total); // Total de la range
Serial.print(\t);
Serial.println((int) smoothed); // liss
delay(5);

Tout en bas du croquis, en dehors de la boucle principale, se trouve une fonction


supplmentaire. Il sagit dun filtre passe-bas qui renvoie une valeur lisse. Comme
vous pouvez le constater, cette fonction ne commence pas ici par void comme
ctait le cas pour setup() et loop() mais par int. Cette syntaxe indique que
la fonction renvoie une valeur de type entier lorsquelle a termin son excution (au
lieu de ne rien renvoyer comme avec void).

// Simple fonction de filtrage


// Requiert de recycler la sortie dans le paramtre
smoothedVal
int smooth(int data, float filterVal, float
smoothedVal){

if (filterVal >= 1) { // Force les paramtres


rester
dans la plage
filterVal = .999999;
}
else if (filterVal < 0) {
filterVal = 0;
}
smoothedVal = (data * (1 - filterVal)) +
(smoothedVal *
filterVal);
return (int)smoothedVal;
}

QUEST-CE QUUNE VALEUR FLOTTANTE ?

Un float, ou nombre virgule flottante, est un nombre contenant une partie


dcimale. Une variable peut tre dclare pour stocker un tel nombre virgule
flottante plutt quun nombre entier (int ou long). Ce format est indispensable
dans certaines situations, comme lorsque vous prlevez une valeur capacitive
extrmement prcise.

Ceci dit, le traitement des flottants prend plus de temps que celui des entiers
et doit tre vit ds que cest possible.

// slider_2_7.calibrateSli
der(); // Cette ligne est
neutralise
}

Un laser dtecteur
Un faisceau laser dtecteur est constitu de deux parties : une source de lumire laser
et un capteur de lumire. Comme vous avez d lapprendre dans les films, lorsquun
faisceau est interrompu, une alarme se dclenche et les gardiens accourent. Avec un
Arduino, vous pouvez raliser un tel dispositif trs simplement et dclencher tout ce
que vous voulez. Plutt que dacheter un systme de scurit dernier cri, vous pouvez
le fabriquer vous-mme en utilisant quelques composants simples. : Pour cette
ralisation, tenez compte des points suivants :
La complexit : Les lasers constituent un sujet dlicat car il existe
des risques potentiels les manipuler. Mais au lieu de mettre en
danger votre vue ou de passer plusieurs annes les tudier,
essayez plutt des composants qui ont dj t tests, certifis et
assembls sous forme de produits. Les stylos laser et les pointeurs
laser par exemple sont largement rpandus et relativement peu
chers. Ils font gnralement partie des lasers de classe 1, ce qui
correspond des lasers visibles et srs si lon en fait un usage
normal. Cependant, il est conseill de vrifier les spcifications de
votre laser afin de vous assurer quil est bien adapt votre public
et son environnement. Les adultes sont normalement assez aviss
pour ne pas regarder directement un laser, mais redoublez de
prudence avec les enfants. Comme les faisceaux laser sont trs
prcis, le mieux est den choisir un disposant dun large capteur afin
davoir une grande surface viser. La seule difficult de ce type de
capteur peut provenir de son alimentation. Un petit pointeur laser
tant gnralement aliment par piles, vous risquez davoir les
remplacer souvent, moins de les remplacer par une alimentation
externe de puissance suffisante.

Afin de pouvoir les utiliser en extrieur, je vous suggre de protger


le capteur et le laser dans des botiers. Pour faciliter leur alignement
et ajouter une certaine touche, je vous suggre galement de
monter ces botiers sur des mini-trpieds.

Le prix : Pour environ 10 , vous pouvez acqurir un petit pointeur


laser discret. Les principales diffrences entre les modles de
pointeurs rsident dans le type de piles quils utilisent et dans la
couleur de leur faisceau. Un capteur de lumire cote environ
de 1 2 selon sa taille. Comptez environ 5 pour un botier et
de 6 10 pour un trpied.

Lemplacement : Disposez le dtecteur aussi bas que possible afin


dviter tout contact des yeux avec le laser. Ce dispositif de laser fait
dexcellents dclencheurs de camras. Vous trouverez des exemples
dans le chapitre bonus la fin de ce livre.

Un dtecteur laser est une amlioration dun dtecteur de luminosit conventionnelle.


Grce sa capacit fournir une source lumineuse plus intense et mieux contrle,
vous pouvez amliorer sa prcision.
Dans cet exemple, nous utilisons un laser pour amliorer un dtecteur de lumire.
Grce au circuit AnalogInOutSerial, nous pouvons surveiller la rponse de nos
capteurs lorsquils sont touchs par le rayon laser en dtectant le moment o le laser
ne passe plus. Grce ces informations, vous pouvez alors dclencher autant de
sorties que vous le souhaitez.

Raliser le circuit AnalogInOutSerial


Il vous faut :
Un Arduino Uno
Une platine dessai

Un dtecteur de lumire

Un stylo de pointage laser

Une LED

Une rsistance de 10 k et une de 220

Des straps

Ralisez le circuit illustr dans les Figures 12-8 et 12-9 qui correspondent la partie
rceptrice. Le stylo laser peut tre aliment soit par piles, soit par un transformateur
de voltage quivalent. Pour plus de dtails sur le choix dun transformateur, reportez-
vous au chapitre 15.
Choisissez Fichier->Exemples->03.Analog->AnalogInOutSerial depuis le menu
Arduino pour charger le croquis.

/*
Entre analogique, sortie analogique, Sortie srie

Lit la broche de lentre analogique, compare le


rsul-
tat dans une plage de 0 255 et utilise le rsultat
pour
dfinir la modulation PWM dune broche de sortie.
Affiche
aussi le rsultat sur lcran srie.

Le circuit:
* Cellule photo-lectrique relie la broche
analogique
0 et au +5V
* LED relie la broche numrique 9

Cr le 29 Dc. 2008
modifi le 9 Avr 2012
par Tom Igoe
FIGURE 12-8 Schma de montage du rcepteur du dtecteur laser.
FIGURE 12-9 Schma du dtecteur (une entre analogique et une sortie LED).

Ce code exemple est dans le domaine public.


*/

// Constante
const int analogInPin = A0; // Broche dentre
analogique
const int analogOutPin = 9; // Broche de sortie
pseu-
do-analogique (PWM)

int sensorValue = 0; // valeur lue en entre


int outputValue = 0; // valeur de sortie en
PWM
(sortie analogique)

void setup() {
// Initialise les communications srie 9600 bps:
Serial.begin(9600);
}

void loop() {
// Lit la valeur:
sensorValue = analogRead(analogInPin);
// La compare la plage de sortie analogique:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// Change la valeur de sortie analogique:
analogWrite(analogOutPin, outputValue);
// Affiche les rsultats sur le moniteur srie:
Serial.print(sensor = );
Serial.print(sensorValue);
Serial.print(\t output = );
Serial.println(outputValue);
// Attend 2 millisecondes avant le prochain tour
de
boucle
// pour que le convertisseur analogique-numrique
se
rgle
// aprs la dernire lecture:
delay(2);
}

Lancez la compilation pour vrifier votre code. Si le croquis se compile


correctement, tlversez le code compil. Cela fait, pointez votre laser de manire
ce quil frappe le centre du capteur de lumire.
Vous devriez pouvoir lire sur le moniteur srie les valeurs maximales. En obstruant le
faisceau, ces valeurs diminuent et la LED indique cet vnement. Lorsque ces valeurs
descendent en dessous dun certain seuil, vous pouvez dclencher toutes sortes
dactions.
Si rien ne se passe, revrifiez vos cblages :
Assurez-vous dutiliser le bon numro de broches.

Vrifiez les connexions sur la platine dessai.

Comprendre le croquis
AnalogInOutSerial
Pour plus de dtails sur le fonctionnement de ce croquis, reportez-vous aux
explications concernant AnalogInOutSerial dans le Chapitre 7. Vous trouverez
galement des suggestions concernant le lissage et le calibrage de diffrents croquis
dans le Chapitre 11.

Dtecter les mouvements


Un capteur infrarouge passif (PIR) est un capteur que lon rencontre communment
dans les boutiques et autres locaux commerciaux. Vous avez pu voir ce capteur dans
langle dune entre se mettre clignoter en rouge ds quil dtecte le passage dune
personne. Il dtecte la chaleur dgage par les personnes, les animaux ou toute autre
source de radiations infrarouges. Les radiations infrarouges sont invisibles aux
humains, : mais ne posent aucun problme aux capteurs.
Le capteur resemble ceux que lon trouve dans les camras numriques ceci prs
quil ne dispose pas de lentilles complexes pour capturer les dtails dune image. En
fait, un capteur PIR se situe quelque part entre un capteur de lumire haute rsolution
et une camra basse rsolution. Ce type de capteur dispose de lentilles simples
conues pour lui fournir un grand angle de vue.
Ce type de capteur est souvent utilis pour la dtection de mouvements par les
alarmes antivol. En fait, au lieu de dtecter les mouvements, il dtecte les
changements de temprature.
Il existe deux moyens de construire un capteur PIR. Le premier consiste dmonter
une alarme anti-intrusion, qui contient gnralement une lentille et un capteur. Mais ce
dernier peut tre difficile identifier. La seconde mthode est den acheter un
spcifiquement conu pour un projet de microcontrleur. Ce type de capteur est
gnralement fourni sous forme dun objectif ressemblant une balle de ping-pong
surmontant une barre contenant une carte nue. Avant de vous lancer dans la
conception, tenez compte des points suivants :
La complexit : Il peut savrer difficile de rutiliser un capteur PIR
existant qui est prvu pour un usage spcifique. Lun des avantages
dutiliser ce type de capteur rside dans le fait quil est prpackag,
ce qui rduit le temps ncessaire lassemblage des composants.
Les systmes prfabriqus sont conus pour tre simples
installer. Ils offrent un calibrage manuel en proposant un
potentiomtre ajustable avec un tournevis. Cela permet un rglage
la vole bien plus rapide quun rechargement des donnes.

Si vous utilisez un capteur PIR qui nest pas dj prpackag, les


aspects matriels et logiciels vous paratront beaucoup plus
simples, mais il vous faudra un peu defforts pour crer le botier de
protection. Certains capteurs PIR disposent de leur propre logique
embarque et fonctionnent la manire dun commutateur,
prenant ltat HIGH lorsquun mouvement survient. Ce type de
capteur ncessite une phase de calibrage pour dterminer le seuil
de dtection.

Le prix : Un capteur PIR courant cote entre 15 et 40 . Le cot


principal est li au botier qui offre gnralement un discret aspect
high-tech. Les capteurs PIR nus ne cotent quune fraction de ce prix
(environ 8 ), mais il faut y ajouter le prix du botier pour quils soient
dune quelconque utilit.
Lemplacement : De nombreux botiers permettent de poser le
capteur directement sur un mur. Vous pouvez galement le poser
sur un mini-trpied afin de le stabiliser. Certains trpieds sont
quips dune ventouse de montage qui permet de les fixer sur des
surfaces lisses telles que des vitres.

La plupart des capteurs PIR sont directement prts lemploi. Il suffit de les
alimenter. Ils sont capables de se calibrer eux-mmes en fonction de ce quils peuvent
voir, puis vous envoient une valeur HIGH ou LOW lorsquils dtectent un
changement. Ce qui les rend extrmement simples dutilisation, car ils fonctionnent
avec le mme type de signal quun bouton-poussoir.

Implmenter le croquis
DigitalReadSerial
Dans cet exemple, vous allez apprendre utiliser le SE-10, il sagit dun capteur PIR
disponible chez les principaux revendeurs Arduino. Ce capteur PIR particulier
dispose de trois fils : un rouge, un marron et un noir. Le fil rouge correspond la
source dalimentation et doit tre connect au 5 V. Curieusement, le fil noir
correspond au signal et non la masse (voir la Figure 12-10 ; le fil noir est celui le
plus gauche, le marron est celui du milieu et le rouge est celui de droite). Le marron
doit tre reli la masse et le noir la broche 2.
FIGURE 12-10 Le SE-10 et son trange code couleur.

La broche du signal correspond un circuit dit collecteur ouvert et doit tre


branche en position active HIGH. Pour cela, utilisez une rsistance de 10k pour la
connecter au 5 V. La broche reoit HIGH lorsquil ny a pas de mouvement et LOW
lorsquun mouvement est dtect.
Il vous faut :
Un Arduino Uno

Une platine dessai

Un capteur PIR SE-10

Une rsistance de 10 k

Des straps

Ralisez le circuit comme lindiquent le schma et le diagramme illustrs aux


Figures 12-11 et 12-12.
FIGURE 12-11 Le schma dun circuit de capteur PIR.

FIGURE 12-12 Le diagramme dun circuit de capteur PIR.

Choisissez Fichier->Exemples->01.Basics->DigitalReadSerial dans le menu


Arduino pour charger le croquis. Ce croquis est destin un bouton-poussoir, mais ici
il utilise les mmes principes. Si vous souhaitez rendre le croquis plus spcifique,
vous pouvez lenregistrer avec des noms dobjets et de variables plus appropries.

/*

DigitalReadSerial
Lit une entre numrique sur la broche 2, affiche le
r-
sultat sur lcran srie

Ce code est dans le domaine public.


*/

// La broche numrique 2 est relie un bouton-


poussoir.
int pushButton = 2;

// La routine de configuration sexcute en une


seule fois
quand vous appuyez sur Reset
void setup() {
// initialise la communication srie 9600 bits
par
seconde:
Serial.begin(9600);
// la broche du bouton-poussoir est une entre:
pinMode(pushButton, INPUT);
}

// Routine de la boucle perptuelle


void loop() {
// Lit la broche dentre:
int buttonState = digitalRead(pushButton);
// Affiche ltat du bouton:
Serial.println(buttonState);
delay(1); // dlai entre lectures pour plus de
stabi-
lit
}

Lancez la compilation puis tlversez le programme. Posez alors que le capteur infra-
rouge sur une surface libre et ouvrez le moniteur srie. Cette ouverture rinitialise le
croquis. Le capteur se calibre de lui-mme dans les secondes qui suivent. Lorsquun
mouvement est dtect, vous devrez voir la valeur de buttonState changer,
passant de 1 (pas de mouvement) 0 (mouvement).
Si rien ne se passe, revrifiez vos cblages :
Essayez de relancer le capteur PIR en dconnectant puis en
reconnectant le fil de masse GND, et assurez-vous que le capteur ne
bouge pas ni pendant, ni aprs le calibrage.
Comprendre le croquis DigitalReadSerial
La seule variable dclarer est la broche pushButton, (dans ce cas, la constante
pourrait tre renomme pirSensor).

// la broche numrique 2 est relie un bouton-


poussoir.
int pushButton = 2;

Dans la fonction de configuration, le port srie est ouvert et rgl pour utiliser un
dbit de 9600 bauds et la broche dentre est configure. Rappelons que cette routine
de configuration sexcute en une seule fois quand vous appuyez sur Reset ou
redmarrez :

void setup() {
// initialise la communication srie 9600 bits
par
seconde:
Serial.begin(9600);
// la broche du bouton-poussoir est une entre:
pinMode(pushButton, INPUT);
}

Dans loop(), la broche dentre est lue et sa valeur est stocke dans la variable
buttonState. Cette valeur vaut HIGH lorsquaucun mouvement nest dtect, car
la rsistance pull-up reoit la tension de la broche 5 V. Ds quun mouvement
survient, le collecteur ouvert fait chuter la tension et indique LOW.

void loop() {
// Lit la broche dentre:
int buttonState = digitalRead(pushButton);

La valeur en entre est affiche sur le moniteur srie.

// Affiche ltat du bouton:


Serial.println(buttonState);
delay(1); // Dlai de stabilisation
}
Ceci est un bon exemple illustrant le remploi dun programme avec diffrents
matriels. prsent il vous est possible de dclencher plusieurs sorties en vous
basant sur les signaux HIGH et LOW du capteur PIR. Pour simplifier lusage et la
clart de votre code lintention des autres personnes, renommez les variables avec
des noms plus appropris, ajoutez vos commentaires et enregistrez le croquis sous un
nom facilement identifiable.

Mesurer les distances


Deux capteurs de mesure de distance sont extrmement populaires : le capteur
infrarouge de proximit et le tlmtre ultrasons. Ils fonctionnent de manire
analogue et effectuent peu prs la mme tche. Cependant, il est important dutiliser
le bon capteur au bon endroit. Un capteur infrarouge de proximit dispose dune
source lumineuse et dun capteur de lumire ; le temps mis par la lumire pour revenir
est mesur pour dterminer la distance dun objet.
Un tlmtre ultrasons lance une onde sonore de haute frquence et coute son cho
renvoy par une surface solide. En mesurant le temps mis par le signal pour revenir
la source, le capteur est capable de dterminer la distance parcourue par ce dernier.
Les capteurs infrarouges de proximit ne sont pas trs prcis et ont une porte plus
courte que les tlmtres ultrasons.
Avant la ralisation, tenez compte des points suivants :
La complexit : Ces deux capteurs sont conus pour tre
extrmement simples intgrer dans vos projets Arduino. Ils sont
employs dans des applications relles pour des usages similaires
telles que des applications daide au parking.

Ici encore, la difficult principale rside dans la ralisation du


botier. Les capteurs infrarouges de proximit, tels que ceux raliss
par Shape, disposent dun trou pour tournevis permettant de
raliser les rglages sans ouvrir le botier. Maxbotix, en revanche,
ralise des tlmtres ultrasons qui ne disposent pas de cette
fonctionnalit, mais dont la forme cylindrique facilite le montage
sur une surface en perant un trou au travers.

Le prix : Les capteurs de proximit infrarouges cotent autour


de 12 et ont une porte denviron 1,50 m. Les tlmtres
ultrasons proposent une plus large gamme et sont plus fiables,
mais est au dtriment de leur prix. Comptez environ 20 pour un
capteur ayant une porte denviron 5 m et 80 pour un modle plus
rsistant dune porte jusqu 8 m.

Lemplacement : On utilise frquemment ces capteurs pour


dtecter la prsence dune personne ou dun objet dans un espace
particulier et plus particulirement lorsquun capteur de pression
devient trop simple contourner ou quun capteur infrarouges
risque de donner des mesures errones.

Les capteurs de proximit infrarouges fonctionnent bien dans un environnement


sombre, mais ils deviennent inefficaces la lumire directe du soleil. Le tlmtre
ultrasons de MaxBotix est lun de mes capteurs favoris et lun des plus fiables que je
connaisse. En utilisant un tlmtre ultrasons, vous pouvez dcider de la largeur du
rayon que vous souhaitez mettre. Un faisceau large vous permettra de dtecter les
gros objets et davoir une vague ide de leur direction ; un faisceau fin permet
dobtenir une grande prcision de mesure.

Implmenter le croquis MaxSonar


Dans cet exemple, vous allez apprendre mesurer prcisment des distances en
utilisant un MaxBotix LV-EZ0. Les modles EZ0, EZ1, EZ2, EZ3 et EZ4 fonctionnent
tous de la mme manire et se distinguent par la largeur de faisceau. Choisissez le
modle appropri votre projet. : Les tlmtres ne ncessitent que quelques
ajustements mineurs.
Il y a trois manires de connecter le tlmtre : lanalogique, la largeur dimpulsion
ou la communication srie. Dans cet exemple, vous verrez comment mesurer la largeur
dimpulsion et comment la convertir en distance. La sortie analogique est plus simple
lire depuis vos broches dentre analogique, mais elle ne fournit pas de mesures
aussi prcises que la largeur dimpulsion. Cet exemple ne couvre pas la
communication srie.
Il vous faut :
Un Arduino Uno

Un tlmtre ultrasons LV-EZ0

Des straps

Ralisez le circuit partir des Figures 12-13 et 12-14. Les connexions du tlmtre
sont clairement indiques sur la face intrieure de la carte. Les connexions 5 V et
GND apportent lalimentation votre capteur et doivent tre connectes aux
bornes 5 V et GND de votre Arduino. La connexion PW correspond au signal de la
largeur dimpulsion qui doit tre lue par la broche 7 de votre Arduino. Assurez-vous
que votre tlmtre est bien fix et orient dans la direction de votre choix.

FIGURE 12-13 Schma de montage dun circuit LV-EZ0.


FIGURE 12-14 Schma de principe exploitant un LV-EZ0.

Le code source de MaxSonar (ralis par Bruce Allen) se trouve ladresse


www.arduino.cc/playground/Main/MaxSonar. Dmarrez un nouveau
croquis, copiez ou saisissez le code ci-dessous et enregistrez-le avec un nom simple
se rappeler tel que monMaxSonar.

// Libre vous dutiliser ce code.


// Demandez lautorisation son auteur si vous
souhaitez
lutiliser modifi.
// Auteur: Bruce Allen
// Date: 23/07/09
// Broche numrique 7 pour lire la largeur de
limpulsion
dans lappareil
MaxSonar.

// Constante
const int pwPin = 7;
// Variables (trois sont dclares sur la mme
ligne)
long pulse, inches, cm;

void setup() {
// Ouvre une connexion srie pour montrer les
rsul-
tats dans le PC
Serial.begin(9600);
}

void loop() {
pinMode(pwPin, INPUT);
// Lit limpulsion envoye par lappareil
MaxSonar.
// Reprsente la largeur de limpulsion avec un
facteur
dchelle de 147 uS
par pouce.

pulse = pulseIn(pwPin, HIGH);


// 147uS par pouce
inches = pulse/147;
// Convertit les pouces en centimtres
cm = inches * 2.54; // Attention, point dcimal,
pas
virgule !

Serial.print(inches);
Serial.print( in, );
Serial.print(cm);
Serial.print( cm);
Serial.println();
delay(500);
}

Lancez la compilation puis le tlversement.


Ouvrez le moniteur srie. Vous devez voir la distance mesure en pouces et en
centimtres. Si la valeur est fluctuante, essayez avec un objet plus volumineux.
Ce croquis permet de mesurer une distance en ligne droite avec prcision. :
Confrontez les rsultats indiqus avec une mesure faite avec un mtre. Ajustez le code
en consquence si vous constatez des divergences.
Si rien ne se passe, revrifiez vos cblages :
Assurez-vous dutiliser les bons numros de broches.

Vrifiez les connexions sur votre platine dessai.

Comprendre le croquis MaxSonar


Dans les dclarations, la broche 7 est dfinie comme constante sous le nom pwPin :

// Constante
const int pwPin = 7;

Trois variables de type long sont employes pour stocker la largeur dimpulsion et
les distances exprimes en pouces et en centimtres. Notez que si ces variables nont
pas de valeur par dfaut, vous pouvez les dclarer toutes les trois la suite, ce que
nous faisons ici.

// Variables pour stocker les valeurs


long pulse, inches, cm;

Dans setup(), la connexion srie est ouverte pour afficher les rsultats.

void setup() {
// Ouvre une connexion srie pour afficher les
rsultats
sur le PC
Serial.begin(9600);
}

Dans la boucle principale, pwPin est dfinie en tant quentre. Vous pouvez faire
cette dfinition dans la boucle ou la dplacer dans setup().

void loop() {
pinMode(pwPin, INPUT);

La fonction pulseIn() renvoie, en microsecondes, la dure mise par limpulsion


avant de revenir.

// Lit limpulsion renvoye par lappareil


MaxSonar.
// Reprsente la largeur de limpulsion avec un
facteur
dchelle de 147 uS
// par pouce.

pulse = pulseIn(pwPin, HIGH);

Limpulsion parcourt 1 pouce toutes les 147 microsecondes, ainsi, nous pouvons
calculer la distance partir du temps. Avec cette information, une simple conversion
permet dafficher cette distance selon diffrentes units.

// 147uS par pouce


inches = pulse/147;
// Convertit les pouces en centimtres
cm = inches * 2.54;

Notez bien que lcriture dune valeur fractionnaire doit utiliser un point dcimal la
place de la virgule habituelle en France.
Le rsultat est envoy au moniteur srie via linstruction Serial.println().

Serial.print(inches);
Serial.print( in, );
Serial.print(cm);
Serial.print( cm);
Serial.println();

Pour faciliter la lecture, un dlai est ajout aprs laffichage de chaque ligne, vous
pouvez cependant le supprimer si la ractivit vous importe avant tout.

delay(500);
}
Cette opration vous permet dobtenir une mesure de distance prcise que vous
pouvez incorporer dans vos propres projets.
Un exemple dadaptation un besoin prcis consiste employer une instruction
conditionnelle if comme par exemple :

if (cm < 50) {


// Faire quelque chose !
}

Est-ce que quelquun mentend ?


Le son est une autre manire de dtecter la prsence, et la meilleure faon dy
parvenir consiste employer un microphone de type lectret. On pense gnralement
aux sons sous la forme analogique qui est celle des bruits qui nous entourent.
Cependant, un grand nombre de sons que nous entendons chaque jour proviennent ou
sont convertis dune source numrique.
Ainsi, en convertissant un son en signal numrique, il est possible de linterprter sur
un ordinateur ou sur un Arduino. Un microphone lectret ressemble aux microphones
que lon trouve dans les couteurs des casques. Il est assez sensible, mais requiert un
amplificateur afin que lArduino puisse dtecter les signaux.
Avant la ralisation, tenez compte des points suivants :
La complexit : Il existe une grande varit de microphones
lectret. Un des plus simples est celui du Breakout Board de
Sparkfun. Il est fourni prassembl avec un micro mont sur une
carte et dispose dun amplificateur. Il peut tre facilement reli un
Arduino sous forme dentre analogique. Il est aussi possible de
rcuprer un microphone lectret sur un casque ou sur des
couteurs, mais vous devrez y adjoindre un amplificateur pour
pouvoir lutiliser. Le microphone devra tre protg de
lenvironnement et des contacts humains.

Le prix : Le microphone en lui-mme est trs peu cher (1 ) chez


Sparkfun ou chez ses revendeurs. Une carte complte cote
environ 6 , ce qui nest pas trs cher eu gard au travail conomis.
Lemplacement : En tant que capteur dambiance, le microphone
peut tre plac nimporte o dans une pice. Si vous souhaitez
dtecter un son spcifique comme un claquement de porte, il est
prfrable de placer le microphone proche de cette dernire pour
amliorer la qualit de la lecture.

Les microphones lectret sont parfaits pour mesurer lamplitude ou le volume dun
bruit et ils peuvent dclencher une varit de sorties.

Raliser le circuit AnalogInOutSerial


Dans cet exemple, vous allez observer les niveaux sonores capts par un microphone
lectret. Ce simple capteur peut tre considr comme une entre analogique de votre
Arduino.
Il vous faut :
Un Arduino Uno

Une platine dessai de microphone lectret

Des straps

Ralisez le circuit indiqu par les Figures 12-15 et 12-16 en connectant le micro en
tant quentre et la LED en tant que sortie. La plaque de tests du microphone ncessite
un peu de soudure pour la relier la platine dessai ou votre Arduino.
Dans latelier Arduino, choisissez Fichier->Exemples->03. Analog-
>AnalogInOutSerial dans le menu Arduino pour charger le croquis.

/*
Entre analogique, sortie analogique, Sortie srie

Lit la broche de lentre analogique, compare le


rsul-
tat dans une plage de 0 255 et utilise le rsultat
pour
dfinir la modulation PWM dune broche de sortie.
Affiche
aussi le rsultat sur lcran srie.
FIGURE 12-15 Schma du circuit dun microphone lectret.
FIGURE 12-16 Le diagramme dun circuit dun lectret.

Le circuit:

* Sortie de modulation du microphone relie la


bro-
che analogique 0.
* Les autres broches pour lalimentation +5V et GND
* La LED est relie la broche numrique 9

Cr le 29 Dc. 2008
modifi le 9 Avr 2012
par Tom Igoe

Ce code exemple est dans le domaine public.


*/

// Constantes
const int analogInPin = A0; // Broche dentre
analogique
pour le signal
const int analogOutPin = 9; // Broche de sortie PWM
pour
la LED

// Variables
int sensorValue = 0; // Valeur lue du
microphone
int outputValue = 0; // Valeur de sortie PWM
(sor-
tie pseudo-analogique)

void setup() {
// Initialise les communications srie 9600 bps:
Serial.begin(9600);
}
void loop() {
// Lit la valeur dentre
sensorValue = analogRead(analogInPin);
// La compare la plage de la sortie
outputValue = map(sensorValue, 0, 1023, 0, 255);
// Envoie la valeur en sortie
analogWrite(analogOutPin, outputValue);

// Affiche les rsultats sur le moniteur srie:


Serial.print(Senseur = );
Serial.print(sensorValue);
Serial.print(\t Sortie = );
Serial.println(outputValue);
// Attend 2 millisecondes avant le prochain tour
de
boucle

// pour que le convertisseur analogique-numrique


se
recale
// aprs la dernire lecture
delay(2);
}

Lancez la compilation puis cliquez sur Tlverser et ouvrez le moniteur srie. Vous
devez observer des valeurs analogiques allant de 0 1024 en fonction des bruits
capts par le microphone.
Si rien ne se passe, revrifiez vos cblages :
Assurez-vous davoir bien utilis le bon numro de broche.

Vrifiez les connexions sur votre platine dessai.

Observez les diffrentes plages de valeur que vous rcuprez de


diffrents environnements sonores et la manire dont votre
microphone les interprte.
Vous pouvez galement vous intresser au croquis Smoothing du Chapitre 11. En
utilisant une instruction if, vous pourrez raliser une action spcifique chaque fois
que le niveau sonore dpasse le seuil choisi.

Comprendre le croquis
AnalogInOutSerial
Pour obtenir plus de dtails sur le fonctionnement de ce croquis, reportez-vous aux
notes concernant AnalogInOutSerial dans le Chapitre 7. Vous trouverez aussi
quelques suggestions dans les diffrents croquis concernant le lissage et le calibrage
dans le Chapitre 11.
IV
Booster le potentiel de lArduino

DANS CETTE PARTIE

Vous allez en apprendre encore plus sur les projets Arduino.


Vous allez dcouvrir comment utiliser un Arduino Mega 2560 qui
peut contrler plus de sorties quun Arduino Uno. Vous
apprendrez aussi comment, en ajoutant du matriel
supplmentaire, vous pousserez votre carte Uno encore plus
loin avec un circuit registre dcalage et un pilote PWM. Fort de
toutes ces dcouvertes, vous serez en mesure danimer un
grand nombre de LED pour crer votre propre version des
illuminations de Nol des Champs-lyses ou pour contrler une
arme de servomoteurs.
Chapitre 13
Cartes filles et bibliothques de
fonctions
DANS CE CHAPITRE
Un tour dhorizon de loffre de cartes filles

Jeter un il aux principales bibliothques disponibles

Installer et exploiter une bibliothque

P
lus vous progresserez dans lapprentissage de lArduino et plus vous voudrez en
faire. Cest bien naturel, mais attention ne pas vouloir aller trop vite en besogne.
Le domaine qui vous intresse est peut-tre hautement spcialis et requiert pour le
matriser un investissement en termes de temps qui peut savrer consquent. Dans ce
cas, noubliez pas ce qui est le plus important dans lArduino est la communaut des
gens qui lutilisent. Cette communaut pourra vous aider lorsque vous en aurez besoin.
Le point de vue traditionnel qui nous est inculqu lors de notre scolarit est de
toujours protger nos ides et de les garder pour nous. Heureusement, de nombreux
membres de la communaut Arduino ne partagent pas ce point de vue et ont la
gentillesse de partager avec nous le fruit de leur travail acharn. En partageant les
connaissances, la communaut Arduino permet de nombreuses personnes de
rutiliser du matriel et du logiciel et den tirer de nouveaux usages passionnants. Si
leur tour ces personnes partagent leurs dcouvertes, la communaut grossit, permettant
tous de raliser des projets encore plus complexes. Dans ce chapitre, vous trouverez
des informations concernant les ressources partages que sont les cartes filles pour la
partie matrielle, et les bibliothques (ou librairies) pour la partie logicielle.

Cartes filles
Une carte fille est un composant matriel fournissant des fonctionnalits spcifiques,
et senfichant au-dessus de votre carte Arduino. Par exemple, vous pouvez utiliser une
carte fille pour simplifier la connexion et le contrle dun moteur. Vous pouvez mme
transformer votre Arduino en un appareil aussi complexe quun tlphone mobile. Une
carte fille peut voir le jour sous la forme dun composant matriel ralis par un
exprimentateur enthousiaste qui souhaite partager ses connaissances avec la
communaut. Il peut sagir galement de la ralisation dun individu ou dune
entreprise qui, la demande de la communaut Arduino, souhaite rendre une
application spcifique plus simple raliser.
Les cartes filles peuvent tre trs simples ou trs complexes. Elles sont vendues
prassembles sous forme de kits. Les kits vous permettent plus de libert dans
lassemblage des cartes filles ; certains ncessitent lassemblage de la totalit des
circuits sur la carte, dautres, plus complexes, sont dj partiellement assembles et
ne ncessitent que dtre relies une broche.
Les cartes filles vous permettent dutiliser votre Arduino pour raliser divers projets
tout en passant facilement de lun lautre. Toute llectronique et les circuits
quelles embarquent sont contenus dans un botier dune taille comparable celle de
lArduino. Il est possible de les empiler pour combiner diffrentes fonctionnalits.
Cependant, elles doivent toutes utiliser les mmes broches de votre Arduino. Aussi, si
vous empilez des cartes filles, assurez-vous que ces dernires respectent cette
contrainte. Elles doivent galement proposer une broche GND, car les
communications entre votre Arduino et un autre appareil ncessitent une masse
commune.

Considrations sur les combinaisons


En thorie, plusieurs cartes filles peuvent tre empiles les unes sur les autres. Avant
de tenter de les combiner, tenez compte des points suivants :
La taille physique : Certaines cartes filles ne peuvent pas tre
disposes par-dessus une prcdente. Les composants plus hauts
que le connecteur HE risquent de toucher le dessous de la carte
suprieure. Cette situation, qui peut se solder par un court-circuit,
pourrait srieusement endommager toutes les cartes ainsi runies.

Lobstruction des entres/sorties : Si une entre ou une sortie


est obstrue par une autre carte fille, cest que cette dernire
devient redondante. Par exemple, il ny a aucun intrt avoir une
seconde carte fille joystick ou LCD sous une autre, car il nest
possible de nen utiliser quune seule.

Besoins dalimentation : Certains matriels ncessitent beaucoup


de puissance. Bien que lutilisation de la mme source
dalimentation et des mmes broches pour la masse ne pose pas de
problme, il y a une limite la quantit de courant pouvant transiter
entre les 10 autres broches dentre sortie (I/O) qui est de 40 mA par
broche (et 200 mA au total). Si vous dpassez cette valeur, vous
risquez dendommager votre carte et toutes les cartes filles
rattaches. Dans la plupart des cas, vous pouvez facilement
remdier ce problme en alimentant votre Arduino et ses cartes
filles avec une alimentation externe de manire ce que le courant
ne traverse pas lArduino. Assurez-vous dutiliser la masse
commune si vous communiquez entre les cartes via une
communication au standard I2C ou SPI ou encore une liaison srie.

Broches : Certaines cartes filles ncessitent lemploi de broches


particulires. Il est important de se pencher sur cet genre de
situation. Les risques sont au minimum un mauvais
fonctionnement, et au pire lenvoi dun voltage au mauvais endroit
qui endommagerait vos cartes.

Logiciel : Certaines cartes filles ncessitent des bibliothques


spcifiques pour fonctionner. Celles-ci peuvent entrer en conflit
avec dautres bibliothques dfinissant des fonctions qui portent le
mme nom. Tenez compte des spcifications et des besoins de
chacune carte.

Interfrences radio/Wi-Fi/GPS/GSM : Les appareils sans fil ont


besoin despace pour fonctionner. Si une antenne est monte sur la
carte, il est dconseill de la recouvrir. Essayez de toujours placer
les cartes filles grant la fonction sans fil au sommet de la pile.

Un tour dhorizon des cartes filles


Afin de vous donner une bonne ide des cartes filles disponibles, cette section en
prsente une slection et vous indique o trouver davantage dinformations sur le
sujet.
Notez que les prix indiqus sont ceux appliqus au moment o nous crivons ce livre
et quils sont susceptibles de changer. Les liens sont galement susceptibles dtre
modifis. Les informations techniques sont collectes sur les sites Web des
constructeurs. Vrifiez toujours les dtails par vous-mme afin de vous assurer de
bien acheter ce quil vous faut. Les cartes sont mises jour de temps autre, vrifiez
que vous disposez des toutes dernires versions.
Enfin, de nombreux retours dexprience sur ces produits sont consultables en ligne,
lisez-les toujours pour vous faire une bonne ide sur les produits que vous souhaitez
acqurir.
Cette gamme de cartes filles englobe un grand nombre dusages diffrents, mais dans
la plupart des cas, vous nen aurez besoin que dune seule pour mener bien un
projet. Ces cartes constituent un excellent moyen de tester un concept avant daller
plus loin dans un projet et de se lancer dans la miniaturisation.
Les prix indiqus sont ceux gnralement constats chez les distributeurs. Cependant,
en cherchant bien ou en achetant en gros, vous pouvez rduire considrablement les
cots.

Proto Shield Kit Rev3


Fabricant : Arduino
Prix : 10 sur lArduino Store
Broche utilise : aucune.
Le Proto Shield (Figure 13-1) est une plateforme destine la ralisation de circuits
personnaliss pour votre Arduino. De nombreuses cartes filles prsentes dans ce
chapitre ajoutent votre Arduino des fonctionnalits spcifiques. Avec Proto Shield,
vous pouvez dcider de la manire de les utiliser.
FIGURE 13-1 Un ProtoShied compltement assembl.

Vous partez de vos platines dessai existantes et soudez-les la surface du Proto


Shield afin que votre projet soit plus prenne. Proto Shield propose galement une
version large qui correspond la taille du MegaArduino. Autre fonctionnalit
intressante de ces cartes, elles proposent un support pour les composants miniatures
SMD (montage en surface) qui sont difficiles souder autrement.
Le Proto Shield est vendu soit prassembl, soit sous forme de kit qui ncessite la
ralisation des soudures.
Vous trouverez plus dinformations en anglais sur la carte sur la page produit
dArduino ladresse :
http://arduino.cc/en/Main/ArduinoProtoShield.

ProtoScrew Shield
Fabricant : WingShield Industries
Prix : 8
Broche utilise : aucune.
La carte fille ProtoScrew est proche du Proto Shield classique, mais dispose dun
bornier vis connect aux broches. Cette fonctionnalit est bien adapte dans les
applications qui ont de nombreuses entres susceptibles dtre modifies ou
interverties.
Cette carte simplifie galement le montage et le dmontage. En effet, changer une
pice ou un cble est plus simple avec un bornier vis quavec de la soudure, gardez
ce point lesprit lorsque vous concevrez votre prochain projet.
La carte fille ProtoScrew est vendue sous forme de kit et suppose donc une sance de
soudure. Vous pouvez trouver plus dinformations sur la page produit de SparkFun
(www.sparkfun.com/products/9729).

Adafruit Wave Shield v1.1


Fabricant : Adafruit
Prix : 20
Broches utilises : 13, 12, 11, 10, 5, 4, 3, 2 sur une Uno R3
La carte Wave Shield (voir la Figure 13-2) est un kit relativement peu onreux qui
vous permet de jouer de la musique et du son avec votre Arduino. La Wave Shield sait
lire des fichiers .WAV directement depuis une carte SD, ce qui permet de tlcharger
des fichiers facilement depuis votre ordinateur. Pour utiliser cette carte fille, vous
avez besoin de la bibliothque WaveHC disponible sur la page produit ou via une
recherche sur Google Code (http://code.google.com/p/wavehc/).
La Wave Shield est vendue sous forme de kit souder. Le lecteur de carte SD utilise
les broches 13, 12 et 11, car il supporte linterface srie grande vitesse (SPI) qui est
un protocole assurant un transfert rapide des donnes. La broche 10 est utilise pour
communiquer avec le lecteur SD et les broches 5, 4, 3 et 2 sont utilises pour les
changes avec le convertisseur numrique/analogique (DAC) qui convertit les signaux
numriques en signaux analogiques.
FIGURE 13-2 Une carte audio WaveShield totalement monte.

Pour plus de dtails, visitez la page produit


(www.adafruit.com/products/94). Vous trouverez galement des tutoriaux
ladresse www.ladyada.net/make/waveshield/.

MP3 Player Shield


Fabricant : SparkFun
Prix : 30
Broches utilises : 13, 12, 11, 9, 8, 7, 6, 5, 4, 3, 2 sur Uno R3
Vous pouvez transformer votre Arduino en lecteur MP3 avec cette carte fille facile
assembler ! Elle peut non seulement dcoder les fichiers MP3, mais galement les
formats Ogg Vorbis, ACC, WMA et MIDI. La carte MP3 dispose dun lecteur de carte
MicroSD facilitant le chargement des fichiers et un minijack de 3,5 mm permet de la
raccorder un haut-parleur.
La carte fille MP3 (voir la Figure 13-3) est assemble, mais ncessite quelques
petites soudures pour connecter le connecteur HE aux barrettes mles. Le lecteur de
carte SD utilise les broches 13, 12 et 11. La broche 9 est utilise pour dialoguer avec
le lecteur de carte SD. Les broches 8, 7, 6 et 2 assurent les changes avec le dcodeur
audio MP3 VS1053B. Les broches 4 et 3 permettent lajout de fonctionnalits MIDI
supplmentaires.
FIGURE 13-3 Un kit de carte fille MP3.

Pour plus de dtails, visitez la page produit de SparkFun


(www.sparkfun.com/products/10628). Vous trouverez des tutoriaux sur le
sujet ladresse www.sparkfun.com/tutoriels/295, mais ils sont assez
anciens. Heureusement, les commentaires des utilisateurs de ce tutoriel corrigent bon
nombre des problmes que vous pourriez rencontrer ; un utilisateur a mme crit une
bibliothque de fonctions pour vous simplifier la vie ! Cest un bon exemple de ce que
peut raliser la communaut Arduino pour soutenir un produit.
Lisez toujours les commentaires et les articles des forums concernant les produits et
les kits. Ces commentaires contiennent souvent une multitude de dtails spcifiques.
Assurez-vous juste de ne pas poster une question qui a dj t pose, vous risquez
sinon de vous voir renvoyer la lecture du manuel !

MIDI Shield
Fabricant : SparkFun
Prix : 16
Broches utilises : 7, 6, 4, 3, 2, A1, A0 sur Uno R3
MIDI est lacronyme de Musical Instrument Digital Interface, interface qui
rvolutionna lindustrie de la musique dans les annes 80. Bien que cette technologie
soit relative ancienne maintenant, le MIDI reste un bon standard pour connecter des
instruments, des ordinateurs, des pdales deffets, une plthore dautres appareils
dans le domaine du son mais aussi de la lumire et de la pyrotechnie. Avec cette carte
fille MIDI, vous pouvez interfacer tout ce qui est capable denvoyer ou de recevoir
des donnes MIDI puis incorporer ces donnes dans votre projet Arduino.
MIDI Shield est vendu sous forme de kit souder.
Pour plus de dtails, visitez la page produit de Sparkfun
(www.sparkfun.com/products/9595). Vous trouverez dexcellents tutoriaux
sur le MIDI ladresse (http://arduino.cc/en/Tutoriel/Midi et
http://itp.nyu.edu/physcomp/Labs/MIDIOutput). Un grand nombre
de ressources relatives au MIDI sont disponibles galement aux adresses
(www.tigoe.net/pcomp/code/communication/midi/ et
http://hinton-instruments.co.uk/reference/midi/protocol/).

Afficheur RGB LCD 16 caractres sur 2 lignes


Fabricant : Adafruit
Prix : 25 $ chez Adafruit (N.d.T. : indisponible en euros au moment de la traduction
du livre)
Broches utilises : A4 et A5 sur Uno R3
Ce modue cran LCD (affichage cristaux liquides) trs pratique rassemble tout ce
qui vous est ncessaire sur une seule carte. Il sagit du genre dcran LCD qui
quipait les premiers tlphones mobiles et les anciennes consoles de jeux telles que
la Game Boy de Nintendo. Il utilise un film qui vient recouvrir une surface de couleur
unie gnralement rtroclaire. Les pixels de ce film peuvent tre activs ou
dsactivs afin de crer des motifs, du texte ou des graphiques que vous pouvez
contrler avec votre Arduino. Le cur de cette carte fille est compos dun LCD
RGB, ce qui signifie que vous pouvez aussi jouer avec les couleurs de toute la palette
RVB. Le rtroclairage RVB est contrl directement par votre Arduino. Il sagit dun
cran capable dafficher 16 x 2 caractres (pas de graphiques) soit deux ranges
de 16 lettres. En fonction du mode que vous choisissez, lcran affichera soit du texte
en couleur sur un fond sombre (ngatif), soit un texte fonc sur un fond color
(positif). Il existe une grande varit de cartes LCD capables dafficher des
caractres, aussi, assurez-vous de choisir celui qui convient le mieux vos critres.
La carte fille RGB LCD est vendue en kit et ncessite des soudures. Au lieu dutiliser
neuf broches ou plus, vous pouvez nen utiliser que deux pour contrler le LCD, le
rtroclairage et les boutons en utilisant le protocole I2C pour communiquer avec la
carte fille, la broche 4 pour les donnes (SDA) et la broche 5 analogique pour
lhorloge (SCL). Ce protocole est utilis par de nombreux appareils, il est donc
important de bien le connatre. Pour en apprendre davantage sur lI2C, reportez-vous
lexcellent tutoriel de John Boxall ladresse
http://tronixstuff.wordpress.com/2010/10/20/tutoriel-
arduino-and-the-i2c-bus/.
Il existe galement des cartes filles utilisant la mme technologie, mais qui ne vous
limitent pas au simple emploi de caractres alphanumriques. Si vous souhaitez
afficher vos propres graphiques, vous pouvez vous tourner vers la carte Color LCD
de SparkFun qui utilise un cran de Nokia 6100 ou encore vers la carte TFT Touch.

TFT Touch Shield


Fabricant : Adafruit
Prix : 60
Broches utilises : 5, 6, 7, 8, 9, 10, 11, 12, 13, A0, A1, A2, A3
Si lcran LCD ne couvre pas tous vos besoins, vous pouvez vous tourner vers la
carte fille TFT Touch pour ajouter votre projet un cran tactile couleur complet. Cet
cran est un TFT LCD (une variation des crans LCD qui utilise un transistor couche
mince (TFT) pour amliorer la qualit des images) qui possde une rsolution
de 240 x 320 pixels et un codage de couleurs sur 18 bits permettant 262 144 couleurs
diffrentes. Lcran est quip dun panneau tactile rsistif capable denregistrer la
pression dun doigt nimporte o sur sa surface.
La carte fille TFT Touch est vendue totalement assemble et ne requiert pas de
soudure. Elle peut donc trs simplement tre enfiche au sommet de votre Arduino. La
carte ncessite de trs nombreuses broches pour fonctionner et ne laisse disponibles
que les broches numriques 2 et 3 et les broches analogiques 4 et 5. La broche 12 peut
tre rcupre si vous nutilisez pas le lecteur de carte MicroSD.
Rendez-vous sur la page produit www.adafruit.com/products/376 et sur
http://learn.adafruit.com/2-8-tft-touch-shield o vous
trouverez un tutoriel complet. Adafruit a trs gentiment crit une bibliothque
complte permettant de dessiner des pixels, des formes et du texte
(https://github.com/adafruit/TFTLCDLibrary) ainsi quune autre
destine lcran tactile qui est capable de dtecter les mouvements horizontaux et
verticaux ainsi que la pression (https://github.com/adafruit/Touch-
Screen-Library).

Joystick Shield
Fabricant : SparkFun
Prix : 12
Broches utilises : 2, 3, 4, 5, 6, A0, A1
La carte fille Joystick (voir la Figure 13-4) dispose de toutes les fonctionnalits dun
contrleur de jeu moderne sur une unique carte compatible avec Arduino. Elle offre
quatre boutons assignables ainsi quun bouton supplmentaire cach dans le Joystick
lui-mme. Avec son stick ergonomique, vous pouvez effectuer des transitions fluides
entre les axes x et y pour gnrer des mouvements trs prcis.
La carte Joystick est vendue en kit et ncessite des soudures. Elle nutilise que cinq
broches numriques et deux analogiques, laissant ainsi les autres broches de
lArduino disponibles. Les cinq boutons utilisent les broches de 2 6. Le mouvement
du joystick est mesur laide de deux potentiomtres analogiques : analog 0 qui gre
le mouvement horizontal et analog 1 qui gre le mouvement vertical.
FIGURE 13-4 La carte fille de joystick.

Vous trouverez plus de dtails sur la page produit de SparkFun (www.sparkfun.


com/products/9760), ainsi quun tutoriel dassemblage trs complet
(www.sparkfun.com/tutoriels/161) et un guide de dmarrage rapide
(www.sparkfun.com/tutoriels/171).

Gameduino
Fabricant : James Bowman
Prix : 59
Broches utilises : 9, 11, 12, 13
Le processeur Atmel AVR de votre Arduino est bien plus puissant que celui des
consoles de jeux 8 bits des annes 80. Cest pourquoi James Bowman a dcid de
raliser sa propre carte fille pour tirer parti de cette puissance et pour raliser un
adaptateur de jeu pour Arduino : le Gameduino (voir la Figure 13-5). Avec ce
Gameduino, vous pouvez gnrer des graphiques sur un moniteur, un projecteur ou tout
appareil compatible VGA grce au connecteur VGA de la carte. La partie audio
utilise un connecteur minijack 3,5 mm. Vous pouvez associer cette carte la carte fille
Joystick dcrite dans la section prcdente pour crer un tout en un : console et
contrleur.
FIGURE 13-5 Le Gameduino sassocie parfaitement une carte fille Joystick.

Le Gameduino est vendu totalement assembl et prt lemploi. Il est considr par
lArduino comme un SPI (Serial Peripheral Interface) et utilise quatre broches pour
sa communication.
Pour plus de dtails sur les priphriques SPI, rendez-vous ladresse
(http://fr.wikipedia.org/wiki/Serial_Peripheral_Interface).
Vous trouverez des informations plus spcifiques concernant lArduino sur
http://arduino.cc/en/Reference/SPI. Pour information, la
broche 9 correspond SEL ou SS (slave select), 11 MOSI (master output, slave
input), 12 MISO (master input, slave output) et la 14 SCK OU SCLK : lhorloge
srie.
Une mine de ressources est disponible sur la page produit dArduino
(http://excamera.com/sphinx/gameduino/). Commencez par
tlcharger les croquis dexemples, pour voir ce quil est possible de raliser depuis
ladresse http://excamera.com/sphinx/ gameduino/samples/. Les
nombreux dtails concernant le Gameduino ncessitent une lecture assidue pour bien
comprendre ce travail de pointe. Bonne chance !

Adafruit Motor/Stepper/Servo Shield Kit v1.0


Fabricant : Adafruit
Prix : 24
Broches utilises : 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Vous aimez les moteurs ? Vous souhaitez les essayer tous ? Cette carte fille est faite
pour vous. La carte Adafruit Motor/ Stepper/Servo vous permet en effet de faire
tourner tous les moteurs que vous voulez. Vous pouvez y connecter jusqu deux
servomoteurs de 5 V, deux moteurs pas pas et quatre autres moteurs. Les borniers
vis simplifient grandement le raccordement des moteurs, et comme il est important
avec les moteurs de disposer de suffisamment de puissance, un bornier vis permet
dajouter rapidement une alimentation externe votre Arduino.
La carte fille Adafruit Motor/Stepper/Servo est vendue en kit et ncessite des
soudures. Les broches 4, 7, 8 et 12 sont requises en cas dutilisation de moteur DC
pour faire fonctionner la puce (74HC595) qui les contrle. Les broches 3, 5,
6 et 11 contrlent individuellement la vitesse des moteurs DC ou pas pas. Les
broches 9 et 10 grent les servomoteurs connects. Cela vous laisse les broches
numriques 3 et 13 ainsi quune srie complte de broches analogiques que vous
pouvez utiliser comme broches numriques si ncessaire.
Vous trouverez de nombreux dtails sur la page produit Arduino (www.adafruit.
com/products/81). Un tutoriel complet est disponible sur
(www.ladyada.net/make/mshield/). Faites attention la charge des moteurs,
cette carte est conue pour fournir 600 mA par moteur avec un courant de pointe
de 1,2 A. Si vous approchez d1 A, ajoutez un dissipateur de chaleur.
Ici encore, une bibliothque de fonctions facilitant lutilisation des moteurs est fournie
par Adafruit. Vous la trouverez sur
www.ladyada.net/make/mshield/download.html.

Motor Shield R3
Fabricant : Arduino
Prix : 25
Broches utilises : 3, 8, 9, 11, 12, 13, A0, A1
La carte fille Arduino Motor est la carte moteur officielle conue par lquipe
Arduino. Elle peut contrler un nombre rduit de moteurs, soit deux moteurs courant
continu (DC), soit un moteur pas pas unipolaire, mais elle peut dlivrer une intensit
allant jusqu 2 A par canal, ce qui permet un travail consquent. Elle est galement
compatible avec le TinkerKit, qui est idal lorsquil nest pas envisageable de
dnuder des fils ou de les souder ou pour des exprimentations rapides utilisant
diffrents types de capteurs pour contrler vos moteurs.
La carte Arduino Motor Shield Rev3 est vendue compltement assemble et prte
lemploi. Les broches de lArduino Motor Shield sont rparties selon deux canaux A
et B. Chaque canal permet de fournir individuellement deux moteurs DC quatre
fonctionnalits : direction, vitesse, freinage et dtection de courant. Les
broches 12 et 13 contrlent respectivement la direction de chacun des canaux ; les
broches 3 et 11 contrlent la vitesse de chaque moteur en utilisant PWM ; les
broches 9 et 8 sont utilises pour stopper brusquement le moteur ; les
broches 0 et 1 peuvent tre utilises pour lire la charge courante des moteurs de
chaque canal ; la sortie est de 3,3 V pour une intensit maximale de 2 A.
Pour alimenter les moteurs, vous devez utiliser une alimentation externe qui peut tre
connecte via un bornier vis sur la carte. Il est aussi intressant de noter que les
fiches situes au sommet de la carte sont destines au module TinkerKit et quelles ne
sont pas si simples utiliser si lon ne dispose pas des connecteurs appropris.
Pour en savoir plus sur lArduino Motor Shield, reportez-vous la page produit de
lArduino store (http://store.arduino.cc/ww/index. php ?
main_page=product_info&cPath=11_5&products_id=204). Vous
trouverez plus de dtails sur cette carte sur le site Arduino
(http://arduino.cc/en/Main/ArduinoMotorShieldR3). Des
interrogations sur les modules ThinkerKit ? Visitez www.tinkerkit.com.

LiPower Shield
Fabricant : SparkFun
Prix : 22
Broche utilise : 3
Les batteries sont la clef pour rendre vos projets Arduino plus mobiles. Cette carte
vous permet dutiliser des piles au lithium rechargeables la place des volumineuses
piles de type AA. Bien que ces piles ne dlivrent que 3,7 V, certains dispositifs
permettent de les pousser jusqu 5 V afin quelles puissent alimenter votre Arduino.
La carte fille LiPower est assemble, mais ncessite quelques petites soudures pour
fixer le connecteur HE. Comme cette carte fille est l pour dlivrer de la puissance et
non pour en consommer, elle ne ncessite quune seule broche. La broche 3 peut tre
configure pour dclencher une alarme, lorsque sa capacit tombe en dessous
de 32 %.
Pour plus de dtails, consultez la page produit de SparkFun
(www.sparkfun.com/products/10711). Vous trouverez des notes
intressantes sur le matriel concernant la difficult de charger des batteries au
lithium ; lisez bien tous les commentaires accompagnant la description. Dautres
dispositifs plus petits permettant de dlivrer 3,7 V sont disponibles (Polymer USB
Charger and Battery by SparkFun (www.sparkfun.com/products/9876) et le
USB/DC Lithium Polymer battery charger 5-12 V 3,7/4,2 V par Adafruit
(www.adafruit.com/products/280).
Ces appareils sont parfaits sils sont apparis avec des versions basse tension
dArduino telles que Pro Micro 3,3 V/8 MHz
(www.sparkfun.com/products/10999) ou Arduino Pro 328 3,3 V/8 MHz
(www.sparkfun.com/products/10914). Ils savrent trs pratiques lorsquil
est ncessaire de rduire la taille de votre projet Arduino. Notez quil faut toujours
prendre des prcautions particulires avec des piles au lithium.

GPS Shield Retail Kit


Fabricant : SparkFun
Prix : 45
Broches utilises : 0, 1 ou 2, 3 (par dfaut)
Avec cette carte GPS (Figure 13-6), vous pouvez rapidement et simplement injecter
des donnes de golocalisation dans votre projet. Vous pouvez ainsi dterminer votre
emplacement avec une prcision de quelques mtres ou raliser une uvre artistique
base sur vos dplacements du mois. Cette carte vous fournira galement une heure
extrmement prcise.

FIGURE 13-6 La carte fille GPS SparkFun incluant le circuit EM-406a.


La carte GPS est propose monte, mais ncessite quelques soudures. Les donnes
provenant du module GPS peuvent tre soit connectes directement sur lUART afin
denvoyer les donnes de golocalisation vers la RX de lArduino et les broches
TX 0 et 1, soit sur DLINE pour envoyer les donnes sur les broches
numriques 2 et 3 (par dfaut). Du code ne peut tre envoy vers lArduino que sil
est configur sur DLINE.
Notez que le kit est vendu avec son module GPS. La carte est conue pour le module
EM-406a (www.sparkfun.com/pro-ducts/465).
Vous pouvez utiliser dautres modules comme les EM-408 et EB-85A, mais vous
devrez aussi acheter le connecteur appropri sparment.
Pour plus de dtails, visitez la page produit de SparkFun
(www.sparkfun.com/products/10710). Vous trouverez galement un
excellent guide de dmarrage (www.sparkfun.com/tutoriels/173/) qui
vous permettra de prendre la carte en main en peu de temps. SparkFun propose aussi
un excellent guide dachat pour GPS
(www.sparkfun.com/pages/GPS_Guide).

GPS Logger Shield Kit v1.1


Fabricant : Adafruit
Prix : 40
Broches utilises : 10, 11, 12, 13 et deux autres broches quelconques
La carte fille GPS Logger vous permet de retrouver et de stoker des informations de
golocalisation en utilisant le Global Positioning System. Vous pouvez ainsi
dterminer votre emplacement avec une prcision de quelques mtres ou raliser une
uvre artistique situationnelle. Cette carte vous fournira galement une rfrence
temporelle trs prcise. Les donnes sont stockes sur une carte SD sous forme de
fichier texte et peuvent tre superposes sur Google Maps ou visualises par dautres
logiciels.
Avec la capacit (toujours croissante) des cartes SD, vous tes en mesure de stocker
beaucoup plus dinformations que ne peut le faire votre Arduino dans sa mmoire
interne. Ce point est particulirement intressant, car elle permet votre appareil
mobile denregistrer des donnes sans avoir recours un ordinateur, ce qui vous
permet de laisser la maison votre ordinateur encombrant pendant que votre appareil
GPS parcourt le monde !
LAdafruit GPS Logger Shield Kit est un kit qui ncessite des soudures. Les
broches 10, 11, 12 et 13 sont employes pour la communication avec la carte SD.
Cependant, le module GPS lui-mme ne requiert que quelques broches connectes par
des straps. Les broches RX et TX doivent tre connectes sur deux broches
numriques telles que les broches 2 et 3. Vous pouvez activer dautres fonctions
numriques comme par exemple une LED signalant lenregistrement des donnes, une
broche surveillant le signal de synchronisation GPS ou une broche dtectant la
prsence dune carte dans le lecteur.
Notez quil vous faudra acqurir les modules GPS et SD sparment. Cette carte est
conue pour le module EM-406a (www.adafruit.com/products/99), mais
fonctionne avec une varit dautres modules
(http://ladyada.net/make/gpsshield/modules.html).
Vous pouvez obtenir la carte et dautres informations chez Adafruit
(www.adafruit.com/products/98). Un tutoriel approfondi est disponible sur
le site Ladyada (www.ladyada.net/make/gpsshield/) qui passe en revue
tous les points allant de la construction du kit au code Arduino pour la gestion des
donnes GPS.

Wireless Proto Shield et Wireless SD Shield


Ralises par : Arduino
Prix : 25
Broches utilises : 0 et 1 pour le Wireless Proto Shield ;
0, 1, 4, 11, 12, 13 pour le Wireless Shield SD
LArduino Wireless Proto Shield permet de crer un rseau de dispositifs sans fil
utilisant des modules radio XBee. Ces modules, trs polyvalents, fiables et
abordables sont utiliss pour relier plusieurs cartes Arduino afin de crer votre
propre rseau de capteurs sans fil. La carte fille Wireless Shield SD offre galement
la possibilit de stocker des donnes que vous pouvez collecter de votre rseau pour
les visualiser ensuite sur un ordinateur. Chaque carte fille dispose dun grand
emplacement qui permet dajouter plusieurs capteurs ou dactionneurs votre projet.
Le Wireless Shield et le Wireless Shield SD sont vendues entirement assembles et
prtes lemploi. Les cartes filles communiquent avec les croquis situs sur
lArduino ou via lUSB. Vous pouvez alterner entre ces deux modes en utilisant la
srie. Si vous disposez de la Wireless Shield SD, les broches 4, 11, 12 et 13 sont
utilises par cette dernire pour communiquer et ne sont donc plus disponibles pour
dautres fonctions.
Notez que vous devrez acqurir le module XBee sparment. Le module XBee 1mW
Chip Antenna - Series 1 (802.15.4) est un bon choix pour dmarrer et est disponible
chez RS Components (http://uk.rs-online.com/web/p/zigbee-ieee-
802154/0102715/) et SparkFun (www.sparkfun.com/products/8664).
SparkFun dispose en anglais dun guide dachat de trs bonne qualit, qui vous sera
utile si vous faites vos premiers pas dans le monde des rseaux sans fil
(www.sparkfun.com/pages/xbee_guide).
La page produit dArduino propose plus de dtails sur la carte fille
(http://arduino. cc/en/Main/ArduinoWirelessShield), vous
trouverez un tutoriel sur la communication via XBee 1mW Chip
Antenna - Series 1 (802.15.4) sur le site Arduino
(http://arduino.cc/en/Guide/ArduinoWirelessShield).

Ethernet Shield R3 et Ethernet Shield R3 with


PoE
Fabricant : Arduino
Prix : 29
Broches utilises : 4, 10, 11, 12, 13
La carte fille Ethernet (voir la Figure 13-7) permet votre Arduino dchanger avec
Internet sans avoir recours un ordinateur. Votre Arduino peut donc lui aussi
contribuer enrichir la montagne de donnes sur Internet. Il peut surveiller Twitter et
ragir aux hashtags ou tlverser des donnes issues de capteurs pour les rendre
disponibles au reste du monde. La carte dispose de son propre lecteur microSD
permettant denregistrer les rsultats ou de stocker des fichiers qui seront ensuite
distribus sur le Web. La version R3, la plus rcente, propose quelques broches
supplmentaires pour assurer la compatibilit avec le Uno R3.
FIGURE 13-7 Une carte fille Ethernet (sans le module PoE).

LEthernet Shield R3 with Power-over-Ethernet (PoE) inclut un module


supplmentaire dispos en diagonale sur la carte. Il sagit dun module PoE qui
permet dalimenter lArduino partir du cble Ethernet. Conformment au standard
IEEE 802.3af PoE, il faut pour cela disposer dun cble Ethernet de
catgorie 5 (CAT5). Les hubs et les routeurs domestiques ne supportent gnralement
pas le PoE, mais il sagit dune technologie intressante.
LEthernet Shield R3 et Ethernet Shield R3 with PoE sont vendues entirement
assembles et prtes lemploi. Les broches 4, 11 et 13 sont utilises pour
communiquer avec la carte SD de la carte fille et ne peuvent tre utilises pour
dautres fonctions.
Vous obtiendrez plus de prcisions sur ce produit la page
http://arduino.cc/en/Main/ArduinoEthernetShield et sur les
bibliothques Ethernet sur
http://arduino.cc/en/Reference/Ethernet.

Wifi Shield
Fabricant : Arduino
Prix : 69
Broches utilises : 4, 7, 10, 11, 12, 13
La Wifi Shield (voir la Figure 13-8) permet de vous connecter sans fil sur un hub ou
une borne Wi-Fi, ce qui est trs utile si vous navez pas accs un port Ethernet ou si
vous souhaitez rendre votre projet plus mobile. La carte dispose galement dun
lecteur microSD qui vous permet de sauver des rsultats ou denregistrer des fichiers
que vous souhaitez rendre disponibles sur Internet.

FIGURE 13-8 La carte fille Arduino Wifi.

La carte Wifi Shield est vendue assemble et prte lemploi. LArduino communique
avec cette dernire grce au processeur Wifi Shield et au lecteur de carte microSD
via le bus SPI et les broches 11, 12 et 13. Vous pouvez utiliser la broche 10 pour
slectionner le processeur de la carte WiFi Shield (HDG104) et la broche 4 pour
slectionner la carte microSD. La broche 7 est employe pour le protocole le
processus qui permet de mettre en uvre la communication entre deux appareils, dans
notre cas entre lArduino et la Wifi Shield.
Vous trouverez plus de dtails concernant la Wifi Shield sur la page produit de
lArduino (http://arduino.cc/en/Main/Ar-duinoWiFiShield). Il
existe un excellent tutoriel qui vous aidera dmarrer avec la Wifi Shield ladresse
http://arduino.cc/en/Guide/ArduinoWiFiShield. La bibliothque
Wi-Fi est dcrite en dtail sur la page de Rfrence dArduino ladresse
http://arduino.cc/en/Reference/WiFi.

Cellular Shield avec SM5100B


Fabricant : SparkFun
Prix : 75
Broches utilises : 0, 1 or 2, 3 (par dfaut)
La carte Cellular Shield (voir la Figure 13-9) transforme votre modeste Arduino en
tlphone cellulaire portable. Avec cette carte, vous pouvez envoyer et recevoir des
appels, des messages textuels et mme des donnes. Vous navez besoin que dune
carte SIM prpaye et dune antenne pour tre prt communiquer avec le reste du
monde. Avec la fonction Serial. print(), vous pouvez envoyer les codes adquats pour
communiquer avec le SM5100B.
La carte Cellular avec SM5100B est vendue entirement assemble et prte
lemploi. Il vous faut acheter une antenne disposant dun connecteur SMB comme la
Quad-band Cellular Duck Antenna SMA
(www.sparkfun.com/products/675) de SparkFun. LArduino communique
avec le SM5100B via les broches RX et TC 0 et 1, ou en utilisant la bibliothque
SoftwareSerial, via les broches 2 et 3. Elles sont slectionnes par dfaut, mais ce
choix peut tre configur par des cavaliers situs sur la carte.
La carte SIM doit disposer de suffisamment de crdits pour raliser ce quoi vous la
destinez. Les offres illimites de messages textuels sont particulirement utiles.
Dautres options, telles que la prsence dun micro ou dun haut-parleur, sont requises
car sans elles vous ne serez pas capable de faire autre chose que dappeler et de
raccrocher.
FIGURE 13-9 La carte fille Cellular.

Vous trouverez plus dinformations sur la page produit de SparkFun


(www.sparkfun.com/products/9607). Cette page propose un croquis
dexemple, mais pour disposer dune vraie introduction au GSM, je vous recommande
de vous rendre sur le site de John Boxall
(http://tronixstuff.wordpress.com/2011/01/19/tutoriel-
arduino-and-gsm-cellular-part-one/).

Geiger Counter Radiation Sensor Board


Fabricant : Liberium
Prix : 170 $ chez MicroController Pros.
Broches ncessaires : 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
La Radiation Sensor Board est probablement une des cartes filles Arduino les plus
impressionnantes. Elle vous permet de surveiller le niveau de radiation dans un
environnement. Cette carte a t ralise pour aider les Japonais vrifier le niveau
de radiation suite la catastrophe de Fukushima en mars 2011. Le compteur Geiger
peut utiliser diffrents tubes Geiger afin de dtecter diffrents types et niveaux de
radiations. Elle dispose galement, pour renvoyer des informations, dun affichage
LCD, dune LED et dun haut-parleur pizo.
Cette carte utilise des tubes Geiger qui fonctionnent des tensions dangereuses
(400 V-1000 V) et qui requirent donc beaucoup de prudence dans leur manipulation.
Il est prfrable de conserver cette carte dans un botier tanche afin de prvenir tout
contact humain. Les radiations sont dangereuses, mais llectricit lest aussi, si vous
ne voyez pas de quoi je parle, passez votre chemin !
Le haut-parleur pizo et les LED sont connects la broche 2, ils sont dclenchs
chaque impulsion gnre par le tube Geiger. En fonction du tube employ et du
nombre de pulsations par minute (cpm), vous pouvez dterminer le niveau de
radiation exprim en Sieverts par heure. Les broches 3 et 8 sont utilises pour
laffichage LCD afin dafficher le dtail de la lecture du capteur. Les
broches 9 et 13 sont utilises pour les LED bar qui permettent dobtenir un retour
visuel sans quivoque du niveau de radiation. Les trois premires LED sont vertes,
les deux dernires sont rouges.
Des informations supplmentaires sur ce projet sont disponibles sur la page produit
de Cooking Hack ladresse www.cooking-
hacks.com/index.php/documentation/tutoriels/geiger-coun-
ter-arduino-radiation-sensor-board).

Pour rester inform


Beaucoup dautres cartes filles sont disponibles et de nombreuses sont cres ou
amliores sans cesse. Voici quelques conseils pour rester la page.
Rendez-vous rgulirement dans les boutiques pour y voir leurs derniers produits.
Cest un peu comme dans un magasin de bricolage, vous ne savez jamais ce que vous
allez y trouver.
Arduino Store (http://store.arduino.cc)

Adafruit (www.adafruit.com)

Maker Shed (www.makershed.com)

Seeed Studio (www.seeedstudio.com)

SparkFun (www.sparkfun.com)

Rendez-vous galement rgulirement sur les blogs consacrs Arduino ; ils traitent
souvent des nouveaux kits et applications et constituent une bonne source
dinspiration.
Arduino Blog (http://arduino.cc/blog)

Adafruit (www.adafruit.com/blog)

Hack A Day (http://hackaday.com)

Make (http://blog.makezine.com)

Seeed Studio (www.seeedstudio.com/blog)

SparkFun (www.sparkfun.com/news)

Certains ont fait leffort de documenter des cartes filles, rendez-leur visite :
Arduino Playground
(www.arduino.cc/playground/Main/Sim-
ilarBoards#goShie)

Arduino Shield List (http://shieldlist.org)

Tirez profit des bibliothques (librairies)


Les croquis basiques peuvent vous mener dj loin. Cependant, lorsque vous
deviendrez plus aguerri, vous devrez en apprendre davantage sur les bibliothques.
Une bibliothque (mais on parle aussi de librairie) regroupe un certain nombre de
fonctions directement utilisables pour augmenter les possibilits de vos croquis, soit
en permettant dutiliser du matriel spcifique, soit en fournissant des fonctions
complexes. Ainsi, de la mme manire quune bibliothque physique contient des
connaissances, vous ajoutez une bibliothque votre Arduino pour lui faire acqurir
de de nouvelles capacits. En ajoutant une bibliothque vos croquis, vous pouvez
rapidement et simplement utiliser des fonctions qui vous permettront datteindre vos
buts plus rapidement.
Dbuter avec du matriel et un logiciel complexe peut savrer difficile.
Heureusement, de nombreuses personnes ont pris le temps de documenter leur
progression et ajoutent souvent leurs bibliothques des exemples pouvant tre
aisment intgrs vos propres croquis. partir de ce point, il est possible de
raliser quelque chose de fonctionnel, et en vous accrochant, de mieux comprendre.
Cest cette approche base sur lexprimentation qui vous permet de raliser
rapidement de grands progrs concernant le logiciel et le matriel.
Les bibliothques standard
Cette section prsente une slection des bibliothques fournies avec la version
actuelle dArduino (1.0.1 lheure o nous crivons cet ouvrage). Les bibliothques
standard couvrent une vaste gamme de domaines qui correspondent des sujets
populaires et bien documents. Vous pouvez trouver ces bibliothques en ouvrant
Croquis->Importer bibliothque. Slectionner une bibliothque ajoute une ligne au
dbut de votre croquis de la manire suivante #include <EEPROM.h>, le fichier
.h tant le fichier den-tte de la bibliothque.Avant de comprendre comment
fonctionne une bibliothque, choisissez un exemple et testez-le. Vous en trouverez
dans le sous-menu Fichier->Exemples.
Voici une brve description de ces bibliothques standard :
EEPROM (http://arduino.cc/en/Reference/EEPRO) : Votre
Arduino est quip dun circuit mmoire EEPROM (Electrically
Erasable Programmable Read-Only Memory) qui assure un stockage
permanent. Les donnes stockes dans cet emplacement
demeurent mme si vous teignez votre Arduino. En utilisant la
bibliothque EEPROM, vous pourrez lire et crire des donnes dans
ce circuit mmoire.

Ethernet (http://arduino.cc/en/Reference/Ethernet) : Si
vous disposez dune carte fille Ethernet, la bibliothque Ethernet
vous permet de communiquer simplement et rapidement avec
Internet. Cette bibliothque permet mme dutiliser votre Arduino
comme serveur Web ou en tant que client.

Firmata (http://arduino.cc/en/Reference/Firmata) :
Firmata offre un moyen de contrler votre Arduino via un logiciel
dordinateur. Il sagit dun protocole de communication standard.
Adopter cette bibliothque vous vite de devoir crer votre logiciel
de communication.

LiquidCrystal
(http://arduino.cc/en/Reference/LiquidCrys-tal) : La
bibliothque LiquidCrystal vous permet de faire communiquer votre
Arduino avec la plupart des crans cristaux liquides. Cette
bibliothque est base sur le pilote Hitachi HD44780 qui gre des
crans facilement identifiables leur interface 16 broches.

SPI (http://arduino.cc/en/Reference/SPI) : La Serial


Peripheral Interface (SPI) est un protocole de communication qui
permet votre Arduino de communiquer trs rapidement avec
dautres appareils sur de courtes distances. Il peut sagir de recevoir
des donnes dun capteur, dchanger avec des priphriques tels
quune carte SD ou un autre microcontrleur.

SD (http://arduino.cc/en/Reference/SD) : La bibliothque
SD permet de lire et dcrire sur une carte SD ou micro-SD insre
dans votre Arduino. Les cartes SD exploitent SPI pour transfrer les
donnes rapidement en utilisant les broches 11, 12 et 13 et
ventuellement une broche supplmentaire pour slectionner la
carte SD.

Servo (http://arduino.cc/en/Reference/Servo) : La
bibliothque Servo permet de contrler jusqu 12 servomoteurs
avec un Uno R3 (et jusqu 48 avec un Mega). La plupart des servos
pour amateurs tournent sur 180 degrs ; vous pouvez spcifier la
rotation du servo en degrs en utilisant cette bibliothque.

SoftwareSerial
(http://arduino.cc/en/Reference/SoftwareSerial) : La
bibliothque Software Serial permet dutiliser nimporte quelle
broche numrique pour envoyer et recevoir des messages srie,
venant ainsi remplacer ou complter les traditionnelles
broches 0 et 1. Cela permet de librer des broches pour la
communication avec un ordinateur afin de disposer dune
connexion permanente pour le dbogage, tout en restant en
mesure de tlverser de nouveaux croquis.

Stepper (http://arduino.cc/en/Reference/Stepper) : La
bibliothque Stepper permet de contrler des moteurs pas pas
depuis Arduino. Ce code ncessite un matriel appropri ; voyez les
notes de Tom Igo sur le sujet
(www.tigoe.net/pcomp/code/circuits/motors/stepper-
motors/).

Wi-Fi (http://arduino.cc/en/Reference/WiFi) : La
bibliothque Wi-Fi est base sur la bibliothque Ethernet prsente
prcdemment. Elle intgre des modifications spcifiques pour la
carte Wi-Fi qui permet une connexion sans fil Internet. La
bibliothque Wi-Fi fonctionne galement avec la bibliothque SD ce
qui permet de stocker des donnes sur la carte.

Wire (http://arduino.cc/en/Reference/Wire) : La
bibliothque Wire permet votre Arduino de communiquer avec les
appareils I2C (connus galement sous le nom de TWI (two-wire
interface)). Ces appareils peuvent tre par exemple des LED
adressables ou des Nunchuk Wii.

Installer une bibliothque additionnelle


De nombreuses bibliothques ne sont pas incluses dans le logiciel Arduino. Certaines
sont ddies des appareils spcifiques ; dautres sont des amliorations ou des
adaptations de bibliothques existantes. Arduino permet dajouter ces bibliothques si
facilement que vous pouvez rapidement les essayer pour voir si elles correspondent
vos besoins.
Une bibliothque est en gnral distribue sous forme dun fichier darchive .zip
portant le mme nom que la bibliothque. Ainsi la bibliothque CapSense sera
distribue dans le fichier CapSense.zip. Le nom peut comporter un numro de version
comme dans CapSense-1.0.1 ou CapSense_20120930. Ces versions numrotes
permettent de choisir facilement entre la dernire version ou une version spcifique.
Larchive dcompresse produit un dossier contenant des fichiers se terminant par .h
et .cpp tels que CapPin.h et CapPin.cpp et parfois des dossiers dexemples.
Dans la dernire version dArduino (1.0.1 lheure o nous crivons ces lignes),
ajouter une bibliothque est trs simple. Dposez simplement le dossier de la
bibliothque dans votre dossier des croquis Arduino.
Sous Mac OS X, cela se prsente comme ceci :
~/Documents/Arduino/libraries/CapSense/CapPin.h
~/Documents/Arduino/libraries/CapSense/CapPin.cpp
~/Documents/Arduino/libraries/CapSense/examples

Sous Windows :

My Documents /Arduino/libraries/CapSense/CapPin.h
My Documents /Arduino/libraries/CapSense/CapPin.cpp
My Documents /Arduino/libraries/CapSense/examples

Une fois la bibliothque installe, redmarrez votre Arduino et slectionnez Croquis-


>Importer bibliothque pour voir si elle se trouve bien dans la liste (Figure 13-10).
La bibliothque ne fonctionnera pas si les fichiers ne se trouvent pas dans le bon
dossier ou si son nom a t modifi.

FIGURE 13-10 Le menu Arduino affiche les bibliothques dans la liste droulante Importer
bibliothque.

Si la bibliothque dispose dun dossier dexemples, vous devrez tre en mesure de le


voir dans Fichier->Exemples sous un nom de sous-menu correspondant celui de la
bibliothque (Figure 13-11).
FIGURE 13-11 Si des exemples sont disponibles avec la bibliothque, vous verrez un sous-
menu de mme nom.

Cest tout ce quil faut faire pour installer une bibliothque. La suppression dune
bibliothque est encore plus simple, il suffit de supprimer le dossier correspondant
dans le dossier des croquis dArduino.

Rcuprer une bibliothque de


contributeur
Vous trouverez une longue liste de bibliothques cres par des contributeurs de la
communaut sur la page des bibliothques dArduino ladresse
http://arduino.cc/en/Reference/Libraries. Une liste exhaustive est
disponible http://arduino.cc/play-ground/Main/LibraryList.
CapSense et TimerOne sont deux bibliothques trs utiles et communment utilises :
CapSense (www.arduino.cc/playground/Main/CapSense) :
CapSense permet de crer un capteur capacitif partir dune ou
plusieurs broches de votre Arduino. Vous pouvez ainsi raliser un
capteur tactile ou un capteur de prsence trs rapidement avec peu
de matriel. La page Arduino Playground propose beaucoup
dinformations trs utiles, cependant vous trouverez une version
plus rcente du code sur GitHub
(https://github.com/moderndevice/CapSense).

TimerOne (http://playground.arduino.cc//Code/Timer1) :
TimerOne ou Timer1 utilise une horloge matrielle de votre Arduino
pour dclencher des vnements intervalles rguliers. Cette
bibliothque est bien adapte la lecture des donnes des capteurs
intervalles rguliers sans interrompre les processus de la boucle
principale. Il existe une page ddie cette bibliothque sur Arduino
Playground, le code mis jour est disponible sur Google Code
(http://code.google.com/p/arduino-timerone/).

Si vous tes vraiment dsireux den savoir plus sur les bibliothques, voire dcrire
la vtre, renseignez-vous sur le Web et lisez larticle suivant concernant lcriture de
bibliothque sur la page dArduino ladresse
http://arduino.cc/en/Hacking/LibraryTutoriel.
Chapitre 14
Capter plus dentres et contrler plus
de sorties
DANS CE CHAPITRE
Multiplier les entres et sorties avec une carte Mega 2560

Utiliser un registre dcalage

Apprendre compter en binaire

D
isposer dune sortie et dune entre cest dj bien, cest mme parfois suffisant
pour votre projet. Mais il est souvent utile de pouvoir grer plusieurs capteurs ou
contrleurs, donc un grand nombre dentres/sorties. De nombreuses installations
artistiques numriques sont en fait bases sur des actions assez simples ; leur vraie
complexit est lie la ncessit de grer ces actions pour des centaines ou des
milliers dlments.
Dans ce chapitre, vous dcouvrirez comment raliser un grand nombre doprations
simultanment avec votre Arduino. Pour cela, vous utiliserez une carte plus grande
que le Uno, lArduino Mega 2560 et du matriel spcifique capable daugmenter les
capacits de lArduino standard. Vous dcouvrirez les points positifs et ngatifs de
chacune de ces deux approches. Vous serez arm pour raliser un projet Arduino de
grande ampleur.

Contrler plusieurs LED


Une des mthodes les plus simples pour tendre votre projet Arduino consiste
utiliser la carte Arduino Mega 2560. Cette carte, illustre la Figure 14-1, met
votre disposition beaucoup de broches supplmentaires. Jugez-en vous-mme : 54
broches I/O numriques, 15 broches PWM et 16 broches analogiques.
FIGURE 14-1 La carte Arduino Mega 2560.

Avec la Mega 2560, vous disposez donc de plus despace dentres/sorties. Mais ce
nest pas tout. La Mega dispose de quatre ports sries matriels qui vous permettent
de communiquer simultanment avec de multiples appareils en srie. Ce dernier point
est trs apprciable car il permet de ddier la ligne USB srie la communication
avec un ordinateur sans perturber les connexions avec les appareils sries.
Tous ces moyens de communication sont rendus possibles grce au microprocesseur
ATmega2560 de la carte. Si vous comparez la Mega 2560 la Uno, la premire
diffrence remarquable est lapparence. La puce centrale de la Uno R3, le processeur
ATmega328, ressemble un mille-pattes. Cest un botier dual in-line (DIP ou DIL) ;
il a deux lignes de broches parallles. Si nous observons maintenant le centre de la
carte Mega 2560, nous voyons que la puce est carre. Cest un botier quad line plat
(QFP), avec quatre jeux de broches et un profil trs plat. Plus spcifiquement, il sagit
ici dun botier thin quat flat (TQFP). Vous pouvez voir les deux puces la Figure 14-
2.
Le format physique nest pas la seule diffrence ; les noms des puces sont aussi
lgrement diffrents. Le nom du microcontrleur est imprim sur le dessus du
botier : sur la Uno vous pouvez lire ATMEGA328P alors que sur la Mega, il est crit
ATMEGA2560 16-AU (les noms sont peut-tre visibles dans la Figure 14-2). Ces
rfrences permettent de connatre la capacit mmoire des puces. Les deux nombres
importants sont 328 et 2560 qui correspondent la quantit de mmoire flash
disponible, 32 Ko et 256 Ko respectivement. La mmoire flash est utilise pour
stocker les croquis. La Mega 2560 dispose donc de huit fois plus despace que la
Uno, ce qui savre particulirement utile pour un programme qui exploite beaucoup
de donnes.

FIGURE 14-2 Botier DIP de lUno et TQFP de la Mega.

Pour vous familiariser avec la Mega, jetez un il la disposition des broches sur la
carte prsente la Figure 14-3. La majeure partie de la carte est similaire celle de
lUno, mais remarquez le bloc de broches situ lextrmit. Il ne faut pas utiliser les
broches 5 V et GND la place des broches numriques. De plus, certaines cartes
filles ncessitant dtre modifies pour fonctionner avec la Mega 2560, lisez les
instructions avec attention.
FIGURE 14-3 Description de la carte Mega 2560.

Raliser le projet AnalogWriteMega


Dans cet exemple, vous allez apprendre raliser une barre de lumires LED. Comme
la Mega 2560 dispose potentiellement de 15 broches PWM, cest un appareil parfait
pour contrler avec prcision de nombreuses sorties analogiques. Le croquis
AnalogWriteMega permet de raliser des transitions douces entre les LED.
Pour ce projet, il vous faut :
Un Arduino Mega 2560

Une platine dessai

Douze LED

Douze rsistances 220

Des straps

Comme la ralisation de ce circuit est trs rptitive, utilisez des fils de couleurs
diffrentes pour y voir plus clair. En choisissant les LED et les rsistances, vrifiez
vos calculs. Les LED standard de 3 et 5 mm requirent dans la plupart des kits une
tension de 2,5 V et consomment 25 mA alors que les broches numriques de lArduino
peuvent fournir au maximum 5 V.
Ce que lon peut rsumer par :

(5 V 2,5 V) / 0,025 A = 100

Une rsistance de 100 ohms est donc la valeur exacte pour utiliser une LED jusqu sa
puissance maximale recommande, mais en utilisant une rsistance de 220 ohms vous
ne prenez aucun risque et prolongez la dure de vie du composant. Une rgle gnrale
pour choisir une rsistance consiste en choisir une dont la valeur est immdiatement
suprieure la valeur calcule. Si vous trouvez que la LED nclaire pas assez, vous
pouvez soit utiliser des rsistances plus proches de la valeur optimale, soit utiliser
des LED plus brillantes.
Aprs avoir runi vos LED, rsistances et straps, assemblez le circuit comme
lillustrent les Figures 14-4 et 14-5. Il est compos de 12 petits circuits identiques o
chaque broche de lArduino Mega est connecte une rsistance de 220 ohms, puis
lanode (grande patte) de la LED, la cathode (patte courte) tant connecte la masse.
Aprs avoir mont le circuit, chargez le croquis appropri dans latelier Arduino en
choisissant Fichier->Exemples->03.Analog->AnalogWriteMega. Ce croquis
exploite notamment la fonction analogWrite().
Le code du croquis est le suivant :

FIGURE 14-4 Une srie de douze LED raccordes la carte Mega.


/*
Mega analogWrite() test

Ce croquis fait varier lintensit des LED une une


sur
les broches numriques 2 13. Ce croquis qui est
crit
pour Arduino Mega, ne fonctionne pas sur les cartes
pr-
cdentes.

Le circuit:

* Douze LED connectes aux broches 2 13.

cr le 8 Fvr 2009
par Tom Igoe
Ce code exemple est dans le domaine public.
*/

// Constantes
const int lowestPin = 2;
const int highestPin = 13;

// Configuration
void setup() {
// Dfinit les broches de 2 13 comme sorties
FIGURE 14-5 Schma du circuit du contrleur de LED.

thisPin++) {
pinMode(thisPin, OUTPUT);
}
}

void loop() {
// Parcourt toutes les broches
for (int thisPin =lowestPin; thisPin <=
highestPin;
thisPin++) {
// Fait passer la LED thisPin de teinte
allume
for (int brightness = 0; brightness < 255;
bright-
ness++) {
analogWrite(thisPin, brightness);
delay(2);
}

// Fait varier la LED thisPin de allume


teinte
for (int brightness = 255; brightness >= 0;
bright-
ness--) {
analogWrite(thisPin, brightness);
delay(2);
}

// Pause
delay(100);
}
}

Si votre croquis se charge correctement, vous verrez toutes les LED sallumer et
steindre progressivement les unes aprs les autres, puis recommencer.
Si cela ne se passe pas ainsi, revrifiez vos cblages :
Assurez-vous de bien utiliser les bons numros de broches et
vrifiez les connexions sur la platine dessai.

Vrifiez que vos LED sont relies correctement avec la patte longue
relie la rsistance et la courte relie la masse.

Comprendre le croquis
AnalogWriteMega
Ce croquis est semblable au croquis AnalogWrite du Chapitre 7, mais les instructions
sont ici rptes de nombreuses fois. Avec une boucle for, il est possible de rpter
une tche sans avoir rcrire les mmes instructions pour chaque LED.
Au dbut du croquis, vous dclarez les constantes. Plutt que de dclarer 12 valeurs,
vous pouvez ne dclarer que les valeurs highestPin et lowestPin car la carte
dispose de 12 broches PWM alignes de la broche 2 la broche 13.

const int lowestPin = 2;


const int highestPin = 13;

Dans la fonction de configuration setup(), les broches sont dfinies dans la boucle
for en tant que sorties. Comme les numros des broches se suivent, vous pouvez
utiliser la valeur du compteur pour les dsigner en choisir le mode OUTPUT.

Dans la boucle, la variable locale thisPin est dclare comme un entier int dont
la valeur initiale est gale lowestPin. Cest le point de dpart. La variable
thisPin est ensuite compare highestPin. Tant que thisPin est infrieure
ou gale (<=) highestPin, la broche numrique ayant le mme numro est
dfinie comme sortie puis thisPin est incrmente de un pour le prochain tour de
boucle. Ce processus dfinit rapidement toutes les broches en tant que sorties et
nutilise que 2 lignes de code au lieu de 12.

void setup() {
// Dfinit les broches de 2 13 comme sorties
for (int thisPin = lowestPin; thisPin <=
highestPin;
thisPin++) {
pinMode(thisPin, OUTPUT); }
}

Dans la boucle principale, il y a des boucles for imbriques, ce que vous confirmez
visuellement grce une indentation des instructions par rapport la marge gauche.
Pour formater votre code automatiquement, vous disposez de la commande Outils-
>Auto Format (ou Ctrl + T sous Windows et Cmd/T sous Mac OS). Si vous tes
perdu, dplacez le curseur sur laccolade de droite, et vous verrez laccolade
apparie apparatre en surbrillance. La premire sous-boucle est parcourue pour
chaque broche allant du numro 2 13 en incrmentant chaque tour, jusqu
atteindre 14, la valeur de thisPin.

void loop() {
// Parcourt toutes les broches:
for (int thisPin =lowestPin; thisPin <=
highestPin;
thisPin++) {
// Fait passer la LED thisPin de teinte
allume

La boucle de premier niveau fournit le numro de la broche courante, il est donc


possible de lutiliser dans les deux sous-boucles for. La premire sous-boucle
exploite la variable brightness en augmentant sa valeur de 1 (en lincrmentant)
en partant de 0 jusqu 255. chaque incrment, la fonction analogWrite() est
appele avec comme argument la valeur courante de brightness. Un dlai de 2 ms
est ajout avant chaque retour au dbut de la boucle.

for (int brightness = 0; brightness < 255;


bright-
ness++) {
analogWrite(thisPin, brightness);
delay(2);
}

Une fois que brightness a atteint la valeur PWM maximale de 255, la boucle
for suivante est initialise 0. Elle ralise exactement les mmes oprations mais
cette fois rebours.

for (int brightness = 255; brightness >= 0;


bright-
ness--) {
analogWrite(thisPin, brightness);
delay(2);
}

la fin de la seconde boucle for, un dlai de 100 ms est ajout avant que le croquis
ne reprenne son excution au niveau de la boucle suprieure. Cette dernire rpte la
mme tche, mais avec la broche suivante et ce jusqu la broche numro 13. Aprs la
broche 13 en effet, le critre pour boucler nest plus rempli et le programme sachve.

// pause
delay(100);
}
}

Ce croquis allume et teint progressivement chaque LED entre les broches 2 et 13 et


constitue un bon moyen de sassurer du bon fonctionnement dun circuit. Mais ce nest
pas le point le plus intressant de lapplication, lisez la prochaine section, vous
dcouvrirez comment en faire davantage pendant ltape de configuration.

Modifier le croquis AnalogWriteMega


Animer une barre de LED peut savrer trs amusant. Il y a une norme diffrence
entre faire clignoter des LED et les animer. La premire tape consiste modifier la
squence afin de la rendre plus intressante. En ajoutant une boucle for
supplmentaire et en supprimant le dlai, vous pouvez crer une belle animation. Pour
cela, crez un nouveau croquis, saisissez le code ci-dessous et sauvez-le en lui
donnant un nom simple vous rappeler tel que maLEDAnim. Vous pouvez galement
ouvrir le croquis AnalogWriteMega, raliser les modifications dans la fonction
loop()puis choisir Fichier->Enregistrer pour enregistrer le croquis sous le nom de
votre choix. Notez que la diffrence est quau lieu dun boucle for avec deux sous-
boucles, il y a dornavant deux boucles for avec une sous-boucle dans chacune.
Une bonne pratique consiste mettre jour les commentaires de votre croquis lorsque
vous le modifiez.

/* maLEDAnim
Ce croquis fait varier lintensit des LED sur les
bro-
ches numriques de 2 13 puis les fait steindre
une
une de la broche 13 2.

Ce croquis a t crit pour lArduino Mega, et ne


fonc-
tionne pas sur les cartes prcdentes.

Le circuit:
* Douze LED connectes aux broches 2 13.
Code original de Tom Igoe (2009) - Mega
analogWrite()
test
Modifi par [Votre_Nom] en lan 20__
*/

const int lowestPin = 2;


const int highestPin = 13;

void setup() {
for (int thisPin = lowestPin; thisPin <=
highestPin;
thisPin++) {
pinMode(thisPin, OUTPUT);
}
}

void loop() {
for (int thisPin = lowestPin; thisPin <=
highestPin;
thisPin++) {
// Fait passer la LED thisPin de teinte
allume
for (int brightness = 0; brightness < 255;
bright-
ness++) {
analogWrite(thisPin, brightness);
delay(2);
}
}
for (int thisPin = highestPin; thisPin >=
lowestPin;
thisPin--) {
for (int brightness = 255; brightness >= 0;
bright-
ness--) {
analogWrite(thisPin, brightness);
delay(2);
}

// Pause neutralise ici


// delay(100);
}
}

En excutant le programme, vous obtenez une range de LED qui sallument


rapidement les unes aprs les autres. Lorsque la range est totalement allume, les
LED diminuent dintensit jusqu steindre puis la squence recommence.
Cest un bon dbut, mais vous pouvez mieux faire. Ce fragment de code transforme
votre affichage LED en quelque chose ressemblant KITT (le compagnon
lectronique de David Hasselhoff dans K 2000 ! )
Crez un nouveau croquis, entrez le code suivant et enregistrez-le avec un nom facile
retenir tel que myKnightRider. Vous pouvez partir du croquis AnalogWriteMega, y
faire vos modifications (comme pour le projet prcdent) puis enregistrer le croquis
sous le nouveau nom.

/* myKnightRider

Ce croquis fait varier lintensit de LED des


broches 2
13 et de 13 2, comme KITT de K 2000.
Malheureseusement
ce nest pas une voiture qui parle !

Ce croquis a t crit pour Arduino Mega, et ne


fonc-
tionne pas sur les cartes prcdentes.
Le circuit:
* Douze LED connectes aux broches 2 13.

Code original de Tom Igoe (2009) - Mega


analogWrite()
test
Modifi par [Votre_Nom] en lan 20__
*/

// Constantes
const int lowestPin = 2;
const int highestPin = 13;

void setup() {
// Dfinit les broches 2 13 comme sorties
for (int thisPin = lowestPin; thisPin <=
highestPin;
thisPin++) {
pinMode(thisPin, OUTPUT);
}
}

void loop() {
// Parcourt les broches
for (int thisPin = lowestPin; thisPin <=
highestPin;
thisPin++) {
//
for (int brightness = 0; brightness < 255;
bright-
ness++) {
analogWrite(thisPin, brightness);
delay(2);
}
for (int brightness = 255; brightness >= 0;
bright-
ness--) {
analogWrite(thisPin, brightness);
delay(2);
}
}
for (int thisPin = highestPin; thisPin >=
lowestPin;
thisPin--) {
//
for (int brightness = 0; brightness < 255;
bright-
ness++) {
analogWrite(thisPin, brightness);
delay(2);
}
for (int brightness = 255; brightness >= 0;
bright-
ness--) {
analogWrite(thisPin, brightness);
delay(2);
}
// Pas de pause
// delay(100);
}
}

Ce croquis anime vos LED de manire incroyable : les LED sallument les unes aprs
les autres dans un mouvement de gauche droite. Vous pouvez ajuster le dlai et
lintensit des LED pour obtenir exactement leffet souhait. Pour vous inspirer du
KITT original, visionnez un vieil pisode de K-2000.

Contrler plusieurs LED par dcalage


Parfois, mme le Mega 2560 avec ses 70 broches savre insuffisant, et il faut trouver
des moyens pour grer encore plus dentres et de sorties. Heureusement, il existe un
type de circuit logique permettant daugmenter le nombre dentres/ sorties quun
Arduino peut contrler. Ce type de puce est un registre dcalage (shift register).
Parmi les registres dcalage disponibles, un des plus utiliss est le 74HC595. Il
permet 8 bits en entre srie, sortie srie ou parallle
(http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf).
La mention 8 bits fait rfrence au nombre de sorties qui peuvent tre contrles. Pour
comprendre comment fonctionne un registre dcalage, vous devez dabord bien faire
la diffrence entre binaire, bit et octet. Voyez ce sujet lencadr ci-aprs. Un
circuit 74HC595 est reprsent la Figure 14-6.
Comme vous pouvez le constater dans lencadr, des valeurs illimites peuvent tre
crites en utilisant seulement des zros et des uns. Avec huit chiffres binaires, on peut
exprimer valeur dcimale de 0 255. Chaque valeur binaire utilise un emplacement
mmoire (un bit) et chaque groupe de huit bits constitue un octet. Pour vous donner
une chelle de grandeur, un croquis Arduino vierge utilise 466 octets ; un Uno peut
stocker un maximum de 32 256 octets et un Mega un maximum de 258 048 octets.
La Figure 14-7 montre le schma de brochage du circuit 74HC595. Le nom des
broches est expliqu dans le Tableau 14-1. Dans le 74HC595, les huit broches de
sortie correspondent aux huit bits dun octet. Un bit la fois est envoy vers le
registre dcalage. Quand la broche dhorloge (SH_CP) passe ltat HIGH, les
valeurs de tous les bits se dcalent dun rang en avant, la valeur de la dernire broche
disparat et la premire broche prend sa valeur depuis lentre de donnes srie
(DS). Les bits restent tous stocks dans le registre jusqu ce que la broche de
dverrouillage latch (ST_CP) passe ltat HIGH, ce qui provoque lenvoi des huit
valeurs sur les huits sorties en mme temps.

FIGURE 14-6 Un circuit logique registre dcalage 74HC595.


FIGURE 14-7 Brochage du 74HC595.

La valeur totale sur huit bits (ou sur un octet ou sur un nombre dcimal compris
entre 0 et 255) reprsente chaque combinaison du registre, cest--dire reprsente la
manire dont le registre dcalage transmet ses sorties. Si vous envoyez 11111111,
toutes les broches de sortie passent HIGH, si vous envoyez 10101101, les
broches 0, 2, 3, 5 et 7 passent HIGH (on lit de droite gauche).

TABLEAU 14-1 Les broches du 74C595.

Broche Description Usage

Q0-Q7 Broches de sortie Relies aux LED

GND Masse Relie la masse de la carte Arduino

Q7 Sortie srie Sortie srie utilise pour poursuivre


le dcalage avec un autre 74HC595

MR Master Reclear en anglais, Remet zro le registre dcalage si


active LOW passe l'tat LOW.

SH_CP Shift Register Clock Pin (broche Si passe l'tat HIGH, dcale de un
de lhorloge du registre toutes les valeurs.
dcalage)

ST_CP Storage Register Lock Pin Quand passe HIGH, rend


(broche de verrouillage) disponibles les valeurs en sortie. Doit
passer HIGH
juste aprs que SH_CP passe LOW.

OE Output Enable Active la sortie si l'tat LOW et la


dsactive quand elle passe l'tat
HIGH.

DS Entre des donnes sries Broche dentre de la nouvelle


donne srie.

Vcc Tension positive Alimentation du circuit et des LED

Vous pouvez aussi enchaner deux 74HC595, ce qui signifie que vous pouvez doubler
le nombre de sorties en utilisant la broche de sortie srie (Q7). Si vous
envoyez 16 bits (ou deux octets ou un nombre dcimal compris entre 0 et 65 536), les
bits traversent le premier registre puis le second par dcalage.

Raliser le circuit shiftOutCode


Dans cet exemple, vous allez observer le dcalage de sortie avec un
seul 74CH595 pour contrler huit LED. Les LED se comptent en binaire de 0 255.

BINAIRE, BITS ET OCTETS

Le systme dcimal utilise dix chiffres de 0 9 ; cest la base 10. Le systme


binaire en utilise deux : 0 et 1 ; cest la base 2. Il existe aussi une base 16, trs
pratique car mutliple de la base 2. Les chiffres hexadcimaux sont en
base 16 les dix chiffres de 0 9 et les lettres de A F.

Mais comment le systme binaire peut-il reprsenter toutes les informations


du monde alors que vous navez que deux valeurs possible ? La rponse est
que vous utilisez des valeurs binaires.

Si vous prenez un nombre binaire en base 2 tel que 10101101, vous pouvez
dterminer la valeur quivalente en base 10 en utilisant une simple table de
conversion. Le binaire se lit de droite gauche (comme le dcimal). Comme il
est en base 2, chaque valeur correspond la valeur binaire multiplie par la
puissance de 2 correspondant la position du bit, en commenant par 0
droite. Voici comment est code loctet binaire 10101101. Sa valeur dcimale
est 173.

Binaire : 1,0,1,0,1,1,0,1

Calcul : 1x27,0x26,1x25,0x24,1x23, 1x22,0x21,1x20Total

Dcimal : 128,0,32,0,8,4,0,1,173

Il vous faut :
Un Arduino uno

Une grande platine dessai

Un 74CH595

Huit LED

Huit rsistances de 220

Des straps

Le 74CH595 est plac dans un espace au centre de la platine dessai et devrait


sinsrer parfaitement parce que votre platine dessai a t conue en prvision de cet
emplacement. Lespace du centre vous permet de connecter facilement les fils des
deux cts de la puce. Ici plus quailleurs, prvoyez de chaque ct de la platine une
ligne dalimentation et une ligne de masse. Vous pouvez ainsi relier les broches 5 V de
lArduino et les broches de la masse de chaque ct de la platine, comme lillustre le
circuit de la Figure 14-8.
FIGURE 14-8 Un circuit pour utiliser 74HC595.

FIGURE 14-9 Schma pour utiliser un 74HC595.

La disposition des broches est assez simple, sauf celle de la premire, la broche 0,
qui est sur le ct oppos de la platine par rapport aux autres. Dans cet exemple,
utilisez des straps de couleurs ou un kit qui permet de suivre la trace des connexions.
Ralisez le circuit tel quil est reproduit aux Figures 14-8 et 14-9.
Une fois le circuit mont, vous avez besoin du logiciel adquat pour lutiliser. Crez
un nouveau croquis en saisissant le code ci-dessous et en lenregistrant sous un nom
facile se souvenir comme MonDecalage ou bien allez rcuprer cet exemple sur
http://arduino.cc/en/Tutorial/ShftOut11 (il manque bien une lettre
i dans le nom).

//*****************************************************//

// Nom : shiftOutCode, Hello World


// Auteurs : Carlyn Maw,Tom Igoe, David A. Mellis
// Date : 25 Oct, 2006
// Modifi: 23 Mar 2010
// Version : 2.0
// Notes : Code pour utiliser un registre dcalage
74HC595
// pour compter de 0 255
//*****************************************************

// Broche connecte sur ST_CP du 74HC595


int latchPin = 8;
// Broche connecte sur SH_CP du 74HC595
int clockPin = 12;
// Broche connecte sur DS du 74HC595
int dataPin = 11;

void setup() {
// Configure les broches en sortie
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}

void loop() {
// Compte de 0 255 et affiche la valeur binaire
sur
les LED
for (int numberToDisplay = 0; numberToDisplay <
256;
numberToDisplay++) {
// Force la broche latchPin LOW
// pour que les LED ne changent pas pendant
lenvoi
des bits
digitalWrite(latchPin, LOW);
// Dcale les bits
shiftOut(dataPin, clockPin, MSBFIRST,
numberToDis-
play);

//prend la broche latch HIGH pour que les LED


sclairent:
digitalWrite(latchPin, HIGH);
// Pause avant de traiter une nouvelle valeur
delay(500);
}
}

La range de LED devrait compter en binaire de 0 255. Le binaire se lit de droite


gauche avec le bit des units, appel bit de poids faible, droite et le bit de poids
fort, ici 128, gauche. Regardez bien les cinq premiers numros pour vrifier si le
motif est correct. Le Tableau 14-2 reproduit la conversion de 0 9.

TABLEAU 14-2 Du dcimal au binaire et de 0 9.

Dcimal Binaire

0 00000000

1 00000001

2 00000010

3 00000011

4 00000100
5 00000101

6 00000110

7 00000111

8 00001000

9 00001001

Si rien ne se produit, revrifiez vos cblages :


Vrifiez les connexions sur la platine dessai.

Vrifiez que les LED sont bien orientes, dans le bon ordre et que
les broches de lArduino sont connectes aux bonnes broches
du 74H595.

Comprendre le croquis shftOut11


Au dbut du croquis, il faut dclarer trois broches pour contrler le registre
dcalage. La broche 8 est celle du verrouillage, elle est utilise pour rendre
disponibles les valeurs du registre ; la broche 12 est celle de lhorloge, qui sert
dcaler les bits broche par broche ; la broche 11 permet denvoyer un nouveau bit
0 ou 1 dans le registre.

//Broche connecte sur ST_CP du 74HC595


int latchPin = 8;
//Broche connecte sur SH_CP du 74HC595
int clockPin = 12;
////Broche connecte sur DS du 74HC595
int dataPin = 11;

Dans la configuration, il suffit de dfinir le pinMode de chaque broche sur


OUTPUT :

void setup() {
// Configure les broches en sortie
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}

Notez que la fonction loop() est relativement petite malgr la complexit de la tche.
Une boucle for sert compter de 0 255. Une variable locale nomme
numberToDisplay est le nombre en cours.

void loop() {
// Compte de 0 255 et affiche la valeur binaire
sur
les LED
for (int numberToDisplay = 0; numberToDisplay <
256;
numberToDisplay++) {

La broche de verrouillage reste ltat LOW afin quelle nautorise aucune valeur en
sortie de registre pendant que vous les changez.

digitalWrite(latchPin, LOW);

La fonction shiftOut() est utilise pour remplir exactement ce rle. Pour ce


faire, elle attend quatre paramtres dentre :
le premier est le numro de la broche dentre dataPin ;

le deuxime est celui de la broche de lhorloge clockPin ;

le troisime sert choisir si loctet est prsent en commenant


par le bit de poids fort (MSBFIRST) ou par le bit de poids faible
(LSBFIRST) ;

le dernier paramtre est la valeur sur huit bits d-srialiser pour


lafficher. Cest le contenu de la variable locale numberToDisplay.

Cette fonction prend la valeur et gre toutes les impulsions pour aboutir aux tats des
huits bits sur les huit broches du registre.

// Dcale les bits


shiftOut(dataPin, clockPin, MSBFIRST,
numberToDisplay);
Il ne reste plus qu forcer la broche de verrouillage latch ltat HIGH pour
envoyer les valeurs mises jour aux LED.

// Autorise lenvoi en sortie


digitalWrite(latchPin, HIGH);

Une courte pause dune demi-seconde se produit avec la fonction delay() avant que
le programme ne recommence un tour de boucle for en incrmentant le nombre de
un.

// Pause
delay(500);
}
}

Ce cycle se poursuit jusqu ce que la boucle for atteigne la valeur 255, ce qui
correspond toutes les LED ltat HIGH (allum). On revient ensuite 0 pour
reprendre le comptage. Compter en binaire, cest bien, mais il ne faut pas trop en
abuser. Dans la section suivante, je vais affiner le code pour traiter les LED
individuellement.

Modifier shiftOutCode
La prcdente mthode binaire permet de comprendre le fonctionnement du registre
dcalage, mais que faire si vous voulez activer une broche spcifique sans avoir la
convertir en binaire ? Le code qui suit utilise le mme circuit que dans la section
prcdente, mais permet de slectionner des LED individuellement dans un port srie.
Commencez par crer un nouveau croquis en saisissant le code ci-aprs, puis
enregistrez-le sous un nom facile retenir comme monDecalSerie. Ou bien copiez cet
exemple depuis la page Arduino
http://arduino.cc/en/Tutorial/ShftOut12 (toujours sans la lettre i
dans le nom).

/*
Shift Register
pour le circuit 74HC595
Ce croquis lit lentre srie et lutilise pour
dfinir
les broches dun registre dcalage 74HC595.
Matriel:
* Registre dcalage 74HC595 reli aux broches 2,
3, et
4 de lArduino
* LED relies aux sorties du registre dcalage
Cr le 22 Mai 2009
Cr le 23 Mars 2010
par Tom Igoe
*/
// Broche connecte la broche latch (ST_CP) du
74HC595
const int latchPin = 8;
// Broche connecte la broche horloge (SH_CP) du
74HC595
const int clockPin = 12;
// Broche connecte aux Data dans (DS) du 74HC595
const int dataPin = 11;

void setup() {
// Dfinit les broches en sorties
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
Serial.println(reset);
}

void loop() {
if (Serial.available() > 0) {
// Les caractres ASCII 0 9 correspondent
// aux valeurs dcimales 48 57.
// Si lutilisateur entre un chiffre entre 0 et
9 en
ASCII,
// il faut soustraire 48 pour rcuprer la
valeur
relle.
int bitToSet = Serial.read() - 48;
// Ecrit dans le registre dcalage avec le bit
cor-
rect:
registerWrite(bitToSet, HIGH);
}
}

// Cette mthode envoie des bits au registre


dcalage:
void registerWrite(int whichPin, int whichState) {
// Bits envoyer
byte bitsToSend = 0;

// Bloque la sortie pour que les broches ne


sallument
pas
// pendant que le bit est supprim
digitalWrite(latchPin, LOW);

// Active le bit suprieur dans bitsToSend


bitWrite(bitsToSend, whichPin, whichState);

// Dcale les bits en sortie


shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);

// Dbloque la sortie pour que les LED puissent


sal-
lumer
digitalWrite(latchPin, HIGH);
}

Une fois le croquis tlvers, ouvrez le moniteur srie. Le premier mot affich devrait
tre reset suite linstruction dans setup() au dmarrage du croquis. Saisissez
un nombre entre 0 et 7 puis cliquez sur Send (Envoyer) ou appuyez sur Entre pour
activer une des huit LED dans la range.
Dans ce code, vous convertissez le systme dadressage binaire en un dcimal. Au
lieu dentrer une combinaison binaire, vous slectionnez ladresse individuelle de
chaque LED en entrant un nombre dcimal compris entre 0 et 7.
Dans la boucle principale, linstruction if vrifie sil y a des donnes lire. La
fonction de test Serial.available() consulte le tampon mmoire (lespace de
stockage des octets entrants). Si linstruction if vaut TRUE, on continue et des
donnes sont transmises :

if (Serial.available() > 0) {

Les caractres envoys via le port srie sont transmis en tant que caractres ASCII. Ils
sont lus par Serial.read() et interprts comme valeurs entires selon le codage
ASCII. Selon ce codage, les chiffres compris entre 0 et 9 correspondent la plage de
valeurs de 48 57. Pour rcuprer la bonne plage, il suffit de soustraire 48 la
valeur :

int bitToSet = Serial.read() - 48;

Une fonction dfinie par vous sous le nom registerWrite() est appele pour
faire la conversion de 0 9 en un octet binaire. Cette fonction est dfinie aprs la
boucle principale en bas de croquis :

registerWrite(bitToSet, HIGH);
}

Les deux paramtres dentre de registerWrite() sont dclars dans la ligne


de tte de la nouvelle fonction sous les noms whichPin et whichState. Ces
variables et tout ce qui est dfini dans la fonction sont des lments locaux qui ne
peuvent donc pas tre mentionns dans la boucle principale :

void registerWrite(int whichPin, int whichState) {

Une variable doctet locale (type byte) est dclare et initialise 0 :

// bit envoyer
byte bitsToSend = 0;

Comme dans lexemple prcdent, la broche de verrouillage est force LOW avant
de dcaler les bits :

// Dsactive la sortie, les broches ne sallument


pas
// pendant que les bits sont dcals
digitalWrite(latchPin, LOW);

Une nouvelle fonction prdfinie nomme bitWrite() est utilise. Elle attend
trois paramtres : la variable que vous venez dcrire, ici bitsToSend ; le bit de
loctet crire, de 0 (le plus petit et le plus droite) 7 (le plus grand et le plus
gauche) et ltat HIGH ou LOW.

// Active le prochain bit de poids fort dans


bitsToSend
bitWrite(bitsToSend, whichPin, whichState);

Par exemple, si loctet bitsToSend est gal 0, il est gal 00000000 en binaire.
Si vous utilisez la fonction bitWrite() avec whichPin gale 4 et
whichState gal HIGH (ou 1), bitsToSend sera gal 00010000.

Une fois que bitWrite() a mis jour la valeur de loctet bitsToSend,


bitsToSend est transmis via la fonction shiftOut() pour mettre jour le
registre :

// Dcale les bits en sortie


shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);

Enfin, la broche de verrouillage est force HIGH et les rsultats sont mis jour sur
les sorties, donc sur les LED.

// Active les sorties


digitalWrite(latchPin, HIGH);
}

Plus loin avec le mme circuit


Ce dernier exemple vous permet de communiquer les valeurs en srie, mais vous
pouvez aussi automatiser cette procdure avec une boucle for pour compter
de 0 7 et recommencer. La valeur peut aussi provenir dun capteur ou dun
potentiomtre, en utilisant la fonction map pour faire varier une jauge quand vous
tournez le bouton. Vous trouverez de nombreux autres exemples sur le site Arduino,
augmentant en complexit (http://arduino.cc/en/Tutorial/ShiftOut)
dont plusieurs registres dcalage en cascade.
Si vous envisagez dutiliser deux registres dcalage en cascade, vous serez avis
dalimenter les LED de lextrieur pour rduire la quantit de courant qui passe par
lArduino. Si vous utilisez beaucoup de LED, vous pouvez facilement dpasser
les 200 mA. Utilisez un multimtre pour vrifier lintensit du courant dalimentation
du circuit et sa scurit.
Lexemple de ce chapitre a prsent un modle de registre. Il en existe dautres
comme le TLC5940 qui peut contrler 16 sorties PWM et fonctionne sur le mme
principe. La page Google Code contient de nombreuses informations dtailles ainsi
quune bibliothque dAlex Leone
(http://code.google.com/p/tlc5940arduino/). Vous pouvez aussi
faire linverse et lire beaucoup dentres. Pour en savoir plus sur le dcalage,
consultez le site Arduino la page at
http://arduino.cc/en/Tutorial/ShiftIn.
Chapitre 15
Multiplier les sorties avec I2C
DANS CE CHAPITRE

Dcouvrir le protocole I2C

Contrler plusieurs servos

Trouver une bonne alimentation lectrique

C e chapitre vous propose de dcouvrir le protocole de communication nomm I2C


(prononcez eye-squared-see ou plus simplement I deux C), qui permet de contrler
un grand nombre de sorties. Pour illustrer les capacits de ce trs bon protocole, nous
verrons comment contrler non pas quelques LED (comme au Chapitre 14), mais une
arme de servomoteurs. Mais pouvoir contrler des dizaines de servos est une chose,
les alimenter correctement en est une autre. Nous aborderons galement ce point et
vous prsenterons les nombreuses options qui soffrent vous dans ce domaine.

Quest-ce que I2C ?


I2C est un protocole de communication destin distribuer des signaux sur un grand
nombre de sorties. (Il vient en complment des autres mthodes dcrites dans le
Chapitre 14). Il existe dexcellents produits qui utilisent la puce PCA9685 contrle
par I2C comme le pilote PWM qui vous permet de contrler jusqu 16 servomoteurs
avec une Seule carte. Linterface I2C
(http://www.adafruit.com/products/815) 16 canaux sur 12 bits
PWM/Servo Driver de chez Adafruit (voir Figure 15-1) est un kit partiellement
assembl qui facilite le contrle de nombreux moteurs, LED et autres composants.
FIGURE 15-1 La carte I2C PWM/ Servo Driver.

La carte I2C de Adafruit est conue pour contrler des servos qui utilisent trois
broches de connexion (masse, 5 V, et signal), elle est donc compose de 16 groupes
de trois broches permettant ainsi de brancher facilement vos servos en utilisant des
connecteurs 3 broches standard. Physiquement, ces broches sont regroupes par
quatre. Sur les petis cts de la carte se trouvent six broches destines la
communication avec la puce PCA9685.
Un servo, comme dj indiqu dans le Chapitre 8, est un moteur courant continu
(DC, Direct Current) associ un encodeur qui pilote sa position angulaire. Les
moteurs DC standard sont durs la tche et fonctionnent bien lorsquil sagit de
tourner vite et de manire continue dans un seul sens, comme cest le cas des moteurs
dasenseurs ou de lave-linge.
En revanche, les servos par contre sont faits pour effectuer des mouvements prcis sur
un seul tour ou moins ; ils tournent dun nombre spcifique de degrs et sont parfaits
pour un grand nombre dapplications allant des robots marcheurs aux treuils
lectroniques pour les voiles des bateaux.
Les six broches des petits cts sont, en partant du haut vers le bas :
GND : La masse
OE : Activation de la sortie (Output Enable)

SCL : Horloge srie

SDA : Donnes srie

VCC : Alimentation du circuit PCA9685

V+ : Alimentation de puissance des servos

Sur ces broches, il suffit dutiliser VCC et GND pour alimenter la puce PCA9685 et
SCL et SDA pour permettre lI2C de communiquer avec lArduino et les autres
cartes. Comme la carte a les mmes broches des deux cts, vous pouviez en dduire
que plusieurs cartes peuvent tre relies en cascade . On donne chaque carte une
adresse physique via un petit terminal situ en haut droite que lon nomme cavalier
souder. Ces cavaliers permettent en soudant les liaisons de dfinir pour chaque carte
une valeur binaire. La carte 0 na pas de liaison, et les autres cartes sont configures
partir de 1 en soudant les liaisons entre eux. Il sagit dune configuration semi-
permanente qui peut tre dfaite avec une pompe dessouder.
La broche V+ est relie au dernier composant, le bornier vis dispos en haut de la
carte. Il sagit l dune fonctionnalit importante de cette carte. Bien quil soit
possible dalimenter des moteurs et leurs contrleurs en utilisant la mme source
dalimentation, ce nest pas conseill. En effet, les moteurs ncessitent frquemment
une puissance importante pour faire leur travail. Parfois, des pointes sont atteintes et
elles peuvent avoir un effet trs nfaste sur la puce PCA9685. Sur cette carte, les deux
alimentations sont spares. Les servomoteurs (ou les LED) peuvent profter dune
alimentation en 12 V alors que la puce travaille partir du faible courant sur 5 V
fourni par lArduino.
Contrairement aux registres dcalage 74HC595 ou TLV58940, le circuit
PCA9685 dispose dune horloge interne. Il nest donc pas ncessaire que votre
Arduino envoie un signal permanent pour sa mise jour, ce qui le laisse libre
deffectuer dautres tches.
Dans lexemple suivant, vous allez apprendre assembler et contrler une carte I2C
PWM Servo Driver pour raliser votre propre projet de contrle dune srie de
moteurs lectriques.

Assembler lI2C PWM/Servo Driver


Tous les composants essentiels de la carte I2C PWM/Servo Driver ont t dj
assembls pour vous, mais vous devez y apporter une touche finale. Avant cela, faites
un essai blanc en disposant les composants avant de vous lancer :
Dans le kit, vous disposez des lments suivants :
une carte I2C PWM/Servo Driver,

quatre barrettes de broches 3 x 4,

une barrette de broches mles,

un bornier vis.

Suivez les tapes ci-aprs pour raliser un essai blanc de votre assemblage.

1. Avec une pince coupante, coupez la barrette dans le sens de la


longueur afin dobtenir deux barrettes de 1 x 6 (voir la Figure 15-
2).

Vous les utiliserez chaque extrmit pour connecter en premier


lieu la carte votre Arduino puis pour enchaner ces cartes.

2. Disposez toutes les pices en vrac sur la carte afin de vous


assurer quil y a une place suffisante.

FIGURE 15-2 Couper la barrette dans le sens de la longueur.

La barrette doit tre oriente dans sa longueur vers le haut, et le


bornier vis doit tre en face de la carte pour faciliter le
branchement des cbles. Lorsque vous tes satisfait de
lemplacement des broches, vous pouvez commencer souder.
3. Faites place nette (voir la description au Chapitre 5). Faites
chauffer votre fer souder, humidifiez votre ponge et sortez
votre soudure.
Avant de commencer souder, notez que ce sont les broches de donnes de la carte
qui sont les plus sensibles la chaleur, et quelles peuvent tre endommages si la
temprature est trop leve. Je vous recommande paradoxalement une bonne
temprature de fer afin de faire fondre la soudure trs vite. Cela implique que la
soudure fonde autour de la jonction avant quelle ne scoule le long de la puce, ayant
ainsi le temps de refroidir. Si vous ntes pas laise avec ces techniques de soudure,
entranez-vous dans un premier temps sur un morceau de plaque de circuit imprim et
sur quelques broches.
Comme les barrettes de broches 3 x 4 sont les plus difficiles, il vaut mieux
commencer avec elles. Lobjectif est datteindre la couche de plastique de la carte.
Vous pouvez y arriver soit en plaquant un morceau dadhsif sur le composant et la
carte, soit en utilisant une pince de type troisime main. Personnellement, je trouve
que les troisimes mains sont utiles pour maintenir les cartes, mais quelles gnrent
plus de problmes quelles nen rsolvent lorsquil sagit de maintenir des
composants.
Elles peuvent galement endommager les circuits dlicats, aussi maintenez ces
derniers bonne distance de leurs dents. Utilisez plutt du Blue Tack pour maintenir
le composant jusqu la ralisation des points de soudure. Vous devez ensuite
disposer la barrette de broches. Je recommande de connecter en premier GND et V+
car elles peuvent supporter plus de chaleur que les lignes de donnes. Lorsque vous
soudez les connecteurs lintrieur de la barrette 3 x 4, il peut tre difficile de
maintenir le fer en position. Essayez de maintenir votre fer sur un coin et de souder de
gauche droite si vous tes droitier. Cela vitera de travailler au-dessus des soudures
dj ralises et diminuera les chances de crer une connexion avec ces dernires. En
cas dincident, utilisez une pompe souder pour supprimer lexcdent.
Une fois les soudures de la barrette 3 x 4 ralises, soudez les barrettes de chaque
extrmit ; cela devrait tre beaucoup plus simple, dautant que votre technique
samliore.
Enfin, connectez le bornier vis. Vous noterez que les broches et les trous sont bien
plus larges que ceux des barrettes, car ici les broches sont destines fournir le
courant ncessaire pour tous les moteurs connects. Si une connexion est trop petite,
elle chauffe et fond, il est donc important de toujours disposer de fils conus pour des
courants suprieurs ceux que vous utilisez. Cependant, en raison de cette connexion
plus large, vous noterez que le bornier vis met plus longtemps atteindre la
temprature ncessaire pour faire fondre la soudure. Attention, si vous attendez trop
longtemps, la partie en plastique pourrait fondre.
Cest tout simple, nest-ce pas ? Vous savez prsent mettre en place une carte I2C
PWM/Servo Drive prte lemploi. Vrifiez bien vos connexions pour viter tout
risque de court-circuit. Utilisez la mesure de conductivit de votre multimtre lorsque
votre carte nest pas alimente pour vrifier les connexions dont vous ntes pas sr.
Les lignes V+ et GND de vos servos doivent tre relies sur deux ranges car elles
reoivent leur alimentation de la mme source. Pour linstant, ne soudez pas le
cavalier dadressage, car nous commenons avec la premire carte qui porte le
numro 0.

Utiliser lI2C PWM/Servo Driver


Maintenant que vous avez appris assembler lI2C PWM/Servo Driver, voyons
comment lutiliser. Lexemple de cette section vous montre comment envoyer un signal
vers la carte pour contrler plusieurs servos. Vous pouvez tester cette fonctionnalit
avec un seul servo, mais une fois que vous laurez vu luvre, vous voudrez
certainement en commander dautres. Pour ce projet, en plus de la carte I2C, il vous
faut :
Un Arduino Uno

Un servomoteur

Une alimentation externe

Un tournevis de prcision

Des straps

La carte fille dispose dune barrette de broches connecter, mais ces broches ne
peuvent pas tre directement branches sur lArduino. Il faut utiliser des straps avec
des prises dun ct et des broches de lautre (femelle et mle) telles quillustr la
Figure 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).
Si vous tes un vrai pro, vous pouvez raliser vos propres cbles en utilisant des fils
prtorsads et des prises que vous pouvez trouver chez Technobots
(http://www.technobotsonline.com/cable-and-
accessories/cable/pre-crimped-wires.html et
http://www.technobotsonline.com/connectors-and-
headers/cable-assembly-hou-sings.html) ou encore chez Pololu
(http://www.pololu.com/cata-log/category/71 et
http://www.pololu.com/catalog/category/70). Vous obtiendrez ainsi
des fils avec des connecteurs chaque extrmit qui auront un aspect super
professionnel, si vous les regroupez avec une gaine spirale comme celle disponible
chez RS Components (http://uk.rs-online.com/mobile/p/cable-
spiral-wrapping/6826842/).

FIGURE 15-3 Des straps avec prise.

ALIMENTATION BENCH-TOP

Une alimentation datelier (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 connatre la consommation de votre
circuit. Rendez-vous sur les sites des revendeurs de composants lectroniques.
Notez que les modles dentre de gamme naffichent pas le courant
consomm par votre circuit. Si vous optez pour une alimentation de ce type, il
vous suffit de connecter deux fils sur les bornes positive et ngative et de les
relier aux bornes ngative et positive du bornier vis de la carte alimenter.
Prenez toujours la prcaution damener le bouton de rglage de tension au
minimum avant dallumer. Il peut arriver que le dernier voltage utilis soit rgl
trop haut et quil endommage votre circuit lorsque vous le remettez sous
tension.

Vrifiez que la tension et lintensit de lalimentation correspondent bien au nombre


de servos que vous utilisez. Certains petits servos utilisent le 5 V, mais il en existe
toute une varit qui utilise plutt du 12 V. Pour alimenter ces servos, vous disposez
de deux options : une alimentation Bench Top pour connecter rapidement votre carte
ou une alimentation externe modifie comme celle utilise par les chargeurs de
tlphones mobiles ou les ordinateurs. Reportez-vous aux encadrs Alimentation
Bench-top et Alimentations externes de ce chapitre pour plus dinformations.

ALIMENTATIONS EXTERNES ET ADAPTATEURS SECTEUR

Lorsque vous recherchez une alimentation lectrique externe (voir la figure ci-
dessous), nachetez que celles qui sont rglementaires. Comme les appareils
non rglements ne dlivrent pas une tension prcise, ils sont moins chers
mais aussi bien moins fiables. Regardez sur la bote des appareils pour voir
ceux qui sont conformes. Ces appareils peuvent dlivrer une seule tension ou
plusieurs selon le modle, en gnral 3, 4, 5, 6, 9 et 12 V. Certains offrent un
rglage de lintensit, permettant une intensit plus importante pour les
basses tensions. Lalimentation de la socit anglaise Maplin, 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, cher mais qui dlivre toute une gamme de tension trs utile (5, 6, 9,
12, 13,5 et 15 V) et fournit une intensit maximum allant jusqu 4 A, ce qui est
plus que suffisant pour la plupart des applications. Vous pouvez trouver des
alimentations similaires comme lEnercell Universal 1000 mA AC Adapter
(http://www.radioshack.com/product/index.jsp?
productId=3875403). Ces appareils sont gnralement fournis avec une
varit de connecteurs standard et notamment la prise dalimentation 2,1 mm
de lArduino, ce qui est trs utile pour les petits courants (jusqua 500 mA) car il
peut tre branch sur votre Arduino afin de permettre dalimenter des
composants depuis la broche Vin. Cependant, bon nombre de servos
ncessitent un courant plus important, pouvant dpasser les 1 A. Nessayez
pas de les alimenter depuis votre Arduino.

Dnudez plutt les bouts des fils afin quils puissent tre directement
connects au bornier vis de votre carte grant les servos ou un domino.
Vrifiez dabord que lalimentation est dbranche. Coupez environ 10 cm de fil
partir de la base du connecteur (de cette faon, vous pourrez toujours le
reconnecter). Le fil de lalimentation est probablement bi-axial (deux fils
multibrins cte cte) ou coaxial (un fil multibrin au centre et un autre autour).

Le bi-axial est facile dnuder en utilisant une pince dnuder et peut alors
tre tam avec un peu de soudure. Le positif est gnralement repr dun
symbole discret, comme des traits blancs ou des points rouges, mais ce nest
pas toujours le cas, noubliez donc pas de tester avec un multimtre.

Il est un peu plus difficile de travailler avec le coaxial. En effet, si vous enlevez la
couche externe isolant le fil avec une pince dnuder, vous rvlez une tresse
de fils. Ces derniers peuvent tre retortills et renvoys dun ct pour rvler
le fil central. Vous pouvez alors dnuder le fil central tout en laissant
suffisamment disolation de sorte que les deux fils ne se touchent pas. Vous
pouvez ensuite souder ces deux fils de manire maintenir les brins ensemble
puis les connecter au bornier vis. La masse est normalement relie au
maillage extrieur du fil, mais ce nest pas toujours le cas, il faut donc le tester
avec un multimtre. Lorsque vous tamez, veillez ne pas faire fondre lisolant
autour du noyau central, car cela pourrait crer un court-circuit.
Pour tester la polarit de votre alimentation, fixez ces extrmits votre
surface de travail de sorte quelles ne puissent pas se toucher ; un ruban
isolant dlectricien accomplira cette tche parfaitement. Branchez ensuite
votre alimentation et rglez le multimtre pour obtenir du courant continu,
puis placez les sondes lextrmit de chaque fil.

Les sondes sont gnralement rouges et noires. Si vous lisez une tension
ngative, cest que vous lisez lalimentation dans le mauvais sens inversez
alors vos sondes. Dbranchez lalimentation jusqu ce que chaque fil soit fix
au bornier vis.

Vrifiez toujours la tension de votre alimentation externe avec un multimtre


avant de lutiliser pour alimenter votre projet (comme indiqu dans le
Chapitre 5). Il est facile doublier la tension fournie par votre alimentation. Si
vous rutilisez une ancienne alimentation, vrifiez quelle est toujours capable
de dlivrer les tensions indiques.

Si vous avez une alimentation externe ou une alimentation datelier capable


dafficher des valeurs, reliez votre multimtre en srie soit avec la puissance
soit avec la masse afin dobtenir une valuation du courant consomm. Pour
cela, une fois que vous tes sr de vos fils positifs et ngatifs, mettez lappareil
hors tension et attachez-les fils au bornier vis laide dun tournevis
miniature. La polarit est indique sur le dessus de la carte, vrifiez bien que le
+5 V et GND sont dans le bon sens.

moteurs. Pour cela, connectez lalimentation aux bornes positives et ngatives en


utilisant un tournevis de prcision.
Une fois le circuit ralis, vous aurez besoin dun logiciel adquat pour le faire
fonctionner. Pour le rcuprer, suivez ces tapes :

1. Tlchargez Adafruit PWM/Servo Driver Library depuis le site


Github (https://github.com/adafruit/Ada-fruit-PWM-
Servo-Driver-Library).

2. Depuis la page du projet, tlchargez le fichier .zip et


dcompressez-le pour obtenir le dossier de la bibliothque.
3. Renommez le dossier sous le nom Adafruit_PWMServo-Driver
et placez-le dans votre dossier de bibliothques situ dans
votre dossier de croquis Arduino.

FIGURE 15-4 Schma de cblage de la carte PWM Driver.

FIGURE 15-5 Schma de principe de la carte PWM Driver.


4. Relancez votre Arduino et cliquez sur Fichier->Exemples pour
retrouver le croquis Adafruit_ PWMServoDriver.
Voici le code source de ce croquis :

/***************************************************
Exemple pour Adafruit 16-channel PWM & Servo driver
Test Servo - pilote 16 servos, lun aprs lautre

Choisissez un modle dans la boutique dAdafruit!


------> http://www.adafruit.com/products/815

Utilise I2C avec 2 broches pour lInterface.


Pour Arduino UNO ancien, SCL -> Analog 5, SDA ->
Analog 4

crit par Limor Fried/Ladyada pour Adafruit


Industries.
BSD license, all text above must be included in any
re-
distribution
****************************************************/

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// Utilise ladresse par dfaut 0x40
Adafruit_PWMServoDriver pwm =
Adafruit_PWMServoDriver();

// Vous pouvez utiliser une autre adresse si vous


voulez
// Adafruit_PWMServoDriver pwm =
Adafruit_PWMServoDriv-
er(0x41);

// Selon le servo, la taille min et max de


limpulsion
varie
// quelle soit aussi petite/grande que possible
// Modifiez si ncessaire selon les servos
que vous
avez!
#define SERVOMIN 150 // Longueur dimpulsion
minimale (sur
4096)
#define SERVOMAX 600 // Longueur dimpulsion
maximale (sur
4096)

// Numro du servo
uint8_t servonum = 0;

void setup() {
Serial.begin(9600);
Serial.println(16 channel Servo test!);
pwm.begin();
pwm.setPWMFreq(60); // servos analog sexcute
~60
Hz
}

// Utilisez cette fonction si vous aimez une


impulsion
longue en secondes
// setServoPulse(0, 0.001) donne une largeur
dimpulsion
de ~1 milliseconde.
void setServoPulse(uint8_t n, double pulse) {

double pulselength;
pulselength = 1000000; // 1,000,000 de microsec
par
seconde
pulselength /= 60; // 60 Hz
Serial.print(pulselength); Serial.println( us per
pe-
riod);
pulselength /= 4096; // 12 bits of resolution
Serial.print(pulselength); Serial.println( us per
bit);
pulse *= 1000;
pulse /= pulselength;
Serial.println(pulse);
pwm.setPWM(n, 0, pulse);
}

void loop() {
// Pilote chaque servo un aprs lautre
Serial.println(servonum);
for (uint16_t pulselen = SERVOMIN; pulselen <
SERVOMAX;
pulselen++) {
pwm.setPWM(servonum, 0, pulselen);
}
delay(500);

for (uint16_t pulselen = SERVOMAX; pulselen >


SERVOMIN;
pulselen--) {
pwm.setPWM(servonum, 0, pulselen);
}
delay(500);
servonum ++;

if (servonum > 15)


servonum = 0;
}
Tlversez le croquis et branchez votre alimentation. Le servo tourne jusqu sa
valeur maximale en degrs, puis revient en position 0. Observez la consommation du
circuit.
Si vous navez pas atteint les capacits maximales de votre alimentation, vous pouvez
ajouter plus de servos sur la carte. Si vous souhaitez visualiser la progression du
programme, ouvrez le Moniteur Srie pour voir le moteur correspondant aux
sorties 0 15.
Si vous ne voyez aucun mouvement ou constatez un comportement trange, revrifiez
vos cblages :
Assurez-vous de bien utiliser un numro de broche correct.

Si vos servos ont des mouvements saccads, cest sans doute quils
ne reoivent pas assez de courant. Relevez la consommation
correspondant un pic et comparez-la avec la capacit de votre
alimentation.

Si vous entendez des sons de frottement dsagrables provenant


de vos servos, dbranchez-les immdiatement ; vous allez sans
doute devoir ajuster les valeurs SERVOMAX et SERVOMIN. Reportez-
vous pour cela la section suivante.

Comprendre le croquis I2C PWM/Servo


Driver
Deux bibliothques sont incluses avant setup(). Elles sont indisepnsables pour
utiliser ce matriel. Wire.h se charge des changes entre I2C et la carte ;
Adafruit_PWMServoDriver.h ralise des fonctions plus spcifiques.

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Un nouvel objet nomm pwm est dclar via une fonction particulire fournie par
Adafruit_PWMServoDriver.h. Elle dfinit ladresse de la carte qui par dfaut
vaut 0x40. Cette valeur dfinit ladresse de base, aussi si vous souhaitez accder la
carte 1, vous indiquerez 0x41.

// Utilise ladresse par dfaut 0x40


Adafruit_PWMServoDriver pwm =
Adafruit_PWMServoDriver();

// Vous pouvez utiliser une autre adresse si vous


voulez
//Adafruit_PWMServoDriver pwm =
Adafruit_PWMServoDriv-
er(0x41);

Les deux instructions suivantes utilisent #define pour dfinir la longueur


dimpulsion maximum et minimum ; cette valeur dfinit langle de rotation en degrs
des servos ; ainsi si vous pensez que vos servos tournent trop ou pas assez, vous
pouvez ajuster cette valeur pour affiner leurs comportements.

// Selon le servo, la taille min et max de


limpulsion
// varie, quelle soit aussi petite/grande que
possible
// Modifiez si ncessaire selon les servos que vous
avez!
#define SERVOMIN 150
#define SERVOMAX 600

Le terme uint8_t est un type de donne C qui correspond une valeur non signe
sur 8 bits. Non signe signifie quelle nutilise que des valeurs positives, et 8 bits
signifie que ces valeurs sont comprises en 0 et 255. Dans notre cas, nous utilisons ce
terme pour dclarer servonum, la variable qui contient le servo courant. Dans
Arduino, un entier int standard est cod sur deux octets (de -32 768 +32 767). Il
est aussi appel int16_t. Vous pouvez en savoir davantage sur les int ladresse
suivante : http://arduino.cc/en/Reference/Int.

// Numro du servo
uint8_t servonum = 0;

Dans setup(), le port srie est ouvert avec une vitesse de transfert de 9600 bauds et
le message douverture 16 channel Servo test ! est envoy pour marquer le dbut
du programme. Lobjet pwm (la carte 0) est initialis via pwm.begin() et la
frquence du servo est dfinie 60 Hz.
void setup() {
Serial.begin(9600);
Serial.println(16 channel Servo test!);
pwm.begin();
pwm.setPWMFreq(60); // ENviron ~60 Hz

Vient ensuite la fonction setServoPulse() qui dfinit la dure en secondes au


lieu de le faire en hertz. Cependant cette fonction nest pas utilise ici.

// Utilisez cette fonction si vous aimez une


impulsion
longue en secondes
void setServoPulse(uint8_t n, double pulse) {
double pulselength;
pulselength = 1000000; // 1,000,000 microsec par
sec-
onde
pulselength /= 60; // 60 Hz
Serial.print(pulselength);
Serial.println( us per period);
pulselength /= 4096; // 12 bits de rsolution
Serial.print(pulselength);
Serial.println( us per bit);
pulse *= 1000;
pulse /= pulselength;
Serial.println(pulse);
pwm.setPWM(n, 0, pulse);
}

Dans loop(), le numro du servo courant est affich par le Moniteur srie.

void loop() {
// Pilote chaque servo un aprs lautre
Serial.println(servonum);

prsent, il est temps de faire tourner le servo. Une boucle for est utilise pour
dplacer le servo actuel de sa valeur minimale sa valeur maximale. Lorsque le
servo atteint la valeur maximum (SERVOMAX), il attend une demi-seconde, puis une
autre boucle for repasse cette valeur son minimum (SERVOMIN). Ce minimum
atteint, un nouveau dlai dune demi-seconde est appliqu. La boucle for
incrmente limpulsion dune valeur la fois afin dobtenir un mouvement fluide.
Notez que uint16_t est employ pour dclarer la variable locale pulselen, ce
qui revient utiliser un int non sign standard. Vous trouverez plus dinformations
sur les valeurs int ladresse :
http://arduino.cc/en/Reference/UnsignedInt.

for (uint16_t pulselen = SERVOMIN; pulselen <


SERVOMAX;
pulselen++) {
pwm.setPWM(servonum, 0, pulselen);
}
delay(500);

for (uint16_t pulselen = SERVOMAX; pulselen >


SERVOMIN;
pulselen--) {
pwm.setPWM(servonum, 0, pulselen);
}
delay(500);
servonum ++;

Ds quun servo a termin son mouvement, servonum est incrment de un. Si


servonum dpasse 15, il repasse zro car il a atteint le dernier servo.

Il y a galement ici une autre spcificit du langage C, une instruction if peut tre
crite sur une seule ligne sans avoir recourt aux accolades ({ }) sil ny a quune
instruction.

if (servonum > 15) servonum = 0;


}

Cest un trs bon croquis pour tester la communication avec la carte tout en contrlant
vos servos comme vous le souhaitez en utilisant
pwm.SetPWM(servonum,0,pulselen). Cependant, comme la plupart des
bibliothques, celle-ci est en constante volution, et vous aurez peut-tre des
questions qui ne trouvent pas de rponse. Le forum Adafruit est le meilleur endroit
pour poser vos questions sur cette carte et sur la bibliothque. Vous y trouverez des
sujets similaires aux vtres ainsi que de nombreuses personnes qui essaieront de vous
aider. Rendez-vous sur http://forums. adafruit.com et lisez la section
Other Arduino products.

Acheter vos servomoteurs


Vous disposez prsent dun moyen de contrler un grand nombre de servos, il vous
reste maintenant savoir o les acheter et quels sont les critres surveiller. Il existe
un grand nombre de sites qui vendent des servomoteurs en ligne, une requte rapide
sur Google vous donnera un bon nombre doptions. Les deux domaines qui utilisent le
plus les servomoteurs sont la robotique et laromodlisme. Les boutiques et les sites
qui fournissent ce type de produits proposent gnralement toute une gamme de
servos.
La force de vos servos est appele couple ou moment de torsion. Elle est
gnralement mesure en kilogrammes par centimtre (kg/cm) ou en livres par pouce
(lb/in). Le couple dun servo peut aller de 0,2 kg/cm pour un minuscule moteur destin
actionner les gouvernes dun avion un norme 10 kg/cm pour hisser les voiles dun
bateau. Juste pour comparaison, le couple cr par les mains dun homme adulte est
approximativement de 8 kg (source : NASAs human performance charts, disponible
sur la page http://msis.jsc.nasa.gov/ sections/section04.htm).
videmment, le couple dpend de la force du moteur et de la qualit de ses
composants. La plupart des servomoteurs utilisent de 4 12 V et couvrent la plupart
des besoins. Leurs principales diffrences rsident dans la quantit de courant
ncessaire lorsque le servo travaille, cest--dire est en charge . Lorsque le servo
est en charge, il consomme beaucoup plus de courant qu vide. Mieux vaut donc
tester les moteurs individuellement avec un multimtre connect la ligne
dalimentation et mesurer leurs consommations (comme dcrit au Chapitre 5).
Prvoyez une marge raisonnable. Il est bon de noter quune alimentation lectrique ne
dlivre que de 70 80 % de son intensit thorique, ce qui signifie quune
alimentation de 1 A ne dlivrera en ralit que 700 800 mA. Bien quil soit possible
den tirer 1 A, elle risquerait dans ce cas de se dtriorer rapidement.
La puissance ne fait pas le prix avec les servos. Vous verrez quune grande varit de
petits moteurs ont des prix levs. Cela provient de la difficult de fabrication. La
qualit des composants de ces mini-servos entrane de grandes diffrences dans le
prix et les performances. La plupart des servos sont destins des charges
relativement faibles et utilisent des engrenages en nylon. Le nylon convient bien car il
nexerce pratiquement aucun frottement sur les autres lments en nylon, et ce mme
aprs des milliers dutilisations. Le nylon est autolubrifiant et ne requiert donc pas de
graisse additionnelle. Cependant les servos plus importants ont des engrenages en
mtal qui sont capables de supporter des charges plus importantes, car ils ne sont plus
rigides que le nylon et prsentent moins de risque de se casser en cas De surcharge.
Selon la faon dont ils sont contrls, les servos peuvent tre analogiques ou
numriques. Les deux types de servos ont les mmes composants et trois fils de
connexion. Cependant, les servos numriques disposent dun microprocesseur capable
danalyser le signal quils reoivent et transmettent des impulsions aux moteurs
beaucoup plus rapidement que les servos traditionnels lectronique analogique.
Avec plus de signaux par seconde, ce type de servo a un temps de rponse plus court.
Cependant, comme chaque impulsion consomme du courant, les servos numriques
consomment plus, mais leur couple plus important leur permet de supporter des
charges plus lourdes. Le mauvais ct de ce type de servo rside donc dans la
consommation et le prix dachat.
Pour vous faire une ide, commencez vos recherches sur le site
www.servodatabase.com qui propose un comparatif prix/performances
intressant, ainsi que des informations sur les modles les plus populaires.
Si vous recherchez un servo basique abordable un peu plus gros que les servos
proposs dans la plupart des kits, regardez du ct du servo daromodlisme Futaba
S3003 que vous pourrez vous procurer sans souci.

Autres utilisations de I2C


Les servomoteurs ne sont pas les seuls objets que vous pouvez contrler via I2C.
Dautres produits sont prts tre raccords votre Arduino pour vous aider
raliser une installation. Un de ces produits est le Addressable LED Ribbon
(https://www.sparkfun.com/products/11272) visible la Figure 15-6. Ce ruban de
LED flexible permet de recouvrir une surface avec des LED. Le ruban lui-mme est
compos dune sorte de circuit imprim flexible recouvert de LED, de rsistances et
de contacts. Ce genre de ruban est propos un prix raisonnable. Vous en avez peut-
tre dj vu dans des lieux avec un clairage dambiance le long des murs.

FIGURE 15-6 Un ruban de LED adressables.


Comme avec les LED individuelles, certains modles ne disposent que dune couleur,
dautres vous permettent de rgler la valeur des compoosantes RGB pour obtenir la
couleur de votre choix. La plupart des rubans de LED nutilisent quun seul circuit et
ne permettent que de changer la couleur ou la luminosit pour toutes les LED la fois.
Cependant, les rubans de LED adressables offrent un contrle individuel de chaque
LED, ce qui permet de crer des animations vraiment trs intressantes.
Il existe de nombreux et trs bon tutoriaux qui vous aideront intgrer des rubans de
LED adressables dans vos projets. Visitez les pages produits de SparkFun
(https://www.sparkfun.com/products/11272) et dAdafruit
(http://learn.adafruit.com/digitalled-strip) pour voir cela plus
en dtail.
V
Arduino et les logiciels

DANS CETTE PARTIE

ce stade de votre lecture, vous savez cbler, souder, charger


du code, bref, vous savez faire tout ce qui relve de la physique
dans le monde rel. Mais avez-vous pens au virtuel ? Savez-
vous quil est possible de combiner vos connaissances de
llectronique avec une puissante application sur votre
ordinateur pour crer de superbes effets visuels interactifs ou
pour utiliser les donnes de votre ordinateur ou de lInternet
pour crer de la lumire, des sons ou des mouvements dans le
monde rel ?
Chapitre 16
Dcouvrir Processing
DANS CE CHAPITRE
Dcouvrir Processing

Dessiner des formes de diffrentes couleurs et tailles

D
ans les chapitres prcdents, tout ce que vous avez appris concernait lArduino
comme appareil autonome. Un programme est tlvers puis lArduino lexcute
jusqu ce quon lui dise darrter ou jusqu ce quon lteigne. On apprcie
lArduino pour sa simplicit et sa clart. Tant quil ny a pas dinterfrences
extrieures ou derreurs dans le code, et si les composants ont une bonne longvit,
Arduino remplira sa fonction de faon fiable. Cette simplicit est extrmement utile et
permet dutiliser lArduino non seulement comme plateforme de prototypage, mais
aussi comme un outil sr pour des produits et des installations interactifs comme cest
dj le cas depuis quelques annes dans de nombreux muses.
Mme si cette simplicit est trs apprciable, de nombreuses applications dpassent
le cadre des capacits dun Arduino. Lune dentre elles (du moins jusqu prsent)
est lexcution dun logiciel complexe. Bien que lArduino soit la base un
ordinateur, ses capacits dexcution sont bien loin dtre aussi dveloppes et
complexes que celles de votre ordinateur de bureau ou portable. On peut y installer
des logiciels trs spcialiss. Vous pourriez largement en bnficier si seulement vous
pouviez relier ce genre de logiciel au monde rel en pilotant lArduino.
Comme lArduino peut se connecter votre ordinateur par le port srie, il peut tre
exploit par un programme de la mme manire que votre ordinateur communique
avec une imprimante, un scanner, ou un appareil photo. En combinant les capacits
dinteraction avec le monde physique de lArduino et les capacits logicielles de
traitement de donnes de lordinateur, il devient possible de crer des projets trs
divers exploitant les entres et les sorties.
Bon nombre de programmes sont conus pour effectuer des tches spcifiques. Tant
que vous navez pas dtermin ce que vous voulez fire, il vaut mieux utiliser un
logiciel gnrique. Processing est un bon point de dpart.
Dans ce chapitre, vous allez faire la connaissance de Processing, le projet jumeau qui
sest dvelopp en mme temps que celui dArduino. Processing est un environnement
logiciel (un atelier) qui, de la mme manire que celui de lArduino, sert tester des
circuits capables dexcuter des croquis. Cest un logiciel libre assez puissant et
grce ses similarits avec lArduino, il est trs facile matriser.

Processing, cest quoi ?


Puisque lArduino sait communiquer par son port srie, nimporte quel programme
qui sait le faire aussi peut travailler avec. Parmi les nombreux programmes
disponibles, Processing est le plus connu.
Processing est un atelier de cration de programmes. Il est accopagn dune vaste
gamme dapplications qui vont de la visualisation de donnes la cration duvres
interactives en passant par la capture de mouvements avec une camra numrique.
Vous pouvez voir quelques exemples dapplications ladresse
http://processing.org/exhibition/.
Processing est aussi un langage bas sur Java qui ressemble fortement au C (sur lequel
est bas le code de lArduino) et au C++ . Il est disponible pour Windows, Mac OS et
Linux. Ben Fry et Casey Reas ont dvelopp Processing pour permettre aux artistes,
designers et autres de tester du code afin que ce ne soit pas uniquement la chasse
garde des dveloppeurs et des ingnieurs. Tout comme les ides sont souvent
couches sur papier, Processing est conu pour faire le croquis dun logiciel ; les
programmes peuvent tre rdigs et modifis sans avoir y passer trop de temps.
Processing est un environnement de dveloppement intgr (IDE) en mode texte tout
comme celui de lArduino (en ralit, ce dernier a t emprunt par lquipe
dArduino lors dune phase de dveloppement de Processing). Une fentre (voir la
Figure 16-1) affiche lapplette Java que gnre le code. Comme Arduino, la force de
Processing est sa communaut importante qui partage et commente les croquis, et
permet aux participants de bnficier de diverses applications Processing Open
source aussi bien que de modifier le code de Processing. Dans ce chapitre, vous allez
apprendre utiliser Processing, mais pour en savoir plus sur cet environnement,
consultez son site Web officiel ladresse http://processing.org/.
Dautres langages de programmation peuvent sinterfacer avec lArduino. Je prsente
Max/Pure Data et OpenFrameworks dans les deux encadrs de ce chapitre. Pour une
liste complte de ces langages, allez ladresse
http://arduino.cc/playground/Main/In-terfacing.
FIGURE 16-1 Latelier de cration Processing avec le code source dun projet et la fentre
dexcution au premier-plan.

MAX/PURE DATA

Max (connu aussi sous le nom de Max/MSP) est un langage de programmation


graphique aux nombreuses utilisations, mais qui sert surtout aux applications
audio, de synthse de musique et de sons. Il est disponible pour Windows,
Mac OS, Linux et dautres systmes dexploitation plus obscurs.

Contrairement aux langages de programmation traditionnels bass sur du


texte, Max passe par une interface graphique pour connecter des objets
dautres, tout comme les synthtiseurs analogiques peuvent tre patchs
avec des cbles pour connecter les diffrentes fonctions de linstrument. La
socit Cycling 74 a mis jour la version commerciale du logiciel Max
en 1990 en se basant sur le travail de Miller Puckette pour crer un systme de
cration musicale. Bien que le logiciel ne soit pas libre, linterface de
programmation permet aux tiers de crer leurs propres extensions du logiciel
pour des usages spcifiques. Miller Puckette a galement dvelopp une
version libre et gratuite, mais compltement reconue, nomme PureData.
Vous trouverez plus dinformations sur Max et PureData sur les pages de leur
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 dautres liens utiles sur le site dArduino


(http://www.arduino.cc/playground/interfacing/MaxMSP et
http://www.arduino.cc/playground/in-terfacing/MaxMSP).

OPENFRAMEWORKS

openFrameworks est un kit doutils C++ Open source pour crer du code. Il a
t dvelopp par Zachary Lieberman, Tho Watson et Arturo Castro ainsi que
dautres membres de la communaut openFrameworks. openFrameworks
sexcute sous Windows, Mac OS, Linux, iOS et Android. Il nest pas bas sur
Java comme Processing. Cest une bibliothque C++ qui est conue comme
base pour dbuter dans la production dapplications audiovisuelles.
openFrameworks est particulirement puissant pour les images, vous
permettant dutiliser facilement OpenGL pour faire des rendus intenses ou des
applications vido. Contrairement Processing, Max et PureData,
openFrameworks nest pas un langage ; en fait, cest une collection de
bibliothques libres, un framework logiciel ouvert, do son nom.

Comme openFrameworks na pas son propre environnement de


dveloppement intgr, le logiciel utilis pour crire et compiler le code
dpend du systme dexploitation. Cette fonctionnalit reprsente souvent une
difficult pour les dbutants, car il ny a pas datelier IDE associ. Lavantage est
que le C++ est trs polyvalent et peut tre utilis sur la plupart des systmes
dexploitation, y compris ceux des tlphones portables.

Pour en savoir plus et consulter des tutoriaux, rendez-vous sur les sites
http://www.openframeworks.cc/ et
http://www.openframeworks.cc/tuto-
rials/introduction/000_introduction.html. SparkFun propose aussi
un bon tutoriel pour lutiliser avec Arduino sous Windows
http://www.sparkfun.com/tutorials/318.

Installer Processing
Processing est gratuit. Pour le tlcharger, rendez-vous dans la page de
tlchargement http://processing.org/download/ et slectionnez votre
systme dexploitation. Au moment de la rdaction de ce livre, Processing en tait la
version 3,0,2 et tait pris en charge sous Mac OS X, Windows 32 et 64 bits, Linux 32
et 64 bits.
Voici comment installer Processing :
Sous Mac OS : Le fichier .zip se dcompresse automatiquement
et se place dans le dossier ~/Applications/Processing. Vous
pouvez aussi le poser sur votre bureau. Du bureau, vous pouvez le
glisser dans le Dock pour avoir un accs plus facile ou crer un alias
sur le bureau.

Sous Windows : Dcompressez le fichier .zip et placez le dossier


Processing sur le Bureau ou dans un emplacement comme le
dossier Programmes (C : /Program Files/Processing/). Crez
un raccourci vers lexcutable processing. exe et placez-le
lendroit qui vous convient le mieux : le Bureau ou le menu
Dmarrer.

Linterface de Processing
Une fois Processing install, lancez lapplication. Processing souvre avec un croquis
vide (voir Figure 16-2) un peu comme la fentre dArduino. Sa fentre est compose
de cinq zones principales :
une barre doutils avec des boutons ;

des onglets ;

un diteur de texte source ;

une zone de message ;

une console.

Le croquis vide contient aussi la barre de menus de latelier, ce qui donne accs aux
menus droulants des options de lapplication, au chargement des croquis,
limportation des bibliothques et bien dautres fonctions.
FIGURE 16-2 Lapplication Processing est assez similaire, tout en tant diffrente, celle de
lArduino.

Voici un aperu de la barre doutils de Processing :


bouton Run : Excute ou fait tourner le code dans lditeur de texte
comme une applette (petite application) dans une nouvelle fentre.
Les raccourcis clavier sont Ctrl + R pour Windows et Cmd + R pour
Mac OS.

bouton Stop : Arrte lexcution du code et ferme la fentre de


lapplette.

bouton New : Ouvre un nouveau croquis vierge avec pour nom la


date et une lettre pour distinguer les croquis comme
sketch_161230a.
bouton Open : Permet de slectionner des croquis rcents dans
un rpertoire ou le dossier Examples.

bouton Save : Enregistre le croquis. Quand vous lenregistrez,


donnez-lui un nom descriptif la place du nom prdfini.

bouton Export Application : Permet dexporter le croquis


Processing sous une application, ce qui peut tre utile si vous devez
excuter lapplication au dmarrage ou distribuer le code des
personnages qui nont pas Processing.

bouton Mode : Vous permet de changer de mode entre Java


(standard), Android (mobile et tablettes) et JavaScript (applications
en ligne). Pour en savoir plus sur ces modes, consultez les pages
suivantes : http://wiki.processing.org/w/Android et
http://wiki.processing.org/w/JavaScript.

bouton Tabs : Permet de travailler avec plusieurs fichiers ouverts


pour le mme projet Processing. Vous utiliserez les onglets dans les
grands projets pour rpartir les objets du croquis principal ou pour
intgrer des tables de recherche de donnes dans un croquis.

lditeur de texte : Sert saisir et corriger le code source des


croquis. Les mots ou fonctions reconnus sont mis en surbrillance
dans des couleurs appropries. Cet diteur est le mme que celui
de lArduino.

zone de message : Affiche les erreurs, les retours ou des


informations sur la tche en cours. Vous verrez une notification
comme lorsque lenregistrement du croquis est russi, mais plus
souvent, il sagit de messages qui indiquent o sont les erreurs dans
le code.

console : Affiche des informations dtailles sur le croquis. Utilisez


la fonction println() pour faire afficher les valeurs de votre
croquis. Vous verrez aussi des dtails supplmentaires au sujet des
erreurs.
Premiers pas avec Processing
Contrairement Arduino, vous navez pas besoin de kit supplmentaire pour
travailler avec Processing, ce qui le rend trs utile pour apprendre coder : il suffit
de saisir une ou deux lignes de code, de cliquer ensuite sur Run et de voir le rsultat.
Pour linstant, nous navons mme pas besoin de la carte Arduino.
Commencez votre premier croquis comme suit :

1. Appuyez sur Ctrl + N (dans Windows) ou Cmd + N (sur un Mac)


pour ouvrir un nouveau croquis.

2. Cliquez dans lditeur de texte et saisissez cette ligne de code :


ellipse(50,50,20,20) ;

3. Cliquez sur le bouton Run. La fentre de la nouvelle applette


souvre, affichant un cercle blanc au milieu de la zone grise, comme
lillustre la Figure 16-3.

FIGURE 16-3 Un croquis Processing qui dessine une ellipse remarquable.

Flicitations ! Vous venez dcrire votre premier programme Processing !


Cest beau, un cercle. Linstruction demande de dessiner une ellipse, mais vous lui
avez donn les paramtres pour faire un cercle. Le mot ellipse est mis en surbrillance
orange dans lditeur, vous signalant quil a reconnu une de ses fonctions standard.
Voyons sa syntaxe. Les deux premiers nombres sont les coordonnes de lellipse, 50,
50, ici en pixels. Comme la fentre par dfaut est de 100 x 100 pixels, les
coordonnes de 50, 50 placent lellipse au centre. Les valeurs 20, 20 indiquent la
largeur et la hauteur de lellipse, formant ainsi un cercle qui est une ellipse
particulire.
Voici la syntaxe gnrique de cette fonction :

ellipse(x,y,width,height)

Les coordonnes de lellipse (ou de toute autre forme ou point, peu importe) sont
dfinies avec x et y pour dsigner un point dans un espace en deux dimensions (2D),
qui est ici exprim en pixels dcran. La position horizontale correspond la
coordonne x et la position verticale y. (Vous verrez plus tard que la profondeur
dans un espace 3D se rfre z.) Ajoutez maintenant la ligne de code qui suit, juste
au-dessus de linstruction ellipse() :

size(300,200);

Cliquez sur le bouton Run. Vous obtenez une ellipse dans le coin suprieur gauche de
la fentre, comme illustr la Figure 16-4. La fonction size() permet de dfinir la
taille de la fentre de lapplication en pixels, ce qui fait ici 300 pixels de large et
200 pixels de haut. Si votre cran est diffrent de la Figure 16-4, vous avez sans doute
plac les instructions dans le mauvais ordre. Les lignes de code sont lues dans
lordre, aussi si le code de lellipse vient en premier, lellipse occupera entirement
la fentre vierge. Et avec une fentre daffichage rectangulaire, vous constaterez que
les coordonnes sont en haut gauche.

FIGURE 16-4 Une fentre daffichage plus grande.

Les coordonnes sont mesures sur une grille invisible avec un point au centre 0,
0 pour un espace 2D (ou 0, 0, 0 pour un espace 3D), qui est la rfrence de lorigine
dans le systme de cordonnes cartsien que vous avez appris lcole. Les nombres
peuvent tre aussi bien positifs que ngatifs, tout dpend du ct o ils se placent par
rapport lorigine. Sur lcran de lordinateur, lorigine est en haut gauche parce
que les pixels se dessinent depuis le coin suprieur gauche vers le coin infrieur droit,
une ligne la suite de lautre (voir la Figure 16-5). Ce qui veut dire que notre
instruction size (300, 200) affiche une fentre de 300 pixels en largeur
sur 200 pixels de hauteur.

FIGURE 16-5 La grille daffichage sur un cran.

Dessiner dautres formes


Pour voir quelles formes vous pouvez dessiner, voici les fonctions les plus basiques :

point ()
Un seul point est la forme la plus basique et est trs utile pour construire des formes
plus complexes. Saisissez le code ci-dessous et cliquez sur le bouton Run. Regardez
de trs prs, vous verrez un seul pixel noir au centre de la fentre daffichage (voir
Figure 16-6). Cest le point que le code a trac :

size(300,200);
point(150,100);
FIGURE 16-6 En regardant de prs on voit le point.

Voici la syntaxe gnrique de cette fonction :

point(x,y);

line()
Une ligne est la connexion de deux points, ce que lon fait en dfinissant les points de
dbut et de fin. Saisissez le code qui suit pour gnrer un segment similaire celui de
la Figure 16-7.

FIGURE 16-7 Une ligne trace entre deux points.

size(300,200);
line(50,50,250,150);
Voici la syntaxe gnrique de cette fonction :

line(x1,y1,x2,y2);

rect()
Vous pouvez dessiner un rectangle de diffrentes manires. Dans le premier exemple,
le rectangle est dessin en identifiant un point de dpart, puis la largeur et la hauteur
du rectangle. Saisissez le code qui suit pour tracer un rectangle au centre de la fentre
daffichage :

size(300,200);
rect(150,100,50,50);

Dans cet exemple, le rectangle commence au point 150, 100 au centre de la fentre.
Cette fonction est particulirement utile si vous voulez que la taille du rectangle reste
constante, mais que sa position change.
Voici la syntaxe gnrique de cette fonction :

rect(x, y, largeur, hauteur);

Vous avez le choix entre diffrents modes : CENTER, CORNER, CORNERS et


RADIUS. Essayez-les ! (voir la Figure 16-8).

FIGURE 16-8 Une slection de rectangles diffremment tracs.

Si le mode est dfini au centre par CENTER, le rectangle est centre par rapport
cette origine. Saisissez le code ci-dessous pour voir le rsultat.
rectMode(CENTER);
size(300,200);
rect(150,100,50,50);

Le rectangle est centr dans la fentre daffichage. La forme stend de manire gale
du centre du point de gauche droite et de haut en bas.
Voici la syntaxe gnrique de cette fonction :

rect(x,y,width,height);

Vous pouvez galement afficher un rectangle en dclarant deux coins opposs en


diagonale. Saisissez le code ci-dessous, cette fois avec rectMode spcifiant
CORNERS :

rectMode(CORNERS);
size(300,200);
rect(150,100,50,50);

Le rectangle est commence au centre en 150, 100, mais se termine au point 50, 50,
donc en remontant vers langle suprieur gauche.
Voici la syntaxe gnrique de cette fonction :

rect(x1,y1,x2,y2);

ellipse()
Le premier lment trait dans ce chapitre tait lellipse. Recopiez le code ci-dessous
pour tracer une ellipse au centre de la fentre daffichage :

ellipse(150,100,50,30);

Le mode par dfaut est CENTER, contrairement rect() qui utilise CORNERS.
Voici la syntaxe gnrique de cette fonction :

ellipse(x,y,largeur,hauteur);

Comme avec rectMode(), vous pouvez dfinir diffrents modes (voir la


Figure 16-9) pour dessiner des ellipses avec ellipseMode(). Recopiez le code
ci-dessous pour tracer une ellipse partir dun coin et non de son centre :
ellipseMode(CORNERS);
size(300,200);
ellipse(150,100,50,50);

FIGURE 16-9 Une slection dellipses.

Voici la syntaxe gnrique de cette fonction :

ellipse(x,y,width,height);

Contrler la couleur et lopacit


prsent que vous en savez un peu plus sur les formes, vous pouvez les remplir et
contrler leur apparence. La manire la plus simple de le faire est de jouer sur les
couleurs et lopacit. Vous pouvez ainsi voir travers une forme et mlanger ses
couleurs.
Voyons les fonctions principales.

background()
Cette fonction change larrire-plan de votre croquis. Vous pouvez indiquer une valeur
dchelle de gris ou trois valeurs de couleurs.

chelle de gris
Ouvrez un nouveau croquis et saisissez le code qui suit pour changer la couleur grise
par dfaut de la fentre en noir :
background(0);

Passez de 0 255 pour passer au blanc :

background(255);

Toutes les valeurs situes entre 0 (noir) et 255 (blanc) sont des valeurs dchelle de
gris. Cette plage de valeurs part de 0 255 parce quil y a 8 bits de donnes dans un
octet (voir chapitre 14), ce qui signifie que vous avez besoin dun octet pour stocker
une valeur de couleur dchelle de gris.
Couleur
Pour mettre un peu de vie, ajoutez de la couleur dans larrire-plan du croquis. la
place de lchelle de gris sur 8 bits, vous utilisez des couleurs de 24 bits, ce qui
revient indique une valeur pour le rouge sur 8 bits, un autre pour le vert sur 8 bits et
une dernire pour le bleu sur 8 bits. La couleur de larrire-plan est dfinie par ces
trois valeurs.

background(200,100,0);

Cela donne un arrire-plan orange. La teinte orange est compose dune valeur rouge
de 200, dune valeur verte de 100 et dune valeur bleue de 0. Voici la syntaxe
gnrique de cette fonction :

background(rouge, vert, bleu);

fill()
Voulez-vous changer la couleur des formes que vous dessinez ? Utilisez fill pour
dfinir la couleur tout en contrlant lopacit de la forme :
couleur
fill() dfinit la couleur des formes traces aprs son appel. En appelant plusieurs
fois fill(), vous pouvez changer la couleur de diffrentes formes. Recopiez le
code ci-dessous pour tracer trois ellipses de couleurs diffrentes, comme la
Figure 16-10.

background(255);
noStroke();

// Rouge brillant
fill(255,0,0);
ellipse(50,35,40,40);

// Vert brillant
fill(0,255,0);
ellipse(38,55,40,40);

// Bleu brillant
fill(0,0,255);
ellipse(62,55,40,40);

Larrire-plan est repeint en blanc (255) puis la fonction noStroke() supprime


les contours des formes (vous pouvez le commenter pour en voir les effets). Le
premier cercle dessin est rouge. Vous le voyez dans lapplette mais les deux autres
cercles le chevauchent. La valeur rouge est la plus leve (255), la deuxime est celle
du vert et la troisime celle du bleu. Si on dessine une autre forme la fin du code,
elle aura la mme couleur bleue que la dernire valeur dfinie par fill().

FIGURE 16-10 Diffrents cercles en couleur.

Opacit
Vous pouvez aussi contrler lopacit aux couleurs, crant ainsi des formes semi-
transparentes. En fournissant un quatrime paramtre lors de lappel la fonction
fill(), vous dfinissez lopacit entre 0 (compltement transparent) 255 (couleur
solide, par dfaut). Mettez jour le code prcdent en lui ajoutant les valeurs qui
suivent pour donner de la transparence aux cercles :
background(255);
noStroke();

// Rouge brillant
fill(255,0,0,100);
ellipse(50,35,40,40);

// Vert brillant
fill(0,255,0,100);
ellipse(38,55,40,40);

// Bleu brillant
fill(0,0,255,100);
ellipse(62,55,40,40);

Programmer des interactions


Tous ces jolis dessins sont sympathiques, mais terriblement statiques. Nous allons
injecter un peu de vie aux croquis en nous servant de la souris comme une entre. Il
faudra mettre constamment le croquis jour en effectuant des tours de boucle pour
envoyer de nouvelles valeurs. Heureusement, Processing prdfinit une fonction qui
sen charge. Recopiez le code ci-dessous pour crer un croquis interactif :

void setup() {
size(300,200); // Facultatif
}

void draw() {
ellipse(mouseX, mouseY, 20, 20);
}

Ce code trace une forme centre sur les coordonnes du curseur de la souris. Quand
vous dplacez la souris, vous laissez une trane, comme lillustre la Figure 16-11.
Les fonctions mouseX et mouseY sont mises en surbrillance bleue dans lditeur
de texte et prennent les coordonnes du curseur de la souris dans la fentre
daffichage.
FIGURE 16-11 Le programme suit le pointeur de souris la trace.

Ce code ne devrait pas vous tre totalement tranger. la place des fonctions void
setup() et void loop() dArduino, Processing utilise void setup() et
void draw(). Toutes deux fonctionnent exactement de la mme manire :
setup() sexcute une seule fois au dbut du croquis, tandis que draw()
sexcute de faon rpte jusqu ce que vous fermez la fentre de test ou utilisez le
bouton Arrter.
Modifiez lgrement le croquis pour recouvrir les tracs prcdents et ne garde que la
plus rcent Figure 16-12) :

void setup() {
}

void draw() {
background(0);
ellipse(mouseX,mouseY,20,20);
}

Vous pouvez faire bien plus avec Processing, mais continuer de dvelopper dautres
sujets dpasserait le cadre de ce livre. Jespre que ces quelques lments vous
donneront une ide des effets visuels que peut produire le code. Vous trouverez une
quantit dexemples sur le site et dans le logiciel Processing. La meilleure approche
est comme toujours de tester ces exemples, den modifier les valeurs pour voir ce qui
se passe.
FIGURE 16-12 Une seule forme apparat en suivant le curseur de la souris.

Le principal intrt de cette prsentation est de vous prparer associer Processing et


Arduino. Cest le sujet du prochain chapitre.
Chapitre 17
Agir sur le monde rel
DANS CE CHAPITRE
Allumer une vraie lampe par un clic lcran

Reprsenter lcran des changements du monde rel

Grer plusieurs signaux entre lArduino et Processing

D
ans le chapitre prcdent, vous avez appris les bases de Processing, ses
diffrences et ses similitudes avec Arduino. Ce chapitre porte sur la combinaison
des deux outils pour intgrer les mondes virtuels et physiques. Ces quelques
exercices vous apprendront comment envoyer et recevoir des donnes dans Arduino et
dans Processing. Vous pourrez crer vos propres projets en vous en inspirant, par
exemple pour gnrer des animations visuelles partir des informations remontes
par vos capteurs, ou pour allumer une lumire chaque fois que vous tes mentionn sur
Twitter.

Agir sur le rel depuis un bouton virtuel


Dans cet exemple, vous apprenez afficher un bouton lcran avec Processing, et ce
bouton va contrler une vraie LED relie votre Arduino. Cest un excellent croquis
pour apprendre produire des interactions entre les ordinateurs et le monde rel,
ainsi quentre la carte Arduino et latelier Processing.
Il vous faudra :
Un Arduino Uno

Une LED

La configuration est trs simple pour cette introduction Arduino et Processing,


puisquil ne vous faut quune LED.
Comme le montrent les Figures 17-1 et 17-2, insrez la longue patte dans la
broche 13 et la courte dans GND. Si vous navez pas de LED, vous pouvez
simplement observer la LED embarque sur la carte et libelle L .
FIGURE 17-1 Plan de cblage de lArduino avec une LED relie la broche 13.

Mettre en place le code pour Arduino


Une fois que votre circuit est assembl, vous avez besoin du logiciel appropri pour
lutiliser. Dans le menu Arduino, slectionnez Fichier->Exemples-
>04.Communications->PhysicalPixel qui est un nouveau genre de croquis.
En effet, ce croquis contient du code Arduino et du code Processing (et tout la fin, il
y a un bloc de code pour Max/MSP 5 que nous laisserons en commentaires). Le code
qui apparat aprs le code Arduino est pour linstant comment pour quil ne soit pas
pris en compte par le compilateur de latelier Arduino.
Dans les anciennes versions dArduino, les noms des fichiers de croquis se
terminaient par .pde, qui tait et reste lextension de noms de fichiers de Processing.
Cela engendrait de la confusion, si bien que les fichiers Arduino portent dsormais
lextension .ino. Ces extensions distinctes permettent de conserver les fichiers
Arduino et Processing au mme endroit. Si vous tentez douvrir un .pde dans
Arduino, lapplication supposera quil sagit dun vieux croquis Arduino et vous
demandera si vous souhaitez remplacer son extension par .ino.
FIGURE 17-2 Schma de lArduino avec une LED en 13.

/*
PhysicalPixel

Un exemple dutilisation de la carte Arduino pour


rece-
voir des donnes de lordinateur. Dans ce cas, la
carte
Arduino allume une LED quand elle reoit le
caractre H
et lteint quand elle reoit le caractre L.

Les donnes peuvent tre envoyes lArduino via


le
moniteur srie, ou via tout autre programme comme
Pro-
cessing (voir le code plus bas), Flesh (via un proxy
serial), PD ou Max/MSP.
Le circuit:
* LED relie la broche numrique 13 et la masse

Cr en 2006
Par David A. Mellis
Modifi le 30 aot 2011
par Tom Igoe et Scott Fitzgerald

Cet exemple de code est dans le domaine public.

http://www.arduino.cc/en/Tutorial/PhysicalPixel
*/

const int ledPin = 13; // Broche laquelle la LED


est
relie
int incomingByte; // Variable pour les donnes
par-
venant par srie

void setup() {
// Initialise la communication srie
Serial.begin(9600);
// Configure la broche de la LED en sortie
pinMode(ledPin, OUTPUT);
}

void loop() {
// Voir si des donnes srie sont arrives:
if (Serial.available() > 0) {
// Lire loctet le plus ancien dans le tampon
srie:
incomingByte = Serial.read();
// Si cest un H majuscule (ASCII 72), allumer
la
LED:
if (incomingByte == H) {
digitalWrite(ledPin, HIGH);
}
// Si cest un L majuscule (ASCII 76) teindre
la
LED:
if (incomingByte == L) {
digitalWrite(ledPin, LOW);
}
}
}

Vrifiez et tlversez maintenant le croquis.


Une fois que lArduino est ainsi configur pour recevoir un message de Processing, il
reste implanter lautre croquis dans latelier Processing puis le dmarrer pour
envoyer un message sur le mme port srie que celui quutilise votre Arduino.

Mettre en place le code de Processing


Le code se trouve entre les marques de commentaires sur plusieurs lignes (/* et */),
aprs le croquis Arduino. Copiez tout ce code, puis dmarrez latelier Processing et
collez le tout dans un nouveau croquis Processing. Sauvegardez-le avec un nom
appropri, comme PhysicalPixel. Du fait que les extensions de noms de fichiers sont
diffrentes, il ny aura pas de conflit avec lautre fichier.

/* Code Processing pour cet exemple. PhysicalPixel

// Survol de la souris dtect par le port srie

// Dmontre comment envoyer les donnes la carte


Ar-
duino
// pour allumer une lumire par clic dans un carr
// Cr en avril 2003
// Bas sur des exemples de Casey Reas et Hernando
Bar-
ragan
// Modifi le 30 aot 2011 par Tom Igoe
// Cet exemple de code est dans le domaine public.

import processing.serial.*;

float boxX;
float boxY;
int boxSize = 20;
boolean mouseOverBox = false;

Serial port;

void setup() {
size(200, 200);
boxX = width/2.0;
boxY = height/2.0;
rectMode(RADIUS);

// Dresse la liste de tous les ports sries


disponibles
en sortie.
// Vous devrez choisir le port auquel la carte
Arduino
est connecte.
// Le premier port dans la liste est le port #0 et
le
troisime le port #2.
println(Serial.list()); // Facultatif, car peut
crer
une erreur
// Ouvrir le port auquel la carte Arduino est
connecte
(ici, le port #0).
// Sassurer douvrir le port au mme dbit que la
carte
Arduino (9600bps)
// La mention Serial.list()[0] ci-dessous peut tre
rem-
place par
// le nom du port entre guillemets
// comme dans Serial(this, /dev/tty.usbmodem1431,
9600);
port = new Serial(this, Serial.list()[0], 9600);
}

void draw()
{
background(0);

// Tester si le pointeur de souris est dans les


limites
du carr
if (mouseX > boxX-boxSize && mouseX < boxX+boxSize
&&
mouseY > boxY-boxSize && mouseY < boxY+boxSize) {
mouseOverBox = true;
// Dessiner un contour et modifier la couleur du
carr
stroke(255);
fill(153);
// Envoyer un H pour indiquer que la souris
est sur
le carr
port.write(H);
}
else {
// Rafficher le carr dans son tat dorigine
stroke(153);
fill(153);
// Envoyer un L pour teindre la LED
port.write(L);
mouseOverBox = false;
}

// Dessiner le carr
rect(boxX, boxY, boxSize, boxSize);
}

Cliquez sur le bouton Excuter pour lancer le croquis Processing. Une fentre
dapplette doit apparatre avec un fond noir au centre duquel se trouve un carr gris.
Ce carr reprsente votre bouton virtuel (voir Figure 17-3).

FIGURE 17-3 La fentre dapplette Processing affiche un bouton-pixel de commande.

Si vous amenez le pointeur dans ce carr gris, vous pouvez voir que les contours
changent. Si vous jetez un il sur votre carte Arduino, vous verrez que chaque fois
que votre souris passe dans le carr gris, la LED sallume, matrialisant le survol du
carr.
Si votre LED ne sallume pas, revrifiez votre code :
Vrifiez que vous avez laiss la partie Processing en commentaires
dans latelier Arduino.

Vrifiez que le code Processing est dcomment, sauf le bloc final


pour Max/MSP.

Vous ne pouvez pas tlverser vers lArduino tant que le croquis


Processing est en excution et communique avec votre Arduino ;
vous devrez arrter le croquis Processing dabord.

Si le carr ragit, mais pas la LED, cest un problme de port dans la


partie Processing. Lisez la suite pour une solution.

Vrifiez que les pattes de la LED sont dans le bon sens.


Le croquis Processing de PhysicalPixel
Chaque fois que possible, cest une bonne ide de diviser vos projets en plusieurs
lments. Vous utilisez peut-tre plusieurs entres et sorties, mais si vous nen traitez
quune la fois, il sera plus facile de les comprendre et de dtecter les problmes
quelles peuvent poser. Comme le ct Processing correspond lentre, vous devriez
commencer par l.
La structure du croquis Processing ressemble celle du croquis Arduino. Vous
importez des bibliothques et dclarez des variables au dbut du croquis, et spcifiez
quelques valeurs dterminer dans setup(). La fonction draw() rpte ensuite
le processus tant quelle nest pas arrte.
Processing utilise des bibliothques pour ajouter des fonctionnalits comme Arduino.
Dans notre cas, une bibliothque de communication srie est requise pour dialoguer
avec lArduino. Dans Arduino, cette bibliothque serait rfrence en utilisant
#include <nomBibliotheque.h>, mais dans Processing, vous utilisez le
mot-cl import, suivi du nom et du caractre * pour charger tout le contenu de la
bibliothque.

import processing.serial.*;

Un flottant est un nombre dcimal avec des chiffres aprs la virgule (un point en
programmation, pas une virgule), comme 0.5 ou 10.9, et ainsi de suite. Dans notre cas,
deux flottants sont dclars, boxX et boxY. Ce sont les coordonnes pour placer le
carr.

float boxX;
float boxY;

Ensuite, boxSize dfinit la dimension du carr avec un entier. Comme cest un


carr, seule une valeur est requise.

int boxSize = 20;

Un boolen (qui ne peut valoir que vrai ou faux, soit true et false
respectivement) est utilis pour indiquer si la souris est dans le carr. Il est false
au dpart, car lexcution commence toujours dans langle suprieur gauche.

boolean mouseOverBox = false;

La dernire chose que vous devez faire, cest de crer un nouvel objet pour le port
srie. Dautres connexions sries pourraient tre dj utilises sur votre PC, et il est
donc important que chacune soit libelle pour tre utilise au besoin. Dans notre cas,
vous nutilisez quun seul port. Le mot Serial est spcifique la bibliothque serial
pour indiquer que vous souhaitez crer un nouvel objet correspondant un port srie
(une connexion), et le mot port est le nom que vous souhaitez donner lobjet en
question.

Serial port;

Dans setup(), il faut dabord dfinir les dimensions de la fentre daffichage. Ce


sera un carr de 200 pixels de ct.

void setup() {
size(200, 200);

Les variables boxX et boxY sont calcules pour tre proportionnelles largeur et
la hauteur de la fentre daffichage. Elles sont toujours gales la moiti de la largeur
et la moiti de la hauteur, respectivement. Ensuite, rectMode() active le mode
RADIUS. ce qui indique comment les valeurs transmises plus loin rectangle()
doivent tre interprtes. En loccurrence, RADIUS spcifie que les deux premires
valeurs fournissent les coordonnes du centre du carr, tandis que les deux autres
correspondent la moiti de la largeur et de la hauteur, respectivement. De la sorte, le
carr se trouve parfaitement centr.

boxX = width/2.0;
boxY = height/2.0;
rectMode(RADIUS);

Votre ordinateur pouvant disposer de plusieurs connexions sries, nous en affichons la


liste pour localiser celle de votre Arduino.

println(Serial.list());

Le port le plus rcent apparat en haut de la liste la position 0, alors si vous venez
de connecter votre Arduino, cest ce port que vous devriez slectionner. Vous pouvez
ne pas utiliser la fonction Serial.list(), car elle semble rtive sur certaines
machines. Dans ce cas, vous remplacez tout lappel Serial.list() [0] par
le nom exact du port, comme /dev/tty.usbmodem26221 ou COM5, entre guillemets. La
valeur 9600 correspond au dbit en bits par seconde, la vitesse laquelle vous vous
avez rgl les communications avec votre Arduino.
Si le dbit nest pas identique aux deux extrmits (celui qui envoie, celui qui reoit),
les donnes ne sont pas reues.
port = new Serial(this, Serial.list()[0], 9600);
}

Dans draw(), la premire tche est de dessiner un fond noir.

void draw()
{
background(0);

Processing utilise les mmes instructions conditionnelles quArduino. Linstruction


if (sur deux lignes, ici) teste la position de la souris pour savoir si elle se trouve sur
le carr. Si labscisse de la souris mouseX est plus grande que labscisse du centre
du carr diminue de la moiti du ct, et plus petite que labscisse du centre
augmente de la moiti du ct, alors la souris est sur la colonne du carr. Ce test est
combin laide de linstruction ET (&&) un test de mme nature pour dterminer si
la souris se trouve sur la ligne du carr. Ce nest donc que si les deux tests sont
valids que le boolen mouseOverBox prend la valeur true.

// Tester si le curseur de la souris est sur le


carr
if (mouseX > boxX-boxSize && mouseX < boxX+boxSize
&&
mouseY > boxY-boxSize && mouseY < boxY+boxSize) {
mouseOverBox = true;

Pour indiquer que mouseOverBox est true, le code trace un contour blanc autour
du carr. Plutt que de tracer un nouveau carr, il suffit de modifier la couleur du
contour laide de stroke(). La valeur 255 est un code pour la couleur blanc.

// Dessiner un contour et modifier la couleur du


carr
stroke(255);

Quant fill() qui permet de modifier la couleur du carr, elle prend la


valeur 153 correspondant un gris moyen.

fill(153);
Cest maintenant que les communications sont effectues. Linstruction
port.write() est comme Serial.print(), mais elle est utilise pour crire
sur un port srie depuis Processing. Le caractre envoy est un H, pour HIGH.

// Envoyer un H pour indiquer que la souris est


dans
le carr
port.write(H);
}

Linstruction else indique Processing ce quil doit faire si la souris nest pas dans
le carr.

else {

La valeur communique stroke() est un gris mdian. La couleur de remplissage


reste donc identique, que le curseur de la souris soit dessus ou non.

// Rtablir le carr dans son tat dorigine


stroke(153);
fill(153);

Le caractre L est envoy sur le port srie pour teindre la LED.

// Envoyer un L pour teindre la LED


port.write(L);

Le boolen mouseOverBox est forc false.

mouseOverBox = false;
}

Pour finir, le carr est trac. Ses coordonnes et dimensions ne changent pas ; la seule
diffrence est dans la couleur applique linstruction if. Si la souris est dans le
carr, le contour devient blanc (actif) ; sinon, le contour est gris mdian comme le
contenu et ne sen distingue plus (inactif).

// Dessiner le carr
rect(boxX, boxY, boxSize, boxSize);
}
Le croquis Arduino de PhysicalPixel
Dans la section prcdente, vous avez vu comment la partie Processing fonctionne
pour fournir un signal. Ce signal est envoy votre Arduino par la connexion srie.
Dans cette section, voyons ce que la partie Arduino en fait. Le code Arduino pour cet
exemple est relativement simple en comparaison des autres exemples figurant dans ce
livre, et parfaitement indiqu pour comprendre comment fonctionne une connexion
srie. Je recommande toujours de commencer avec ce croquis pour se lancer dans un
projet impliquant une communication de Processing vers Arduino. Cest une
excellente mthode pour sassurer que votre matriel et votre logiciel fonctionnent ;
vous pouvez ensuite ladapter vos besoins.
Tout dabord, la constante et la variable sont dclares. La broche de la LED
(broche 13) correspond la sortie et ne change pas, si bien quelle est dclare
comme constante. La valeur incomingByte reoit les donnes ; conduite
changer, elle est dclare comme un entier (int), et non un caractre (char).
Jexplique pourquoi plus loin.

const int ledPin = 13; // La broche laquelle la


LED est
relie
int incomingByte; // Une variable pour les
donnes
parvenant par srie

Dans setup(), la communication srie est configure un dbit de 9600.


Noubliez pas que dans Processing et Arduino, si vous modifiez le dbit du matriel
ou de lapplication qui envoie les donnes, vous devez aussi changer le dbit du
matriel ou de lapplication qui les reoit. Lorsque vous communiquez avec un
ordinateur, vous pouvez choisir parmi les dbits suivants : 300, 600, 1200, 2400,
4800, 9600, 14400, 19200, 28800, 34800, 57600 ou 115200.

void setup() {
// Initialise la communication srie
Serial.begin(9600);

La broche 13, ledPin, est configure en sortie.

// Faire de la broche de la LED une sortie


pinMode(ledPin, OUTPUT);
}

La premire action dans loop() consiste dterminer si des donnes sont


disponibles. Serial.available() teste le tampon srie, qui contient toute
donne envoye lArduino en attendant quelle soit lue.
En vrifiant que la valeur retourne est suprieure 0 avant denvisager de lire le
tampon, vous rduisez le nombre de lectures de ce dernier, puisque vous ne le lisez
que si une donne sy trouve. Si vous lisiez systmatiquement le tampon, vous
ralentiriez le fonctionnement de votre Arduino ainsi que celui de tout matriel ou
logiciel associ.

void loop() {
// Voir si des donnes sries sont arrives
if (Serial.available() > 0) {

Si la valeur est plus grande que 0, le contenu du tampon est lu et conserv dans la
variable incomingByte de type int.

// Lire loctet le plus ancien dans le tampon srie:


incomingByte = Serial.read();

Vous devez maintenant savoir si les donnes reues sont celles que votre programme
attend. Processing envoie un caractre H, mais ce nest quun octet de donnes que
vous pouvez traiter comme un entier ou un caractre. Dans le cas prsent, vous le
traitez comme un entier. Linstruction if teste sil correspond la valeur 72, qui
correspond au code ASCII du caractre H. Les guillemets indiquent que H dsigne le
caractre, et non une variable nomme H. Linstruction if (incomingByte ==
72) se comporterait de la mme manire.

// Si cest un H majuscule (ASCII 72), allumer la


LED
if (incomingByte == H) {

Si les valeurs sont gales, la broche 13 passe HIGH.

digitalWrite(ledPin, HIGH);
}

Si la valeur est un caractre L, soit un entier de valeur 76, la mme broche passe
LOW.
// Si cest un L majuscule (ASCII 76) teindre la
LED
if (incomingByte == L) {
digitalWrite(ledPin, LOW);
}
}
}

Cette interaction trs lmentaire entre Processing et Arduino constitue une excellente
base pour des projets plus labors. Dans cet exemple, linteraction avec lcran est
lentre, mais il serait possible dy substituer une entre plus complexe, comle une
reconnaissance faciale : lorsque votre visage est au centre de lcran, le signal est
envoy. De mme, du ct Arduino, il serait possible de grer une autre sortie plutt
que de se contenter dallumer une LED (aussi amusant que ce soit). Par exemple, vous
pourriez relier des photocoupleurs une tlcommande et commencer lire quelque
chose chaque fois que le signal HIGH est envoy, et vous pourriez faire une pause
chaque fois quun signal LOW est envoy.

Dessiner avec un Arduino


Dans la section prcdente, nous avons vu comment envoyer des donnes dans un
sens. Comment envoyer des signaux dans lautre sens, cest--dire de lArduino vers
Processing ? Dans cet exemple, vous dcouvrez comment lire la valeur dun
potentiomtre reli votre Arduino et afficher visuellement le rsultat dans une applet
Processing.
Il vous faudra :
Un Arduino Uno

Une platine dessai

Un potentiomtre

Des straps

Le circuit de base utilise un potentiomtre pour envoyer une valeur analogique


Processing qui peut tre interprte et affiche sur un graphique lcran. Assemblez
le circuit en suivant les Figures 17-4 et 17-5. La patte centrale du potentiomtre est
relie la broche analogique 0. Concernant les deux autres pattes, lune est relie
au 5 V et lautre GND. En inversant ces broches, vous modifiez le sens de
progression de la valeur gnre quand vous tournez le potentiomtre.
FIGURE 17-4 Schma de cblage pour une entre par potentiomtre.

Mettre en place le code pour Arduino


Une fois que vous avez assembl votre circuit, vous avez besoin du logiciel pour
lutiliser. Dans le menu Arduino, slectionnez Fichier->Exemples-
>04.Communication->Graph pour charger le croquis. Comme le prcdent, il
contient le code Arduino et le code Processing (ainsi quune variante pour
Max/MSP 5). Le code Processing se trouve sous le code Arduino ; il est comment
pour ne pas interfrer avec ce dernier.
FIGURE 17-5 Schma du circuit pour une entre par potentiomtre.

/*
Graph

Un exemple de communication de lArduino vers


lordina-
teur. La valeur de la broche analogique 0 est
envoye sur
le port srie. Nous parlons de communication
srie, car
la connexion apparat tant lArduino qu
lordinateur
sous la forme dun port srie, quoique nous
nutilisions
pas de cble USB. Les octets sont envoys les uns
aprs
les autres (en srie) de lArduino lordinateur.

Vous pouvez utiliser le moniteur srie Arduino pour


visualiser les donnes envoyes, ou vous pouvez les
lire
avec Processing, PD, Max/MSP ou tout autre programme
capable de lire des donnes sur un port srie. Le
code
Processing qui figure plus bas affiche un graphique
avec
les donnes reues pour que vous puissiez visualiser
la
valeur de lentre analogique dans le temps.

Le circuit :
Un capteur analogique quelconque est connect la
bro-
che analogique 0.

Cr en 2006 par David A. Mellis


Modifi le 9 avril 2012 par Tom Igoe et Scott
Fitzgerald

Cet exemple de code est dans le domaine public.

http://www.arduino.cc/en/Tutorial/Graph
*/

void setup() {
// Initialise la communication srie
Serial.begin(9600);
}

void loop() {
// Envoyer la valeur sur la broche analogique 0
Serial.println(analogRead(A0));
// Attendre un peu pour stabiliser le
convertisseur
// analogique-vers-numrique aprs la dernire
lecture
delay(2);
}

Tlversez maintenant votre croquis dans la carte.


LArduino tant configur pour recevoir un message de Processing, vous devez mettre
en place le croquis Processing pour recevoir le message parvenant sur le port srie.

Mettre en place le code Processing


Le code se trouve entre les marques de commentaires sur plusieurs lignes (/* et */),
aprs le croquis Arduino. Dmarrez Processing, copiez le bloc de code depuis
Arduino et collez-le dans un nouveau croquis Processing que vous sauvegardez avec
un nom appropri comme Graph.
Enlevez les marques de commentaires de toute la partie Processing. Ne laissez en
commentaires que le bloc final pour Max, ou supprimez-le.

// Croquis Graphing

// Ce programme rcupre une chane de caractres


cods
en ASCII
// sur le port srie 9600 bps et les affiche sous
forme
dun graphique.
// Il sattend ce que les valeurs soient
comprises
entre 0 et 1023,
// suivies dun retour la ligne

// Cr le 20 avril 2005
// Mis jour le 18 janvier 2008
// par Tom Igoe
// Cet exemple de code est dans le domaine public.

import processing.serial.*;

Serial myPort; // Le port srie


int xPos = 1; // Labscisse du graphique

void setup () {
// Spcifier les dimensions de la fentre
size(400, 300);

// Dresser la liste de tous les ports sries


dispo-
nibles
println(Serial.list());
// VOIR LES COMMENTAIRES DU PREMIER PROJET
myPort = new Serial(this, Serial.list()[0],
9600);
// Ne gnrez pas serialEvent() moins de
recevoir un
caractre de
// passage la ligne
myPort.bufferUntil(\n);
// Configurer la couleur initiale du fond
background(0);
}

void draw () {
// Tout se droule dans serialEvent()
}

void serialEvent(Serial myPort) {


// Rcuprer la chane ASCII
String inString = myPort.readStringUntil(\n);

if (inString != null) {
// Supprimer tous les caractres espace la fin
inString = trim(inString);
// Convertir en entier et rapporter la hauteur de
lcran
float inByte = float(inString);
inByte = map(inByte, 0, 1023, 0, height);

// Dessiner la ligne
stroke(127,34,255);
line(xPos, height, xPos, height - inByte);
// A la fin de lcran, revenir son dbut
if (xPos >= width) {
xPos = 0;
background(0);
}
else {
// Incrmenter labscisse
xPos++;
}
}
}

Cliquez le bouton Excuter pour excuter le croquis Processing, et une fentre


dapplette devrait apparatre. Elle a un fond noir et affiche un graphique violet
reprsentant les valeurs gnres par lentre analogique de lArduino, comme sur la
Figure 17-6.
Lorsque vous tournez le potentiomtre, le graphique violet sajuste pour en rendre
compte. Le graphique est mis jour dans le temps, si bien quil progresse
insensiblement. Lorsquil atteint lextrmit de la fentre daffichage, il recommence
au point de dpart, sur la gauche de la fentre.

FIGURE 17-6 Un graphique violet reprsente les valeurs choisies avec le potentiomtre.
Si vous ne voyez pas le graphique, revrifiez le code et le cblage :
Vrifiez que le numro de port srie est le bon.

Vrifiez que vous utilisez les bons numros de broche.

Vrifiez que le potentiomtre est bien connect.

Vrifiez que votre code Arduino a t tlvers correctement et que


votre code Processing ne contient pas derreur. Notez que vous ne
pouvez pas tlverser tandis que le croquis Processing
communique avec votre Arduino ; vous devrez arrter le croquis
dabord.

Comprendre le croquis Graph pour


Arduino
Dans setup(), le code initialise le port srie. Il suffit dindiquer que le dbit est
de 9600, ce qui doit correspondre au dbit indiqu dans le croquis Processing.
Les broches dentre analogiques sont configures en entres par dfaut, si bien que
vous navez pas appeler pinMode().

void setup() {
// Initialiser la communication srie:
Serial.begin(9600);
}

Dans loop(), une seule ligne est utilise pour transmettre la valeur du capteur sur le
port srie. La broche est directement dsigne plutt que de passer par une variable
(telle que analogPin), car il ny est pas fait rfrence par la suite. La broche est
A0, cest--dire lentre analogique 0.

void loop() {
// Envoyer la valeur sur la broche analogique 0:
Serial.println(analogRead(A0));

Les lectures analogiques sont extrmement rapides, gnralement plus rapides que
lorsquelles doivent tre converties en numrique. Parfois, cette vitesse peut
engendrer des erreurs, si bien quattendre un bref dlai de 2 millisecondes entre deux
lectures peut aider stabiliser les rsultats.

// Attendre un peu pour stabiliser le


convertisseur
// analogique-vers-numrique aprs la dernire
lecture:
delay(2);
}

Comprendre le croquis Graph pour


Processing
Puisque les donnes sont envoyes sur le port srie, Processing va les lire et les
interprter pour dessiner le graphique. Tout dabord, vous devez importer la
bibliothque dans le croquis et crer une nouvelle instance du port. Dans ce cas, le
nouvel objet correspondant au port srie est nomm myPort.

import processing.serial.*;

Serial myPort; // Le port srie

Un entier, dfini par xPos, conserve la trace de la dernire colonne trace dans le
graphique (labscisse).

int xPos = 1; // Labscisse du graphique

Dans setup(), la fentre daffichage est dfinie comme faisant 400 pixels de
largeur et 300 pixels de hauteur.

void setup () {
// Spcifier les dimensions de la fentre
size(400, 300);

Pour trouver le bon port srie, Serial.list() est appele. Les informations
quelle renvoie sont affiches dans la console avec println(). La fonction
println() est semblable Serial.println() dans Arduino, mais elle est
utilise dans Processing pour observer des valeurs arrivant sur le port srie. Ces
valeurs saffichent sur la console plutt que de partir sur le port srie, et sont utilises
pour dboguer plutt que pour communiquer.

// Dresser la liste de tous les ports sries


dispo-
nibles
println(Serial.list());

Le port utilis par votre Arduino devrait apparatre en haut de la liste, si bien que
myPort utilise la position 0 pour le reprer. Si vous nutilisez par la fonction
Serial.list(), vous pouvez remplacer Serial.list()[0] par un autre
nombre dans la liste affiche dans la console. Vous pouvez aussi remplacer
Serial.list()[0] par le nom exact du port, comme /dev/tty.
usbmodem26221 ou COM5 , entre guillemets. Il est utile de spcifier le nom si
vous avez connect plusieurs Arduino lordinateur. Le nombre 9600 correspond au
dbit, la vitesse laquelle vous communiquez avec votre Arduino. Si le dbit nest
pas le mme de part et dautre, les donnes ne seront pas reues.

myPort = new Serial(this, Serial.list()[0], 9600);

Dans cet exemple, vous disposez dune autre manire de faire le tri entre les bonnes et
les mauvaises donnes. La fonction serialEvent() est appele automatiquement
chaque fois quune donne arrive dans le tampon du port srie. Ici, la fonction vrifie
quil sagit dun caractre suivi dun saut de ligne, en cohrence avec
Serial.println(100) utilis du ct Arduino. Le saut de ligne, quivalent la
touche Entre du clavier, correspond au caractre ASCII symbolis par \n. La
fonction pourrait parfaitement rechercher nimporte quel autre caractre, comme la
tabulation \t.

// Ne pas dclencher serialEvent() moins de


recevoir
un caractre de
// saut de ligne
myPort.bufferUntil(\n);

Le fond de fentre est repeint en noir.

// Configurer la couleur initiale du fond


background(0);
}
Dans draw(), il ny a rien faire car serialEvent() surveille le port srie et
se dclenche chaque fois que vous recevez un caractre de saut de ligne. Le
commentaire figurant dans le code le rappelle.

void draw () {
// Tout se droule dans serialEvent()
}

La fonction serialEvent() fait partie de la bibliothque serial et se


dclenche chaque fois que des donnes arrivent dans le tampon du port srie. Comme
la condition bufferUntil(\n) est utilise, serialEvent() se dclenche
chaque fois quun caractre de saut de ligne est dtect.

void serialEvent (Serial myPort) {

Une variable de type chane de caractres (string) est dclare pour conserver les
donnes lues sur le port myPort. Les donnes sont lues jusqu rencontrer un
caractre de saut de ligne. Comme lArduino envoie un entier suivi dun retour la
ligne, suivi dun entier, et ainsi de suite, les valeurs sont lues une par une.

// Rcuprer la chane ASCII


String inString = myPort.readStringUntil(\n);

Une instruction if vrifie que la chane contient des donnes et quelle nest donc
pas vide (null).

if (inString != null) {

Pour sassurer quil ny a pas danomalies, la fonction trim() est utilise pour
supprimer les espaces, les tabulations et les sauts de ligne dans la chane, donc tous
les caractres de mise en forme pour que les caractres utiles (les chiffres de la
valeur) puissent tre lus clairement.

// Supprimer tous les caractres inutiles


inString = trim(inString);

Maintenant que la chane de un quatre chiffres est propre, elle peut tre convertie en
une valeur numrique stocke dans une variable nomme inByte. Son type est
dclar avant son nom. La variable reoit le rsultat de la conversion de la chane
inString. Vous pouvez aussi utiliser des parenthses autour de la variable pour la
convertir dans dautres types de donnes, comme avec long() ou byte().
// Convertir en entier et rapporter la hauteur
de
lcran
float inByte = float(inString);

inByte doit maintenant tre remis lchelle. La plage des valeurs du capteur va
de 0 1023 ; mais inByte doit tre rapport une plage stendant de 0 la
hauteur de la fentre daffichage, de sorte que les valeurs reues puissent tre
reprsentes proportionnellement ce quelles valent sans dpasser la hauteur de la
fentre.

inByte = map(inByte, 0, 1023, 0, height);

Ce graphique est trs fin, une valeur tant reprsente par une colonne de pixels. Cet
effet graphique est gnr par la fonction de trac line(). Pour passer la couleur de
la colonne au violet, la fonction stroke() est alimente avec les valeurs
appropries des composantes rouge, verte et bleue. La colonne est dfinie par un point
de dpart et un point darrive. Comme il sagit dafficher un graphique, vous
souhaitez afficher beaucoup de colonnes de hauteurs variables. Comme vous pouvez
le constater, les abscisses des points de dpart et darrive sont les mmes.
Lordonne du premier correspond la hauteur de la fentre, ce qui le place tout en
bas de cette dernire. Celle de lautre point est gale cette hauteur diminue de la
valeur de inByte, ce qui signifie que plus cette valeur est grande, plus le haut de la
colonne est proche du haut de la fentre.

// Dessiner la ligne
stroke(127,34,255);
line(xPos, height, xPos, height - inByte);

Si vous avez des soucis pour choisir la meilleure couleur, vous pouvez utiliser loutil
Outils->Slecteur de couleur dans la barre de menus de Processing. Il affiche une
palette qui vous donne les valeurs des composantes rouge, verte et bleue de la couleur
slectionne, ainsi que leurs valeurs hexadcimales, comme vous pouvez le voir sur
la Figure 17-7.
FIGURE 17-7 Cette palette de couleurs Processing peut savrer trs utile.

Le morceau de code qui suit gre le dplacement de xPos le long de laxe des
abscisses du graphique pendant que le temps scoule. Si xPos devient suprieur ou
gal la largeur de la fentre, la colonne suivante sortirait de cette dernire. La
variable est donc remise 0, et un nouveau fond est affich pour effacer le graphique
qui vient de se remplir.

// Arriv en fin dcran, revenir son dbut


if (xPos >= width) {
xPos = 0;
background(0);
}

Si xPos nest pas gal la largeur de la fentre, elle est incrmente pour la
prochaine valeur afficher.

else {
// Incrmenter labscisse
xPos++;
}
}
}

LArduino pourrait facilement envoyer des donnes dun capteur analogique pour
dtecter du son, du mouvement ou de la lumire. Du ct de Processing, les choses
sont un peu plus complexes, mais cest surtout parce que vous gnrez ici une
reprsentation graphique des donnes reues complexe.
Grer plusieurs signaux
Envoyer un signal Processing depuis un capteur reli la carte Arduino est
indispensable, mais souvent, il faut envoyer plusieurs signaux et non un seul. Sil est
facile denvoyer les signaux de diffrents capteurs, il peut tre difficile de les traiter
dans le bon ordre du ct du rcepteur. Dans cet exemple, vous apprenez envoyer
les donnes de trois capteurs distincts connects votre Arduino vers votre croquis
Processing.
Il vous faut :
Un Arduino Uno

Une platine dessai

Deux potentiomtres 10 k

Un bouton-poussoir

Trois rsistance 10 k

Des straps

Le circuit est une combinaison de trois entres distinctes. Quoiquelles utilisent la


mme alimentation et la mme masse, vous devez les considrer individuellement.
Deux potentiomtres vous fournissent deux valeurs distinctes. Ils sont cbls comme
vous cbleriez un capteur de lumire : un ct reli au 5 V, lautre la masse GND et
le point milieu une broche dentre analogique pour collecter le signal. Le bouton-
poussoir fournit un signal numrique. IL est connect entre le 5 V et la broche
numrique D2 ainsi qu la masse GND via une rsistance. Le circuit complet est
reprsent sur les Figures 17-8 et 17-9.
FIGURE 17-8 Plan de montage pour deux entres analogiques et une entre numrique.
FIGURE 17-9 Le schma dun circuit pour deux entres analogiques et une entre numrique.

Mettre en place le code pour Arduino


Une fois que vous avez assembl votre circuit, dans le menu Arduino, slectionnez
Fichier->Exemples->04.Communication->SerialCallResponse pour charger le
croquis. Comme les deux prcdents projets du chapitre, le croquis contient le code
Arduino et le code Processing (ainsi quun bloc pour Max/MSP 5). Le code
Processing se trouve sous le code Arduino ; il est comment pour ne pas interfrer
avec ce dernier.

/*
SerialCallResponse
Langage: Wiring/Arduino

Ce programme envoie un A ASCII (octet de valeur 65)


au
dmarrage et rpte jusqu ce quil reoive des
donnes.
Il attend alors un octet sur le port srie, et
envoie
trois valeurs produites par les capteurs chaque fois
quil reoit un octet.

Merci Greg Shakar et Scott Fitzgerald pour les


amlio-
rations

Le circuit:
* 2 potentiomtres relis aux broches dentre
analo-
giques 0 et 1

* bouton-poussoir reli lentre/sortie numrique


2

Cr le 26 septembre 2005
Par Tom Igoe
Modifi le 24 avril 2012
Par Tom Igoe et Scott Fitzgerald

Cet exemple de code est dans le domaine public.


http://www.arduino.cc/en/Tutorial/SerialCallResponse

*/

int firstSensor = 0; // Premier capteur


analogique
int secondSensor = 0; // Second capteur analogique
int thirdSensor = 0; // Capteur numrique
(bouton)
int inByte = 0; // Octet provenant par le
port
srie
void setup()
{
// Configurer le port srie 9600
Serial.begin(9600);
while (!Serial) {
; // Attendre que le port srie connecte. Pour
Leo-
nardo uniquement
}

pinMode(2, INPUT); // Le capteur numrique est


sur la
broche numrique 2
establishContact(); // Envoie un octet pour
tablir le
contact jusqu ce
// que le destinataire
rponde
}

void loop()
{
// Si nous recevons un octet valide, lire les
entres
analogiques
if (Serial.available() > 0) {
// Rcuprer loctet reu
inByte = Serial.read();
// Lire la premire entre analogique, et
diviser par
4 pour rapporter
// la valeur la plage de 0 255
firstSensor = analogRead(A0)/4;
// Attendre 10 ms pour que le convertisseur
rcupre
delay(10);
// Lire la seconde entre analogique, et diviser
par
4 pour rapporter
// la valeur la plage de 0 255
secondSensor = analogRead(1)/4;
// Lire ltat du bouton et le rapporter 0 ou
255
thirdSensor = map(digitalRead(2), 0, 1, 0, 255)

// Envoyer les valeurs des capteurs


Serial.write(firstSensor);
Serial.write(secondSensor);
Serial.write(thirdSensor);
}
}

void establishContact() {
while (Serial.available() <= 0) {
Serial.print(A); // Envoyer un A majuscule
delay(300);
}
}

Tlversez ce code dans votre Arduino. Votre Arduino met des donnes. Vous devez
maintenant crer et configurer le croquis Processing pour recevoir et interprter les
donnes mises sur le port srie.

Mettre en place le code pour Processing


Le code se trouve entre les marques de commentaires sur plusieurs lignes (/* et */),
aprs le croquis Arduino. Copiez le code, et collez-le dans un nouveau croquis
Processing, puis sauvegardez-le avec un nom appropri, comme SerialCallResponse.

// Cet exemple de code est dans le domaine public.


import processing.serial.*;

int bgcolor; // Couleur de


fond
int fgcolor; // Couleur de
remplissage
Serial myPort; // Le port srie
int[] serialInArray = new int[3]; // L o nous
stockons
ce qui est reu
int serialCount = 0; // Nombre doctets
reus
int xpos, ypos; // Position de
dpart de
la balle
boolean firstContact = false; // Si nous avons
entendu
parler le micro-contrleur

void setup() {
size(256, 256); // Dimensions du terrain
noStroke(); // Pas de bordure pour la
prochaine
forme dessine

// Position de dpart de la balle (milieu du


terrain)
xpos = width/2;
ypos = height/2;

// Afficher une liste des ports sries, pour


dbogage
println(Serial.list());

// VOIR COMMENTAIRES DU 1ER PROJET.


String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);

}
void draw() {
background(bgcolor);
fill(fgcolor);
// Dessiner la forme
ellipse(xpos, ypos, 20, 20);

}
void serialEvent(Serial myPort) {
// Lire un octet sur le port srie
int inByte = myPort.read();
// Si cest le premier octet reu, et si cest un
A,
// vider le port srie et noter que

// nous venons dentrer en contact avec le


microcontr-
leur.
// Autrement, ajouter loctet un tableau
if (firstContact == false) {
if (inByte == A) {
myPort.clear(); // Vider le tampon du
port
srie
firstContact = true; // Vous tes entr
en
contact avec le microcon-trleur
myPort.write(A); // En demander
davantage
}
}
else {
// Ajouter le dernier octet provenant du port
srie
un tableau
serialInArray[serialCount] = inByte;
serialCount++;
// Si nous avons 3 octets
if (serialCount > 2 ) {
xpos = serialInArray[0];
ypos = serialInArray[1];
fgcolor = serialInArray[2];

// Afficher les valeurs (pour le dbogage)


println(xpos + \t + ypos + \t + fgcolor);

// Envoyer un A majuscule pour demander plus


de
donnes des capteurs
myPort.write(A);
// Rinitialiser serialCount
serialCount = 0;
}
}
}

Cliquez sur le bouton Excuter pour faire dmarrer lapplette et afficher sa fentre.
Lapplette a un fond noir. Chaque fois que vous enfoncez le bouton-poussoir, un point
blanc apparat. Ajustez les potentiomtres pour dplacer le point horizontalement et
verticalement. Lorsque vous relchez le bouton-poussoir, le point disparat.
Si vous nobservez pas ce comportement, revrifiez votre cblage et votre code :
Vrifiez que le numro de port srie est le bon.

Vrifiez que les potentiomtres et le bouton sont bien connects.

Vrifiez que votre code Arduino a t tlvers correctement et que


votre Processing ne contient pas derreur. Notez que vous ne
pouvez pas tlverser tandis que le croquis Processing
communique avec votre Arduino ; vous devrez arrter le croquis
dabord.

Le code SerialCallResponse du croquis


Arduino
Au dmarrage du croquis, quatre variables sont dclares. Trois sont pour conserver
les valeurs retournes par les capteurs, et une pour conserver loctet envoy par le
croquis Processing.

int firstSensor = 0; // Premier capteur


analogique
int secondSensor = 0; // Second capteur analogique
int thirdSensor = 0; // Capteur numrique
int inByte = 0; // Octet provenant du port
srie

Dans setup(), le port srie est initialis et son dbit est ajust 9600.

Linstruction while na aucun effet ici, car la variable teste est toujours diffrente
de zro, sauf sur le modle Leonardo qui fait patienter un peu pour dmarrer. La seule
instruction de ce bloc conditionnel est un signe point-virgule pour que le compilateur
ne dtecte pas une erreur. Linstruction se lit tant quil ny a pas de connexion srie,
ne rien faire .

void setup()
{
// Configurer le port srie 9600
Serial.begin(9600);
while (!Serial) {
; // Attendre que le port srie connecte. Pour
Leo-
nardo uniquement
}

La broche 2 est celle du bouton-poussoir, et est configure en entre laide de


pinMode().

pinMode(2, INPUT); // Le capteur numrique est


sur la
broche numrique 2

Une fonction non prdfinie appele establishContact() est appele pour


signaler au croquis Processing que lArduino est prt.
establishContact(); // Envoie un octet pour
tablir le
contact jusqu ce
// que le destinataire
rponde
}

Dans loop(), une instruction if vrifie si des donnes sont arrives sur le port
srie. Si cest le cas, loctet est lu et conserv dans inByte.

void loop()
{
// Si nous recevons un octet valide, lire les
entres
analogiques
if (Serial.available() > 0) {
// Rcuprer loctet reu
inByte = Serial.read();

La variable firstSensor contient la valeur dlivre par le potentiomtre reli


la broche analogique 0, une fois divise par 4. Cette opration permet de rapporter la
valeur une chelle de 0 255.

// Lire la premire entre analogique, et diviser


par
4 pour rapporter
// la valeur la plage de 0 255
firstSensor = analogRead(A0)/4;

Une brve pause de 10 millisecondes permet au convertisseur analogique-vers-


numrique de convertir la valeur.

// Attendre 10 ms pour que le convertisseur


rcupre
delay(10);

La valeur gnre par le second capteur est elle aussi lue et convertie en utilisant la
mme mthode, et conserve dans la variable secondSensor.
// Lire la seconde entre analogique, et diviser
par
4 pour rapporter
// la valeur la plage de 0 255
secondSensor = analogRead(1)/4;

Le cas du bouton-poussoir est particulier. Pour rapporter sa valeur lchelle utilise


pour les autres capteurs, la fonction map() est utilise. La premire valeur fournie
cette fonction est la variable convertir. Dans notre cas, ce nest pas une variable,
mais le rsultat renvoy par digitalRead() sur la broche 2. Il serait possible de
placer ce rsultat dans une variable, mais ce nest pas ncessaire. Le bouton peut
renvoyer 0 ou 1. Ces valeurs sont rapportes lchelle des autres capteurs, soit 0 et
255. La valeur convertie est conserve dans la variable thirdSensor.

// Lire ltat du bouton et le rapporter 0 ou 255


thirdSensor = map(digitalRead(2), 0, 1, 0, 255)

Les valeurs des trois capteurs sont alors envoyes les unes aprs les autres par le port
srie en utilisant Serial.write().

// Envoyer les valeurs des capteurs


Serial.write(firstSensor);
Serial.write(secondSensor);
Serial.write(thirdSensor);
}
}

la fin du croquis, on trouve la fonction spcifique establishContact() qui a


t appele dans setup(). Elle surveille le port srie pour voir si une connexion
srie est disponible. Tant que ce nest pas le cas, establishContact() envoie
un A majuscule sur le port srie toutes les 300 millisecondes. On ne sort de la
fonction quune fois que la connexion est tablie.

void establishContact() {
while (Serial.available() <= 0) {
Serial.print(A); // Envoyer un A
majuscule
delay(300);
}
}

Le croquis SerialCallReponse de
Processing
Examinons maintenant ce qui se passe du ct Processing pour tablir le contact,
interprter les valeurs et les afficher. La premire action entreprise dans le script
Processing est dimporter la bibliothque serial.

import processing.serial.*;

Nombre de variables doivent tre dclares pour ce croquis. Les deux premires sont
les couleurs pour le fond et les formes.

int bgcolor; // Couleur de fond


int fgcolor; // Couleur de remplissage

Une nouvelle instance de port srie est cre, nomme myPort.

Serial myPort; // Le port


srie

Un tableau de trois valeurs entires est cr.

int[] serialInArray = new int[3]; // L o nous


stoc-
kons ce qui est reu

Un compteur entier est dclar pour conserver la trace du nombre doctets qui ont t
lus.

int serialCount = 0; // Le nombre doctets


reus

Les valeurs entires xpos et ypos conservent les coordonnes du point.

int xpos, ypos; // Position de dpart de la balle

Un boolen conserve une valeur indiquant si le contact a t tabli avec lArduino.


boolean firstContact = false; //

Dans setup(), nous dfinissons les dimensions de la fentre daffichage. La


fonction noStroke() sassure que les formes seront dessines sans bordure.

void setup() {
size(256, 256); // Dimensions de la surface
daffichage
noStroke(); // Pas de bordure pour la
prochaine
forme dessine

Les valeurs de dpart des coordonnes du point le positionnent au centre de la fentre


daffichage : la moiti de la largeur et la moiti de la hauteur, respectivement.

// Position de dpart de la balle (milieu du


terrain)
xpos = width/2;
ypos = height/2;

Pour crer une connexion srie, une liste des ports sries est affiche, mais vous
pouvez la neutraliser en la commentant.

// Afficher une liste des ports sries, pour


dbogage
println(Serial.list());

Le port utilis par votre Arduino figure gnralement en haut de la liste, si bien que la
chane portName contient par dfaut 0, et myPort devient le port correspondant.
Notez quil est possible de lcrire autrement : Serial(this,
Serial.list()[0], 9600) ; .

Vous pouvez remplacer lappel Serial.list()[0] par le numro explicite du


port srie utilis par Arduino. Revoyez les explications et mises en garde fournis dans
le premier projet du chapitre. Le nombre 9600 fait rfrence au dbit du port srie, et
doit tre identique de part et dautre.

String portName = Serial.list()[0];


myPort = new Serial(this, portName, 9600);
}
Dans draw(), le fond est dabord affich. Comme la couleur du fond na pas t
dfinie, elle vaut 0 par dfaut, ce qui correspond du noir. De mme, la couleur de
remplissage nayant pas t dfinie, elle correspond du noir pour linstant.
En effet, nous avons dclar deux variables fgcolor et bgcolor pour ces
couleurs, mais sans leur donner de valeur initiale. Elles valent donc zro au dpart.

void draw() {
background(bgcolor);
fill(fgcolor);

Une ellipse est dessine au centre de la fentre daffichage. En fait, cest un cercle
de 20 pixels de diamtre qui va servir de marqueur

// Dessiner la forme
ellipse(xpos, ypos, 20, 20);
}

Lessentiel de laction se droule dans la fonction spciale serialEvent(), qui


dplace le marqueur redessin en permanence par la boucle draw().

void serialEvent(Serial myPort) {

Si des donnes parviennent sur le port srie, cela dclenche serialEvent(). Le


premier octet de donnes est lu en utilisant myPort.read() puis stock dans la
variable inByte.

// Lire un octet sur le port srie


int inByte = myPort.read();

Si le croquis Processing ne communique pas dj avec lArduino via le port srie, il


passe linstruction if qui suit pour voir si loctet est un caractre A. Si oui, le
tampon du port srie est vid, le boolen firstContact est pass true, et le
mme caractre A est renvoy lArduino.
Vous vous souvenez de la fonction establishContact() dans le croquis
Arduino ? Elle envoie sans cesse un caractre A jusqu ce que la connexion soit
tablie. Lorsquun A est envoy en rponse lArduino, la fonction
establishContact() se termine, et loop() peut commencer envoyer des
donnes. Cette technique se nomme handshaking (littralement, se serrer la main),
une ngociation entre deux systmes pour tablir la communication.
if (firstContact == false) {
if (inByte == A) {
myPort.clear(); // Vider le tampon du port
srie
firstContact = true; // En contact avec le
micro-
contrleur
myPort.write(A); // Confirmer le
contact
}
}

Si firstContact est true, le programme lit loctet arriv et le rajoute un


tableau doctets reus serialInArray, dans lordre o ils parviennent.

else {
// Ajoute le dernier octet provenant du port
srie
un tableau
serialInArray[serialCount] = inByte;

Chaque fois quun octet est ainsi lu, le compteur qui dsigne la place quil occupe
dans le tableau est incrment.

serialCount++;

Lorsque le compteur est suprieur 2, cest que trois octets ont t lus.

// Si nous avons 3 octets


if (serialCount > 2 ) {

Le potentiomtre sur la broche analogique 0 fournit labscisse du point ; le


potentiomtre sur la broche analogique 1 fournit son ordonne ; le bouton fournit sa
couleur de remplissage.

xpos = serialInArray[0];
ypos = serialInArray[1];
fgcolor = serialInArray[2];
Ces valeurs sont aussi affiches dans la console afin de vrifier que tout fonctionne
bien. Dans Processing, vous pouvez combiner plusieurs valeurs dans une instruction
print() ou println() en utilisant le symbole +.
Vous pouvez aussi utiliser le symbole \t pour insrer une tabulation entre les valeurs
pour les espacer proprement.

// Affiche les valeurs (pour le dbogage)


println(xpos + \t + ypos + \t + fgcolor);

Un autre A majuscule est envoy pour dclencher la condition


if(Serial.available() > 0) et rpter le processus.

// Envoyer un A majuscule pour demander plus de


donnes des capteurs
myPort.write(A);

La valeur serialCount est rinitialise 0 pour recommencer stocker les octets


dans le tableau.

serialCount = 0;
}
}
}

Cet exemple constitue un excellent point de dpart pour apprendre comment lire les
valeurs de plusieurs capteurs dans un programme rsidant sur lordinateur. Pourquoi
ne pas collecter par exemple les donnes dune srie de capteurs pour surveiller la
mto chez vous ?
La sortie gnre par ce croquis est des plus lmentaires, mais vous pouvez exploiter
lincroyable potentiel de Processing pour envisager des projets autrement plus
sophistiqus. Quelques recherches avec Processing visualisation donnes sur le
Web vous donneront une bonne ide de ce qui est possible.
Sommaire

Couverture
Arduino pour les Nuls poche, 2e dition
Copyright
Introduction
propos de ce livre
Quelques folles hypothses
Comment ce livre est organis
Les icnes utilises dans ce livre
Les fichiers des exemples
Par o commencer ?

I. Dcouvrir Arduino
Chapitre 1. Quest-ce quArduino, et do vient-il ?
Do vient Arduino ?

Apprendre en faisant

Llectronique

Les entres

Les sorties

Lesprit Open source

Chapitre 2. Premiers contacts avec votre Arduino Uno


Dcouvrir lArduino Uno R3

Dautres cartes Arduino

Acheter un Arduino

Pour commencer : le kit du dbutant

Amnager un espace de travail


Chapitre 3. Tlcharger et installer Arduino
Installer Arduino

Passer en revue lenvironnement Arduino

Chapitre 4. Faire clignoter une LED


Travailler sur votre premier croquis Arduino

Examiner le croquis Blink

II. Plonger dans les projets Arduino


Chapitre 5. Les bons outils font le bon ouvrier
Les bons outils pour travailler

Utiliser le multimtre pour mesurer une tension, une intensit, une rsistance

Chapitre 6. Une initiation llectricit et la circuiterie


Comprendre llectricit

Des quations pour crer vos circuits

Travailler avec des schmas de circuits

Les conventions de couleurs

Les fiches techniques

Les codes couleur des rsistances

Chapitre 7. Entres, sorties et communication


Charger un croquis

La modulation de largeur dimpulsion (PWM)

Croquis pour attnuer une LED

Le croquis Button

Le croquis AnalogInput

Le moniteur srie

Le croquis DigitalReadSerial

Le croquis AnalogInOutSerial

Chapitre 8. Moteurs, servos et effets sonores


Exploiter un moteur lectrique

Dcouvrir la diode

Faire tourner un moteur courant continu


Contrler la vitesse de votre moteur

Contrler la vitesse de votre moteur

Les servomoteurs

Raliser des mouvements de balayage

Contrler mieux un servomoteur

Faites du bruit

Crer votre instrument interactif

III. Construire sur les bases


Chapitre 9. Quelques exemples de ralisations
Skube

Chorus

Push Snowboarding

Baker Tweet

Compass Lounge et Compass Card

Les lampes Good Night

Little Printer

Flap to Freedom

Chapitre 10. Lart de souder


Comprendre le soudage

Les lments ncessaires pour souder

Souder en toute scurit

Assembler une carte fille

Acqurir une technique de soudage

Monter le circuit de test

Protger le projet

Chapitre 11. Amliorer votre code


Un meilleur Blink

Pour grer les effets de rebond du bouton

Un bouton encore meilleur

Amliorer les capteurs

talonner les entres


Chapitre 12. Chocs, sons et ultrasons
Simplifier la ralisation dun bouton

Retour au pays des capteurs pizo

Capteurs de pression, de force et de charge

Captiver !

Un laser dtecteur

Dtecter les mouvements

Mesurer les distances

Est-ce que quelquun mentend ?

IV. Booster le potentiel de lArduino


Chapitre 13. Cartes filles et bibliothques de fonctions
Cartes filles

Tirez profit des bibliothques (librairies)

Chapitre 14. Capter plus dentres et contrler plus de sorties


Contrler plusieurs LED

Contrler plusieurs LED par dcalage

Chapitre 15. Multiplier les sorties avec I2C

Quest-ce que I2C ?

Assembler lI2C PWM/Servo Driver

Utiliser lI2C PWM/Servo Driver

Comprendre le croquis I2C PWM/Servo Driver

Acheter vos servomoteurs

Autres utilisations de I2C

V. Arduino et les logiciels


Chapitre 16. Dcouvrir Processing
Processing, cest quoi ?

Premiers pas avec Processing

Chapitre 17. Agir sur le monde rel


Agir sur le rel depuis un bouton virtuel
Dessiner avec un Arduino

Comprendre le croquis Graph pour Arduino

Grer plusieurs signaux

You might also like