Vous êtes sur la page 1sur 95

Arduino

lcole
Apprendre aux lves programmer sur Arduino, c'est non seulement leur donner
la cl d'accs aux ordinateurs, mais aussi aux objets qui les entourent

Version en cours de rvision

v3 - avril 2014

Frdric Genevey

Arduino lcole

Ce cours est publi par la communaut Arduino dEdurobot.ch. Il sagit dune ressource ducative libre1,
sous licence CC BY-NC-SA2.

Merci Damien, Lionel, Kristijan et Nikola, lves de loption robotique 2012-2013 des coles dEcublens,
qui ont eu la difficile tche de tester ce cours.

Merci Arnold Pasche de mavoir mis le pied ltrier et pour ses conseils en matire de soudure et
dlectricit.

Merci Philippe Krhenbuhl, enseignant Vevey, pour les nombreuses ides dactivits et pour sa
prcieuse aide grce sa parfaite matrise du sujet.

Et enfin un merci tout particulier au Professeur Jean-Daniel Nicoud pour sa prcieuse aide et son soutien et
pour avoir cr le Diduino en pensant aux besoins des coles.

Vous apprciez ce cours? Nhsitez pas me le faire savoir et me faire parvenir vos commentaires,
corrections ou suggestions!
info@edurobot.ch

http://00.lc/rn

http://creativecommons.org/licenses/by-nc-sa/3.0/ch/

http://www.edurobot.ch

Arduino lcole
Consignes de scurit
Llectricit peut tre mortelle! Pour viter tout risque, en particulier avec des lves, il convient de ne
travailler quavec de la trs basse tension (TBT). La tension de fonctionnement de lArduino se situe autour
de 5 Volts. Avec les lves, je me suis volontairement limit travailler en courant continu avec une
diffrence de potentiel maximum de 24 Volts.

Quelques rgles lmentaires de scurit


Ne jamais connecter directement lArduino sur le secteur (230 Volts alternatif).
Pour lalimentation des projets, utiliser des transformateurs rpondants aux normes de scurit en
vigueur.
Avec des lves, ne pas utiliser de transformateurs ou appareils sur le secteur fait maison.
Ne pas dmonter dappareils lectroniques, sans supervision. Certains composants, comme les
condensateurs, peuvent dlivrer des dcharges lectriques mortelles, mme lorsquils ne sont pas
connects au secteur.

http://www.edurobot.ch

Arduino lcole
Prface !

Introduction!

Rfrences !

Bibliographie!

10

Intgration dArduino dans les plans dtudes!

11

Suisse!

11

Objectifs du plan dtudes romand!

12

propos des schmas lectroniques!

15

Utilisation de Fritzing!

16

Arduino: prsentation!
Arduino, Diduino, Seeduino, Freeduino...!

17
17

Le matriel!

19

Installer Arduino sur Mac: aide-mmoire !

21

Pilote!
Installation du pilote!

21
21

Installation du logiciel Arduino!

22

Configuration du logiciel Arduino!

22

Slection du port srie!

22

Slection du type de carte Arduino!

22

Aide!

22

La gestion de classe !

23

Grer le matriel!

23

Matriel recommand pour une classe, en plus du matriel de base:!


Raliser des projets!
Dcouverte de la plateforme Arduino!

23
23
24

Constitution de la carte!

24

Le microcontrleur!

25

Lalimentation!

25

La connectique!

26

Nomenclature des connecteurs Arduino!

26

Connecteurs Diduino!

27

La platine dexprimentation!

28

http://www.edurobot.ch

Arduino lcole
La soudure !

29

Les bases de llectronique !

30

Exercice: le circuit lectrique!

30

Liste des composants:!

30

Observations !

31

Llectricit!

31

Quelques ressources pour comprendre llectricit: !

32

Le circuit lectrique!

33

Les diodes!

34

Les rsistances!

35

Faire clignoter la LED intgre !

37

Introduction!

37

Le menu!

38

Code 1: faire clignoter la LED 13!

39

Code 1!

39

Introduction au code!

40

Le droulement du programme!

40

Le code minimal!

41

La fonction!

41

Les instructions!

42

Les points virgules ;!

42

Les accolades { }!

42

Les commentaires!

42

Les accents!

42

Analyse du code 1!

43

toi de jouer!!

44

Monter une LED!

45

Schma!

46

Code 2: faire clignoter une LED!

46

Variante: faire clignoter deux LEDs!

47

Les variables!
Une variable, qu'est ce que c'est ?!

http://www.edurobot.ch

48
49

Arduino lcole
Le nom d'une variable!

49

Dfinir une variable!

50

Lincrmentation!

51

Analyse du code!

51

Faire clignoter deux LED 20 fois !

52

Dfinir les broches du microcontrleur!

53

valuation: K2000!

54

Introduction!

54

tape1: Schmas!

55

tape2: Programme!

56

Les feux de circulation!

57

tape1: Schmas!

58

tape2: Programme!

59

Corrig!

60

Variantes!

60

Leon 6: Input !
Le bouton poussoir!

61
61

Le bouton poussoir normalement ouvert (NO)!

61

Le bouton poussoir normalement ferm (NF)!

61

Les interrupteurs!

61

Exercice 1: allumons cette LED!

62

Exercice 2: mais par o passe le courant?!

63

Protger lArduino!

64

Rsistance Pull-Down / Pull-Up !

65

Circuit avec une une rsistance pull-down!

65

Circuit avec une rsistance pull-up!

66

Rsistance pull-down ou pull-up?!

66

Exercice 3: montage avec rsistance pull-down (rappel au moins)!

67

Une petite variation de code!

70

Petits exercices: bouton poussoir et LED qui clignote!

71

Evaluation: vers linfini et au-del!!


Etape 1: les schmas !

http://www.edurobot.ch

72
72

Arduino lcole
tape2: Programme!

74

Leon 7: le barregraphe !

75

Introduction!

75

Schmas!

75

Le code!

77

Variation: Le barregraphe 10 LEDs!

81

Variation: lafficheur numrique!

82

Identification de la position des LEDs!


Leon 8: apprendre compter!

83
88

Objectif!

88

Schma lectronique du montage!

88

Plan de montage!

89

Le code!

90

Conclusion!

http://www.edurobot.ch

95

Arduino lcole
Prface
Lorsque Massimo Banzi et ses collgues de lInteraction Design Institute dIvrea, en Italie, ont dvelopp
lArduino, lobjectif tait de permettre aux tudiants de pouvoir disposer dune plateforme valant le prix dune
pizza pour raliser des projets interactifs3.
Ainsi, lArduino a t conu pour tre bon march, dot dune grande quantit dentres et de sorties,
compatible Mac, Windows et Linux, programmable avec un langage trs simple et open source. Il ny a l
que des avantages pour le monde scolaire, en particulier parce que lArduino se situe au croisement entre
linformatique, llectronique et les travaux manuels4.
Lapproche pdagogique de lArduino est particulire. Il ne sagit pas daborder la matire dune manire
linaire, mais en bricolant et en bidouillant: on cble, on branche et on regarde ce que cela donne. Cest
une approche par la pratique et lexprimentation, qui convient trs bien des lves, mme (et surtout) peu
scolaires. Il y a bien sr un risque de griller un Arduino; mais il ne sagit que de 30 francs de matriel, et
pas dun ordinateur 1200 francs! LArduino est un excellent outil pour le learning by doing et le project
based learning. Une approche par la thorie, mme si elle reste possible, serait contre-productive.
La meilleure preuve que lArduino est parfaitement adapt aux lves est, quen quelques leons, ils sont
dj prts raliser des projets concrets.
Ce cours a t pens pour des lves (et des enseignants) qui nont aucune notion en programmation et en
lectronique. Par rapport au gigantesque potentiel de lArduino, il est volontairement limit, mais il sefforce
dtre progressif et surtout ax sur la pratique.
Mes lves tant les premiers bnficiaires de ce cours, je me suis permis dutiliser le tutoiement.

!
4

Histoire de lArduino: !
!
!

http://www.framablog.org/index.php/post/2011/12/10/arduino-histoire
http://fr.flossmanuals.net/arduino/ch002_historique-du-projet-arduino

Rfrences: http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino et http://www.edurobot.ch/?p=1554

http://www.edurobot.ch

Arduino lcole
Introduction
Rfrences

Ce document est une compilation et une adaptation de textes et dexercices, depuis les sources suivantes:
Sources principales:

http://arduino.cc/fr/

http://fr.openclassrooms.com/sciences/cours/arduino-pour-bien-commencer-en-electronique-et-enprogrammation

http://mediawiki.e-apprendre.net/index.php/Diduino-Robot
Sources annexes:

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ARDUINO

http://www.didel.com/diduino/Cours01.pdf

http://www.didel.com/diduino/Cours02.pdf

http://chamayou.franck.free.fr/spip/spip.php?article177

http://www.hexapod-arduino.com

http://www.lagrottedubarbu.com

http://blog.makezine.com/arduino/

http://www.ladyada.net/learn/arduino/

http://www.craslab.org/arduino/livrethtml/LivretArduinoCRAS.html

http://arduino103.blogspot.ch

http://www.semageek.com
En cas dutilisation de ce document, partiellement ou dans sa totalit, vous tes pris dy inclure ces
sources.

Ce cours ne permet quune introduction llectronique. Un cours bien plus complet et trs bien fait est
disponible ici:
http://fr.openclassrooms.com/sciences/cours/l-electronique-de-zero

http://www.edurobot.ch

Arduino lcole
Bibliographie
Il existe de nombreux livres sur Arduino et sur llectronique. Voici les deux livres que je vous conseille, pour
leur ct progressif et didactique:

Electronique:
Llectronique en pratique, de Charles Platt
ISBN:978-2212135077
Lapproche pdagogique de ce livre est lapprentissage par la
pratique. On commence par exprimenter et dcouvrir, et ensuite
seulement vient la thorie pour affermir et expliciter les dcouvertes.
Cela en fait donc un ouvrage de rfrence pour lapprentissage de
llectronique lcole; en particulier en complment des Arduino et
Raspberry Pi.
Feuilleter ce livre sur Amazon.fr
Commander sur Amazon.fr

Arduino:
Le grand livre dArduino, dErik Bartmann
ISBN:978-2212137019
Ce livre est sans doute lun des meilleurs pour dbuter sur Arduino. Il
offre une introduction rapide llectronique et surtout le code est trs
bien expliqu, agrment de schmas. Il ne se limite enfin pas
quelques notions de base, mais va assez loin.
A feuilleter sur Amazon.fr
Commander sur Amazon.fr

Dmarrez avec Arduino 2e dition: Principes de base et


premiers montages, par Massimo Banzi
ISBN:978-2100701520
Massimo Banzi est lun des principaux crateurs dArduino. Autant dire
quil connat son sujet! Laccent de cet ouvrage est mis sur une
initiation la programmation de lArduino, plus que sur llectronique.
A conseiller tous les dbutants.
Commander le livre sur Amazon.fr

http://www.edurobot.ch

10

Arduino lcole
Intgration dArduino dans les plans dtudes
Suisse
Vaud

OCOM

Le travail sur Arduino, en tant quintroduction la programmation et llectronique peut


tre intgr dans une OCOM MITIC & Technologie. Ce cours dintroduction est destin
tre men en 10H ou 11H. A lissu du cours, les lves devraient idalement mobiliser leurs
nouvelles comptences autour dun projet individuel ou en commun.
Il est aussi possible daborder et de travailler llectronique avec ou sans Arduino dans une
OCOM Travaux Manuels. En effet, llectronique sintgre particulirement bien cette
branche et lajout dArduino permet de raliser des objets et sculptures automatiss et
interactifs. On peut ainsi imaginer raliser une machine inutile (useless machine) qui, outre
son ct humoristique, permet de mobiliser de nombreuses comptences: dessin
technique, lecture de plan, ralisation dun objet en bois, lectronique, programmation.
Certaines de ces machines peuvent mme avoir des comportements particulirement
sophistiqus.

OS MH-PH

Le plan dtude de loption spcifique Maths-Physique demande de travailler en projets et


mentionne comme exemple la programmation dun robot. Outre le fait quil est possible de
crer un robot de toutes pices laide dArduino, il est aussi possible daborder les notions
dlectricit, dlectronique et de programmation en travaux pratiques, sur une courte
priode.

Gymnase

Lors de loption spcifique MH-PH, deux sujets sont choix en 2me et 3me anne.
Llectronique et Arduino pourraient ainsi sinsrer dans ces moments.
En Arts visuels, lun des objectifs est dexprimenter, en abordant differentes techniques,
traditionnelles, contemporaines et experimentales. LArduino peut devenir un composant
intressant pour une installation interactive ou anime.
Enfin, en option complmentaire Informatique, lArduino est un outil privilgi pour
lapprentissage de la programmation.

http://www.edurobot.ch

11

Arduino lcole
Objectifs du plan dtudes romand
Voici une partie des objectifs du PER abords avec ce cours:

Objectifs de la discipline MSN


MSN 33 Rsoudre des problmes numriques et algbriques
-

en reconnaissant les caractristiques mathmatiques d'une situation et en la traduisant en


critures numrique ou littrale
en utilisant des proprits des oprations (+, -, x , :, puissance, racine carre et cubique)
en choisissant l'outil de calcul le mieux appropri la situation propose
en mobilisant l'algbre comme outil de calcul (quations), de preuve ou de gnralisation
en construisant, en exerant et en utilisant des procdures de calcul (calcul rflchi, algorithmes,
calculatrice, rpertoire mmoris) avec des nombres rels
en estimant un rsultat et en exerant un regard critique sur le rsultat obtenu

MSN 34 Mobiliser la mesure pour comparer des grandeurs


-

en connaissant le systme international d'units de mesures


en explorant des aspects culturels et historiques lis au systme d'units
en mobilisant l'instrument et l'unit de mesure adapts
en exprimant une mesure dans diffrentes units
en estimant l'importance relative des grandeurs dans un phnomne naturel ou social
en estimant la mesure des grandeurs
en calculant des grandeurs (rsistances, courant,)

MSN 35 Modliser des phnomnes naturels, techniques, sociaux ou des


situations mathmatiques
-

en mobilisant des reprsentations graphiques (codes, schmas, tableaux, graphiques,)


en associant aux grandeurs observables des paramtres
en triant, organisant et interprtant des donnes
en communiquant ses rsultats et en prsentant des modlisations

MSN 36 Analyser des phnomnes naturels et des technologies l'aide de


dmarches caractristiques des sciences exprimentales
-

en formulant des hypothses


en confrontant les hypothses mises des rsultats exprimentaux
en dfinissant des stratgies d'exploration et d'exprimentation en lien avec les hypothses
mises
en proposant des explications et en les confrontant celles de ses pairs et aux informations de
mdias varis

http://www.edurobot.ch

12

Arduino lcole
Objectifs de la discipline AC&M
A 33 AC&M Exercer diverses techniques plastiques et artisanales
en matrisant des habilets de motricit globale et fine (souplesse, prcision, coordination,
rapidit du geste,)
en choisissant et utilisant divers outils et matriaux en fonction d'un projet
en matrisant des gestes artisanaux spcifiques, en exerant la prcision
en utilisant des techniques numriques

Objectifs de (FG) MITIC


FG 31 Exercer des lectures multiples dans la consommation et la production de mdias et
d'informations
Utilisation dun environnement multimdia:
Recours aux moyens audiovisuels et informatiques adapts la tche effectuer jusqu' la
production finale (impression de documents illustrs, de squences filmes, de documents sonores,
)
Choix et utilisation autonomes (jusqu' la gestion et l'organisation des documents) de diverses
ressources numriques adaptes la tche projete (texte, prsentation, feuille de calcul, dessin,
musique,)

Objectifs de (FG) Vivre ensemble et exercice de la dmocratie


FG 34 Planifier, raliser, valuer un projet et dvelopper une attitude participative et
responsable
Planification et gestion d'une ou plusieurs tches particulires plus ou moins tendues dans le
temps et ajustement des collaborations avec les diffrents acteurs
Mise en place d'un plan de travail sur une ou plusieurs semaines et pour une ou plusieurs
disciplines
Mise en place d'un projet ou d'une recherche en en prcisant les tapes (dfinition du thme,
planification des tapes, recherche des sources, production, rajustements)
laboration commune d'un projet en en dfinissant les modes de collaboration ou de
coopration
Mise en vidence de conditions gnrales d'apprentissage (connaissance de soi, de stratgies
mta-cognitives, gestion du stress, persvrance,)
Dcouverte et exploitation d'autres manires d'apprendre et organisation de son travail

http://www.edurobot.ch

13

Arduino lcole
Objectifs de (FG) Choix et projets personnels
FG 33 Construire un ou des projets personnels vise scolaire et/ou professionnelle
Identification d'une large palette de mtiers
Slection de quelques mtiers en fonction des intrts et comptences personnels
Description du quotidien d'un mtier slectionn
Description des voies de formation suivre pour raliser un mtier
Analyse des exigences de formation
Information sur les diffrentes filires de formation et perspectives d'emploi
Description de ses intrts, valeurs, comptences, qualits et motivations en lien avec son projet
personnel

Objectifs de la discipline MEP


MEP 34 Dvelopper des sujets, des projets favorisant une ouverture sur les sciences du pass,
actuelles et du futur...
-

Familiarisation avec des faons de faire et de raisonner propres la logique robotique,


notamment en:
identifiant les objectifs dune activit ainsi que les notions thoriques et pratiques qui en rsultent
planifiant, construisant et programmant le robot en fonction des observations et des mesures
effectues
testant le robot afin didentifier dventuelles erreurs de conception et en mettant en place des
stratgies de remdiation
Initiation l'utilisation d'outils et de procds simples afin de faire fonctionner un robot de
manire autonome

http://www.edurobot.ch

14

Arduino lcole
propos des schmas lectroniques
Llectronique a ceci dintressant quon passe dun schma lectronique un montage, ou au contraire, du
montage au schma lectronique. Dans les deux cas, il sagit dune activit qui permet de travailler les
objectifs suivants:

Objectifs de la discipline MSN


MSN 35 Modliser des phnomnes naturels, techniques, sociaux ou des
situations mathmatiques
-

en mobilisant des reprsentations graphiques (codes, schmas, tableaux, graphiques,)


en associant aux grandeurs observables des paramtres
en triant, organisant et interprtant des donnes
en communiquant ses rsultats et en prsentant des modlisations

MSN 36 Analyser des phnomnes naturels et des technologies l'aide de


dmarches caractristiques des sciences exprimentales
-

en formulant des hypothses


en confrontant les hypothses mises des rsultats exprimentaux
en dfinissant des stratgies d'exploration et d'exprimentation en lien avec les hypothses
mises
en proposant des explications et en les confrontant celles de ses pairs et aux informations de
mdias varis

Pour raliser les schmas lectroniques, nous utilisons les outils suivants, disponibles gratuitement sur Mac
et PC:
Solve Elec: !

http://www.physicsbox.com/indexsolveelec2fr.html

Fido Cadj:!

http://davbucci.chez-alice.fr/index.php?argument=elettronica/fidocadj/fidocadj.inc

Fritzing:!

http://fritzing.org

Payant:
iCircuit! (10CHF)!

http://icircuitapp.com

http://www.edurobot.ch

15

Arduino lcole
Utilisation de Fritzing
Fritzing est un logiciel gratuit fonctionnant sur Mac, Windows et Linux, dvelopp lUniversit de Potsdam.
Il permet la fois de raliser des schmas lectroniques, mais aussi des vues des montages lectroniques.
Il inclut par dfaut les modules officiels Arduino, ainsi que de nombreux composants des firmes Adafruit et
Sparkfun.

Le logiciel Frirtzing peut tre tlcharg ladresse suivante: http://fritzing.org


Il existe aussi un composant pour Diduino, qui peut tre import dans Fritzing. Ce composant peut tre
tlcharg ici: http://www.edurobot.ch/?p=1969

http://www.edurobot.ch

16

Arduino lcole
Arduino: prsentation
LArduino est une plateforme open source d'lectronique
programme qui est base sur une carte microcontrleur et
un logiciel. Plus simplement, on peut dire que lArduino est un
module lectronique, dot dun microcontrleur programmable.
Il peut tre utilis pour dvelopper des objets interactifs, munis
d'interrupteurs ou de capteurs, et peut contrler une grande
varit de lumires, moteurs ou toutes autres sorties
matrielles.
Le principe de fonctionnement est simple:
1.
2.
3.
4.

On ralise le programme sur un ordinateur.


On connecte lordinateur lArduino via une prise USB.
On envoie le programme sur lArduino.
LArduino excute enfin le programme de manire autonome.

La programmation se fait laide dune adaptation de


Processing 5, un langage proche du C/C++, dont les bases sont faciles daccs. Le logiciel ncessaire
fonctionne la fois sur Mac OSX, Windows et GNU/Linux et demande trs peu de ressources. Il
fonctionnera ainsi trs bien sur un ancien ordinateur ou, par exemple, un Raspberry Pi6. Comme le prix dun
module Arduino est faible (moins de 30 CHF), nous disposons donc dun excellent outil pdagogique, peu
onreux qui nous permettra dapprendre les bases de la programmation, de llectricit, de llectronique et
de lautomation.

Arduino, Diduino, Seeduino, Freeduino...


Arduino est bas sur le concept de lopen hardware, soit du matriel libre de droits. Ainsi, toute la plateforme
matrielle et logicielle est libre de droits. Nimporte qui peut donc dvelopper et commercialiser un clone
dArduino. Nanmoins, le nom et le logo Arduino sont des marques dposes, afin didentifier le matriel
officiel. Il y a donc cinq catgories de matriel: le matriel officiel, les clones, les drivs, les compatibles
et les contrefaons 7.
Le matriel officiel8 suit la lettre le concept dvelopp par lquipe Arduino, contribue financirement au
dveloppement du logiciel et de nouveaux matriels et est fabriqu par des entreprises autorises. Il est
aussi entirement document.
Les clones Arduino sont des rpliques plus ou moins fidles de lArduino, qui ne portent pas le nom
Arduino (mais souvent un nom en XXX-duino), ni le logo et respectent de ce fait le droit de la marque. En
achetant un clone, nous aurons un produit de qualit, mais qui ne supportera pas financirement le projet
Arduino.

http://processing.org

Plus dinformations sur le Raspberry Pi: http://swissraspi.ch

Plus dinformations ici: http://blog.arduino.cc/2013/07/10/send-in-the-clones/

Matriel Arduino officiel: http://arduino.cc/en/Main/Products

http://www.edurobot.ch

17

Arduino lcole
Les drivs Arduino sont bass sur la technologie Arduino, mais proposent souvent des diffrences
matrielles, ou de nouvelles fonctions. Cest le cas du Diduino.
Les compatibles Arduino sont souvent du matriel trs loign du concept de base, parfois avec des
processeurs diffrents. Ces produits sont en gnral ddis des utilisations spcifiques.
Les contrefaons sont des copies illgales dArduino, qui ressemblent loriginal, en portent la marque et le
logo, ainsi que les signes distinctifs et qui, en gnral, fonctionnent comme loriginal. Le problme nest pas
la qualit, mais labus du consommateur, qui pense acheter un module officiel, et ce faisant supporter la
communaut open source Arduino.
Il faut en particulier se mfier des modules Arduino vendus sur des sites denchres ou sur Amazon; ils sont
la plupart du temps des contrefaons9.
La liste officielle des distributeurs de matriel Arduino est disponible ici:
http://arduino.cc/en/Main/Buy

Modules Arduino en cours de fabrication. Source: http://www.bunniestudios.com/blog/?p=2407

Comment reconnatre une contrefaon: http://arduino.cc/en/Products/Counterfeit

http://www.edurobot.ch

18

Arduino lcole
Le matriel
Ce cours est prvu pour un Arduino ou un module driv dArduino, appel Diduino.

Le Diduino possde une platine dexprimentation directement intgre et se trouve livr avec de nombreux
accessoires, tels que des rsistances, des LEDs, des capteurs... bref, tout ce qui est ncessaire pour
dbuter sur Arduino. Le Diduino possde aussi de nombreuses alimentations +5V, ainsi que de nombreuses
terres. Cela facilite le montage de circuits complexes. Enfin, le Diduino peut tre livr avec les connecteurs
non-souds, ce qui ajoute ainsi une comptence nos lves.
Il est tout fait possible de suivre ce cours avec un module Arduino original ou une copie
dArduino. Dans ce cas, il vous faudra une platine dexprimentation. LArduino Starter
Kit convient trs bien.
Attention: ce cours part du principe que le voltage de travail est de 5V! Il nest pas
prvu pour un Arduino Due. Le modle recommand est lArduino Uno ou
Duemilanove.
Il est possible dacqurir un Arduino Starter Kit10 officiel, trs bien fourni. La documentation est nanmoins
en anglais.

10

Achat dun Arduino Starter Kit en Suisse: Play-Zone et Boxtec

http://www.edurobot.ch

19

Arduino lcole
Dans lidal, il faut prvoir un Arduino/Diduino par lve.

Pour ce cours, le matriel minimum ncessaire par lve est le suivant:

Un Diduino (ou un Arduino)


Une grande platine dexprimentation (conseille aussi pour un Diduino)
4 LEDs rouges
2 LEDs jaunes ou orange
2 LEDs vertes
1 LED bleue
3 rsistances 100
10 rsistances 220 ou 470
3 rsistances 1k ou 10k
3 boutons poussoirs
1 barregraphe 10 LEDs11 (en option)
1 afficheur numrique 7 ou 8 segments LEDs12
1 fer souder et de ltain (si Diduino)

Note: sauf avis contraire, dans les montages de ce cours, une rsistance de 220 peut tre remplace par
une autre jusqu 470, et une rsistance de 1k par une autre dune valeur allant jusqu 10k.
Le Diduino et tout le matriel lectronique ncessaire peuvent tre commands cette adresse:

Pour les coles, les tudiants et les lves: http://www.didel.com


Pour le public: http://zigobot.ch

Il est aussi possible de commander du matriel Arduino et lectronique ces adresses:


Suisse:

http://www.play-zone.ch
http://shop.boxtec.ch (point de vente Diduino, y compris pour lEurope)
http://www.conrad.ch

France & Belgique:

http://mchobby.be
http://www.conrad.fr
http://www.zartronic.fr
http://boutique.semageek.com/fr/

11

Par exemple, Kingbright DC-10EWA ou DC7G3EWA, disponibles ici: http://00.lc/gy ou ici: http://00.lc/gz.

12

Par exemple, le Kingbright SA56-11 SRWA, disponible ici: Disponible ici: http://00.lc/hp

http://www.edurobot.ch

20

Arduino lcole
Installer Arduino sur Mac 13: aide-mmoire
!

Pilote
Afin de pouvoir connecter un Diduino ou un Arduino sur un Mac, il faut au pralable installer un pilote srieUSB.
La dernire version du pilote se trouve ici: http://www.ftdichip.com/Drivers/VCP.htm

Mac dot dun processeur PowerPC (G4, G5):


choisir PPC
Mac dot dun processeur Intel:
10.3 10.5: choisir x86 (32-bit)
10.6 10.9: choisir x86 (64-bit)

Deux pilotes sont fournis: lun pour Mac OS 10.3 et lautre pour
Mac OS 10.4 10.6. Ce dernier fonctionne aussi sous Mac OS
10.9

Installation du pilote
Dcompresser larchive et ouvrir le pilote choisi. Suivre ensuite le processus dinstallation standard.

13

Pour installer le logiciel sur PC: http://arduino.cc/en/Main/Software

http://www.edurobot.ch

21

Arduino lcole

Installation du logiciel Arduino


Tlcharger le logiciel Arduino depuis cette page: http://arduino.cc/en/Main/Software.
Une fois larchive dcompresse, glisser le logiciel dans les Applications.

Configuration du logiciel Arduino


Slection du port srie
Aller dans le menu Tools/Serial Port et slectionner choix /
dev/tty.usbserial-A1015M7N ou /dev/cu.usbserial-A1015M7N.
Selon lusage, utiliser celui qui fonctionne le mieux.

Slection du type de carte Arduino


Aller dans le menu Tools/Board et slectionner le bon modle
dArduino.
Pour un Diduino, slectionner Arduino Duemilanive w/
ATmega328
Pour un Arduino Uno, slectionner... Arduino Uno. Logique!

Aide
Erreur programmer is not responding lors de lenvoi du
programme (upload) sur le robot: appuyer sur le bouton reset du robot avant chaque envoi du programme.
Dbrancher et rebrancher le cble USB produit le mme effet.

Sources
http://www.didel.com/diduino/Start.pdf
http://arduino.cc/en/Guide/MacOSX
http://fr.flossmanuals.net/_booki/arduino/arduino.pdf
http://myarduino.blogspot.com
http://www.edurobot.ch

22

Arduino lcole
La gestion de classe
Ce cours est prvu pour lenseignement de linformatique et de llectronique sur Arduino pour des lves de
14 16 ans lcole. En Suisse Romande, cela correspond aux classes 10 et 11 Harmos. Ce cours peut
aussi tre adapt pour un enseignement en 9 Harmos, avec quelques amnagements.
Devant la richesse du sujet, il est tout fait possible de travailler avec ce cours sur une anne complte,
avec une dotation hebdomadaire de deux priodes de 45 minutes.

Grer le matriel
Lorsque cela est possible, et devant le faible prix du kit Diduino, lidal est den offrir (ou den faire acheter)
un par lve. Cela apporte quelques avantages, comme linitiation la soudure, le respect du matriel, la
possibilit pour llve de travailler la maison...
Il est aussi possible de monter son propre kit Arduino, pour un cot sensiblement quivalent.
Lenseignant devrait avoir une rserve de petit matriel lectronique (cbles, LEDs, rsistances,...)
disposition des lves, afin de complter le kit, dautant plus que ce matriel est lui aussi trs avantageux.

Matriel recommand pour une classe, en plus du matriel de base:


Diverses LEDs en rserve
Choix de rsistances (100, 220, 470, 1k, 10k Ohms)
Cbles patch
Postes ou fers souder pour llectronique
Un ou plusieurs multimtres
Pinces et tournevis pour llectronique (au moins un jeu)
Une pince dnuder
ventuellement: lampes de bureau quipes de loupes.14
Un ordinateur par lve

Raliser des projets


LArduino permet non seulement de facilement sinitier llectronique et la programmation, mais aussi de
raliser des projets concrets. Il suffit souvent de quelques LEDs ou de quelques relais pour raliser des
choses tonnantes.
Par exemple, avec les lves, nous avons pirat le sapin de Nol du Directeur de lcole 15! Cela permet aux
lves de mobiliser et de mettre en valeur leurs comptences dans des projets concrets. Un enseignant
aurait tort de se passer de cet excellent facteur de motivation, en particulier sil fait un projet visible et quil
met en avant les comptences des lves.

14

Par exemple: http://www.edurobot.ch/?p=1417

15

Projet voir ici: http://www.edurobot.ch/?p=1251

http://www.edurobot.ch

23

Arduino lcole
Dcouverte de la plateforme Arduino
Constitution de la carte

http://www.edurobot.ch

24

Arduino lcole
Le microcontrleur
Cest le cerveau de notre carte. Il va recevoir le programme que nous allons crer et va le stocker dans sa
mmoire avant de lexcuter. Grce ce programme, il va savoir faire des choses, qui peuvent tre : faire
clignoter une LED, afficher des caractres sur un cran, envoyer des donnes un ordinateur...
Il existe deux modles dArduino Uno: lun avec un microcontrleur de grande taille, et un autre avec un
microcontrleur dit SMD (SMD: Surface Mounted Device, soit composants monts en surface, en opposition
aux composants qui traversent la carte lectronique et qui sont souds du ct oppos). Dun point de vue
utilisation, il ny a pas de diffrence entre les deux types de microcontrleurs. Sur le Diduino, le processeur
est cach sous la platine dexprimentation.

Arduino Uno

Arduino Uno SMD

Lalimentation
Pour fonctionner, une carte Arduino a besoin d'une alimentation. Le microcontrleur fonctionnant sous 5V, la
carte peut tre alimente en 5V par le port USB ou bien par une alimentation externe qui est comprise entre
7V et 12V. Un rgulateur se charge ensuite de rduire la tension 5V pour le bon fonctionnement de la
carte.
Attention: ne surtout pas mettre de plus de 6V sur la carte Diduino. Il n'y a pas de rgulateur et donc
pas de connecteur pour une alimentation extrieure. On peut mettre un bloc de 3 ou 4 accus (ou piles). La
tension accepte va de 3 6V.
Attention (oui, encore!): les nouvelles cartes Arduino Due fonctionnent avec un voltage de 3.3V au
niveau des sorties! Le voltage de lalimentation est similaire lArduino Uno. Dans ce cours, nous
partons du principe que le voltage des montages est en 5 Volts.

http://www.edurobot.ch

25

Arduino lcole
La connectique
La carte Arduino ne possdant pas de composants (rsistances,
diodes, moteurs...) qui peuvent tre utiliss pour un programme, il est
ncessaire de les rajouter. Mais pour ce faire, il faut les connecter la
carte. C'est l qu'interviennent les connecteurs de la carte.
Sur les Arduino et sur beaucoup de cartes compatibles Arduino, les
connecteurs se trouvent au mme endroit. Cela permet de fixer des
cartes dextension, appele shields en les empilant.

Nomenclature des connecteurs Arduino


0 13!
A0 A5!
GND!
5V! !
3.3V!!
Vin! !

Entres/sorties numriques
Entres/sorties analogiques
Terre (0V)
Alimentation +5V
Alimentation +3.3V
Alimentation non stabilise (= le mme voltage que celui lentre de la carte)

http://www.edurobot.ch

26

Arduino lcole

Sur Diduino, les sorties analogiques sont numrotes A14 A19.


Sur Arduino, les sorties analogiques sont numrotes A0 A5.

Connecteurs Diduino
+5V!
!
Gnd! !
D0-D13!!
A14-A19!
Kidules!

Alimentation +5V
Terre (0V)
Connexions aux broches du micro-contrleur
Entres analogiques pour capteurs
Connecteurs pour Kidules

http://www.edurobot.ch

27

Arduino lcole
La platine dexprimentation
Une platine dexprimentation (appele breadboard) permet de raliser des prototypes de montages
lectroniques sans soudure et donc de pouvoir rutiliser les composants.
La platine dexprimentation est intgre sur le Diduino.
Elle permet de connecter les composants entre eux et de crer des circuits. Il y a 17
ranges. Dans chaque range, il y a deux groupes de 5 colonnes, spars par une
tranche au milieu.
Tous les connecteurs dans une range de 5 sont connects entre eux. Donc si on
branche deux lments dans un groupe de 5 connecteurs, ils seront relis entre eux.

FAUX!

10

15 JUSTE!

20

10

15

20

A
B
C
D
E

F
G
H
I
J

Sur la plupart des autres cartes Arduino, il ny a pas de breadboard. Il faut donc lacqurir part. Il en existe
de plusieurs types et de plusieurs tailles.

Dans chaque colonne, 5 connecteurs sont lis entre-eux. Il en est de mme des alignements de connecteurs
rouges (pour lalimentation) et bleus (pour la terre). Ainsi, les liens peuvent tre schmatiss ainsi:

http://www.edurobot.ch

28

Arduino lcole
La soudure
Certains modules Arduino, comme le Diduino, ncessitent un petit travail de soudure.
Pour raliser cette tape: nous avons besoin:

Dun fer souder, panne16 fine

De fil souder, fin

De tresse dessouder, en cas derreur

ventuellement, de graisse souder

Dun support pour le module

Dune pince coupante fine

Apprendre souder:

http://www.didel.com/Soudure.pdf

http://mightyohm.com/files/soldercomic/translations/Souder%20c'est%20facile_FR.pdf

Attention!

Le fer souder va devenir trs chaud! Attention aux brlures!


Ne pas respirer les vapeurs de soudure! Toxique!
La soudure doit tre ralise aussi soigneusement que possible. Il faut prendre son temps et tre soigneux.
Lorsque le travail de soudure est termin, il est recommand de se laver les mains!

16

La panne est la pointe du fer souder

http://www.edurobot.ch

29

Arduino lcole
Les bases de llectronique
Exercice: le circuit lectrique
Ralise le circuit suivant:

Arduino

Diduino

Liste des composants:


1 Led
1 rsistance 220 470
2 cbles

http://www.edurobot.ch

30

Arduino lcole
Observations
Tu viens de raliser le circuit suivant:
Alimentation +5V

Rsistance 220 OHms

Led

Terre (Gnd)

Reconnais-tu chacun des composants?


Branche lArduino lordinateur grce au cble USB. Que se passe-t-il?

Llectricit
Llectricit est un dplacement dlectrons dans un milieu conducteur.
Pour que ces lectrons se dplacent tous dans un mme sens, il faut qu'il y ait une diffrence du nombre
d'lectrons entre les deux extrmits du circuit lectrique.
Pour maintenir cette diffrence du nombre d'lectrons, on utilise un gnrateur (pile, accumulateur,
alternateur...)
La diffrence de quantit dlectrons entre deux parties dun circuit sappelle la diffrence de potentiel et
elle se mesure en Volts (V).

http://www.edurobot.ch

31

Arduino lcole
On peut comparer le fonctionnement dun circuit lectrique celui dun barrage hydrolectrique:

Les lectrons seraient leau


Le gnrateur serait le rservoir deau
Les conducteurs sont naturellement les conduites forces
Le consommateur (une ampoule ou une diode, par exemple) est la turbine, qui exploite lnergie du
dplacement des lectrons

Sur un barrage, plus la diffrence entre laltitude du niveau du rservoir et celui de la turbine est importante,
plus la pression de leau sera importante. Pour un barrage on appelle cette diffrence daltitude hauteur de
chute. Cela quivaut sur un circuit lectrique la diffrence de potentiel, qui se mesure en Volts (V) et se
note U.
Le dbit de leau (=la quantit deau qui scoule par unit de temps) correspond lintensit, aussi appele
courant, qui est donc le dbit dlectrons. Elle se mesure en Ampres (A) et se note I.
La puissance lectrique se note P et se mesure en Watts (W). Elle exprime la quantit de courant (I),
transforme en chaleur ou en mouvement. Sur un barrage, elle correspond lnergie produite par la
turbine.

La puissance P est le produit de la tension U et du courant I

Quelques ressources pour comprendre llectricit:


Cest pas sorcier sur llectricit:
Partie 1: http://00.lc/cl! !

Partie 2: http://00.lc/cm! !

En entier: http://00.lc/rs

Cest pas sorcier sur les batteries et les piles:


En entier: http://00.lc/rt

Hydro-Qbec a ralis un site pdagogique trs complet sur llectricit:


http://www.hydroquebec.com/comprendre/

http://www.edurobot.ch

32

Arduino lcole
Le circuit lectrique
Une pile est constitue dun milieu contenant de nombreux lectrons en trop, et dun second milieu en
manque dlectrons. Quand on relie les deux ples de la pile (le + et le -) avec un fil lectrique (le
conducteur), les lectrons vont alors se dplacer du milieu riche en lectrons vers le milieu pauvre. Si on
place une lampe lectrique entre les deux, le passage des lectrons va gnrer de la lumire.

Circuit lectrique

Voici le schma lectrique du circuit ci-dessus:

Pile

+
Lampe
-

Interrupteur

http://www.edurobot.ch

33

Arduino lcole
Les diodes
Il est possible de remplacer lampoule par une diode lectroluminescente, aussi appele LED17. Elle a la
particularit de ne laisser passer le courant lectrique que dans un sens.

Rsine poxy
Fil de liaison
Cavit rflchissante
Puce semi-conductrice
Enclume
Borne

Anode

Grille de connexion

Mplat

Cathode

Le courant lectrique ne peut traverser la diode que dans le sens de lanode


vers la cathode.
On reconnait lanode, car il sagit de la broche la plus longue. Lorsque les
deux broches sont de mme longueur, on peut distinguer lanode de la
cathode, par un mplat du ct de cette dernire.
Le symbole de la LED est le suivant:

Attention: le courant produit par lArduino est trop important pour y brancher directement une LED dessus.
Lutilisation dune rsistance est obligatoire, pour ne pas endommager la LED.

17

http://fr.wikipedia.org/wiki/Diode_lectroluminescente

http://www.edurobot.ch

34

Arduino lcole
Les rsistances
Une rsistance est un composant lectronique ou lectrique dont la principale
caractristique est d'opposer une plus ou moins grande rsistance (mesure en ohms:
) la circulation du courant lectrique.

On peut alors comparer, le dbit deau au courant lectrique I (qui est dailleurs le dbit
dlectrons), la diffrence de pression la diffrence de potentiel lectrique (qui est la
tension U) et, enfin, le rtrcissement la rsistance R.

Courant de l'eau

Rtrcissement

Rsistance
(milieu peu conducteur)
Courant lectrique

Ainsi, pour une tension fixe, plus la rsistance est faible, plus le courant la traversant est fort. Cette
proportion est vrifie par la loi dOhm:

http://www.edurobot.ch

35

Arduino lcole
Une rsistance est un milieu peu conducteur; les lectrons peinent sy dplacer. Leur nergie
se dissipe alors en gnral sous forme de chaleur. Cest ce principe utilis pour les bouilloires
lectriques ou les ampoules filaments.

La valeur de la rsistance se mesure en Ohms (). La valeur dune rsistance est dtermine
par ses bandes de couleurs.

Outre le tableau ci-dessus, on peut saider du petit mode demploi qui se trouve ici:
http://www.apprendre-en-ligne.net/crypto/passecret/resistances.pdf
La rsistance est schmatise de ces deux manires:

Un calculateur de valeurs de rsistances est disponible cette adresse:


http://edurobot.ch/resistance/

http://www.edurobot.ch

36

Arduino lcole
Faire clignoter la LED intgre
Introduction
LArduino tout comme le Diduino possde une LED monte sur le port 13.

Arduino Uno

Diduino

Comme premier programme, nous allons faire clignoter la LED. La programmation se fait dans le logiciel
Arduino.

http://www.edurobot.ch

37

Arduino lcole
Le menu

Bouton 1 :
!
!
Bouton 2 :
Bouton 3 :
Bouton 4 :
Bouton 5 :

!
!
!
!
!

Ce bouton permet de vrifier le programme, il actionne un module qui cherche les erreurs
dans le programme
Envoi du programme sur lArduino
Crer un nouveau fichier
Ouvrir un fichier existant
Enregistrer un fichier

Commenons tout de suite par un petit code. Nous lanalyserons ensuite:

http://www.edurobot.ch

38

Arduino lcole

Code 1: faire clignoter la LED 13


Code 1
/*
Code 1 - Edurobot.ch, destin au Diduino/Arduino
Objectif: faire clignoter la LED monte sur le port 13
*/
//***** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est excute en premier et une seule fois, au dmarrage
du programme
void setup()

// dbut de la fonction setup()

{
pinMode(13, OUTPUT);
Serial.begin(9600);

// Initialise la broche 13 comme sortie


// Ouvre le port srie 9600 bauds

// fin de la fonction setup()

//***** FONCTION LOOP = Boucle sans fin = coeur du programme *****


// la fonction loop() s'excute sans fin en boucle aussi longtemps
l'Arduino est sous tension
void loop()

que

// dbut de la fonction loop()

{
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}

Tlcharger le code: !

//
//
//
//

Met la broche 13 au niveau haut = allume la LED


Pause de 500ms
Met la broche 13 au niveau bas = teint la LED
Pause 500ms

// fin de la fonction setup()

http://www.edurobot.ch/code/code1.txt

Une fois le code crit (ou coll) dans la fentre de programmation, il faut lenvoyer sur lArduino. Pour cela, il
faut cliquer sur le bouton tlverser (upload), naturellement aprs avoir connect lArduino lordinateur!

http://www.edurobot.ch

39

Arduino lcole
Introduction au code
Le droulement du programme
Le programme se droule de la faon suivante :
1. Prise en compte des instructions de la partie dclarative
2. Excution de la partie configuration ( fonction setup( ) ),
3. Excution de la boucle sans fin ( fonction loop ( ) ): le code compris dans la boucle sans fin est excut
indfiniment.

Droulement du programme

En-tte dclarative

Fichiers d'inclusion
Dclaration des constantes
Dclaration des variables globales

Conguration initiale

Fonction Loop

Instructions excutes en boucle

Boucle sans n

Fonction Setup

Dclaration des variables locales


Conguration des pattes
Initialisation des variables
Initialisation des fonctionnalits
Initialisation des interruptions

Nous verrons petit petit les divers lments prsents dans le schma. Limportant pour le moment est de
savoir quun programme est divis en trois parties: en-tte dclarative, fonction setup et fonction loop.
La suite va nous permettre dentrer dans le code minimal: les fonctions setup et loop.

http://www.edurobot.ch

40

Arduino lcole
Le code minimal18
Avec Arduino, nous devons utiliser un code minimal lorsque l'on cre un programme. Ce code permet de
diviser le programme que nous allons crer en deux grosses parties.
void setup()
{
}
void loop()
{
}
Nous avons donc devant nous le code minimal qu'il faut insrer dans notre programme. Mais que peut-il
bien signifier pour quelqu'un qui n'a jamais programm ?

La fonction
Dans le code 1, se trouvent deux fonctions. Les fonctions sont en fait des portions de code.
Premire fonction:
void setup()
{
}
Cette fonction setup() est appele une seule fois lorsque le programme commence. C'est pourquoi c'est
dans cette fonction que l'on va crire le code qui n'a besoin d'tre excut quune seule fois. On appelle
cette fonction : "fonction d'initialisation". On y retrouvera la mise en place des diffrentes sorties et quelques
autres rglages. C'est un peu le check-up de dmarrage. Imaginons un pilote d'avion dans sa cabine qui fait
l'inventaire :
- broche 2 en sortie, tat haut ?
- OK
- timer 3 15 millisecondes ?
- OK
Une fois que l'on a initialis le programme, il faut ensuite crer son "cur", autrement dit le programme en
lui-mme.
Deuxime fonction:
void loop()
{
}
C'est donc dans cette fonction loop() que lon va crire le contenu du programme. Il faut savoir que cette
fonction est appele en permanence, c'est--dire qu'elle est excute une fois, puis lorsque son excution
est termine, on la rexcute et encore et encore. On parle de boucle infinie.

18

Source de cette partie: http://sciences.siteduzero.com/tutoriel-3-515617-le-langage-arduino-1-2.html

http://www.edurobot.ch

41

Arduino lcole
Les instructions
Maintenant que nous avons vu la structure des fonctions, regardons ce quelles peuvent contenir.
Les instructions sont des lignes de code qui disent au programme : "fait ceci, fait cela..." Ce sont donc les
ordres qui seront excuts par lArduino.

Les points virgules ;


Les points virgules terminent les instructions. Si par exemple je dis dans mon programme : "appelle la
fonction mangerLeChat" je dois mettre un point virgule aprs l'appel de cette fonction.
Lorsque le code ne fonctionne pas, cest souvent parce quil manque un point-virgule. Il faut donc tre trs
attentif ne pas les oublier!

Les accolades { }
Les accolades sont les "conteneurs" du code du programme. Elles sont propres aux fonctions, aux
conditions et aux boucles. Les instructions du programme sont crites l'intrieur de ces accolades.
Pour ouvrir une accolade sur Mac, taper alt-8 et alt-9 pour la fermer.

Les commentaires
Les commentaires sont des lignes de codes qui seront ignores par le programme. Elles ne servent en rien
lors de l'excution du programme.
Mais alors, pourquoi faire des commentaires?
Les commentaires vont permettre nous et aux programmeurs qui lirons notre code (s'il y en a) de savoir ce
que signifie la ligne de code que nous avons crite. C'est trs important de mettre des commentaires et cela
permet aussi de facilement comprendre un programme quon a ralis il y a plusieurs semaines et quon
aurait oubli!
Ligne unique de commentaire :
//cette ligne est un commentaire sur UNE SEULE ligne

Ligne ou paragraphe sur plusieurs lignes :


/*cette ligne est un commentaire, sur PLUSIEURS lignes
qui sera ignor par le programme, mais pas par celui qui lit le code ;) */

Les accents
Il est formellement interdit de mettre des accents en programmation! Sauf dans les commentaires.

http://www.edurobot.ch

42

Arduino lcole
Analyse du code 1 19
Revenons maintenant notre code.

La ligne pinMode(13, OUTPUT); initialise la broche 13 du microcontrleur comme sortie, c'est--dire que
des donnes seront envoyes depuis le microcontrleur vers cette broche.
La ligne Serial.begin(9600); initialise le port srie qui permet au robot d'envoyer et de recevoir des
informations l'ordinateur.
Avec l'instruction digitalWrite(13, HIGH);, le microcontrleur connecte la broche D13 au +5V ce qui a pour
effet d'allumer la LED.
L'instruction delay(500); indique au microcontrleur de ne rien faire pendant 500 millisecondes, soit
seconde.
Avec l'instruction digitalWrite(13, LOW);, le microcontrleur connecte la broche D13 la masse (Gnd) ce
qui a pour effet d'teindre la LED.
L'instruction delay(500); indique au microcontrleur nouveau de ne rien faire pendant 500ms soit
seconde.
Le rsultat est donc que la LED s'allume pendant seconde, puis s'teint pendant une seconde puis
s'allume pendant seconde... elle clignote donc.
Profitons maintenant pour voir ce que signifie le terme Output. Il sagit de prciser si la broche est une entre
ou une sortie. En effet, le microcontrleur a la capacit d'utiliser certaines de ses broches en entre (INPUT)
ou en sortie (OUTPUT). Il suffit simplement dinterchanger une ligne de code pour dire qu'il faut utiliser une
broche en entre (rcupration de donnes) ou en sortie (envoi de donne).
Cette ligne de code justement, parlons-en ! Elle doit se trouver dans la fonction setup().
La fonction se trouve tre pinMode().
19

Source: http://00.lc/ce

http://www.edurobot.ch

43

Arduino lcole
toi de jouer!
Fais varier les valeurs de linstruction delay et modifie le code selon les exemples ci-dessous.

Essai 1:
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(50);

Essai 2:
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(2000);

Essai 3:
digitalWrite(13, HIGH);
delay(50);
digitalWrite(13, LOW);
delay(50);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);

A toi de jouer! Fais varier les delay selon tes envies.

http://www.edurobot.ch

44

Arduino lcole
Monter une LED
Nous allons maintenant raliser le schma suivant:

Arduino Uno

Diduino

Fais attention ne pas te tromper de rsistance et bien monter la LED dans le bon sens.
http://www.edurobot.ch

45

Arduino lcole
Schma
D10

Rsistance 220 OHms

Led

Terre (Gnd)

Code 2: faire clignoter une LED


Copie et excute le code ci-dessous.
/*
Code 2 - Edurobot.ch, destin Arduino-Diduino
Objectif: faire clignoter la LED monte sur la broche 10
*/
void setup() {
// Initialise la broche 10 comme sortie
pinMode(10, OUTPUT);
// Ouvre le port srie 9600 bauds
Serial.begin(9600);
}
void loop() {
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
}

//
//
//
//

allume
attend
teint
attend

la LED
500ms
la LED
500ms

Tlcharger le code: http://edurobot.ch/code/code2.txt


Comme tu lauras remarqu, ce qui a chang par rapport au code prcdent, cest que la valeur de la broche
est passe de 13 10. En effet, nous avons choisi (arbitrairement) de connecter la LED sur la broche 10.

http://www.edurobot.ch

46

Arduino lcole
Variante: faire clignoter deux LEDs
Ralise le montage suivant:

Exercice 1:
Modifie le code 2 pour faire clignoter les deux LEDs en mme temps.
Corrig: http://www.edurobot.ch/code/code2-1.txt
Exercice 2:
Modifie ton code pour faire clignoter les LEDs en alternance.
Corrig: http://www.edurobot.ch/code/code2-2.txt
Exercice 3:
En observant le code ci-dessous, seras-tu capable de prdire ce qui va se passer?
void setup()
{
pinMode(10, OUTPUT);
pinMode(12, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(10, LOW);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(10, HIGH);
digitalWrite(12, HIGH);
delay(2000);
}
Envoie le code sur ton Arduino et vrifie si tu avais raison. Lien vers le code:

http://www.edurobot.ch

47

Arduino lcole
Les variables
D10

Code 3: faire clignoter une LED 10 fois


Lobjectif est de faire clignoter une LED 10 fois. Le montage est toujours le
mme:

Rsistance 220 OHms

Led

Copie le code suivant et excute-le dans ton Arduino.


/*
Code 3 - Edurobot.ch, destin au Diduino-Arduino
Objectif: faire clignoter 10 fois la LED monte sur le port 10
*/

Terre (Gnd)

//***** EN-TETE DECLARATIVE *****


// On dclare les variables, les constantes,...
byte compteur;

//On dfinit la variable "compteur"

//***** FONCTION SETUP = Code d'initialisation *****


// La fonction setup() est excute en premier et une seule fois, au dmarrage
du programme
void setup()
{
pinMode(10, OUTPUT);

// Initialise la broche 10 comme sortie

Serial.begin(9600);

// Ouvre le port srie 9600 bauds

// Excute le programme entre accolades en partant de zro et en incrmentant


chaque fois la valeur de +1: 0+1/2+1/3+1... jusqu ce que la variable
compteur soit gale 9 (plus petit que 10).
for(compteur=0 ; compteur<10 ; compteur++)
{
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);

//
//
//
//
//

dbut du programme excut 10 fois


allume la LED
attend 500ms
teint la LED
attend 500ms

}
}

// fin du programme excut 10 fois

void loop() {
}

// vide, car programme dj excut dans setup

Tlcharger le code: http://edurobot.ch/code/code3.txt


http://www.edurobot.ch

48

Arduino lcole
Dans notre code, nous devons compter de 0 10. Pour cela, nous devons nous souvenir du nombre de fois
que le code destin allumer la LED a t excut. A la 10me fois, le code doit sarrter.
Dans un microcontrleur, il y a plusieurs types de mmoire. Nous nous occuperons seulement de la
mmoire "vive" (RAM) et de la mmoire "morte" (EEPROM).

Une variable, qu'est ce que c'est ?


Imaginons un nombre dont nous devons nous souvenir. Ce nombre est stock dans un espace de la
mmoire vive (RAM) du microcontrleur. Chaque espace de stockage est identifi de manire unique.
Le nombre stock a la particularit de changer de valeur. Bizarre? Et bien pas tant que a, car une variable
est en fait le conteneur du nombre en question. Et ce conteneur va tre stock dans une case de la
mmoire. Si on matrialise cette explication par un schma, cela donnerait :
nombre variable mmoire
le symbole "" signifiant : "est contenu dans..."
Imaginons que nous stockons le nombre dans un container (la variable). Chaque container est lui, dpos
dans une case bien prcise, afin de le retrouver. Chaque variable est ainsi identifie par un nom.

Le nom d'une variable


Le nom de variable n'accepte que l'alphabet alphanumrique ([a-z], [A-Z], [0-9]) et _ (underscore)

http://www.edurobot.ch

49

Arduino lcole
Dfinir une variable
Imaginons que nous voulons stocker le nombre 4 dans une variable. Il tiendrait dans un petit carton. Mais on
pourrait le stocker dans un grand container. Oui... mais non! Un microcontrleur, ce n'est pas un ordinateur
3GHz multicore, 8Go de RAM ! Ici, il sagit d'un systme qui fonctionne avec un CPU 16MHz (soit 0,016
GHz) et 2 Ko de SRAM pour la mmoire vive. Il y a donc au moins deux raisons font qu'il faut choisir ses
variables de manire judicieuse :
1. La RAM n'est pas extensible, quand il y en a plus, y en a plus! Dans un mme volume, on peut stocker
bien plus de petits cartons de que gros containers. Il faut donc optimiser la place.
2. Le processeur est de type 8 bits (sur un Arduino UNO), donc il est optimis pour faire des traitements sur
des variables de taille 8 bits, un traitement sur une variable 32 bits prendra donc (beaucoup) plus de
temps. Si les variables de la taille dun container sont sur 32 bits, autant prendre un carton qui noccupe
que 8 bits quand la variable tient dedans!
Type de
variable

Type de nombre
stock

Valeurs maximales du nombre stock

Nombre sur X bits

Nombre doctets

int

entier

-32768 +32767

16 bits

2 octets

long

entier

-2147483648 +2147483647

32 bits

4 octets

char

entier

-128 +127

8 bits

1 octet

float

dcimale

-3.4 x 1038 +3.4 x 1038

32 bits

4 octets

double

dcimale

-3.4 x 1038 +3.4 x 1038

32 bits

4 octets

Prenons maintenant une variable que nous allons appeler x. Par exemple, si notre variable "x" ne prend
que des valeurs dcimales, on utilisera les types int, long, ou char. Si maintenant la variable "x" ne dpasse
pas la valeur 64 ou 87, alors on utilisera le type char.
char x = 0;
Si en revanche x = 260, alors on utilisera le type suprieur (qui accepte une plus grande quantit de
nombre) char, autrement dit int ou long.
int x = 0;
Si prsent notre variable "x" ne prend jamais une valeur ngative (-20, -78, ...), alors on utilisera un type
non-sign. C'est dire, dans notre cas, un char dont la valeur n'est plus de -128 +127, mais de 0 255.
Voici le tableau des types non signs, on repre ces types par le mot unsigned (de l'anglais : non-sign) qui
les prcde :
Type de variable

Type de nombre
stock

unsigned char

entier non ngatif

unsigned float
unsigned double

Nombre sur X bits

Nombre doctets

0 255

8 bits

1 octet

entier non ngatif

0 65535

16 bits

2 octets

entier non ngatif

0 4294967295

32 bits

4 octets

http://www.edurobot.ch

Valeurs maximales du nombre stock

50

Arduino lcole
Une des particularits du langage Arduino est qu'il accepte un nombre plus important de types de variables,
listes dans ce tableau:
Type de variable

Type de nombre
stock

byte

entier non ngatif

word
boolean

Valeurs maximales du nombre stock

Nombre sur X bits

Nombre doctets

0 255

8 bits

1 octet

entier non ngatif

0 65535

16 bits

2 octets

entier non ngatif

01

1 bits

1 octets

Lincrmentation
Il est possible dappliquer des variables diverses oprations mathmatiques. Commenons tout de suite
par un petit exemple: lincrmentation. Il sagit simplement dadditionner 1 la variable. A chaque fois quon
rpte le code, on ajoute 1 la variable.
Cela se fait grce ce code (var tant une variable choix):
var++;
var++; revient crire : "var = var + 1;".

Analyse du code 20
Revenons notre code et analysons-le.
La ligne byte compteur; permet de crer une variable appele compteur. Byte indique le type de la variable,
c'est--dire le type de donnes que l'on pourra stocker dans cette variable. Comme nous lavons dj vu, le
type byte permet de stocker des valeurs comprises entre 0 et 255.
La ligne for(compteur=0; compteur<10; compteur++) sert faire varier la variable compteur de 0 9 (en
l'augmentant chaque fois de 1: c'est ce que fait l'instruction compteur++)

Regardons cette ligne dun peu plus prt:


for(compteur=0; compteur<10; compteur++)
Le for est une structure de contrle. Il sagit de blocs dinstructions qui sexcutent en fonction dun certain
nombre de conditions. Ainsi, for sert excuter un code un nombre dfini de fois. Cest donc exactement ce
quil nous faut.

20

Source: http://mediawiki.e-apprendre.net/index.php/Dcouverte_des_microcontrleurs_avec_le_Diduino

http://www.edurobot.ch

51

Arduino lcole
La suite, savoir compteur=0 ; compteur<10 ; compteur++ doit tre compris comme suit: la valeur de la
variable compteur est comprise entre 0 et 9 (<10 signifie plus petit que 10) et ajoute un la valeur de
compteur (cest le compteur++).
En conclusion, cette ligne signifie:
Au commencement, ta variable compteur est gale zro. Tu vas excuter le code en boucle. A chaque
fois, tu ajoute +1 ta variable compteur, jusqu ce que tu arrives 9. A ce moment, tu tarrtes.
Le code qui est excut chaque fois est celui qui est compris jusqu laccolade }. Dans notre cas, cest e
code suivant qui est excut 10 fois:
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(500);

//
//
//
//

allume
attend
teint
attend

la LED
500ms
la LED
500ms

Que se passe-t-il si tu remplaces la ligne for(compteur=0 ; compteur<10 ; compteur++) par


for(compteur=0 ; compteur<20 ; compteur++) ?
Que se passe-t-il si tu remplaces la ligne for(compteur=0 ; compteur<10 ; compteur++) en
for(compteur=15 ; compteur<20 ; compteur++) ?

Faire clignoter deux LED 20 fois


Ralise le montage suivant:

Modifie ton code pour que les deux LED clignotent en mme temps vingt fois.
Tu trouveras le corrig ici: http://edurobot.ch/code/code4-1.txt
Modifie maintenant le programme pour que les LED clignotent en alternance vingt fois.
Tu trouveras le corrig ici: http://edurobot.ch/code/code4-2.txt
Comment faire pour augmenter la frquence du clignotement?
Tu trouveras une vido dexemple cette adresse: http://00.lc/cq

http://www.edurobot.ch

52

Arduino lcole
Dfinir les broches du microcontrleur
Jusqu maintenant, nous avons identifi les broches du microcontrleur laide de leurs numros, comme
dans lexemple suivant: pinMode(10, OUTPUT);. Cela ne pose pas de problme quand on a une ou deux
LEDs connectes. Mais ds quon a des montages plus comliqus, cela devient difficile de savoir qui fait
quoi. Il est donc possible de renommer chaque broche du microcontrleur.
Premirement, dfinissons la broche utilise du microcontrleur en tant que variable.
const int led_rouge = 2;
Le terme const signifie que l'on dfinit la variable comme tant constante. Par consquent, on change la
nature de la variable qui devient alors constante.
Le terme int correspond un type de variable. Dans une variable de ce type, on peut stocker un nombre
allant de -2147483648 +2147483647 ! Cela va suffire! Ainsi, la broche 2 sappellera led_rouge.
Nous sommes donc en prsence d'une variable, nomme led_rouge, qui est en fait une constante, qui peut
prendre une valeur allant de -2147483648 +2147483647. Dans notre cas, cette constante est assigne au
chiffre 2.
Concrtement, quest-ce que cela signifie? Observons la diffrence entre les deux codes.

Broche non-dfinie
void setup() {
pinMode(13, OUTPUT);
// Initialise la broche 13 comme sortie
Serial.begin(9600);
}
void loop() {
digitalWrite(13, HIGH);
// allume la LED
delay(500);
// attend 500ms
digitalWrite(13, LOW);
// teint la LED
delay(500);
// attend 500ms
}

Broche dfinie
const int led_rouge = 13;
//La broche 13 devient led_rouge
void setup() {
pinMode(led_rouge, OUTPUT);
// Initialise led_rouge comme broche de sortie
Serial.begin(9600);
}
void loop() {
digitalWrite(led_rouge, HIGH);
// allume la LED
delay(500);
// attend 500ms
digitalWrite(led_rouge, LOW);
// teint la LED
delay(500);
// attend 500ms
}

On peut trouver que de dfinir les broches allonge le code. Mais quand nous aurons de nombreuses
broches en fonction, cela nous permettra de les identifier plus facilement. Ainsi, si nous avons plusieurs
LED, nous pouvons les appeler Led1, Led2, Led3,... et si nous utilisons des LED de plusieurs couleurs, nous
pourrons les appeler rouge, vert, bleu,...
Enfin (et surtout!), si on veut changer la broche utilise, il suffit de corriger la variable au dpart, sans devoir
corriger tout le code.

http://www.edurobot.ch

53

Arduino lcole
valuation: K2000
Introduction
Les exploits dun chevalier solitaire, dans un monde dangereux; le chevalier et sa monture...
Il y longtemps de cela, du temps de ma jeunesse (soit peu de temps aprs la disparition du dernier
mammouth), un hros hantait la petite lucarne: Michael Knight et sa voiture parlante, Kitt.
Je tinvite revoir le gnrique de cette srie danthologies (en terme de mauvais got capillaire) ici: http://
www.youtube.com/watch?v=PI_1sNt1cl8 21
Comme tu peux le voir, la voiture possde sur son capot des LED qui simulent un mouvement de droite
gauche et de gauche droite (avec un magnifique son du style fschouiiii-fschouiiiii).

Ta mission, si tu lacceptes (mais tu as intrt... cest quand mme une valuation!), est de reproduire cet
accessoire indispensable toute automobile qui se respecte: le bandeau de LED... mais sans le son (le
mauvais got des limites).
Pour cela, tu auras besoin de 6 LED rouges ( priori... mais tout est possible) et de 6 rsistances (des 220
470 feront parfaitement laffaire).
Pour taider, nhsite pas regarder cette petite vido dexemple: http://00.lc/k2000
Corrig22: http://www.edurobot.ch/code/k2000.pdf

21

Lien court: http://00.lc/cp

22

Fichier protg par un mot de passe. Pour lobtenir: info [at] edurobot.ch

http://www.edurobot.ch

54

Arduino lcole
tape1: Schmas
Ralise le plan du montage que tu vas utiliser:

Ralise maintenant le schma lectronique du montage:

D....
D....
D....
D....
D....
D....

http://www.edurobot.ch

55

Arduino lcole
tape2: Programme
Rdige ton programme ici:

http://www.edurobot.ch

56

Arduino lcole
Les feux de circulation
Lobjectif est de crer deux feux de circulation et de les faire fonctionner de manire synchrone.
Voici les phases de deux feux de circulation que tu dois recrer:

Feu 1
phases

1 2 3 4

Feu 2
60 sec

5 sec

60 sec

5 sec

Tu peux visionner une vido de prsentation ici: http://00.lc/ct

tablis la liste des composants que tu auras besoin pour raliser le projet:

http://www.edurobot.ch

57

Arduino lcole
tape1: Schmas
Ralise le plan du montage que tu vas utiliser:

Ralise maintenant le schma lectrique du montage:

D....
D....
D....
D....
D....
D....

http://www.edurobot.ch

58

Arduino lcole
tape2: Programme
Rdige ton programme ici:

http://www.edurobot.ch

59

Arduino lcole
Corrig
Tu trouveras le corrig ladresse suivante: http://edurobot.ch/code/code5.txt

Variantes
Variante 1
Il y a souvent un dcalage entre le passage dun feu au rouge et le passage au vert de lautre feu. Cest en
particulier le cas pour les feux de chantier. Cela permet aux voitures encore engages dans la zone de
chantier de la quitter, avant de laisser la place aux voitures venant en face.
Dcrire les phases des feux et les programmer pour tenir compte du dlai.

Variante 2
Intgrer un troisime feu, qui passe du rouge au vert en alternance avec les deux autres feux.
Raliser le schma lectronique et programmer les feux.

Variante 3
Raliser les feux pour un carrefour:

Source: http://minne.romain.free.fr/MPI/tp10_carrefour/Gestion_d_un_carrefour.html

http://www.edurobot.ch

60

Arduino lcole
Leon 6: Input
Le bouton poussoir
Le bouton poussoir normalement ouvert (NO)
Cest le bouton le plus frquemment rencontr:
- Relch : le courant ne passe pas, le circuit est dconnect ; on dit
que le circuit est ouvert.
- Appuy : le courant passe, on dit que le circuit est ferm.
Habituellement le bouton poussoir a deux broches, mais en gnral
ils en ont 4 relies deux deux.

Le bouton poussoir normalement ferm (NF)


Ce type de bouton est l'oppos du type prcdent, c'est--dire que
lorsque le bouton est relch, il laisse passer le courant. Et
inversement :
- Relch : le courant passe, le circuit est connect ; on dit que le circuit est ferm.
- Appuy : le courant ne passe pas, on dit que le circuit est ouvert.

Les interrupteurs
la diffrence d'un bouton poussoir, l'interrupteur agit comme une
bascule. Un appui ferme le circuit et il faut un second appui pour l'ouvrir
de nouveau. Il possde donc des tats stables (ouvert ou ferm). Nous en
rencontrons tous les jours lorsque nous allumons la lumire.

Bouton poussoir NO

http://www.edurobot.ch

Bouton poussoir NF

Interrupteur

61

Arduino lcole
Exercice 1: allumons cette LED
Ralise le circuit suivant:

Lorsquon appuie sur le bouton poussoir, on ferme le circuit. Le courant passe alors et la LED sallume.

http://www.edurobot.ch

62

Arduino lcole

Exercice 2: mais par o passe le courant?


Ralise le circuit suivant:

Il y a plus de rsistance au passage du courant lorsquil traverse une LED quun bouton poussoir. Or, le
courant passera l o il rencontrera le moins de rsistance.
Cest pourquoi, quand le bouton poussoir est relch, le courant passe par la LED. Mais lorsque tu appuies
sur le bouton, la LED steint. En effet, le courant prfre passer au travers du bouton poussoir.

http://www.edurobot.ch

63

Arduino lcole
Protger lArduino
Jusqu maintenant, nous nous sommes toujours contents de faire circuler du courant du microcontrleur
la masse.
Au lieu dutiliser les broches du microcontrleur seulement sous forme de sortie (OUTPUT), nous allons
aussi les utiliser sous forme dentre (INPUT); cest--dire quau lieu dtre raccorde la masse, la broche
sera raccorde au +5V. Tout se passera bien, si au niveau du programme, la broche est configure comme
input. Mais si elle devait tre configure en output par erreur, il est presque certain que le microcontrleur
finira immdiatement au paradis des puces lectroniques grilles.
Ainsi, pour viter de condamner notre microcontrleur la chaise lectrique, nous allons devoir le protger.
Cela peut se faire en connectant sur la broche du microcontrleur utilis comme input une rsistance dune
centaine dOhms. Comme le Diduino est fourni avec des rsistances de 220 , cest celle que nous
utiliserons.

ATTENTION!
Lorsque vous branchez le Diduino lordinateur, le dernier programme reu est excut. Avant de
commencer un nouveau montage, il est plus que conseill denvoyer un programme dinitialisation, du
modle de celui-ci:
//Programme vide dinitialisation
void setup() {
}
void loop() {
}

Maintenant que ce point est rgl, voyons comment utiliser le bouton poussoir avec le microcontrleur.

http://www.edurobot.ch

64

Arduino lcole
Rsistance Pull-Down / Pull-Up
Circuit avec une une rsistance pull-down
Observons ce schma:

Lorsque lon presse le bouton poussoir, on envoie +5 Volts sur D4, qui sera interprt comme un 1.
Lorsquon relche le bouton, il ny a plus de courant qui arrive sur D4, ce qui sera interprt comme un 0. On
a donc un signal binaire: allum/teint (on/off).
Ce montage contient une rsistance de 10 k (soit 10000 ), quon appelle pull-down (littralement tirer-enbas). Cette rsistance permet de tirer le potentiel vers le bas (pull-down). En franais, on appelle aussi ceci
un rappel au moins.
En effet, contrairement au cas thorique, fermer ou ouvrir un circuit (via un interrupteur ou un bouton
poussoir) ne gnre pas forcment un signal clair:

Le circuit non connect la source peut agir comme une antenne dans un environnement pollu d'ondes
lectromagntiques (proches des moteurs par exemple). Cela va gnrer dans le circuit un courant qui
peut tre interprt comme un signal.
Il peut rester dans un circuit rcemment ouvert un niveau d'nergie. Cela provoque des cas
d'indtermination. Le signal qui a t coup peut tre considr comme encore actif par un
microcontrleur.

Le but d'une rsistance de pull-down est donc dvacuer les courants vagabonds et de donner un
signal clair.
Si on presse le bouton, 5 Volts sont alors appliqus sur l'entre. Le courant va prendre le chemin le plus
simple, soit par la rsistance de 220 et finit par arriver sur D4. Si on relche le bouton, la rsistance pulldown ramne l'entre la masse (puisquelle est connecte la masse).

http://www.edurobot.ch

65

Arduino lcole
Circuit avec une rsistance pull-up
Observons maintenant ce schma:

Si on le compare au schma dun circuit avec une rsistance pull-down, on constate une inversion entre la
terre et le +5V.
En effet, lorsque le circuit est ouvert, une tension de +5V est applique lentre D4.
Lorsquon appuie sur le bouton poussoir, le courant lectrique va passer par le chemin offrant le moins de
rsistance, soit directement par la masse (Gnd), sans passer par lentre D4.
Le fonctionnement est donc invers par rapport la rsistance pull-down.

Rsistance pull-down ou pull-up?


A notre niveau, la seule chose qui va changer entre une rsistance pull-down et une rsistance pull-up est la
lecture de linformation:
Avec une rsistance pull-down, par dfaut, lentre sur la broche est gale 0.
Avec une rsistance pull-up, par dfaut, lentre sur la broche est gale 1.
Dans le code if (digitalRead(bouton) == 1 ) , sera respectivement la valeur dentre lorsque le
circuit est ferm (pull-down) ou ouvert (pull-up).

http://www.edurobot.ch

66

Arduino lcole
Exercice 3: montage avec rsistance pull-down (rappel au moins)23
Ralisons maintenant le circuit suivant:

Gnd

+5V
D4

D12

Indique sur le schma ci-dessus o se trouve la


rsistance pull down et la rsistance de protection du
microcontrleur

Lorsquon appuie sur le bouton poussoir, La LED doit sallumer. Et naturellement, lorsquon relche le bouton
poussoir, la LED steint.
Nous allons utiliser une nouvelle instruction: if ... else (si ... sinon). Cest donc une condition.
Voici ce qui va se passer:
Si le bouton poussoir est press (digitalRead(4) == 1), allumer la LED (digitalWrite(12, HIGH)), sinon
teindre la LED (digitalWrite(12, LOW)).
Linstruction == vrifie si deux expressions sont gales. Si elles le sont, alors le rsultat sera vrai (true) sinon
le rsultat sera faux (false).

23

Plus dinformations ici: http://00.lc/dn

http://www.edurobot.ch

67

Arduino lcole
Observons maintenant le code:
/*
Code 7 - Edurobot.ch, destin au Diduino
Allume LED en fonction de l'tat du bouton poussoir
*/

// On dclare les variables


const int bouton = 4;
const int led = 12;

// la broche 4 devient bouton


// la broche 12 devient led

void setup()
{
pinMode(bouton, INPUT);

// Initialise la broche 4 comme entre

pinMode(led, OUTPUT);

// Initialise la broche 12 comme sortie

Serial.begin(9600);

// Ouvre le port srie 9600 bauds

}
void loop()
{
// Si bouton poussoir appuy
if (digitalRead(bouton) == 1 )
{
digitalWrite(led, HIGH);
}
// Sinon
else
{
digitalWrite(led, LOW);
}

//teste si le bouton a une valeur de 1

// allume la LED

//teste si le bouton a une valeur de 0


// teint la LED

Tlcharger le code: http://www.edurobot.ch/code/code7.txt

http://www.edurobot.ch

68

Arduino lcole
Analysons le code:
const int bouton = 4;
const int led = 12;

// la broche 4 devient bouton


// la broche 12 devient led

On renomme les broches 4 et 12 respectivement bouton et led. Cela facilitera la lecture du code.
void setup() {
// Initialise la broche 4 comme entre
pinMode(bouton, INPUT);
// Initialise la broche 12 comme sortie
pinMode(led, OUTPUT);
// Ouvre le port srie 9600 bauds
Serial.begin(9600);
}
Voil, maintenant notre microcontrleur sait qu'il y a quelque chose de connect sur sa broche 4 et quelle
est configure en entre (input). De mme, la broche 12 est configure en sortie (output).
Maintenant que le bouton est paramtr, nous allons chercher savoir quel est son tat (appuy ou
relch).
Si le microcontrleur dtecte une diffrence de potentiel de +5V sa broche 4, alors il stockera une valeur
de 1.
Dans le cas contraire (diffrence de potentiel de 0V), il stockera une valeur de 0.
Pour lire ltat de la broche 4, nous allons utiliser lexpression digitalRead. Ainsi:
if (digitalRead(bouton) == 1 )
digitalWrite(led, HIGH);
// allume la LED
doit se comprendre comme:
si la broche 4 a une valeur gale 1
alors la broche 12 est en position haute = LED allume
et les lignes:
else {
digitalWrite(led, LOW);

// teint la LED

doivent se comprendre comme:


sinon (cest dire: la broche 4 a une valeur gale 0)
la broche 12 est en position basse = LED teinte
Voici une petite vido qui prsente lactivit: http://00.lc/cx

http://www.edurobot.ch

69

Arduino lcole
Une petite variation de code
Le code prcdent est simple, mais manque un peu de finesse; un peu comme un barbare avec une hache
deux mains dans une rception de Monsieur lAmbassadeur. Voici donc une autre solution:
/*
Code 8 - Edurobot.ch, destin au Diduino
Allume LED en fonction de l'tat du bouton poussoir
*/
const int bouton = 4;
const int led = 12;
int etatbouton;

// la broche 4 devient bouton


// la broche 12 devient led
// variable qui enregistre ltat du bouton

void setup()
{
pinMode(bouton, INPUT);
pinMode(led, OUTPUT);
etatbouton = LOW;

// Initialise le bouton comme entre


// Initialise la led comme sortie
// Initialise ltat du bouton comme relch

Serial.begin(9600);

// Ouvre le port srie 9600 bauds

}
void loop()
{
etatbouton = digitalRead(bouton); //On mmorise ltat du bouton
if(etatbouton == LOW) //teste si le bouton a un niveau logique BAS
{
digitalWrite(led,LOW); //la LED reste teinte
}
else //teste si le bouton a un niveau logique diffrent de BAS (donc HAUT)
{
digitalWrite(led,HIGH); //le bouton est appuy, la LED est allume
}
}
Tlcharger le code: http://www.edurobot.ch/code/code8.txt

Pour commencer, nous allons crer une variable que nous choisirons dappeler etatbouton. Elle servira
stocker ltat du bouton (logique, non?):
int etatbouton;
On inscrit ltat du bouton dans la variable de cette manire, avec la fonction digitalRead:
etatbouton = digitalRead(bouton);

http://www.edurobot.ch

70

Arduino lcole
Il ne nous reste plus qu appeler ltat du bouton, stock dans la variable etatbouton, et lui faire passer un
petit test avec if... else (si... sinon):
Si (if) ltat du bouton est LOW (cest--dire = 0), alors la LED est LOW (teinte). Sinon (else), la LED est
HIGH (en effet, si ltat du bouton nest pas LOW, il ne peut tre que HIGH, soit allume...)
Et cela donne donc ceci:
if(etatbouton == LOW) //teste si le bouton a un niveau logique BAS
{
digitalWrite(led,LOW); //la LED reste teinte
}
else //teste si le bouton a un niveau logique diffrent de BAS (donc HAUT)
{
digitalWrite(led,HIGH); //le bouton est appuy, la LED est allume
}
Rappelons que linstruction == vrifie si deux expressions sont gales.

Petits exercices: bouton poussoir et LED qui clignote


Imaginons maintenant le cas de figure suivant: avec le mme circuit: lorsque nous appuyons sur le bouton,
la LED commence clignoter.
Modifie le programme pour arriver ce rsultat.
Tlcharger la rponse: http://www.edurobot.ch/code/code10.txt

Et maintenant, modifie le programme pour que lorsque nous branchons le Diduino lordinateur la LED
sallume, et reste allume. Par contre, quand nous appuyons sur le bouton, la LED clignote.
Tlcharger la rponse: http://www.edurobot.ch/code/code11.txt

http://www.edurobot.ch

71

Arduino lcole
Evaluation: vers linfini et au-del!
Bienvenue bord, Astronaute! Lheure est grave! La galaxie est menace par les infmes VoRteX. Pour la
sauver, tu dois concevoir un pistolet protoplasmique dodcaneutrino.
Voici le montage que tu devras raliser (tu peux carter LEDs pour avoir plus de place):

Gnd

+5V
D4

D8 D10 D12

Son fonctionnement est on ne peut plus simple: quand le pistolet protoplasmatique dodcaneutrino est
sous tension, une LED verte est allume, pour montrer que tout fonctionne parfaitement. Quand on appuie
sur le bouton, La LED verte steint et les LEDs rouges et bleues se mettent clignoter alternativement,
gnrant un plasma positronique.

Etape 1: les schmas


Commence par raliser le schma lectronique:

3V3 5V

Vin
Power

D13

RST

D12

AREF

D11

PWM

D10

PWM

D9

PWM

IO REF

Arduino

N/C
Digital Input/Output

D8

A0
A1

A3
A4

D6

PWM

D5

PWM

D4
D3

Analog Input

A2

D7

PWM

D2
D1
D0

TX
RX

SCL

A5
GND

http://www.edurobot.ch

SDA

72

Arduino lcole

Sur ton schma, entoure en rouge la rsistance pull down.


A quoi sert-elle?!_______________________________________________________________________

Observe la vido suivante: http://00.lc/d2


Liste la ou les broches qui sont programmes en INPUT et celles qui le sont en OUTPUT:
INPUT

http://www.edurobot.ch

OUTPUT

73

Arduino lcole
tape2: Programme
Rdige ton programme ici:

Tu peux naturellement aussi limprimer et le joindre ton valuation.

http://www.edurobot.ch

74

Arduino lcole

Leon 7: le barregraphe
Introduction
Un barregraphe est un afficheur qui indique une quantit, provenant d'une information quelconque (niveau
d'eau, puissance sonore, etc.), sous une forme lumineuse. Le plus souvent, on utilise des LEDs alignes en
guise d'affichage.

Lobjectif de cet exercice est de raliser un barregraphe de 4 LEDs, avec deux boutons poussoirs. Lun deux
servira incrmenter la valeur sur le barregraphe ( savoir augmenter le nombre de LEDs allumes), alors
que lautre servira le dcrmenter.

Schmas
Voici le schma du circuit construire:

Arduino1
LED1

3V3 5V

LED2

LED3

LED4

Vin
Power

4 LEDs choix

D13

RST
AREF

D12

A0
Analog Input

A4

PWM

D10

PWM

D9

PWM

D8
D7
D6

PWM

D5

PWM

D3

PWM

D2
D1
D0

A5
GND

http://www.edurobot.ch

Rsistances
de protection

R7
100

D4

A1

A3

D11

5V

Digital Input/Output

Arduino

A2

R1
220
R2
220
R3
220
R4
220

TX
RX

R8
100

R5
10k

R6
10k

Rsistances pull-down

75

Arduino lcole
Comme on peut lobserver, les rsistances R5 et R6 sont montes en pull-down (rappel au moins). Ce circuit
pourrait tout fait tre mont avec des rsistances pull-up.

Normalement, ce stade, nous devrions tre capables dexcuter le montage laide du schma
lectronique!

+5V
Gnd
Gnd
+5V
Gnd
Reset

A19
A18
A17
A16
A15
A14

Dans le cas contraire, voici le montage raliser:

+5V

+5V

D8
D9
D10
D11
D12
D13
Gnd
+5V

Gnd

D0
D1
D2
D3
D4
D5
D6
D7

Gnd

Il ne faut pas hsiter carter un peu plus les LEDs si ncessaire!

Une vido prsentant le barregraphe est visible ici: http://www.edurobot.ch/?p=1316


Le code complet est ici: http://www.edurobot.ch/code/code13.txt

http://www.edurobot.ch

76

Arduino lcole
Le code
Analysons le code, maintenant:

En se rfrant au schma de montage, on dclare les constantes pour chaque broche: les boutons
poussoirs sont connects sur les broches 2 et 3, alors que les LEDs sont connectes aux broches 8 11.
/*
Dclaration des constantes pour les noms des broches
*/
const int
allums
const int
allums
const int
const int
const int
const int

btn_minus = 2;

//Bouton 1 pour dcrmenter le nombre de LEDs

btn_plus = 3;

//Bouton 2 pour incrmenter le nombre de LEDs

led_0
led_1
led_2
led_3

=
=
=
=

8;
9;
10;
11;

//Led
//Led
//Led
//Led

0
1
2
3

On cr ensuite les variables ncessaires et les initialise leur tat.


/*
Dclaration des variables utilises pour le comptage et le dcomptage
*/
int nombre_led = 0;
//le nombre qui sera incrment et dcrment
int etat_bouton;
//lecture de l'tat des boutons (un seul la fois
mais une variable suffit; en effet, il n'est pas prvu d'appuyer sur les deux
boutons simultanment)
int memoire_plus = LOW;
//tat relch par dfaut pour le bouton 2
int memoire_minus = LOW; //tat relch par dfaut pour le bouton 1

On initialise ensuite les broches, selon quil sagit des entres (les boutons) ou des sorties (les LEDs).
/*
Initialisation des broches en entre/sortie: entres pour les boutons, sorties
pour les LEDs
*/
void setup()
{
pinMode(btn_plus, INPUT);
pinMode(btn_minus, INPUT);
pinMode(led_0, OUTPUT);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
}
http://www.edurobot.ch

77

Arduino lcole

Allons-y pour la partie du programme dans la boucle sans fin (loop)


On utilise digitalRead pour lire ltat du bouton (btn_plus) et inscrire cet tat dans la variable etat_bouton.
void loop()
{
//lecture de l'tat du bouton d'incrmentation (on lit l'tat du btn_plus et
on l'inscrit dans la variable etat_bouton)
etat_bouton = digitalRead(btn_plus);

Maintenant, a devient srieux. Regardons ce qui suit:


//Si le bouton a un tat diffrent que celui enregistr ET que cet tat est
"appuy"
if((etat_bouton != memoire_plus) && (etat_bouton == HIGH))
Traduisons cela en franais: si ltat du bouton 2 est diffrent de celui enregistr, et que quelquun appuie
sur le bouton, alors...
Le != signifie est diffrent de (teste la diffrence entre deux variables) et loprateur logique && signifie ET
( Pour tre prcis, nous avons: si ... et... avec le if ... &&... Exemple: si il fait beau et chaud, alors on va la
plage).
Rappelons-nous maintenant de lopration ++, qui incrmente une variable (variable = variable + 1, cest-dire; on ajoute chaque fois 1 la variable). Dans notre cas, il sagit de la valeur de la variable nombre_led
quon incrmente.
{
nombre_led++; //on incrmente la variable qui indique combien de LEDs
devrons s'allumer
}
Et zou! On enregistre le nouvel tat du bouton pour la suite!
memoire_plus = etat_bouton; //on enregistre l'tat du bouton pour le tour
suivant.
Maintenant, on recommence le tout, mais pour le bouton 1.
//et maintenant pareil pour le bouton qui dcrmente
etat_bouton = digitalRead(btn_minus); //lecture de son tat
//Si le bouton a un tat diffrent que celui enregistr ET que cet tat est
"appuy"
if((etat_bouton != memoire_minus) && (etat_bouton == HIGH))
{
nombre_led--; //on dcrmente la valeur de nombre_led
}
memoire_minus = etat_bouton; //on enregistre l'tat du bouton pour le tour
suivant
http://www.edurobot.ch

78

Arduino lcole

Nous allons maintenant limiter le nombre de LEDs connecter. En effet, dans notre cas, nous avons 4
LEDs. Alors si on appuie 10 fois sur le bouton 2, cela nallumera que les 4 LEDs.
//on applique des limites au nombre pour ne pas dpasser 4 ou 0 (puisqu'on a
4 LEDs)
if(nombre_led > 4)
{
nombre_led = 4;
}
Traduisons: si on appuie plus de 4 fois sur le bouton, le rsultat sera gal 4
Mme chose maintenant pour le bouton 1.
if(nombre_led < 0)
{
nombre_led = 0;
}
Maintenant, nous devons grer lallumage des LEDs. Pour simplifier le code, on va crer une fonction qui
servira grer laffichage. Nous allons appeler cette fonction affiche, avec un paramtre int valeur_recue.
Ce paramtre reprsente le nombre ! afficher.
//On cr une fonction affiche() pour l'affichage du rsultat
//on lui envoie alors en paramtre la valeur du nombre de LED clairer
affiche(nombre_led);
}
void affiche(int valeur_recue)
On commence dabord par teindre toutes les LEDs.
{
//on teint toutes les leds
digitalWrite(led_0, LOW);
digitalWrite(led_1, LOW);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);

Si la fonction reoit le nombre 1, on allume la LED 1. Si elle reoit le nombre 2, elle allume la LED 1 et 2. Si
elle reoit 3, elle allume la LED 1, 2 et 3. Enfin, si elle reoit 4, alors elle allume toutes les LEDs:
//Puis on les allume une une
if(valeur_recue >= 1)
gale 1..."
{
digitalWrite(led_0, HIGH);
}
http://www.edurobot.ch

// "si la valeur reue est plus grande ou


// "on allume la LED 0

79

Arduino lcole
if(valeur_recue >= 2)
// "si la valeur reue est plus grande ou
gale 2..."
{
digitalWrite(led_1, HIGH);
// "on allume la LED 1 (sous-entendu que
la LED 0 est allume, puisque la valeur est plus grande que 1)
}
if(valeur_recue >= 3)
// "si la valeur reue est plus grande ou
gale 3..."
{
digitalWrite(led_2, HIGH);
// "on allume la LED 2
}
if(valeur_recue >= 4)
// "si la valeur reue est plus grande ou
gale 4..."
{
digitalWrite(led_3, HIGH;
// "on allume la LED 3
}
}
!
Le symbole >= signife: ...est suprieur ou gal .... Il sagit de tester la supriorit ou l'galit d'une variable
par rapport une valeur. Ainsi, dans:
if(valeur_recue >= 4)
{
digitalWrite(led_3, HIGH);
}

// "on allume la LED 3

Il faut lire: si la variable valeur_recue est suprieure ou gale 4, alors on allume la LED 3.

http://www.edurobot.ch

80

10 SEGMENT BAR GRAPH ARRAY

Arduino lcole
Variation: Le barregraphe 10 LEDs

DC-7G3EWA

GREEN
HIGH EFFICIENCY RED

Features

Description

SUITABLE FOR LEVEL INDICATORS.

The Green source color devices are made with Gallium

LOW CURRENT OPERATION.

Phosphide Green Light Emitting Diode.

EXCELLENT ON/OFF CONTRAST.

The High Efficiency Red source color devices are

WIDE VIEWING ANGLE.

made With Gallium Arsenide Phosphide on Gallium

END STACKABLE.

Phosphide Orange Light Emitting Diode.

MECHANICALLY
RUGGED.
Il existe des barregraphes intgrants 10 LEDs24. On peut
les utiliser
en remplacement des 4 LEDs du
BI-COLOR VERSION AVAILABLE.
prcdent montage.
STANDARD : GRAY FACE, WHITE SEGMENT.
Rfrences utilises dans cet exercice: Kingbright DC-10EWA ou DC7G3EWA.

Package Dimensions & Internal Circuit Diagram

Notes:
1. All dimensions are in millimeters (inches), Tolerance is 0.25(0.01")unless otherwise noted.
2. Specifications are subject to change without notice.

SPEC NO: DSAE1362

Dun ct se trouvent les cathodes, de lautre les anodes.APPROVED:


DansJ. Lu
notre cas, les anodes sont du ct o se trouvent les
inscriptions.

REV NO: V.1

DATE: APR/22/2004

CHECKED: Allen Liu

DRAWN: Y.W.WANG

PAGE: 1 OF 4

Le montage dun tel barregraphe sur la platine


dexprimentation est possible, mais cela reste dlicat de cbler
10 LEDs. Lidal est dutiliser une platine dexprimentation
indpendante.
Le code, lui, doit tre adapt en consquence pour 10 LEDs.
Un exemple se trouve ici:

Code barregraphe 10 LEDs: http://www.edurobot.ch/code/code14.txt

24

On les trouve par exemple ici: http://00.lc/gy ou ici: http://00.lc/gz.

http://www.edurobot.ch

81

Arduino lcole
Variation: lafficheur numrique
Pour ce montage, nous allons utiliser un afficheur numrique LED.

La rfrence utilise ici est un afficheur anode commune Kingbright SA56-11 SRWA25.

D6
D7
D8
D9
g f
10 9

A
8

a
7

b
6

3
A

4
c

5
dot

MAN6960

220 Ohms

D10

220 Ohms

1
e

2
d

D11
D12
D13

Dans le cas dune anode commune, cette dernire


est branche sur le +5V. Les cathodes sont branches sur les broches.
Au niveau du code, cela implique que les LEDs sont allume en position LOW et teintes en position HIGH.
Avec un composant cathode commune, cest le contraire.
Dans notre exemple, nous allons commencer par allumer toutes les diodes, puis lune aprs lautre, pour les
identifier. On peut ensuite crire des chiffres.

25

Disponible ici: http://00.lc/hp

http://www.edurobot.ch

82

Arduino lcole
Identification de la position des LEDs
Le code suivant permet didentifier la position des LEDs en les allumant lune aprs lautre:
/*
Code 15 - Edurobot.ch, destin au Diduino
L'afficheur 7 segments
L'objectif est d'afficher des chiffres sur un afficheur 7 segments (7 digits).
Ce code a pour objectif d'allumer toutes les LEDS puis l'une aprs l'autre
pour identifier leur position.
*/
/*
Dclaration des constantes pour les noms des broches
*/
const
const
const
const
const
const
const
const

int
int
int
int
int
int
int
int

led_1
led_2
led_3
led_4
led_5
led_6
led_7
led_8

=
=
=
=
=
=
=
=

void setup()
{
pinMode(led_1,
pinMode(led_2,
pinMode(led_3,
pinMode(led_4,
pinMode(led_5,
pinMode(led_6,
pinMode(led_7,
pinMode(led_8,
}

6;
7;
8;
9;
10;
11;
12;
13;

//Led 1
//Led 2
//Led 3

OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);

/*
Et c'est parti pour le programme!
*/
void loop()
{
//on allume toutes les leds
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
http://www.edurobot.ch

LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
83

Arduino lcole
digitalWrite(led_7, LOW);
digitalWrite(led_8, LOW);
delay(1500);
//on teint toutes les leds
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,
delay(500);

HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);
HIGH);

//on allume une diode aprs l'autre pour identifier sa position


digitalWrite(led_1, LOW);
delay(1500);
digitalWrite(led_1, HIGH);
digitalWrite(led_2, LOW);
delay(1500);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, LOW);
delay(1500);
digitalWrite(led_3, HIGH);
digitalWrite(led_4, LOW);
delay(1500);
digitalWrite(led_4, HIGH);
digitalWrite(led_5, LOW);
delay(1500);
digitalWrite(led_5, HIGH);
digitalWrite(led_6, LOW);
delay(1500);
digitalWrite(led_6, HIGH);
digitalWrite(led_7, LOW);
delay(1500);
digitalWrite(led_7, HIGH);
digitalWrite(led_8, LOW);
delay(1500);
}
Le code est disponible ici: http://www.edurobot.ch/code/code15.txt

http://www.edurobot.ch

84

Arduino lcole
Lobjectif est didentifier chaque LED sur le schma ci-dessous:

Led_3
Led_2
Led_ 1
Led_5

8.

Led_4
Led_7
Led_8

Led_6
Voici donc, dans notre cas, les LEDs qui doivent tre allumes pour crire les chiffres suivants:

led_1

led_2

led_3

led_4

led_5

led_6

X
X

X
X

led_7

X
X

X
X

Nous nutilisons pas la led_8, qui reprsente un point.


Le code pour compter de 0 9! est ici: http://www.edurobot.ch/code/code16.txt

http://www.edurobot.ch

85

Arduino lcole
A ton tour:

Led_
Led_
Led_
Led_

8.

Led_
Led_
Led_

Led_
#

led_1

led_2

led_3

led_4

led_5

led_6

led_7

1
2
3
4
5
6
7
8
9
0

http://www.edurobot.ch

86

Arduino lcole
Il est aussi possible dcrire les lettres de lalphabet laide dun affichage 7 segments26 :

Exemple:
DIDUINO forever

videmment, cela reste artisanal; mais a peut donner des rsultats acceptables, comme on peut le voir ici:
http://00.lc/kj.

26

Source de la police: http://www.dafont.com/7led.font

http://www.edurobot.ch

87

Arduino lcole
Leon 8: apprendre compter
Objectif
Cette dernire leon va synthtiser tout ce que nous avons vu jusqu maintenant. Lobjectif est de raliser
un montage, avec deux boutons-poussoirs et un affichage 7 segments. Lun des boutons va servir
incrmenter les chiffres sur laffichage, et lautre les dcrmenter. Ainsi, en appuyant 6 fois sur le boutonpoussoir, les chiffres de 1 6 vont successivement safficher.

Schma lectronique du montage


10 kOhms

D3

100 Ohms
100 Ohms
D4

D6
D7
D8
D9
g f
10 9

A
8

a
7

b
6

3
A

4
c

5
dot

MAN6960

220 Ohms

D10

220 Ohms

1
e

2
d

D11
D12
D13

Sur ce schma, laffichage 7 segments est anode commune. Comme dhabitude, chaque bouton-poussoir
est dot dune rsistance pull-down de 1k ou 10k et dune rsistance de protection de linput de 100.
Il est possible de raliser ce montage sur la petite platine dexprimentation du Diduino; mais lidal est
dutiliser une platine plus grande. Cest ce que nous avons fait dans notre exemple, par souci de clart.

http://www.edurobot.ch

88

25

30

35

40

45

50

55

60

25

30

35

40

45

50

55

60

20

20

15

15

F G H

10

10

A B C D E

J
1

DIGITAL (PWM=

AREF

F G H

L
ICSP2

13

12

11

10

4
GND

RESET

ON
TM

Arduino

1
3

0
TX0

RX0

A B C D E

ICSP

TX
RX

ANALOG IN
POWER

IOREF

RESET

3V3

5V

GND

GND

VIN

A0

A1

A2

A3

http://www.edurobot.ch
A4

A5

Arduino lcole

Plan de montage

89

Arduino lcole

Le code
Le code peut tre tlcharg ladresse suivante: http://edurobot.ch/code/code16.txt
Il est trs similaire aux codes prcdents. La principale diffrence rside dans le if(valeur_recue ==
1) , qui dans ce cas signifie "si la valeur reue est gale 1, on allume les segments pour afficher le chiffre
1". Contrairement au if(valeur_recue >= 1), qui permet de cumuler lallumage des LEDs (1 LED pour
1, deux LEDs pour 2,...), lobjectif est ici de nallumer que les LEDs ncessaires laffichage du bon chiffre. Il
ne faudrait en effet pas quun 3 devienne ensuite un 9 au lieu dun 4, parce quon cumule les LEDs
allumes.
/*
Code 16 - Edurobot.ch, destin au Diduino
Apprendre compter
L'objectif est d'afficher des chiffres sur un afficheur 7 segments. Un
permet d'incrmenter le chiffre, l'autre de le dcrmenter.
On compte ainsi de 0 9 ou de 1 0.
*/
/*
Dclaration des constantes pour les noms des broches.
Notre affichage est un 8 segments, avec donc un
lutilisons pas, nous lavons quand mme cbl.
*/
const
const
const
const
const
const
const
const
const
const

int
int
int
int
int
int
int
int
int
int

btn_minus = 3;
btn_plus = 4;
led_1 = 6;
led_2 = 7;
led_3 = 8;
led_4 = 9;
led_5 = 10;
led_6 = 11;
led_7 = 12;
led_8 = 13;

point.

Mme

si

bouton

nous

ne

//Bouton 1 pour dcrmenter les chiffres


//Bouton 2 pour incrmenter les chiffres
//Led 1
//Led 2
//Led 3
//Led 4

/*
Dclaration des variables utilises pour le comptage et le dcomptage
*/
int nombre_led = 0;
//le nombre qui sera incrment et dcrment
int etat_bouton;
//lecture de l'tat des boutons (un seul la fois
mais une variable suffit; en effet, il n'est pas prvu d'appuyer sur les deux
boutons simultanment)
int memoire_plus = LOW;
//tat relch par dfaut pour le bouton 2
int memoire_minus = LOW; //tat relch par dfaut pour le bouton 1
/*

http://www.edurobot.ch

90

Arduino lcole
Inutilisation des broches en entre/sortie: entres pour les boutons, sorties
pour les LEDs
*/
void setup()
{
pinMode(btn_plus, INPUT);
pinMode(btn_minus, INPUT);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
pinMode(led_5, OUTPUT);
pinMode(led_6, OUTPUT);
pinMode(led_7, OUTPUT);
pinMode(led_8, OUTPUT);
}
/*
Et c'est parti pour le programme!
*/
void loop()
{
//lecture de l'tat du bouton d'incrmentation (on lit l'tat du btn_plus et
on l'inscrit dans la variable etat_bouton)
etat_bouton = digitalRead(btn_plus);
//Si le bouton a un tat diffrent que celui enregistr ET que cet tat est
"appuy"
if((etat_bouton != memoire_plus) && (etat_bouton == HIGH))
{
nombre_led++; //on incrmente la variable qui indique combien de LEDs
devrons s'allumer
}
memoire_plus = etat_bouton; //on enregistre l'tat du bouton pour le tour
suivant
//et maintenant pareil pour le bouton qui dcrmente
etat_bouton = digitalRead(btn_minus); //lecture de son tat
//Si le bouton a un tat diffrent que celui enregistr ET que cet tat est
"appuy"
if((etat_bouton != memoire_minus) && (etat_bouton == HIGH))
{
nombre_led--; //on dcrmente la valeur de nombre_led
}
memoire_minus = etat_bouton; //on enregistre l'tat du bouton pour le tour
suivant

http://www.edurobot.ch

91

Arduino lcole
//on applique
4 LEDs)
if(nombre_led
{
nombre_led
}
if(nombre_led
{
nombre_led
}

des limites au nombre pour ne pas dpasser 4 ou 0 (puisqu'on a


> 10)
= 10;
< 0)
= 0;

//On cr une fonction affiche() pour l'affichage du rsultat


//on lui envoie alors en paramtre la valeur du nombre de LED clairer
affiche(nombre_led);
}
void affiche(int valeur_recue)
{
//on teint toutes les leds
digitalWrite(led_1, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_3, HIGH);
digitalWrite(led_4, HIGH);
digitalWrite(led_5, HIGH);
digitalWrite(led_6, HIGH);
digitalWrite(led_7, HIGH);
digitalWrite(led_8, HIGH);
//Pour chaque chiffre, le plus simple est de lister toutes les LEDs
//et de leur attribuer la valeur voulue
if(valeur_recue == 1)
// "si la valeur reue est gale 1, on
allume les segments pour afficher le chiffre 1"
{
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

LOW);
HIGH);
HIGH);
LOW);
HIGH);
HIGH);
HIGH);
HIGH);

}
if(valeur_recue == 2)
// "si la valeur reue est gale 2, on
allume les segments pour afficher le chiffre 2"
{

http://www.edurobot.ch

92

Arduino lcole
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

LOW);
LOW);
LOW);
HIGH);
LOW);
LOW);
HIGH);
HIGH);

}
if(valeur_recue == 3)
enfin... tu connais la suite...
{
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

// "si la valeur reue est gale...

HIGH);
LOW);
LOW);
HIGH);
LOW);
LOW);
LOW);
HIGH);

}
if(valeur_recue == 4)
{
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

HIGH);
HIGH);
LOW);
LOW);
HIGH);
LOW);
LOW);
HIGH);

}
if(valeur_recue == 5)
{
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

HIGH);
LOW);
LOW);
LOW);
LOW);
HIGH);
LOW);
HIGH);

}
if(valeur_recue == 6)
{

http://www.edurobot.ch

93

Arduino lcole
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

LOW);
LOW);
LOW);
LOW);
LOW);
HIGH);
LOW);
HIGH);

}
if(valeur_recue == 7)
{
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

HIGH);
HIGH);
HIGH);
HIGH);
LOW);
LOW);
LOW);
HIGH);

}
if(valeur_recue == 8)
{
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);

}
if(valeur_recue == 9)
{
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

HIGH);
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);

}
if(valeur_recue == 10)
http://www.edurobot.ch

94

Arduino lcole
{
digitalWrite(led_1,
digitalWrite(led_2,
digitalWrite(led_3,
digitalWrite(led_4,
digitalWrite(led_5,
digitalWrite(led_6,
digitalWrite(led_7,
digitalWrite(led_8,

LOW);
LOW);
HIGH);
LOW);
LOW);
LOW);
LOW);
LOW);

}
}
Le code se termine avec le chiffre 0, dfaut du 10.
Il est naturellement tout fait possible de cbler un deuxime afficheur 7 segments.

Conclusion
Fin!
Ah ! Non ! C'est un peu court, jeune homme !
On pouvait dire... oh ! Dieu ! ... bien des choses en somme...
Lorsque jai entrepris la rdaction de ce cours, jamais je navais imagin quil me conduirait aussi loin;
dautant plus quun tome 2 est en gestation. Mais de fil en aiguille, ou devrais-je dire de rsistance en LED,
aid de mes lves (cest eux que je dois lultime exercice de cet ouvrage), et entran par le rythme
effrn de leurs apprentissages, il a bien fallu suivre!
Ici se conclut une anne de cours avec mes lves, la dcouverte de cet incroyable outil pdagogique
quest lArduino et, en particulier, le Diduino. Le trs grand facteur de motivation quil a induit chez mes
lves, et la curiosit quils ont ensuite dveloppe est un vrai plaisir pour un enseignant. cela, il ne faut
naturellement pas oublier les comptences acquises par les lves: lectronique, lectricit, informatique,
programmation, gestion de projet... Cest avec plaisir que jai vu ces lves, lissue de leur scolarit,
sengager dans des professions techniques.
Rendez-vous au tome 2!

http://www.edurobot.ch

95