Regeln günstig und mit wenig Aufwand mit ESP32 und Micropython

Anforderungen

  • Billig – ein kompletter Aufbau mit Display etc. für unter 50€
  • Einfach zu programmieren – du brauchst nur eine Hand voll Python Kommandos kennen um professionelle Regelungen zu realisieren
  • Remote übers Netz programmierbar – die RegulatorCard verbindet sich über WLAN und bietet dir eine Webseite auf der du einfach dein Programm ändern kannst. Hast du am Standort der Regelung kein WLAN – so arbeitet die Karte als WLAN-AccessPoint
  • Schnittstellen für Visualisierungs/Einstellungsprogramme
  • Bei Bedarf erweiterbar über I2C (z.B. mehr Relais)
  • Einfach für Anfänger aber auch individuell nutzbar für embedded Profis die ihr komplett eigenes Programm schreiben wollen

Features

  • 4 x PT-100 Analoge Temperatursensoren
  • 3 x 18C20 Digitale Temperatursensoren
  • 3 x Flusssensor
  • 3 x PWM-Ausgang mit variabler Spannung
  • 8 x Relais

Hardware

Legende: V : Voltage/Versorgung; G : Ground; S: Signal; AP : AccessPoint; STA : Station; 5 : 5 Volt; VIn : Spannung für PWM

Relais im Betrieb / PWM für geregelte Pumpen (LED-Helligkeit als Demo)

Schaltplan

einfach und übersichtlich

Software

Das hier ist die Webseite mit der du deine Regelungen realisieren kannst. Es gibt links einen Bereich, in dem du die aktuellen Eingangs- und Ausgangswerte siehst. Rechts kannst du drauf los programmieren. Die Konstanten für dein Programm packst du am besten oben in die Settings (zeig später warum).

Um das Programm zu ändern musst du:

  • Laufende Regelung erstmal mit dem Stop-Knopf stoppen.
  • Code ändern und ausführen (mit Execute Code) bis alles passt
  • Unter dem Programm ist eine grüne Box die dir anzeigt wie lange dein Programm gebraucht hat und auch deine print()-Ausgaben.
  • Ist der Rahmen grün ist alles Okay
  • Du kannst dann die Regelung mit dem Start-Knopf starten
  • Schaltest du aus und wieder an, so startet die RegulatorCard sofort wieder dein letztes Programm auszuführen

Schau dir den kurzen Beispielcode mal an:

# So Easy :-)

if SolarPumpMode == "AUTO" and t1 > SolarPumpOnValue:
   pwm1 = 20 + min(80, (t1 - SolarPumpOnValue) * 3)
else:
   pwm1 = 0

if flow1 > 100 and t5 > RegulatorValveOn:
   relais1 = 1
else:
   relais1 = 0

# Remember things over iterations

counter1 = get_var("counter1")
counter1 += 1
if counter1 > 5:
   relais5 = 1
   counter1 = 0
else:
   relais5 = 0
set_var("counter1", counter1)

print("Dein erstes Programm läuft !!!")

Eigentlich ist in diesem Minimalbeispiel schon alles was du an Python brauchst um los zu programmieren

Ich hoffe du hast jetzt schon Lust bekommen damit zu Arbeiten 🙂

Aber einwas hab ich noch:

Visualisierung

Ich hab vorher schon von Schnittstellen gesprochen.

Über den Endpoint http://<IP-Adresse>/data bekommst du die aktuellen Sensor und Aktorenwerte als einfaches JSON

{
  "t1": "NC",
  "t2": "NC",
  "t3": "NC"
  "t4": "18",
  "t5": "NC",
  "t6": "NC",
  "t7": "NC",
  "relais1": 0,
  "relais2": 0,
  "relais3": 1,
  "relais4": 0,
  "relais5": 0,
  "relais6": 0,
  "relais7": 1,
  "relais8": 0,
  "flow1": 0,
  "flow2": 0,
  "flow3": 0,
  "pwm1": 0,
  "pwm2": 0,
  "pwm3": 0,
  "mode": "STOP",
  "error": ""
}

Damit kannst du dir solche Visualisierungen bauen:

Für die Visualisierung (und Einstellungen) reicht ein günstiges Android Tablet das kommt oft günstiger als RPI plus Display, Kabel Netzteil etc. Ein einfaches Tablet bekommt man bei Amazon schon ab etwas über 40€.
Die Applikation ist diesmal Mit GoDot erstellt und lässt sicht leicht auf deine Wünsche anpassen

Wenn du Fragen hast schreib mich gerne an

Ich werd wieder versuchen diesen Artikel als Dokumentation schrittweise zu verbessern

Aber schon mal viel Spaß damit
Euer Stefan

Anhang

BOM

IDNameDesignatorFootprintQuantityManufacturer PartPriceLink
10.1uC1,C2,C3C06033
2HDR-M-2.54_1x10J1HDR-M-2.54_1X1010.071
3HDR-M-2.54_1x4J2HDR-M-2.54_1X410.057
4HDR-M-2.54_1x2J3HDR-M-2.54_1X210.03
5400R1R06031
64k7R2,R3,R10,R11,R12R06035
71kR4,R7,R8R06033
8330R5,R6,R9R06033
9ESP32-DEVKITCU1BULETM-SMD_ESP32-DEVKITC1ESP32-DevKitChttps://www.amazon.de/dp/B074RGW2VQ
10MAX31865AAP+U2SSOP-20_L7.2-W5.3-P0.65-LS7.8-BL1MAX31865AAP+8.95https://www.digikey.de/de/products/detail/analog-devices-inc-maxim-integrated/MAX31865AAP-T/5396623
11ADG804YRM-REELU3MSOP-10_L3.0-W3.0-P0.50-LS5.0-BL1ADG804YRM-REEL0.868https://www.digikey.de/de/products/detail/analog-devices-inc/ADG804YRMZ/997617
12PCF8574TS/3U4SSOP-20_L7.5-W5.2-P0.65-LS8.0-BL1PCF8574TS/3https://www.digikey.de/de/products/detail/texas-instruments/PCF8574PWR/484761
13JL301-50009U01U5,U6,U7,U8CONN-TH_JL301-50009U014JL301-50009U010.317https://www.amazon.de/dp/B0CBWXQQD1
14PC817X C档U9,U10,U11DIP-4_L6.5-W4.6-P2.54-LS7.6-BL3PC817X C档https://www.digikey.de/de/products/detail/sharp-socle-technology/PC817X2NSZ9F/7942022

Gerber

Hier kommt bald der Gerber-Daten-Link – damit kannst du dir Leiterplatten z.B. bel JLC-PCB bestellen

Software-Image

Hier kommt bald das Image mit der kompletten Software das du direkt mit esptool oder Thonny auf deinen Controller flashen kannst

Sensoren / Zubehör

Temperatursensor analoghttps://www.amazon.de/Temperaturf%C3%BChler-Temperatursensor-Wasserdichte-Silikon-Leitung-Speicherf%C3%BChler/dp/B09CH7BVBG
Temperatursensor digitalhttps://www.amazon.de/Aideepen-Temperatursensor-Wasserdicht-Temperaturf%C3%BChler-kompatibel/dp/B0DB5THKWQ
Flusssensorhttps://www.amazon.de/dp/B0FQC7BC45
Displayhttps://www.amazon.de/AYWHP-LCD-Bildschirm-Anzeigemodul-Bildschirm-Kompatibel-Raspberry/dp/B0F3JHJ732
Relais-Kartehttps://www.amazon.de/Elegoo-Relaismodul-Optokoppler-Arduino-Raspberry/dp/B01M61VVGV