Arduino Forum

International => Français => Topic started by: Nicko_du_70 on Dec 16, 2018, 12:39 pm

Title: projet éclairage escalier led
Post by: Nicko_du_70 on Dec 16, 2018, 12:39 pm
Bonjour a tous,

je me suis mis dans la tête de me me lancer sur ce projet il y a environ 3 mois.

donc je me suis lancer en tant que débutant avec l'arduino.

j'ai acheter pour cela:

- un arduino mega 2560.
- une platine labdec.
- deux carte relais 5v-230v.
- deux transformateurs 230v-12v pour les bandes led.
- un jeu de jumper.
- deux capteur PIR HCSR501.

voici mon montage vu avec friting: (en pièce jointe)

ainsi que mon programme:

Code: [Select]
// programme

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;

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(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(150);
digitalWrite(4, HIGH);
delay(200);
digitalWrite(5, HIGH);
delay(250);
digitalWrite(6, HIGH);
delay(300);
digitalWrite(7, HIGH);
delay(350);
digitalWrite(8, HIGH);
delay(400);
digitalWrite(9, HIGH);
delay(450);
digitalWrite(38, HIGH);
delay(500);
digitalWrite(40, HIGH);
delay(550);
digitalWrite(42, HIGH);
delay(600);
digitalWrite(44, HIGH);
delay(650);
digitalWrite(46, HIGH);
delay(700);

}

 
while (Etat_det_haut != HIGH);
  Etat_det_haut = digitalRead(Detecteurhaut);

{


 digitalWrite(2, LOW);
 delay(100);
 digitalWrite(3, LOW);
 delay(150);
 digitalWrite(4, LOW);
 delay(200);
 digitalWrite(5, LOW);
 delay(250);
 digitalWrite(6, LOW);
 delay(300);
 digitalWrite(7, LOW);
 delay(350);
 digitalWrite(8, LOW);
 delay(400);
 digitalWrite(9, LOW);
 delay(450);
 digitalWrite(38, LOW);
 delay(500);
 digitalWrite(40, LOW);
 delay(550);
 digitalWrite(42, LOW);
 delay(600);
 digitalWrite(44, LOW);
 delay(650);
 digitalWrite(46, LOW);
 delay(700);
 }
 
Etat_det_haut = digitalRead(Detecteurhaut);
Etat_det_bas = digitalRead(Detecteurbas);


}else if (Etat_det_haut==HIGH)

{        
digitalWrite(46, HIGH);
delay(100);
digitalWrite(44, HIGH);
delay(150);
digitalWrite(42, HIGH);
delay(200);
digitalWrite(40, HIGH);
delay(250);
digitalWrite(38, HIGH);
delay(300);
digitalWrite(9, HIGH);
delay(350);
digitalWrite(8, HIGH);
delay(400);
digitalWrite(7, HIGH);
delay(450);
digitalWrite(6, HIGH);
delay(500);
digitalWrite(5, HIGH);
delay(550);
digitalWrite(4, HIGH);
delay(600);
digitalWrite(3, HIGH);
delay(650);
digitalWrite(2, HIGH);
delay(700);
}
 

while(Etat_det_bas != HIGH) ;
  Etat_det_bas = digitalRead(Detecteurbas);
{

digitalWrite(46, LOW);
delay(100);
digitalWrite(44, LOW);
delay(150);
digitalWrite(42, LOW);
delay(200);
digitalWrite(40, LOW);
delay(250);
digitalWrite(38, LOW);
delay(300);
digitalWrite(9, LOW);
delay(350);
digitalWrite(8, LOW);
delay(400);
digitalWrite(7, LOW);
delay(450);
digitalWrite(6, LOW);
delay(500);
digitalWrite(5, LOW);
delay(550);
digitalWrite(4, LOW);
delay(600);
digitalWrite(3, LOW);
delay(650);
digitalWrite(2, LOW);
delay(700);
}}


 
avec tous ça, ça ne fonctionne pas. je suis perdu.

pouvez vous me dire ce qu'il ne va pas?



Title: Re: projet éclairage escalier led
Post by: hazerty565 on Dec 16, 2018, 01:04 pm
juste pour info, met ton code entre balise [ code ] [ /code ]
Title: Re: projet éclairage escalier led
Post by: lesept on Dec 16, 2018, 02:31 pm
D'abord tu dois simplifier ton code, on y verra plus clair. Tu vas déclarer tes pins dans un tableau
Code: [Select]
const byte pinMarches[] = {2,3,4,5,6,7,8,9,38,40,42,44,46};et le nombre de marches dans une variable ou en dur avec un
Code: [Select]
#define NMarches 13

Ensuite, tu peux changer toutes tes lignes qui se ressemblent par des boucles for. Un exemple (je te laisse faire le reste tout seul):
Code: [Select]
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);
devient
Code: [Select]
for (int i=0; i< NMarches; i++) pinMode(pinMarches|i], OUTPUT);
Pour le reste, comme tes delay() sont de longueurs variables (mais linéaires, enfin affines) tu peux les calculer et faire des boucles sans trop de problèmes.

Reviens avec le code simplifié, ce sera plus facile pour débugguer :)
Title: Re: projet éclairage escalier led
Post by: J-M-L on Dec 16, 2018, 02:42 pm
et voici l'image
(http://forum.arduino.cc/index.php?action=dlattach;topic=585428.0;attach=286147)

--> ATTENTION VOUS RISQUEZ DE FAIRE PASSER TROP DE PUISSANCE DANS LA BREADBOARD... ALIMENTEZ DIRECTEMENT LES RUBANS

petite typo de lesept, il voulait écrire
Code: [Select]
for (int i=0; i< NMarches; i++) pinMode(pinMarches[i], OUTPUT);

Notez qu'au lieu de compter soi même le nombre de marche on peut laisser faire le compilo :) et donc juste remplacer
Code: [Select]
#define NMarches 13par
Code: [Select]
const byte NMarches = sizeof(pinMarches) / sizeof(pinMarches[0]);


corrigez votre post ci dessus et modifiez les code tags autour du code (enlevez les espaces)
[code] // votre code ici [/code].

ça doit ressembler à cela:
Code: [Select]
// votre code ici

faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement --> là c'est un peu difficile à lire sur téléphone



Enfin - il serait bien d'expliquer ce que vous souhaitez que le code fasse (en français).

- Quand quelqu'un est détecté en haut et que tout est éteint
- Quand quelqu'un est détecté en bas et que tout est éteint
- Quand quelqu'un est détecté en haut et qu'une séquence déclenchée à partir d'en bas est en cours
- Quand quelqu'un est détecté en bas et qu'une séquence déclenchée à partir d'en haut est en cours

etc..


Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Dec 16, 2018, 03:50 pm
tout d'abord merci pour votre attention.

voici mon code modifier:

Code: [Select]
  //
const int Detecteurhaut = 45;
const int Detecteurbas = 47;
const byte pinMarches[] = {2, 3, 4, 5, 6, 7, 8, 9, 38, 40, 42, 44, 46};
const byte NMarches = sizeof(pinMarches) / sizeof(pinMarches[0]);
int Etat_det_haut = 0;
int Etat_det_bas = 0;


void setup()
{
  for (int 1 = 0; 1 < NMarches; 1++) pinMode(pinMarches | 1], OUTPUT);
    for (int 2 = 0; 2 < NMarches; 2++) pinMode(pinMarches | 2], OUTPUT);
for (int 3 = 0; 3 < NMarches; 3++) pinMode(pinMarches | 3], OUTPUT);
  for (int 4 = 0; 4 < NMarches; 4++) pinMode(pinMarches | 4], OUTPUT);
    for (int 5 = 0; 5 < NMarches; 5++) pinMode(pinMarches | 5], OUTPUT);
      for (int 6 = 0; 6 < NMarches; 6++) pinMode(pinMarches | 6], OUTPUT);
        for (int 7 = 0; 7 < NMarches; 7++) pinMode(pinMarches | 7], OUTPUT);
          for (int 8 = 0; 8 < NMarches; 8++) pinMode(pinMarches | 8], OUTPUT);
            for (int 9 = 0; 9 < NMarches; 9++) pinMode(pinMarches | 9], OUTPUT);
              for (int 10 = 0; 10 < NMarches; 10++) pinMode(pinMarches | 10], OUTPUT);
                for (int 11 = 0; 11 < NMarches; 11++) pinMode(pinMarches | 11], OUTPUT);
                  for (int 12 = 0; 12 < NMarches; 12++) pinMode(pinMarches | 12], OUTPUT);
                    for (int 13 = 0; 13 < NMarches; 13++) pinMode(pinMarches | 13], 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(150);
      digitalWrite(4, HIGH);
      delay(200);
      digitalWrite(5, HIGH);
      delay(250);
      digitalWrite(6, HIGH);
      delay(300);
      digitalWrite(7, HIGH);
      delay(350);
      digitalWrite(8, HIGH);
      delay(400);
      digitalWrite(9, HIGH);
      delay(450);
      digitalWrite(38, HIGH);
      delay(500);
      digitalWrite(40, HIGH);
      delay(550);
      digitalWrite(42, HIGH);
      delay(600);
      digitalWrite(44, HIGH);
      delay(650);
      digitalWrite(46, HIGH);
      delay(700);

    }


    while (Etat_det_haut != HIGH);
    Etat_det_haut = digitalRead(Detecteurhaut);

    {


      digitalWrite(2, LOW);
      delay(100);
      digitalWrite(3, LOW);
      delay(150);
      digitalWrite(4, LOW);
      delay(200);
      digitalWrite(5, LOW);
      delay(250);
      digitalWrite(6, LOW);
      delay(300);
      digitalWrite(7, LOW);
      delay(350);
      digitalWrite(8, LOW);
      delay(400);
      digitalWrite(9, LOW);
      delay(450);
      digitalWrite(38, LOW);
      delay(500);
      digitalWrite(40, LOW);
      delay(550);
      digitalWrite(42, LOW);
      delay(600);
      digitalWrite(44, LOW);
      delay(650);
      digitalWrite(46, LOW);
      delay(700);
    }

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


  } else if (Etat_det_haut == HIGH)

  {
    digitalWrite(46, HIGH);
    delay(100);
    digitalWrite(44, HIGH);
    delay(150);
    digitalWrite(42, HIGH);
    delay(200);
    digitalWrite(40, HIGH);
    delay(250);
    digitalWrite(38, HIGH);
    delay(300);
    digitalWrite(9, HIGH);
    delay(350);
    digitalWrite(8, HIGH);
    delay(400);
    digitalWrite(7, HIGH);
    delay(450);
    digitalWrite(6, HIGH);
    delay(500);
    digitalWrite(5, HIGH);
    delay(550);
    digitalWrite(4, HIGH);
    delay(600);
    digitalWrite(3, HIGH);
    delay(650);
    digitalWrite(2, HIGH);
    delay(700);
  }


  while (Etat_det_bas != HIGH) ;
  Etat_det_bas = digitalRead(Detecteurbas);
  {

    digitalWrite(46, LOW);
    delay(100);
    digitalWrite(44, LOW);
    delay(150);
    digitalWrite(42, LOW);
    delay(200);
    digitalWrite(40, LOW);
    delay(250);
    digitalWrite(38, LOW);
    delay(300);
    digitalWrite(9, LOW);
    delay(350);
    digitalWrite(8, LOW);
    delay(400);
    digitalWrite(7, LOW);
    delay(450);
    digitalWrite(6, LOW);
    delay(500);
    digitalWrite(5, LOW);
    delay(550);
    digitalWrite(4, LOW);
    delay(600);
    digitalWrite(3, LOW);
    delay(650);
    digitalWrite(2, LOW);
    delay(700);
  }
}



sinon je voudrais:

quand une personne monte les escalier, que les bandes LED s'allume de bas en haut et que quand il arrive en haut elle s'éteignent de le même sens.
vice et versa dans le sens opposé.
Title: Re: projet éclairage escalier led
Post by: lesept on Dec 16, 2018, 04:46 pm
Visiblement, tu ne connais pas la syntaxe des boucles for, je te conseille de lire de la documentation.

J'ai réécrit ton code, j'espère que c'est ce que tu cherches à faire :
Code: [Select]
// programme

const byte Detecteurhaut = 45;
const byte Detecteurbas = 47;
// Numéros des pins des leds, du bas vers le haut
const byte pinMarches[] = {2,3,4,5,6,7,8,9,38,40,42,44,46};
const byte NMarches = sizeof(pinMarches) / sizeof(pinMarches[0]);

byte Etat_det_haut = 0;
byte Etat_det_bas = 0;

void Montee (bool state) {
// Allumer ou éteindre les marches une par une à partir du bas
for (byte i=0; i< NMarches; i++)
{
digitalWrite(pinMarches[i], state);
int duration = 50*pinMarches[i];
if (pinMarches[i] > 30) duration = 500 + (pinMarches[i] - 38) * 25;
delay(duration);
}
}

void Descente (bool state) {
// Allumer ou éteindre les marches une par une à partir du haut
for (byte i=NMarches; i>=0 ; i--)
{
digitalWrite(pinMarches[i], state);
int duration = 350 + 50*(9-pinMarches[i]);
if (pinMarches[i] > 30) duration = 100 + (46 - pinMarches[i]) * 25;
delay(duration);
}
}


void setup()
{
for (int i=0; i< NMarches; i++) pinMode(pinMarches[i], OUTPUT);
pinMode(Detecteurhaut, INPUT);
pinMode(Detecteurbas, INPUT);
}

void loop() {
Etat_det_haut = digitalRead(Detecteurhaut);
Etat_det_bas = digitalRead(Detecteurbas);
if (Etat_det_bas==HIGH) {
Montee (HIGH);
while (Etat_det_haut != HIGH); Etat_det_haut = digitalRead(Detecteurhaut);
Montee (LOW);
} else if (Etat_det_haut==HIGH) {
Descente (HIGH);         
while(Etat_det_bas != HIGH) Etat_det_bas = digitalRead(Detecteurbas);
Descente (LOW);
}
}
Ce n'est qu'une réécriture, je ne sais pas si ça fera exactement ce que tu veux. Ça sera une base pour l'améliorer au besoin.
Title: Re: projet éclairage escalier led
Post by: J-M-L on Dec 16, 2018, 05:04 pm
Visiblement, tu ne connais pas la syntaxe des boucles for, je te conseille de lire de la documentation.
@lesept --> oooopss... :)

Code: [Select]
for (byte i=NMarches; i>=0 ; i--) ça ne va pas fonctionner comme attendu
Title: Re: projet éclairage escalier led
Post by: lesept on Dec 16, 2018, 05:57 pm
Oui, c'est juste : c'est "i=NMarches-1"...

[excuse_bidon]C'était pour voir si tu suivais... :))[/excuse_bidon]
Title: Re: projet éclairage escalier led
Post by: J-M-L on Dec 16, 2018, 11:26 pm
Oui, c'est juste : c'est "i=NMarches-1"...

[excuse_bidon]C'était pour voir si tu suivais... :))[/excuse_bidon]
toujours Ooooopss :) (faut trouver une seconde excuse bidon)
Title: Re: projet éclairage escalier led
Post by: lesept on Dec 17, 2018, 09:09 am
Argh, je suis à court...

Code: [Select]
for (int i=NMarches-1; i>=0 ; i--)
Title: Re: projet éclairage escalier led
Post by: J-M-L on Dec 17, 2018, 09:27 am
Bravo :)

Il faut  effectivement  bien penser à utiliser une variable signée quand on décrémente jusqu'à 0 compris dans un for sinon on repasse (avec un byte) à 255 et la boucle ne s'arrête pas;

Cependant l'idée d'économiser Un peu de mémoire n'était pas mauvaise, vous auriez pu prendre un int8_t ou un char pour rester sur un seul octet vu qu'on a sans doute moins de 128 marches  
Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Dec 18, 2018, 07:04 pm
bonjour les amis arduineur,

j'ai téléversé le programme modifier comme dessous et malheur sa ne fonctionne pas!!!.

par précaution, j'ai fait l'essai avec un simple interrupteur pour voir si sa venait de mes capteurs mais toujours le même problème.

que dois je faire?

Code: [Select]
//
const byte Detecteurhaut = 45;
const byte Detecteurbas = 47;
// Numéros des pins des leds, du bas vers le haut
const byte pinMarches[] = {2, 3, 4, 5, 6, 7, 8, 9, 38, 40, 42, 44, 46};
const byte NMarches = sizeof(pinMarches) / sizeof(pinMarches[0]);

byte Etat_det_haut = 0;
byte Etat_det_bas = 0;

void Montee (bool state) {
  // Allumer ou éteindre les marches une par une à partir du bas
  for (byte i = 0; i < NMarches; i++)
  {
    digitalWrite(pinMarches[i], state);
    int duration = 50 * pinMarches[i];
    if (pinMarches[i] > 30) duration = 500 + (pinMarches[i] - 38) * 25;
    delay(duration);
  }
}

void Descente (bool state) {
  // Allumer ou éteindre les marches une par une à partir du haut
  for (byte i = NMarches - 1; i >= 0 ; i--)
  {
    digitalWrite(pinMarches[i], state);
    int duration = 350 + 50 * (9 - pinMarches[i]);
    if (pinMarches[i] > 30) duration = 100 + (46 - pinMarches[i]) * 25;
    delay(duration);
  }
}


void setup()
{
  for (int i = 0; i < NMarches; i++) pinMode(pinMarches[i], OUTPUT);
  pinMode(Detecteurhaut, INPUT);
  pinMode(Detecteurbas, INPUT);
}

void loop() {
  Etat_det_haut = digitalRead(Detecteurhaut);
  Etat_det_bas = digitalRead(Detecteurbas);
  if (Etat_det_bas == HIGH) {
    Montee (HIGH);
    while (Etat_det_haut != HIGH); Etat_det_haut = digitalRead(Detecteurhaut);
    Montee (LOW);
  } else if (Etat_det_haut == HIGH) {
    Descente (HIGH);
    while (Etat_det_bas != HIGH) Etat_det_bas = digitalRead(Detecteurbas);
    Descente (LOW);
  }
}
[code/]
Title: Re: projet éclairage escalier led
Post by: lesept on Dec 18, 2018, 07:22 pm
Tu n'as pas fait la correction du message #9 dans la fonction Descente
Title: Re: projet éclairage escalier led
Post by: lesept on Dec 18, 2018, 07:31 pm
Que dois tu faire ? Nous en dire plus.

Sur ton montage, comment sont câblés tes boutons?
Sur ce que tu vois lorsque tu lances le code.
Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Mar 02, 2019, 11:09 am
bonjour,

désolé du retard pour la réponse mais j'ai eu des problème de santé... (rien de grave)

merci de prendre en considération mon projet et de l'aide que vous m'apporter.

mes détecteurs sont brancher: un fil sur le +, un sur le - et le troisième sur la borne 47 et 45 de l'arduino selon le détecteur haut ou bas.

dès que je met en marche l'arduino, tout mes relais sont en position haut et aucun mouvement se produit.

donc j'ai enlever mes capteurs et installer un poussoir à la place pour simuler un passage.(une borne sur le + et l'autre sur les bornes 47 et 45 de l'arduino)

quand je met le bouton en place sur la borne 45, les relais se remette sur la position zéro à tour de rôle sans appuyer sur le bouton.

ensuite en installant le bouton sur la borne 47 plus rien ne se passe et le programme se fige on dirait.

voici mon programme:

Code: [Select]

//
const byte Detecteurhaut = 45;
const byte Detecteurbas = 47;
// Numéros des pins des leds, du bas vers le haut
const byte pinMarches[] = {2, 3, 4, 5, 6, 7, 8, 9, 38, 40, 42, 44, 46};
const byte NMarches = sizeof(pinMarches) / sizeof(pinMarches[0]);

byte Etat_det_haut = 0;
byte Etat_det_bas = 0;

void Montee (bool state) {
  // Allumer ou éteindre les marches une par une à partir du bas
  for (byte i = 0; i < NMarches; i++)
  {
    digitalWrite(pinMarches[i], state);
    int duration = 50 * pinMarches[i];
    if (pinMarches[i] > 30) duration = 500 + (pinMarches[i] - 38) * 25;
    delay(duration);
  }
}

void Descente (bool state) {
  // Allumer ou éteindre les marches une par une à partir du haut
  for (int i = NMarches - 1; i >= 0 ; i--)
  {
    digitalWrite(pinMarches[i], state);
    int duration = 350 + 50 * (9 - pinMarches[i]);
    if (pinMarches[i] > 30) duration = 100 + (46 - pinMarches[i]) * 25;
    delay(duration);
  }
}


void setup()
{
  for (int i = 0; i < NMarches; i++) pinMode(pinMarches[i], OUTPUT);
  pinMode(Detecteurhaut, INPUT);
  pinMode(Detecteurbas, INPUT);
}

void loop() {
  Etat_det_haut = digitalRead(Detecteurhaut);
  Etat_det_bas = digitalRead(Detecteurbas);
  if (Etat_det_bas == HIGH) {
    Montee (HIGH);
    while (Etat_det_haut != HIGH); Etat_det_haut = digitalRead(Detecteurhaut);
    Montee (LOW);
  } else if (Etat_det_haut == HIGH) {
    Descente (HIGH);
    while (Etat_det_bas != HIGH) Etat_det_bas = digitalRead(Detecteurbas);
    Descente (LOW);
  }
}
[code/]






Title: Re: projet éclairage escalier led
Post by: hbachetti on Mar 02, 2019, 12:56 pm
Un PIR et un bouton-poussoir n'ont pas un comportement identique.
Comme les boutons sont actifs au niveau haut, comme un PIR d'ailleurs, tu ne peux pas utiliser les pull-ups du processeur.
Pour chaque bouton-poussoir il te faut une résistance de pull-down.
Title: Re: projet éclairage escalier led
Post by: lesept on Mar 02, 2019, 01:05 pm
J'allais dire la même chose que hbachetti. Tu peux lire ceci (https://openclassrooms.com/fr/courses/2778161-programmez-vos-premiers-montages-avec-arduino/3285224-le-bouton-poussoir) qui explique bien ton problème. Il faut une résistance pull down comme ceci:

(https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/boutonPullDown.png)

Tu testeras un niveau HIGH pour savoir si le bouton est appuyé.

Tu mets des ";" après les while :
Code: [Select]
    while (Etat_det_haut != HIGH); Etat_det_haut = digitalRead(Detecteurhaut);
Ça veut dire qu'il va attendre que Etat_det_haut soit LOW pour passer à l'instruction suivante (le digitalRead) mais sans jamais le lire, d'où blocage. Ce n'est pas ce que tu veux : tu veux lire le bouton en permanence et passer à la suite lorsqu'il est enfoncé. Pour ça, il faut ôter le ; (même chose plus bas)
Code: [Select]
    while (Etat_det_haut != HIGH) Etat_det_haut = digitalRead(Detecteurhaut);Petit changement de code, grosse différence de comportement !!!
Title: Re: projet éclairage escalier led
Post by: hbachetti on Mar 02, 2019, 01:23 pm
Hugh ! œil de lynx a parlé.
Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Mar 02, 2019, 07:26 pm
merci pour ces réponses,

si j'ai bien compris mon capteur PIR ne m'envoi pas de 0 volt aussi, il n'envoi que du 5 volt.

donc mes capteurs ne sont pas adapter


Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Mar 02, 2019, 07:51 pm
j'ai suivi à la lettre le montage avec les bouton poussoir!

il y a une importance de mettre une résistance plus faible genre 100 ohm?
Title: Re: projet éclairage escalier led
Post by: hbachetti on Mar 02, 2019, 11:44 pm
Quote
si j'ai bien compris mon capteur PIR ne m'envoi pas de 0 volt aussi, il n'envoi que du 5 volt.
La sortie d'un PIR est à ZERO au repos. Un bouton poussoir ouvert est en l'air au repos.
Ce n'est pas la même chose.

Avec un PIR il n'y a pas besoin de pull-down, sinon les miens déclencheraient sans arrêt..

Quote
il y a une importance de mettre une résistance plus faible genre 100 ohm?
Quel intérêt ? Pourquoi 100Ω ?
J'aimerais bien savoir où tu as vu ça.

10K ou même 100K sont OK.
Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Mar 03, 2019, 08:27 pm
j'ai compris avec les résistances!

tout simplement u=r * i.

j'ai tester avec un bouton simple de chaque coté.

la monter se fait bien mais pas la descente.

si je recopie le programme de la monter au niveau void descendre sa marcherai?

car je comprend pas pourquoi il y a un FOR BYTE dans monter et un FOR INT dans descente.
Title: Re: projet éclairage escalier led
Post by: lesept on Mar 03, 2019, 09:02 pm
Un byte est un entier non signé entre 0 & 255. Pour la montée, les numéros vont de 0 à la valeur maximale et restent positifs. Un byte suffit.

Pour la descente, les numéros décroissent jusqu'à passer en dessous de 0,ce qui est le critère d'arrêt. Un byte passera à 255 après être passé à 0 et la boucle ne s'arrêtera pas. En plus on aura un dépassement d'indice de tableau. Il faut donc utiliser un int dans ce cas, pour qu'il aille jusqu'à -1 et que la boucle s'arrête.

J'avais mis du temps à le trouver...
Title: Re: projet éclairage escalier led
Post by: hbachetti on Mar 03, 2019, 09:32 pm
Juste une petite remarque à propos des relais :

C'est bruyant et ça prend une place folle sur une carte.

Tu aurais pu facilement commander chaque bande de LEDs avec un MOSFET canal N (IRLZ44N) :

(https://forum.arduino.cc/index.php?action=dlattach;topic=585428.0;attach=297553)

Et en plus tu aurais pu faire de l'allumage et extinction progressif (dimmer).
Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Mar 04, 2019, 06:51 pm
bonjour a tous,

merci pour ces précisions lesept,

pour le faite de ne pas avoir mis de MOSFET canal N (IRLZ44N), c'est parce que je débute dans l'arduino.

donc je résume:

si mes capteurs sont bon et que mon programme aussi, alors qu'est ce qui cloche?

je sens qu'on touche au but!!!

et par la suite j'intègre un capteur de lumière pour seulement le faire fonctionner de nuit.
Title: Re: projet éclairage escalier led
Post by: lesept on Mar 04, 2019, 07:21 pm
Si je comprends bien, la descente ne fonctionne pas. Peux tu poster ton code en l'état actuel et préciser ce que tu fais pour dire que la descente ne marche pas ?

Un escalier qui ne marche pas ! C'est un comble...
Title: Re: projet éclairage escalier led
Post by: dbrion06 on Mar 04, 2019, 07:38 pm
"si mes capteurs sont bon et que mon programme aussi, alors qu'est ce qui cloche?"

Si vous avez fait une petite faute de frappe lors de la copie des bouts de programmes, on ne peut pas la détecter (on sait déjà que la montée est bien testée; la descente a l'air de clocher).Peut être que rappeler le programme tel qu'il est (on n'a vu que tel qu'il devrait être) rendrait les choses plus faciles, avec la dernière version du programme chez vous....
Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Mar 04, 2019, 10:48 pm
en faite j'ai analysé le programme:

quand j'appuis sur le bouton haut escalier, les led s'allume de bas en haut.
j'appuis sur bouton bas, les led s'eteigne de bas en haut.
et sa fonctionne que dans ce sens.

sinon quand j'appuis sur bouton haut deux fois d'affilé les led s'eteigne de haut en bas.
je rappuis sur bouton bas et les led se rallume de haut en bas.

donc je pense que sa vient du programme!

vous en pensez quoi?
Title: Re: projet éclairage escalier led
Post by: J-M-L on Mar 04, 2019, 10:52 pm
On en pense qu'il faut poster le code... :)
Title: Re: projet éclairage escalier led
Post by: lesept on Mar 05, 2019, 12:10 am
... Et que tu nous rappelles ce que tu veux qu'il se passe quand :
Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Mar 06, 2019, 09:49 pm
Code: [Select]
// programme actuelle dans l'arduino

const byte Detecteurhaut = 45;
const byte Detecteurbas = 47;
// Numéros des pins des leds, du bas vers le haut
const byte pinMarches[] = {2, 3, 4, 5, 6, 7, 8, 9, 38, 40, 42, 44, 46};
const byte NMarches = sizeof(pinMarches) / sizeof(pinMarches[0]);

byte Etat_det_haut = 0;
byte Etat_det_bas = 0;

void Montee (bool state) {
  // Allumer ou éteindre les marches une par une à partir du bas
  for (byte i = 0; i < NMarches; i++)
  {
    digitalWrite(pinMarches[i], state);
    int duration = 50 * pinMarches[i];
    if (pinMarches[i] > 30) duration = 500 + (pinMarches[i] - 38) * 25;
    delay(duration);
  }
}

void Descente (bool state) {
  // Allumer ou éteindre les marches une par une à partir du haut
  for (int i=NMarches-1; i >=0 ; i--)
  {
    digitalWrite(pinMarches[i], state);
    int duration = 350 + 50 * (9 - pinMarches[i]);
    if (pinMarches[i] > 30) duration = 100 + (46 - pinMarches[i]) * 25;
    delay(duration);
  }
}


void setup()
{
  for (int i = 0; i < NMarches; i++) pinMode(pinMarches[i], OUTPUT);
  pinMode(Detecteurhaut, INPUT);
  pinMode(Detecteurbas, INPUT);
}

void loop() {
  Etat_det_haut = digitalRead(Detecteurhaut);
  Etat_det_bas = digitalRead(Detecteurbas);
  if (Etat_det_bas == HIGH) {
    Montee (HIGH);
    while (Etat_det_haut != HIGH) Etat_det_haut = digitalRead(Detecteurhaut);
    Montee (LOW);
  } else if (Etat_det_haut == HIGH) {
    Descente (HIGH);
    while (Etat_det_bas != HIGH) Etat_det_bas = digitalRead(Detecteurbas);
    Descente (LOW);
  }
}
 


les étapes à intégrer au programme:

quand on veut monté l'escalier les LED s'allument de bas en haut et s'éteignent quand on atteint le capteur haut de bas en haut.
quand on veut descendre l'escalier les LED s'allument de haut en bas et s'éteignent quand on atteint le capteur bas de haut en bas.
si on rebrousse chemin il faudrait une tempo pour éteindre les LED de 1 min d'attente.
Title: Re: projet éclairage escalier led
Post by: hbachetti on Mar 07, 2019, 12:05 am
Quote
quand on veut monté l'escalier les LED s'allument de bas en haut et s'éteignent quand on atteint le capteur haut de bas en haut.
Allumer l'éclairage sur détection d'une personne en bas de l'escalier et l'éteindre sur détection de la même personne en haut est une mauvaise idée.

Rien ne garantit qu'il s'agisse de la même personne. Un capteur de passage HC-SR501 ne détecte pas le sens de passage.

De plus une autre personne peut très bien descendre, et donc être détectée par le capteur du haut, alors que la première personne est en train de monter, et éteindre l'éclairage à ce moment-là n'est pas une bonne idée, car s'il fait nuit les deux personnes se retrouvent dans le noir.

Title: Re: projet éclairage escalier led
Post by: lesept on Mar 07, 2019, 12:08 am
C'est quand même assez rare de se croiser dans l'escalier d'une maison...
Title: Re: projet éclairage escalier led
Post by: hbachetti on Mar 07, 2019, 12:13 am
Si l'on habite tout seul oui.

Deuxième cas :

Deux personnes montent.
La première arrive au niveau du détecteur du haut.
L'éclairage s'éteint alors que la deuxième est encore au milieu de l'escalier.

Mauvaise idée.

En test chez moi depuis quelques mois. J'ai eu le temps de corriger les erreurs.
Title: Re: projet éclairage escalier led
Post by: lesept on Mar 07, 2019, 09:04 am
Si l'on habite tout seul oui.
C'est clair. Nous on est 5 et c'est très rare qu'on se croise dans l'escalier. Ce que je voulais dire, c'est qu'il vaut mieux faire un sketch simple qui fonctionne plutôt qu'un programme exhaustif qui sera complexe à finaliser.

Pour ta seconde remarque, il suffit d'ajouter une temporisation de quelques secondes avant d'éteindre. Il faut aussi éviter que la détection de la seconde personne soit prise pour une personne qui descend : prévoir une temporisation avant de relancer la détection
Title: Re: projet éclairage escalier led
Post by: hbachetti on Mar 07, 2019, 09:44 am
Quote
Ce que je voulais dire, c'est qu'il vaut mieux faire un sketch simple qui fonctionne plutôt qu'un programme exhaustif qui sera complexe à finaliser.
tant que
    si détection de présence bas
        allumer de bas en haut
        armer timer
    si détection de présence haut
        allumer de haut en bas
        armer timer
    si timer écoulé
        éteindre

C'est très simple au contraire. L'extinction est faite uniquement sur timer.
Si une personne est détectée on allume systématiquement.

Quote
Pour ta seconde remarque, il suffit d'ajouter une temporisation de quelques secondes avant d'éteindre. Il faut aussi éviter que la détection de la seconde personne soit prise pour une personne qui descend : prévoir une temporisation avant de relancer la détection
Tu compliques déjà les choses. Tu arriveras à un sketch beaucoup plus complexe au final.

tant que
    si détection de présence bas
        capteur_bas = 1
        si capteur_haut
            armer timer
        sinon
            allumer de bas en haut
    si détection de présence haut
        capteur_haut = 1
        si capteur_bas
            armer timer
        sinon
            allumer de haut en bas
    si timer écoulé
        capteur_bas = 0
        capteur_haut = 0
        éteindre

Et encore une fois, si deux personnes se croisent, cela ne marche pas.

Alors qu'un solution de timer unique réarmable est plus simple.
Une seule condition pour l'extinction.
Et ça marche dans tous les cas.

@Nicko_du_70

Quote
deux transformateurs 230v-12v pour les bandes led.
Il s'agit probablement de bande LEDs 4W/m ou 6W/m.
des 5730 ?

Tu as une idée de la puissance totale ?

@+
Title: Re: projet éclairage escalier led
Post by: Nicko_du_70 on Mar 08, 2019, 06:54 am
je vous montre les photos de tous ce que j'ai demain comme sa on mettra tout a plat
Title: Re: projet éclairage escalier led
Post by: lesept on Mar 08, 2019, 11:12 am
Un escalier à plat, ça n'a plus d'intérêt... ;)
Title: Re: projet éclairage escalier led
Post by: fredo37 on Jun 02, 2019, 01:51 pm
bonjour a vous

ayant le projet d'installer des rubans led  dans mon escalier
etant plutot debutant en Arduino

j ai recherché sur le forum des exemples de codes et j'ai trouvé le votre tres interressant

je me suis mis a la simulation sur Tinkercad pour voir avec une carte UNO j'utilise les pin A4,A5
et 0 a 13 pour les sorties (j'ai 16 marches)
j'ai pris A1 et A2 pour les capteurs  haut et bas

j'ai lancé la simulation mais ca ne fonctionne pas

si j'appuie sur le bp du bas les leds s'allument, restent allumées, lorsque j'appuie sur le capteur du haut il ne se passe rien , et inverssement si je commence par le capteur du haut

pourriez vous m'aider svp
merci