Centrale Domotique : Différence entre versions

De HATLAB
(16 révisions intermédiaires par le même utilisateur non affichées)
Ligne 30 : Ligne 30 :
 
|Material=J'utilise:
 
|Material=J'utilise:
  
     - 1 Arduino Uno
+
     - 1 Arduino Uno avec 1 Shield Ethernet W5100 pour Arduino
     - 1 Shield Ethernet pour Arduino
+
    ou bien,
     - 1 capteur DHT-22 témpérature au 1/10° et humidité
+
     - 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
 
     - 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 mais qui peut tourner sur à peu près n'importe quoi, y compris un PC.
+
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)
 +
|Tools=* De quoi souder
 +
* Un PC Linux avec Firefox et l' "Arduino IDE"
 +
* De la persévérance
 
}}
 
}}
 
{{Separator}}
 
{{Separator}}
Ligne 42 : Ligne 48 :
 
|Step_Content=En bref, il faudra faire:
 
|Step_Content=En bref, il faudra faire:
  
* Branchement des 2 capteurs sur le Arduino
+
* 1) Branchement des 2 capteurs sur le Arduino
* Branchement de la shield Ethernet
+
* 2) Branchement de la shield Ethernet
* Installation de Gladys et configuration
+
* 3) Installation de Gladys et configuration
* Ecriture du code Arduino pour envoyer les 3 mesures à Gladys
+
* 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)
* 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
* Mise à jour du code Arduino pour prendre en compte les commandes HTTP pour les 4 modes du fil pilote
+
* 6) Mise à jour du code Arduino pour prendre en compte les commandes HTTP pour les 4 modes du fil pilote
 
+
}}
* J'en suis là
+
{{Tuto Step
 +
|Step_Title=Réalisation
 +
|Step_Content=Voici les 2 versions:
 +
* Arduino et
 +
* Nano,
  
Finalement le réseau cible ne me permettra pas d'envoyer des commandes à l'arduino. Donc je passe en mode polling: l'arduino va venir interroger le Gladys pour récupérer la consigne. J'ai tenté d'éviter les duplications de code en créant une fonction pour envoyer les mesures et parser le retour qui contiendra la consigne. Pour le moment beaucoup de blocage. La carte plante assez vite. Problème de C? Debug en cours.
+
avec chacune leur shield respectif, le capteur DHT22 et le capteur MQ135.
  
* La suite c'est :
+
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.
 
+
|Step_Picture_00=Centrale_Domotique_domo-cartes.jpg
Passer sur Internet. En fait je l'ai déjà fait sans problème depuis le sqylab. C'est plutot le réseau orange qui me pose problème. Certains ports ne passent pas. Merci Orange !!
 
 
}}
 
}}
 
{{Tuto Step
 
{{Tuto Step
 
|Step_Title=Les déboires
 
|Step_Title=Les déboires
|Step_Content=* 1er déboire) La carte W5100.
+
|Step_Content=* Alimentation
  
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 connection au-delà de 10Mbps !
+
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.
  
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.
+
* 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)
 
* 2nd déboire) Le DHT22 (AM2302)
Ligne 69 : Ligne 82 :
 
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.  
 
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.  
  
* Alimentation
+
* 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é.
  
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.
+
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
 
|Step_Picture_00=Centrale_Domotique_dht22-oscillo.jpeg
 
|Step_Picture_00=Centrale_Domotique_dht22-oscillo.jpeg
 +
}}
 +
{{Tuto Step
 +
|Step_Title=A suivre...
 +
|Step_Content=* 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.
 +
|Step_Picture_00=Centrale_Domotique_Screenshot_from_2018-07-07_16-09-22.png
 +
|Step_Picture_01=Centrale_Domotique_Screenshot_from_2018-12-16_14-48-52.png
 
}}
 
}}
 
{{Notes
 
{{Notes
|Notes=* le projet domotique Gladys [https://gladysproject.com/ le site de Pierre-Gilles Leymarie]
+
|Notes=* le projet domotique Gladys : [https://gladysproject.com/ le site de Pierre-Gilles Leymarie]
* Bug W5100 "510" : [[https://forum.arduino.cc/index.php?topic=351477.30 | Discussion Arduino sur le problème et le fix]]
+
* la carte du fil pilote : [https://telefab.fr/2013/11/10/controle-a-distance-des-radiateurs/ le site FabLab de l’IMT Atlantique]
 +
* "Bug 510 Ohms" du W5100 chinois : [https://forum.arduino.cc/index.php?topic=351477.30 Discussion Arduino sur le problème et le fix]
 
}}
 
}}
 
{{Tuto Status}}
 
{{Tuto Status}}

Version du 16 décembre 2018 à 14:51

Une Technique de avatarSylvain dans les catégories Électronique, Énergie, Maison. Dernière modification le 19/02/2023 par Sgiraud.

Centrale Domotique logo.png

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.

Licence : Attribution (CC BY)

Centrale Domotique logo.png

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.

Notes et références