Chasse LED avec arduino

De Wikidebrouillard.

(Catégories)
m
Ligne 4 : Ligne 4 :
=='''Présentation de l'expérience'''==
=='''Présentation de l'expérience'''==
-
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.
+
 
 +
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 (diode électroluminescente)
+
* [[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'''===
-
1/ Câbler en suivant la vidéo /le schema
 
-
2/ Lancer le logiciel Arduino
+
* Réaliser le montage en suivant la vidéo/le schéma.
 +
 
 +
* Lancer le logiciel Arduino.
-
3/ Copier/coller le code suivant dans le programme permettant d'utiliser 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};              //Declaration des pates des leds
+
int led[4]={8,9,10,11};              //Déclaration des pattes des leds
-
int bp[4]={2,3,4,5};                //Declaration des pates des boutons poussoirs
+
int bp[4]={2,3,4,5};                //Déclaration des pattes des boutons poussoirs
-
//Declaration et initialisation des variables globales servant pour la suite du code
+
//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 materiel (leds et boutons poussoir)
+
void setup(){                        //Fonction permettant d'initialiser le matériel (leds et boutons poussoir)
    
    
-
   Serial.begin(9600);                //Indique qque Arduino se situe sur le port usb 9600
+
   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 a 3
+
   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 entree
+
       pinMode(bp[i], INPUT);        //Indique que le bouton poussoir est une entrée
-
       pinMode(led[i],OUTPUT);      // Indique que les leds sont des sortie
+
       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 a 0
+
   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);              //Declaration d'un premier nombre aleatoire de 0 a 3
+
       randnumber=random(0,4);              //Déclaration d'un premier nombre aléatoire de 0 à 3
-
       digitalWrite(led[randnumber],HIGH);  //Met la led correspondant au numero aleatoire au niveau haut
+
       digitalWrite(led[randnumber],HIGH);  //Met la led correspondant au numéro aléatoire au niveau haut
-
       Serial.println("valeur aleatoire:");  //Affiche "valeur aleatoire :" dans le terminal
+
       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 numéro aleatoire
-
       compteur = compteur + 1;              //incrementation du compteur
+
       compteur = compteur + 1;              //incrémentation du compteur
-
       initLed =1;                          //Indique que le programme est deja lance pour ne plus aller dans ce test
+
       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 ){                            //Deuxieme test valide si on a passe le premier test
+
   if (tirage == 1 ){                            //Deuxième test valide si on a passé le premier test
-
       if(digitalRead(bp[randnumber])==LOW){      //Regarde si le bouton poussoir associe a la led est active
+
       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);    //Eteint la led quand on a appuye sur le bp (bp=bouton poussoir)
+
           digitalWrite(led[randnumber],LOW);    //Éteint la led quand on a appuyé sur le bp (bp=bouton poussoir)
-
           randnumber=random(4);                  //Cherche un autre nombre aleatoire
+
           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;              //Incremente le compteur
+
           compteur = compteur + 1;              //Incrémente le compteur
-
           Serial.println("valeur aleatoire:");  //Affiche "valeur aleatoire :" dans le terminal
+
           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 a la led n'est pas active on regarde si l'utilisateur ne s'est pas trompe et a active un autre bp
+
       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 active on eteint la led
+
                 digitalWrite(led[randnumber],LOW);                //Si l'un des autres bp est activé on éteint la led
-
                 Serial.println(" ");                              //On ecrit un espace dahs le terminal
+
                 Serial.println(" ");                              //On écrit un espace dahs le terminal
-
                 Serial.println("Valeur finale du compteur : ");  //On ecrit "Valeur finale du compteur : " dans 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
                 Serial.println(compteur,DEC);                    //Affiche dans le terminal la valeur du compteur
-
                 tirage = 0;                                      //Fait en sorte que l'on allume le score a la fin
+
                 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 test si la variable tirage est a 0
+
   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);                      //Eteint toutes les leds
+
   digitalWrite(led[0],LOW);                      //Éteint toutes les leds
-
digitalWrite(led[1],LOW);                        //Eteint toutes les leds
+
digitalWrite(led[1],LOW);                        //Éteint toutes les leds
-
digitalWrite(led[2],LOW);                        //Eteint toutes les leds
+
digitalWrite(led[2],LOW);                        //Éteint toutes les leds
-
digitalWrite(led[3],LOW);                        //Eteint toutes les leds
+
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 decrementant le score jusqu'a ce qu'il soit egal a 1
+
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 secnde
+
   delay(1000);                                  //Attend une seconde
-
   digitalWrite(led[j%4],LOW);                    //Eteint la led modulo 4 (Un nombre entre 0 et 3)
+
   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>
-
4/ Brancher l'Arduino sur un port USB de l'ordinateur
+
* Brancher l'Arduino sur un port USB de l'ordinateur.
-
5/ Cliquer sur l'image représentant une sorte de v, puis sur l'image  
+
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).
-
6/ Attendre la fin du transfert
+
Attendre la fin du transfert.
-
==='''Que voit-on ?===
+
==='''Que voit-on ?'''===
-
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 mileu droit un champion d'Azuria, et celle de droite que vous quittez bourg-palette.
+
 
 +
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 , à 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.
+
 
 +
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''' ===
-
L'Arduino est un microprocesseur dont les instructions sont codés dans un langage proche du C.
 
-
Plus d'info sur http://wikipedia.org/wiki/langage_C.
 
-
En C, on déclare le type de variable avant de les utiliser : ici les int correspondent à des nombres entiers (1,2,3...), et le void correspond à une fonction non typé. Le const devant un type signifie que l'objet  manipulé ne peut pas etre modifié  
+
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'''===
-
Indiquer ici les expériences de Wikidébrouillard.
+
 
 +
[http://www.wikidebrouillard.org/index.php/Cat%C3%A9gorie:Arduino Catégorie Arduino]
==='''Autres expériences'''===
==='''Autres expériences'''===
-
Autres expériences avec le même concept, recherche sur internet (indiquer les liens).
 
-
== '''Applications : liens avec le quotidien''' ==
+
...
-
L'Arduino est proche du microprocesseur contenu dans l'ordinateur
+
-
 
+
-
== '''Lieux propices à sa réalisation''' ==
+
-
A proximité d'un ordinateur
+
=='''Catégories'''==
=='''Catégories'''==
-
Penser à fixer les disciplines scientifiques qui correspondent à l'expérience. Remplacer "à classer" par la discipline correspondante.
 
-
 
-
[[Catégorie:Orthographe et style à corriger]]
 
[[Catégorie:Contenus à développer]]
[[Catégorie:Contenus à développer]]
[[Catégorie:Fiche à Valider]]
[[Catégorie:Fiche à Valider]]

Version du 21 février 2013 à 16:42

Article incomplet en cours de rédaction
La vidéo "Chasse LED avec arduino"


Sommaire

Présentation de l'expérience

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

L'expérience

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 :


// 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
}



  • 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).

  • Attendre la fin du transfert.

Que voit-on ?

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

De manière simple

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

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é

Liens avec d'autres expériences

Expériences sur Wikidébrouillard

Catégorie Arduino

Autres expériences

...

Catégories

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraits
AR
CO

Chasse LED avec arduino

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique