Servo nach bestimmter Zeit ansteuern.

Hallo Leute,
Ich möchte mein Servo an meiner Kaffemaschine anbringen der den Schalter betätigen soll. Also es soll z.b früh um 6:00 uhr sich die servo bewegen den Schalter anschalten und wieder zurrück fahren.

Was brauch ich für ein Code dafür?

Ps. Ich bin in diesem gebiet ein totaler anfänger. Ich habe es schonmal mit einen loop probiert aber ich finde das das nichtdas wahre ist weil ich erst 24 Stunden in tiks umrechnen muss. Geht das nicht einfacher?

Arduino: Arduino UNO

Mfg

MCFlex03229

Lerne die Basics. Des weiteren ist ein Servo dafür ungeeignet. Des weiteren brauchst du auch eine RTC.

MCFlex03229:
Ich möchte mein Servo an meiner Kaffemaschine anbringen der den Schalter betätigen soll. Also es soll z.b früh um 6:00 uhr sich die servo bewegen den Schalter anschalten und wieder zurrück fahren.

Was brauch ich für ein Code dafür?

Du benötigst als zusätzliche Hardware ein Echtzeituhr-Modul (RTC, Realtime-Clock).
Dein Code kann dann aus der RTC die aktuelle Zeit in Stunden, Minuten, Sekunden auslesen.

Wenn Dein Programm nur diese eine Aufgabe erfüllen muss, kannst Du folgende "blockierende" Programmlogik in der loop-Funktion verwenden:

  • aktuelle Uhrzeit aus der RTC auslesen und die Anzahl der Sekunden bis 6:00:00 Uhr ermitteln
  • delay(AnzahlSekunden*1000L); // Programm blockieren bis Zeit erreicht ist
  • dann den Servo betätigen
  • eine Sekunde warten
  • dann den Servo zurückstellen

Wenn Dein Programm aber mehrere verschiedene Aufgaben "gleichzeitig" zu erledigen hat, würdest Du eine Programmlogik nach dem EVA-Prinzip benötigen, die mehrere tausendmal pro Sekunde in dieser Form durchläuft:

  • Eingabe aller Eingangswerte
  • Verarbeitung der Eingangswerte zu Ausgangswerten
  • Ausgangswerte setzen
    Die Verarbeitungsfunktion für jede Aktion müßte dann so ausgearbeitet sein, dass sie ohne "delay" funktioniert und zu jedem Zeitpunkt selbst feststellen kann, was zu tun ist (z.B. einen Servo in die eine oder andere Richtung zu drehen).

Hallo,

warum soll man mit einer RTC die Uhrzeit auslesen und dann noch die Sekunden bis Zeitpunkt x ermitteln? Verstehe ich nicht.

Wenn man die RTC ausgelesen hat, kennt man doch die Zeit auf die Sekunde genau. Dann vergleicht man die Stunden und Minuten und löst entsprechend ein neues Ereignis aus. Den Ausleserhythmus macht man entweder mit millis aller Minute oder wenn es ganz genau sein soll programmiert den/die Timer in der RTC.

Nimm für die Zeit eine der viele Bibliotheken, die es dafür gibt:

Metro
TimerOne
TimeAlarms
Timer-Master
TimedAction

Hallo,

mir fällt da nochwas ein. Man kann gleich den Timeralarm in der RTC programmieren. Der löst dann zur gewünschten Zeit aus. Das ginge alles ohne Lib. Man kann natürlich trotzdem eine verwenden. Du bräuchtest aus meiner Sicht nur die Servo Lib und vielleicht eine für die RTC. Vielleicht als Anfänger einfacher mit RTC Lib.

Du müßtest Dich nur mit Grundbeispielen beschäftigen. Eingänge, Ausgänge usw.

Als RTC empfehle ich ein fertiges Modul mit DS3231. Habs meine von ebay für ca. 3 Euro gekauft.

Vermutlich reicht eine programmierte DS3231 mit einem Treiberschaltung schon aus. Da bedarf es keinerlei MCU.
Einfach das Alarmregister nutzten und über einen Optokoppler kurz einen Tasterdruck simulieren.

Jedoch sehe ich das ganze doch etwas kritisch. Zum Beispiel hat die Senseo keine stabile Gleichspannung im inneren. Da kannst du nicht einfach was anschließen. Zumal das ganze auch nicht ungefährlich ist, da durch den falschen Einbau Wasser eindringen kann. Ggf. mal nähere Infos.

Wenn es eine normale Filterkaffee Maschine ist, nehm eine mechanische Zeitschaltuhr. Stell die Kaffeemaschine abends an(Schalter) und eingeschaltet wird dass dann erst morgens über die mechanische Zeitschaltuhr. Pläne oder Anleitungen werde ich keine dazu geben, ausser es handelt sich um eine Kfz-Kaffeemaschine.

Hallo,

ein einmal programmierter nackter DS3231 reicht leider nicht. Das Alarmflag muß nach Auslösung des Alarms im Register wieder zurückgesetzt werden. Der Ausgang schaltet bei Alarm auf Low und bleibt auf Low bis zum zurücksetzen des Alarmflags. Ist wie beim Wecker. Der bimmelt bis man ihn ausschaltet.

Hab schnell das DS3231 überflogen. Es würde reichen, den Reset Pin für ~250 zu aktivieren. Soll keinen Einfluss auf die eingestellte Zeit haben.

Aber ohne genauere Infos zu bekommen, um welche Kaffeemaschine es sich handelt, bringt das rätselraten einfach nichts. Das ganze hört sich auch nicht gerade so an, als ob er sich in der Elektronik überhaupt auskennt.

Hallo,

leider nur überflogen. :roll_eyes: Bitte richtig lesen. :wink:

Ob der Reset intern oder extern ausgelöst wird, hat keine Auswirkung auf interne Abläufe. Das ist der letzte Satz dazu im Datenblatt. Daraus schließe ich, das alles so bleibt wie es ist. Wäre ja auch blöd wenn sich der Alarm von selbst löschen würde.

Und wegen den 250ms. Die RTC erkennt ja einen Spannungsverlust. Wenn die Betriebsspannung unter das Niveau der "Power Fail Voltage" fällt, ca. 2,5V, dann löst intern auch ein Reset aus und bleibt in Reset. Wenn nun die Betriebsspannung wieder da sein sollte, wird das interne Resetsignal um die besagten 250ms verzögert aufgehoben. Um der RTC zur Spannungsversorgung noch etwas Zeit zum stabilisieren zu geben.

Hallo,

hab das heute praktisch getestet mit meinem DS3231 Modul. Ich lasse zum Test aller 30sec einen Alarm auslösen. Das Alarmflag löschen habe ich jetzt auskommentiert. Alarmausgang bleibt dann auf Low. Wenn ich jetzt den Resetpin auf Masse ziehe, passiert rein gar nix. Selbst die Zeit läuft weiter die ich weiterhin jede Sekunde auslese. Da bin ich jetzt selbst überrascht. Ich dachte der verharrt in Ruhestellung, sagt keinen Mux mehr, intern läuft aber alles weiter, bis man den Resetpin wieder in Ruhe läßt. Jetzt weis ich echt nicht was ein externer Reset überhaupt macht?