Hallo liebe Leute!
Ich habe mir vor kurzem in der Bucht einen PC (ziemlich stromsparend)
für knapp 80 Euro ersteigert.
Der PC funktioniert einwandfrei und diesen möchte ich nun in meinem
privaten Netzwerk zuhause als Server einsetzen.
Neben Web-/FTP- und FileServer möchte ich damit z.B. einfache Messungen
in meiner Wohnung mittels eines AVRs vornehmen. Unter anderem soll
dieser die Temperatur von meinem Aquarium und dessen Füllstand
ermitteln.
Nun habe ich überlegt, wie ich das denn machen könnte. Da ich etwas
Erfahrung mit PHP habe, würde ich dafür gerne ein Webinterface
schreiben, welches mir die Daten die der Mikrocontroller erfasst hat
über den Browser ausgibt (im LAN und im Internet). Ggf. sollen sogar
Aktoren damit angesteuert werden (wie beispielsweise bei zu niedrigem
Wasserfüllstand eine Pumpe einschalten).
Das Ganze soll dann so aussehen. Ich habe den Server-PC, der mit dem
AVR-Board über die serielle Schnittstelle verbunden ist. Auf dem Server
läuft ein Server (Apache: XAMPP) und eine mySQL-Datenbank (Soll- und
Istwerte des jeweiligen Sensors.
Nun zur eigentlichen Überlegung. Da meine Daten ja nicht zeitkritisch
sind, habe ich mir überlegt, dass man die Sensoren -die am AVR
angeschlossen sind- vom Server-PC abfragen lassen könnte, also nach dem
Pollingverfahren den AVR über die ser. Schnittstelle abfragt "gib mir
Wert von Sensor-Adresse 0,1,2,3,..." daraufhin ermittelt der Controller
den jeweiligen Wert und macht ggf eine AD-Wandlung udn schickt den
ermittelten Wert wieder zurück an den Server, der anschließend den Wert
in die mySQL schreibt und die Daten veröffentlicht.
Nun, wie sieht aber der Fall aus, wenn ich nun beispielsweise auf einen
Sensorwert per Aktor reagiere? Beispielsweise ermittelt der Controller
am Sensor-1 eine unterschrittene Wasserfüllstandsmenge...über eine
if-Abfrage in PHP oder sollte dies direkt auf dem Mikrocontroller
geschehen?
Wie ist es aber, wenn beispielsweise die Sollwerte/Min-/Max-Wert in der
mySQL-Datenbank von mir verändert wurden?
Server fragt Controller: "Gib mir Wert von Sensor-1"--> "Controller
antwortet mit Wert 00" --> PHP-Skript schaut in der Datenbank nach, ob
dieser Wert akzeptabel ist, wenn NEIN, schickt der Server an den
Controller "Schalte PortX auf HIGH (wäre dann die Pumpe) und schicke mir
andauernd Momentanwerte, um zu sehen, wie weit der Füllstand schon
erreicht ist" PHP-Skript weiß, dass bei Füllstand-300 das Becken optimal
gefüllt ist, PHP schickt nun ein "STOPP" an Controller..
Hättet ihr einen besseren Vorschlag?
Danke!
Ich würde das auf dem Controller machen. Überleg einfach mal, was
passiert, wenn dein Server kurzzeitig nicht erreichbar ist, nachdem er
den "Pumpe an"-Befehl an den Controller gesendet hat. Da hilft dann auch
keine Hausratversicherung mehr. ;)
Kannst es so machen, dass dein Controller die Erlaubnis vom Server
benötigt, um eben das Wasser aufzufüllen, aber selbständig die
Wasserzufuhr unterbricht, wenn die Wanne voll ist.
Hi,
im Prinzip bin ich auch bei dem Thema (PC mit µC als Haussteuerung).
Das folgende würd ich anders machen bzw hab ich evtl. falsch verstanden:
Mit einer PHP-WEbobefläche kannst Du keine Regelung machen, da sich dort
nur etwas tut wenn Du klickst (ein Browser eine PHP Seite anfordert).
Du musst also Bedienung und Steuerung trennen. z.Bsp.
Ein permanenter Hintergrund-Prozess sammelt perdiodisch die Daten und
schreibt sie in die DB. Gleichzieitg schaut er nach ob bestimmte Werte
über oder unterschritten wurden. Falls ja, startet er die entsprechenden
Kommandos um die Werte wieder innerhalb der zulässigen Grenzen zu
bekommen (also Pumpe starten).
Mit der PHP Weboberfäche schaust Du nur die akutuellen Werte nach bzw.
veränderst die Grenzwerte.
Der Hintergrund Prozess kann natürlich auch in PHP geschrieben sein.
Thomas
Hi
Mal eine Frage:" wohnt unter dir jemand ?" Du solltest ihn warnen.
Ok, natürlich kannst du einen µC mit der Überwachung deiner Umgebung
betrauen und auch einige Sachen ausführen lassen. Zuerst schreibst du
das Kommunikationsprogram. RS232 ist völlig unproblematisch und auch für
schnelle Anwendung geeignet. Na ja, nicht im kHz Bereich, aber einige Hz
dürfen's schon sein. Wenn du Bspw. jede Sek. eine Information
anforderst, hat dein µC schon Langeweile. Das mit automatischen
Wasserzulauf allerdings würd ich lassen. Der Eigentümer wird sich über
ein leergelaufenes Wasserwerk nicht erfreut zeigen..... Oder bist du dir
so sicher, das du jede Eventualität erfaßt hast und im Fehlerfall
100%tig das Wasser abdrehst ? Aber unkritische Aktionen wie Licht oder
Ventilator an kann man schon mal machen.
Gruß oldmax
Da eine Pumpe eingeschaltet werden soll (und nicht ein Ventil, das mit
der Wasserleitung verbunden ist) kann schonmal nicht das ganze
Wasserwerk leer laufen, sondern allenfalls der Voratsbehälter. Um das
Ganze nochmal zusätzlich abzusichern könnte im Aquarium ein Schalter mit
Schwimmer zum Einsatz kommen, der bei Überschreiten einer bestimmten
Schwelle die Stromzufuhr zur Pumpe unabhängig von PC und Controller
unterbricht.
IO-Netter schrieb:
> Wie ist es aber, wenn beispielsweise die Sollwerte/Min-/Max-Wert in der> mySQL-Datenbank von mir verändert wurden?
Ganz einfach: Der PC schickt dem Kontroller ein Datenpaket "Setze neuen
Min/Max-Wert". Die trägt der Kontroller bei sich ein und speichert sie
evtl. noch im EEPROM. Damit kann der Kontroller alleine regeln, entweder
komplett autark oder nach Freigabe vom PC. Ganz wichtig sind (auf dem
Kontroller) Sicherungen wie: Maximale Zulaufdauer/menge erreicht? Dann
muß die Pumpe auch dann gestoppt werden, wenn der Sensor noch nicht voll
meldet. Weiterhin müssen die Schaltausgänge der Aktoren so gestaltet
sein, daß sie bei einem Kontrollerfehler (Programm hängt sich auf,
Stromversorgung Kontroller weg, ...) nicht aktiviert werden.
Servus
Michael
@thomas: genau so hatte ich es auch vor :) Aber wie du schon sagst kann
PHP ja im Hintergrund die Daten vom Controller erfassen ohne
"klick-Aktion" auf dem Webinterface.
Das mit dem Wasserzulauf war natürlich auch nur ein fiktives Beispiel,
ich würde mich niemals derart auf meine Programmierkünste verlassen ;-)
Zunächsteinmal werde ich ein PHP-Skript schreiben, welches per RS232 den
Controller "anspricht" indem es eine Adresse schickt. Jeder Sensor hat
eine Adresse...Nach dem Request der Adresse erfolgt der Response vom
Controller (= Wert).
Server an AVR >> Adresse 0x01
AVR an Server >> Wert 0x83
-----------------------------------
Server an AVR >> Adresse 0x02
AVR an Server >> Wert 0xFF
-----------------------------------
Server an AVR >> Adresse 0x01
AVR an Server >> Wert 0x83
...usw.
Die Werte werden dann in die Datenbank gespeichert, das Webinterface
ruft lediglich den aktuellsten Eintrag aus der Datenbank auf.
bis dahin ist der Controller seeehr gelangweilt, da er nur einmal in 10
Sekunden oder einmal in der Minute vom Server "gekitzelt" wird und
antworten soll...Der AVR ist bis dato so programmiert, dass er mit den
Werten des Empfangsbuffers jeweils den betroffenen Sensor auswertet,
diesen ggf wandelt und den Wert an den Server schickt.
Soo und die Aktor-Steuerung ist dann (nachdem die Sensoren richtig
funktionieren) der nächste "Meilenstein".
Der Benutzer fordert z.B. manuell an "Blumen gießen". Nun wird per
serielle Schnittstelle ein Interrupt (Vektor:UART) auf dem Controller
ausgelöst, der anhand des UART-Eingangspuffers weiß, um welchen Befehl
es sich handelt:
Beispielsweise
Empfang 0x01 ist Schrittmotor-1
Empfang 0x02 ist Gleichstrommotor-1
Empfang 0x03 ist Relais-X.
Gegebenenfalls wird nun noch auf einen weiteren parameter (weiteres noch
nicht empfangenes Byte) gewartet. Beispielsweise beschreibt dieses dann
die Menge/das Verhalten.
Server schickt Befehl 0x01....Mikrocontroller weiß jetzt, dass es sich
um den Schrittmotor-1 handelt, jedoch weiß er noch nicht, was er mit
diesem tun soll. so schickt der server beispielsweise
01 85 02.
Würde heißen, Schrittmotor-1 (01) soll 85 Schritte nach rechts (02)
machen.
So würde ich mir das jetzt vorstellen...und nein, es wird natürlich
nichts "gewagtes" gesteuert, höchstens mal zum Probieren eine Lampe
ein/aus. ;-)
Gruß