Arduino Pro Mini an Servo-Motor mit Endschalter

Hallo an alle.

Ich versuche einmal hier im Forum mein glück.
Kann mir vielleicht einer von euch ein kleines Programm für den Arduino Pro Mini schreiben.
Ich habe mich hier schon mit der Suche durchgearbeitete aber nichts gefunden was mir weiter hilft.

Meine Voraussetzungen.
Sender und Empfänger Modellfernsteuerung.
Arduino Pro Mini
Ein umgebautes Servo (Motor vom Poti mechanisch getrennt und das Poti auf Mitte gebracht) so das der Motor bei Empfänger Impuls von 1500 nicht mehr läuft.
Zwei Endschalter (Microschalter). Die Endschalter haben 3 Anschlüsse.
Mit diesem umgebauten Servo möchte ich eine Gewinde Platte mit Hilfe einer Gewindespindel
zwischen den zwei Endschaltern verfahren. Der Motor soll bei Erreichen des Endschalters stehen
bleiben und dann nur mit dem zweiten Signal in die Gegenrichtung zum andern Endschalter fahren.

Geschaltet wird mit einem 2 Stufenschalter am Sender.
Stufe 1 = Impuls 950 und Stufe 2 = Impuls 2050
Und als Start Voraussetzung dürfte der Motor beim Anlegen der Spannung (Einschalten)
nicht einfach losfahren.
Vielen Dank im Vorraus.
Joachim

Es gibt genügend Beispiele im Web, die man dann an die eigenen Bedürfnisse anpassen kann.

Beispiel hier: Nr.13 Servo ansteuern – Funduino – Kits und Anleitungen für Arduino

Super!!!! :slight_smile:

Darauf bin ich noch gar nicht gekommen.

Vielen Dank!!! :slight_smile:

Ich hoffe dir wird auch einmal so kompetent geholfen. >:(

Ja, sehr gerne...

Nur

Kann mir vielleicht einer von euch ein kleines Programm für den Arduino Pro Mini schreiben.

Ein wenig Eigeninitiative sollte schon vorhanden sein. Wenn vorhandener Code nicht funktioniert, dann können wir sicher weiter helfen.

Die Fragestellung erinnert mich an ein anderes Thema http://forum.arduino.cc/index.php?topic=329992.msg2277033#msg2277033, möglicherweise gibt es da was zum Abschauen.

Hallo

@agmue
Danke! Diese Seite habe ich schon gefunden.
Nur funktionier das Programm bei mir nicht, auch weiss ich nicht
warum der eingang des Schaltkanals auf zwei Eingänge gelegt wurde.
Ein schaltkanal 1-0-2 hat nur einen Signalausgang am Empfänger.

So hier habe ich ein Programm gefunden was genau das machen soll was
ich brauche. Leider habe ich auch hier meine Probleme.

Kann vielleicht mal einer von euch hier rüber schauen und mir eventuell
weiterhelfen.
Problem ist das ich nur eine Endschalter zum laufen bekomme.
Sobald ich mit den Schaltkanal den Motor umpole läuft das Servo endlos
weiter ohne auf den Endschalter zu reagieren.

Vielleicht habe ich auch nur die Endschalter falsch angeschlossen.
Aber auf dem Bild ist für mich nicht ersichtlich welcher Anschluss an den Endschalter geht.
Am Endschalter sind COM__NO__NC.

Hier ist die Seite die ich meine: http://diyrc.co.uk/3d-printed-inspire-clone/inspire-clone-electronics/

Danke und Gruß
Joachim

die COM werden an D4 und D5 angeschlossen die beiden NC werden an GND und die beiden NO werden an +5V angeschlossen

Hallo

Das habe ich jetzt probiert.

Ich habe alle Varianten ausprobiert.

Umgelötet und es funktionier noch immer nicht.

Der Endschalter an Pin4 da reagiert das Programm nicht drauf.

Danke.

Gruß Joachim

was passiert wenn du den Endschalter an D4 weg läßt und während des Betriebes den Pin D4 auf +5V legst?

Hallo

Folgender Ablauf.

#1 Anschluss Endschalter an Pin4 und Endschalter an Pin5.

Einschalten. Sendersignal > 1500ms Motor läuft richtung Endschalter Pin5

erreicht Endschalter Motor bleibt stehen.

Sendersignal < 1500ms Motor läuft richtung Endschalter Pin4

erreicht Endschalter Motor bleibt nicht stehen (keine Reaktion)

#2 Anschluss Endschalter an Pin5 angeschlossen. Endschalter an Pin4 nicht angeschlossen.

Einschalten. Sendersignal > 1500ms Motor läuft richtung Endschalter Pin5

erreicht Endschalter Motor bleibt stehen.

Sendersignal < 1500ms Motor läuft nicht.

#3 das selbe wie #2 nur das Endschalter Pin4 auf +5V direkt angeschlossen ist.

Gruß Joachim

mach es mal wie bei #2 und lege Pin4 auf GND

Es passiert das selbe. Nichts in richtung Endschalter Pin4

Nachtrag: es passiert doch was und zwar läuft der motor weiter über den

Endschalter Pin5 hinaus.

Gruß Joachim

wenn ich dich richtig verstanden habe, läuft er Richtung Endschalter Pin4 wenn Pin 4 nicht beschaltet ist,aber er läuft nicht wenn Pin 4 auf GND oder +5V liegt

Hallo

Danke ardubu

Ich habe den Fehler gefunden.

Ein guter Sender (Fernsteuerung) sende bei 100% ausschlag mit 940ms__1500ms__ 2050ms Signal.

In diesem Programm wurde aber der mittelpunkt bei 1300 gelegt.

Da konnte das Signal mit 940ms nichts ausrichten.

Nocheinmal vielen Dank.

Gruß Joachim

Danke für die Rückmeldung!

Joachim-JG:
... auch weiss ich nicht warum der eingang des Schaltkanals auf zwei Eingänge gelegt wurde.

Es handelt sich um zwei unterschiedliche Ansätze. Du wertest die Länge des Servosignals, das vom Empfänger kommt, mittels Interrupt aus, um mit dem Arduino ein neues Servosignal zu generieren.

Bei dem von mir verlinkten Beispiel erhält der Arduino ein Signal für rechts und eins für links Drehen, so als wenn man zwei Taster hätte. Die Einbindung der Endschalter wäre aber von der Logik vergleichbar. Das gilt auch für die Mittelstellung.

Ich hätte nicht darauf gewettet, aber freue mich, daß Du die Kurve gekriegt hast :slight_smile:

Bist Du offen für Anmerkungen zur Schaltung?

Hallo

@ agmue

Ich bin für alles offen.

Freue mich über jede Anregung oder ver(schlimm)besserung.

Gruß Joachim

Dann ver(schlimm)bessere ich mal. Ich beziehe mich auf die von Dir verlinkte Seite.

  1. Zunächst fallen mir die zwei LEDs ohne Vorwiderstand ins Auge, was ich grundsätzlich für problematisch halte. Ich habe hier im Forum schon gezeigt, daß das funktionieren kann, aber nicht muß.

  2. Die Endschalter haben beim Umschalten einen kurzen undefinierten Zustand, was nicht nötig ist. Wenn man den Eingang mittels INPUT_PULLUP auf HIGH legt und den Schalter als Öffner mit GND verbindet - der dritte Pin bleibt unbeschaltet, hat man auch gleich eine Bruchüberwachung für das Kabel. Die Logik im Programm läßt sich ja leicht anpassen.

  3. Der Stil des Sketches deutet auf mehrere Autoren:

#define PIN1 2
const int msdown = 5;
int led1 = 6;

Zum Lesen finde ich es angenehmer, Konstanten als solche erkennen zu können, also

const int led1 = 6;                    // output pin for LED 1
const int led2 = 7;                    // output pin for LED 2
const int led3 = 8;                    // output pin for LED 3
const int led4 = 9;                    // output pin for LED 4
const int led13 = 13;                   // onboard LED indictor incase no others are attached
  1. Die Grenzwerte für die Microsekunden würde ich gut kommentiert als Konstanten definieren, damit Du auch in ein paar Monaten noch verstehst, was Du gemacht hast.

  2. Serial.begin(115200); wird nirgendwo verwendet.

Wenn Du irgendwas davon umsetzen möchtest, bekommst Du bei Bedarf ausführlichere Erläuterungen. Und ich kenne mindestens zwei Forumsmitglieder, die mich freundlicherweise korrigieren, wenn das Greenhorn Unsinn schreibt. :slight_smile:

Danke agmue für die Unterstützung.

Ich werde einmal versuchen deine Vorschläge umzusetzen.

Gruß Joachim

Hallo

Ich habe die vorschläge von agmue umgesetzt.

Funktioniert einwandfrei.

Die Funktion Serial.begin(115200); habe ich dazu benutzt das Empfänger Signal

zu testzwecken am Serial Monitor anzuzeigen.

Gruß Joachim