Bricodx RC

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).

feux tricolores
feux tricolores

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" .........

Code
//**************** 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.

Schéma de câblage feux tricolores

Pour faire évoluer ce script, rejoignez moi sur Github

Retour en haut de la page