(→La manipulation) |
|||
(3 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
{{avertissement}} | {{avertissement}} | ||
- | {{vidéo|numérovidéo = <videoflash type="mediaspip" num = 1> | + | {{vidéo|numérovidéo = <videoflash type="mediaspip" num = 1>http://mediaspip.ptitdeb.infini.fr/IMG/flv/PtitDebArduino-encoded.flv|400|300</videoflash>}} |
=='''Présentation de l'expérience'''== | =='''Présentation de l'expérience'''== | ||
- | D'horribles LED | + | |
+ | D'horribles LED nous envahissent ! L'heure est venue de les éliminer, mais il faut d'abord s’entraîner. Fabriquons donc un simulateur à base de LED pour préparer la guerre finale... | ||
== '''Matériel''' == | == '''Matériel''' == | ||
+ | |||
* [[Image:Arduino Diecimila.jpg|50px]] Un [[Arduino]] | * [[Image:Arduino Diecimila.jpg|50px]] Un [[Arduino]] | ||
* 4 [[bouton poussoir]]s | * 4 [[bouton poussoir]]s | ||
- | * [[Image:DEL.png|50px]] 4 [[LED]]s ( | + | * [[Image:DEL.png|50px]] 4 [[LED]]s (diodes électroluminescentes) |
- | * [[Image:Fils.jpg|50px]] [[fil électrique]] | + | * [[Image:Fils.jpg|50px]] Du [[fil électrique]] |
- | * [[Image:Ordinateur.jpg|50px]] [[ordinateur]] avec le programme [[Arduino]] | + | * [[Image:Ordinateur.jpg|50px]] Un [[ordinateur]] avec le programme [[Arduino]] |
- | * [[Image:BreadBoard.jpg|50px]] [[Plaque Labtec]] | + | * [[Image:BreadBoard.jpg|50px]] Une [[Plaque Labtec]] |
== '''L'expérience''' == | == '''L'expérience''' == | ||
==='''La manipulation'''=== | ==='''La manipulation'''=== | ||
- | |||
- | + | * Réaliser le montage en suivant la vidéo/le schéma. | |
+ | |||
+ | * Lancer le logiciel Arduino. | ||
- | + | * Copier/coller le code suivant dans le programme permettant d'utiliser Arduino : | |
<pre> | <pre> | ||
// Ce programme sert à faire le chasse-led | // Ce programme sert à faire le chasse-led | ||
- | int led[4]={8,9,10,11}; // | + | int led[4]={8,9,10,11}; //Déclaration des pattes des leds |
- | int bp[4]={2,3,4,5}; // | + | int bp[4]={2,3,4,5}; //Déclaration des pattes des boutons poussoirs |
- | // | + | //Déclaration et initialisation des variables globales servant pour la suite du code |
int initLed = 0; | int initLed = 0; | ||
Ligne 40 : | Ligne 43 : | ||
- | void setup(){ //Fonction permettant d'initialiser le | + | void setup(){ //Fonction permettant d'initialiser le matériel (leds et boutons poussoir) |
- | Serial.begin(9600); //Indique | + | Serial.begin(9600); //Indique que Arduino se situe sur le port usb 9600 |
- | for(i=0;i<4;i++){ //Boucle parcourant toutes les variables de 0 | + | for(i=0;i<4;i++){ //Boucle parcourant toutes les variables de 0 à 3 |
- | pinMode(bp[i], INPUT); //Indique que le bouton poussoir est une | + | pinMode(bp[i], INPUT); //Indique que le bouton poussoir est une entrée |
- | pinMode(led[i],OUTPUT); // Indique que les leds sont des | + | pinMode(led[i],OUTPUT); //Indique que les leds sont des sorties |
digitalWrite(led[i],LOW); //On met les leds au niveau bas (elles sont eteintes au depart) | digitalWrite(led[i],LOW); //On met les leds au niveau bas (elles sont eteintes au depart) | ||
digitalWrite(bp[i],HIGH); //On met les boutons poussoirs au niveau haut | digitalWrite(bp[i],HIGH); //On met les boutons poussoirs au niveau haut | ||
} | } | ||
- | compteur=0; //Initialisation du compteur | + | compteur=0; //Initialisation du compteur à 0 |
} | } | ||
Ligne 55 : | Ligne 58 : | ||
void loop(){ | void loop(){ | ||
if (initLed == 0) { //Premier passage dans la fonction loop | if (initLed == 0) { //Premier passage dans la fonction loop | ||
- | randnumber=random(0,4); // | + | randnumber=random(0,4); //Déclaration d'un premier nombre aléatoire de 0 à 3 |
- | digitalWrite(led[randnumber],HIGH); //Met la led correspondant au | + | digitalWrite(led[randnumber],HIGH); //Met la led correspondant au numéro aléatoire au niveau haut |
- | Serial.println("valeur aleatoire:"); //Affiche "valeur | + | Serial.println("valeur aleatoire:"); //Affiche "valeur aléatoire :" dans le terminal |
- | Serial.println(randnumber,DEC); //Affiche dans le terminal le | + | Serial.println(randnumber,DEC); //Affiche dans le terminal le numéro aleatoire |
- | compteur = compteur + 1; // | + | compteur = compteur + 1; //incrémentation du compteur |
- | initLed =1; //Indique que le programme est | + | initLed =1; //Indique que le programme est déjà lancé pour ne plus aller dans ce test |
tirage = 1; //Permet d'aller au test suivant | tirage = 1; //Permet d'aller au test suivant | ||
delay(500); //Attente d'une demi seconde (500 = 500ms) | delay(500); //Attente d'une demi seconde (500 = 500ms) | ||
} | } | ||
- | if (tirage == 1 ){ // | + | if (tirage == 1 ){ //Deuxième test valide si on a passé le premier test |
- | if(digitalRead(bp[randnumber])==LOW){ //Regarde si le bouton poussoir | + | if(digitalRead(bp[randnumber])==LOW){ //Regarde si le bouton poussoir associé a la led est active |
Serial.println("valeur du compteur:"); //Affiche "valeur du compteur :" dans le terminal | Serial.println("valeur du compteur:"); //Affiche "valeur du compteur :" dans le terminal | ||
Serial.println(compteur,DEC); //Affiche la valeur du compteur dans le terminal | Serial.println(compteur,DEC); //Affiche la valeur du compteur dans le terminal | ||
- | digitalWrite(led[randnumber],LOW); // | + | digitalWrite(led[randnumber],LOW); //Éteint la led quand on a appuyé sur le bp (bp=bouton poussoir) |
- | randnumber=random(4); //Cherche un autre nombre | + | randnumber=random(4); //Cherche un autre nombre aléatoire |
digitalWrite(led[randnumber],HIGH); //Allume la led correspondant a ce nouveau nombre | digitalWrite(led[randnumber],HIGH); //Allume la led correspondant a ce nouveau nombre | ||
- | compteur = compteur + 1; // | + | compteur = compteur + 1; //Incrémente le compteur |
- | Serial.println("valeur aleatoire:"); //Affiche "valeur | + | Serial.println("valeur aleatoire:"); //Affiche "valeur aléatoire :" dans le terminal |
Serial.println(randnumber,DEC); //Affiche dans le terminal le numero aleatoire | Serial.println(randnumber,DEC); //Affiche dans le terminal le numero aleatoire | ||
delay(500); //Attente d'une demi seconde | delay(500); //Attente d'une demi seconde | ||
} | } | ||
- | else { if ( digitalRead(bp[(randnumber+1)%4])==LOW || //Si le bouton poussoir correspondant | + | else { if ( digitalRead(bp[(randnumber+1)%4])==LOW || //Si le bouton poussoir correspondant à la led n'est pas activé, on regarde si l'utilisateur ne s'est pas trompé et a activé un autre bp |
digitalRead(bp[(randnumber+2)%4])==LOW || //Test des trois bp | digitalRead(bp[(randnumber+2)%4])==LOW || //Test des trois bp | ||
digitalRead(bp[(randnumber+3)%4])==LOW){ //Test des trois bp | digitalRead(bp[(randnumber+3)%4])==LOW){ //Test des trois bp | ||
- | digitalWrite(led[randnumber],LOW); //Si l'un des autres bp est | + | digitalWrite(led[randnumber],LOW); //Si l'un des autres bp est activé on éteint la led |
- | Serial.println(" "); //On | + | Serial.println(" "); //On écrit un espace dahs le terminal |
- | Serial.println("Valeur finale du compteur : "); //On | + | Serial.println("Valeur finale du compteur : "); //On écrit "Valeur finale du compteur : " dans le terminal |
Serial.println(compteur,DEC); //Affiche dans le terminal la valeur du compteur | Serial.println(compteur,DEC); //Affiche dans le terminal la valeur du compteur | ||
- | tirage = 0; //Fait en sorte que l'on allume le score | + | tirage = 0; //Fait en sorte que l'on allume le score à la fin |
} | } | ||
} | } | ||
Ligne 90 : | Ligne 93 : | ||
score=compteur-1; //Calcul du score | score=compteur-1; //Calcul du score | ||
- | if (tirage ==0) { //On | + | if (tirage ==0) { //On teste si la variable tirage est à 0 |
allumer(score); //Va dans la fonction allumer | allumer(score); //Va dans la fonction allumer | ||
} | } | ||
Ligne 97 : | Ligne 100 : | ||
void allumer(int score){ //Fonction alliumer qui prend en variable le score et qui ne retourne rien | void allumer(int score){ //Fonction alliumer qui prend en variable le score et qui ne retourne rien | ||
- | digitalWrite(led[0],LOW); // | + | digitalWrite(led[0],LOW); //Éteint toutes les leds |
- | digitalWrite(led[1],LOW); // | + | digitalWrite(led[1],LOW); //Éteint toutes les leds |
- | digitalWrite(led[2],LOW); // | + | digitalWrite(led[2],LOW); //Éteint toutes les leds |
- | digitalWrite(led[3],LOW); // | + | digitalWrite(led[3],LOW); //Éteint toutes les leds |
delay(1000); //Attend une seconde | delay(1000); //Attend une seconde | ||
- | for(int j=score; j>0;j--){ //Boucle | + | for(int j=score; j>0;j--){ //Boucle décrementant le score jusqu'à ce qu'il soit égal à 1 |
digitalWrite(led[j%4],HIGH); //Allume la led modulo 4 (Un nombre entre 0 et 3) | digitalWrite(led[j%4],HIGH); //Allume la led modulo 4 (Un nombre entre 0 et 3) | ||
- | delay(1000); //Attend une | + | delay(1000); //Attend une seconde |
- | digitalWrite(led[j%4],LOW); // | + | digitalWrite(led[j%4],LOW); //Éteint la led modulo 4 (Un nombre entre 0 et 3) |
delay(1000); //Attend une seconde | delay(1000); //Attend une seconde | ||
} | } | ||
Ligne 121 : | Ligne 124 : | ||
</pre> | </pre> | ||
- | + | * Brancher l'Arduino sur un port USB de l'ordinateur. | |
- | + | * Cliquer sur l'image représentant une sorte de v, puis sur l'image | |
- | représentant une flèche ( le programme sera mis dans l'Arduino) | + | représentant une flèche (le programme sera mis dans l'Arduino). |
- | + | * Attendre la fin du transfert. | |
- | ==='''Que voit-on ?=== | + | ==='''Que voit-on ?'''=== |
- | Appuyer, sans se tromper, sur le bouton associé à chaque Del. | + | |
+ | Appuyer, sans se tromper, sur le bouton associé à chaque Del. Dès qu'une erreur est commise, le jeu s'arrête et le score s'affiche. Chaque Del correspond à un palier. Celle de gauche signifie que vous êtes un champion de la ligue pokémon, celle du milieu gauche un champion de l’arène de Cramois'ile, celle du milieu droit un champion d'Azuria, et celle de droite que vous quittez bourg-palette. | ||
== '''Explications''' == | == '''Explications''' == | ||
==='''De manière simple'''=== | ==='''De manière simple'''=== | ||
- | Les Leds s'allument de manière aléatoire de plus en plus vite | + | |
+ | Les Leds s'allument de manière aléatoire de plus en plus vite. À chaque pression sur un bouton poussoir se produit l'événement suivant : soit ce bouton correspond à la bonne led et le jeu continue, soit ce bouton ne correspond pas à la bonne Led, le jeu s’arrête et le score s'affiche à l'aide des leds. | ||
=== '''Allons plus loin dans l'explication''' === | === '''Allons plus loin dans l'explication''' === | ||
- | |||
- | |||
- | En C, on déclare le type | + | L'Arduino est un microprocesseur dont les instructions sont codées dans un langage proche du C. |
+ | Plus d'info sur l'article Wikipédia [http://wikipedia.org/wiki/langage_C Langage C]. | ||
+ | |||
+ | En C, on déclare le type des variables avant de les utiliser : ici les int correspondent à des nombres entiers (1,2,3...), et le void correspond à une fonction non typée. Le const devant un type signifie que l'objet manipulé ne peut pas être modifié | ||
== '''Liens avec d'autres expériences''' == | == '''Liens avec d'autres expériences''' == | ||
==='''Expériences sur Wikidébrouillard'''=== | ==='''Expériences sur Wikidébrouillard'''=== | ||
- | |||
- | + | [http://www.wikidebrouillard.org/index.php/Cat%C3%A9gorie:Arduino Catégorie Arduino] | |
- | + | ||
- | == ''' | + | ==='''Autres expériences'''=== |
- | + | ||
- | + | ... | |
- | + | ||
=='''Catégories'''== | =='''Catégories'''== | ||
- | |||
- | |||
- | |||
- | |||
[[Catégorie:Contenus à développer]] | [[Catégorie:Contenus à développer]] | ||
[[Catégorie:Fiche à Valider]] | [[Catégorie:Fiche à Valider]] | ||
Ligne 169 : | Ligne 167 : | ||
[[Catégorie:technique]] | [[Catégorie:technique]] | ||
[[Catégorie:informatique]] | [[Catégorie:informatique]] | ||
+ | [[Catégorie:électrokids]] |
Sommaire |
D'horribles LED nous envahissent ! L'heure est venue de les éliminer, mais il faut d'abord s’entraîner. Fabriquons donc un simulateur à base de LED pour préparer la guerre finale...
// Ce programme sert à faire le chasse-led int led[4]={8,9,10,11}; //Déclaration des pattes des leds int bp[4]={2,3,4,5}; //Déclaration des pattes des boutons poussoirs //Déclaration et initialisation des variables globales servant pour la suite du code int initLed = 0; int i; int randnumber ; int tirage = 0; int compteur; int score; void setup(){ //Fonction permettant d'initialiser le matériel (leds et boutons poussoir) Serial.begin(9600); //Indique que Arduino se situe sur le port usb 9600 for(i=0;i<4;i++){ //Boucle parcourant toutes les variables de 0 à 3 pinMode(bp[i], INPUT); //Indique que le bouton poussoir est une entrée pinMode(led[i],OUTPUT); //Indique que les leds sont des sorties digitalWrite(led[i],LOW); //On met les leds au niveau bas (elles sont eteintes au depart) digitalWrite(bp[i],HIGH); //On met les boutons poussoirs au niveau haut } compteur=0; //Initialisation du compteur à 0 } void loop(){ if (initLed == 0) { //Premier passage dans la fonction loop randnumber=random(0,4); //Déclaration d'un premier nombre aléatoire de 0 à 3 digitalWrite(led[randnumber],HIGH); //Met la led correspondant au numéro aléatoire au niveau haut Serial.println("valeur aleatoire:"); //Affiche "valeur aléatoire :" dans le terminal Serial.println(randnumber,DEC); //Affiche dans le terminal le numéro aleatoire compteur = compteur + 1; //incrémentation du compteur initLed =1; //Indique que le programme est déjà lancé pour ne plus aller dans ce test tirage = 1; //Permet d'aller au test suivant delay(500); //Attente d'une demi seconde (500 = 500ms) } if (tirage == 1 ){ //Deuxième test valide si on a passé le premier test if(digitalRead(bp[randnumber])==LOW){ //Regarde si le bouton poussoir associé a la led est active Serial.println("valeur du compteur:"); //Affiche "valeur du compteur :" dans le terminal Serial.println(compteur,DEC); //Affiche la valeur du compteur dans le terminal digitalWrite(led[randnumber],LOW); //Éteint la led quand on a appuyé sur le bp (bp=bouton poussoir) randnumber=random(4); //Cherche un autre nombre aléatoire digitalWrite(led[randnumber],HIGH); //Allume la led correspondant a ce nouveau nombre compteur = compteur + 1; //Incrémente le compteur Serial.println("valeur aleatoire:"); //Affiche "valeur aléatoire :" dans le terminal Serial.println(randnumber,DEC); //Affiche dans le terminal le numero aleatoire delay(500); //Attente d'une demi seconde } else { if ( digitalRead(bp[(randnumber+1)%4])==LOW || //Si le bouton poussoir correspondant à la led n'est pas activé, on regarde si l'utilisateur ne s'est pas trompé et a activé un autre bp digitalRead(bp[(randnumber+2)%4])==LOW || //Test des trois bp digitalRead(bp[(randnumber+3)%4])==LOW){ //Test des trois bp digitalWrite(led[randnumber],LOW); //Si l'un des autres bp est activé on éteint la led Serial.println(" "); //On écrit un espace dahs le terminal Serial.println("Valeur finale du compteur : "); //On écrit "Valeur finale du compteur : " dans le terminal Serial.println(compteur,DEC); //Affiche dans le terminal la valeur du compteur tirage = 0; //Fait en sorte que l'on allume le score à la fin } } } score=compteur-1; //Calcul du score if (tirage ==0) { //On teste si la variable tirage est à 0 allumer(score); //Va dans la fonction allumer } } void allumer(int score){ //Fonction alliumer qui prend en variable le score et qui ne retourne rien digitalWrite(led[0],LOW); //Éteint toutes les leds digitalWrite(led[1],LOW); //Éteint toutes les leds digitalWrite(led[2],LOW); //Éteint toutes les leds digitalWrite(led[3],LOW); //Éteint toutes les leds delay(1000); //Attend une seconde for(int j=score; j>0;j--){ //Boucle décrementant le score jusqu'à ce qu'il soit égal à 1 digitalWrite(led[j%4],HIGH); //Allume la led modulo 4 (Un nombre entre 0 et 3) delay(1000); //Attend une seconde digitalWrite(led[j%4],LOW); //Éteint la led modulo 4 (Un nombre entre 0 et 3) delay(1000); //Attend une seconde } digitalWrite(led[0],HIGH); //Allume la led 0 digitalWrite(led[1],HIGH); //Allume la led 1 digitalWrite(led[2],HIGH); //Allume la led 2 digitalWrite(led[3],HIGH); //Allume la led 3 delay(1000); //Attend une seconde }
représentant une flèche (le programme sera mis dans l'Arduino).
Appuyer, sans se tromper, sur le bouton associé à chaque Del. Dès qu'une erreur est commise, le jeu s'arrête et le score s'affiche. Chaque Del correspond à un palier. Celle de gauche signifie que vous êtes un champion de la ligue pokémon, celle du milieu gauche un champion de l’arène de Cramois'ile, celle du milieu droit un champion d'Azuria, et celle de droite que vous quittez bourg-palette.
Les Leds s'allument de manière aléatoire de plus en plus vite. À chaque pression sur un bouton poussoir se produit l'événement suivant : soit ce bouton correspond à la bonne led et le jeu continue, soit ce bouton ne correspond pas à la bonne Led, le jeu s’arrête et le score s'affiche à l'aide des leds.
L'Arduino est un microprocesseur dont les instructions sont codées dans un langage proche du C. Plus d'info sur l'article Wikipédia Langage C.
En C, on déclare le type des variables avant de les utiliser : ici les int correspondent à des nombres entiers (1,2,3...), et le void correspond à une fonction non typée. Le const devant un type signifie que l'objet manipulé ne peut pas être modifié
...
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique