Bienvenue sur Bricodx RC
Voici un décor à la fois esthétique et utile.
Et oui utile !!! tout simplement parce qu'il ajoute un peu d'animation à votre piste si vous le faites fonctionnel.
Pour mon association, j'ai donc fabriqué un jeu de feux tricolores fonctionnels sur base d'arduino (Oui je suis un maniaque de l'arduino).
Côté fonctionnement, c'est assez simple a programmer et c'est l'idéal pour apprendre le langage ARDUINO.
Dans le sketch ci dessous, j'ai ajouté quelques fonctions histoire de dynamiser un peu le tout.
En gros le feu fonctionne normalement pendant 20 minutes, puis passe en mode "EN PANNE" (orange clignotant) pendant 5 minutes puis repasse en mode "NORMAL" .........
//**************** Entête déclarative ******* // A ce niveau sont déclarées : // --- Déclaration des constantes --- // --- constantes des broches --- const int ROUGE_1=2; //declaration constante de broche const int ORANGE_1=3; //declaration constante de broche const int VERT_1=4; //declaration constante de broche const int ROUGE_2=5; //declaration constante de broche const int ORANGE_2=6; //declaration constante de broche const int VERT_2=7; //declaration constante de broche const int DERANG=1; //declaration constante de broche static uint32_t tempomode = millis(); // variable memoire de temps de changement de mode int modefeu = 0 ; // 0 pour feu en dérangement et 1 pour feu en mode normale // --- Déclaration des objets utiles pour les fonctionnalités utilisées --- //**************** FONCTION SETUP = Code d'initialisation ***** // La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme void setup() { // debut de la fonction setup() // --- ici instructions à exécuter au démarrage --- // ------- Brochage ------- pinMode(DERANG, INPUT); //met la broche en entree pinMode(ROUGE_1, OUTPUT); //met la broche en sortie pinMode(VERT_1, OUTPUT); //met la broche en sortie pinMode(ORANGE_1, OUTPUT); //met la broche en sortie pinMode(ROUGE_2, OUTPUT); //met la broche en sortie pinMode(VERT_2, OUTPUT); //met la broche en sortie pinMode(ORANGE_2, OUTPUT); //met la broche en sortie //------- initialisation des LEDs au début = feu 1 au rouge et feu 2 au vert digitalWrite(ROUGE_1,LOW); // met la broche au niveau BAS digitalWrite(VERT_1,LOW); // met la broche au niveau BAS digitalWrite(ORANGE_1,HIGH); // met la broche au niveau HAUT digitalWrite(ROUGE_2,LOW); // met la broche au niveau BAS digitalWrite(VERT_2,LOW); // met la broche au niveau BAS digitalWrite(ORANGE_2,HIGH); // met la broche au niveau HAUT delay(500); // pause de 0,5 seconde digitalWrite(ORANGE_1,LOW); // met la broche au niveau BAS digitalWrite(ORANGE_2,LOW); // met la broche au niveau BAS delay(500); // pause de 0,5 seconde digitalWrite(ORANGE_1,HIGH); // met la broche au niveau HAUT digitalWrite(ORANGE_2,HIGH); // met la broche au niveau HAUT delay(500); // pause de 0,5 seconde digitalWrite(ORANGE_1,LOW); // met la broche au niveau BAS digitalWrite(ORANGE_2,LOW); // met la broche au niveau BAS } // fin de la fonction setup() // ******************************************************************************** //*************** FONCTION LOOP = Boucle sans fin = coeur du programme ************* // la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension void loop(){ // debut de la fonction loop() //lecture action bouton if (modefeu == 0) { if ((millis()-tempomode)>= 300000) { //variable temps de derangement 5min modefeu = 1 ; tempomode = millis() ; } } if (modefeu == 1) { if ((millis()-tempomode)>= 1200000) { //variable temps de normal 20min modefeu = 0 ; tempomode = millis() ; } } if (modefeu == 0) { // feu en mode derangement digitalWrite(ROUGE_1,LOW); // met la broche au niveau BAS digitalWrite(VERT_1,LOW); // met la broche au niveau BAS digitalWrite(ROUGE_2,LOW); // met la broche au niveau BAS digitalWrite(VERT_2,LOW); // met la broche au niveau BAS digitalWrite(ORANGE_1,HIGH); // met la broche au niveau HAUT digitalWrite(ORANGE_2,HIGH); // met la broche au niveau HAUT delay(1000); // pause de 1 seconde digitalWrite(ORANGE_1,LOW); // met la broche au niveau BAS digitalWrite(ORANGE_2,LOW); // met la broche au niveau BAS delay(1000); // pause de 1 seconde digitalWrite(ORANGE_1,HIGH); // met la broche au niveau HAUT digitalWrite(ORANGE_2,HIGH); // met la broche au niveau HAUT delay(1000); // pause de 1 seconde digitalWrite(ORANGE_1,LOW); // met la broche au niveau BAS digitalWrite(ORANGE_2,LOW); // met la broche au niveau BAS delay(1000); // pause de 1 seconde } else { //feu en mode normal //--- le feu 2 passe au vert digitalWrite(ROUGE_1,HIGH); // allume rouge feu 1 digitalWrite(ROUGE_2,LOW); // éteint rouge feu 2 digitalWrite(VERT_2,HIGH); // allume vert feu 2 delay (5000); // pause longue 5 secondes //--- le feu 2 passe à l'orange digitalWrite(VERT_2,LOW); // éteint vert feu 2 digitalWrite(ORANGE_2,HIGH); // allume orange feu 2 delay (2000); // pause 2 secondes //--- le feu 2 passe au rouge digitalWrite(ORANGE_2,LOW); // éteint orange feu 2 digitalWrite(ROUGE_2,HIGH); // allume rouge feu 2 delay (1000); // pause courte 1 seconde //--- le feu 1 passe au vert digitalWrite(ROUGE_1,LOW); // éteint rouge feu 1 digitalWrite(VERT_1,HIGH); // allume vert feu 1 delay (5000); // pause longue 5 secondes //--- le feu 1 passe à l'orange digitalWrite(VERT_1,LOW); // éteint vert feu 1 digitalWrite(ORANGE_1,HIGH); // allume orange feu 1 delay (2000); // pause 2 secondes //--- le feu 1 passe au rouge digitalWrite(ORANGE_1,LOW); // éteint orange feu 1 digitalWrite(ROUGE_1,HIGH); // allume rouge feu 1 delay (1000); // pause courte 1 seconde } } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin // --- Fin programme ---
Le schéma de câblage si dessous est là pour le principe et doit être adapté à voir situation. Il existe une multitude de modules arduino et beaucoup seront en mesure de fonctionner dans ce montage. La tension d'alimentation doit correspondre à votre arduino et sera donc de 3v3 ou 5v. Du coup les leds utilisées et les résistances devront être choisies en fonction des précédents paramètres.
Pour faire évoluer ce script, rejoignez moi sur Github