Intelligente Lüftersteurung für's Bad

Hallo

ich bin neu hier habe aber schon einige Erfahrung mit Arduino (UNO R3), Jeenode und Butterfly Kit.

Zur Zeit läuft bei mir eine Temperatur und Feuchtigkeits Anwendung auf einem R3 plus Ethernet Shield. Die Messdaten werden per Funk (433 MHz, TFA Funksensoren) empfangen und per HTML Post auf einem Linux Server mit Apache2 und PHP gespeichert und aufbereitet. Das Projekt ist bei Github zu sehen: homewatch/homewatch_mainscreen.png at master · hjgode/homewatch · GitHub

OK, nun zu neuen Aufgaben. Ich möchte eine Steuerung für den Luftentfeuchter im Badezimmer bauen. Wir haben dort schon einen Lüfter Maico ECA100ipro mit intelligenter Steuerung. Dessen Verhalten möchte ich auf einem Arduino nach-programmieren. Ich habe schon viele, viele, viele Webseiten durchsucht aber nix ähnliches gefunden.
Die Maico Logik ist meines Erachtens sehr gut. Zur zeit läuft der Luftentfeuchter nur Feuchtigkeits-gesteuert. Ich möchte aber den Stromverbrauch reduzieren (die Strom-Verbrauch-Überwachung von diveresn Steckdosen ist auch schon in Planung, deshalb der Jeenode).

Also ich möchte wissen, ob schon jemand sowas programmiert oder gefunden hat, damit ich nix unnötig neu schreibe:

  1. Der Arduino ermittelt fortlaufend die Luftfeuchte und Temperatur.
  2. Es wird ein Luftfeuchte Referenzwert definiert und je nach Änderung über die Zeit neu gesetzt
  3. Steigt die Luftfeuchte langsam an, wird der Ref-Wert neu besetzt.
  4. Steigt die Luftfeuchte schnell an und übersteigt einen bestimmten Schwellwert, wird der Entfeuchter eingeschaltet.
  5. Sinkt die Luftfeuchte nicht innerhalb eines bestimmten Zeitraums, soll der Entfeuchter, evtl. nach einer Nachlaufzeit, abgeschaltet werden. Er soll nicht laufen, wenn es eh nix bringt.
  6. Sinkt die Luftfeuchte bei eingeschaltetem Entfeuchter soll er ausgeschaltet werden, wenn die Luftfeuchte um einen Differenzwert x gefallen ist oder den Ref.-Wert erreicht (also praktisch eine Folge des Entfeuchters oder Badlüfters ist, oder weil meine Frau gelüftet hat :wink: ).

Ich glaube das ist erst mal vollständig.

Nun erst mal frohe Rest-Festtage

Josef

maico_eca100_ipro.odt (51.3 KB)

Da war mal vor paar Wochen ein Thread um den Keller zu trocknen, vielleicht hilft dir das weiter:

Auf der suche..... http://forum.arduino.cc/index.php?topic=175778.0 Bitteschön.

Also ich habe mir mal ein paar Gedanken gemacht, was ich alles für die Programm-Logik brauchen könnte:

dynamischer Normal-Wert
    langsamer Werte-Abfall
    langsamer Werte-Anstieg
    Entfeuchter ist aus

starker Werte-Anstieg
moderater Werte-Abfall 

Entfeuchter is aus
    wenn Wert langsam sinkt/steigt -> neuer Norm-Wert
    wenn Wert schnell steigt -> Einschalten

Entfeuchter is an
    wenn Wert sinkt
    wenn Wert steigt

Maximale Laufzeit des Entfeuchters

Mess-Intervalle
1  Minute
10 Minuten Übertrag
60 Minuten Übertrag?

Ich hab mir mal was in CSharp zusammengestrickt (ging grad schneller) und mir ein wenig Statistik angesehen, ich muß ja irgendwie wissen, wann ich einen neuen Norm-Wert setze etc.

Test1
060 061 062 065 064 065 064 063 060 061 
     min=060 max=065 avg=062 acc=005 ten=0 sig=1.96 var=3.83
Test2
060 062 064 066 068 069 070 071 071 070 
     min=060 max=071 avg=067 acc=011 ten=1 sig=3.93 var=15.43
Adding 63 by 5 times
069 070 071 071 070 063 063 063 063 063 
     min=063 max=071 avg=066 acc=008 ten=-1 sig=3.84 var=14.71
Adding 63 by 5 times
063 063 063 063 063 063 063 063 063 063 
     min=063 max=063 avg=063 acc=000 ten=0 sig=0.00 var=0.00

Ich lasse mir Varianz (var), Standardabweichung (sig), Steigung (acc) (Geschwindikeit der Änderungen), Min, Max, Durchschnitt und Tendenz (ten) über eine Werte-Reihe anzeigen um zu sehen, was ich davon für die 'Intelligenz' gebrauchen kann.

Mal sehen, wie es weitergeht...

Hallo

zur Lösung:

Ich habe das ganze jetzt folgendermaßen gelösst:

Arduino uno R3 + DHT22 (DHT11 war zum schlecht und langsam) + 433MHz Sensor + LCD-Shield + Elro kompatible Funksteckdose von Pollin + elektrischer Raumtrockner

Code verwendet zwei Stack-Buffer (Buffer code basiert auf circular buffer). Wenn ich diesem Stack einen Wert hinzufüge (pus) fällt der älteste Wert raus. Davon verwende ich zwei miteiander verbundene Buffer. Der erste wird normal befüllt, der zweite bei jedem x-ten Mal. Wenn die Buffer-Größe beispielsweise 5 ist, wird der aktuelle Wert nur bei jedem 5ten Push gespeichert (ebenfalls ein Push). Dadurch habe ich einen Kurzzeit- und einen Langzeitspeicher. Ausserdem kennt dieser Stack-Buffer einen State-Wert. Dieser ist 0 oder 1. Die 1 setze ich, wenn der Min- Wert im Buffer und der aktuelle Wert eine mindest-Differenz hat, zum Beispiel 5% (wenn man in releativer Luftfeuchtigkeit von 0-100% Werte denkt), und der letzte und vorletzte Wert einen Anstieg signalisiert (also der letzte Wert kleiner als der neue Wert ist). Zudem wird diese State Variable erst nach x-mal Pushen zurückgesetzt. Dies ist für den Nachlauf des.'Trockners'.

Die Luftfeuchte-Werte (RH%) werden alle 60 sekunden gemessen und über den 433MHz Sender and ein Gateway gesendet, welches diese Werte an einen Webserver weitergibt. Der Gateway empfängt noch drei weitere drahtlos Temp/Luftfeucht-Sensoren. Da ich keine zusätzlich Logik verbraten wollte, sende ich das Sate-Signal im RH% Wert 'berschlüsselt' mit. Normalerweise werden nur ganzzahlige RH% Werte verarbeitet. Wenn State aber 1 ist, sende ich einen .5 RH% Wert. So kann ich kontrollieren, ob das Ganze auch wie gewünscht arbeitet.

Der Webserver liefert an Hand der empfangenen und gespeicherten Daten Grafiken und Übersichten. Ausserdem kann ich mit Hilfe der Google charts API Bereiche zoomen indem ich nacheinannder zwei Punkte anklicke und neu anzeigen lassen:

Der 433MHz Sender sendet nicht nur die Meßwerte and das Gateway er schaltet auch die Funksteckdose mit dem Trockner (RCSwitch Library)..

Der Langzeit-Buffer wird im Code derzeit nicht genutzt. Man könnte den Code ergänzen aund den Nachlauf des Trockners beednen, wenn der Min oder Mid-Wert im Langzeit-Buffer erreicht wird.

Das LCD zeigt mir die aktuellen Meßwerte, den State (Trockner an/aus) und den Min-Wert des Langzeit Buffers an.

Vielleicht hilft der Code dem einen oder anderen. Das komplette Zeugs, inkl. Webserver Gateway (Pollin NETIO + 433MHz Empfänger oder Arduino + Ethernetshield), Web-Server code (MySql,PHP) etc. liegt auf https://github.com/hjgode/homewatch.

Gruss

Josef