Centrale Domotique
Une Technique de dans les catégories Électronique, Énergie, Maison. Dernière modification le 19/02/2023 par Sgiraud.
Mon but est de fabriquer une centrale pour gérer la maison à faible coût et avec beaucoup de flexibilité grâce à l'utilisation d'arduino et raspberry pi. Par “gérer”, dans un premier temps on vas se limiter au chauffage.
Introduction
(Merci Clément pour le dessin qui parle de lui-même ;-) )
Pour commencer, je vais:
- mesurer température/humidité/qualité de l'air,
- contrôler les radiateurs qui disposent d'un fil pilote,
- ensuite, on verra…
Ah, j'oubliais, tout ça doit se faire:
- à distance depuis n'importe où via Internet (et avec un peu de sécurité), - avec n'importe quel terminal du type smartphone ou PC
Liste des matériaux
J'utilise:
- 1 Arduino Uno avec 1 Shield Ethernet W5100 pour Arduino ou bien, - 1 Nano v3 avec 1 Shield Ethernet ENC28J60 v1
- 1 capteur DHT-22 de température au 1/10° et d'humidité, remplacé finalement par un Si7021 - 1 capteur MQ135 qualité de l'air - divers composants pour le fil pilote
Pour centraliser les données: l'application du projet Gladys que je fais tourner sur un raspberry PI 3. Il peut tourner sur à peu près n'importe quoi, y compris un PC puisque c'est du NodeJS. (PC sous Linux, cela va sans dire. Ne pensez même pas à utiliser un système M$, sauf si vous préférez les problèmes plutôt que les solutions)
Liste des outils
- De quoi souder
- Un PC Linux avec Firefox et l' "Arduino IDE"
- De la persévérance
Etape n°1 - Faire un plan de toutes les étapes
En bref, il faudra faire:
- 1) Branchement des 2 capteurs sur le Arduino
- 2) Branchement de la shield Ethernet
- 3) Installation de Gladys et configuration
- 4) Création du circuit de contrôle du fil pilote et branchement à l'Arduino (Merci à Vincent pour avoir vu les problèmes de soudure)
- 5) Ecriture du code Arduino pour envoyer les 3 mesures à Gladys
- 6) Mise à jour du code Arduino pour prendre en compte les commandes HTTP pour les 4 modes du fil pilote
Etape n°2 - Réalisation
Voici les 2 versions:
- Arduino et
- Nano,
avec chacune leur shield respectif, le capteur DHT22 et le capteur MQ135.
Il y a aussi au milieu l'électronique du fil pilote (plaque verticale avec un fusible) qui n'est que sur la version Arduino actuellement.
Etape n°3 - Les déboires
- Alimentation
Sans surprise, il faut passer par une alimentation sur VIN car l'alim par usb ne suffit plus quand les 2 capteurs et le shield sont branchés.
- 1er déboire) La carte W5100.
Tout d'abord, le "bug" chinois: erreur sur la résistance sur la prise RJ45. La bonne résistance aurait dû être “510” = 51 x 10^0 = 51 Ohms et non pas 51 x 10^1 = 510 Ohms, sinon pas de connexion au-delà de 10Mbps !
Ensuite, le couple Arduino/W5100 parait peut fiable. J'ai de nombreux crash aléatoires et inexpliqués. En désespoir de cause, je passe sur nano v3 + shield Ethernet ENC28J60 v1.
- 2nd déboire) Le DHT22 (AM2302)
Le DHT22 ne semble pas fonctionner sur le nano! Merci à Philippe pour l'utilisation de l'oscilloscope numérique. On voit sur l'image que le signal série est bien visible, mais le niveau 0 ne redescend pas en dessous de 1,5 V sur le modèle de marque "ASAIR" (1V/graduation) ! Sans doute un problème de résistance "pull-up". En attendant, heureusement le DHT 22 de "AOSONG", lui, fonctionne sur le nano.
- 3ie déboire) Encore le DHT22
Finalement pas fiable. Parfois 1 mesure sur 10, parfois aucune. Que me dit Internet? OK, je passe sur Si7021. Et le mesures deviennent fiables. J'obtiens de belles courbes sur Gladys.
- 4ie déboire) La librairie UIPEthernet.h
Sur le papier, l'idée est géniale: compatibilité totale avec la librairie Ethernet.h de la carte W5100. Rien à changer dans le code si ce n'est le "#include". Mais voilà, il y a un "mais". Cette librairie consomme 70% de la mémoire avant même d'avoir écrit 1 ligne de code. Les résultats sont bons au début, puis mon programme s'étoffe et j'arrive aux limites. Encore bloqué.
Je peux réduire de 50% la conso de la librairie en désactivant UDP. Cela ne m'aide pas car j'en ai besoin pour le DHCP. Sinon le système perd sa capacité plug&play.
Je passe alors sur la librairie EtherCard.h. Malheureusement elle est très peu documentée. Avec les exemples on s'en sort, et finalement le code est plus simple qu'avec Ethernet .h
Etape n°4 - A suivre...
- J'en suis là: à la 5ième étape du plan.
Victoire! ENC28J60 et librairie EtherCard.h, c'est la paire gagnante. Je recommande. La librairie est plus simple et beaucoup plus fiable que l'autre. Testé sur plusieurs semaines, j'ai des courbes 100% complètes et aucune panne.
Finalement le réseau cible ne me permettra pas d'envoyer des commandes à l'arduino car je ne pourrais pas maîtriser le NAT distant. Donc je passe en mode polling: l'arduino va venir interroger le Gladys pour récupérer la consigne. Autre avantager: c'est plug&play. Brancher le module n'importe où dans le monde, il marche de suite sans configuration à faire.
- La suite c'est :
Gérer les 2 cas DNS et IP local ( Surtout chez orange qui aime bien compliquer les choses simple :-( !! ) et les reconnexions sans reboot.
Ajouter les boutons de contrôle.
Etape n°5 - Capteur connecté en USB
En local, pourquoi passer par Ethernet? J'ai donc fait une version avec connexion directe sur le Raspberry Pi qui héberge Gladys.
Le code est disponible là:
Notes et références
- le projet domotique Gladys : le site de Pierre-Gilles Leymarie
- la carte du fil pilote : le site FabLab de l’IMT Atlantique
- "Bug 510 Ohms" du W5100 chinois : Discussion Arduino sur le problème et le fix