Nuage interactif : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Réalisation du projet)
 
(19 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 4 : Ligne 4 :
  
  
== Les auteurs ==
+
== Auteurs ==
  
- Baptiste Manach
+
* [[Utilisateur:XBapt|XBapt]] (Baptiste Manach)
 +
* [[Utilisateur:abdel|abdel]] (Abdelhafid Adid)
 +
* [[Utilisateur:Sarah|Sarah]] (Sarah Solaiman)
  
- Abdelhafid Adid
+
[[Catégorie:GroupeA]]
 
 
- Sarah Solaiman
 
  
 
== Outils et Matériaux ==
 
== Outils et Matériaux ==
Ligne 18 : Ligne 18 :
  
 
     Arduino
 
     Arduino
 +
  [[Fichier:16251094_1436799666330878_916463850_o.jpg|400px|]]
 
     LEDs : 3R 3V 3J
 
     LEDs : 3R 3V 3J
 
     Plusieurs fils
 
     Plusieurs fils
Ligne 30 : Ligne 31 :
 
Autres :
 
Autres :
 
     Une vieille télécommande
 
     Une vieille télécommande
    Un abat-jour de papier
 
 
     Flocon air fibre : polyester
 
     Flocon air fibre : polyester
 
     Colle forte  
 
     Colle forte  
 
     Une boule chinoise
 
     Une boule chinoise
 +
[[Fichier:16129261_10208080972648247_40449221_o.jpg|400px|]]
  
 
Outils :
 
Outils :
Ligne 47 : Ligne 48 :
  
  
{
+
 
/*
+
  /*
 
   NUAGE INTERACTIF
 
   NUAGE INTERACTIF
 
   Projet Petits Debrouillard Intersemestre 3 2017
 
   Projet Petits Debrouillard Intersemestre 3 2017
Ligne 57 : Ligne 58 :
  
 
   Date : 16 Janvier 2017
 
   Date : 16 Janvier 2017
 +
  */
  
*/
 
  
#include <IRremote.h>
+
  #include <IRremote.h>
  
int RECV_PIN = 11; //Entree du capteur IR
+
  int RECV_PIN = 11; //Entree du capteur IR
int IRconf_PIN = 12; //confirme la reception du signal
+
  int IRconf_PIN = 12; //confirme la reception du signal
IRrecv irrecv(RECV_PIN);
+
  IRrecv irrecv(RECV_PIN);
decode_results results;
+
  decode_results results;
 
 
int tricolor = 3; //Nombre de groupe de 3 led
 
int dOn = 200;//temps d'allumage
 
int dOff = 20;//temps de pause d'allumage
 
char key;//key correspond à la dernière touche pressee sur la telecomande
 
 
 
void setup() {
 
  Serial.begin(9600);
 
  irrecv.enableIRIn(); // Initialise le recepteur
 
  pinMode(RECV_PIN, INPUT);
 
  pinMode(IRconf_PIN, OUTPUT);//Sortie du temoin de reception de signal
 
  
 +
  int tricolor = 3; //Nombre de groupe de 3 led
 +
  int dOn = 200;//temps d'allumage
 +
  int dOff = 20;//temps de pause d'allumage
 +
  char key;//key correspond à la dernière touche pressee sur la telecomande
  
 +
  void setup() {
 +
    Serial.begin(9600);
 +
    irrecv.enableIRIn(); // Initialise le recepteur
 +
    pinMode(RECV_PIN, INPUT);
 +
    pinMode(IRconf_PIN, OUTPUT);//Sortie du temoin de reception de signal
 
   for (int i = 0; i < tricolor * 3; i++) {
 
   for (int i = 0; i < tricolor * 3; i++) {
 
     //Initialise le nombre de sortie necessaire pour le nombre de groupe de diodes cablees
 
     //Initialise le nombre de sortie necessaire pour le nombre de groupe de diodes cablees
 
     pinMode(2 + i, OUTPUT);
 
     pinMode(2 + i, OUTPUT);
 +
    }
 +
  }
 +
  //Remet a l'etat de base l'arduino
 +
    void resetLed() {
 +
    dOn = 200;
 +
    dOff = 20;
 +
    for (int i = 0; i < tricolor * 3; i++) {
 +
      digitalWrite(2 + i, LOW);
 +
    }
 
   }
 
   }
}
+
  ////////////////////////////////////
  
 
+
  void loop() {
//Remet a l'etat de base l'arduino
+
    //Boucle infinie principale du programe
void resetLed() {
+
    isInfra();
  dOn = 200;
+
     disp();
  dOff = 20;
 
  for (int i = 0; i < tricolor * 3; i++) {
 
     digitalWrite(2 + i, LOW);
 
 
   }
 
   }
}
 
////////////////////////////////////
 
  
void loop() {
+
  void disp() {
  //Boucle infinie principale du programe
+
    //Affiche l'animation en fonction de la dernière touche pressée
  isInfra();
+
    if (key == 1) diag();
  disp();
+
    if (key == 2) highToLow();
}
+
    if (key == 'P') resetLed();
 +
    if (key == 3) lowToHigh();
 +
    if (key == 4) turn(0);
 +
    if (key == 5) turn(1);
 +
    if (key == 6) blink();
  
void disp() {
+
   }
   //Affiche l'animation en fonction de la dernière touche pressée
 
  if (key == 1) diag();
 
  if (key == 2) highToLow();
 
  if (key == 'P') resetLed();
 
  if (key == 3) lowToHigh();
 
  if (key == 4) turn(0);
 
  if (key == 5) turn(1);
 
  if (key == 6) blink();
 
  
}
 
////////////////////////////////////
 
  
bool isInfra() {
+
  bool isInfra() {
  //Test si un signal est reçu et gère en concéquence
+
    //Test si un signal est reçu et gère en concéquence
  if (irrecv.decode(&results)) {
+
    if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
+
      Serial.println(results.value, HEX);
  
    digitalWrite(IRconf_PIN, HIGH); delay(10);//Allume le témoin de reception de signal
+
      digitalWrite(IRconf_PIN, HIGH); delay(10);//Allume le témoin de reception de signal
    digitalWrite(IRconf_PIN, LOW);
+
      digitalWrite(IRconf_PIN, LOW);
  
    getKey(&results);
+
      getKey(&results);
    irrecv.resume(); // Recoit la valeur suivante
+
      irrecv.resume(); // Recoit la valeur suivante
     return 1;
+
      return 1;
 +
    }
 +
     else return 0;
 
   }
 
   }
   else return 0;
+
   char getKey(decode_results * results) {
}
+
    //Transforme la valeur du signal reçu en sa valeur écrite sur la télécomande
 
+
    //results contient la valeur en hexadecimal du signal infra-rouge reçu
char getKey(decode_results * results) {
+
    resetLed();
  //Transforme la valeur du signal reçu en sa valeur écrite sur la télécomande
+
    if (results->value == 0x8C2FB266 || results->value == 0x6604CFE0) key = 1;
  //results contient la valeur en hexadecimal du signal infra-rouge reçu
+
    if (results->value == 0x8E7CE7D0 || results->value == 0x6604CFD0) key = 2;
  resetLed();
+
    if (results->value == 0x8A4077AA || results->value == 0x6604CFE2) key = 'P';
  if (results->value == 0x8C2FB266 || results->value == 0x6604CFE0) key = 1;
+
    if (results->value == 0x7B985D02 || results->value == 0x6604CFF0) key = 3;
  if (results->value == 0x8E7CE7D0 || results->value == 0x6604CFD0) key = 2;
+
    if (results->value == 0x6604CFC8 || results->value == 0x2C5793EA) key = 4;
  if (results->value == 0x8A4077AA || results->value == 0x6604CFE2) key = 'P';
+
    if (results->value == 0xCE408870 || results->value == 0x6604CFE8) key = 5;
  if (results->value == 0x7B985D02 || results->value == 0x6604CFF0) key = 3;
+
    if (results->value == 0xF003D14A || results->value == 0x6604CFFA) decreaseSpeed();
  if (results->value == 0x6604CFC8 || results->value == 0x2C5793EA) key = 4;
+
    if (results->value == 0x6604CFC6 || results->value == 0xB9F72F4C) increaseSpeed();
  if (results->value == 0xCE408870 || results->value == 0x6604CFE8) key = 5;
+
    if (results->value == 0x7BEDD20C || results->value == 0x6604CFD8) {
  if (results->value == 0xF003D14A || results->value == 0x6604CFFA) decreaseSpeed();
+
      key = 6;
  if (results->value == 0x6604CFC6 || results->value == 0xB9F72F4C) increaseSpeed();
+
      dOn = 500;
  if (results->value == 0x7BEDD20C || results->value == 0x6604CFD8) {
+
      dOff = 500;
    key = 6;
+
    }
    dOn = 500;
 
    dOff = 500;
 
 
   }
 
   }
  
}
 
  
 
+
  void increaseSpeed() {
void increaseSpeed() {
+
    //Augmente la vitesse des animations
  //Augmente la vitesse des animations
+
    if (dOn < 1500) {
  if (dOn < 1500) {
+
      dOn *= 1.1;
    dOn *= 1.1;
+
      dOff *= 1.1;
    dOff *= 1.1;
+
    }
 
   }
 
   }
}
 
  
  
void decreaseSpeed() {
+
  void decreaseSpeed() {
  //Diminue la vitesse des animations
+
    //Diminue la vitesse des animations
  if (dOn > 50) {
+
    if (dOn > 50) {
    dOn *= 0.9;
+
      dOn *= 0.9;
    dOff *= 0.9;
+
      dOff *= 0.9;
 +
    }
 
   }
 
   }
}
 
  
void turnOn(int groupe, int led) {
+
  void turnOn(int groupe, int led) {
  //Allume la diode "led" du groupe "groupe"
+
    //Allume la diode "led" du groupe "groupe"
  digitalWrite(2 + led + groupe * 3, HIGH);
+
    digitalWrite(2 + led + groupe * 3, HIGH);
}
+
  }
  
  
void turnOff(int groupe, int led) {
+
  void turnOff(int groupe, int led) {
  //Eteint la diode "led" du groupe "groupe"
+
    //Eteint la diode "led" du groupe "groupe"
  digitalWrite(2 + led + groupe * 3, LOW);
+
    digitalWrite(2 + led + groupe * 3, LOW);
}
+
  }
  
  
void offLine(int j) {
+
  void offLine(int j) {
  //Allume la diode "led" du groupe "groupe"
+
    //Allume la diode "led" du groupe "groupe"
  for (int i = 0; i < tricolor; i++) {
+
    for (int i = 0; i < tricolor; i++) {
    turnOff(i, j);
+
      turnOff(i, j);
 +
    }
 
   }
 
   }
}
 
  
void onLine(int j) {
+
  void onLine(int j) {
  //allume une ligne composée de leds
+
    //allume une ligne composée de leds
  for (int i = 0; i < tricolor; i++) {
+
    for (int i = 0; i < tricolor; i++) {
    turnOn(i, j);
+
      turnOn(i, j);
 +
    }
 
   }
 
   }
}
 
  
void offColumn(int i) {
+
  void offColumn(int i) {
  //éteind une colonne composée de leds
+
    //éteind une colonne composée de leds
  for (int j = 0; j < 3; j++) {
+
    for (int j = 0; j < 3; j++) {
    turnOff(i, j);
+
      turnOff(i, j);
 +
    }
 
   }
 
   }
}
 
  
void onColumn(int i) {
+
  void onColumn(int i) {
  //allume une colonne composée de leds
+
    //allume une colonne composée de leds
  for (int j = 0; j < 3; j++) {
+
    for (int j = 0; j < 3; j++) {
    turnOn(i, j);
+
      turnOn(i, j);
 +
    }
 
   }
 
   }
}
 
  
//////////////////////////////////////////////////////////////:
 
  
void highToLow() {
+
  void highToLow() {
  //allume les leds du haut vers le bas
+
    //allume les leds du haut vers le bas
  for (int j = 0; j < 3; j++) {
+
    for (int j = 0; j < 3; j++) {
    onLine(j); delay(dOn);
+
      onLine(j); delay(dOn);
    offLine(j); delay(dOff);
+
      offLine(j); delay(dOff);
 +
    }
 
   }
 
   }
}
 
  
void lowToHigh() {
+
  void lowToHigh() {
  //allume les leds du bas vers le haut
+
    //allume les leds du bas vers le haut
  for (int j = 0; j < 3; j++) {
+
    for (int j = 0; j < 3; j++) {
    onLine(2 - j); delay(dOn);
+
      onLine(2 - j); delay(dOn);
    offLine(2 - j); delay(dOff);
+
      offLine(2 - j); delay(dOff);
 +
    }
 
   }
 
   }
}
 
  
void turn(bool b) {
+
  void turn(bool b) {
  //Rotation des leds
+
    //Rotation des leds
  if (b == 1) {
+
    if (b == 1) {
    for (int i = 0 ; i < tricolor; i++)
+
      for (int i = 0 ; i < tricolor; i++){
     {
+
        onColumn(i); delay(dOn);
       onColumn(i); delay(dOn);
+
        offColumn(i); delay(dOff);
      offColumn(i); delay(dOff);
+
      }
 +
    }
 +
     else {
 +
       for (int i = 0 ; i < tricolor; i++) {
 +
        onColumn(tricolor - 1 - i); delay(dOn);
 +
        offColumn(tricolor - 1 - i); delay(dOff);
 +
      }
 
     }
 
     }
 
   }
 
   }
   else {
+
 
     for (int i = 0 ; i < tricolor; i++) {
+
   void d  iag() {
       onColumn(tricolor - 1 - i); delay(dOn);
+
     //balayage diagonale d'une led
       offColumn(tricolor - 1 - i); delay(dOff);
+
    char x = 0;
 +
    char y = 0;
 +
    char increment = 1;
 +
    while (isInfra() == 0) {
 +
       turnOn(x, y); delay(dOn);
 +
       turnOff(x, y); delay(dOff);
 +
      if (y == 2) increment = -1;
 +
      if (y == 0) increment = 1;
 +
      if (x == tricolor - 1) x = 0;
 +
      else x += 1;
 +
      y += increment;
 
     }
 
     }
 
   }
 
   }
}
 
  
void diag() {
+
  void blink() {
  //balayage diagonale d'une led
+
    // clignotement des leds
  char x = 0;
+
    for (int i = 0 ; i < tricolor; i++){
  char y = 0;
+
      onColumn(i);
  char increment = 1;
+
    } delay(dOn);
  while (isInfra() == 0) {
+
     for (int i = 0 ; i < tricolor; i++){
    turnOn(x, y); delay(dOn);
+
      offColumn(i);
     turnOff(x, y); delay(dOff);
+
     } delay(dOff);
    if (y == 2) increment = -1;
 
    if (y == 0) increment = 1;
 
     if (x == tricolor - 1) x = 0;
 
    else x += 1;
 
    y += increment;
 
 
   }
 
   }
}
 
  
void blink() {
+
[[Fichier:16251228_10208163446830050_1530526705_o.jpg|400px|]]
  // clignotement des leds
 
  for (int i = 0 ; i < tricolor; i++)
 
  {
 
    onColumn(i);
 
  } delay(dOn);
 
  for (int i = 0 ; i < tricolor; i++)
 
  {
 
    offColumn(i);
 
  } delay(dOff);
 
}
 
  
}
 
  
 +
''Deuxième étape : L'assemblage des composants''
 +
 +
 +
Premièrement, il faut souder a chaque diode une résistance de 33kOhms.
 +
Puis on soude un fil de 10-15 cm de longueur de chaque coté.
 +
 +
[[Fichier:16251420_10208163445630020_512191910_o.jpg|400px|]]
 +
 +
[[Fichier:16231418_1436799659664212_1867776002_o.jpg|400px|]]
 +
 +
On soude sur une même plaque toute les masses de chaque résistance afin de les lier.
 +
On pourra y souder la masse du capteur infrarouge.
 +
Par la suite on soude sur cette même plaque un dernier fil qui viendra sur la borne GND de l'Arduino.
 +
 +
Les fils libres viendront dans ce sens sur les bornes de l'arduino :
 +
 +
Patte 2 : vert
 +
Patte 3 :jaune
 +
Patte 4 : rouge
 +
Patte 5 : vert
 +
Patte 6 : jaune
 +
Patte 7 : rouge
 +
Patte 8 : vert
 +
Patte 9 : jaune
 +
Patte 10 : rouge
 +
Patte 11 : Out Capteur infrarouge
 +
Patte 12 : Jaune
  
''Deuxième étape : L'assemblage des composants''
 
  
Tout d'abord on soude la patte positive des leds avec les fils ainsi que le capteur infrarouge avec un fil. Sur la seconde patte des leds on soude les résistances. Ensuite on assemble le tout en suivant l'ordre du code sur la plaquette arduino. On peut rajouter du scotch pour que ca tienne mieux.
 
  
 
''Troisième partie : Le Nuage''
 
''Troisième partie : Le Nuage''
  
 
Après avoir fini l'assemblage des composants, on fait tout rentrer dans la boule chinoise.  
 
Après avoir fini l'assemblage des composants, on fait tout rentrer dans la boule chinoise.  
On fait ressortir les leds pour qu'il y est plus de luminosité.
+
On fait ressortir les leds dans cet assemblage : (De façon circulaire)
 +
                                                2 5 8
 +
                                                3 6 9
 +
                                                4 7 10
 +
La douzième correspond a la confirmation de réception du capteur infrarouge, vous pourrez donc la placer ou bon vous semble.
 
Enfin, on met de la colle forte sur la boule chinoise et on colle tout le polyester autour pour obtenir une forme de nuage.
 
Enfin, on met de la colle forte sur la boule chinoise et on colle tout le polyester autour pour obtenir une forme de nuage.
 +
 +
[[Fichier:16251478_10208163444669996_1359296161_o.jpg|400px|]]
  
 
== Comment ça marche ? ==
 
== Comment ça marche ? ==
Ligne 297 : Ligne 320 :
  
  
 +
[[Fichier:16251103_10208163444349988_433943472_o.jpg|400px|]]
  
 
== Et dans la vie de tous les jours?  ==
 
== Et dans la vie de tous les jours?  ==
Ligne 304 : Ligne 328 :
  
  
 +
[[Fichier:16196438_10208131241544938_77279664_o.jpg|400px|]]
  
 
== Vous aimerez aussi ==
 
== Vous aimerez aussi ==
Ligne 311 : Ligne 336 :
  
 
== Sources et liens utiles  ==
 
== Sources et liens utiles  ==
 +
 +
Aide pour arduino : [http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.DebuterPresentationLogiciel]
 +
 +
Conception du nuage : [https://www.youtube.com/watch?v=GYI-UBBNKY8]
 +
 +
[[Catégorie:ENIB2017]]

Version actuelle datée du 26 janvier 2017 à 17:33

Quoi de mieux que de créer un nuage interactif de ses propres mains! Mais comment s'y prendre ? Ce projet, simple à réaliser, permet d'obtenir un bon résultat au final et surtout d'utiliser arduino!


Auteurs

Outils et Matériaux

Électronique :

   Arduino
  16251094 1436799666330878 916463850 o.jpg
   LEDs : 3R 3V 3J
   Plusieurs fils
   9 résistances de 33kohm
   Infrared sensor = Kit IR snootlab 5€ 
       Led jaune
       Récepteur infrarouge : TSOP32138
   Battery or power source for arduino = cable usb / arduino
   Breadboard or blank circuit board


Autres :

   Une vieille télécommande
   Flocon air fibre : polyester
   Colle forte 
   Une boule chinoise

16129261 10208080972648247 40449221 o.jpg

Outils :

   Station de soudure

Réalisation du projet

Première étape : Le codage

- Tout se fait sur Arduino (langage C) - Pour comprendre cette étape il faut regarder le code. Nous avons rajouté des commentaires pour faciliter la compréhension.


 /*
 NUAGE INTERACTIF
 Projet Petits Debrouillard Intersemestre 3 2017
 Auteur : Manach Baptiste
        Solaiman Sarah
        Khalid Abdelhafid
 Date : 16 Janvier 2017
 */


 #include <IRremote.h>
 int RECV_PIN = 11; //Entree du capteur IR
 int IRconf_PIN = 12; //confirme la reception du signal
 IRrecv irrecv(RECV_PIN);
 decode_results results;
 int tricolor = 3; //Nombre de groupe de 3 led
 int dOn = 200;//temps d'allumage
 int dOff = 20;//temps de pause d'allumage
 char key;//key correspond à la dernière touche pressee sur la telecomande
 void setup() {
   Serial.begin(9600);
   irrecv.enableIRIn(); // Initialise le recepteur
   pinMode(RECV_PIN, INPUT);
   pinMode(IRconf_PIN, OUTPUT);//Sortie du temoin de reception de signal
 for (int i = 0; i < tricolor * 3; i++) {
   //Initialise le nombre de sortie necessaire pour le nombre de groupe de diodes cablees
   pinMode(2 + i, OUTPUT);
   }
 }
 //Remet a l'etat de base l'arduino
   void resetLed() {
   dOn = 200;
   dOff = 20;
   for (int i = 0; i < tricolor * 3; i++) {
     digitalWrite(2 + i, LOW);
   }
 }
 ////////////////////////////////////
 void loop() {
   //Boucle infinie principale du programe
   isInfra();
   disp();
 }
 void disp() {
   //Affiche l'animation en fonction de la dernière touche pressée
   if (key == 1) diag();
   if (key == 2) highToLow();
   if (key == 'P') resetLed();
   if (key == 3) lowToHigh();
   if (key == 4) turn(0);
   if (key == 5) turn(1);
   if (key == 6) blink();
 }


 bool isInfra() {
   //Test si un signal est reçu et gère en concéquence
   if (irrecv.decode(&results)) {
     Serial.println(results.value, HEX);
     digitalWrite(IRconf_PIN, HIGH); delay(10);//Allume le témoin de reception de signal
     digitalWrite(IRconf_PIN, LOW);
     getKey(&results);
     irrecv.resume(); // Recoit la valeur suivante
     return 1;
   }
   else return 0;
 }
 char getKey(decode_results * results) {
   //Transforme la valeur du signal reçu en sa valeur écrite sur la télécomande
   //results contient la valeur en hexadecimal du signal infra-rouge reçu
   resetLed();
   if (results->value == 0x8C2FB266 || results->value == 0x6604CFE0) key = 1;
   if (results->value == 0x8E7CE7D0 || results->value == 0x6604CFD0) key = 2;
   if (results->value == 0x8A4077AA || results->value == 0x6604CFE2) key = 'P';
   if (results->value == 0x7B985D02 || results->value == 0x6604CFF0) key = 3;
   if (results->value == 0x6604CFC8 || results->value == 0x2C5793EA) key = 4;
   if (results->value == 0xCE408870 || results->value == 0x6604CFE8) key = 5;
   if (results->value == 0xF003D14A || results->value == 0x6604CFFA) decreaseSpeed();
   if (results->value == 0x6604CFC6 || results->value == 0xB9F72F4C) increaseSpeed();
   if (results->value == 0x7BEDD20C || results->value == 0x6604CFD8) {
     key = 6;
     dOn = 500;
     dOff = 500;
   }
 }


 void increaseSpeed() {
   //Augmente la vitesse des animations
   if (dOn < 1500) {
     dOn *= 1.1;
     dOff *= 1.1;
   }
 }


 void decreaseSpeed() {
   //Diminue la vitesse des animations
   if (dOn > 50) {
     dOn *= 0.9;
     dOff *= 0.9;
   }
 }
 void turnOn(int groupe, int led) {
   //Allume la diode "led" du groupe "groupe"
   digitalWrite(2 + led + groupe * 3, HIGH);
 }


 void turnOff(int groupe, int led) {
   //Eteint la diode "led" du groupe "groupe"
   digitalWrite(2 + led + groupe * 3, LOW);
 }


 void offLine(int j) {
   //Allume la diode "led" du groupe "groupe"
   for (int i = 0; i < tricolor; i++) {
     turnOff(i, j);
   }
 }
 void onLine(int j) {
   //allume une ligne composée de leds
   for (int i = 0; i < tricolor; i++) {
     turnOn(i, j);
   }
 }
 void offColumn(int i) {
   //éteind une colonne composée de leds
   for (int j = 0; j < 3; j++) {
     turnOff(i, j);
   }
 }
 void onColumn(int i) {
   //allume une colonne composée de leds
   for (int j = 0; j < 3; j++) {
     turnOn(i, j);
   }
 }


 void highToLow() {
   //allume les leds du haut vers le bas
   for (int j = 0; j < 3; j++) {
     onLine(j); delay(dOn);
     offLine(j); delay(dOff);
   }
 }
 void lowToHigh() {
   //allume les leds du bas vers le haut
   for (int j = 0; j < 3; j++) {
     onLine(2 - j); delay(dOn);
     offLine(2 - j); delay(dOff);
   }
 }
 void turn(bool b) {
   //Rotation des leds
   if (b == 1) {
     for (int i = 0 ; i < tricolor; i++){
       onColumn(i); delay(dOn);
       offColumn(i); delay(dOff);
     }
   }
   else {
     for (int i = 0 ; i < tricolor; i++) {
       onColumn(tricolor - 1 - i); delay(dOn);
       offColumn(tricolor - 1 - i); delay(dOff);
     }
   }
 }
 void d  iag() {
   //balayage diagonale d'une led
   char x = 0;
   char y = 0;
   char increment = 1;
   while (isInfra() == 0) {
     turnOn(x, y); delay(dOn);
     turnOff(x, y); delay(dOff);
     if (y == 2) increment = -1;
     if (y == 0) increment = 1;
     if (x == tricolor - 1) x = 0;
     else x += 1;
     y += increment;
   }
 }
 void blink() {
   // clignotement des leds
   for (int i = 0 ; i < tricolor; i++){
     onColumn(i);
   } delay(dOn);
   for (int i = 0 ; i < tricolor; i++){
     offColumn(i);
   } delay(dOff);
 }

16251228 10208163446830050 1530526705 o.jpg


Deuxième étape : L'assemblage des composants


Premièrement, il faut souder a chaque diode une résistance de 33kOhms. Puis on soude un fil de 10-15 cm de longueur de chaque coté.

16251420 10208163445630020 512191910 o.jpg

16231418 1436799659664212 1867776002 o.jpg

On soude sur une même plaque toute les masses de chaque résistance afin de les lier. On pourra y souder la masse du capteur infrarouge. Par la suite on soude sur cette même plaque un dernier fil qui viendra sur la borne GND de l'Arduino.

Les fils libres viendront dans ce sens sur les bornes de l'arduino :

Patte 2 : vert Patte 3 :jaune Patte 4 : rouge Patte 5 : vert Patte 6 : jaune Patte 7 : rouge Patte 8 : vert Patte 9 : jaune Patte 10 : rouge Patte 11 : Out Capteur infrarouge Patte 12 : Jaune


Troisième partie : Le Nuage

Après avoir fini l'assemblage des composants, on fait tout rentrer dans la boule chinoise. On fait ressortir les leds dans cet assemblage : (De façon circulaire)

                                               2 5 8
                                               3 6 9
                                               4 7 10

La douzième correspond a la confirmation de réception du capteur infrarouge, vous pourrez donc la placer ou bon vous semble. Enfin, on met de la colle forte sur la boule chinoise et on colle tout le polyester autour pour obtenir une forme de nuage.

16251478 10208163444669996 1359296161 o.jpg

Comment ça marche ?

Observation

Grâce au capteur infrarouge, on peut contrôler le nuage interactif facilement qui est connecté à l'ordinateur avec le câble USB. Il ne faut surtout pas oublier de televerser le code dans l'arduino. On peut utiliser le mode que l'on désire pour gérer les leds.

Explication

Pour comprendre toute cette manœuvre, il faut bien analyser le code. Il existe 7 modes pour gérer les leds comme nous pouvons le voir dans le code...


16251103 10208163444349988 433943472 o.jpg

Et dans la vie de tous les jours?

Ce si beau projet est une très belle décoration d'intérieur. Il donne une ambiance "cosy" et ainsi on peut le placer n'importe où.


16196438 10208131241544938 77279664 o.jpg

Vous aimerez aussi

Vous pouvez choisir la conception du nuage que vous voulez. On trouve beaucoup d'exemple de conception de nuage sur internet.


Sources et liens utiles

Aide pour arduino : [1]

Conception du nuage : [2]