L'arbre des Rêves

De Les Fabriques du Ponant
Aller à : navigation, rechercher

INTRODUCTION

Nous participons au hackathon 2019 lors de notre inter semestre.

FlyerENIB2019.jpg

C'est dans ce contexte que nous avons eu l'idée de notre arbre attrape rêve.

Celui-ci sert à pour unique but d'être une veilleuse pour les enfants ou les personnes qui ne veulent pas dormir dans le noir. Il a une forme, comme son nom l'indique, d'arbre et est lumineux grâce aux leds qui sont commandées par une carte arduino.


Le matériel nécessaire

  • une carte arduino
  • du fil électrique
  • des leds
  • une pince à dénuder
  • de quoi faire une boîte
  • un bouton poussoir
  • une plaque labdec


Les différentes étapes de la création

ArbreTest.jpg

Première ébauche de notre arbre


  • création de la boîte


  • création de l'arbre

Arbre final.jpg

  • création du circuit électrique

Nous avons câblé notre arbre suivant ce modèle :

SchémaArbreRêve.PNG

schéma de câblage de notre arbre


  • assemblage de l'ensemble

Code utilisé pour le prototype

//============= Arbre Veilleuse ==============

//Coordonner 4 groupes de 5 leds pour réaliser différentes fonctions (clignoter ensemble/séparément, //rester allumées/éteintes, clignotement alterné,etc) à partir d'un appui sur le bouton poussoir.


//Définition des variables de broche const int bp = 1; const int grpLed_1 = 2; const int grpLed_2 = 3; const int grpLed_3 = 4; const int grpLed_4 = 5;

//Définition des variables d'état int StateBp = digitalRead(bp); bool StateLed[4]={LOW, LOW, LOW, LOW}; int mode = 0; //Mode par défaut int etape =0; //Etape clignotement unsigned long previousMillis = 0; // Dernier instant où l'état de la led a été modifié const long interval = 500; // intervalle de clignotement (millisecondes)


void setup() {

 //Initialisation de la communication série à 9600 bits par seconde
 Serial.begin(9600);
 //Indication des entrées
 pinMode(bp, INPUT);
 pinMode(grpLed_1, OUTPUT);
 pinMode(grpLed_2, OUTPUT);
 pinMode(grpLed_3, OUTPUT);
 pinMode(grpLed_4, OUTPUT);

}

void loop() {

 unsigned long currentMillis = millis();
 
 //Rafraichissement des lectures du bouton poussoir
 StateBp = digitalRead(bp);
 
 //Un changement de mode ?
 if (StateBp == HIGH)
 {  Serial.print("Hey !! mode = ");Serial.println(mode);
   mode+=1; 
   ExtinctionAll(StateLed);//reset
 }
 
 //Modifie les états des Leds selon le mode
 switch (mode) {
   case 1 : //Allumage de l'ensemble des led
     AllumerAll(StateLed);
     break;
   case 2 : //Clignotement de toutes les leds simultanément
   if (currentMillis - previousMillis >= interval) 
    {
     StateLed[0]=ClignoterGrp(StateLed[0]);
     StateLed[1]=ClignoterGrp(StateLed[1]);
     StateLed[2]=ClignoterGrp(StateLed[2]);
     StateLed[3]=ClignoterGrp(StateLed[3]);
    }
     break;
   case 3 : //Alumage des leds les unes après les autres
     if (currentMillis - previousMillis >= interval)
     {
       etape+=1; //Passage à l'étape suivante
       switch (etape) { // Allumer un groupe ou plusieurs en fonction de la séquence définie
         case 1 : 
           StateLed[3] = LOW;
           StateLed[0] = HIGH;
           break;
         case 2 : 
           StateLed[0] = LOW;
           StateLed[1] = HIGH;
           break;
         case 3 : 
           StateLed[1] = LOW;
           StateLed[2] = HIGH;
           break;
         case 4 : 
           StateLed[2] = LOW;
           StateLed[3] = HIGH;
           etape=0;
           break;
         default :
           etape=0;
           break;
       }
     }
     break;
   default :
     //Si le mode n'est pas l'un de ceux au dessus, on éteint les leds et on fait passer le mode à 0
     mode = 0;
     ExtinctionAll(StateLed);
     break;
 }
 
 //Retour vers les sorties
 digitalWrite(grpLed_1, StateLed[0]);
 digitalWrite(grpLed_2, StateLed[1]);
 digitalWrite(grpLed_3, StateLed[2]);
 digitalWrite(grpLed_4, StateLed[3]);
 //Affichage console pour vérification
 Serial.print("Rouge = "); Serial.print(StateLed[0]); Serial.print('\n');
 Serial.print("Bleu = "); Serial.print(StateLed[1]); Serial.print('\n');
 Serial.print("Vert = "); Serial.print(StateLed[2]); Serial.print('\n');
 Serial.print("Jaune = "); Serial.print(StateLed[3]); Serial.print('\n');
 Serial.print('\n');

}//loop

//Fonction pour éteindre toutes les leds void ExtinctionAll(bool StateLed[4]) {

 StateLed[0] = LOW;
 StateLed[1] = LOW;
 StateLed[2] = LOW;
 StateLed[3] = LOW;

}

//Fonction pour éteindre toutes les leds void AllumerAll(bool StateLed[4]) {

 StateLed[0] = HIGH;
 StateLed[1] = HIGH;
 StateLed[2] = HIGH;
 StateLed[3] = HIGH;

}

//Fonction pour faire clignoter un des groupes de leds bool ClignoterGrp(bool StateLedi) {

 if (StateLedi == HIGH)
 {StateLedi=LOW;}
 else
 {StateLedi=HIGH;}
 return StateLedi;

}