Forum: Mikrocontroller und Digitale Elektronik Seilbahn steuern


von Kevin (Gast)


Lesenswert?

Hallo

Ich habe eine kleine Seilbahn gebaut und möchet diese nun steuern 
können.
Als Controller kommt ein  ESP8266 zum Einsatz,
da ich das Ganze gerne vomn Handy aus steuern möchte.

Der Motor besteht aus einem Servo, welches nur noch als Getriebemotor 
dient
und über das Poti ansteigende Werte an meinen analogen Eingang liefert.
Pro Radumdrehung gibt es einen Maximalwert von ca 3.3V.
Auf eine Radumdrehung genau zu steuern reicht vollkommen aus.

Nur soll die Bahn während er Fahrt wweitere Befehle empfangen können,
um z.B. eine Lampe einzuschalten.

Ich programmiere mit der ArduinoIDE und bin noch recht unerfahren.
Gehe ich recht in der Annahme, dass ich es mit Interrupts lösen sollte?
Also immer wenn ein (der) Maxiumalwert erreicht ist,
wird eine Runde gezählt und wenn Runde_ist == Runde_soll ist, wird 
gestoppt?

Leider finde ich dazu keine passenden Beispiele und frage daher hier 
nach.

Auch möchte ich, dass die Bahn nicht sofort stehen bleibt, sondern 
langsam bremst.
Wie realisiert man dies?

Vielen Dank für eure Mithilfe!

Kevin

von oszi40 (Gast)


Lesenswert?

Kevin schrieb:
> dass die Bahn nicht sofort stehen bleibt, sondern
> langsam bremst.

1.Dazu sollte man den Motor gut kennen.
2.PWM?

von Kevin (Gast)


Lesenswert?

oszi40 schrieb:
> 1.Dazu sollte man den Motor gut kennen.

Wir wurden einander vorgestellt und mögen uns.
Sein Name ist: MR995

oszi40 schrieb:
> 2.PWM?

Ja, aber wie langsamer werden?

von Wolfgang (Gast)


Lesenswert?

Kevin schrieb:
> Auch möchte ich, dass die Bahn nicht sofort stehen bleibt, sondern
> langsam bremst.
> Wie realisiert man dies?

Immer mitzählen wo man ist und rechtzeitig vorm Ziel den Motor zunehmend 
langsamer laufen lassen. Man kann z.B. mit konstanter 
(Brems-)Beschleunigung arbeiten, d.h. ausgehend von der 
Fahrgeschwindigkeit per Integration den Bremsweg ausrechnen und dann 
entsprechend rechtzeitig anfangen zu bremsen.

von Kevin (Gast)


Lesenswert?

Die Bahn soll ja nicht ewig bremsen.
Nur eben nicht so plötzlich, denn dann wackelt sie am Seil immer.

Eine Radumdrehung sind ca 10cm. Das sollte (gefühlt) als Bremsstrecke 
reichen.
Wie sage ich ihr, dass sie in der letzten Umdrehung von PWM 100% zu PWM 
0% verlangsamen soll?

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Wenn Dein Servo nicht zu 100% zum Getriebemotor rückgebaut wurde, 
könntest Du mit der Servo-Ansteuerung die Geschwindigkeit einstellen.
Also, wenn Du das im Servo enthaltene Poti entfernt und durch zwei 
Widerstände fest auf 'Mittelstellung' ersetzt hast und den mechanischen 
Anschlag auf der Welle weg ist, kannst Du über ein Signal 1ms...2ms den 
Motor von schnell links über Stop (1,5ms) nach schnell rechts (2ms) 
fahren lassen.

Die Stop-Position muß wegen der Toleranz der Widerstände erprobt werden, 
kann sein, daß der Aus-Bereich nicht ganz genau in der Mitte liegt.

MfG

von Wolfgang (Gast)


Lesenswert?

Kevin schrieb:
> Die Bahn soll ja nicht ewig bremsen.

Wolfgang schrieb:
> ... und rechtzeitig vorm Ziel den Motor zunehmend langsamer laufen lassen.

Dann setze für "rechtzeitig" einfach "während der letzten Umdrehung"

von Volle22 (Gast)


Lesenswert?

Kevin schrieb:
> oszi40 schrieb:
>> 1.Dazu sollte man den Motor gut kennen.
>
> Wir wurden einander vorgestellt und mögen uns.
> Sein Name ist: MR995

Da frag ihn mal wie er es am liebsten hat
Angesteuert zu werden.

von Cerberus (Gast)


Lesenswert?

Kevin schrieb:
> Wie sage ich ihr, dass sie in der letzten Umdrehung von PWM 100% zu PWM
> 0% verlangsamen soll?

In dem du die Bremsstrecke bestimmst und eine Rampe programmierst.
Wie man das programmiert, findest du aber auch im Netz.
Google: arduino pwm motor rampe

von Netter Tippgeber (Gast)


Lesenswert?

Kevin schrieb:
> Die Bahn soll ja nicht ewig bremsen.
> Nur eben nicht so plötzlich, denn dann wackelt sie am Seil immer.
>
> Eine Radumdrehung sind ca 10cm. Das sollte (gefühlt) als Bremsstrecke
> reichen.
> Wie sage ich ihr, dass sie in der letzten Umdrehung von PWM 100% zu PWM
> 0% verlangsamen soll?

Vermutlich hast Du in Deinem Programm ja schon eine Art Soll-Position, 
da wo die Bahn hinfahren soll, und eine Ist-Position wo die Bahn aktuell 
ist.

Vermutlich setzt sich Deine Ist-Position aus der Anzahl von vollem 
Umdrehungen des Potis sowie dem Aktuellen Drehwinkel des Potis zusammen.

Was Du brauchst, ist eine Einfach Regelung. Genauer reicht ein einfacher 
P-Regler mit zwei "Tricks"; in Pseudo-Code:
1
  IF soll_position_nicht_erreicht() THEN
2
3
    positions_abweichung = soll_position - ist_position;
4
    stellwert = p_faktor * positions_abweichung;
5
6
    pwm = SIGN(stellwert) * LIMIT(min_geschwindigkeit, ABS(stellwert), max_geschwindigkeit);
7
8
  ELSE
9
10
    pwm = 0:
11
12
  END


Die beiden "Tricks" sind die Maximal-Geschwindigkeit und die 
Minimal-Geschwindigkeit.

von Kevin (Gast)


Lesenswert?

Hallo und danke für die vielen Beiträge!

Ich glaube, ich habe verstanden wie ich die Bahn bremsen kann :-)
Ab Dienstag wird programmiert.

Habt ihr bis dahin noch ein Tipp für die Positionierung?
Sind Interrupts der richtige Ansatz?

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Kevin schrieb:
> Habt ihr bis dahin noch ein Tipp für die Positionierung?

In wie fern Positionierung?
Wenn die Bahn nicht umlaufend fahren kann, sondern jeweils oben und 
unten ein Ende erreicht wird, musst Du doch auch nur wissen, wann Du 
oben bzw. unten angekommen bist.
Das sollte sich berechnen, spätestens mitzählen lassen.
In der 2 Minuten danach aufgebrannten Programm-Version wäre dann die 
maximale Fahrstrecke bekannt und man könnte auch eine Zwischen-Position 
anfahren (kA wofür ... Insassen per Bungy-Seil oberhalb der 
Teufelsschlucht raustreten?).

Wenn der µC sonst Nichts zu tun hat, dann Der auch pennen und sich 'alle 
Nase lang' durch einen Sensor aufwecken lassen, die gefahrene Strecke 
mitzählen, schauen, ob was gemacht werden muß (PWM umstellen) und wieder 
ins Bett.
Das geht sehr gut per Interrupt, beim Arduino bin ich aber der Falsche 
und bei meinen ATtinys wohl auch nur als Noob unterwegs ;)

MfG

von Wolfgang (Gast)


Lesenswert?

Kevin schrieb:
> Habt ihr bis dahin noch ein Tipp für die Positionierung?

Bei Berg- und Talstation jeweils ein oder zwei Lichtschranken - die 
erste markiert den Anfang der Bremsstrecke und optional eine zweite kann 
jeweis die genaue Halteposition markieren.

von Chr. M. (snowfly)


Lesenswert?

Hast du auch in Betracht gezogen einen Schrittmotor zu benutzen?
http://www.ebay.de/itm/5V-12V-ULN2003-Step-Motor-4-Phasen-Schrittmotor-Treiberplatine-Modul-fur-Arduino-/272494183074?var=&hash=item3f71eb42a2:m:mSMlPkAM-c5ZlD9LfI8mraQ

Da gibt es dann auch librarys denen du einfach sagen kannst
wie schnell, wohin und wie schnell bremsen.

von Wolfgang (Gast)


Lesenswert?

Chr. M. schrieb:
> Da gibt es dann auch librarys denen du einfach sagen kannst
> wie schnell, wohin und wie schnell bremsen.

Zumindest einen Referenzpunkt auf der Fahrtrecke braucht man trotzdem.

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.