Dans l'article précédent, nous avons donné un aperçu du projet de piscine à contrôle intelligent. Dans cette deuxième partie, nous allons regarder le cœur, le contrôleur. Ceci est basé sur un ESP32, mais pourrait également être implémenté avec un ESP8266 avec quelques modifications.
Tâche du contrôleur de piscine
Le contrôleur prendra le contrôle central. Il mesure cycliquement les températures de l'eau de la piscine et le stockage de chaleur du système solaire. Il commutera également les pompes (filtres et chauffage). L'ESP est donc à la fois un capteur et un actionneur. L'échange de données a lieu via WLAN à l'aide de MQTT.
Mesurer les températures
La mesure de la température est généralement la première étape de la programmation des capteurs IoT. Il existe différents exemples de projets. Les capteurs de température viennent souvent ici DHT11 ou le plus précis DHT22 à utiliser. Cependant, comme les capteurs de température du projet doivent être placés à l'extérieur, nous utilisons le capteur étanche DS18B20. L'un des deux capteurs pour mesurer la température de l'eau de la piscine, l'autre pour mesurer la température dans le ballon tampon.
Les températures mesurées sont lues toutes les 60 secondes à l'aide d'une minuterie et publiées sous forme de message via MQTT. L'intervalle est un compromis entre la lenteur du réchauffement de l'eau et le débogage du programme. Des valeurs toutes les 5 minutes suffiraient probablement, mais l'intégration dans OpenHAB rend également les intervalles de minutes beaucoup plus faciles plus tard. Plus sur cela plus tard.
Contrôler les prises radio
Comme nous ne voulons pas traiter directement avec 230 V AC dans le projet, nous commutons les pompes via des prises radio. Avec les prises radiocommandées, il y en a que vous pouvez utiliser avec les ESP Émetteur radio 433 MHz peut contrôler. Une liste des prises radiocommandées compatibles se trouve dans Wiki la bibliothèque utilisée.
Structure du circuit
Le circuit ressemble à ceci sur la planche à pain:
Les capteurs de température ont également des résistances de pull-up avec 4.7kΩ entre la ligne de données et l'alimentation + 3V VCC.
Les broches de données sur l'ESP32 sont affectées comme suit:
#define PIN_DS_SOLAR 16 // Capteur de température solaire
#define PIN_DS_POOL 17 // Pool de capteurs de température
#define PIN_RSSWITCH 18 // pour les émetteurs 433 MHz
Code source du projet
Nous utilisons l'environnement de développement pour le projet Platform.io IDE. Avec cela, nous créons un projet pour la carte «esp32dev». Récemment Platform.io est également devenu un grand Article publié.
Le code source complet du projet se trouve dans le référentiel GitHub de l'auteur: https://github.com/stritti/smart-swimming-pool.
Bibliothèques utilisées
Dans ce projet, il est important pour nous d'utiliser des composants logiciels éprouvés et de résoudre autant que possible les bibliothèques existantes. Pour cette raison, les bibliothèques suivantes sont utilisées:
- rc-switch: contrôle des prises radio
- OneWire: prise en charge des capteurs I2C
- DallasTemperature: lire la température des capteurs
- PubSubClient: recevoir et envoyer des messages MQTT
- RemoteDebug: débogage sur Telnet
- ESPBASE: modèle pour les projets IoT
Ces bibliothèques sont stockées dans la configuration Platform.io (platformio.ini) et sont automatiquement chargées et intégrées à partir d'Internet lors de leur compilation.
Le programme pour le contrôleur de pool est basé sur ESPBASE, qui, comme écrit dans l'article précédent, fournit certaines fonctions de configuration. Au début du code, certaines variables sont créées et les définitions de l'affectation des broches sont définies.
En plus de la configuration des deux fonctions () et de la boucle (), d’autres fonctions sont implémentées. Essentiellement, il s’agit de recevoir et d’envoyer des messages MQTT et de les mettre en œuvre. En outre, une minuterie est mise en œuvre qui lit les capteurs de température cycliquement et les publie via des messages MQTT.
Les détails
- Dans le Bouclefonction, la connexion Wi-Fi est vérifiée encore et encore et, si nécessaire, restaurée. Il s’agissait d’un problème perfide : l’ESP a perdu à plusieurs reprises la connexion Wi-Fi et sans le Reconnect, il ne pouvait plus envoyer de données.
- La fonction Publier est utilisé pour envoyer les messages MQTT. Ainsi, les données d’un redémarrage et la mesure de la température sont publiées sous forme de messages JSON.
- La minuterie pour l’envoi des températures est divisée. La raison en est que les méthodes réelles de minuterie doivent être aussi courtes que possible. Dans la mise en œuvre, la minuterie appelle la fonction onTimer, qui interrompreCounter Incréments. Dans la fonction de boucle, ceci est vérifié et le onTemperaturefonction déclenchée. Dans cette méthode, la température interne de l’ESP est également lue et publiée.
- La fonction surMQTTCallback est appelé quand un message est envoyé à un sujet qui commence par '/pool/switch/'. Le message contient les informations de la prise radio si elle doit être allumée ou éteinte. Le sujet est également divisé en groupe et l’encodage de l’appareil. Cela signifie que le codage des commutateurs DIP de la prise transformé en 0 et 1. Par conséquent, cette solution peut être utilisée avec souplesse ailleurs.
Le code source du contrôleur de billard peut être trouvé directement dans le fichier suivant : https://github.com/stritti/smart-swimming-pool/blob/master/Pool-Controller/src/pool-control.ino
Test
Une fois le circuit mis en place et le projet chargé sur l’ESP, nous pouvons déjà tester. L’ESP ouvrira un réseau Wi-Fi comme point d’accès car aucune connexion Wi-Fi n’est configurée par défaut. Si vous vous connectez au contrôleur de piscine avec votre smartphone, vous pouvez configurer le Wi-Fi droit. Après cela, le microcontrôleur redémarre automatiquement et tente de se connecter au Wi-Fi spécifié.
Si tout est configuré correctement, un message d’état doit être publié via MQTT au début de l’ESP. Vous pouvez suivre tous les messages avec la commande suivante sur la framboise :
mosquitto_sub -h localhost -v -t /#
L’adresse IP du serveur MQTT peut devoir être ajustée dans le code source.
Après cela, les températures devraient être de sortie sur la framboise dans le cycle minute.
Dans l’autre sens, nous pouvons changer les prises radio en envoyant un message approprié. Le sujet est "/pool/switch/'lt;group’gt;/'lt;device’gt;". Groupe et Appareil sont les commutateurs de trempette de la prise comme 0 et 1. "ON" ou "OFF" est envoyé comme un message.
Que se passe-t-il ensuite ?
Cela jette les bases: nous pouvons lire les températures et nous pouvons changer de douilles.
Dans l’article suivant, nous connectons le contrôleur de piscine avec la solution maison intelligente openHAB et rendre la piscine vraiment intelligent par des règles.
Atteindre: Piscine et OpenHAB (3/4)
8 commentaires
Lars
Hallo Matthias,
als günstiges Poolthermometer würde ich persönlich, einfach einen NTC Widerstand in Schrumpffolie (mit Innenkleber) einschweißen. Diesen dann mit 3.3V oder 5V versorgen und diesen einfach mit einem ADC einlesen. Obere Schwelle ca. 3-5% unter dem max vom ADC Stufen setzen und dann die Kennlinie (Temperatur über Spannung oder Stufen) aufnehmen. Ist mit einem „Mini“ Controller sogar erweiterbar auf weitere Temp.Sensoren oder andere Sensoren.
Bei der Lösung ist auch der Umfang der Libs auf 1 oder 2 beschränkt und diese gehören sogar zum Standard. Sollten also keine Probleme machen.
Hoffe hilft ggf. weiter. Persönlich würde ich von fertigen Modulen bei so etwas abraten, weil zu teuer, S-Code unnötig aufgepustet wegen Funktionen in den Libs die du gar nicht nutzt und meist Probleme die Lib-Version mit dem Modul zu aktivieren.
Manchmal ist weniger mehr :-)
Lars
Hallo Leon,
Solche Fragen bekomme ich auch beruflich oft gestellt. Damit es logisch wird und Sinn ergibt muss ich jedoch ein wenig ausholen.
1. Was willst du messen? Ist der Zufluss zur Pumpe wesentlich anders als der Rückfluss zum Pool oder das Poolwasser?
Sollte der Unterschied größer als 2 Grad sein hast du irgendwo ein anderes Problem :-). Meist liegt der Unterschied, IM BETRIEB, zwischen 0,3 und 0,7 Grad. Das reicht meiner Meinung als Toleranz aus und könnte funktionieren. ABER ….
2) Der Offline Betrieb: – Läuft die Pumpe nicht, wird das Wasser in Zu- und Rücklauf nicht bewegt. Bei schwarzen Rohren in der Sonne sind diese nach 3 Stunden schon teilweise unangenehm warm. (28 – 35 Grad C ) Der Pool wird je nach Größe ungefähr 22-26Grad haben. Und genau das wird dein Problem werden wenn du den physikalischen Wandler zu weit von dem Ort wo er eigentlich messen sollte einsetzt.
Hier wäre eine einfache Wetterstation(zweckentfremdet) mit BT Übertragung eine Lösung. Den anderen Sensor an der Pumpe kann man ja als Referenzwert dennoch weiterhin nutzen.
Bei einem Wandler (ob NTC als Sensor, IR- Messung oder Wärmebild ist alles möglich) musst du auf langen Strecken den Spannungsfall (gerade bei Komponenten unter 12 V) sowie den Leitungsquerschnitt über die Länge berücksichtigen (wird sehr schlimm wenn viel Strom benötigt wird). Um Verluste zu verhindern und die Messungen genau zu halten solltest du immer so nah wie möglich am zu messenden Objekt sein.
Ich würde ein 2 teiliges Projekt vorschlagen. Sensor Station am Pool und Steuereinheit innerhalb 80-160m BT-Reichweite. Also wo du willst. Solang guter BT Empfang.
Dein „nicht sichtbar sein“ würde passen. Verlust und Spannungsfall und noch viele weitere Kleinigkeiten entfallen. Die Sensoreinheit ist je nach dem was du später machen willst aufrüstbar. Somit hast du Max Flexibilität und Energieeffizienz (mit Minisolarpanel ggf. gar kein Akku oder Batterietausch notwendig.
Die Fragen am Anfang sollte man sich immer stellen. Was messen? Welche Modi gibt es? Welche Unterschiede in den Modi? Welche replizierbaren Fehler ergeben sich daraus? Welcher Einfluss haben Modi und Fehler auf dein Ergebnis?
Die Fragen kann man auf alle Messungen anwenden. Ich hoffe damit kannst du die für dich beste Entscheidung treffen.
Als E-Ing. FR: Nachrichtentechnik, habe ich dir meine Meinung ja oben bereits geschrieben.
Viele Grüße
Lars
Matthias
Hi,
ich wollte mir noch ein günstiges Thermometer für den Pool basteln, scheine hier aber ein wenig Probleme zu bekommen bei der Vorbereitung meines ESP8266 Boards. Bei PlatformIO bekomme ich recht viele Meldungen, dass die Bibliotheken outdated sind.
Was wäre denn die aktuelle Möglichkeit um das zu bewerkstelligen? Die gefundenen Anleitungen sind leider sehr rudimentär und hier komme ich nicht ganz weiter. Hat jemand einen Tipp mit ggf. Schritt für Schritt Tutorial?
Danke
Andreas Wolter
auf den ersten Bildern ist eine Prototyping Platine zu sehen.
Das Breadboard auf den späteren Bildern ist das MB-102:
https://www.az-delivery.de/products/breadboard?ls=de
Eine kurze Info dazu gibt es im ersten Teil dieser Reihe.
Grüße,
Andreas Wolter
Tom
Tolle Idee.
Welches Breadboard wurde denn hier verwendet?
Danke für die Info vorab.
Andreas Wolter
@Lothar: Zigbees sind natürlich auch eine weitere Lösung, solch ein Projekt umzusetzen. Wie in allen Beiträgen gilt aber auch hier, dass wir nicht die beste Lösung zeigen möchten. Denn jeder entscheidet für sich, was für ihn die beste Lösung ist. Diejenigen, die das gerne mit diesen Komponenten bauen möchten, für die könnte dieser Beitrag nützlich sein.
Frei nach dem Motto: Warum machen wir das so? Weil es geht.
Grüße,
Andreas Wolter
Lothar
Wäre es nicht besser Zigbee Steckdosen (z.B. Lidl) als Aktuatoren der Pumpen zu verwenden????
Leon
Wo kann man den Sensor für die Wassertemperatur am besten unterbringen wenn das Pool haus weit vom Pool entfernt ist und der Sensor nicht sichtbar sein soll?