projet éclairage escalier led

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

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.

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.

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

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

irlz44n-led.png

Et en plus tu aurais pu faire de l'allumage et extinction progressif (dimmer).

irlz44n-led.png

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.

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

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

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?

On en pense qu’il faut poster le code... :slight_smile:

... Et que tu nous rappelles ce que tu veux qu'il se passe quand :

  • On commence à descendre l'escalier, et quand on arrive en bas
  • On commence à monter, et ce qu'il se passe quand on arrive en haut
  • On commence à descendre et on rebrousse chemin vers le haut
  • On commence à monter et on fait demi tour pour descendre
 // 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.

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.

C'est quand même assez rare de se croiser dans l'escalier d'une maison...

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.

hbachetti:
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

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.

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

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 ?

@+

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

Un escalier à plat, ça n'a plus d'intérêt... :wink:

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