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
suche doch mal nach NET-IO, das wäre wohl die einfachste und billigste Lösung
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ß
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.