Vous êtes sur la page 1sur 80

INITIATION PROGRAMMATION ARDUINO

Et c'est parti pour la semaine 1 ! Cette semaine, nous allons dcouvrir les outils
notre disposition pour le prototypage lectronique avec Arduino. Ces outils vous
permettront de raliser les montages et exercices .
Vido 1 https://youtu.be/yUnQtbFOVbI?t=2

Deux choix s'offrent vous pour raliser des montages avec Arduino :

Utiliser le logiciel Arduino install sur votre ordinateur. Ce logiciel va nous permettre
d'envoyer des ordres un Arduino pour qu'il les excute. Si vous comptez utiliser un Arduino
(le vtre, celui d'un(e) amie ou celui de votre FabLab), nous vous invitons choisir l'option
"Logiciel" dans la section suivante.

Utiliser le simulateur 123D Circuits directement dans votre navigateur internet. Ce


logiciel permettra de simuler le fonctionnement d'un Arduino. Si vous n'avez pas d'Arduino et
ne comptez pas utiliser, c'est par ici que a se passe.

Vido 2 https://youtu.be/O2YN-YdrnLY

Voici donc notre premier programme (celui qui est dcrit dans la vido). Cette
suite d'instructions va faire clignoter une LED branche sur la broche 13 de
l'Arduino toutes les secondes. Lorsque vous utilisez le logiciel Arduino, il peut
tre trouv en cliquant sur FichierExemples01.BasicsBlink. Vous pouvez
galement copier le code suivant dans votre diteur :

Programme
/*
Clignotement
Allume la LED pendant 1 seconde,
puis l'teint pendant 0,5 seconde.
*/

// Numro de la broche laquelle est


// connecte la LED
int led = 13;

// le code dans cette fonction est excut une fois au dbut


void setup() {
// indique que la broche de la LED une sortie :
// on va modifier sa tension
pinMode(led, OUTPUT);
}

// le code dans cette fonction est excut en boucle


void loop() {
digitalWrite(led, HIGH); // allumer la LED (tension 5V sur la broche)

delay(1000);
digitalWrite(led, LOW);
delay(1000);

// attendre 1000ms = 1s
// teindre la LED (tension 0V sur la broche)
// attendre nouveau 1seconde

Pour comprendre tout a plus en dtails, nous vous invitons consulter la


section qui va suivre, consacre au code de notre premier programme. Mais
avant cela, nous avons quelques bases d'lectricit vous expliquer.

ARDUINO
Petits rappels sur les broches d'Arduino :

Pour viter de tout brancher directement sur l'Arduino, nous allons utiliser la
platine d'essai ou breadboard.
"Je vais maintenant vous prsenter un outil trs pratique lorsque l'on fait ses dbuts
en lectronique ou lorsque l'on veut tester rapidement/facilement un montage. Cet
accessoire s'appelle une breadboard (littralement : Planche pain, techniquement :
plaque d'essai sans soudure). Pour faire simple, c'est une plaque pleine de trous !"

Principe de la breadboard
Certes, la plaque est pleine de trous, mais pas de manire innocente ! En effet, la
plupart d'entre eux sont relis. Voici un petit schma rapide qui va aider la
comprhension.

Comme vous pouvez le voir sur l'image, j'ai dessin des zones. Les zones rouges
et noires correspondent l'alimentation. Souvent, on retrouve deux lignes
comme celles-ci permettant de relier vos composants aux alimentations
ncessaires. Par convention, le noir reprsente la masse et
lerouge, l'alimentation (+5V, +12V, -5V... ce que vous voulez y amener).
Habituellement, tous les trous d'une mme ligne sont relis sur cette zone. Ainsi,
vous avez une ligne d'alimentation parcourant le long de la carte.
Ensuite, on peut voir des zones en bleu. Ces zones sont relies entre elles
parcolonne. Ainsi, tous les trous sur une mme colonne sont relis entre eux. En
revanche, chaque colonne est distincte. En faisant chevaucher des composants
sur plusieurs colonnes, vous pouvez les connecter entre eux.
Dernier point, vous pouvez remarquer un espace coupant la carte en deux de
manire symtrique. Cette espace coupe aussi la liaison des colonnes. Ainsi, sur
le dessin ci-dessus, on peut voir que chaque colonne possde 5 trous relis entre
eux. Cet espace au milieu est normalis et doit faire la largeur des circuits
intgrs standards. En posant un circuit intgr cheval au milieu, chaque patte
de ce dernier, se retrouve donc sur une colonne, isole de la prcdente et de la
suivante.
Si vous voulez voir plus concrtement ce fonctionnement, je vous conseille
d'essayer le logiciel Fritzing, qui permet de faire des circuits de manire assez
simple et intuitive. Vous verrez ainsi comment les colonnes sont spares les
unes des autres.

LOIS SIMPLES D'LECTRICIT


Avant de raliser notre premier montage et de brancher notre premire LED, il
nous a sembl important de rappeler quelques bases en lectricit. C'est Glenn
qui va nous expliquer tout cela :

Tension et intensit
partir du circuit lectrique le plus simple, jusqu'aux circuits les plus complexes,
nous avons affaire un courant lectrique qui circule. Pour parler de la
magnitude de ce courant lectrique, on parle de l'intensit. Ce courant ou
intensit est mesur et exprim en Ampres (A).
Pour faire circuler un courant lectrique, il faut une "force motrice". En lectricit,
cette force est appele tension. La tension est mesure et exprime en Volts (V).
Pour visualiser la diffrence entre Intensit et Tension, on peut faire un
parallle avec l'eau. L'intensit dans un circuit lectrique est comme le dbit de
l'eau dans un tuyau. Et la tension lectrique est comme la pression de l'eau.
Pour un tuyau donn, plus on augmente la pression, plus le dbit d'eau
augmente. En lectricit c'est pareil : dans un circuit donn, plus on augmente la
tension, plus l'intensit augmente.

Rsistance
Toujours avec notre tuyau d'arrosage, on peut visualiser une autre manifestation
lectrique : la rsistance. La friction lintrieur du tuyau rsiste au passage de
l'eau. Plus le diamtre du tuyau est petit, plus la rsistance est importante. Plus
le tuyau est long, plus la rsistance est forte. Et si, pour augmenter le dbit, on
augmente trop la pression le tuyau se rompt.
La rsistance lectrique est trs semblable. La rsistance est mesure et
exprime en Ohms (). Un simple fil lectrique en cuivre montre une rsistance
au courant. Plus le diamtre du fil est petit, plus il y a de rsistance. Plus le fil est
long, plus il y a de rsistance. Vous avez peut-tre dj expriment : si on essaie
de passer trop de courant dans un petit fil lectrique le fil fond (c'est le
principe d'un fusible).

Loi d'Ohm
Bon, nous avons dj trois phnomnes lectriques matriser :
la tension(volts), l'intensit (ampres) et la rsistance (ohms). Ces trois
phnomnes sont intimement lis par une loi d'lectricit dite loi d'Ohm. La loi
s'exprime dans une formule trs simple :

U=RI
avec :

U : Tension

I : Intensit

R : Rsistance

La mme loi peut tre exprime aussi en fonction de l'intensit et la rsistance


respectivement :
U

I = R et R = I

Pour terminer, sachez qu'il vous faudra protger vos LED avec une rsistance
d'une valeur comprise entre 200 et 1k. Nous verrons ds la semaine
prochaine pourquoi !

LE BLINK
Voici donc notre premier programme ! Cette suite d'instructions va faire clignoter
une LED branche sur la broche 13 de l'Arduino toutes les secondes. Lorsque
vous utilisez le logiciel Arduino, il peut tre trouv en cliquant
surFichierExemples01.BasicsBlink.
/*
Clignotement
Allume la LED pendant 1 seconde,
puis l'teint pendant 1 seconde.

*/

// Numro de la broche laquelle est


// connecte la LED
int led = 13;

// le code dans cette fonction est excut une fois au dbut


void setup() {
// indique que la broche de la LED une sortie :
// on va modifier sa tension
pinMode(led, OUTPUT);
}

// le code dans cette fonction est excut en boucle


void loop() {
digitalWrite(led, HIGH); // allumer la LED (tension 5V sur la broche)
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}

Montage

// attendre 1000ms = 1s
// teindre la LED (tension 0V sur la broche)
// attendre nouveau 1seconde

Instructions
la fin de chaque programme, nous dtaillerons les nouvelles briques logicielles
utilises. Comme c'est notre premier programme, nous avons beaucoup de
choses voir (n'hsitez pas cliquer sur les liens ci-dessous afin d'arriver sur la
rfrence Arduino).
Dans ce programme, nous avons :
Des commentaires : qui sont des lignes de texte incluses dans le programme et

qui ont pour but de vous aider comprendre (ou vous rappeler) comment votre
programme fonctionne ou d'en informer les autres. Ces lignes ne sont pas envoys
Arduino. Il y a deux faons de crer des lignes de commentaires :
/*
Voici des
commentaires sur
plusieurs ligne
*/
// Ceci est galement un commentaire

Des instructions :

Dclaration d'une variable : on vient avec cette ligne stocker la valeur droite
du signe gal dans la variable gauche du signe gal.
int led = 13;

Dans notre cas, cela signifie que la variable appele led qui sera un nombre
(puisque elle est prcde du mot cl int) viendra prendre la valeur 13.

Les blocs d'instructions : setup regroupe toutes les instructions qui seront
excutes au dmarrage du programme. La fonctionsetup n'est excute qu'une seule
fois, aprs chaque mise sous tension ou reset (rinitialisation) de la carte

Arduino. loop (boucle en anglais) contient les instructions que l'on souhaite voir
excutes encore et encore tant que l'Arduino est branch.
void setup() { }
void loop() { }

Les fonctions : sont des instructions qui permettent d'excuter une ou plusieurs
actions. Les fonctions sont dfinies avec :

Un nom : ce qu'on devra taper pour appeler la fonction.

Une ou des entres : ce sont des variables passes la fonction


appelesparamtres ou arguments. Ces arguments sont placs entre parenthses.

Une sortie : le rsultat de la fonction qui peut tre stock dans une

variable.
Prenons l'exemple de la fonction suivante :
digitalWrite(led, HIGH);

Dans ce cas, le nom de la fonction est digitalWrite. Nous passons deux paramtres la
fonction : led et HIGH. La fonction digitalWrite n'a pas de sortie. Avec cette fonction,
nous allumons la broche situe sur la broche passe avec le premier paramtre (qui
peut tre un nombre ou une variable). Lorsque le second arguement est plac HIGH,
on vient allumer la LED. Tandis qu'on teindra la LED si le second argument pass
est LOW.

Les autres fonctions prsentes dans le programme Blink sont :

pinMode configure la broche spcifie dans le premier paramtre pour qu'elle


se comporte soit en entre (INPUT), soit en sortie (OUTPUT) passe avec le second
paramtre :
pinMode(led, OUTPUT);

delay fait une pause dans l'excution du programme pour la dure (en
millisecondes) passe en paramtre :

delay(1000);

Voil, c'est tout pour le code de cette semaine, la suite c'est les QCM et le
premier devoir

QCM SUR LE BLINK


(5 points)
Voici une srie de questions portant sur les vidos et documents de la semaine,
histoire de voir si ce qu'on raconte est comprhensible.
Attention, vous n'avez que deux essais pour remplir ce QCM (n'hsitez pas
consulter les ressources votre disposition dans les vidos, .pdf et exemples
avant de complter le QCM).
1. Quels sont les deux blocs qui doivent tre prsents dans les programmes
Arduino (deux choix possibles) ?
setup

digitalWrite

delay

loop

2. Une LED est branche sur la broche 2 (avec l'autre patte sur GND). Parmi les
fonctions ci-dessous, laquelle permet d'allumer cette LED ?
digitalWrite(3, HIGH);

digitalwrite(2, LOW);

digitalWrite(2, HIGH);

digitalWrite(HIGH, 2);

3. Je souhaite contrler une LED branche sur la broche 6, que devra


obligatoirement contenir le bloc setup ?
pinMode(6, OUTPUT);

pinMode(8, HIGH);

modePin(OUTPUT);

digitalWrite(6);

4. Si je tape delay(10000) et que je tlverse mon programme, celui-ci se mettra


en pause pendant une dure de ? seconde(s)

5. Si je souhaite dfinir une variable appele brocheLed qui a pour valeur 13 et


qui est de type entier. Quelle est la bonne syntaxe ?
pinMode(13, brocheLed, int);

int brocheLed = 13;

brocheLed int = 13;

13 = int

brocheLed;

EXERCICE
On vous montre quoi a ressemble.

La consigne est la suivante : partir des fonctions vues dans l'exemple "Blink" et des bases
d'lectroniques dcrites cette semaine, vous devez raliser (chez vous ou dans votre FabLab)
un feu tricolore avec trois LED (une verte, une orange, une rouge) qui devront tre allumes
comme suit :
- Orange allume pendant 1 seconde
- Rouge allume pendant 3 secondes
- Verte allume pendant 3 secondes
Vous aurez besoin de la platine de prototypage pour raliser ce montage !
C'est vous, bon courage !

QUELQUES OUTILS DE BASE


Parmi la liste des outils incontournables du bricolage, certains sont rellement
faciles trouver dans plein de magasin. En voici une petite liste
Tournevis

Les tournevis ! Vous en avez tous dj vu et srement manipul. Ils sont


indispensables et portent bien leurs noms. Aucune excuse pour ne pas en avoir
une paire toujours porte de main. Ils vous seront trs pratiques ds quil
sagira de dmonter quelque chose ou de resserrer un botier par exemple.
On en trouve de trs nombreux, dans les matriaux, les tailles et les formes.
Pour faire de llectronique, je vous conseille davoir au moins plusieurs tailles de
tournevis plats et quelques tournevis cruciformes.
Si vous faites des montages avec des petits potentiomtres de rglages, vous
serez srement amens utiliser des tournevis en plastique. Leur gros avantage
est bien sr quils ne conduisent pas llectricit, donc si vous ripez en faisant
votre rglage vous ne risquez pas de crer un court-circuit si ce dernier est sous
tension !
Il existe aussi des tournevis possdant un indicateur lumineux dans le manche.
Ces derniers sont utiliss pour tester la prsence dune tension dans un circuit.
Enfin, il existe aussi des tournevis embout changeable. Vous pouvez alors
facilement changer de forme/taille dembout pour vous adapter diverses
situations.
Cls

Passons maintenant aux cls. Bien sur je ne parle pas des clefs pour rentrer dans
votre atelier, mais bien des cls pour pouvoir serrer les boulons et autres crous.
Parmi la grande famille de ces dernires, voici quelques unes que lon retrouve
trs souvent.
La cl Allen (ou cl 6 pans)

Facile distinguer, cest une pice de mtal coude en L qui possde 6 faces
(do le nom de cl 6 pans). Elle est utilise pour serrer des vis possdant une
tte creuse de la mme forme. Le nom de cl Allen vient du nom de la marque
ponyme qui a mis en uvre cette dernire.

La cl Torx (ou cl toile)

Comme pour la cl 6 pans, cest la caractristique mcanique qui lui donne son
nom. Elle possde une forme en toile et sadapte l encore aux vis possdant
une tte creuse de la mme forme. Cette cl fut invente par le constructeur
automobile Renault.
La cl plate

Les cls plates font partie des incontournables. On en trouve de toutes tailles et
elles servent serrer des crous ou des boulons. Prenez en quelques unes, elles
ne coutent pas une fortune et sont toujours pratiques !
La cl pipe/douille/cliquet

La cl a pipe est similaire la cl plate ceci prt quelle a la forme dune pipe. Sa
prise en main facilite le mouvement et donc donne plus de force pour agir sur le
boulon/crou.
La cl douille est similaire, elle utilise des douilles qui ne sont rien dautres
que des embouts interchangeables pour agir sur la visserie.
Enfin, la cl cliquet est une cl douille mais possdant un mcanisme
particulier lui permettant de faire des mouvements de vissage/dvissage rapide
puisque la douille na pas tre retire du boulon/crou entre chaque
mouvement.

Pinces

L encore, comme pour les autres outils, il en existe de toutes les formes et
toutes les couleurs Seules certaines dentre elles vont nous intresser

Les pinces plates

Son nom lindique, cette pince est plate. Elle est souvent utilise pour serrer
deux choses entre elles ou pour maintenir une pice le temps dune opration.
Par exemple pour refermer un bout de mtal ou pour maintenir un fil en train
dtre soud (et ainsi ne pas se brler).
La pince coupante

L encore le nom est vocateur. Elle va nous servir tout simplement couper des
fils. Cependant nallez pas couper des fils avec une section (un diamtre) trop
grosse sous peine dendommager loutil.
La pince dnuder

Toujours avec un nom trs clair, celle-ci sert dnuder vos fils. Autrement dit,
elle coupera proprementlisolant plastique sur le bout de votre fil qui pourra
ensuite tre simplement tam, soud ou viss sur un connecteur. Elle est plutt
facultative dans le sens o le dnudage peut tre fait avec une pince coupante,
des ciseaux ou un couteau, mais ce sera moins rapide et propre quavec cet outil
ddi.
La pince sertir

Allant souvent de paire avant la pince dnuder, cet outil vous permettra
de sertir vos fils dnuds sur vos connecteurs. Cela vous garantit que votre fil
sera bien fix et maintenu sur sa cosse et ainsi quil ne risque pas de sarracher
du connecteur final ds que vous allez tirer un peu dessus. L encore elle est
facultative, cette opration pouvant tre ralise (de manire moins triviale) avec
une pince plate et de la patience. Son cot peut aussi tre un frein lachat
La pince brucelles

Cette dernire est toute simple et a une application bien particulire. Elle
ressemble un peu une pince piler la diffrence quelle se termine en
pointe et ne coupe pas. On s'en sert pour manipuler des composants monts en
surface (CMS) qui sont difficiles prendre la main et positionner
correctement.

Dautres outils pratiques


Une fois votre caisse outils quipe avec les outils minimum de tout bon
bricoleur (le kit de survie), nous pouvons commencer en rajouter quelques uns,
pour du confort ou de la scurit.
Scurit

Commenons par la scurit puisque cest important !


Si vous commencez fabriquer vos propres cartes lectroniques, vous allez
manipuler des produits toxiques et corrosifs. Le minimum est donc de prendre
une paire de gants afin dviter les ventuelles claboussures avec la peau (qui
pourraient vous laisser des taches par exemple voire bien pire).
Qui dit gant, dit aussi lunettes (car les claboussures ne sont pas difficiles, elles
se contenteront de vous attaquer l o cest possible

). Les lunettes sont aussi

trs pratiques quand il sagit de faire des perages (un copeau dans lil est vite
arriv).
Dune manire gnrale : Protgez-vous ! Noubliez pas ce que nous dit la loi de

Murphy (ou loi de lemmerdement maximal) : Cest la seule fois o vous ne


porterez pas de protection que laccident arrivera !
Confort et outils++
Se simplifier la vie

Il arrive souvent que lon ait des taches un peu fastidieuses faire la main. Par
exemple tamer un simple fil (action qui consiste recouvrir dtain le cuivre
dun fil). Pour cela il vous faut tenir le fil, tenir ltain et manipuler le fer souder
pour dposer ltain sur le fil. Nul doute quune troisime main serait fort
pratique ! Cest justement le nom de loutil suivant. La troisime main se
prsente sous la forme dun support avec une pince ou deux et ventuellement
une loupe. Le support est leste pour bien rester en place lorsque vous
manipulez. Grce aux pinces vous pouvez facilement placer des composants
dans lorientation qui vous arrange le plus pour faire vos bricoles !
Dans le mme ordre dide on retrouve ltau. Cet ustensile est plus ddi au
serrage ou au maintien bien en place pendant un usinage. Placez une pice entre
les mchoires, serrez, cest maintenu ! Vous pouvez alors laisser le tout en place
(pour coller deux pices par exemple) ou commencer percer/limer/etc de
manire stable, propre et scurise. Il existe diffrents moyens de fixer ltau
votre tabli. Certains sont par un systme de ventouse, dautres se fixent par une
vis de serrage.
Outils dusinage

Pour faire des ajustements mcaniques sur des pices, il est utile davoir de quoi
usiner. Parmi ces outils on retrouve la perceuse (portative ou colonne) qui vous
permettra de trouer volont, la fraiseuse pour faire des ajustements de surface
ou encore une bonne vieille lime pour bavurer des dcoupes ou arrondir des
angles un peu trop francs et dangereux.
Rappel scurit, lorsque vous utilisez des outils lectro-portatifs (comme une
perceuse), veillez toujours bien bloquer la pice qui va recevoir le traitement.
Vous ne souhaitez pas la voir commencer tourner et risquer de partir dans le
dcor. De mme, des lunettes pour viter les copeaux dans les yeux sont les
bienvenues !

DES OUTILS SPCIFIQUES LLECTRONIQUE


Faire son montage et le tester
Pour faire un montage rapide ou de prototypage pour tester quelque chose,
nous l'avons vu la breadboard reste un choix idal. Il est facile dy enficher des
composants pour faire des tests.
Afin doptimiser le tout, une bobine de fil mono-brin est souvent plus simple que
le multibrin pour rentrer dans les trous de la breadboard. Il existe des kits de fils
pour breadboard de tailles et couleurs diffrentes pour faire des montages
propres. Les plus bricoleurs d'entre vous en ont cependant surement dj vu,
c'est le mme type de fil que l'on a dans nos murs pour transporter le signal
tlphonique !
Une fois votre montage fait vous allez devoir le tester pour trouver o
llectronique ne fonctionne pas. Lutilisation dun multimtre permettant de
mesurer la tension, lintensit ou encore possdant des fonctions de testeur de
diodes et de mesure de rsistances est rapidement indispensable. Ils ne coutent
pas cher et se trouvent facilement un peu partout sans avoir besoin de rentrer
dans des magasins spcialis.
Enfin, lorsque votre montage est termin et fonctionnel vous pourriez avoir
envie de lembarquer sur une carte lectronique pour fixer les composants. Si
vous ne pouvez pas raliser vos propres cartes et/ou ne souhaitez pas dpenser
des fortunes pour les raliser, vous pouvez toujours souder vos composants sur
des plaques trous (aussi appeles veroboard).

La soudure
Puisquon parle de soudure voyons un peu tout ce qui y touche Bien entendu,
tout commence par le fer. Pour des travaux dlectronique, un fer dune
trentaine de watts sera suffisant. Il doit tre capable de chauffer entre 300 et
400C si vous voulez que ltain fonde. Bien entendu, il en existe pour tous les
prix, allant du simple fer 10 la station rglable qui en cotera plus dune
centaine. Choisissez en fonction de vos moyens et de vos prtentions mais
gardez en tte que les moins chers vont chauffer lentement ou atteindre
difficilement une temprature suffisante. De manire gnrale, essayez dviter
les fers de type pistolets.
Le fer souder ne sert pas grand chose sil est seul, il vous faudra aussi investir
dans une bobine dtain (fil souder) qui peut contenir ou non du plomb (plus

simple souder mais utiliser dans un endroit ar car les vapeurs ne sont pas
trs bonnes pour lorganisme).
De la tresse dessouder ou une pompe dessouder peuvent aussi savrer utile.

Vido 3 https://youtu.be/eZbDA65sVGo

LE BUTTON
Merci d'avoir regard cette vido ! Voici quelques informations pour mieux la
comprendre :

Montage

Pour le raliser, vous aurez besoin de :

Un Arduino

Un cble USB

Deux rsitances de 1K

Des fils de prototypage

Une platine de prototypage

Un bouton poussoir

Une LED de votre couleur prfre

Code
Cette suite d'instructions va allumer une LED branche sur la broche 13 lorsque
le bouton branch sur la broche 2 est appuy. Lorsque vous utilisez le logiciel

Arduino, le code peut tre trouv en cliquant


surFichierExemples02.DigitalButton.
/*
Bouton

Allume une LED branche sur la broche 13 lorsque le bouton


branch sur la broche 2 est appuy.
*/

// Initialisation des constantes :


const int buttonPin = 2;
const int ledPin = 13;

// Numro de la broche laquelle est connect le bouton poussoir


// Numro de la broche laquelle est connecte la LED

// Dclaration des variables :


int buttonState = 0;

// variable qui sera utilise pour stocker l'tat du bouton

// le code dans cette fonction est excut une fois au dbut


void setup() {
// indique que la broche ledPin est une sortie :
pinMode(ledPin, OUTPUT);
// indique que la broche buttonPin est une entre :
pinMode(buttonPin, INPUT);
}

// le code dans cette fonction est excut en boucle

void loop(){
// lit l'tat du bouton et stocke le rsultat
// dans buttonState :
buttonState = digitalRead(buttonPin);

// Si buttonState est 5V (HIGHbouton appuy)


if (buttonState == HIGH) {
// on allume la LED
digitalWrite(ledPin, HIGH);
}
else {
// sinon on teint
digitalWrite(ledPin, LOW);
}
}

Remarques : Copiez-collez ce code dans le simulateur pour ne pas avoir tout


retaper. Saviez vous que vous pouvez accder la documentation d'une fonction
en cliquant avec le bouton droit sur celle-ci puis en cliquant sur Trouvez dans la
rfrence.

Instructions
Comme la semaine dernire, voici une description des nouvelles fonctions
utilises (n'hsitez pas cliquer sur les liens ci-dessous afin d'arriver sur la
rfrence Arduino).

Dclaration d'une constante : comme pour une variable, on vient avec cette
ligne stocker la valeur droite du signe gal dans led.
const int led = 13;

Le mot cl const indique que l'on ne souhaite pas que la valeur de led puisse tre
modifie dans le programme.

Les nouvelles instructions :

digitalRead lit l'tat d'une broche et renvoie la valeur HIGH si la broche est la
tension de l'alimentation ou LOW si la broche est 0V.
digitalRead(buttonPin);

La valeur de retour de digitalRead peut tre stocke dans une variable comme ceci :
buttonState = digitalRead(buttonPin);

if permet de tester si une expression situe entre parenthse est vraie.


Dans Button, nous cherchons savoir si le bouton est appuy, nous allons donc
comparer buttonState HIGH comme ceci :
if(buttonState == HIGH)

else : le bloc situ aprs cet mot cl viendra tre execut si le test prcdent
choue. Dans Button, si le bouton n'est pas appuy alors on viendra teindre la LED.

Les rsistances
La semaine passe, nous indiquions ici qu'il fallait protger vos LED avec une
rsistance comprise entre 200 et 1k.
Cette semaine, on s'intresse au pourquoi avec un montage :

Montage

Le montage suivant utilise une diode lectroluminescente ou LED, un


interrupteur et une rsistance. Quand l'interrupteur est ferm, le courant passe
travers la rsistance et la diode - et la diode va s'allumer. Ce mme montage
peut tre dessin en tant que schma lectronique comme suit (interrupteur
dessin en position ferme) :

Si on regarde la documentation pour les LED standards, on voit qu'une LED a


besoin d'une tension entre 1,5v et 3,5v pour fonctionner (cela est fonction de la
couleur de la LED, ainsi que de son fabricant), mais qu'il ne faut pas dpasser
quelques dizaines de milliampres (crits mA : millime d'un ampre) sinon la
LED peut tre endommage. C'est pour cela qu'une rsistance est place dans ce
circuit, pour limiter l'intensit travers la LED.
Pour calculer la bonne valeur de rsistance pour que la LED s'allume au
maximum, sans tre endommage, on va se servir de la formule : R = UI dj
voque prcdemment.
Dans la suite de cette discussion, je vais prendre 2,2v comme chute de tension
du LED (valeur choisi arbitrairement).
La tension de ce circuit fournie par les deux piles, donnent 3V. La chute de
tension travers la rsistance est donc 3V 2,2V = 0,8V. Souvent, on limite
l'intensit travers une LED 20mA (= 0,02 A). Cela donne, donc R = 0,8V/0,02.
Le rsultat est qu'il est possible de rduire la rsistance jusqu' 40 sans
endommager la LED.
Dans le cas d'une LED branche sur une broche de l'Arduino. Nous avons du 5V
la sortie de la broche. La chute de tension au travers de la rsistance est de 5V
2,2V = 2,8V. a nous donne donc R = 2,8V/0,02A = 140.

Valeurs de rsistances
Les rsistances sont fabriques et tries dans plusieurs gammes de valeurs
normalises. On ne trouve pas, par exemple, une rsistance de 40 dans le
commerce. La valeur la plus proche est, en fait, 39. En plus, la valeur d'une
rsistance n'est que trs rarement exactement le valeur indique : il y a toujours
une tolrance (normalement 5%). Une tolrance de 5% sur 39 donne de
37,05 40,95 ! Si vous cherchez sur internet vous trouverez les infos sur les
gammes de valeurs, et comment lire les valeurs (code de couleurs) des
rsistances.

QCM SUR LE BUTTON

(5 points)

Voici une srie de questions portant sur les vidos et documents de la semaine,
histoire de voir si ce qu'on raconte est comprhensible.
1. La fonction digitalRead permet de lire l'tat d'une broche numrique. Que
peut renvoyer cette fonction (plusieurs choix possibles) ?
HIGH

4.2

HAUT

LOW

2. Reprenons les hypothses nonces dans le cours. Soit le circuit suivant :

Quelle devra tre la valeur thorique de la rsistance (en ) si l'on souhaite


protger la LED branche en srie ?

3. Je souhaite lire un bouton branch sur la broche 6, que devra obligatoirement


contenir le bloc setup ?
pinMode(6, INPUT);

pinMode(6, OUTPUT);

modePin(6, OUTPUT);

digitalWrite(6);

4. Je souhaite utiliser une LED branche sur la broche 12. Quelle sera la meilleure
syntaxe pour dclarer ma constante ?
int led = 12;

ledPin int = 12;

const int ledPin = 12;

led = int 13;

5. Soit le programme suivant :


const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;

// variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
delay(5000);
}

Nous viendrons lire l'tat du bouton tous les X secondes ?

Le montage raliser pour le TP ci-dessous :

Seules les notions abordes dans les cours de cette semaine et des semaines
passes sont ncessaires pour raliser ce TP :)
TP 2 : FEUX TRICOLORES AVEC PASSAGE
Le TP faire pour la semaine prochaine consiste raliser un feu tricolore accompagn d'un
feu "piton" bicolore (rouge et vert). Le montage devra galement avoir un bouton pour
pitons qui viendra passer le feu au orange puis au rouge tout en passant le feu piton au
vert (un peu comme dans la vraie vie finalement :)
Consignes du TP
Fonctionnement normal :
Feu tricolore : mme consigne que la semaine dernire
- Une LED orange (branche sur la broche 11) allume pendant 1 seconde
- Une LED rouge (branche sur la broche 12) allume pendant 3 secondes
- Une LED verte (branche sur la broche 10) allume pendant 3 secondes

Feu bicolore (piton)


- Le feu piton est constamment rouge (rouge9 et vert8) tant que le bouton (broche 2)
n'est pas appuy
Si le bouton est maintenu appuy pendant que le feu voiture est au vert, alors le feu
tricolore passe au orange allum pendant 1 seconde puis rouge pendant 5 secondes durant
lesquelles le feu vert piton passe au vert
Aprs ces 5 secondes, le feu piton repasse au rouge et le fonctionnement normal reprend
Comme on est sympas, on vous donne le montage raliser au-dessus.
Seules les notions abordes dans les cours de cette semaine et des semaines passes sont
ncessaires pour raliser ce TP (n'allez pas chercher l'impossible)
On espre que les consignes sont claires, si ce n'tait pas le cas merci de nous le faire savoir
dans les discussions ci-dessous.
Bon courage !

La dtection d'un front (facultatif)


Comme nous l'avons vu cette semaine, dtecter l'appui d'un bouton se fait avec
la fonction "digitalRead()". Cependant, si nous mettons juste cette lecture d'tat
dans la boucle principal, nous pouvons avoir des surprises.
En effet, prenons le code suivant :
int monBouton = 2; // bouton en broche 2
int compteur = 0; // un compteur
int etatBouton; // L'tat du bouton

void setup() {
// le bouton en entre
pinMode(monBouton, INPUT);

void loop() {
// si on appuie sur le bouton
etatBouton = digitalRead(monBouton);
if(etatBouton == HIGH) {
// alors on incrmente le compteur
compteur = compteur+1;
}
}

Dans ce code, nous incrmentons un compteur de 1 chaque fois que l'on


appuie sur un bouton. Tout du moins c'est ce que l'on aimerait... En effet, il y a
un problme ! La fonction "loop" fonctionne trs vite, tellement vite que votre
compteur va s'incrmenter plein de fois par seconde, aussi longtemps que votre
doigt reste appuy sur le bouton, l o nous souhaiterions qu'il ne s'incrment
qu'une seule fois par appui...
Ce problme possde une solution : La dtection de front.
Un front peut aussi tre vu comme un changement d'tat. Lorsque l'on appuie,
on fera passer le niveau lectrique de 0 1 ou le contraire. C'est a un "front". Le
but est maintenant de le dtecter afin d'incrmenter notre compteur en sa
prsence et non pas uniquement sur un tat. Pour cela nous allons devoir
utiliser une variable nous servant de mmoire et qui va retranscrire l'tat du
bouton au moment t-1 (lors du prcdent passage dans la boucle si vous
prfrez).
Ensuite il nous suffira de comparer cette mmoire avec ltat actuel du bouton
pour voir si ce dernier a chang entre les deux passages dans la boucle. Si
effectivement la mmoire est diffrente de l'tat actuel, alors le bouton a chang
d'tat, il y a un front. Sinon, cela signifie que le bouton est dans le mme tat, il
n'y a pas eu de front.

Voici ce que cela pourrait donner sous la forme d'un code :


int monBouton = 2; // bouton en broche 2
int compteur = 0; // un compteur
int etatBouton; // L'tat du bouton
int memoire = LOW; // La mmoire de l'tat du bouton

void setup() {
// le bouton en entre
pinMode(monBouton, INPUT);
}

void loop()
{
// lecture de l'tat du bouton
etatBouton = digitalRead(monBouton);

// Si le bouton a un tat diffrent de celui enregistr ET


// que cet tat est "haut"
if((etatBouton != memoire) && (etatBouton == HIGH))
{
// on incrmente le compteur
compteur++;
}

// on enregistre l'tat du bouton pour le tour suivant


memoire = etatBouton;
}

Video4 https://youtu.be/VSxi23Folbw

ANALOGINOUTSERIAL
Merci d'avoir regard cette vido ! Voici quelques lments pour mieux la
comprendre :

Montage

Schma

Pour le raliser, vous aurez besoin de :

Un Arduino

Un cble USB

Deux rsitances de 1k

Des fils de prototypage

Une platine de prototypage

Une photorsistance

Une LED de votre couleur prfre

Code
Cette suite d'instructions va allumer une LED branche sur la broche 9.
L'intensit lumineuse de la LED sera proportielle la luminosit capte par la
photorsistance branche sur la broche A0 (notez bien le A0, le A qui prcde le 0
signifie que c'est une entre Analogique).
Lorsque vous utilisez le logiciel Arduino, le code peut tre trouv en cliquant
surFichierExemples03.AnalogAnalogInOutSerial.
/*
Entre et sortie analogiques + communications srie

Ce programme va allumer une LED branche sur la broche 9.


L'intensit lumineuse de la LED sera proportielle la luminosit
capte par la photorsistance branche sur la broche A0.

*/

// Initialisation des constantes :


const int analogInPin = A0; // Numro de la broche laquelle est connect la photorsistance
const int analogOutPin = 9; // Numro de la broche laquelle est connecte la LED

int sensorValue = 0;

// Valeur lue sur la photorsistance

int outputValue = 0;

// Valeur envoye la LED

void setup() {
// Initialise la communication avec l'ordinateur
Serial.begin(9600);

// Indique que la broche analogOutPin est une sortie :


pinMode(analogOutPin, OUTPUT);
// Indique que la broche analogInPin est une entre :
pinMode(analogInPin, INPUT);
}

void loop() {
// lit la valeur de la photorsistance et
// stocke le rsultat dans sensorValue :
sensorValue = analogRead(analogInPin);
// change sensorValue vers une intervalle de 0 255
// et stocke le rsultat dans outputValue :
outputValue = map(sensorValue, 0, 1023, 0, 255);
// envoie de cette nouvelle valeur sur la LED
analogWrite(analogOutPin, outputValue);

// envoie tout a vers l'ordinateur


Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
}

Remarques :

Copiez-collez ce code dans le simulateur pour ne pas avoir tout retaper. Saviezvous que vous pouvez accder la documentation d'une fonction en cliquant avec le
bouton droit sur celle-ci puis en cliquant surTrouvez dans la rfrence.

Aussi, il faut bien attendre la fin du tlversement avant d'ouvrir le moniteur


srie dont on parle en dessous.

Instructions
Comme les semaines passes, voici une description des nouvelles fonctions
utilises (n'hsitez pas cliquer sur les liens ci-dessous afin d'arriver sur la
rfrence Arduino).

Les nouvelles instructions :

analogRead permet de lire l'tat d'une broche analogique et de renvoyer une


valeur numrique proportionnelle la tension reue. La carte Arduino comporte 6 voies,
A0 A5, connectes un convertisseur analogique-numrique 10 bits. Cela signifie qu'il
est possible de transformer la tension d'entre entre 0 et 5V en une valeur numrique
entire comprise entre 0 et 1023.
analogRead(analogInPin);

La valeur de retour de analogRead peut tre stocke dans une variable entire (c'est
pour cela que nous devons dclarer une variable de type int pour stocker le rsultat) :
sensorValue = analogRead(analogInPin);

Serial est une librairie (un ensemble de fonctions) utilise pour les

communications par le port srie entre la carte Arduino et un ordinateur ou d'autres


composants. Ce port srie permet l'envoi et la rception de suites de caractres sur les
broches 0 (RX) et 1 (TX) avec l'ordinateur via le port USB. C'est pourquoi, si vous utilisez
cette fonctionnalit, vous ne pouvez utiliser les broches 0 et 1 en tant qu'entres ou
sorties numriques. Si vous souhaitez visualiser le texte envoy depuis l'Arduino vers
votre ordinateur, vous pouvez utiliser le terminal srie intgr l'environnement
Arduino. Il suffit pour cela de cliquer sur le bouton du moniteur srie dans la barre
d'outils (Rappel : il faut bien attendre la fin du tlversement avant d'ouvrir le moniteur
srie) :

Dans la fentre qui s'ouvre, vrifier bien que vous tes au mme dbit de
communication que celui utilis dans l'appel de la fonction Serial.begin. Par dfaut le
dbit est de 9600 :

Les fonctions de la librairie Serial sont :


Serial.begin permet d'initialiser la communication entre Arduino et votre
ordinateur. Cette fonction doit tre place dans le bloc setup, elle doit tre suivi d'un
seul paramtre qui correspond au dbit de communication en nombre de caractres
changs par seconde (l'unit est le baud) pour la communication srie. De manire
classique, nous choisirons de communiquer 9600 bauds. Pour en savoir plus sur
l'utilisation du port srie et des dbits possibles, cliquez ici. Sans leSerial.begin dans le
bloc setup, on ne peut utiliser les autres fonctions Serial.printet Serial.println.
Serial.begin(9600);

Serial.print Cette fonction permet d'envoyer sur le port srie une suite de
caractres indiqu en paramtre. De la mme faon, Serial.println envoie une suite de
caractres suivi d'un retour la ligne :
Serial.print("Texte envoye vers l'ordinateur"); // sans retour la ligne
Serial.println("Texte avec retour a la ligne"); // avec retour la ligne

Serial.print nous sera particulirement utile pour une tche que vous
avez dj faite sans vous en rendre compte : le dbogage. Il n'est pas rare que vous
tlversiez votre code sur Arduino sans problme, mais une fois sur Arduino le
comportement de votre programme mais pas celui attendu. Des petites erreurs
viendront souvent se glisser dans vos programmes car nous ne sommes
malheureusement pas parfaits et qu'un oubli est vite arriv. Grce Serial, il nous sera
possible d'indiquer quand nous allumons une LED ou lorsque nous faisons un test... Il
nous sera ainsi possible de suivre le droulement de notre programme ! Mais ce n'est
pas tout,Serial.print et Serial.println peuvent galement afficher la valeur de variables
si nous indiquons un nom de variable en paramtre :
Serial.print("sensor = " );
Serial.print(sensorValue);

map permet de faire passer une valeur situe dans une intervalle vers un
autre. Les paramtres de ces fonctions sont les suivants :

variable qui se trouve dans lintervalle initial

dbut de lintervalle initial

fin de l'intervalle initial

dbut de lintervalle vis


Grce cette fonction, nous allons donc nous retrouver avec une valeur proportionnelle
map(sensorValue, 0, 1023, 0, 255); // sensorValue passe de l'intervalle 01023 vers 0255

analogWrite va tre utilis dans ce programme pour moduler l'intensit


lumineuse d'une LED branche sur la broche spcifie avec le premier paramtre. Dans
les semaines passes, nos LED taient allumes ou teintes. L'intrt
de analogWriteavec est de pouvoir rgler l'intensit lumineuse en spcifiant un nombre
(compris entre 0 et 255) dans le second paramtre de la fonction :
analogWrite(11, 0); // teint compltement la LED branch sur la broche 11
analogWrite(11, 90); // allume un tout petit peu la LED branch sur la broche 11
analogWrite(11, 255); // allume compltement la LED branch sur la broche 11

Simulateur
Pur ceux qui souhaiteraient utiliser le simulateur, la photorsistance est
disponible en cliquant sur Add component puis sur LDR. Cependant, linteraction
avec la photorsistance est limite et se limite cliquer dessus pour changer la
valeur de sa rsistance. Nous vous conseillons de le remplacer par un
potentiomtre comme ci-dessous :

COMPOSANTS PASSIFS
Dans les semaines passes, nous avons pas mal discut des rsistances,
composants incontournables dans les montages lectroniques. Voici d'autres
composants dits "passifs" que nous allons souvent utiliser.

Les Diodes
"Ahhhhh..." jentends dj les puristes "une diode est un semi-conducteur, pas
un composant passif..." Et oui, mais je vais traiter le sujet ici et maintenant car
nous l'avons dj vu plusieurs fois dans nos prcdents montages.
La diode est le premier vrai composant lectronique qui a t invent. Au dbut
c'tait en forme dnorme tube lectronique qui chauffait un max ! Maintenant
elle existe sous plusieurs formes :

Leur fonction de base est toute simple : laisser passer le courant dans un seul
sens. On peut penser notre tuyau d'eau abord la semaine passe : une diode
est comme un clapet anti-retour. Voici le symbole lectronique :

La forme de flche n'est pas un hasard, le sens de la flche indique le sens de


circulation du courant lectrique. En utilisation "normale", la diode laisse passer
le courant quand l'anode est plus positive que la cathode. La cathode est
identifie sur une diode par une bande colore (voir schmas).
Une forme spciale de la diode est la diode lectroluminescente, ou DEL. Son
symbole :

Les deux petites flches indiquent que cette diode met de la lumire...
Rappelons notre montage de la semaine passe :

On voit bien que l'anode est au positif et la cathode au ngatif. (je sais ce n'est
pas la bonne valeur de rsistance avec une alimentation de 3v...).
Si on inverse la LED, elle ne s'allume plus et le courant ne passe plus.

QCM SUR ANALOGINOUTSERIAL

(5 points)

Voici une srie de questions portant sur les vidos et documents de la semaine,
histoire de voir si ce qu'on raconte est comprhensible.
1. Je stocke le rsultat de la fonction analogRead dans une variable appele
maVariable. Je souhaite utiliser la fonction map pour la passer dans l'intervalle
suivant : 0100. Le rsultat sera stock dans la variable appele
maNouvelleVariable. Quelle sera la bonne syntaxe ?
maNouvelleVariable = map(maVariable, 0, 100);
= maNouvelleVariable;

map(maVariable, 0, 1023, 0, 100)

maNouvelleVariable = map(maVariable, 0, 1023, 0, 100);

maNouvelleVariable = map(maVariable, 0, 100);

2. La fonction analogRead permet de lire l'tat d'une broche analogique. Que


peut thoriquement renvoyer cette fonction (plusieurs choix possibles) ?
0

1024

255

10

3. Je souhaite que mon programme Arduino puisse changer du texte avec


l'ordinateur ( une vitesse de 9600 bauds). Que devra contenir le bloc setup ?
Setup.begin(9600);

Serialbegin(9600);

analogWrite(11, 10);

Serial.begin(9600);

4. La LED a une polarit, elle a un sens. D'aprs vos connaissances, le cours et le


wiki. Que se passera-t-il si la LED appele LED1 est branche l'envers (comme
indiqu dans le circuit ci-dessous) ?

Seule LED1 va s'allumer


s'allumer

Seule LED2 va s'allumer

Aucune des LED ne vont

Les deux vont s'allumer

5. Soit le programme suivant et le circuit que nous avons vu dans l'exemple


"Button" :
int buttonState = LOW;
void setup() {
pinMode(13, OUTPUT);
pinMode(2, INPUT);
}
void loop(){
digitalRead(2);
if (buttonState == HIGH) {
digitalWrite(13, HIGH);
}
else {
digitalWrite(13, LOW);
}
}

chaque tour de la boucle loop, quelle valeur sera envoye la LED branche
sur la broche 13 si j'appuie sur le bouton branch sur la broche 2 ?
LOW

HIGH

13

255

TP FAIRE
Cette semaine, nous allons tenter de raliser un Thrmine lumineux qui est un
bon exemple pour aborder les entres analogiques.
Ce montage va tre l'occasion dapprofondir les fonctions map et analogRead mais
galement de dcouvrir une nouvelle fonction lie l'utilisation d'un
buzzer pizo-lectrique, un composant qui peut produire du son. Le buzzer
pizo-lectrique transforme l'impulsion lectrique envoye par une broche en
une onde sonore de frquence identique et audible.

L'exercice consiste modifier l'exemple AnalogInOutSerial vu cette semaine et


l'adapter pour que la luminosit mesure par la photorsistance soit
proportionelle la frquence joue un buzzer branch sur la broche 8 : plus la
luminosit reue par la photorsistance est importante, plus la frquence joue
par le buzzer sera leve (et inversement, si on passe notre main devant le
capteur de luminosit alors le son mis sera gravefrquence basse).

Quelques indices

Vous aurez besoin de la fonction tone qui prend deux paramtres :

la broche o le buzzer est branch

la frquence que l'on veut jouer avec le buzzer (exprime en Hertz)


tone(8, 440); // la note La (440Hz) joue sur un buzzer branch sur la broche 8

Lorsque l'on reoit beaucoup de lumire sur notre photo-rsistance, la frquence


gnre devra tre proche de 30 000Hz et lorsque la lumire est faible, la frquence
devra tre proche de 50Hz.

Le buzzer doit avoir une patte connecte la broche 8 et l'autre au GND

TALONNAGE D'UN CAPTEUR : PRINCIPE ET APPLICATION


Comment faire si l'on possde un capteur mais que l'on a pas sa caractristique
exacte ? Comment feriez-vous pour faire correspondre une valeur analogique lue
avec une donne physique relle ?
Par exemple, si je vous donne un composant en vous disant Voil un capteur de
temprature, je sais quil salimente en 5V sur telle et telle broches, je sais que le
signal de sortie est une tension en fonction de la temprature mais je suis
incapable de dire quelle en est la caractristique (la courbe de tension en
fonction de la temprature).
Nous allons maintenant voir comment rsoudre ce problme en prenant
connaissance d'une mthode pour talonner un capteur. Nous allons ainsi nousmmes dterminer la courbe caractristique du capteur et dterminer son
coefficient liant la temprature et la tension.

Le capteur utilis
Pour mettre en uvre la mthode que je vous propose ici, nous allons utiliser un
capteur de temprature assez rpandu qui se nomme LM35. Il existe dans

diffrents botiers que voici :

Vous aurez probablement devin le branchement, il est assez simple. Il suffit de


relier +VS au 5V et GND la masse. Le signal sera ensuite lu sur la broche Vout.

LA MTHODE
La mthode pour caractriser un capteur est assez simple. laide dune
multitude de mesures et dun appareil tmoin, nous allons crer un tableau qui
nous servira calculer la courbe liant la tension la donne mesure ( laide
dun tableur). Pour cela, en plus de votre capteur vous aurez besoin dun appareil
de mesure tmoin qui vous servira de rfrence. Par exemple le bon vieux
thermomtre qui trane accroch votre fentre fera parfaitement laffaire !

Prise de mesures
Vous tes prts, alors allons-y, commenons travailler. Reliez le capteur
lArduino et lArduino lordinateur, de la manire la plus simple possible,
comme ceci par exemple :

Ensuite, nous devons rcuprer les donnes envoyes par le capteur de manire
rgulire (ou rajouter un bouton et faite des envois lors de lappui). Pour cela,
voici un petit programme sans difficult qui vous enverra les valeurs brutes ou
converties en volts toutes les demi-secondes :
const int capteur = 0; //capteur branch sur la pin analogique 0
float tension = 0.0;
int valeur = 0;

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

void loop()
{
valeur = analogRead(capteur);
tension = (valeur*5.0)/1024;

Serial.print("Tension : ");

Serial.print(tension);
Serial.println(" V");
Serial.print("Valeur : ");
Serial.println(valeur);
Serial.println("---------------------");

delay(500);
}
Maintenant que tout est prt, il nous faut un banc de test. Pour cela, prparez
une casserole avec de leau contenant plein de glaons (leau doit tre la plus
froide possible). Faites une premire mesure avec votre capteur plong dedans
(attention, les broches doivent tre isoles lectriquement ou alors mettez
lensemble dans un petit sac plastique pour viter que leau naille faire un courtcircuit). Faites en mme temps une mesure de la temprature relle observe
laide du thermomtre. Une fois cela fait, relevez ces mesures dans un tableau
qui possdera les colonnes suivantes :

Temprature relle (en C)

Tension selon Arduino (en V)

Valeur brute selon Arduino

Temprature
(C)

Tension (V)

Valeur CAN

Quand la

premire

mesure est

faite,

commencez
rchauffer

0,015

plaant sur
de cuisson
Continuez

faire
leau (en la
une plaque

0,054

11

par exemple).
faire des

mesures

intervalle

rgulier (tous

les 5 degrs

voire moins

10

0,107

22

par exemple).

Plus vous

faites de

mesure, plus

llaboration

de la courbe
prcise. Voici

16

0,156

32

dexemple le
jai obtenu :

finale sera
titre
tableau que

21

0,210

43

24

0,234

48

29

0,293

60

35

0,352

72

38

0,386

79

43

0,430

88

46

0,459

94

50

0,503

103

Ralisation de la caractristique
Lorsque vous avez fini de prendre toutes vos valeurs, vous allez pouvoir passer
ltape suivante qui est : Calculer la caractristique de votre courbe !! Sortez vos
cahiers, votre calculatrice et en avant ! Non jblague (encore que a ferait un
super TP), on va continuer utiliser notre logiciel tableur pour faire le travail
pour nous ! On va donc commencer par regarder un peu lallure de la courbe. Je
vais en faire deux, une symbolisant les valeurs brutes de la conversion du CAN
(entre 0 et 1023) en rouge et lautre qui sera limage de la tension en fonction de
la temprature en bleu. Nous pourrons alors dterminer deux caractristiques,
selon ce qui vous arrange le plus.

Une fois cela fait, il ne reste plus qu demander gentiment au logiciel de


graphique de nous donner la courbe de tendance ralise par ces points. Sous
Excel, il suffit de cliquer sur un des points du graphique et choisir ensuite loption
Ajouter une courbe de tendance . Vous aurez alors le choix entre diffrents
types de courbe (linaire, exponentielle). Ici, on voit que les points sont aligns,
il sagit donc dune quation de courbe linaire, de type y=ax+b. Cochez la case
Afficher lquation sur le graphique pour pouvoir voir et exploiter cette dernire
ensuite.

Voici alors ce que lon obtient lorsque lon rajoute notre quation :

Grce lquation, nous pouvons dterminer la relation liant la temprature et la


tension (ou les valeurs du CAN). Ici nous obtenons :
(pour la tension)

y=0.01x0.0003

y=2.056x0.0707

(pour les valeurs du CAN)

Le coefficient constant (-0.003 ou -0.0707) peut ici tre ignor. En effet, il est
faible (on dit ngligeable) compar aux valeurs tudies. Dans les quations, x
reprsente la temprature et y reprsente la tension ou les valeurs du CAN. On
lit donc lquation de la manire suivante : Tension en Volt gale 0,01 fois la
temprature en degrs Celsius. Ce qui signifie que dornavant, en ayant une

mesure du CAN ou une mesure de tension, on est capable de dterminer la


temprature en degrs Celsius

Super non ? Par exemple, si nous avons une

tension de 300mV, avec la formule trouve prcdemment on dterminera que


lon a 0.3=0.01Temperature, ce qui quivaut
Temperature=0.3/0.01=30oC . On peut aisment le confirmer via le
graphique

Maintenant jai trois nouvelles, deux bonnes et une mauvaise La

bonne cest que vous tes capable de dterminer la caractristique dun capteur.
La deuxime bonne nouvelle, cest que lquation que lon a trouve est
correcte parce quelle est marque dans la documentation technique qui est
super facile trouver

(a ctait la mauvaise nouvelle, on a travaill pour

rien !! ) Mais comme cest pas toujours le cas, cest toujours bien de savoir
comment faire

Adaptation dans le code


Puisque nous savons mesurer les valeurs de notre capteur et que nous avons
une quation caractristique, nous pouvons faire le lien en temps rel dans
notre application pour faire une utilisation de la grandeurphysique de notre
mesure. Par exemple, sil fait 50C nous allumons le ventilateur. En effet,
souvenez-vous, avant nous navions quune valeur entre 0 et 1023 qui ne
signifiait physiquement pas grand chose. Maintenant nous sommes en mesure
(oh oh oh

) de faire la conversion. Il faudra pour commencer rcuprer la

valeur du signal. Prenons lexemple de la lecture dune tension analogique du


capteur prcdent :
int valeur = analogRead(monCapteur); //lit la valeur
Nous avons ensuite deux choix, soit nous le transformons en tension puis
ensuite en valeur physique grce la caractristique du graphique bleu cidessus, soit nous transformons directement en valeur physique avec la
caractristique rouge. Comme je suis feignant, je vais chercher conomiser une
instruction en prenant la dernire solution. Pour rappel, la formule obtenue tait
: y=2.056x0.0707. Nous avions aussi dit que le facteur constant tait
ngligeable, on a donc de manire simplifie y=2.056x soit la temprature est
gale la valeur lue divise par 2.056 (x=y2.056). Nous navons plus qu faire la
conversion dans notre programme !

float temperature = valeur/2.056;


Et voil ! Si lon voulait crire un programme plus complet, on aurait :
int monCapteur = 0; //Capteur sur la broche A0;
int valeur = 0;
float temperature = 0.0;

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

void loop()
{
valeur = analogRead(monCapteur);
temperature = valeur/2.056;

Serial.println(temperature);

delay(500);}
Et si jamais notre coefficient constant nest pas ngligeable ?
Eh bien prenons un exemple ! Admettons quon obtienne la caractristique
suivante : y=10x+22 On pourrait lire a comme ma valeur lue par le CAN est
gale 10 fois la valeur physique plus 22. Si on manipule lquation pour avoir x
en fonction de y, on aurait :

y=10x+22
y22=10x
x=y2210
Dans le code, cela nous donnerait :
void loop()
{

valeur = analogRead(monCapteur);
temperature = (valeur-22)/10;
Serial.println(temperature);
delay(500);}

Vido 5 https://youtu.be/gQ7EF_Rh6Tw

LE SWEEP
Cette semaine, nous tentons une nouvelle approche dans le cours avec le code
directement expliqu dans le texte de la vido que vous venez de voir :
Salut toutes et tous et bienvenue, l'on va aborder les bibliothques de code.
Librairies, a vient de l'anglais "Libraries", qui signifie Bibliothques. Peu
importe ce que vous trouverez comme termes sur internet, l'ide c'est d'avoir
sous la main un rassemblement de morceaux de code, classs par thmatiques,
que vous invoquez la demande. Un peu comme des supers pouvoirs qui vous
vitent d'avoir rinventer la roue chaque projet !
Les librairies pour Arduino sont nombreuses et abordent la plupart des besoins
courants. On trouve ainsi les bibliothques standards, pour par exemple grer le
Wifi, les crans cristaux liquide, utiliser simplement une carte SD, ou encore
des moteurs. Pour l'occasion, nous allons nous intresser des moteurs un peu
particulier que l'on retrouve dans le monde du modlisme : les servo-moteurs.

Au boulot, je vous laisse ouvrir l'exemple sweep que l'on trouve dans les
exemples du dossier Servo: FichierExemplesServo>Sweep.

Dtaillons maintenant les nouvelles instructions prsentes dans ce programme.


Aprs quelques lignes de commentaires, nous trouvons une instruction
particulire :
#include<Servo.h>

Voil, vous venez de charger la bibliothque et obtenez du mme coup la bote


outils correspondante.
partir de l, vous pouvez crer des objets en partant du moule Servo, un
peu comme l'on fait de nombreuses gaufres partir d'un seul moule, gaufres
forcment !
C'est ce qu'on va tout de suite faire. En crant une gaufre chantilly...
Non, pardon ! Un servomoteur, que nous appelons ici myservo.
Servo myservo;

On dclare ensuite une variable pos, pour stocker une position au cours du
programme :
int pos = 0;

Il est temps de passer au bloc setup. C'est vite rgl, puisqu'il suffit d'attacher
notre servo frachement cr la broche 9 :
myservo.attach(9);

La mthode attach() est disponible pour les objets de type Servo. La


bibliothque de code gre le reste pour vous. Sympa, non ?

Comme indiqu sur la page de Mon Club Elec, les mthodes disponibles sur les
objets de type Servo sont assez
explicites : attach(), write(), writeMicroseconds(), read(), attached(), detach().
Fin du setup, il est temps de "looper" prsent ! :)
La boucle principale commence par... faire une boucle !

for(pos = 0; pos < 180; pos +=1) {


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

Cette bouclette pour but de faire varier la position cible demande au


moteur. Autrement dit, elle sert uniquement faire varier la valeur de pos du
minimum au maximum. En franais, ca donne quelque chose comme Pour une
valeur position allant de 0 179 et une marche la fois, demande au
servomyservo d'aller en position pos
Un pos += 4 vous aurait fait monter l'escalier 4 4 :)
On laisse quelques millisecondes au moteur afin qu'il ait le temps d'aller une
marche plus loin, concrtement de tourner de 1.

C'est reparti pour un tour, cette fois-ci dans l'autre sens. Au lieu d'incrmenter la
valeur de +1 chaque passage de bouclette, on la dcrmente ici de -1 :
for(pos = 180; pos >= 1; pos -= 1) {
myservo.write(pos);
delay(15);
}

Puisque nous arrivons en fin de boucle, notre servo va bientt repartir.


Certain d'entre vous doivent se dire : Pourquoi ne pas tre aller directement au
but avec par exemple ? :
myservo.write(0);
myservo.write(180);

La rponse tient en un mot : la douceur !


Utiliser un dlai dans une boucle secondaire permet de ralentir le processus.
Plus la valeur du dlai sera importante dans votre programme, plus le
dplacement du moteur sera doux dans la vrai vie... vous d'adapter la valeur

du dlai vos besoins de tendresse.


Nous pouvons maintenant tlverser (ou upload en anglais) notre programme
sur lArduino.

Montage

Pour le raliser, vous aurez besoin de :

Un Arduino

Un cble USB

Des fils de prototypage

Une platine de prototypage

Un servomoteur

Schma

Code
#include <Servo.h>

Servo myservo; // crer un objet appel myservo partir


// du moule Servo

int pos = 0;

// variable pour stocker la position courante du servo

void setup()
{
myservo.attach(9); // attacher notre objet myservo au servomoteur branch sur la broche 9
}

void loop()
{
for(pos = 0; pos < 180; pos += 1) // aller de 0 180
// une tape la fois

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

// aller la position stock dans 'pos'


// attendre 15ms que le servomoteur se rende 'pos'

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

/// aller de 180 0

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

// aller la position stock dans 'pos'


// attendre 15ms que le servomoteur se rende 'pos'

POUR ALLER + LOIN (FACULTATIF)


Puisque vous n'tes pas aussi fainant(e)s qu'il n'y parait, nous allons appliquer
le savoir nouvellement acquis, en ralisant un exemple d'application concrte.
Seulement voil, un seul moteur qui bat la mesure, c'est vite barbant. Que diriezvous d'une machine qui servirait votre boisson favorite, sans broncher ? Que
diriez-vous de faire votre premier pas en robotique sans avoir l'air d'y toucher ?
...VOICI VENIR LE BOISSONMATIC' !
Vous qui rvez d'une invention gniale et susceptible de rvolutionner l'univers,
j'ai ce qu'il vous faut !
Le BoissonMatic' est une ralisation totalement absurde et c'est bien ce qui la
rend indispensable. Elle nous servira ici d'illustration de principe pour un
montage fort utile : le Pan Tilt, ou Monture azimutale dans notre bonne vieille
langue de Molire.
Le principe est simple et consiste monter un servo sur l'autre,
perpendiculairement. Pendant que le premier moteur tourne l'horizontal
(panoramique), le second tourne la vertical (azimut).

Avec des servomoteurs basiques, les dplacements de chacun des axes seront
limits 180. Ceci tant, vous pouvez facilement trouver un servo tournant
360 dans n'importe quelle boutique de modle rduit, ou encore modifier un
servo pour une rotation continue.

CODE AGAIN
// BoissonMatic' 2014
// john@labfab.fr sous licence WTFPL v2.0

#include <Servo.h>

Servo servoBas; // cration d'un premier objet servo, pour le Pan


Servo servoHaut; // cration du second, pour le tilt

int pos = 0;

// variable pour stocker une position

int const MINPAN = 0; // valeur mini du Pan, en degr.


int const MAXPAN = MINPAN + 90; // Un quart de tour panoramique
int const MINTILT = 180; // valeur mini du Tilt (en cas de servo mont " l'envers" ! :] )
int const MAXTILT = MINTILT - 90; // avec un max au quart de tour.

void setup()
{
servoBas.attach(9); // attache le servo du bas la broche 9
servoHaut.attach(10); // celui du haut la broche 10

// Mise en place de la machine en position de dpart


servoBas.write(MINPAN);
servoHaut.write(MINTILT);

delay(1000); // admettant qu'il faille une seconde pour faire demi-tour


// un servo bien nourri.
}

void loop()
{
// on fait faire un quart de tour au servo panoramique
servoBas.write(MAXPAN);

// La boucle "for" permet d'adoucir le dplacement du moteur


for(pos = 180; pos>=70; pos-=1) // On dpasse le quart de tour,
// pour que le versement du liquide soit plus rapide
{
servoHaut.write(pos);
// le servo tourne de la valeur de l'angle indique par la variable 'pos'
delay(20);
// on laisse un peu de temp au servo pour arriver la position demande
}
delay(3000); // encore du temps pour qu'assez de liquide coule du rcipient.

for(pos = 70; pos<=180; pos+=1)


{
servoHaut.write(pos);

// la mme dans l'autre sens

delay(25);
}

servoBas.write(MINPAN ); // retour en position initiale


delay(400);

servoHaut.detach(); // on dtache les moteurs un par un.


servoBas.detach();
// la squence n'aura lieu donc physiquement lieu qu'une seule fois,
// mme si la boucle principale loop() continue tourner.

servoHaut.attached();
// devrait retourner quelque chose
// comme "false" sur votre moniteur serie.
}

Vous l'aurez compris, la boucle for est fort fort utile. C'est mme la base du
fonctionnement d'Arduino, vous ne pouvez pas looper a. :)
Pour rappel et pour ceux qui roupillaient au fond de la salle, sa syntaxe est
toujours la mme.
for (condition) {
// ici du code pour bouclette
}

Ce qui se trouve entre les {} s'appelle un bloc d'instruction. Les variables y ont

un comportement spcifique que nous aborderons une autre fois si vous le


voulez bien !
Vous allez devoir apprendre la boucler, car vous utiliserez cette structure de
contrle pour de nombreux propos.
Imaginez par exemple une multitude de servomoteurs que vous voudriez
"dtacher". En plaant vos objets dans un tableau, vous appliquerez un bon
principe de fainantise. Il ne vous restera plus qu' parcourir ce tableau d'un for,
et d'appliquer pour chaque tour de boucle secondaire, la mthode detach sur
l'objet.
Si vous vous tes amus(e)s dans cette modeste dcouverte d'une bibliothque
standard particulirement adapte aux servos, adoptez le bon rflexe et sachez
que pour chacun de vos projets, il en existe certainement une qui fera votre
affaire.
Vous n'aurez ainsi pas rsoudre des problmes dj rgls, ni re-coder ce qui
l'a dj t mille fois. Vous pourrez ainsi vous concentrer sur votre
problmatique et pas sur le code qui gre "la tuyauterie" sous-jacente. N'hsitez
pas parcourir les bibliothques existantes, le soir au coin du feu. Vous
apprendrez beaucoup, et gagnerez au final un temps prcieux.

COMPOSANTS PASSIFS
Nous avons pas mal discut des rsistances, composant incontournable dans les
montages lectroniques. Voici d'autres composants dits "passifs" que nous
avons souvent utiliser :

Les Condensateurs ou capacitances


Sujet un peu plus difficile si on veut tout comprendre des capacitances mais
nous allons rester simple... Voici le symbole lectronique :

Leur construction et leur forme peut varier beaucoup mais leur principe reste le
mme : deux matriaux conducteurs (les deux traits verticaux), spars par une
matire isolante, appele dilectrique (l'espace entre les traits), l'ensemble
souvent en forme de "sandwich" ou parfois enrouls.

Condensateurs polariss
Il faut noter que, partir de la valeur d'environ 1uF, bon nombre de
condensateurs sont POLARISES - c'est dire qu'ils ont un "+" et un "-". On les
appelle souvent condensateurs chimiques. Il faut les brancher dans le bon sens
afin d'viter les surprises dsagrables : inverss ils ont tendance a se gonfler
jusqu' parfois se rompre carrment. Les produits chimiques l'intrieur sont
trs corrosifs...
D'habitude c'est le fil "-" qui est repr avec une bande noir sur le cot. Crdits
photo : merci Wikipedia :

Le condensateur est conu pour stocker les charges lectriques. Leur valeur est
mesure et calcule en Farads (F). Plus la valeur est grande et plus le
condensateur peut stocker de charge. Les valeurs rencontres dans
l'lectronique classique sont de l'ordre de nanofarads (10-9 Farads), jusqu' des
centaines de microfarads (10-6 F). Souvent les valeurs sont crites de la manire
suivante :
47uF = 47 microfarads ou 47 10-6 ;

100nF = 100 nanofarads ou 100 10-9 ;


14pF = 14 picofarads ou 14 10-12 (circuits radio) ;
A quoi servent des condensateurs ? Je vais vous montrer quelques exemples
pratiques de leur utilisation.

Anti-rebond
Nous avons dj utilis des boutons afin de commander nos montages Arduino
et vous avez srement eu a faire avec le problme de rebond des contacts
(contact bounce, en anglais). La construction mcanique des boutons fait que les
contacts rebondissent plusieurs fois avant de sarrter en position ouverte ou
ferme. Avec un Arduino capable de ragir en un milliardime de seconde, ces
rebonds sont un vrai casse-tte.
D'habitude on rsout le problme dans le logiciel - on attend un certain nombre
de millisecondes et on lit nouveau l'entre concerne pour dterminer l'tat.
Sachez toutefois qu'il y a aussi une solution lectronique qui peut parfois nous
simplifier la vie : Voici le branchement typique d'un bouton en entre d'un
microcontrleur :

L'entre est tenue au niveau 1 par la rsistance. Quand on appuie sur le bouton
l'entre est 'tire' vers le niveau 0. Regardons dj quoi ressemble le 'bounce' :

Cette trace d'oscilloscope correspond une seule pression sur le bouton ! La


dure dans le temps de cette trace est de 200 micro-seconds (uS). Chaque

division = 25uS. On voit bien que cela peut tre interprt par le microcontrleur
comme au moins six pressions ! On peut amliorer la situation on ajoutant un
condensateur (et oui, c'est toujours le sujet de ce chapitre...) comme ici :

Un condenstaeur besoin de temps pour se charger et se dcharger. L'ajout de


ce (petit) condensateur en parallle avec le bouton va 'ralentir' les changements
de tension, supprimant les effets alatoires dus aux faux contacts. Et avec cette
petite modification, nous avons :

Ce n'est pas un carr parfait, mais notre Arduino ne verra qu'une seule pression.
Sans avoir ajouter du code spcifique anti-rebond. Utile les petits
condensateurs !

Base de temps RC
Voil un montage simple construire avec l'Arduino. D'abord le montage sur la
platine de prototypage ou "breadboard" (littralement "planche pain" en
anglais...) :

Trs simple cbler, ce petit montage sert pour voir comment les condensateurs
peuvent nous fournir des bases de temps. La sortie 13 de l'Arduino est celle
quipe d'une DEL (LED) sur la platine de l'Arduino. Quand la sortie est au
niveau '1' la DEL s'allume. Nous prenons la mme sortie logique pour piloter
notre montage. A travers la rsistance de 10K le condensateur se charge
pendant que la sortie 13 est au niveau '1', et se dcharge pendant le niveau '0'.
Le transistor est utilis comme une sorte d'interrupteur pilot (nous allons parler
des transistors bientt...) pour allumer la DEL rouge. Voici le schma :

Et le programme (ou sketch en anglais pour


l'Arduino) : SlowBlink (l'exemple Blink modifi un peu).
Pour raliser ce montage :
partir des schmas ci-dessous, branchez les composants sur la platine de
prototypage.Tlchargez le programme

SlowBlink
et vrifier que la LED sur l'Arduino clignote (trs) lentement. Regarder la LED rouge sur
la platine dexprimentation : elle clignote aussi, mais avec presque une seconde de
retard. Le dlai exact dpend de plusieurs paramtres, notamment le type de
transistor.

Dans un monde idal*, le temps de charge/dcharge d'un condensateur se


calcule facilement :

T = RC
avec T = temps en secondes ; R la rsistance en Ohms ; et C la capacitance en
Farads.
(*) Mais ce temps dpend beaucoup des conditions de branchement,
notamment la rsistance de sortie du montage (souvent appele l'impdance).
Prenant l'exemple ici, nous avons R = 10000 et C = 0,00047F ce qui donne le
temps de charge ou dcharge de 4,7 secondes. Pourquoi notre DEL n'avait qu'un
retard d'environ 1 seconde, alors ? La rponse au chapitre "transistors" ! Vous
pouvez changer le condensateur pour un plus grand ou plus petit, ou en mettre
plusieurs en parallle ou srie. Vous verrez que les valeurs des condensateurs
en parallle s'additionnent, et la valeur des condensateurs en srie se calcule
comme ceci :

Ctot = 1/(1/C1 + 1/C2 + 1/CN)


(exactement l'inverse que pour les rsistances)

QCM SUR LES LIBRAIRIES ET LES BOUCLES

(5 points)

Voici une srie de questions portant sur les vidos et documents de la semaine,
histoire de voir si ce qu'on raconte est comprhensible.
1. Si on regarde le code suivant :
for(int uneBroche = 2; uneBroche < 8; uneBroche++) {
digitalWrite(uneBroche, HIGH);
}

Que va t'il se passer si des LED sont branches sur toutes les broches
numriques ( numrotes de 0 13) ?

Les LED branches sur les broches de 2 8 vont s'allumer


les broches de 3 7 vont s'allumer
s'allumer

Les LED branches sur

Les LED branches sur les broches de 2 7 vont

Les LED branches sur les broches de 3 8 vont s'allumer

2. Je souhaite utiliser un servomoteur branch sur la broche 9 et que


j'appelle monServo . Que devra forcment contenir mon programme ?
monservo.attach(9);

monServo = attach(9);

monServo.attach(9);

3. Dans un montage avec un condensateur plac en parallle d'un bouton


poussoir. Si au lieu d'un condensateur de 100nF je mets un 100uF la place, que
se passe-t-il ?
Les LEDs seront plus lumineuse Je peux dtecter les appuis plus brefs
appuyer plus longtemps avant que l'appui soit dtect

4. Soit le code suivant :


for(int i = 1; i <= 8; i++) {
Serial.println("meuh");
}

Combien de fois sera affich "meuh" dans le moniteur srie ?

5. Si on regarde le code suivant :


for(int i = 2; i < 4; i+=1) {
Serial.println("bip bip");
for(int j = 2; j < 3; j+=1) {
Serial.println("meuh");
}
}

Il faut

Que va t'on observer dans le moniteur srie lorsque ce code sera excut ?
bip bip ,meuh,bip bip,meuh

bip meuh,bip meuh

bip bip,meuh

bip bip,meuh meuh,bip bip,meuh meuh,bip bip,meuh meuh

TP4
Cette semaine, nous restons dans nos montages de feux en compliquant un peu
la chose avec une barrire. Le montage raliser devra comporter :

Un servomoteur qui jouera le rle de barrire

Un bouton pour demander l'ouverture de la barrire

Un feu bicolore qui passera au vert lorsque la barrire sera compltement


ouverte

Le scnario sera le suivant :

Le fonctionnement normal est un feu allum au rouge et une barrire ferme


(0). Le fonctionnement normal est interrompu par l'appui sur un bouton
poussoir.
Si l'appui du bouton est dtect, alors la barrire (actionne par le servomoteur)
se relve doucement. Lorsque la barrire est la verticale (90), le feu vert
s'allume pendant 5 secondes pendant lesquelles la barrire reste ouverte (90).
Aprs les 5 secondes, le feu repasse au rouge, la barrire redescend doucement
et le fonctionnement normal reprend.
Aussi, nous souhaitons recevoir le message "Bouton appuye" dans le moniteur
srie lorsque l'appui a t dtect.

Quelques indices
Vous aurez besoin de mobiliser toutes les comptences vues ces dernires
semaines pour raliser ce TP :

L'utilisation de boucles for qui ont t dcrites cette semaine.

L'utilisation d'entre et de sorties numriques

Importation de librairies et d'un servomoteur

Utilisation des instructions Serial

ORGANISER VOTRE CODE EN FICHIERS


Lorsque vous commencez faire de gros projets, il devient utile voire
indispensable de (trs) bien organiser son code. Cela commence par sparer son
code en diffrents fichiers afin davoir des entits logiques spares les unes des
autres.
Voyons cela !

Une opration simple faire et qui permet de gagner beaucoup en organisation


de son code est de sparer ce dernier en diffrents fichiers. Gnralement, on
fait un fichier par units logiques. Par exemple, imaginons que nous utilisions
un composant un peu compliqu qui sert dhorloge. Ce composant peut
renvoyer une date en entier, juste le jour, mois, anne ou encore juste lheure, la
minute ou la seconde courante. Pour bien faire, il nous faudrait une fonction par
unit de temps. On aurait ainsi au moins 6 fonctions pour rcuprer
heure/minutes/secondes/jour/mois/anne et 6 fonctions pour les rgler dans le
composant. 12 fonctions + la loop et le setup et vous voil avec un fichier original
bien encombr

Pour crer un nouveau fichier dans lIDE Arduino, il suffit de cliquer sur la petite
flche en haut de lespace ddition du code puis ensuite de cliquer sur Nouvel
onglet ou New Tab comme mis en vidence sur la capture dcran ci-dessous :

Le fichier .h
lorsque lon veut sparer son code en plusieurs fichiers, il y a certaines choses
respecter. Ainsi, chaque fois que lon veut crer un nouveau fichier de code on
ne vas pas en crer un mais deux ! Le premier fichier aura lextension .h
signifiant header, cest ce que nous allons voir maintenant.
Ce fichier va regrouper les prototypes des fonctions ainsi que les dfinitions de
structures ou de classes mais nous verrons cela aprs.
Le prototype dune fonction reprsente un peu un contrat. Il va dfinir le nom de
la fonction, ce qui rentre lintrieur (les paramtres) et ce qui en sort (la variable
de retour). Ainsi, votre programme principal aura une ide de comment
fonctionne extrieurement votre fonction. Un peu comme sil sadressait une
bote noire.
Si lon devait crire lexemple ci-dessus on pourrait avoir le contenu de fichier
suivant :
horloge.h
char getHeure();
char getMinute();
char getSeconde();
char getJour();
char getMois();
char getAnnee();

void setHeure(char val);


void setMinute(char val);
void setSeconde(char val);
void setJour(char val);
void setMois(char val);
void setAnnee(char val);

void afficherDate();
void afficherHeure();
void afficherDateHeure();

Comme vous pouvez le voir, avec ces dfinitions on peut savoir ce quest
suppos faire la fonction grce son nom et le type de variable quelle manipule
en entre et en sortie.
Bien, maintenant passons la suite pour voir o et comment implmenter ces
fonctions.

Le second fichier .cpp


Le second fichier que nous allons crer sera avec une extension .cpp (pour C plus
plus ou C++). Il regroupera le code proprement parler, limplmentation de vos
fonctions. Cest ici que vous allez crire le contenu de vos fonctions, ce qui est
cens se passer lintrieur de ces dernires.
Pour faire cela, la premire tape sera dinclure le fichier de prototypes via la
commande de prprocesseur#include :
#include "horloge.h" // horloge.h pour notre exemple
Cette ligne doit tre la premire de votre fichier .cpp et elle ne prend pas de ;
la fin.
Une fois cela fait, il va falloir taper le code de vos fonctions.
Pour le besoin de lexercice, je vais me contenter dcrire des instructions bidons.
Dans la vraie vie de tous les jours, vous auriez bien sr fait un joli code pour
communiquer avec un module o je ne sais quoi encore bien sr
horloge.cpp
/* fichier horloge.cpp */
#include "horloge.h"

char getHeure() {
Serial.println("getHeure");
return 0;
}

char getMinute() {
Serial.println("getHeure");
return 0;
}

char getSeconde() {
Serial.println("getHeure");
return 0;
}

char getJour() {
Serial.println("getHeure");
return 0;
}

char getMois() {
Serial.println("getHeure");
return 0;
}

char getAnnee() {
Serial.println("getHeure");
return 0;
}

void setHeure(char val) {


Serial.print("setHeure : ");
Serial.println(val, DEC);
}

void setMinute(char val) {


Serial.print("setMinute : ");
Serial.println(val, DEC);
}

void setSeconde(char val) {


Serial.print("setSeconde : ");
Serial.println(val, DEC);
}

void setJour(char val) {


Serial.print("setJour : ");

Serial.println(val, DEC);
}

void setMois(char val) {


Serial.print("setMois : ");
Serial.println(val, DEC);
}

void setAnnee(char val) {


Serial.print("setAnnee : ");
Serial.println(val, DEC);
}

void afficherDate() {
Serial.println("afficherDate");
}

void afficherHeure() {
Serial.println("afficherHeure");
}

void afficherDateHeure() {
Serial.println("afficherDateHeure");

Lier nos fichiers au programme principal


Vos dfinitions sont crites et vos fonctions sont implmentes ? Il ne reste plus
qu les ajouter votre programme principal ! Cest en fait trs simple vous aller
voir.
Tout dabord, il va falloir sassurer que vos fichiers .h et .cpp sont dans le mme
dossier que votre .ino o se trouve votre fichier de programme Arduino.
Comme ceci :

Cest bon ?
Bien, il ne reste quune seule chose faire, linclure dans le programme. Pour
cela cest tout bte, il suffit dajouter la ligne #include "horloge.h" en haut de
votre fichier.
Et voil ! Il ne vous reste plus qu faire des appels tout simples vos fonctions
perso dans le programme (setup ou loop ou o vous voulez !).
Maintenant, quand vous allez compiler, le compilateur va aller chercher le fichier
point par le include, le compiler puis le lier dans votre programme principal.
Il peut arriver que le lien avec les symboles/librairies Arduino ne se fasse pas
correctement. Dans ce cas l, rajoutez linclude suivant au dbut de votre .h ou
.cpp : #include "Arduino.h"

Sparer son code en fichiers est important pour facilement sy retrouver, jespre
que vous lavez bien compris. Une fois cette tape faite, vous devriez y voir plus
clair dans vos gros programmes.
Les plus aguerris dentre vous qui connaissent le C++ peuvent mme coder en C+
+ pour crer des classes et ainsi pousser lorganisation encore plus loin !

Vous aimerez peut-être aussi