Dans ma cuisine, au dessus de l’évier, j’ai rajouté deux lampes basses consommation. Cependant cette solution est loin d’être idéale : il est facile d’oublier d’éteindre ces lumières, l’éclairage est soit éteint, soit à fond (éblouissant en pleine nuit), et je préfère éviter d’avoir du 220V au dessus de l’évier. Je pourrais couvrir avec de l’acrylique, mais ces lampes chauffent, et il faut pouvoir y accéder pour les changer.  Pour résoudre ces problèmes, je vous propose de me suivre pour la réalisation d’une rampe à LED intelligente, économique, basée sur du code libre, programmable et extensible.

Le principe général de la rampe à LED intelligente

Pour notre rampe à LED intelligente, nous souhaitons tout d’abord avoir un allumage et une extinction progressifs. On veut également pouvoir utiliser un capteur de présence pour pouvoir allumer et éteindre automatiquement l’éclairage. Enfin on doit pouvoir passer du mode automatique au mode manuel à tout moment, et ainsi allumer/éteindre à tout moment.

Pour ce faire, nous utiliserons un micro-contrôleur qui surveillera l’état d’un capteur PIR (J’ai écrit un article sur le sujet ici : Capteur PIR et Arduino : Tutoriel  ). Ce dernier détectera la présence d’humains dans son champ de “vision”. En fonction de ce qui est détecté ou non, le contrôleur allume ou éteint l’éclairage.

L’autre mode d’interaction avec le système est un bouton poussoir, qui permet via une pression courte d’allumer ou d’éteindre le système. Une pression longue permet de passer du mode manuel au mode automatique (en mode manuel, la lumière reste dans l’état défini par l’utilisateur).

Allumage et extinction progressifs

Par allumage progressif, on entend le fait que l’on ne passe pas de complètement éteint à complètement allumé d’un coup. Au contraire, cela se fait de façon progressive pour laisser aux yeux le temps de s’habituer. En pratique, on passe par 255 niveaux de luminosité.

Pour l’allumage, le processus prend quelques secondes, alors que pour l’extinction, c’est plus long (environ 20s). L’idée est qu’on profite de l’allumage progressif sans avoir à attendre trop longtemps pour avoir la lumière. La valeur est réglable dans le code, j’ai déterminé de façon empirique la valeur qui me convenait.

Pour l’extinction c’est plus long, pour laisser le temps de quitter la pièce quand on éteint la lumière (encore une fois, c’est réglable, dans mon cas, 20s suffisent pour arriver à la prochaine porte sans se presser). L’extinction progressive permet de s’habituer à l’obscurité et d’avoir confirmation de la prise en compte de la commande..

Le hardware

Le micro-contrôleur : une carte Arduino Nano

Pour ce projet, on veut du open hardware et du logiciel libre. On s’appuie donc sur un micro-contrôleur Arduino Nano, compact, économique, open hardware. Il utilise une “toolchain” libre pour sa programmation. Les clones chinois du Arduino Nano se trouvent pour 2-3€ sur aliexpress et sont de bonne qualité (pour plus de détails sur ces clones du Arduino Nano, voyez mon article ici).

Commander des LEDs 12/24V depuis le Nano via un MOSFET : le IRF3708.

un MOSFET IRF3708 utilisé dans un montage pour une rampe à led intelligente.

un MOSFET IRF3708 utilisé pour la rampe à led intelligente.

Nous contrôlons une bande de LEDs 12V, ce que ne peut faire d’office le Arduino Nano. En effet, ses sorties sont en 5V. Dans tous les cas, même avec des LEDs en 5V, le courant délivrable par les GPIO aurait été trop faible pour cette application.

Pour y remédier, nous allons contrôler un courant électrique élevé, à une tension différente en utilisant un transistor. Avec un transistor, on peut contrôler le passage du courant entre deux des trois pattes de celui ci en envoyant ou non du courant à la troisième.

Fonctionnement général d’un transistor

De façon schématique, c’est comme si nous avions un interrupteur contrôlé par une sortie numérique du Arduino. Ainsi, sii la sortie est à 0 (LOW), le courant ne passe pas; si la sortie est à 1 (HIGH) le courant passe. Et le courant commandé peut être en 12V, 24V, ou n’importe quelle tension supportée par le transistor. L’intensité électrique commutable dépend aussi du transistor.

Notre MOSFET: le IRF3708

Ici, nous utiliserons un MOSFET, le IRF3708, qui est un composant que j’utilise souvent. En effet, il peut être commandé par des signaux en 3.3V et 5V sans problème (d’autres transistors requièrent du 12V pour commuter le courant maximal), sa résistance interne est très faible, ce qui implique qu’il peut commuter des courants élevés sans radiateur. Je l’utilise en pratique pour commuter plusieurs ampères, en 12V, et il est reste à température ambiante.

Les tensions commutables sont aussi dans une large plage, puisqu’il peut accepter des tensions jusqu’à 30V, donc parfait pour des LEDs en 12 ou 24V.

Sa vitesse de commutation est élevée, on peut donc s’en servir en PWM (c’est ce que je fais pour mes aquariums, comme l’explique très bien le blog hackquarium ici ).

Un détecteur d’humains : le capteur PIR

capteur PIR

le capteur PIR utilisé pour notre rampe à LED intelligente

Un tel système s’appuie fortement sur la qualité du capteur qui indique la présence ou non d’humains dans la pièce. Un capteur PIR mesure les différences de température détectées dans l’infrarouge, et renvoie un 0 ou un 1 selon l’absence ou la présence d’un humain dans le champ de détection.

Équipés d’une lentille Fresnel, ces capteurs ont un champ de 180° et peuvent donc, s’ils sont positionnés de façon adéquate, couvrir facilement une pièce.

La sortie est déjà traitée, et renverra un signal logique continu d’une durée ajustable, ce qui nous évitera d’avoir à faire du post-traitement pour éliminer le bruit. La sensibilité est également réglable, à l’aide d’un potentiomètre.

Comme dit plus haut, vous pourrez approfondir le sujet en consultant mon tutoriel sur les capteurs PIR et leur utilisation sur un Arduino.

L’interface utilisateur : un bouton poussoir avec LED intégrée.

On veut une rampe à LED intelligente pour une cuisine, donc ça doit être simple à utiliser, et intuitif. Pour cela, on utilise un unique bouton, de type anti-vandalisme, avec “angel eye“. Il s’agit de boutons en inox, waterproof, résistants aux chocs, et avec un anneau lumineux sur le bouton.

Mode manuel

Le principe est simple : si j’appuie brièvement, l’état de la lumière est inversé. On passe d’allumé à éteint, ou d’éteint à allumé. Ceci, c’est en mode manuel. L’utilisateur sait que le système est en mode manuel si l’anneau lumineux est allumé de façon continue.

Mode automatique

Si en revanche on fait un appui long (plus d’une seconde), on change le mode, et on passe de manuel à automatique, ou l’inverse. Une fois en mode automatique, la lumière s’allume automatiquement quand un humain est détecté, et s’éteint 120s après la dernière fois qu’un humain ait été détecté.

En mode automatique, l’utilisateur peut quand même forcer l’allumage ou l’extinction par un appui court. Cependant, une fois la procédure d’allumage/extinction terminée, le système tentera d’allumer ou d’éteindre la lumière selon son programme.

Indicateur du mode automatique

Dans ce mode, la luminosité de la LED varie de façon cyclique, avec un effet de type “fade in/fade out”, aussi appelé “breathe”.

Construction du système

Pour me simplifier la vie, j’utilise un circuit imprimé que j’ai conçu au départ pour la gestion de l’éclairage  de mes aquariums. Il permet d’installer deux MOSFETs pour deux canaux indépendants. Il embarque un support pour le Arduino Nano et diverses prises pour ajouter des capteurs ou d’autres périphériques. On pourra rajouter par exemple des écrans I2C, un module RTC, etc…

En pratique, il s’agit donc de souder les composants sur la plaque, et ensuite d’installer le Arduino sur son support. On branche alors la bande de LEDs, l’alimentation externe 12V, le capteur PIR, le bouton poussoir et la LED de celui ci.

Dès lors, si l’on a téléversé le code source, il suffit de déployer le module pour s’en servir. Dans un billet ultérieur, je détaillerai la construction du même système sur une breadboard pour ceux qui voudraient reproduire la même chose chez eux sans le circuit imprimé (mais c’est plus simple avec 😉 )

Utilisation et conclusions

Le système est en fonction chez moi depuis quelques mois, et plait beaucoup aux invités. J’ai pu l’intégrer à mon meuble au dessus de l’évier, et la majeure partie du système est invisible. Les seuls éléments visibles sont le bouton (forcément) et le capteur infrarouge (je devrais percer un trou pour l’encastrer dans le meuble, mais j’ai un peu la flemme ^^).

En pratique, tout fonctionne bien, l’éclairage est supérieur à ce qu’on avait avec les deux lampes basse consommation, pour un système plus ergonomique, discret, et intelligent.

Sur la consommation électrique, justement : le système consomme moins que les deux lampes lorsqu’il est en fonction. En plus, avec l’extinction automatique on gagne encore davantage sur la consommation électrique. Lorsque les LEDs sont éteintes, le Arduino consomme très peu. C’est d’ailleurs négligeable par rapport à la consommation des LEDs. Avec environ 250mW, contre 15-30W pour les LEDs,  1h d’éclairage consomme autant que 60h-120h de veille.

En clair, je suis très satisfait du système. Je compte en mettre à d’autres endroits (par exemple sur la terrasse pour éclairer l’allée quand je rentre le soir).

Améliorations

Cela ne signifie pas que le système est parfait, en effet il est encore améliorable:

  • une fonction jour-nuit serait intéressante.  Le système passerait ainsi en mode automatique à la tombée de la nuit, et en mode manuel (par défaut éteint) la journée.  Il faut toutefois faire en sorte que ça n’importune pas l’utilisateur. Pour cela, on peut installer le module RTC sur l’emplacement prévu, et modifier le programme;
  • avec plusieurs systèmes, une commande à distance, centralisée serait souhaitable, mais pour cela il faudrait des capacités sans fil. Pour cet aspect, l’idée serait de remplacer le Arduino par un ESP8266 ou mieux un ESP32. Dès lors il serait possible de commander le tout depuis un smarphone en bluetooth (si ESP32). Ce serait également possible depuis n’importe quel ordinateur, tablette, téléphone connecté au wifi local (pour les deux ESP). C’est la prochaine version prévue, mais il faut que je fasse une carte;
  • diverses petites améliorations du système actuel me sont venues à l’esprit. Cependant, la version réseau permettrait d’office d’apporter ces améliorations, donc je ne développerai pas davantage.

Dans un prochain billet, nous verrons plus en détail la partie logicielle du système.

 

Réseaux sociaux