Arduino + Webserver

Hallo ich bräcuhte mal eure Meinung, wie mach ichs richtig? Ich habe für meine Rollosteuerung einen Arduino Uno mit Webshield mit 16 Relais (8 auf und 8 zu) Die Funktionen Auf-Stop-Zu und Gruppenfahrt klappen alle einwandfrei. Bisher habe ich die Rollos alle mit einer Zeitschaltuhr abends zufahren lassen und morgens per hand individuell aufgefahren. Da die Motoren Endschalter besitzen, konnte die Zeitschaltuhr den Befehl 1 min lang freigeben. Jetzt brodle ich schon seit längerem an der Situation mit dem Arduino. Ich würde gerne die einzelnen Fahrfunktion ebenfalls zeitgesteuert ablaufen lassen, um nicht ständig auf dem Taster zu bleiben. Nun zur Frage: bisher lasse ich einen schaltbefehl über delay(30000) laufen, das gefällt mir aber nicht, da ja kein anderer Befehl in dem Moment geht. Über Timer bereitet mir Probleme, da wenn der Browser aus ist, der Programmdurchlauf nicht mehr gegeben ist.

Wie sollte man es richtig machen? Sollte ich die Client.available abfrage weglassen und den Webserver ständig arbeiten lassen (macht er das überhaupt?).

Oder gibt es noch einen ganz anderen Ansatz?

Peter

Hier schon gewesen?

Dass mit 16 Relais (8 hoch und 8 runter) ist ja schon ok, nur muss man die richtig verkabeln. Wenn in der Software ein Fehler ist (was sicher sein wird), schalten beide Relais (hoch und runter), dann haste Motor kauputt, Haus kaputt und Nerven kaputt.

1 Relais also als Richtung vorgabe. 1 Relais als Spannungsversorgung.

so habe ich das auch gelöst, 7 für die Rollos und je eins für die Richtung. Das ist schon sichergestellt.

Über Timer bereitet mir Probleme, da wenn der Browser aus ist, der Programmdurchlauf nicht mehr gegeben ist.

Da ist sicher was falsch. "...der Programmdurchlauf nicht mehr gegeben" klingt sehr merkwürdig

Der Arduino ist ein webserver, richtig ? Und er fährt die Rollos abends runter, auch wenn kein Mensch per Browser mit ihm redet. Falls sich mal ein client meldet, darf der gerne Wünsche senden, und evtl. auch erfahren, welches Rollo wie steht, aber die eigentliche Aufgabe (automatische Rolladensteuerung) sollte nicht beeinträchtigt werden.

delay(30000) geht natürlich gar nicht, so viel Komfort, dass ein webclient prompt bedient wird, sollte schon sein. Ausserdem möchte man ja auch evtl. mal einen AUF oder ZU Befehl mit STOP unterbrechen, und nicht erst, nachdem er schon lange die Endstellung erreicht hat.

Ich würde für jedes Rollo eine eigene Laufzeitführung machen, damit sie unabhängig und überlappend gefahren werden können, und unabhängig voneinander die jeweiligen Fahr-Befehle automatisch wieder zurückgenommen werden.

7 für die Rollos und je eins für die Richtung.

Wer sorgt dafür, dass die Richtung nur umgeschaltet werden kann, wenn das Rollo steht? Wieder "nur" Software ;) Ist so natürlich schon besser als 8*AUF und 8*AB, und die Relais-Schaltzeit (break before make) ist auch größer als 0. Aber somfy z.B. wünscht sich 500 ms spannungsfrei zwischen AUF und AB ...

Sinnvoller wären hier fertige UP Geräte, die nur noch die Befehle AUF, STOP und ZU. Ich bekomm ne Gänsehaut, wenn jemand sowas mit den Sainsmart Karten lösen will.

Warum nicht direkt fertige Geräte nehmen und im Steuerschrank unterbringen? http://www.voelkner.de/products/17424/Rs485-Jalousieakter-1-fach.html

sschultewolter: Warum nicht direkt fertige Geräte nehmen und im Steuerschrank unterbringen? http://www.voelkner.de/products/17424/Rs485-Jalousieakter-1-fach.html

Vergleich den Preis für 8 dieser Aktoren mit dem Preis einer SainSmart-Relaisplatine und du hast die Antwort. ;)

Jetzt hab ich schon einige Antworten, aber wie ich es definitv machen kann (sprich code) hab ich noch nicht gesehen.

@michael_x so mit dem Ablauf hätte ich mir das auch gedacht, aber was ist mit der Abfrage is Client.available { ?

Hmm... Es wird dir auch vermutlich keiner deine Rollladensteuerung schreiben ;-)

Hier wird erklärt, wie man auf die Delays verzichten kann.... http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Etwas strukturierter bekommt man das mit den ProtoThreads hin.

Und es gibt viele weitere Libs, welche sich um Multitasking und Zeitsteuerungen kümmern.

Hmm... Es wird dir auch vermutlich keiner deine Rollladensteuerung schreiben ;-)

das verlangt auch keiner.

das mit dem Timer hab ich schon kapiert, und ausprobiert. Was ich eigentlich wissen will, was muss ich tun, damit der Server ständig weiterarbeitet, auch wenn kein Client darauf zugreift.

dastesteich: Was ich eigentlich wissen will, was muss ich tun, damit der Server ständig weiterarbeitet, auch wenn kein Client darauf zugreift.

Öhm..

Der Webserver(Prozess) braucht nicht weiterarbeiten, wenn kein Client zugreift. Nur ab und zu mal prüfen, ob einer was will. Wenn anderer Kram "neben" dem Webserver Gedöns laufen soll, dann braucht es Zeit. Also weg,mit allen delay() Dingern und alles im loop() nacheinander aufrufen. .