Go Down

Topic: projet éclairage escalier led (Read 1 time) previous topic - next topic

Nicko_du_70

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.

hbachetti

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.

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

lesept

C'est quand même assez rare de se croiser dans l'escalier d'une maison...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

hbachetti

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.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

lesept

#34
Mar 07, 2019, 09:04 am Last Edit: Mar 07, 2019, 09:05 am by lesept
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
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

hbachetti

#35
Mar 07, 2019, 09:44 am Last Edit: Mar 07, 2019, 09:52 am by hbachetti
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 ?

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Nicko_du_70

je vous montre les photos de tous ce que j'ai demain comme sa on mettra tout a plat

lesept

Un escalier à plat, ça n'a plus d'intérêt... ;)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

fredo37

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

Go Up