Forum: Mikrocontroller und Digitale Elektronik Server - Mikrocontroller


von IO-Netter (Gast)


Lesenswert?

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!

von Frank E. (erdi-soft)


Lesenswert?

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.

von thomas (Gast)


Lesenswert?

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

von Martin V. (oldmax)


Lesenswert?

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

von ich_eben (Gast)


Lesenswert?

suche doch mal nach NET-IO, das wäre wohl die einfachste und billigste 
Lösung

von R. M. (rmax)


Lesenswert?

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.

von Michael M. (technikus)


Lesenswert?

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

von IO-Netter (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.