Dimmer vos LEDs via Rapsberry et une appli Web

Voir le sujet précédent Voir le sujet suivant Aller en bas

Dimmer vos LEDs via Rapsberry et une appli Web

Message par yann44 le Jeu 2 Fév - 22:00

Je sais que sur le projet de Denis, Raspberry n'est pas le choix retenu pour piloter les dimmers, mais comme je suis têtu  Very Happy  et que Denis m'avait demandé de présenter mes mes rampes DIY Maxspects, j'en rajoute une couche et je vais essayer 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  Very Happy
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





(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



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  Laughing

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:
pi@raspberrypi ~ $ cd /sys/bus/w1/devices
* vous devriez avoir au moins « w1_bus_master1 » et éventuellement les sondes connectées.
Code:
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:

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



Pour connaître l'adresse IP de votre Raspberry Pi, lancez « ifconfig » :

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  Shocked
- 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:
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:
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 Rolling Eyes  un peu.

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

Yann

yann44

Localisation : 44
Messages : 19
Date d'inscription : 14/10/2015

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Dimmer vos LEDs via Rapsberry et une appli Web

Message par joseb le Ven 3 Fév - 13:21

très beau commentaire yann et jolie plan Very Happy Laughing

joseb

Localisation : nord
Messages : 7
Date d'inscription : 06/04/2015

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Dimmer vos LEDs via Rapsberry et une appli Web

Message par hlif69 le Ven 3 Fév - 21:13

merci pour le partage

hlif69

Localisation : lyon
Messages : 10
Date d'inscription : 03/02/2015
Age : 44

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Dimmer vos LEDs via Rapsberry et une appli Web

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum