Aller au contenu
lecelte

Dimmer vos LEDs via Rapsberry et une appli Web

Messages recommandés

Pour faire suite à post sur mes rampes DIY Maxspects, 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 accessible all over the world   :D

 
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
 
2llymmq.png
 
b7ig5k.png
 
(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
 
2e6hfyg.png
 
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 »
pi@raspberrypi ~ $ cd /sys/bus/w1/devices
* vous devriez avoir au moins « w1_bus_master1 » et éventuellement les sondes connectées.
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 :
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 :
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 :
 
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.
 
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 
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 :
 
2llymmq.png
 
Pour connaître l'adresse IP de votre Raspberry Pi, lancez « ifconfig » :
2chn67m.png
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 
 
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 :
 
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 ...  un peu.
 
Voilà, si j'ai oublié quelque chose, MP ou postez ici.
 
Yann

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Beau projet, ça change des montages à base d'Arduino, même si il est tout à fait possible de mettre un shield Ethernet sur l'Arduino.

A prix presque égale mieux vaut opter pour le Raspberry qui est doté nativement du WIFI il me semble (sur le V3) ? et surtout d'une version de linux embarqué !

Partager ce message


Lien à poster
Partager sur d’autres sites

Ca fait plusieurs fois que je suis sur le point de craquer pour en acheter un (juste pour le plaisir de tester) mais ce n'est pas encore fait ...

 

A cause de toi, je risque de craquer pour équiper ma rampe et remplacer ma Lumibox qui fonctionne très bien mais qui n'est pas super pratique pour les réglages.

Partager ce message


Lien à poster
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement

  • Récemment ici   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×
×
  • Créer...

Information importante

En poursuivant votre navigation, vous acceptez l’utilisation des cookies pour vous proposer des contenus adaptés à vos centres d’intérêt et réaliser des mesures pour améliorer votre expérience sur le site. Pour en savoir plus et gérer vos paramètres, cliquez ici