Mit 3 Encodern 1 Relais Steuern

Hallo Zusammen,

Ich benutze hier und da meinen Arduino für kleine Programmier Projekte, jetzt hat mich aber eine Freundin gebeten Ihr zu helfen. Folgender Aufbau

3 Encoder sollen ein 12V Pumpen Relais steuern

Auf die Encoder sind Sanduhren gesteckt solange der Sand läuft t=X (Sanduhr) soll die Pumpe laufen.
Aber auch nur wenn es genau in der Mitte des Encoders steht.

An den Encodern sind 3 unterschiedlich große Sanduhren (mit unterschiedlichen Zeiten).

Wenn man den Taster der Encoder Benutz soll die Pumpe stoppen

Wie interpretiere Ich die ausgegebenen Werte der Encoder passend?

Vielen Dank für Eure Bemühungen im Voraus

Viele Grüße
Philipp

Bitte mal genauere Informationen.
Was für Sanduhren, was für Encoder ?
Poste Hyperlinks zu den Teilen, damit wir sehen was das ist.

Das mit den Encodern und den Sanduhren ist mir auch nicht klar.

Soll das Starten der Sanduhr durch 180°Drehen erkannt werden und ein Timer am Arduino gestartet werden der solange einen Ausgang gibt bis der Sand durchgeronnen ist?

Grüße Uwe

Hi

Bis auf die Sanduhren verstehe ich, daß Du Drehencoder (z.B. von ALPS) hast, Die auch einen Button besitzen - man den Knopf auch drücken kann.

Was ist ein 12V Pumpen Relais? (was soll hier 'Pumpen' bewirken)

Noch verstehe ich nicht, wie die Sanduhr zum Encoder passt und wie der Arduino mit der Sanduhr kommunizieren will.

MfG

PS: Meine ALPS-Drehencoder haben keine gerade Rasten-Anzahl (meine 15) - somit ist ein 'um 180° drehen' so nicht möglich.

Danke für euer Interesse,

Ich habe mal die AZDelivery KY-040 Encoder geholt kann aber auch andere Kaufen.

@uwefed Soll das Starten der Sanduhr durch 180°Drehen erkannt werden und Ein Timer am Arduino gestartet werden der solange einen Ausgang gibt bis der Sand durchgeronnen ist?

Die Sanduhr ist quasi nur fake

genau das möchte ich erreichen :smiley:

@postmaster-ino Der Ausgang schaltet dann ein 12V Relais an dem eine Pumpe hängt

Die Sanduhr ist quasi nur fake

Vielen Dank euch Vorab

Gruß Philipp

Woran soll der Encoder merken, dass der Sand durchgelaufen ist?

Gruß Tommy

@tommy56 Die Sanduhr ist quasi fake ich stoppe einmal die zeit wie lange der Sand braucht und dann tippe ich den wert in das Arduino Programm

Dann verstehe ich erst recht nicht, was Du überhaupt machen willst.

Gruß Tommy

Hi

Sind CLK und DW die beiden Phasen des Encoder?
Zumindest fand ich in den Tiefen des WWW, daß wohl 20 Rastungen pro Umdrehung vorhanden sind.
Also eine gerade Anzahl, was ein Drehen um 180° erlaubt.

Du befestigst also eine vorhandene Sanduhr an dem Encoder, oder ist diese Sanduhr vom Arduino auf einem Display angezeigt?
Bei Ersterem hast Du das Problem, daß sich die Zeit des Arduino wohl nicht an den Sand halten wird - der Arduino ist noch am Warten, während die Sanduhr schon fertig ist - oder anders herum.

Sonst ist's kein größeres Problem, einen Drehencoder auszulesen.
Je nach verwendeter Strategie gehen auch mehr.
Beispiel von Jurs per Timer-Interrupt
per PinChangeINTerrupt
per pollen
Eine Phase per Interrupt, die andere Phase per digitalRead
aus dem Nachbar-Universum, User HaWe
Auf github, per Fastread
Ein PDF zu Maschinen-Encodern, wie Diese gerade auch auf eBay angeboten werden

MfG

@postmaster-ino eine echte Sanduhr wird am Encoder befestigt, leichte Zeitunterschiede sind mir erstmal egal
Den Encoder auslesen ist kein Problem aber dann die Zahlen die Ich bekomme zum schalten zu verwenden habe ich Probleme :confused:

@tommy56 vergiss die Sanduhren :smiley: ich möchte das ein Encoder bei jeder 180°Stellung ein output Signal über eine definierte zeit ausgibt

Hi

Du kannst also mitzählen.
Was hindert Dich daran, beim Wechsel von Position 9 auf 10 (oder 11 auf 10, wie 20->0<-1) die aktuelle Zeit zu merken, ‘ausgangaktiv’ auf 1 zu setzen, den Ausgang anzuschalten und ab nun auf das Ende der Laufzeit zu warten?
Das Abschalten hat Nichts mehr mit dem Drehencoder zu tun (zumindest bis jetzt).
Das geschieht separat in loop(), einfach mit
if (ausgangaktiv && millis()-startzeit>=laufzeit){
ausgangaktiv=0;
…Ausgang Abschalten
}

MfG

Nächste Frage: Wie willst Du die 180° feststellen? Encoder sind relativ positionierend (also geben nur Impulsfolgen, as denen man vorwärts/rückwärts erkennen kann).

Du hast keine absolute Position, außerdem kann die jemand verstellen, während das Gerät aus ist.

Du müsstest also genau wissen, wieviele Impulse Dein Encoder auf 180° macht und die Einschaltstellung als 0° definieren.

Sage uns doch einfach mal, was Du damit (außerhalb der Elektronik/Programmierung) erreichen willst.
Im Moment kommt mir das Ganze ziemlich komisch vor, besonders wofür Du 3 Encoder brauchst.

Gruß Tommy

Hi

Wie ich Das verstehe:
Drei verschieden große Sanduhren (für’s Auge).
Jede kann umgedreht werden - der Sand rieselt (für’s Auge).
Der Arduino soll nun ‘nur’ die Pumpe anschalten, wenn eine der Sanduhren ‘läuft’.

Zwischenpositionen sind bisher noch nicht vor dem geistigem Auge aufgetreten - auch das Verdrehen der laufenden Sanduhr wird hier unschön aussehen, da nun die Sanduhr Nichts mehr mit dem Pumpenausgang zu tun hat.

MfG

@postmaster-ino genau das möchte ich realisieren

@tommy56 meine Freundin baut eine dusche die durch drehen von Sanduhren angehen soll und dann so lange laufen bis die Sanduhren durchgelaufen sind da ich wie du sagtest keinen zugriff auf die Sanduhren habe nehme ich einmal den realen wert und tu so als ob die Sanduhren die Dusche steuern

Hm, die wird aber ganz schnell merken, dass das alles nur Fake ist. Und dann?

Wären da Lichtschranken an der Sanduhr nicht die realistischere Variante?
Auf jeder Seite eine kurz vor der Verengung. Ob es mit einer an der Verengung auch geht, müsste man testen.

Gruß Tommy

@tommy56 ja hab ich mir auch Schon überlegt aber wegen Verkabelung möchte ich es erstmal so realisieren

Naja, der Entcoder hat sagen wir mal bei 360 Grad 20 Impulse, macht bei 180 Grad 10 Impulse. Also zählt der Arduino die Impulse auf Uhr01 oder Uhr02 oder Uhr03 mit. bei gleich/größer 8 Impulse ist diese Uhr aufgezogen. Die Zeit der jeweiligen Uhr läuft. Wärend des laufes wird keine neue Uhren Einstellung mehr akzeptiert. Die Zeit läuft, das Wasser auch, ist die Zeit abgelaufen, ist das Wasser aus. Und es wird wieder eine neue Uhren Einstellung akzeptiert.

Franz

Hi

Dusche und Arduino - der Arduino muß mit Sicherheits-Kleinspannung versorgt werden.
Auch habe ich Bedenken, daß der Drehencoder in diesem Umfeld lange überlebt - Der gammelt Dir wohl schnell weg.

Du könntest die Sanduhr drehbar an einer Platte befestigen, am Drehpunkt ein Magneten.
In der Platte ein AS5600, Der den Drehwinkel des Magneten erfasst.
Hätte den Vorteil, vom Wasser komplett abschottbar zu sein.

Wenn die Sanduhr nicht 'gerade genug' steht, gibt's halt kein Wasser :wink:
Damit sich Sand und Arduino ungefähr die Waage halten - auf wenige Sekunden soll's hier wohl nicht so ankommen.

MfG

@franz54 ja und wie muss der code aussehen das der Arduino zählt ?

@postmaster-ino ja bin Elektrofachkraft das ganze ist für ein Designmodel das funktionieren soll die Schalter und der Arduino sind nicht in irgendeiner form in der nähe des Wassers

Oha - Künstler-Gehilfe gg

Gegen den Drehencoder spricht, daß Dieser ‘sonst wie’ stehen kann.
Alle der 20 Rastungen sehen für den Arduino identisch aus!!
Ob die Sanduhr zu Beginn nun auf 90° liegt, oder senkrecht - Das erkennt der Arduino nicht.
Wenn Das so vorgegeben wird - Start mit senkrecht stehender Sanduhr - dann ist’s so und wir können zum Sketch über gehen.

Dort hast Du ‘nur noch’ die drei Encoder abzufragen - schon den einen oder anderen Link aus #8 angeschaut?
Der Jurs-Sketch hat den Scharm, daß man (beliebig viele) Drehencoder an egal welche Pins hängen kann.
Alle werden der Reihe nach durchgeprüft, ob sich was geändert hat.
Wenn, wird der entsprechende Counter hoch/runter gezählt.

An Dir ist es nun, diesen Counterwert in sinnvollen grenzen zu halten und auch zu erkennen, ob die Sanduhr gerade ‘scharf’ gedreht wurde.
1->0<-20 und 9->10<-11 sind die Flanken, die nacheinander erkannt werden müssen, damit die Sanduhr um 180° gedreht wurde.
Bei jeder Erkennung, daß einer der Encoder die 180° ‘geschafft’ hat, wird die Pumpe gestartet und die Startzeit gemerkt.
In loop() wird IMMER geprüft, ob diese Laufzeit zu Ende ist (deshalb müssen wir noch wissen, welche Sanduhr die zeit startete) - wenn Ende, dann Pumpe aus und vegessen, Wer uns gerufen hatte.
Bis der nächste Encoder die nächsten 180° meldet - dann geht’s wieder los.

MfG