Projet Nuage Interactif 2 - Arduino : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Première Partie)
(Première Partie)
Ligne 60 : Ligne 60 :
 
     //// */
 
     //// */
 
     ////
 
     ////
     #include <IRremote.h>            //
+
     #include <IRremote.h>            // Librairie permettant de gérer le capteur infrarouge
 
      
 
      
     int RECV_PIN = 11;                //
+
     int RECV_PIN = 11;                // Pin lié au capteur infrarouge
     int ledy1=2;                      //  
+
     int ledy1=2;                      // Pin lié à la première led jaune
     //int ledy2=3;                    //
+
     int ledy2=3;                    // Pin lié à la deuxième led jaune
     int ledg1=4;                      //
+
     int ledg1=4;                      // Pin lié à la première led verte
     //int ledg2=5;                    //
+
     int ledg2=5;                    // Pin lié à la deuxième led verte
     int ledr1=6;                      //
+
     int ledr1=6;                      // Pin lié à la première led rouge
     //int ledr2=7;                    //
+
     int ledr2=7;                    // Pin lié à la deuxième led rouge
    long randOn = 0;                  // Initialize a variable for the ON time
 
    long randOff = 0;                //               
 
 
      
 
      
 
     IRrecv irrecv(RECV_PIN);
 
     IRrecv irrecv(RECV_PIN);
Ligne 78 : Ligne 76 :
 
     void setup(){
 
     void setup(){
 
       Serial.begin(9600);
 
       Serial.begin(9600);
       irrecv.enableIRIn(); // Start the receiver
+
       irrecv.enableIRIn();           // Lance le récepteur d'infrarouge
 
       pinMode(ledr1, OUTPUT);
 
       pinMode(ledr1, OUTPUT);
       //pinMode(ledr2, OUTPUT);
+
       pinMode(ledr2, OUTPUT);
 
       pinMode(ledg1, OUTPUT);
 
       pinMode(ledg1, OUTPUT);
       //pinMode(ledg2, OUTPUT);
+
       pinMode(ledg2, OUTPUT);
 
       pinMode(ledy1, OUTPUT);
 
       pinMode(ledy1, OUTPUT);
       //pinMode(ledy2, OUTPUT);
+
       pinMode(ledy2, OUTPUT);
 
       }
 
       }
 
      
 
      
 
     void loop() {
 
     void loop() {
 +
 +
      /* Cette partie de code vous permet de trouver les valeurs des touches de votre télécommande. Afin de les déterminer,
 +
      ouvrez le "Moniteur série" (Ctrl + Maj + M) et appuyez sur les touches de votre télécommande. Vous verrez apparaître
 +
      des nombres: ceux-ci correspondent aux valeurs des touches de votre télécommande.
 
       if (irrecv.decode(&results)) {
 
       if (irrecv.decode(&results)) {
 
         Serial.println(results.value, DEC);
 
         Serial.println(results.value, DEC);
 
         irrecv.resume(); // Receive the next value
 
         irrecv.resume(); // Receive the next value
 
       }
 
       }
      //digitalWrite(ledr1, HIGH);
 
      //digitalWrite(ledy1, HIGH);
 
      //digitalWrite(ledg1, HIGH);
 
 
        
 
        
 
       switch(results.value){
 
       switch(results.value){
Ligne 101 : Ligne 100 :
 
       case 16724175: // num 1
 
       case 16724175: // num 1
 
         digitalWrite(ledr1, HIGH);
 
         digitalWrite(ledr1, HIGH);
         //digitalWrite(ledr2, HIGH);
+
         digitalWrite(ledr2, HIGH);
 
         digitalWrite(ledg1, LOW);
 
         digitalWrite(ledg1, LOW);
         //digitalWrite(ledg2, LOW);
+
         digitalWrite(ledg2, LOW);
 
         digitalWrite(ledy1, LOW);
 
         digitalWrite(ledy1, LOW);
         //digitalWrite(ledy2, LOW);
+
         digitalWrite(ledy2, LOW);
 
         break;
 
         break;
 
      
 
      
Ligne 111 : Ligne 110 :
 
       case 16718055: // num 2
 
       case 16718055: // num 2
 
         digitalWrite(ledr1, LOW);
 
         digitalWrite(ledr1, LOW);
         //digitalWrite(ledr2, LOW);
+
         digitalWrite(ledr2, LOW);
 
         digitalWrite(ledg1, LOW);
 
         digitalWrite(ledg1, LOW);
         //digitalWrite(ledg2, LOW);
+
         digitalWrite(ledg2, LOW);
 
         digitalWrite(ledy1, HIGH);
 
         digitalWrite(ledy1, HIGH);
         //digitalWrite(ledy2, HIGH);
+
         digitalWrite(ledy2, HIGH);
 
         break;
 
         break;
 
      
 
      
Ligne 121 : Ligne 120 :
 
       case 16743045: // num 3
 
       case 16743045: // num 3
 
         digitalWrite(ledr1, LOW);
 
         digitalWrite(ledr1, LOW);
         //digitalWrite(ledr2, LOW);
+
         digitalWrite(ledr2, LOW);
 
         digitalWrite(ledg1, HIGH);
 
         digitalWrite(ledg1, HIGH);
         //digitalWrite(ledg2, HIGH);
+
         digitalWrite(ledg2, HIGH);
 
         digitalWrite(ledy1, LOW);
 
         digitalWrite(ledy1, LOW);
         //digitalWrite(ledy2, LOW);
+
         digitalWrite(ledy2, LOW);
 
         break;
 
         break;
 
      
 
      
Ligne 131 : Ligne 130 :
 
       case 16716015: // num 4
 
       case 16716015: // num 4
 
         digitalWrite(ledr1, HIGH);
 
         digitalWrite(ledr1, HIGH);
         //digitalWrite(ledr2, HIGH);
+
         digitalWrite(ledr2, HIGH);
 
         digitalWrite(ledg1, HIGH);
 
         digitalWrite(ledg1, HIGH);
         //digitalWrite(ledg2, HIGH);
+
         digitalWrite(ledg2, HIGH);
 
         digitalWrite(ledy1, HIGH);
 
         digitalWrite(ledy1, HIGH);
         //digitalWrite(ledy2, HIGH);
+
         digitalWrite(ledy2, HIGH);
 
         break;
 
         break;
 
      
 
      
Ligne 141 : Ligne 140 :
 
       case 16726215: // num 5
 
       case 16726215: // num 5
 
         digitalWrite(ledr1, LOW);
 
         digitalWrite(ledr1, LOW);
         //digitalWrite(ledr2, LOW);
+
         digitalWrite(ledr2, LOW);
 
         digitalWrite(ledg1, LOW);
 
         digitalWrite(ledg1, LOW);
         //digitalWrite(ledg2, LOW);
+
         digitalWrite(ledg2, LOW);
 
         digitalWrite(ledy1, LOW);
 
         digitalWrite(ledy1, LOW);
         //digitalWrite(ledy2, LOW);
+
         digitalWrite(ledy2, LOW);
 
         break;
 
         break;
 
      
 
      
Ligne 151 : Ligne 150 :
 
       case 16734885: // num 6
 
       case 16734885: // num 6
 
         digitalWrite(ledr1, LOW);
 
         digitalWrite(ledr1, LOW);
         //digitalWrite(ledr2, LOW);
+
         digitalWrite(ledr2, LOW);
 
         digitalWrite(ledg1, HIGH);
 
         digitalWrite(ledg1, HIGH);
         //digitalWrite(ledg2, HIGH);
+
         digitalWrite(ledg2, HIGH);
 
         digitalWrite(ledy1, HIGH);
 
         digitalWrite(ledy1, HIGH);
         //digitalWrite(ledy2, HIGH);
+
         digitalWrite(ledy2, HIGH);
 
         break;
 
         break;
 
      
 
      
Ligne 161 : Ligne 160 :
 
       case 16728765: // num 7
 
       case 16728765: // num 7
 
         digitalWrite(ledr1, HIGH);
 
         digitalWrite(ledr1, HIGH);
         //digitalWrite(ledr2, HIGH);
+
         digitalWrite(ledr2, HIGH);
 
         digitalWrite(ledg1, LOW);
 
         digitalWrite(ledg1, LOW);
         //digitalWrite(ledg2, LOW);
+
         digitalWrite(ledg2, LOW);
 
         digitalWrite(ledy1, HIGH);
 
         digitalWrite(ledy1, HIGH);
         //digitalWrite(ledy2, HIGH);
+
         digitalWrite(ledy2, HIGH);
 
         break;
 
         break;
 
      
 
      
Ligne 171 : Ligne 170 :
 
       case 16730805: // num 8
 
       case 16730805: // num 8
 
         digitalWrite(ledr1, HIGH);
 
         digitalWrite(ledr1, HIGH);
         //digitalWrite(ledr2, HIGH);
+
         digitalWrite(ledr2, HIGH);
 
         digitalWrite(ledg1, HIGH);
 
         digitalWrite(ledg1, HIGH);
         //digitalWrite(ledg2, HIGH);
+
         digitalWrite(ledg2, HIGH);
 
         digitalWrite(ledy1, LOW);
 
         digitalWrite(ledy1, LOW);
         //digitalWrite(ledy2, LOW);
+
         digitalWrite(ledy2, LOW);
 
         break;
 
         break;
 
        
 
        

Version du 18 janvier 2017 à 16:18

Cette page est une fiche écrite dans le cadre de l'Inter Semestre ENIB 2017

Le contenu de cette fiche est en cours de rédaction, elle va s'étoffer pendant tout le mois de janvier !

Nuage Intéractif - Arduino

Vous aimez le bricolage et vous êtes capable de lire un code basique Arduino ? Vous aimeriez contrôler un nuage lumineux à l'aide d'une télécommande? Et bien c'est possible si vous suivez ce tutoriel ! Grâce à cette page vous aurez appris à construire la maquette d'un nuage composé de LEDs. Toutes ces LEDs pourront être contrôlées à distance via une télécommande infrarouge. Les instructions émises par la télécommande seront ainsi captées par un dispositif autour d'une carte Arduino.

Auteurs

Ont participé à la rédaction de cette fiche :

Outils et matériaux

Liste du matériel

Électronique :

  • Carte Arduino
  • LEDs : 2 Rrouges 2 Vertes 2 Jaunes
  • Fils conducteurs
  • 6 Resistances pour les LEDs ( 300 Ohms pour des LEDs basiques à courant max 20 mA )
    • Led émettrice infrarouge
    • Récepteur infrarouge : TSOP32138
    • Filtre de réception : condensateur 0.1 uF
    • Résistance pour le récepteur : 47 ohms
    • Deux résistances pour adapter la portée de l'émission : conditions peu ou très perturbées (150 ohms et 68 ohms)
  • Batterie ou cable USB pour l'alimentation de l'Arduino
  • Plaque LABDEC

Autres :

  • Patafix
  • Bouteillete en plastique pour contenir la carte Arduino et la plaque LABDEC
  • Adhésif avec fibres exemple
  • Coton
  • Fil de pêche
  • Télécommande infrarouge

Outils

  • Colle liquide
  • Ciseaux

Réaliser le projet

Première Partie

  • Programmation

Ouvrez le logiciel Arduino et établissez la connexion avec votre carte ( ******* ). Ecrivez le code suivant :

   /////*
   //// * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
   //// * An IR detector/demodulator must be connected to the input RECV_PIN.
   //// * Version 0.1 July, 2009
   //// * Copyright 2009 Ken Shirriff
   //// * http://arcfn.com
   //// */
   ////
   #include <IRremote.h>             // Librairie permettant de gérer le capteur infrarouge
   
   int RECV_PIN = 11;                // Pin lié au capteur infrarouge
   int ledy1=2;                      // Pin lié à la première led jaune
   int ledy2=3;                    // Pin lié à la deuxième led jaune
   int ledg1=4;                      // Pin lié à la première led verte
   int ledg2=5;                    // Pin lié à la deuxième led verte
   int ledr1=6;                      // Pin lié à la première led rouge
   int ledr2=7;                    // Pin lié à la deuxième led rouge
   
   IRrecv irrecv(RECV_PIN);
   
   decode_results results;
   
   void setup(){
     Serial.begin(9600);
     irrecv.enableIRIn();            // Lance le récepteur d'infrarouge
     pinMode(ledr1, OUTPUT);
     pinMode(ledr2, OUTPUT);
     pinMode(ledg1, OUTPUT);
     pinMode(ledg2, OUTPUT);
     pinMode(ledy1, OUTPUT);
     pinMode(ledy2, OUTPUT);
     }
   
   void loop() {
     /* Cette partie de code vous permet de trouver les valeurs des touches de votre télécommande. Afin de les déterminer,
     ouvrez le "Moniteur série" (Ctrl + Maj + M) et appuyez sur les touches de votre télécommande. Vous verrez apparaître
     des nombres: ceux-ci correspondent aux valeurs des touches de votre télécommande.
     if (irrecv.decode(&results)) {
       Serial.println(results.value, DEC);
       irrecv.resume(); // Receive the next value
     }
     
     switch(results.value){
     
     // only red
     case 16724175: // num 1
       digitalWrite(ledr1, HIGH);
       digitalWrite(ledr2, HIGH);
       digitalWrite(ledg1, LOW);
       digitalWrite(ledg2, LOW);
       digitalWrite(ledy1, LOW);
       digitalWrite(ledy2, LOW);
       break;
   
     // only yellow
     case 16718055: // num 2
       digitalWrite(ledr1, LOW);
       digitalWrite(ledr2, LOW);
       digitalWrite(ledg1, LOW);
       digitalWrite(ledg2, LOW);
       digitalWrite(ledy1, HIGH);
       digitalWrite(ledy2, HIGH);
       break;
   
     // only green
     case 16743045: // num 3
       digitalWrite(ledr1, LOW);
       digitalWrite(ledr2, LOW);
       digitalWrite(ledg1, HIGH);
       digitalWrite(ledg2, HIGH);
       digitalWrite(ledy1, LOW);
       digitalWrite(ledy2, LOW);
       break;
   
     // all
     case 16716015: // num 4
       digitalWrite(ledr1, HIGH);
       digitalWrite(ledr2, HIGH);
       digitalWrite(ledg1, HIGH);
       digitalWrite(ledg2, HIGH);
       digitalWrite(ledy1, HIGH);
       digitalWrite(ledy2, HIGH);
       break;
   
     // switch off all the leds
     case 16726215: // num 5
       digitalWrite(ledr1, LOW);
       digitalWrite(ledr2, LOW);
       digitalWrite(ledg1, LOW);
       digitalWrite(ledg2, LOW);
       digitalWrite(ledy1, LOW);
       digitalWrite(ledy2, LOW);
       break;
   
     // yellow and green
     case 16734885: // num 6
       digitalWrite(ledr1, LOW);
       digitalWrite(ledr2, LOW);
       digitalWrite(ledg1, HIGH);
       digitalWrite(ledg2, HIGH);
       digitalWrite(ledy1, HIGH);
       digitalWrite(ledy2, HIGH);
       break;
   
     // yellow and red
     case 16728765: // num 7
       digitalWrite(ledr1, HIGH);
       digitalWrite(ledr2, HIGH);
       digitalWrite(ledg1, LOW);
       digitalWrite(ledg2, LOW);
       digitalWrite(ledy1, HIGH);
       digitalWrite(ledy2, HIGH);
       break;
   
     // red and green
     case 16730805: // num 8
       digitalWrite(ledr1, HIGH);
       digitalWrite(ledr2, HIGH);
       digitalWrite(ledg1, HIGH);
       digitalWrite(ledg2, HIGH);
       digitalWrite(ledy1, LOW);
       digitalWrite(ledy2, LOW);
       break;
     
     // guirlande
     case 16732845:
      
       break;
     }
   }

Notez le "case 16724175" Ce nombre 16724175 correspond à la touche appuyée sur la télécommande. Ces nombres sont spécifiques à chaque télécommande. Il vous faudra donc connaître le nombre correspondant à chaque touche de votre télécommande que vous allez utiliser. Pour cela, la partie de code suivante vous permettra de connaître les valeurs des touches de votre télécommande:

     /* Cette partie de code vous permet de trouver les valeurs des touches de votre télécommande. Afin de les déterminer,
     ouvrez le "Moniteur série" (Ctrl + Maj + M) et appuyez sur les touches de votre télécommande. Vous verrez apparaître
     des nombres: ceux-ci correspondent aux valeurs des touches de votre télécommande.*/
     if (irrecv.decode(&results)) {
       Serial.println(results.value, DEC);
       irrecv.resume(); // Receive the next value
     }


  • Câblage

Suivre le schéma fourni en faisant bien attention au sens des LEDs. La patte la plus longue de la LED représente l'anode, qui doit être reliée à l'entrée. Il est conseillé d'espacer les composants pour plus de clarté.


Seconde Partie : Construction du nuage

Pour réaliser le nuage, vous pouvez choisir le support de votre choix, dans ce tutoriel le support utilisé sera une bouteille. Il faudra un espace pour placer la carte Arduino et la plaque LABDEC à l'intérieur de la bouteille ainsi que le passage des fils. Pour réaliser l'ouverture de la carte Arduino, découpez le fond d'une bouteille.

IMG 20170118 110310.jpg










Une fois le découpage de la bouteille réalisé, il faudra mettre de la colle sur la bouteille et y déposer un torchon/chiffon. Attendez que tout cela soit sec. Percez des trous dans la bouteilles : 6 trous pour les 6 Leds et un 1 trou pour le passage de l'alimentation. Disposez les LEDs de manière hétérogène sur la bouteille, ensuite mettez de la colle sur le torchon/chiffon pour y déposer le coton. Vous pouvez si vous le souhaitez faire des formes avec le coton pour avoir un beau nuage.

Erreur lors de la création de la miniature : Fichier avec des dimensions supérieures à 12,5 MP

Comment ça marche ?

Observations

En appuyant sur différents boutons de la télécommande on peut observer différents modes d'éclairage pour les LEDs.

Explications

En appuyant sur les boutons d'une télécommande, vous envoyez des données via un émetteur infrarouge, chaque bouton de la télécommande possède un(e) code/donnée différent(e). Un capteur permet de recevoir ces données. Grâce à l'Arduino, nous pouvons récupérer les données des capteurs et effectuer différentes actions. Par exemple : En appuyant sur le bouton 1 de la télécommande, le capteur va recevoir "16462326561" et le transmettre à l'Arduino. Dans l'Arduino, nous réalisons un programme qui effectue une action (comme par exemple allumer une LED) s'il reçoit la valeur "16462326561".

Vous aimerez aussi

Réaliser le même projet avec différentes applications pour faciliter la vie de tous les jours. Exemple : détecter que le facteur est passé, savoir quand le repas est prêt. Pour cela il vous faudra modifier le système et installer des capteurs supplémentaires, modifier le programme pour ajouter différentes fonctionnalités etc...

Sources et ressources utiles

Tuto : Exemple de forme : http://www.instructables.com/id/Interactive-Thunder-and-Lightning-Cloud/ ( ! ballons se dégonflent, pas de code arduino) Meilleur tuto http://www.instructables.com/id/IR-Rainbow-Cloud-ver-1/?ALLSTEPS