Der Pool-Controller (2/4)

Nell'articolo precedente abbiamo dato una panoramica del progetto di piscina con controllo intelligente.In questa seconda parte affronteremo il pezzo di cuore, il controllore.Questo è basato su un ESP32, ma potrebbe anche essere implementato con alcune modifiche con un ESP8266.

Compito del controllore della piscina

Il controllore prenderà il controllo centrale.Misura ciclicamente le temperature dell'acqua di piscina e lo stoccaggio termico del sistema solare.Inoltre, spegnerà le pompe (filtro e riscaldamento).L'ESP è quindi sia un sensore che un attore.I dati vengono scambiati tramite WLAN tramite MQTT.

Controllore della piscina

 

Misurare le temperature

La misura della temperatura è di solito l'inizio della programmazione dei sensori IoT.Ci sono diversi esempi di questo.Spesso arrivano sensori di temperatura DHT11 o più precisamente DHT22 per l'uso.Tuttavia, dato che i sensori di temperatura nel progetto devono essere distribuiti esternamente, usiamo il sensore ad acqua stretta DS18B20Sì!Uno dei due sensori per misurare la temperatura dell'acqua della piscina, l'altro per misurare la temperatura nel tampone.

 

Misurazione della temperatura MQTT

Le temperature misurate vengono lette ogni 60-secondi utilizzando un timer e pubblicate come messaggio da MQTT.L'intervallo è un compromesso tra l'inerzia del riscaldamento dell'acqua e il debugging del programma.I valori saranno probabilmente sufficienti ogni cinque minuti, ma l'integrazione in OpenHAB rende anche il passo minuto molto più facile in seguito.Ne riparliamo più tardi.

Centrali radio di controllo

Dal momento che non vogliamo trattare direttamente con la tensione 230 Volta AC nel progetto, trasmettiamo le pompe con le prese radio.Nel caso delle prese radio ci sono alcuni che possono essere utilizzati tramite ESP con un 433 trasmettitore radio MHz Posso controllare.Un elenco di prese radio compatibili può essere trovato in Wiki! la biblioteca usata.

Struttura del circuito

Il circuito sembra così:

Con i sensori di temperatura, le resistenze a trazione con 4.7kO si incontrano tra la linea dati e la fornitura di tensione +3V VCC.

I perni dati sul ESP32 sono indicati come segue:

35; definire SOLAR DI PIN 16 // TempSensore solare
35; definire PIN DS POOL 17  // TempSensore Piscina
35; definire PIN-U RSSWITCH 18 // per il trasmettitore 433MHz

Codice sorgente del progetto

Per il progetto utilizziamo l'ambiente di sviluppo Piattaforma.io IDESì!E'cosi' che abbiamo organizzato un progetto per il consiglio d'amministrazione espa32dev.Recentemente Platform.io è diventato anche un grande Articolo pubblicato.

Il codice sorgente completo del progetto può essere trovato nel repository di GitHub dell'autore: https://github.com/stritti/smart-swimming-pool.

Biblioteche utilizzate

In questo progetto è importante ricorrere a componenti software collaudati e risolvere il più possibile tramite librerie esistenti. Per questo motivo vengono utilizzate le seguenti lib:

  • rc-switch: controllo delle prese radio
  • OneWire: supporto per i sensori I2C
  • DallasTemperatura: lettura della temperatura dei sensori
  • PubbSubClient: ricezione e invio di messaggi MQTT
  • RemoteDebug: Debug via Telnet
  • ESPBASE: Modelli per progetti IoT

Queste librerie sono memorizzate nella configurazione di Piattaforma.io (platformio.ini) e vengono caricate e integrate automaticamente da Internet al momento della compilazione.

Il programma per il controllore della piscina è basato su ESPBASE, che fornisce alcune funzioni di configurazione come scritto nel precedente articolo.All'inizio del codice vengono create alcune variabili e vengono definite le definizioni per il rivestimento di perno.

Oltre alle due funzioni setup() e loop() vengono implementate altre funzioni.Si tratta essenzialmente di ricevere e inviare messaggi MQTT e di implementare i messaggi di conseguenza.Inoltre, viene implementato un timer che legge ciclicamente i sensori di temperatura e pubblica tramite messaggi MQTT.

I dettagli

  1. In the Esecuzione-Funzione la connessione WLAN è controllata ripetutamente e, se necessario, ripristinata.Si tratta di un problem a delicato: l'ESP ha ripetutamente perso la connessione Wi-Fi e senza la riconnessione non poteva più inviare dati.
  2. La funzione Pubblica è usato per inviare messaggi MQTT.I dati vengono quindi pubblicati come messaggi JSON da una ripresa e dalla misura della temperatura.
  3. Il timer per inviare le temperature è diviso.Il motivo è che i metodi di tempistica effettivi devono essere il più breve possibile.Nell'implementazione, il timer invoca la funzione onTimer, che solo la volatile Interruttore Riduzione.Nella funzione di loop questo è controllato e l'attuale onTemperaturaQuesto metodo legge e pubblica anche la temperatura interna dell'ESP.
  4. La funzione onMQTTCallback è chiamato quando un messaggio è stato inviato ad un Topic che inizia con'pool/switch/'.Il messaggio contiene l'informazione della presa radio se accendere o spegnere.per essere spenta.Il Topic è ulteriormente diviso nel gruppo e nella codifica del dispositivo.Questo significa la codifica dell'interruttore DIP del socket trasformato in 0 e 1.Questo consente di utilizzare questa soluzione in modo flessibile altrove.

Il codice sorgente del controllore della piscina può essere trovato direttamente nel seguente file: https://github.com/stritti/smart-swimming-pool/blob/master/Pool-Controller/src/pool-control.ino

 

Prova

 

Prova

Una volta che il circuito è stato costruito e il progetto è caricato sul ESP, possiamo già testarlo.L'ESP aprirà una WLAN come punto di accesso, poiché di default non viene fornita alcuna WLAN.Se si connette con il controllore della piscina con lo smartphone, è possibile configurare la giusta WLAN.Dopo di che, il microcontrollore si riavvia automaticamente e cerca di connettersi al WLAN specificato.

Se tutto è impostato correttamente, un messaggio di stato dovrebbe essere pubblicato tramite MQTT all'inizio dell'ESP.È possibile tracciare tutti i messaggi con il seguente comando sul lampone:

 zanzara sub -h localhost -v -t#

Il codice sorgente potrebbe aver bisogno di regolare l'indirizzo IP del server MQTT.

Dopo di che, le temperature sul lampone dovrebbero essere emesse nel ciclo minuto.

In un'altra direzione possiamo attivare le prese radio inviando un messaggio adatto.Il Topic è composto da "/pool/switch/<group>/<device>".Gruppo e dispositivo sono gli interruttori di immersione della presa come 0 e 1.Il messaggio e'"ON"."OFF" mandato.

Spine

 

Come procediamo?

Questo crea le basi: possiamo leggere le temperature e spegnere i plugin.

Nel seguente articolo colleghiamo il controllore della piscina con la soluzione Smart Home openHAB e rendiamo la piscina davvero intelligente attraverso le regole.

 

Continuare a:Piscina e OpenHAB (3/4)

 

Esp-32Projekte für fortgeschritteneRaspberry piSensorenSmart home

8 Kommentare

Lars

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

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

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

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

Tom

Tolle Idee.
Welches Breadboard wurde denn hier verwendet?
Danke für die Info vorab.

Andreas Wolter

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

Lothar

Wäre es nicht besser Zigbee Steckdosen (z.B. Lidl) als Aktuatoren der Pumpen zu verwenden????

Leon

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?

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert