mercredi 6 mars 2019

Un éclairage d'escalier à LEDs



Un éclairage d'escalier à LEDs


Aujourd'hui nous allons jouer avec un petit montage domotique afin d'éclairer automatiquement les marches d'un escalier avec des rubans de LEDs.
L'automatisation sera confiée à un ARDUINO équipé de deux capteurs de mouvement.

Avertissement : ce projet est en cours de refonte : L'alimentation va être simplifiée (suppression du module MeanWell). De plus je me suis aperçu que j'avais oublié sur le schéma d'ajouter le régulateur 3.3V pour l'alimentation du NRF24L01, qui n'était pas utilisé jusqu'à présent.
Le NRF24L01 sera utilisé ultérieurement pour une liaison 2.4GHz avec un serveur DOMOTICZ.

02/08/2019 : le schéma et le PCB sont à jour, le montage fonctionne sur breadboard, mais il reste du travail.

20/01/2020 : une nouvelle version est en cours d'étude. Cette nouvelle mouture utilise un module SX1509. Cet expander de GPIOs I2C permet de disposer de 16 sorties PWM. L'ARDUINO MEGA devient donc inutile car un ARDUINO PRO MINI suffit amplement à piloter l'ensemble. Le SX1509 étant alimenté en 3.3V la PRO MINI choisie est également un modèle 3.3V 8MHz.

Le nouveau montage a de multiples avantages :
  • un ruban de LEDs supplémentaire
  • le régulateur 5V disparaît
  • le coût est inférieur
Ce nouveau projet fera l'objet d'un nouvel article. Le voici :

1. L'installation

Comme on le voit sur la photo ci-dessus les rubans de LEDs sont fixés sous les nez de marche.
En bas et en haut de l'escalier, un détecteur de mouvement infrarouge est installé afin de détecter l'approche d'une personne.
Le boîtier électronique de commande est installé sous l'escalier par exemple, ou tout autre endroit à votre convenance. La proximité d'une source d'alimentation en 230V est primordiale.

Ce site présente quelques photos : http://blog.lightingever.com/how-to-install-led-strip-lights-on-stairs.html

Une vidéo de l'effet souhaité :


2. Principe et fonctionnement

Lorsque une personne est détectée, le microcontrôleur allume le ruban de LEDs de la première marche, puis des suivants avec un petit délai entre chaque marche.
Bien entendu la séquence d'allumage se fait du bas vers le haut si le détecteur du bas est activé, et se fait du haut vers le bas si le détecteur du haut est activé.

En outre chaque ruban est allumé progressivement. On appelle cela un effet "dimming".

Chaque ruban commence à s'allumer lorsque le précédent a atteint un certain pourcentage de luminosité, afin de produire un effet cascade très fluide.

L'extinction est confiée à un timer. Elle se fait dans le même ordre que l'allumage avec un effet de dimming inversé bien sûr.

Le temps d'allumage et d'extinction peuvent être différents.

2.1. Parlons sécurité

Il est hors de question d'allumer l'éclairage sur détection d'une personne en bas de l'escalier et de l'éteindre sur détection de la même personne en haut.

Rien ne garantit qu'il s'agisse de la même personne. Un capteur de passage 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 pour cette raison que l'extinction est confiée à un timer.

2.2. Cas particuliers

Lors des tests il faut absolument que certains cas fonctionnent :
  • deux personnes se suivent
    • la première personne monte
    • l'éclairage s'allume
    • l'éclairage commence à s'éteindre au bout de 10 secondes
    • pendant l'extinction une deuxième personne monte
    • l'éclairage se rallume
    • l'éclairage commence à s'éteindre au bout de 10 secondes
  • deux personnes se croisent
    • la première personne monte
    • l'éclairage s'allume
    • l'éclairage commence à s'éteindre au bout de 10 secondes
    • pendant l'extinction une deuxième personne descend
    • l'éclairage se rallume
    • l'éclairage commence à s'éteindre au bout de 10 secondes

3. Quelques calculs

Nous allons baser nos calculs sur un escalier à 15 marches, correspondant à une hauteur d'étage de 2.70m et une hauteur de marche de 18cm.

Une personne met environ 8 secondes à monter les 15 marches.

Le temps s'écoulant entre le début de l'allumage du premier ruban et le début de l'allumage du dernier est fixé à 5 secondes.

L'intervalle entre chaque début d'allumage sera donc :

t = 5s / 15 = 0.33s

Comme le microcontrôleur va piloter les 15 rubans en même temps, le délai entre chaque changement d'état sera de :

t = 0.33 / 15 = 0.022s

Et comme nous allons lui faire piloter un seul ruban à un instant donné, nous allons encore diviser :

t = 0.022s / 15 =  0.0015s

La durée de l'effet dimming ne doit pas être trop courte, pour être visible. Fixons-la à 1.5 seconde.
Afin de ne pas allumer les LEDs à pleine puissance, et éviter d'aveugler les personnes, nous allons nous limiter à une luminosité de 50%.

L'effet dimming est produit par une modulation de largeur d'impulsion PWM. Le nombre de valeurs possibles sur un ARDUINO est de 255.
Comme nous nous contentons de 50% de luminosité nous allons exploiter seulement 127 valeurs.

Combien de pas faudra t-il compter entre le début de l'allumage d'un ruban et le début de l'allumage du suivant ?

p = 0.022s / 0.0015s = 15 pas

Au bout de 15 pas, le ruban aura atteint une luminosité de :

100% / 255 * 15 = 12%

Ces calculs ne tiennent pas compte des temps de traitement. Il faudra ajuster.

5. Choix matériels

Pour bénéficier de 15 sorties PWM un ARDUINO UNO ou NANO ne suffira pas. La MEGA2560 possède 15 sorties PWM. Il n'y en a pas une de plus, mais en général un nombre de 15 marches est suffisant.
Au pire, avec 16 marches, la première marche du bas peut se passer d'éclairage.

Les commandes de puissance PWM seront confiées à des transistors MOSFET. L'IRLD024 en boîtier DIP est un MOSFET "logic level" et supporte 2A. Sa résistance RDSon est de 100mΩ. C'est peu en regard de la résistance des rubans de LEDs.

Le microcontrôleur sera endormi pendant les périodes d'inactivité, ce qui nous permettra d'abaisser au maximum sa consommation. De 60mA en mode éveillé nous devrions passer à 7mA en mode sommeil.

Les deux capteurs PIR sont reliés aux entrées D20 et D21. Ces entrées nous permettront de réveiller le microcontrôleur.
Pour rappel, les pins permettant d'interrompre la MEGA2560 sont : 2, 3, 18, 19, 20 et 21.

5. Le schéma

Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  9. Téléchargements

Pour habiller le PCB j'ai choisi un boîtier rail DIN de 160mm :


L'espace étant restreint la carte utilisée sera une MEGA2560 core INHAOS :
L'alimentation de l'ARDUINO est assurée par un régulateur LF50CV

L'alimentation 12V des LEDs n'est pas intégrée dans le boîtier pour des raisons de taille. Son choix dépend de plus de la luminosité attendue pour notre éclairage (voir plus loin).

6. L'alimentation 12V

L'alimentation 12V devra être dimensionnée en fonction des LEDs utilisée.
Il est bien entendu possible d'utiliser des LEDs 5V ou 12V, mais les rubans de LED 5V commandable en PWM sont rares.


On peut citer les rubans de LEDs 2835, 5050, 5630 ou 5730.

6.1. Sous 12V

Par exemple un ruban de 1m de LEDs 5730 12V consomme environ 15W par mètre. Si la luminosité est maximale, l'escalier complet consommera :

15W * 15 = 225W

C'est énorme. Deux ou trois petites ampoules à LED de 10W au total suffiraient.

Bien sûr nous allons l'alimenter en PWM pour réduire cette puissance.
Si nous choisissons une puissance maximale de 10W pour l'escalier complet, le PWM aura un rapport de 100 / 75 * 10 = 13%
Nous aurons 255 / 100 * 13 = 34 valeurs possibles pour notre luminosité.

6.2. Examen du ruban

Si on examine le ruban, on s'aperçoit qu'il est composé de sections de 5cm de long formées de 3 LEDs et une résistance de 39Ω en série.
Une LED blanche produit une chute de tension de 3.25V.

Le courant sous 12V sera de (12V - (3.25V * 3)) / 39Ω = 57mA
Comme nous avons 20 sections par mètre cela donne 1.15A par mètre, donc 1.15A * 12V = 13.8W.

6.3. Sous 9V

Si l'on désire moins de luminosité, un ruban 12V peut parfaitement fonctionner sous 9V.

J'ai fait un essai avec 15 rubans de 6 LEDs. Le courant total est de 280mA, ce qui donne 2.5W. Avec des rubans de 50cm, soit 30 LEDs, on aurait donc besoin de 12.6W au total, et 25.2W avec des rubans de 1 mètre.

Par un calcul itératif on obtient environ le même résultat :

Une LED blanche produit une chute de tension de 2.88V sous 9mA.
Le courant sous 9V sera de (9V - (2.88V * 3)) / 39Ω = 9.2mA
Comme nous avons 20 sections par mètre cela donne 185mA par mètre, soit 185mA * 9V = 1.65W par mètre, soit 24.9W pour 15 rubans de 1 mètre.

6.4. Ruban court

Pour diminuer la puissance il est possible bien sûr d'utiliser seulement 10cm de ruban, ou 2 fois 5cm, c'est à dire 6 LEDs.

Le courant sous 12V sera de (12V - (3.25V * 3)) / 39Ω = 57mA
Comme nous avons seulement 2 sections cela donne 115mA, donc 115mA * 12V = 1.38W.

Si la luminosité est maximale, l'escalier complet consommera :

1.38W * 15 = 16.5W

Nous pourrons ainsi profiter de notre PWM à 100% et l'effet de dimming sera maximal.

C'est la solution que j'ai choisi, ceci afin de limiter la puissance totale.

6.5. Choix de l'alimentation

En résumé le choix de l'alimentation va dépendre de la luminosité voulue.

L'alimentation sera de préférence une alimentation à découpage de qualité.
N'oubliez pas qu'elle va rester sous tension 24H / 24. Économiser quelques euros sur ce composant n'est pas conseillé.

Une MeanWell me semble un bon choix :


Personnellement j'ai opté pour une MeanWell HDR-30-12 montée à côté du dimmer sur le rail DIN :

On trouve des modèles de toutes puissance entre 6W et plus de 100W.

Il est bon de prévoir une marge de puissance confortable, car ces alimentation coupent leur sortie brutalement en cas de dépassement du courant maximal.

Le câblage des rubans de LEDs est réalisé à l'aide de fil de section 0.25 mm2. La résistance de ce câble est de 75Ω / Km. La longueur maximale entre le tableau électrique et le ruban de LEDs la plus éloigné est de 8m - donc 16m aller / retour -  ce qui donne 75 / 1000 *16 = 1.2Ω, ce qui est très faible si l'on compare à la résistance intégrée aux rubans de LEDs (1 résistance de 390Ω pour 5cm et 3 LEDs).

Si les rubans font 10cm, leur résistance équivalente est de 390Ω / 2 = 195Ω). La chute de tension dans les câbles est faible : 0.6%

Si les rubans font un mètre, leur résistance équivalente est de 390Ω / 20 = 19.5Ω). La chute de tension dans les câbles reste acceptable : 6%.

7. L'IDE ARDUINO

Une seule librairie est à prévoir :

https://github.com/thomasfredericks/Bounce2.git

Cette librairie n'est utile que dans le cas où l'on connecte des boutons-poussoirs sur les entrées prévues pour les capteurs PIR

Pour récupérer le projet, voir plus bas : 9. Téléchargements

Le sketch est composé de deux parties :
  • deux classes
    • DimmingLed
    • Dimmer
  • l'application
Les rubans de LEDs sont définis comme suit avec leurs pins respectives :

DimmingLed leds[] = {DimmingLed(2), DimmingLed(3), DimmingLed(4),
                     DimmingLed(5), DimmingLed(6), DimmingLed(7), DimmingLed(8),
                     DimmingLed(9), DimmingLed(10), DimmingLed(11), DimmingLed(12),
                     DimmingLed(13), DimmingLed(44),
                     DimmingLed(45), DimmingLed(46)
                    };
int _nLeds = sizeof(leds) / sizeof(leds[0]);


Le dimmer se définit comme suit :

#define DIMMER_DELAY  1950
#define OFF_DELAY     10000

// leds: DimmingLed array
// n: 15 LEDs
// delay: 1.95ms
// onTrigger: 25%
// offTrigger: 3%
// luminosity: 50%
Dimmer dimmer(leds, _nLeds, DIMMER_DELAY, 25, 3, 50);


leds : la liste de LEDs

n: leur nombre

delay : le délai entre chaque changement d'état en µs.

onTrigger : c'est le paramètre qui va déterminer le seuil de luminosité à attendre en % pour commencer à allumer la LED suivante.

offTrigger : c'est le paramètre qui va déterminer le seuil de perte de luminosité à attendre en % pour commencer à éteindre la LED suivante.

luminosity : la luminosité maximale

Dans l'exemple, j'ai choisi une durée d'allumage de 5s entre la première LED et la dernière. Le temps d'extinction est de 3s avec très peu d'effet de cascade, c'est à dire que toutes les LEDs arrivent à 0% de luminosité presque simultanément.

La valeur de OFF_DELAY détermine le temps au bout duquel l'éclairage commencera à s'éteindre, ici 10 secondes.

8. Conclusion

Ce petit montage est très agréable à l'utilisation.
Je le teste actuellement sur une plaque breadboard en attendant de réaliser la carte définitive.

9. Téléchargements

Le projet est disponible ici : https://bitbucket.org/henri_bachetti/led-stairs-lighting.git

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html


Cordialement
Henri

10. Mises à jour

07/03/2019 : ajout dossier complet KICAD
                     mode low-power
                     remplacement connecteurs LEDs par NS25-W2K
                     remplacement connecteurs PIR par NS25-W3K
                     remplacement connecteurs secteur par bornier à vis
                     ajout 4. Choix matériels

11 commentaires:

  1. Une vrai pépite votre site. Bravo.
    Vraiment hate de voir votre projet d'éclairage de marche d'escalier avec le module SX1509.
    Je reve de pouvoir me faire ce type d'éclairage pour mon escalier de 16 marches ^^

    RépondreSupprimer
    Réponses
    1. C'est pour bientôt. Le code tourne déjà.
      Le SX1509 est une vraie petite bombe. A posséder absolument.
      Vous pouvez passer commande dès maintenant. Le mien a mis 18 jours à arriver :
      https://fr.aliexpress.com/item/32700858483.html?spm=a2g0s.9042311.0.0.27426c37MkntDl
      Cela permet de jouer avec en attendant ...

      Supprimer
  2. Super. Je vais attendre votre tuto car je reste neophyte.
    Du coup vous coupler ce module avec un arduino nano?

    RépondreSupprimer
    Réponses
    1. Non, il s'agit d'un ARDUINO PRO MINI 8MHz 3.3V.
      Pour vous faciliter les choses voici la repo :
      https://bitbucket.org/henri_bachetti/mysensors-led-stair-dimmer.git
      Pour l'instant un NRF24L01 est prévu pour une liaison radio avec un serveur DOMOTICZ, mais le logiciel définitif pourra être compilé pour pouvoir fonctionner sans.
      Le SX1509 doit être alimenté sous 3.3V, d'où le choix de la PRO MINI 3.3V.

      Supprimer
    2. Je viens de vérifier. Le NRF24L01 est déjà optionnel.
      Voir dans le sketch :
      //#define MYSENSORS

      Supprimer
    3. On peut facilement essayer le montage sans les MOSFETs.
      Il suffit de connecter une LED + résistance 1K en série entre chaque sortie du SX1509 et GND.
      On peut aussi essayer avec une NANO, mais le SX1509 devra impérativement être alimenté sous 3.3V.

      Supprimer
  3. Super. Merci pour le repo.
    Pouvez vous me conseiller le lien d'achat de l'arduino Pro Mini afin que je ne me trompe pas SVP?

    Le projet est fonctionnel chez vous?

    RépondreSupprimer
    Réponses
    1. Attention : PRO MINI 8MHz 3.3V.
      En général j'achète sur ALIEXPRESS.
      Tout dépend si l'on est pressé ou pas.
      J'ai déjà eu une erreur. Sur 10 cartes il y avait 4 cartes 16MHz.

      Oui pour l'instant le projet fonctionne sur breadboard. Je n'ai pas la place de mettre tous les MOSFETs avec leur ruban de LED mais les 16 canaux fonctionnent, dont certains avec une simple LED.

      Supprimer
  4. Hello. Possible de faire fonctionner sur 17 canaux pour 17 marches.
    Je reprends gentilement le sujet car je vais bientot habillé mes marches d'escaliers.

    RépondreSupprimer
    Réponses
    1. Le SX1509 n'a que 16 canaux.
      On peut éventuellement ne pas éclairer la première marche.

      Supprimer
    2. La nouvelle version est disponible :
      https://riton-duino.blogspot.com/2020/08/un-eclairage-descalier-leds-nouvelle.html
      Il y a même une vidéo.

      Supprimer