Académique Documents
Professionnel Documents
Culture Documents
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
Diduino Arduino
Merci Damien, Lionel, Kristijan et Nikola, lves de loption robotique 2012 des coles dEcublens, qui ont eu la difcile tche de tester ce cours.
Merci Arnold Pasche de mavoir mis le pied ltrier et pour ses conseils en matire de soudure et dlectricit.
Et enn un merci tout particulier au Professeur Jean-Daniel Nicoud pour sa prcieuse aide et son soutien.
http://www.edurobot.ch - 2012
Diduino Arduino
Prface !
propos dArduino et rfrences! Objectifs du plan dtudes romand! propos des schmas lectroniques! Se procurer le matriel!
7
7 8 10 11
12
12 12 13 13 13 13 13
Matriel minimum!
Leons 1 8!
14
14
15
16 17 18 18 19 21 21
Leon 2: la soudure !
http://www.edurobot.ch - 2012
22
3
Diduino Arduino
Leon 3: Les bases de llectronique !
Llectricit! Le circuit lectrique ! Les diodes! Les rsistances!
23
23 25 26 27
30
30 31 32 32 33
33 34 34 35 35 35 36 36
Analyse du code 1 ! toi de jouer!! Monter une LED! Code 2! Variante: faire clignoter deux LEDs! Exercice 1:!
37 38 39 40 41 41
http://www.edurobot.ch - 2012
Diduino Arduino
Exercice 2:! 41
42
42 42 43 44 45 45 46 47 48 49
valuation: K2000!
Introduction! Les objectifs ! tape1: Schmas! tape2: Programme!
50
50 51 52 53
54
55 56 57 57
Leon 6: Input!
Le bouton poussoir! Le bouton poussoir normalement ouvert (NO)!
http://www.edurobot.ch - 2012
58
58 58
5
Diduino Arduino
Le bouton poussoir normalement ferm (NF)! Les interrupteurs! Exercice 1: allumons cette LED! Exercice 2: mais par o passe le courant?! Protger lArduino ! Rsistance Pull-Down / Pull-Up! Circuit avec une une rsistance pull-down! Circuit avec une rsistance pull-up! Rsistance pull-down ou pull-up?! Exercice 3: montage avec rsistance pull-down (rappel au moins) ! Une petite variation de code! Petits exercices: bouton poussoir et LED qui clignote! 58 58 59 60 61 62 62 63 63 64 67 68
69
69 71 72
Leon 7: le barregraphe !
Introduction! Schmas!
73
73 73
http://www.edurobot.ch - 2012
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://sciences.siteduzero.com/tutoriel-3-483697-l-electronique-de-zero.html
http://www.edurobot.ch - 2012
Diduino Arduino
Objectifs du plan dtudes romand
Voici une partie des objectifs du PER abords avec ce cours:
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 dnissant 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 - 2012
Diduino Arduino
Objectifs de la discipline AC&M A 33 AC&M Exercer diverses techniques plastiques et artisanales
en matrisant des habilets de motricit globale et ne (souplesse, prcision, coordination, rapidit du geste,) en choisissant et utilisant divers outils et matriaux en fonction d'un projet en matrisant des gestes artisanaux spciques, 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
en tudiant les manifestations de la socit de l'information et de la communication et certaines de ses consquences en analysant des images xes et animes au moyen de la grammaire de l'image en vriant les informations reues des mdias et en en produisant selon les mmes modes
Objectifs de (FG) Vivre ensemble et exercice de la dmocratie FG 34 Planier, raliser, valuer un projet et dvelopper une attitude participative et responsable
en prenant une part active et des responsabilits dans un projet en valuant ses actes et ses attitudes, en les ajustant si ncessaire en laborant les tapes du projet, en recourant aux ressources pertinentes et en les valuant en ngociant une dcision commune tout en tenant compte des intrts et des besoins particuliers en dbattant et en recherchant des rponses face des problmes concrets et des questions thiques
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: identiant les objectifs dune activit ainsi que les notions thoriques et pratiques qui en rsultent planiant, construisant et programmant le robot en fonction des observations et des mesures effectues testant le robot an didentier dventuelles erreurs de conception et en mettant en place des stratgies de remdiation Initiation l'utilisation d'outils et de procds simples an de faire fonctionner un robot de manire autonome 9
http://www.edurobot.ch - 2012
Diduino Arduino
propos des schmas lectroniques
Llectronique a ceci dintressant quon passe dun schma lectronique un montage, ou au contraire, du schma lectronique au montage. Dans les deux cas, cest une 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 dnissant 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: ! Fido Cadj: ! Fritzing: ! ! ! ! http://www.physicsbox.com/indexsolveelec2fr.html http://davbucci.chez-alice.fr/index.php?argument=elettronica/docadj/docadj.inc http://fritzing.org
http://www.edurobot.ch - 2012
10
Diduino Arduino
Se procurer le matriel
Ce cours est bas sur un module compatible Arduino, appel Diduino.
Nous avons choisi le Diduino, car il possde une platine dexprimentation directement intgre, et est livr avec de nombreux accessoires, tels que des rsistances, des LEDs, des capteurs... bref, tout ce quil est ncessaire pour dbuter sur Arduino. Enn, le Diduino ncessite que lon soude les connecteurs. Cela ajoute ainsi une comptence nos lves. Le matriel ncessaire est donc: Un Diduino (ou un Arduino) Du matriel lectronique de base: LEDs, rsistances, ls, boutons poussoirs... 1 fer souder et de ltain Le Diduino et tout le matriel ncessaire peuvent tre commands cette adresse: http://www.didel.com Il est aussi possible de commander du matriel Arduino et lectronique ces adresses:
Suisse: http://www.play-zone.ch http://www.conrad.ch
Pilote
An de pouvoir connecter un Diduino sur un Mac, il faut au pralable installer un pilote srie-USB. 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 et 10.7: 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.7 Lion. Installation du pilote Dcompresser larchive et ouvrir le pilote choisi. Suivre ensuite le processus dinstallation standard.
Diduino Arduino
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.
Diduino Arduino
Matriel minimum
Voici le matriel ncessaire pour raliser les exercices de ce cours:
Leons 1 8
1 Diduino ou 1 Arduino Uno avec une platine dexprimentation 6 LEDs rouges 2 LEDs jaunes ou oranges 2 LEDs vertes 6 rsistances de 220 ou 470 1 rsistance de 10k 1 condensateur de 10nF (en option) 2 boutons poussoirs Des cbles lectriques
http://www.edurobot.ch - 2012
14
Source: apple.com
Source: arduino.cc
cris ta dnition du mot ordinateur: !................................................................................................................................. !................................................................................................................................. Cite des objets qui contiennent des ordinateurs:
http://www.edurobot.ch - 2012
15
Diduino Arduino
Arduino ou Diduino?
Arduino est un projet open-source. Cela signie que tout le monde a accs librement aux plans, au logiciel (et son code-source), ainsi quau langage de programmation. Tout le monde peut donc modier lArduino, crer des accessoires ou mme faire des copies de lArduino et les vendre. Les cartes originelles sont vendues par Arduino. Mais de nombreux autres fabricants en commercialisent, plus ou moins proches des originaux. Cest le cas de lentreprise Didel2 , qui commercialise le Diduino. Nous avons choisi de travailler avec le Diduino pour plusieurs raisons: Didel est une entreprise locale. Cela compte aussi. Le Diduino possde une platine dexprimentation (breadboard) intgre, ce qui facilite son utilisation en classe Le Diduino possde des connecteurs pour les Kidules3, ce qui permet dajouter de nombreuses fonctions et de raliser de nombreuses expriences. Le Diduino doit en partie tre mont et soud. Cest un excellent travail pour les lves. Ce cours reste nanmoins parfaitement utilisable avec un Arduino ou un compatible Arduino
Cherche et note les dnitions suivantes: Open-source !................................................................................................................................. !................................................................................................................................. !................................................................................................................................. Code source !................................................................................................................................. !.................................................................................................................................
2 3
Diduino Arduino
Constitution de la carte
http://www.edurobot.ch - 2012
17
Diduino Arduino
Le microcontrleur
Voil le cerveau de notre carte. Cest lui qui va recevoir le programme que nous allons crer et qui va le stocker dans sa mmoire puis lexcuter. Grce ce programme, il va savoir faire des choses, qui peuvent tre : faire clignoter une LED, afcher des caractres sur un cran, envoyer des donnes un ordinateur... Sur le Diduino, le processeur est cach sous la platine dexprimentation.
Avant de xer la platine dexprimentation sur ton Diduino, fais un schma aussi prcis que possible de la carte et entoure en rouge le microcontrleur.
Alimentation
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. Pas de danger de tout griller donc! Veuillez seulement respecter l'intervalle de 7V 15V (mme si le rgulateur peut supporter plus, pas la peine de le retrancher dans ses limites). 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.
http://www.edurobot.ch - 2012
18
Diduino Arduino
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 xer des cartes dextension, appele shields.
http://www.edurobot.ch - 2012
19
Diduino Arduino
Sur Diduino, les sorties analogiques sont numrotes A14 A19. Sur Arduino, les sorties analogiques sont numrotes A0 A5.
http://www.edurobot.ch - 2012
20
Diduino Arduino
Connecteurs Diduino
+5V: ! ! Gnd: !! D0-D13:! A14-A19:! Kidules:! tension +5V masse (tension 0V) Connexions aux pattes du micro-contrleur Entres analogiques pour capteurs Connecteurs pour Kidules
La platine dexprimentation
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.
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.
http://www.edurobot.ch - 2012
21
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.
4
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
http://www.edurobot.ch - 2012 23
Diduino Arduino
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.
Pour une dcouverte ludique de llectricit, je vous conseille de regarder le Cest pas sorcier consacr ce thme: Partie 1: http://00.lc/cl Partie 2: http://00.lc/cm
http://www.edurobot.ch - 2012
24
Diduino Arduino
Le circuit lectrique
Ainsi, 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 l lectrique (le conducteur), les lectrons vont alors se dplacer du milieu riche vers le milieu pauvre. Si on intercale une lampe lectrique, le passage des lectrons va gnrer de la lumire.
Pile -
+ Lampe
Interrupteur
http://www.edurobot.ch - 2012
25
Diduino Arduino
Les diodes
Il est possible de remplacer lampoule par une diode lectroluminescente, aussi appele LED 5. Elle a la particularit de ne laisser passer le courant lectrique que dans un sens.
Rsine poxy Fil de liaison Cavit r chissante Puce semi-conductrice Enclume Borne
Grille de connexion
Anode
Cathode
Mplat
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 patte la plus longue. Lorsque les deux pattes 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.
Diduino Arduino
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, enn, le rtrcissement la rsistance R.
Courant de l'eau
Rtrcissement
Ainsi, pour une tension xe, plus la rsistance est faible, plus le courant la traversant est fort. Cette proportion est vrie par la loi dOhm:
http://www.edurobot.ch - 2012
27
Diduino Arduino
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 laments. 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:
Diduino Arduino
Et celle-ci?
http://www.edurobot.ch - 2012
29
Comme premier programme, nous allons la faire clignoter. La programmation se fait dans le logiciel Arduino.
http://www.edurobot.ch - 2012
30
Diduino Arduino
Le menu
Ce bouton permet de vrier le programme, il actionne un module qui cherche les erreurs dans le programme Envoi du programme sur lArduino Crer un nouveau chier Ouvrir un chier existant Enregistrer un chier
http://www.edurobot.ch - 2012
31
Diduino Arduino
La LED
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() { pinMode(13, OUTPUT); Serial.begin(9600); } // Initialise la patte 13 comme sortie // Ouvre le port srie 9600 bauds // fin de la fonction setup() // dbut 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() { digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(500); } // // // // // dbut de la fonction loop()
que
Met la patte 13 au niveau haut = allume la LED Pause de 500ms Met la patte 13 au niveau bas = teint la LED Pause 500ms
Tlcharger le code: !
http://www.edurobot.ch/code/code1.txt
Une fois le code crit (ou coll) dans la fentre de programmation, il faut lenvoyer sur le Diduino. Pour cela, il faut cliquer sur le bouton upload (tlverser), naturellement aprs avoir connect le Diduino lordinateur!
http://www.edurobot.ch - 2012 32
Diduino Arduino
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 conguration ( fonction setup( ) ), 3. Excution de la boucle sans n ( fonction loop ( ) ): le code compris dans la boucle sans n est excut indniment.
Droulement du programme
Fichiers d'inclusion Dclaration des constantes Dclaration des variables globales
En-tte dclarative
Conguration initiale
Fonction Setup Dclaration des variables locales Conguration des pattes Initialisation des variables Initialisation des fonctionnalits Initialisation des interruptions
Fonction Loop
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 - 2012
Boucle sans n
33
Diduino Arduino
Le code minimal6 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() { } //fonction principale, elle se rpte (sexcute) l'infini //contenu du programme //fonction d'initialisation de la carte //contenu de l'initialisation
Nous avons donc devant nous le code minimal qu'il faut insrer dans notre programme. Mais que peut-il bien signier pour quelqu'un qui n'a jamais programm ? La fonction Dans ce code se trouvent deux fonctions. Les fonctions sont en fait des portions de code.
void setup() { } //fonction d'initialisation de la carte //contenu de l'initialisation //on crit le code l'intrieur
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 checkup de dmarrage. Imaginons un pilote d'avion dans sa cabine qui fait l'inventaire : - patte 2 en sortie, tat haut ? - OK - timer 3 15 millisecondes ? - OK
Diduino Arduino
Une fois que l'on a initialis le programme, il faut ensuite crer son "cur", autrement dit le programme en lui mme.
void loop() { } //fonction principale, elle se rpte (sexcute) l'infini //contenu du programme
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 innie. 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..." C'est tout bte, mais trs puissant, car c'est ce qui va orchestrer notre programme. Les points virgules ; Les points virgules terminent les instructions. Si par exemple je dis dans mon programme : "appelle la fonction couperDuSaucisson" je dois mettre un point virgule aprs l'appel de cette fonction. Les points virgules ( ; ) sont synonymes d'erreurs, car il arrive trs souvent de les oublier la n des instructions. Par consquent le code ne fonctionne pas. Il faut donc tre trs attentif ne pas oublier de point virgule! 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.
http://www.edurobot.ch - 2012
35
Diduino Arduino
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 c'est inutile ? Non, car cela va nous permettre nous et aux programmeurs qui lirons notre code (s'il y en a) de savoir ce que signie la ligne de code que nous avons crite. C'est trs important de mettre des commentaires et cela permet aussi de reprendre un programme laiss dans l'oubli plus facilement ! Ligne unique de commentaire :
//cette ligne est un commentaire sur UNE SEULE ligne
Les accents Il est formellement interdit de mettre des accents en programmation! Sauf dans les commentaires.
http://www.edurobot.ch - 2012
36
Diduino Arduino
Analyse du code 1 7 Revenons maintenant notre code.
La ligne pinMode(13, OUTPUT); initialise la patte 13 du microcontrleur comme sortie, c'est--dire que des donnes seront envoyes depuis le microcontrleur vers cette patte. 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 patte 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 patte 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.
Diduino Arduino
toi de jouer! Fais varier les valeurs de linstruction delay. Indique ci-dessous la valeur choisie et le rsultat obtenu: Essai 1:
digitalWrite(13, HIGH); delay(.....); digitalWrite(13, LOW); delay(.....);
Rsultat:! _______________________________________________________________
Essai 2:
digitalWrite(13, HIGH); delay(.....); digitalWrite(13, LOW); delay(.....);
Rsultat:! _______________________________________________________________
Essai 3:
digitalWrite(13, HIGH); delay(.....); digitalWrite(13, LOW); delay(.....);
Rsultat:! _______________________________________________________________
http://www.edurobot.ch - 2012
38
Diduino Arduino
Monter une LED
Nous allons maintenant raliser le schma suivant:
Gnd
D10
Fais attention ne pas te tromper de rsistance et bien monter la LED dans le bon sens.
http://www.edurobot.ch - 2012
39
Diduino Arduino
Code 2 Modie le code ci-dessous, an de faire clignoter la LED sur la patte 13.
/* Code 2 - Edurobot.ch, destin au Diduino Objectif: faire clignoter la LED monte sur la patte 13 */ void setup() { // Initialise la patte 13 comme sortie pinMode(13, OUTPUT); // Ouvre le port srie 9600 bauds Serial.begin(9600); } void loop() { digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(500); } // // // // allume attend teint attend la LED 500ms la LED 500ms
Tu trouveras le corrig ici: http://edurobot.ch/code/code2.txt Remplace maintenant la rsistance par une autre de 220 . Que constates-tu, et comment lexpliques-tu?
http://www.edurobot.ch - 2012
40
Diduino Arduino
Variante: faire clignoter deux LEDs
Ralise le montage suivant:
Exercice 1: Modie le code 2 pour faire clignoter les deux LEDs en mme temps. Corrig: http://www.edurobot.ch/code/code2-1.txt
Exercice 2: Modie ton code pour faire clignoter les LEDs en alternance. Corrig: http://www.edurobot.ch/code/code2-2.txt
http://www.edurobot.ch - 2012
41
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 - 2012 42
Diduino Arduino
Dnir une variable
Si on donne un nombre notre programme, il ne sait pas si c'est une variable ou pas. Il faut le lui indiquer. Pour cela, on donne un type aux variables. Oui, car il existe plusieurs types de variables ! Par exemple la variable "x" vaut 4 :
x = 4;
Et bien ce code ne fonctionnerait pas car il ne suft pas ! En effet, il existe une multitude de nombres : les nombres entiers, les nombres dcimaux, ... C'est pour cela qu'il faut assigner une variable un type. Voil les types de variables les plus rpandus
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. Mais t'es pas malin, pour viter les dpassements de valeur ont met tout dans des double ou long ! Oui, mais NON. Un microcontrleur, ce n'est pas un ordinateur 2GHz multicore, 4Go de RAM ! Ici on parle d'un systme qui fonctionne avec un CPU 16MHz (soit 0,016 GHz) et 2 Ko de SRAM pour la mmoire vive. Donc deux raisons font qu'il faut choisir ses variables de manire judicieuse : - La RAM n'est pas extensible, quand il y en a plus, y en a plus !
http://www.edurobot.ch - 2012
43
Diduino Arduino
Le processeur est de type 8 bits (sur 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 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 :
Une des particularits du langage Arduino est qu'il accepte un nombre plus important de types de variables, listes dans ce tableau:
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;"
http://www.edurobot.ch - 2012
44
Diduino Arduino
//***** 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); Serial.begin(9600); // Initialise la patte 10 comme sortie // 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 10. for(compteur=0 ; compteur<10 ; compteur++) { digitalWrite(10, HIGH); delay(500); digitalWrite(10, LOW); delay(500); } } void loop() { } // fin du programme excut 10 fois // vide, car programme dj excut dans setup // // // // // dbut du programme excut 10 fois allume la LED attend 500ms teint la LED attend 500ms
Diduino Arduino
Analyse du code 8 La ligne byte compteur; permet de crer une variable 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++) { instructions } sert faire varier la variable compteur de 0 9 (en l'augmentant chaque fois de 1: c'est ce que fait l'instruction compteur++) et chaque fois excute toutes les instructions jusqu' l'accolade }. Cela va donc avoir l'effet de rpter le code suivant 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++) en 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++) ?
Diduino Arduino
Faire clignoter deux LED 20 fois
Ralise le montage suivant:
Modie 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
Modie maintenant le programme pour que les LED clignotent en alternance vingt fois. Tu trouveras le corrig ici: http://edurobot.ch/code/code4-2.txt
http://www.edurobot.ch - 2012
47
Diduino Arduino
Dnir les pattes du microcontrleur
Jusqu maintenant, nous avons identi les pattes du microcontrleur laide de leurs numros, comme dans lexemple suivant: pinMode(10, OUTPUT);. Il est aussi possible de crer une variable dnissant la broche utilise, ensuite, dnir si la patte utilise doit tre une entre du microcontrleur ou une sortie. Premirement, donc, dnissons la patte utilise du microcontrleur :
const int led_rouge = 2; variable //dfinition de la patte 2 de la carte en tant que
Le terme const signie que l'on dnit 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. En dnissant une variable de ce type, elle peut stocker un nombre allant de -2147483648 +2147483647 ! Cela nous suft amplement ! Ainsi, la patte 2 devient 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 2. Le chiffre 2. Lorsque le code sera compil, le microcontrleur saura ainsi que sur sa broche numro 2, il y a un lment connect. Protons maintenant pour voir ce que signie le terme Output utilis jusqu prsent. Il sagit de prciser si cette patte est une entre ou une sortie. Oui, car le microcontrleur a la capacit d'utiliser certaines de ses pattes en entre ou en sortie. C'est fabuleux ! En effet, il suft simplement dinterchanger UNE ligne de code pour dire qu'il faut utiliser une patte en entre (rcupration de donne) 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(). Pour utiliser cette fonction, il faut lui envoyer deux paramtres : Le nom de la variable que l'on a dni la broche Le type de broche que cela va tre (entre ou sortie)
void setup() { pinMode(led_rouge, OUTPUT); //initialisation de la patte 2 comme tant une sortie }
Ce code va donc dnir la led_rouge (qui est la broche numro 2 du microcontrleur) en sortie, car OUTPUT signie en franais : sortie.
http://www.edurobot.ch - 2012 48
Diduino Arduino
Rsumons! Concrtement, quest-ce que cela signie? Et bien, dans notre code 1, nous avions dni la patte du microcontrleur de cette faon:
void setup() { // Initialise la patte 13 comme sortie pinMode(13, OUTPUT); // Ouvre le port srie 9600 bauds Serial.begin(9600); } void loop() { digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(500); } // // // // allume attend teint attend la LED 500ms la LED 500ms
void setup() { // Initialise led_rouge comme patte de sortie pinMode(led_rouge, OUTPUT); // Ouvre le port srie 9600 bauds Serial.begin(9600); } void loop() { digitalWrite(led_rouge, HIGH); // delay(500); // attend digitalWrite(led_rouge, LOW); // delay(500); // attend } allume la LED 500ms teint la LED 500ms
quoi est-ce que cela sert? Quand nous aurons de nombreuses pattes en fonction, cela nous permettra de les identier plus facilement. Ainsi, si nous avons plusieurs LED, nous pouvons les appeler L1, L2, L3,... et si nous utilisons des LED de plusieurs couleurs, nous pourrons les appeler rouge, vert, bleu,... Enn, si on veut changer la patte utilise, il suft de corriger la variable, sans devoir corriger tout le code.
http://www.edurobot.ch - 2012 49
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 Corrig 10: http://www.edurobot.ch/code/k2000.pdf
9
Lien court: http://00.lc/cp Fichier protg par un mot de passe. Pour lobtenir: info [at] edurobot.ch 50
10
http://www.edurobot.ch - 2012
Diduino Arduino
Les objectifs
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 dnissant 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
Si applicable: 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: identiant les objectifs dune activit ainsi que les notions thoriques et pratiques qui en rsultent planiant, construisant et programmant le robot en fonction des observations et des mesures effectues testant le robot an didentier dventuelles erreurs de conception et en mettant en place des stratgies de remdiation Initiation l'utilisation d'outils et de procds simples an de faire fonctionner un robot de manire autonome
http://www.edurobot.ch - 2012
51
Diduino Arduino
tape1: Schmas
Ralise le plan du montage que tu vas utiliser:
D0 D1 D2 D3 D4 D5 D6 D7
+5V
Gnd
+5V D8 D9 D10 D11 D12 D13 Gnd +5V +5V Gnd Gnd Gnd +5V Gnd reset
http://www.edurobot.ch - 2012
52
Diduino Arduino
tape2: Programme
Rdige ton programme ici:
http://www.edurobot.ch - 2012
53
Feu 1
phases
1 2 3 4
Feu 2
60 sec 5 sec 60 sec 5 sec
tablis la liste des composants que tu auras besoin pour raliser le projet:
http://www.edurobot.ch - 2012
54
Diduino Arduino
tape1: Schmas
Ralise le plan du montage que tu vas utiliser:
D0 D1 D2 D3 D4 D5 D6 D7
+5V
Gnd
+5V D8 D9 D10 D11 D12 D13 Gnd +5V +5V Gnd Gnd Gnd +5V Gnd reset
http://www.edurobot.ch - 2012
55
Diduino Arduino
tape2: Programme
Rdige ton programme ici:
http://www.edurobot.ch - 2012
56
Diduino Arduino
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 - 2012 57
Bouton poussoir NO
Bouton poussoir NF
Interrupteur
http://www.edurobot.ch - 2012
58
Diduino Arduino
Exercice 1: allumons cette LED
Ralise le circuit suivant:
Gnd
+5V Lorsquon appuie sur le bouton poussoir, on ferme le circuit. Le courant passe alors et la LED sallume.
http://www.edurobot.ch - 2012
59
Diduino Arduino
Exercice 2: mais par o passe le courant?
Ralise le circuit suivant:
Gnd
+5V 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 - 2012
60
Diduino Arduino
Protger lArduino
Jusqu maintenant, nous nous sommes toujours contents de faire circuler du courant du microcontrleur la masse. Au lieu dutiliser les pattes 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 patte sera raccorde au +5V. Tout se passera bien, si au niveau du programme, la patte est congure comme input. Mais si elle devait tre congure en output par erreur, il est presque certain que le microcontrleur nira 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 patte 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 - 2012
61
Diduino Arduino
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-en-bas). Cette rsistance permet de tirer le potentiel vers le bas (pulldown). 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 nit par arriver sur D4. Si on relche le bouton, la rsistance pull-down ramne l'entre la masse (puisquelle est connecte la masse).
http://www.edurobot.ch - 2012 62
Diduino Arduino
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 patte est gale 0. Avec une rsistance pull-up, par dfaut, lentre sur la patte 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 - 2012
63
Diduino Arduino
Exercice 3: montage avec rsistance pull-down (rappel au moins)11
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 == vrie si deux expressions sont gales. Si elles le sont, alors le rsultat sera vrai (true) sinon le rsultat sera faux (false).
11
http://www.edurobot.ch - 2012
Diduino Arduino
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; void setup() { pinMode(bouton, INPUT); // Initialise la patte 4 comme entre // la patte 4 devient bouton // la patte 12 devient led
{ // Si boutton poussoir appuy if (digitalRead(bouton) == 1 ) { digitalWrite(led, HIGH); } // Sinon else { digitalWrite(led, LOW); } }
// allume la LED
http://www.edurobot.ch - 2012
65
Diduino Arduino
Analysons le code:
const int bouton = 4; const int led = 12; // la patte 4 devient bouton // la patte 12 devient led
On renomme les pattes 4 et 12 respectivement bouton et led. Cela facilitera la lecture du code.
void setup() { // Initialise la patte 4 comme entre pinMode(bouton, INPUT); // Initialise la patte 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 patte 4 et quelle est congure en entre (input). De mme, la patte 12 est congure 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 potientiel de +5V sa patte 4, alors il stockera une valeur de 1. Dans le cas contraire (diffrence de potientiel de 0V), il stockera une valeur de 0. Pour lire ltat de la patte 4, nous allons utiliser lexpression digitalRead. Ainsi:
if (digitalRead(bouton) == 1 ) digitalWrite(led, HIGH); // allume la LED
et les lignes:
else { digitalWrite(led, LOW); // teint la LED
Diduino Arduino
Une petite variation de code
Le code prcdent est simple, mais manque un peu de nesse; 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; void setup() { pinMode(bouton, INPUT); pinMode(led, OUTPUT); etatbouton = LOW; Serial.begin(9600); } 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 } } // la patte 4 devient bouton // la patte 12 devient led // variable qui enregistre ltat du bouton
// Initialise le bouton comme entre // Initialise la led comme sortie // Initialise ltat du bouton comme relch // Ouvre le port srie 9600 bauds
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 - 2012
67
Diduino Arduino
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 }
http://www.edurobot.ch - 2012
68
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.
Les objectifs
http://www.edurobot.ch - 2012
69
Diduino Arduino
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 dnissant 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
Si applicable: 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: identiant les objectifs dune activit ainsi que les notions thoriques et pratiques qui en rsultent planiant, construisant et programmant le robot en fonction des observations et des mesures effectues testant le robot an didentier dventuelles erreurs de conception et en mettant en place des stratgies de remdiation Initiation l'utilisation d'outils et de procds simples an de faire fonctionner un robot de manire autonome
Llve est capable de: Raliser un montage laide dun bouton poussoir, de LEDs et dune rsistance pull down. Dutiliser lArduino de manire sre De programmer correctement lArduino, pour lui faire excuter la tche demande
http://www.edurobot.ch - 2012
70
Diduino Arduino
Etape 1: les schmas
Commence par raliser le schma lectronique:
Vin
Arduino
Digital Input/Output
D10 D9 D8 D7 D6 D5 D4 D3
PWM PWM
A0 A1
PWM
Analog Input
GND
A2 A3 A4 A5
D2 D1 D0 SCL SDA
TX RX
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 pattes qui sont programmes en INPUT et celles qui le sont en OUTPUT: INPUT OUTPUT
http://www.edurobot.ch - 2012
71
Diduino Arduino
tape2: Programme
Rdige ton programme ici:
Diduino Arduino
Leon 7: le barregraphe
Introduction
Un barregraphe est un afcheur 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'afchage.
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:
5V
Arduino1
Vin
4 LEDs choix
D13 D12
Arduino
Digital Input/Output
D11 D10 D9 D8
5V
D7 D6 D5 D4
PWM PWM
Rsistances de protection
A0 A1
R7 100
PWM
Analog Input
GND
A2 A3 A4 A5
D3 D2 D1 D0
TX RX
R8 100
R5 10k
R6 10k
Rsistances pull-down
http://www.edurobot.ch - 2012
73
Diduino Arduino
Normalement, ce stade, nous devrions tre capable dexcuter le montage laide du schma lectronique! Dans le cas contraire, voici le montage raliser:
+5V
Gnd
+5V
Il ne faut pas hsiter carter un peu plus les LEDs si ncessaire! Le code complet est ici: http://www.edurobot.ch/code/code13.txt
http://www.edurobot.ch - 2012
D0 D1 D2 D3 D4 D5 D6 D7
D8 D9 D10 D11
74
Diduino Arduino
Analysons le code, maintenant: En se rfrant au schma de montage, on dclare les constantes pour chaque patte: les boutons poussoirs sont connects sur les pattes 2 et 3, alors que les LEDs sont connectes aux pattes 8 11.
/* Dclaration des constantes pour les noms des pattes */ const int allums const int allums const int const int const int const int btn_minus = 2; btn_plus = 3; led_0 led_1 led_2 led_3 = = = = 8; 9; 10; 11; //Bouton 1 pour dcrmenter le nombre de LEDs //Bouton 2 pour incrmenter le nombre de LEDs //Led //Led //Led //Led 0 1 2 3
On initilaise ensuite les pattes, selon quil sagit des entres (les boutons) ou des sorties (les LEDs).
/* Initilisation des pattes 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 - 2012 75
Diduino Arduino
Allons-y pour la partie du programme dans la boucle sans n (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);
Traduisons cela en franais: si ltat du bouton 2 est diffrent de celui enregistr, et que quelquun appuye sur le bouton, alors... Le != signie est diffrent de (teste la diffrence entre deux variables) et loprateur logique && signie 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 }
Diduino Arduino
if((etat_bouton != memoire_minus) && (etat_bouton == LOW)) { nombre_led--; //on dcrmente la valeur de nombre_led } memoire_minus = etat_bouton; //on enregistre l'tat du bouton pour le tour suivant
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 cela, on va crer une fonction dafchage appelle afche, avec une variable int valeur_recue.
//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)
http://www.edurobot.ch - 2012
77
Diduino Arduino
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. Enn, si elle reoit 4, alors elle allume toutes les LEDs:
//Puis on les allume une une if(valeur_recue >= 1) // "si la valeur reue est plus grande ou gale 1..." { digitalWrite(led_0, LOW); // "on allume la LED 0 } if(valeur_recue >= 2) // "si la valeur reue est plus grande ou gale 2..." { digitalWrite(led_1, LOW); // "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, LOW); // "on allume la LED 2 } if(valeur_recue >= 4) // "si la valeur reue est plus grande ou gale 4..." { digitalWrite(led_3, LOW); // "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, LOW); }
Il faut lire: si la variable valeur_recue est suprieure ou gale 4, alors on allume la LED 3.
http://www.edurobot.ch - 2012
78