Eclairage escalier

Bonjour à tous

Je suis débutant dans l’Arduino et mon premier grand projet est un éclairage d’escalier marche par marche .
Un détecteur bas de l’escalier commande les leds en montant et s’éteignent de la même façon .
Un détecteur haut de l’escalier commande les leds en descendant et s’éteignent de la même façon .
J’ai trouvé grâce a notre merveilleux forum , un programme qui pourrait me convenir mais je m’arrache les cheveux avec les capteurs PIR HC SR501 qui sont trop imprécis et se déclenche pour un rien .
J’ai alors essayé l’ultrason et c’est le jour et la nuit .
Mon matériel : un Arduino Mega 2560 avec une carte 16 relais 12v et des bandes de leds

J’aurai besoin de votre aide pour remplacer les traditionnels capteur PIR par des capteurs a ultrason type HC SR04 dans mon programme .
Je voudrai également rajouter une cellule photoélectrique pour que l’éclairage ne se déclenche pas en journée , référence a définir .
Pourriez vous m’aider ou m’expliquer pour rajouter tout ca ?

Ci-dessous mon programme escalier :

const int Detecteurhaut = 45;
const int Detecteurbas = 47;
const int Marche1 =  2;
const int Marche2 =  3;
const int Marche3 =  4;
const int Marche4 =  5;
const int Marche5 =  6;
const int Marche6 =  7;
const int Marche7 =  8;
const int Marche8 =  9;
const int Marche9 =  38;
const int Marche10 =  40;
const int Marche11 =  42;
const int Marche12 =  44;
const int Marche13 =  46;
const int Marche14 =  48;
const int Marche15 =  50;
const int Marche16 =  52;

int Etat_det_haut = 0;
int Etat_det_bas = 0;


void setup()

{
pinMode(Marche1, OUTPUT);
pinMode(Marche2, OUTPUT);
pinMode(Marche3, OUTPUT);
pinMode(Marche4, OUTPUT);
pinMode(Marche5, OUTPUT);
pinMode(Marche6, OUTPUT);
pinMode(Marche7, OUTPUT);
pinMode(Marche8, OUTPUT);
pinMode(Marche9, OUTPUT);
pinMode(Marche10, OUTPUT);
pinMode(Marche11, OUTPUT);
pinMode(Marche12, OUTPUT);
pinMode(Marche13, OUTPUT);
pinMode(Marche14, OUTPUT);
pinMode(Marche15, OUTPUT);
pinMode(Marche16, OUTPUT);
pinMode(Detecteurhaut, INPUT);
pinMode(Detecteurbas, INPUT);

}

void loop()

{

 Etat_det_haut = digitalRead(Detecteurhaut);
 Etat_det_bas = digitalRead(Detecteurbas);

  
   if(Etat_det_bas==HIGH)
     {
    
      
        digitalWrite(2, HIGH);
        delay(100);
        digitalWrite(3, HIGH);
        delay(200);
        digitalWrite(4, HIGH);
        delay(200);
        digitalWrite(5, HIGH);
        delay(200);
        digitalWrite(6, HIGH);
        delay(250);
        digitalWrite(7, HIGH);
        delay(300);
        digitalWrite(8, HIGH);
        delay(300); 
        digitalWrite(9, HIGH);
        delay(300);
        digitalWrite(38, HIGH);
        delay(300); 
        digitalWrite(40, HIGH);
        delay(300);
        digitalWrite(42, HIGH);
        delay(350);
        digitalWrite(44, HIGH);
        delay(400);
        digitalWrite(46, HIGH);
        delay(450);
        digitalWrite(48, HIGH);
        delay(500);
        digitalWrite(50, HIGH);
        delay(500);
        digitalWrite(52, HIGH); 
        delay(10000);
        
        digitalWrite(2, LOW);
        delay(40);
        digitalWrite(3, LOW);
        delay(50);
        digitalWrite(4, LOW);
        delay(60);
        digitalWrite(5, LOW);
        delay(70);
        digitalWrite(6, LOW);
        delay(80);
        digitalWrite(7, LOW);
        delay(90);
        digitalWrite(8, LOW);
        delay(100);
        digitalWrite(9, LOW);
        delay(110);
        digitalWrite(38, LOW);
        delay(120);
        digitalWrite(40, LOW);
        delay(130);
        digitalWrite(42, LOW);
        delay(140);
        digitalWrite(44, LOW);
        delay(150);
        digitalWrite(46, LOW);
        delay(160);
        digitalWrite(48, LOW);
        delay(170);
        digitalWrite(50, LOW);
        delay(180);
        digitalWrite(52, LOW);
    }
      
else if (Etat_det_haut==HIGH)
  
   {         
    
       digitalWrite(52, HIGH);
       delay(100);
       digitalWrite(50, HIGH);
       delay(200);
       digitalWrite(48, HIGH);
       delay(200);
       digitalWrite(46, HIGH);
       delay(200);
       digitalWrite(44, HIGH);
       delay(250);
       digitalWrite(42, HIGH);
       delay(300);
       digitalWrite(40, HIGH);
       delay(300); 
       digitalWrite(38, HIGH);
       delay(300);
       digitalWrite(9, HIGH);
       delay(300); 
       digitalWrite(8, HIGH);
       delay(300);
       digitalWrite(7, HIGH);
       delay(350);
       digitalWrite(6, HIGH);
       delay(400);
       digitalWrite(5, HIGH);
       delay(450);
       digitalWrite(4, HIGH);
       delay(500);
       digitalWrite(3, HIGH);
       delay(500);
       digitalWrite(2, HIGH); 
       delay(10000);
    
    {
       digitalWrite(52, LOW);
       delay(40);
       digitalWrite(50, LOW);
       delay(50);
       digitalWrite(48, LOW);
       delay(60);
       digitalWrite(46, LOW);
       delay(70);
       digitalWrite(44, LOW);
       delay(80);
       digitalWrite(42, LOW);
       delay(90);
       digitalWrite(40, LOW);
       delay(100);
       digitalWrite(38, LOW);
       delay(110);
       digitalWrite(9, LOW);
       delay(120);
       digitalWrite(8, LOW);
       delay(130);
       digitalWrite(7, LOW);
       delay(140);
       digitalWrite(6, LOW);
       delay(150);
       digitalWrite(5, LOW);
       delay(160);
       digitalWrite(4, LOW);
       delay(170);
       digitalWrite(3, LOW);
       delay(180);
       digitalWrite(2, LOW);

    
  
    }     }     }

Ci-dessous le programme de détection pour un ultrason (il m’en faut 2):

#define trigPin 13      //Trig 
#define echoPin 12      //Echo 
#define avertisseur 8 //Led
int mindist = 30; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer

void setup() {
 Serial.begin (9600);  
 pinMode(trigPin, OUTPUT);  //On défini Trig comme une sortie
 pinMode(echoPin, INPUT);   //On défini Echo comme une entrée
 pinMode(avertisseur, OUTPUT); //On défini la led comme une sortie
}

void loop() {
 long duree, distance;
 digitalWrite(trigPin, LOW);  
 delayMicroseconds(2); 
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); //Trig envois pendant 10ms 
 digitalWrite(trigPin, LOW);
 
 // On calcul le temps pour l'aller retour du signal
 duree = pulseIn(echoPin, HIGH);
 distance = duree*340/(2*10000);  
  
 if (distance < mindist) {  // On allume la led si on est moins loin que "mindist", mindist étant défini en début de programme
    digitalWrite(avertisseur,HIGH);
}
 else {   //sinon on éteind la led
   digitalWrite(avertisseur,LOW);
 }
 
}

Je vous remercie tous pour le temps que vous pourriez m’accorder .

A lire d'urgence si tu veux que ta demande survive :

Désolé

Tu trouveras de l'aide sur le forum, je n'en ai aucun doute. Mais si tu veux continuer ensuite avec d'autres projets, celui-ci est le parfait exemple pour apprendre deux ou trois trucs.

  • Les tableaux et les boucles : si tu crées un tableau contenant les pins de tes leds, tu peux les allumer / éteindre avec un boucle et remplacer ainsi tes groupes de lignes digitalWrite + delay (32 lignes) en un code plus compact : la boucle (mot clé for) s'écrira en 4 lignes maximum.
  • Les fonctions : ton second code, qui lit le capteur et calcule une distance, peut se mettre dans une fonction, ce qui le rend ensuite très facile à intégrer dans ton autre code (celui des marches).

Donc, je te conseille de lire des tutos, par exemple celui d'eskimon ou locoduino. Au besoin, si tu veux aller plus vite, concentre toi sur les indices que je t'ai donnés plus haut...

J'aurai besoin de votre aide pour remplacer les traditionnels capteur PIR par des capteurs a ultrason type HC SR04 dans mon programme .

Quelle est la raison de ce choix ?
Sur ce projet les PIR donnent satisfaction : un-eclairage-descalier-leds

Dans ce projet tu verras également qu'un petit composant I2C comme le SX1509 peut permettre de se passer d'une carte MEGA pour contrôler 16 sorties.

Et comme dit lesept, une petite boucle for ne fait pas de mal.

Merci pour vos conseilles .
Je vais voir tout ca .