Professional Documents
Culture Documents
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.
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
A
rduino est compos de matriel et de logiciel.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Si votre Arduino est branch, mais que vous ne voyez rien sallumer, vous devriez
sans doute vrifier ceci :
Le cble USB est bien branch.
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.
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 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 !
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.
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.
Selectronic : www.selectronic.fr
Gotronic : www.gotronic.fr
Conrad : www.conrad.fr
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.
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 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.
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.
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.
un fauteuil confortable ;
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.
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.
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.
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-6 Votre Mac va penser que la carte Arduino est une nouvelle carte rseau.
http://arduino.cc/playground/Learning/Linux
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
Configurer le logiciel
Tlverser Blink
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.
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.
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).
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.
/*
Blink
Active la LED durant une seconde, puis lteint
durant
une seconde, et ainsi de suite.
Cet exemple est dans le domaine public.
*/
// Donnons-lui un nom:
int led = 13;
Ce croquis est compos de lignes de code. Lorsque vous considrez le code de loin,
vous pouvez identifier plusieurs sections :
des commentaires ;
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.
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.
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.
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 :
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 ;
pinMode(led, OUTPUT);
FIGURE 4-10 Le logiciel Arduino vous dit que vous avez oubli une accolade.
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() :
value : une des deux valeurs binaires possibles, soit HIGH, soit
LOW.
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 :
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 (+).
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.
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.
Noir 0 x100 -
Marron 1 x101 1%
Rouge 2 x102 2%
Orange 3 x103 -
Jaune 4 x104 5%
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 %
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
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 :
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.
Une LED
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.
R = (VS - VL) / I
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.
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 :
/*
Fade
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);
}
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).
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.
void loop() {
// Modifier la luminosit sur la broche 9:
analogWrite(led, brightness);
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.
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).
/*
Fading
Cr le 1 Nov 2008
Par David A. Mellis
modifi le 30 Aot2011
Par Tom Igoe
http://arduino.cc/en/Tutorial/Fading
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);
}
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().
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.
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 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.
/*
Button
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
http://www.arduino.cc/en/Tutorial/Button
*/
// 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);
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).
// Une variable
int buttonState = 0; // Stocke ltat du
bou-
ton-poussoir
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);
}
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.
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.
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
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
http://arduino.cc/en/Tutorial/AnalogInput
*/
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.
Vrifiez que la LED est bien connecte, la longue patte tant relie
la broche 13, et la courte GND.
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.
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 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.
/*
DigitalReadSerial
Lit un signal numrique sur la broche 2
Affiche le rsultat sur le moniteur srie
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.
int pushButton = 2;
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);
}
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.
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.
Un potentiomtre de 10 k
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
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
*/
// 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);
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.
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).
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.
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;
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
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.
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.
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.
Un transistor
Une diode
Un strap
// 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).
int brocheMot = 9;
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);
}
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);
}
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.
int brocheMot = 9;
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() {
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.
Un transistor
Une diode
Un potentiomtre de 10 k
Des straps
// monMotorControl
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.
int valPotar = 0;
int valVitesse = 0;
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.
analogWrite(brocheMot, valVitesse);
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.
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.
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>
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
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.
#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.
La dernire ligne de dclaration contient une variable dans laquelle sera stocke la
position du servomoteur.
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.
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.
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
Un servomoteur
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.
#include <Servo.h>
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.
#include <Servo.h>
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)
myservo.write(val); // Positionne le
servo en
// fonction de la
valeur
recalcule
delay(15);
}
}
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-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
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
Circuit:
* Un haut-parleur 8-ohms ou un buzzer sur la broche
num-
rique 8
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};
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);
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
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.
#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.
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.
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.
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
Indice Valeur
1 pommes
2 bananes
3 oranges
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};
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]);
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 :
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
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
Un pizo
Un dtecteur de lumire
Une rsistance de 4,7 ohms
Des straps
/*
Pitch follower
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
http://arduino.cc/en/Tutorial/Tone2
*/
void setup() {
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.
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);
}
void loop() {
// lit le senseur:
int sensorReading = analogRead(A0);
// Gnre le son
tone(8, thisPitch, 10);
Enfin, un court dlai est ajout la fin de la boucle pour amliorer la stabilit des
lectures.
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
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.
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.
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.
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.
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.
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.
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/
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).
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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 !
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.
Un connecteur (3X2) ;
Deux boutons-poussoirs ;
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.
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.
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.
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 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.
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 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 !
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.
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
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.
*/
1. Allumer la LED.
3. teindre la LED.
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.
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.
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
*/
long previousMillis = 0;
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();
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.
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.
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);
}
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 :
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 :
Ce code permet de faire clignoter votre LED tout en effectuant dautres fonctions en
mme temps.
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.
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.
/*
Debounce
Cr le 21 Novembre 2006
par David A. Mellis
modifi le 30 Aot 2011
par Limor Fried
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
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
// Stocke ltat du commutateur dans une variable
locale:
int reading = digitalRead(buttonPin);
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.
// Constantes
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;
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.
La partie setup() est simple, puisquelle ne dfinit que les broches dentre et de
sortie.
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
// Lit ltat du commutateur dans une variable
locale:
int reading = digitalRead(buttonPin);
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);
lastButtonState = reading; }
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.
/* StateChangeDetection
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
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);
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);
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.
La condition suivante vrifie si la valeur bouton vaut HIGH ou LOW. Si cette dernire
vaut HIGH, alors le bouton-poussoir est enfonc.
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.
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.
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 !
Une LED
Un capteur de lumire
Une rsistance de 10 k
Des straps
/*
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.
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
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;
// 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.
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).
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.
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.
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);
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.
Il vous faut :
Un Arduino Uno
Une LED
Un capteur de lumire
Une rsistance de 10 k
Des straps
/*
Calibration
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
// 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);
void loop() {
// Lit le capteur
sensorValue = analogRead(sensorPin);
// 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
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).
sensorValue = analogRead(sensorPin);
La broche de la LED reoit alors la valeur LOW afin dindiquer que la phase
dtalonnage est termine.
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.
Il ne reste plus qu mettre jour la LED avec les valeurs converties et contraintes
via une criture analogique vers ledPin.
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
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.
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
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.
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
Le circuit:
* Commutateur temporaire attach la broche 2
* LED intgre sur la broche 13
Cr le 14 Mars 2012
par Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/InputPullupSerial
*/
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);
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.
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.
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.
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
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
http://www.arduino.cc/en/Tutorial/Knock
// 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,
void loop() {
// Lit le capteur et stocke la valeur dans
sensorRea-
ding:
sensorReading = analogRead(knockSensor);
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.
// Constantes
const int ledPin = 13;
const int knockSensor = A0;
const int threshold = 100;
// 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
}
void loop() {
// Lit le capteur et le stocke dans la variable
sensor-
Reading:
sensorReading = analogRead(knockSensor);
Enfin, le mot Knock est envoy sur le port srie suivi dun court dlai destin
amliorer la stabilit.
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, 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.
Trois rsistances de 10 k
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
Cr le 21 Janvier 2010
Modifi le 9 Avril 2012
http://arduino.cc/en/Tutorial/Tone3
*/
#include pitches.h
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);
}
}
}
#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.
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.
Si la valeur lue est plus grande que le seuil, la note correspondant au capteur est joue
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.
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.
#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.
*/
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
// 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;
}
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.
Une variable de type float nomme smoothed est dclare pour stocker la
valeur du capteur une fois cette dernire traite.
float smoothed ;
{
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;
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.
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. :
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.
Un dtecteur de lumire
Une LED
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
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).
// Constante
const int analogInPin = A0; // Broche dentre
analogique
const int analogOutPin = 9; // Broche de sortie
pseu-
do-analogique (PWM)
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);
}
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.
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.
Une rsistance de 10 k
Des straps
/*
DigitalReadSerial
Lit une entre numrique sur la broche 2, affiche le
r-
sultat sur lcran srie
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).
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);
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.
// 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.
Serial.print(inches);
Serial.print( in, );
Serial.print(cm);
Serial.print( cm);
Serial.println();
delay(500);
}
// 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.
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);
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.
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 :
Les microphones lectret sont parfaits pour mesurer lamplitude ou le volume dun
bruit et ils peuvent dclencher une varit de sorties.
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
Le circuit:
Cr le 29 Dc. 2008
modifi le 9 Avr 2012
par Tom Igoe
// 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);
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.
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
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.
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).
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/).
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.
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 !
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.
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.
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.
Adafruit (www.adafruit.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)
Make (http://blog.makezine.com)
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)
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.
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.
Sous Windows :
My Documents /Arduino/libraries/CapSense/CapPin.h
My Documents /Arduino/libraries/CapSense/CapPin.cpp
My Documents /Arduino/libraries/CapSense/examples
FIGURE 13-10 Le menu Arduino affiche les bibliothques dans la liste droulante Importer
bibliothque.
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.
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
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.
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.
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.
Douze LED
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 :
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 :
Le circuit:
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);
}
// 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.
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
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.
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);
}
}
/* 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.
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__
*/
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);
}
/* myKnightRider
// 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.
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).
SH_CP Shift Register Clock Pin (broche Si passe l'tat HIGH, dcale de un
de lhorloge du registre toutes les valeurs.
dcalage)
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.
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
Dcimal : 128,0,32,0,8,4,0,1,173
Il vous faut :
Un Arduino uno
Un 74CH595
Huit LED
Des straps
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).
//*****************************************************//
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);
Dcimal Binaire
0 00000000
1 00000001
2 00000010
3 00000011
4 00000100
5 00000101
6 00000110
7 00000111
8 00001000
9 00001001
Vrifiez que les LED sont bien orientes, dans le bon ordre et que
les broches de lArduino sont connectes aux bonnes broches
du 74H595.
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);
Cette fonction prend la valeur et gre toutes les impulsions pour aboutir aux tats des
huits bits sur les huit broches du registre.
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);
}
}
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 :
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);
}
// bit envoyer
byte bitsToSend = 0;
Comme dans lexemple prcdent, la broche de verrouillage est force LOW avant
de dcaler les bits :
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.
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.
Enfin, la broche de verrouillage est force HIGH et les rsultats sont mis jour sur
les sorties, donc sur les LED.
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)
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.
un bornier vis.
Suivez les tapes ci-aprs pour raliser un essai blanc de votre assemblage.
Un servomoteur
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/).
ALIMENTATION BENCH-TOP
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.
/***************************************************
Exemple pour Adafruit 16-channel PWM & Servo driver
Test Servo - pilote 16 servos, lun aprs lautre
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// Utilise ladresse par dfaut 0x40
Adafruit_PWMServoDriver pwm =
Adafruit_PWMServoDriver();
// 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
}
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);
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.
#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.
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
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.
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.
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.
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.
MAX/PURE DATA
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.
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.
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 ;
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.
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.
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.
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.
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.
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 :
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);
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);
ellipse(x,y,width,height);
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);
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 :
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);
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);
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.
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.
Une LED
/*
PhysicalPixel
Cr en 2006
Par David A. Mellis
Modifi le 30 aot 2011
par Tom Igoe et Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/PhysicalPixel
*/
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);
}
}
}
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);
void draw()
{
background(0);
// 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).
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.
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;
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.
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;
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);
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);
}
void draw()
{
background(0);
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.
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.
Linstruction else indique Processing ce quil doit faire si la souris nest pas dans
le carr.
else {
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.
void setup() {
// Initialise la communication srie
Serial.begin(9600);
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.
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.
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.
Un potentiomtre
Des straps
/*
Graph
Le circuit :
Un capteur analogique quelconque est connect la
bro-
che analogique 0.
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);
}
// Croquis Graphing
// 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.*;
void setup () {
// Spcifier les dimensions de la fentre
size(400, 300);
void draw () {
// Tout se droule dans serialEvent()
}
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++;
}
}
}
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.
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.
import processing.serial.*;
Un entier, dfini par xPos, conserve la trace de la dernire colonne trace dans le
graphique (labscisse).
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.
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.
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.
void draw () {
// Tout se droule dans serialEvent()
}
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.
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.
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.
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.
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
Deux potentiomtres 10 k
Un bouton-poussoir
Trois rsistance 10 k
Des straps
/*
SerialCallResponse
Langage: Wiring/Arduino
Le circuit:
* 2 potentiomtres relis aux broches dentre
analo-
giques 0 et 1
Cr le 26 septembre 2005
Par Tom Igoe
Modifi le 24 avril 2012
Par Tom Igoe et Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/SerialCallResponse
*/
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)
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.
void setup() {
size(256, 256); // Dimensions du terrain
noStroke(); // Pas de bordure pour la
prochaine
forme dessine
}
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
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.
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
}
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 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;
Les valeurs des trois capteurs sont alors envoyes les unes aprs les autres par le port
srie en utilisant Serial.write().
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.
Un compteur entier est dclar pour conserver la trace du nombre doctets qui ont t
lus.
void setup() {
size(256, 256); // Dimensions de la surface
daffichage
noStroke(); // Pas de bordure pour la
prochaine
forme dessine
Pour crer une connexion srie, une liste des ports sries est affiche, mais vous
pouvez la neutraliser en la commentant.
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) ; .
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);
}
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.
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.
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
Acheter un Arduino
Utiliser le multimtre pour mesurer une tension, une intensit, une rsistance
Le croquis Button
Le croquis AnalogInput
Le moniteur srie
Le croquis DigitalReadSerial
Le croquis AnalogInOutSerial
Dcouvrir la diode
Les servomoteurs
Faites du bruit
Chorus
Push Snowboarding
Baker Tweet
Little Printer
Flap to Freedom
Protger le projet
Captiver !
Un laser dtecteur