Dimmer vos LEDs via Rapsberry et une appli Web

Do It Yourself, les bonnes personnes, les bonnes idées, les bonnes bidouilles... sans s'électrocuter !
Répondre
yann
Membre du Cala 2017/2018
Messages : 230
Enregistré le : dim. 24 févr. 2013 01:55

Dimmer vos LEDs via Rapsberry et une appli Web

Message par yann » jeu. 2 févr. 2017 21:48

Pour faire suite à post sur mes rampes DIY Maxspects, j'ai essayé d'écrire un petit tuto pour vous expliquer comment je pilote tout ça avec un Raspberry Pi et une appli web, donc accéssible all over the world :mrgreen:

Piloter des rampes LEDs depuis une appli Web avec un Raspberry Pi

Après 1 an de service, les Arduinos (programme ACKduino) qui pilotaient mes premières rampes DIY Maxspect Razor ne me satisfaisaient pas : problème de reset de l'horloge, pas connecté sur le web, debug impossible, upgrade lourdingue avec codeBlocks …

J'avais bien l'idée de passer sur Raspberry Pi mais le problème c'était le PWM (natif en Arduino) qui n'existe pas sur le Raspberry Pi …
Un GRAND merci à Sébastien M. (projet ACKduino) qui m'a fait découvrir les cartes PWM de AB Electronics

Présentation de l'appli

Image

Image

(Oui je sais, c'est pas super joli, mais je suis admin sys pas web designer …)

Cette appli permet de piloter de 1 à n rampe(s) avec des LEDs dimmables à 2 canaux (Blue/White) avec :
* une gestion de n « Time Period » comme sur les Maxspect Razor ie de telle heure à telle heure, xx % de Blue et yy % de white
* afficher en temps réel la T° de chaque rampe
* piloter 1 relais par rampe pour la refroidir via un(des) ventilateur(s) suivant une T° de consigne
* forcer une atténuation de xx % à partir d'un seuil de T° si au check suivant la T° est toujours supérieur au seuil
* sauvegarder les paramètres dans un fichier
* tester le relais ventilo sur 1 clic
* tester chaque canal sur 1 clic (slider)

Ce qu'il reste à faire (help welcome) c'est :
* externaliser les adresses des sondes de T° (actuellement en dur dans le programme)
* faire une IHM pour définir les Time Periods à la cliquette (actuellement en JSON dans le fichier config)
* ajouter une alerte par mail sur la perte d'une sonde (vécu) (en cours)

PS : la semaine dernière, une sonde m'a lachée, comme mes 8 sondes sont en série, le raspberry ne voyait plus du tout de sonde et bêtement dans le programme j'avais collé un 0°C si pas de sonde, du coup les rampes n'étaient plus refroidies et heureusement que j'avais prévu des fusibles thermiques qui coupent l'alim à 65°C sinon j’aurais perdu tous mes Pads …
La plaisanterie a bien durée 2 ou 3 jours le temps que je m'en rende compte (le matin et le soir le % est trop faible pour que les fusibles thermiques se déclenchent). du coup, j'ai fait une mise à jour pour forcer la T° à « consigne atténuation -1 » si une sonde n'est pas détectée, du coup le(s) ventilo(s) tourne(nt) en marche forcée et je bosse actuellement sur une alerte mail en cas de dysfonctionnement.

Le cablage

Image

Rien de bien compliqué :
* les sondes en série reliés au GPIO4 avec 1 seule résistance de 4.7K ohms entre la borne data et le +
* la carte relais alimentée en 5V externe (ça devrait aussi marcher avec le raspberry mais j'ai préféré séparer), le - est relié au raspberry, les 8 plots des relais aux GPIO 11 à 18.
Les relais me servent à shunter l'alim de 3 ventilos 12V (en parallèle) alimentés en 9V (donc 0 bruit).
* la carte PWM est pluguée directement sur le raspberry ou via une nappe 40 pin.
Sur les 16 ports de la carte PWM ont relie est les 16 PWM des dimmers et le - de chaque dimmer.

La config du Raspberry Pi

Autant mettre les choses au clair tout de suite, si vous êtes adepte de la cliquette sous Windows & OS X vous allez un peu souffrir, parce qu'il va falloir mettre les mains dans le cambouis :lol:

Je passe l'installation de base du Raspberry, personnellement je suis parti d'une Raspbian mais ça doit pouvoir fonctionner sous d'autres distrib.
Il faut penser à activer le bus i2c

Le plus difficile c'est de réussir à faire lire les datas des sondes de température au Raspberry …
La dessus j'ai pas mal galéré alors je vous donne ma « config qui marche », c'est très inspiré de l'article suivant.

Note : vous n'avez pas forcément besoin d'avoir une sonde connectée pour le moment pour configurer le Raspberry mais ça aide.

* allez dans le dossier « /sys/bus/w1/devices »

Code : Tout sélectionner

pi@raspberrypi ~ $ cd /sys/bus/w1/devices
* vous devriez avoir au moins « w1_bus_master1 » et éventuellement les sondes connectées.

Code : Tout sélectionner

pi@raspberrypi /sys/bus/w1/devices $ ls
=> Si vous voyez « w1_bus_master1 », vous pouvez passer le paragraphe suivant, sinon, la galère commence …

Détection des sondes de T°

Pour que ça marche chez moi sur mes 3 Raspberry Pi (version 2 et 3) et ainsi que sur le Raspberry Pi d'un internaute que j'ai dépanné ce matin il m'a suffit de :

* Editer le fichier « /boot/config.txt », ajouter la ligne :

Code : Tout sélectionner

dtoverlay=w1-gpio
NB : après un upgrade système, j'ai perdu ce fichier de config et je n'ai pas retrouvé comment configuré ce paramètre. Alors en attendant que quelqu'un trouve une solution, ne faites pas d'upgrade système

* Editer le fichier « /etc/modules » et comparez avec le mien :

Code : Tout sélectionner

w1-therm 
w1-gpio pullup=1 
snd-bcm2835 
spi-bcm2708 
i2c-bcm2708 
i2c-dev 
rtc-ds1307
* lancez un « sudo reboot »

Au redémarrage, vous devriez avoir dans le dossier « /sys/bus/w1/devices »  au moins «  w1_bus_master1 »

Installation des programmes

Il vous faut git, nodejs et mon repository, si cela vous parle pas du tout, contentez vous de lancez les commandes suivantes :

Code : Tout sélectionner

pi@raspberrypi ~ $ sudo apt-get install git
pi@raspberrypi ~ $ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash - 
pi@raspberrypi ~ $ sudo apt-get install nodejs 
pi@raspberrypi ~ $ git clone https://github.com/ylemarie/maxspect-diy.git
pi@raspberrypi ~ $ cd ~/maxspect-diy 
pi@raspberrypi ~/maxspect-diy $ git clone https://github.com/abelectronicsuk/ABElectronics_NodeJS_Libraries.git
Lancement du programmes

Note : Même si vous n'avez pas branché les sondes, les cartes relais, la carte PWM, vous pouvez faire tourner « à vide » le programme.

Code : Tout sélectionner

pi@raspberrypi ~ $ cd ~/maxspect-diy 
pi@raspberrypi ~ $ sudo node app.js
NB: Si vous voulez que le programme démarre automatiquement à chaque reboot, modifiez le fichier « /etc/rc.local » et ajoutez avant exit

Code : Tout sélectionner

cd /home/pi/maxspect-diy
node app.js
Vous devriez voir pleins de lignes de debug s'afficher.
Le serveur web tourne par défaut sur le port 8989, il vous suffit de lancer dans un navigateur http://rapsberry_ip:8989 pour voir quelques chose qui ressemble à ceci :

Image

Pour connaître l'adresse IP de votre Raspberry Pi, lancez « ifconfig » :
Image
Ici l'adresse IP locale du Raspberry Pi est 192.168.1.77, donc sur votre réseau local tapez http://192.168.1.77:8989.
Si vous voulez utiliser l'appli depuis votre mobile, il faut ouvrir le port 8989 de votre box et rediriger le trafic vers l'adresse IP locale de votre Raspberry Pi. Vous accéderez ensuite à l'appli via http://adresse_box:8989, si vous avez une freebox cette adresse IP est fixe, pour les autres je ne sais pas, mais il est toujours possible de passer par des services du type DynDNS pour contourner le problème.

Configuration
* cliquez en haut à gauche sur l'engrenage, vous accédez au menu de config. Un clic sur la disquette permet de sauvegarder les données.
* les paramètres dans l'ordre :
- température de consigne des ventilos
- température de consigne de l'atténuation
- % d'atténuation si au prochain cycle la T° de consigne d'atténuation est toujours trop haute
- période de cycle en secondes (check des T°, de l'heure pour changer les %)
* si vous cliquez sur "others" vous tomberez sur quelque chose de pas terminé, pas testé, alors attention ... vous verrez :
- nombre de Time Periods : a votre place j'y toucherait pas, je ne sais plus s'il y a du code derrière ni ce qu'il peut bien faire :shock:
- nombre de rampes : idem pas trop toucher
- port de l'appli web: ca c'est ok, vous pouvez le modifer
- le on & le off : ma carte relais fonctionne à l'envers de la logique, donc j'ai inversé le on & le off
- debug : activer le mode debug en console
- log : activer le mode log dans un fichier, je pense que j'irai piocher dans ce fichier pour détecter les dysfonctionnement et déclancher les alertes mails

Dans tous les cas, il est possible (et même obligé pour les time Period) de tout définir dans le fichier "parameters.json".
Si le fichier est illisible (plus de sauts de ligne) vous pouvez le remettre en forme en ligne.
Si vous ne connaissez pas le JSON, évitez de trop jouer avec les crochets, les virgules, contentez-vous de modifier mes valeurs ...

Premier démarrage: trouver les adresses des sondes
Lorsque vous aurez branché vos sondes de température, il va faloir patcher mon code pour y mettre les adresses de vos sondes.
Lancez le programme une première fois et repérer le code de debug au début, je liste les adresses de toutes les sondes

Code : Tout sélectionner

T° Sensors Harware Adr
Ensuite, vous allez copier/coller pour remplacer mes adresses par les vôtres, c'est du côté de la ligne 105 du fichier app.js :

Code : Tout sélectionner

rampeSensors[7] = '28-031564e750ff';	//rampe 8
rampeSensors[4] = '28-031564bed0ff';	//rampe 5
rampeSensors[1] = '28-0315a477f2ff';	//rampe 2
rampeSensors[6] = '28-0115a51285ff';	//rampe 7
rampeSensors[3] = '28-0115a44ef5ff';	//rampe 4
rampeSensors[2] = '28-0315a4d8b3ff';	//rampe 3
rampeSensors[5] = '28-021564d12bff';	//rampe 6
rampeSensors[0] = '28-0000043adf77';	//rampe 1
Une fois que vous aurez les adresses, il faudra en trouver l'ordre ... quelle sonde est sur quelle rampe ... un jeu de patience... C'est là où le slider des canaux est pratique: vous mettez le cycle check à 20 secondes par exemple, et vous mettez à fond une seule rampe, reste à voir sur l'appli quelle sonde est montée en T°.
Une fois que vous avez l'ordre, vous modifiez les indices dans la déclaration des adresses lignes 105 : rampeSensors[xx]

Versions
J'ai déposé sur github tous les sources du projet, je maintient 2 branches :
- master pour mes 8 rampes du 1600L du salon
- batterie pour mes 3 bacs de ma batterie
Cette dernière version permet de gérer des Time Period spécifique pour chaque rampe (la version master c'est toutes les rampes idem).

Si des développeurs NodeJS passe par ici, mon code va surement les faire hurler, vous êtes les bienvenus pour corriger, optimiser tout ça. Mon objectif c'était que ça marche, que ce soit écrit dans les règles de l'art je m'en :roll: un peu.

Voilà, si j'ai oublié quelque chose, MP ou postez ici.

Yann

Zebra44
Administrateur du site
Messages : 2558
Enregistré le : dim. 1 mars 2009 23:19
Localisation : 35/bruz
Contact :

Re: Dimmer vos LEDs via Rapsberry et une appli Web

Message par Zebra44 » ven. 3 févr. 2017 17:55

Super article :-)
Récifalement Votre
Zebra44
Le ti bout de récif de Zebra44
Image

indica
Messages : 36
Enregistré le : lun. 10 oct. 2016 20:30
Localisation : st jean de boiseau

Re: Dimmer vos LEDs via Rapsberry et une appli Web

Message par indica » mer. 8 févr. 2017 11:21

ton tuto est vraiment sympa il y a de bonnes idées a puiser.
j ai pas compris l intérêt de mettre autant de sondes en série? car du coup tu ne peux relever qu'une valeur globale et non pas celle de chaque sonde.

yann
Membre du Cala 2017/2018
Messages : 230
Enregistré le : dim. 24 févr. 2013 01:55

Re: Dimmer vos LEDs via Rapsberry et une appli Web

Message par yann » mer. 8 févr. 2017 11:27

Si si j'ai la valeur des sondes pour chaque rampe.
C'est le principe du bus 1-wire qui fonctionne ainsi, toutes les sondes sont en série, chacune à une adresse unique.
Il faut juste s'amuser à retrouver qui est où sur ta ligne de sonde ...

Ca marche très bien, même si une sonde ne réponds pas, ça marche moins bien si une sonde est en court-jus, du coup tu perds toute la ligne ...

Répondre