muah
10.01.2015, 12:48

+3Arduino steuert PF-Motor

Guten Morgen zusammen,

wie angekündigt hier das erste Ergebnis meines Experiments mit Arduino und Lego.

Ich habe dazu bei fritzing.org mir das Arduino Mega bestellt.

[image]



Hier der Inhalt ausgepackt.

[image]



In dem Handbuch sind einige Grundlagen erklärt, damit kann man etwas spielen und auch verstehen. Wenn es etwas komplexer wird, muss man selber anfangen zu recherchieren. Man braucht eigentlich Erfahrung in Programmierung und Elektrotechnik, sonst wird es relativ schwierig mit der Umsetzung. Programmieren kann ich, für Elektrotechnik habe ich dank meinem Vater zwar etwas Ahnung, den Rest besorge ich mir entweder im Internet oder Frage Thorsten, meinen Kumpel, den Feinelektroniker (wohnt etwas weiter weg, aber per VoiceChat haben wir das gestern gut hinbekommen).

Erstes Ziel:

- Signalisierung des Weichenzustandes durch zwei LEDs
- Ansteuern des Motors
- Processing-LED (soll anzeigen das gerade etwas getan wird und in der Zeit keine weitere Aktion möglich ist)

Im Handbuch gibt es sogar eine Übung zur Herstellung eine Schaltung zweier LEDs, die durch Tastendruck abwechselnd leuchten sollen. Die hat gut geholfen. Eine Ansteuerung für Motoren gibt es dort auch nachzubauen, allerdings war das Beispiel nicht ganz für mich verwendbar. Im Internet habe ich dann das besser passende Beispiel gefunden. Nachdem ich dann auch verstanden hatte wie der IC funktioniert, habe ich gestern sogar relativ schnell die Schaltung herstellen können und musste dann nur noch die beiden Programmteile in ein Gesamtkonzept bringen.

[image]



Wenn der Arduino startet werden die ganzen benötigten Variablen initialisiert und setup-Funktionen aufgerufen. Dann wartet er in einer Schleife (loop) auf was zu tun. Drückt man den Knopf wird ein Status-Wert geändert (derTasterwurdegedrückWert), damit die Folge-Programme wissen das sie etwas tun müssen. Dann kommt der Programmteil der fragt: Weiche==1 ? dann LED1 = aus, LED2 = an, ProcLED = an, Motor Richtung A an für 0,8 Sek., Weiche=0, ProcLED = aus. Fertig. Wenn man dann den Taster noch mal drückt kommt man in die gleiche Abfrage, da Weiche==0 kommt der andere Programmteil zur Reaktion: LED2 = aus, LED1 = an, ProcLED = an, Motor Richtung B an für 0,8 Sek., Weiche=1, ProcLED = aus.

Relativ simpel, da fehlt noch etwas Feintuning und halt mal sauber programmiert und benannt Es gibt auch fertige Boards für Motoransteuerung, da werde ich mal schauen ob es was passendes gibt, Thorsten war mit der rudimentären Lösung nicht ganz zufrieden, da fehlen ihm wohl noch Widerstände etc. damit es auch sauber ist.

Und so sieht es dann aus:



Mit dem Ardunio Mega könnte ich 12 Motoren steuern, danach ist Schluss, weil mehr als 12 PWM Anschlüsse hat er nicht. Für eine Weichensteuerung reicht es gut aus, allerdings werde ich mir Gedanken machen müssen, wie ich entweder mehrere Boards miteinander verbinde oder einzeln die Programmteile arbeiten lassen.

Die nächsten Schritte sind Lichtschranken und Infrarot. Ein Zug fährt durch Lichtschranke und erhält einen IR Befehl zum Stehenbleiben oder zum Beschleunigen, etc.

Ich halte euch auf dem Laufenden, muss erst mal schauen was ich so an Bauteilen noch brauche.

Dennis



Thomas52xxx , Lok24 , flocoto gefällt das


6 vorhergehende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen Beitragsbaum

muah
10.01.2015, 17:16

Als Antwort auf den Beitrag von LuDaCriSoNe

Re: Arduino steuert PF-Motor

Mit dem kompliziert könntest du Recht haben, man muss sich schon etwas mehr mit dem Thema beschäftigen. Mit den Lego Mindstorms Produkte kenne ich mich gar nicht aus, deswegen schwer dazu was zu sagen.
Bei meinem Vorhaben wollte ich in erster Instanz nur eine Teilunterstützung, also Weichen im Schattenbahnhof und Kreuzweiche im Zubringer, alles weitere dann später. Ich habe die Befürchtung wenn ich mich zu lange am Thema Steuerung aufhalte, bleiben die anderen Baustellen geschlossen. Also dann jetzt eine kleinere Lösung und sobald das läuft wieder zum Thema Steuerung.



FlowRian
10.01.2015, 22:12

Als Antwort auf den Beitrag von muah

Re: Arduino steuert PF-Motor

Hi,

ich kann dir nicht viel raten oder sagen, oder irgendwas, aber das gefällt mir.
Interessant, was man alles ausprobieren kann.

Fritzing habe ich auf der MakeMunich letzten November kennengelernt, einer Messe für jegliches Selbermachen, 3d-Drucken, elektrisch basteln etc. Dort wäre deine Weiche (oder wird) sicher gut ankommen als Ausstellungsobjekt ;)

Werde ich auf jeden Fall weiter verfolgen, was du so machst.

Gruß, Florian


[image]


unschuldslamm
11.01.2015, 01:51

Als Antwort auf den Beitrag von muah

Re: Arduino steuert PF-Motor

Ich muss gestehen, dass ich Deine Schaltung doch noch nicht ganz verstanden habe...

Mein erster Gedanke war, Du willst einen Motor zeitgesteuert ansteuern. Da war mein Gedanke:
Transistor um Steuersignal und den Stromkreis vom Moter zu verbinden. Und solange der Motor laufen soll, wird der entsprechende digitale Ausagang gesetzt. Und wenn der Motor nicht mehr laufen soll, schaltest Du das Steuersignal wieder aus... ganz einfache Aufgabe für den digitalen Ausgang.

Du musst ja aber den Richtungswechsel beim Motor noch einbauen. Da weis ich ned was Dein IC macht. Bzw. wie der PF-Motor tickt. Du führst ja auch nur zwei Kabel zum Motor....

Ich habe bisher nur ein bisschen mit Arduino und Motoren gearbeitet und auch schon länger her. Aber ich habe die immer über die servo.h Bibliothek angesteuert und dazu sagt arduino.cc:
"The Servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega.[...]" Also die Ansteuerung funktioniert dann offenbar über ganz normale digitale Ausgänge...
siehe: http://arduino.cc/en/pmwiki.php?n=Reference/Servo


Wenn ich ihn also mit weniger Strom versorge (im Moment ca. 4V) kann ich die Zeit die er laufen muss, feiner justieren,


Das ist aber doch eine Frage, welchen Widerstand Du in den Stromkreis mit der 9V Batterie einbaust, oder?

Danke



bernd-das-brot
11.01.2015, 08:57

Als Antwort auf den Beitrag von muah

Re: Arduino steuert PF-Motor

Hallo,

sind die Motorströme von dir selbst ermittelt? Laut coolbricks.com hat der PF Medium Motor eine Stromaufnahme im Leerlauf von 65mA und einem Blockierstrom von 850mA. Ich hab sie noch nicht nachgemessen, aber die Werte scheinen mir, für die Größe des Motors, plausibel zu sein. 600mA im Leerauf hört sich für mich eher nach einem Defekt an.



muah
11.01.2015, 11:25

Als Antwort auf den Beitrag von unschuldslamm

Re: Arduino steuert PF-Motor

Guten Morgen,

meine Idee ist die folgende:

Ich habe später ein Panel, auf dem die einzelnen Weichen aufgemalt sind. Die Darstellung wird wahrscheinlich in Gruppen erfolgen (z.B. Schattenbahnhof Links, Schattenbahnhof Rechts, Kreuzweiche oben, Güterbahnhof, Hauptbahnhof, etc.). Den Zustand jeder Weiche sollen zwei LEDs anzeigen, z.B. grün = geradeaus, gelb = abbiegen. Jede Weiche bekommt dann noch einen Taster.

Wenn ich dann auf den Taster drücke soll die Weiche umgeschaltet werden. Dazu soll dann auch die LED entsprechend angesteuert werden, so dass man am "Steuerpult" sieht wohin die Weiche führt. Und Während des gesamten Umschaltvorgangs soll eine zusätzliche LED immer leuchten damit man sehen kann, dass eine Aktion ausgeführt werden kann und man deswegen keine weitere Aktion just in diesem Moment ausführen kann. Denn im Moment habe ich noch keine Lösung (programmtechnisch) wie ich den Motor einschalten, dann 0,8 Sek. laufen lassen und wieder abschalten kann, ohne dass das Programm in dieser Zeit wartet. Da werde ich mich noch auf die Suche begeben.

Den Richtungswechsel beim Motor ist kein Problem. Da es sich ja um einen Gleichstrommotor handelt brauch ich nur + und - tauschen und der Motor läuft in die andere Richtung.

digitalWrite(motor1_A,HIGH); // A = HIGH and B = LOW means the motor will turn right
digitalWrite(motor1_B,LOW);

digitalWrite(motor1_A,LOW); // A = LOW and B = HIGH means the motor will turn left
digitalWrite(motor1_B,HIGH);

Da dies kein Servo ist, habe ich das mit der Servo-Bibliothek nicht ausprobiert. Beim Servo wird wohl auch die aktuelle Position zurückgeliefert und ich verstehe den Servo eher als Stellmotor, der nicht durchgehend in eine Richtung drehen kann, sondern nur einen begrenzten Drehbereich hat.

Ja, ich könnte auch zum Motor einen Widerstand einbauen der dann die Strommenge begrenzt, dann könnte ich über den regulären Digital Ausgang gehen.



muah
11.01.2015, 11:42

Als Antwort auf den Beitrag von bernd-das-brot

Re: Arduino steuert PF-Motor

Moin Bernd,

ich habe das eben noch mal nachgemessen, mit Brille (Dieser Punkt im Multimeter ist aber auch sowas von klein). 65mA im Leerlauf und gut 600mA wenn ich den Motor am drehen hindere, bei 9V. Bei 4,3V sind es ca. 43mA und 320mA. Demnach hätte ich auf jeden Fall keine Überlastungsprobleme mit dem IC.

Danke.



Lok24
11.01.2015, 12:27

Als Antwort auf den Beitrag von muah

Editiert von
Lok24
11.01.2015, 12:33

Re: Arduino steuert PF-Motor

Hallo,

Denn im Moment habe ich noch keine Lösung (programmtechnisch) wie ich den Motor einschalten, dann 0,8 Sek. laufen lassen und wieder abschalten kann, ohne dass das Programm in dieser Zeit wartet. Da werde ich mich noch auf die Suche begeben.


Ich kenne die Möglichkeiten des Chips nicht, aber eine schnelle Suche nach "arduino timer" brachte das hier als ersten Treffer, das sollte Dein Problem lösen.

Grüße

Werner



daniel.vergien
11.01.2015, 12:36

Als Antwort auf den Beitrag von muah

Re: Arduino steuert PF-Motor

Moin Dennis,

schöne Sache die Du da machst.


Mit dem Ardunio Mega könnte ich 12 Motoren steuern, danach ist Schluss, weil mehr als 12 PWM Anschlüsse hat er nicht. Für eine Weichensteuerung reicht es gut aus, allerdings werde ich mir Gedanken machen müssen, wie ich entweder mehrere Boards miteinander verbinde oder einzeln die Programmteile arbeiten lassen.


Hier hast Du aber einen kleine Denkfehler: Du kannst 12 Motoren gleichzeitig ansteuern. Die 12 Ausgänge kannst Du ja über "Umschalter" auf auf je X Motoren legen. Die Umschalter steuerst Du dann mit den digitalen Ausgängen, von denen der Mega ja eine ganze Menge hat.

Viel Spaß und berichte bitte Deine Vortschritte

Daniel



unschuldslamm
11.01.2015, 14:20

Als Antwort auf den Beitrag von muah

Re: Arduino steuert PF-Motor

Moin Moin,

so nachdem ich mir gerademal so eine h-bridge-Schaltung (mit nem L293D IC) im Arduino-Project-Book angesehen habe, verstehe ich Deine Schaltung nun - hoffe ich

Du schließt zwei normale digtale Pins an die h-bridge an um den Motor zu steuern und einen pwm-Ausgang für die Geschwindigkeit des Motors? Bzw. wie du sagst für die Spannung bzw. Stromstärke? (was eigentlich?).
So wie ich es hier gerade lese braucht die h-bridge einen Eingang, der sie generell anstellt. Und da schließt Du den pwm-Ausgang an und gibst halt nur 50% der Leistung drauf. Ist das so?

Was mir da einfällt: der PWM-Ausgang ist aber doch nur eine Simulation eines analogen Ausganges, indem sehr schnell zwischen Strom an und aus umgeschaltet wird. Der Motor müsste daher im schnellen Wechsel die volle Leistung bekommen und wieder nichts. Bei einem (analogen) Multimeter pendelt sich dann der Zeiger vermutlich bei 4,5 V ein, aber eigentlich müsste es doch 9-0-9-0... sein, oder?


Bei Deiner Gesamtplanung ist das mit den PWMs aber imho gar nicht das Problem, weil Du pro Weiche einfach eine Menge an Pins verbrauchst, auch durch LEDs und Taster.

Wenn ich es richtig verstehe, willst Du am Ende aber nicht alles miteinander kombinieren. Also etwa: Taster 1 gedrückt und dann schalten Weiche 1,3,7 und 13 um eine bestimmte Strecke zu schalten.
Wenn Du das nicht machst, sondern jede Weiche, Signal oder was noch alles für sich alleine (mit Leds und Taster) bleibt, dann kannst Du ja auch problemlos zwei oder drei Arduino-Boards parallel nutzen!?...

Danke



bernd-das-brot
11.01.2015, 14:49

Als Antwort auf den Beitrag von muah

Re: Arduino steuert PF-Motor

Das Servo liefert keine Positionswerte zurück. Es hält die vorgegebenen Position, so lange es den passenden (PWM)Wert geliefert bekommt, auch wenn es von außen belastet wird. Ist das Signal weg, aber das Servo wird noch mit Spannung versorgt, kommt es in einen undefinierten Zustand. Was dann passiert, kommt aufs Servo an:

Manche haben ein Failsave eingebaut und fahren dann in eine vorgegebene, oder programmierbare Position, das ist aber eine Minderheit und eigentlich nur bei hochpreisigen Digitalservos zu finden.

Bei den meisten 08/15 Modellen passiert meist nichts, sie lassen sich dann aber bei Belastung verstellen, da sie ja nicht mehr wissen, welche Position sie halten sollen. Es gibt aber auch welche, die dann unkontrolliert herum zucken oder einfach in eine Endposition fahren. Bei diesen wird der Motor aber so stark belastet, daß er das nicht sehr lange mitmachen wird.



14 nachfolgende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen

Gesamter Thread: