L'arbre des Rêves
Sommaire
INTRODUCTION
Nous participons au hackathon 2019 lors de notre inter semestre.
C'est dans ce contexte que nous avons eu l'idée de cette 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.
Création du prototype
Première ébauche de notre arbre
Le matériel nécessaire
- une carte arduino
- du fil électrique
- des leds
- une pince à dénuder
- de quoi faire une boîte
Les différentes étapes de la création
- création de la boîte
- création de l'arbre
- création du circuit électrique
Nous avons câblé notre arbre suivant ce modèle :
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;
}