Gamecontroller Joystick als Arduino Eingabegerät

Moin,

ich möchte gerne für Sohnemann's Lego Power Functions einen anderen "Sender" bauen.

Dazu habe ich https://www.ebay.de/itm/162816159007 gekauft.
Diesen möchte ich nun zerlegen, einen Arduino nano v3 dort hinein transplantieren und dann noch eine IR Diode für die Übertragung einbauen.
Für das Sketch habe ich schon eine Vorlage gefunden.
Aber fangen wir mal vorne an.
So sieht das Poti des Joysticks aus:


Wie schließe ich die Joysticks an den Arduino nano an?
Ist der Widerstand des Potis dabei völlig egal, oder braucht es vielleicht noch weitere Bauteile?

Liebe Grüße,
Chris

Du legst an die Äußeren Pins +5V und GND an. Nun kannst du an dem Mittleren Pin je nachdem wie wert der Joystick bewegt ist eine Spannung zwischen 0 und 5 V abgreifen, welche du auf einen analogen Eingang von Arduino legst.

Dieses Wer kannst du nun mit
int val = analogRead(1); Analog Pin 1
In die Variable auslesen.

Dieser Wert ist für 0V -> 0
Und für 5V-> 1023

Zb 2,5V -> 1011

Mit diesem Wert kannst du nun weiter arbeiten.

Falls du die Spannungsversorgung des Putis tauscht, ist der Wert für die Gleiche Stellung umgedreht.

Ratiometrisch auswerten.

Keine zusätzlichen Bauteile nötig.

z.B.
Gelb an 5v
Rot an einen A Pin
Weiß an GND

Und das ganz 2 mal (x+Y)

(Farben, ohne Gewähr)

Okay, soweit ist mir das jetzt klar.
Vielen Dank!

Nun habe ich ja schon an die drei Pins Kabel angelötet und das inzwischen auch mal mit einem Multimeter durchgemessen.
Da kommen aber komische Werte bei raus.
Kann das daran liegen, dass die Potis noch mit der alten Originalschaltung verbunden sind?
Dann müsste ich wohl einfach nur die alten Leiterbahnen auftrennen, oder?

Lieben Gruß,
Chris

Übrigens..
Ich habe mir letztens einen gebrauchten Motor für mein Motorrad gekauft.
Aber irgendwie bekomme ich den nicht eingebaut.
Ich vermute, dass das daran liegt, dass an dem angebrauchten Motor noch Räder und Tacho dran hängen.

Übrigens..
Ich habe mir letztens einen gerauchten Motor für mein Motorrad gekauft.
Aber irgendwie bekomme ich den nicht eingebaut.
Ich vermute, das das daran liegt, dass an den angebrauchten Motor noch Räder und Tacho dran hängen.

Okay, dachte ich mir ja schon. Wollte mich nur nochmal rückversichern bevor ich die Platine zerstöre :slight_smile:
Also, auf ans Werk.

Lieben Gruß,
Chris

themanfrommoon:
Ist der Widerstand des Potis dabei völlig egal ...

Nein, daher würde ich den mal messen (ohne Schaltung dran :slight_smile: ). Bei einem zu kleinen Widerstand fließt zu viel Strom, bei einem zu großen mißt der Arduino Mist. Irgendwas zwischen 500 und 10000 Ohm dürfte passen.

So, nun komme ich endlich mal bei diesem Thema weiter.
Momentan rätsel ich noch ein wenig.
In dem Gamecontroller sind 2 Joysticks mit jeweils 2 Potis drin.
Allerdings komme ich mit dem Spannungsteiler nicht ganz klar.
Ich habe auf die beiden äußeren Anschlüsse 5V und GND gelegt und am mittleren Anschluss die Spannung gemessen.
In Mittelstellung haut das hin, ungefähr 2,5V
Wenn ich dann den Joystick bewege verstehe ich das verhalten noch nicht wirklich.
Zwar ändert sich der Wert aber nicht konstant über den Weg wie ich es erwartet hätte, sondern erst stark und den restlichen Weg dann gar nicht mehr.
Irgendwann hab ich dann die Anschlüsse eines Potis komplett freigelötet und den Widerstand gemessen: 9kOhm.
....und dann fiel der Penny: Die beiden äußeren Anschlüsse der vier Potis sind ja jeweils parallel geschaltet.
Somit ergibt müsste sich ein Widerstand von 9 / 4 = 2,25kOhm über die äußeren Anschlüsse ergeben.
Wenn ich nun ein Poti in Endstellung bringe, dann hat dies entweder 0Ohm oder 9kOhm.

...irgendwie fehlt da noch ein Geistesblitz, jedenfalls kann ich dieses nichtlineare Verhalten noch nicht verstehen?!

Kann mir da vielleicht jemand weiterhelfen?

Danke und lieben Gruß,
Chris

themanfrommoon:
In Mittelstellung haut das hin, ungefähr 2,5V

Das gehört so. Da er in Mitelstellung ist, muss es genau die hälfte sein.

Wenn ich dann den Joystick bewege verstehe ich das verhalten noch nicht wirklich.
Zwar ändert sich der Wert aber nicht konstant über den Weg wie ich es erwartet hätte, sondern erst stark und den restlichen Weg dann gar nicht mehr...

Das Bild im ersten Post: Diese Dinger haben 2 Potis (x-Ache, y-Achse) und einen Taster. Der Stick wird nach unten (y-Achse) bewegt. Aber der Poti, an dem die Verbindungen gelötet sind ist für links/rechts, das sieht man schön am Foto, der Poti bleibt gerade.

Also wenn Du den Stick ganz nach links haltest, musst du über analogRead() '0' haben bzw. 0 Volt, ganz rechts: '1023' bzw. 5 Volt.

lg dony
Nachtrag: Also das mit den 9/4 ist IMHO blödsinn. Du hast zwei (einen pro Achse) 10k Ohm Potis, die sind Perfekt.
Nachtrag2: Willst Du den Stick in alle Richtungen bewegen? Dazu muss ich gleich dazu sagen, Vorwärts, Rückwärts, Links, Rechts funktioniert nicht einmal auf der Play Station. Das hat den Grund wenn man den Stick nach oben-links drückt, kommt kein 'Vollgas' beim Arduino (o. Play Station) an.

Also wenn Du den Stick ganz nach links haltest, musst du über analogRead() '0' haben bzw. 0 Volt, ganz rechts: '1023' bzw. 5 Volt.

Ja, soweit richtig!

Das Poti macht ungefähr +/-35° Weg
Nun wundert mit, dass bei +20° schon 5V anstehen und bei -20° bereits 0V anstehen.
Von 20° auf 35° passiert gar nichts mehr.

das kann doch nicht normal sein.
Wo ist der Fehler?

Also es schaut so wie auf den Foto aus? Entkoppelt vom Rest?
Das in der mitte (am Foto: rot) Kabel an A0?
Das gelbe an 5V und das schwarze an GND.

Dann müßte sich der Wert kontinuierlich ändern, aber nur wenn man den Stick von Links nach Rechts bewegt.

Wie schaut das bei Dir aus?

lg dony
Nachtrag: Wenn das nicht der fall ist, kontrolliere nochmal die Lötstellen. Was sagt das Multimeter?

Ich hab ein Multimeter da dran, mit dem ich entweder die Spannung oder den Widerstand messe.
Den mittleren Anschluss habe ich freigelötet, der hat keinen Kontakt mehr zum Rest.
Die beiden äußeren Anschlüsse sind noch mit den vier anderen Potis verbunden. (Es sollen ja später wieder 4 zum Einsatz kommen, so wie im original Gamepad)

Ich Blick da grad nicht durch.
Wir reden aber im Moment von einem Analog Stick?
Ein Analog Stick hat 2 Potis, einen pro Achse.
Ein Poti hat wie am Foto 3 Anschlüße, der mittlere ist der ‘Ausgang’ besser: Spannungsteiler.

Wenn das bei Dir so wie am Foto ausschaut, dann schau mal welcher Poti sich wie bewegt wenn Du den Stick bewegst. Vielleicht hat sich ein Poti von der Mechanik gelöst, den kann man wieder reindrücken, dazu musst Du aber die Plastik Kappe runter geben.

lg dony
Nachtrag: Ein Gamecontroller hat meißt zwei Analog Sticks, also 4 Potis und ja die sind Parallel geschaltet. Das ändert aber nichts am Wert. Hier gibts das als Breakout.

Ich erkläre es nochmal:

Ich habe ein Gamepad gekauft, das ich umbauen möchte, um mit den 2 Joysticks = 4 Potis analoge Eingänge an einem Arduino nano anzusteuern.

Nu fange ich an mir darüber Gedanken zu machen wie das geht.

Allgemein geht das in dem man auf die äußeren Anschlüsse 5V und GND legt und den Mittelabgriff ausliest.
In der einen Endstellung geht die Spannung dann proportional zur Bewegung auf 0V runter, in der anderen Endstellung proportional zur Bewegung auf 5V hoch.
Soweit die Theorie.

Nun zur Praxis:
In dem Gamecontroller sind 4 Potis drin.
Jedes einzelne hat 9 kOhm zwischen den äußeren Anschlüssen.
Aber es sind ja vier Potis auf die Platine gelötet, bei denen jeweils alle linken und alle rechten Anschlüsse verbunden sind. Logisch, muss ja jedes mit 5V und GND versorgt werden.
Nebenbeibemerkt: (vielleicht hat das irgendeine Relevanz, weiss ich nicht) haben wir jetzt eine Parallelschaltung von 4x 9kOhm, macht einen Gesamtwiderstand von 9/4=2,25kOhm von 5V nach GND

Nun verhält sich das ganze aber nicht mehr so, wie ich es erwarte.
Ich dachte es ändert sich nichts.
Ich dachte die Spannung ist immer noch proportional zur Bewegung.
Stattdessen ist es so:
Das Poti macht ungefähr +/-35° Weg
Nun wundert mit, dass bei +20° schon 5V anstehen und bei -20° bereits 0V anstehen.
Von 20° auf 35° passiert gar nichts mehr.

Das kann doch nicht sein, oder?

Lieben Gruß,
Chris

Deine Theorie ist soweit richtig und auch Praktisch ist alles was Du es sagst richtig, außer:

themanfrommoon:
Nebenbeibemerkt: (vielleicht hat das irgendeine Relevanz, weiss ich nicht) haben wir jetzt eine Parallelschaltung von 4x 9kOhm, macht einen Gesamtwiderstand von 9/4=2,25kOhm von 5V nach GND

Nein, nein… es gibt hier keine Parallelschaltung. Es gibt 4 Spannungsteiler die je mit 5 Volt gespeißt werden. (siehe Anhang)

Ich hab den Poti kurz gegoogelt, soll ein 10k sein, aber das macht keinen Unterschied, dein beide Werte sind vollkommen in Ordnung.

Aber das bringt uns alles nicht weiter. Analog Sticks, sind nicht sehr genau aber dieses Verhalten. :confused:
Wenn Du alles so gemacht hast wie gesagt, dann sollte es funktionieren.
Schau nochmal ob alle Potis fest am Stick sitzen, also einfach den Poti gegen den Stick drücken. (Du siehst aber auch ob sich der Poti bewegt wenn Du am Stick herumdrehst.

Ich weiß nicht ob die 5 Volt einfluß auf die restliche Gamecontroller Schaltung haben, ich würde alles entkoppeln, wenn Du den Game Controller nur für das Arduino verwendest, kannst du auf der Platine die Leiterbahn wegkratzen.

Aber was meinst Du mit Grad, Winkel, °. Da Blick ich nicht ganz durch. Ein Analog Stick kann man zwar im Kreis bewegen, sollte dies aber beim >damit lernen< nicht machen. Da, wie bereits erwähnt, so ein Analog Stick eine x- und y-Achse hat, deshalb für den ersten Test nur nach links/rechts bewegen (oder rauf/runter, je nachdem welchen Poti man misst).

lg dony

Ich mach seit über 20 Jahren RC-Modellbau.
In den Sendern sind ebenfalls X/Y Analogsticks verbaut.
Deswegen weiss ich schon sehr genau wie das mechanisch funktioniert.
Die Potis sind nagelneu, mechanisch einwandfrei, da is nichts ausgehakt oder so.

Wenn man nur ein Poti von der Seite betrachtet, so wie auf dem ersten Foto in diesem Post dann meine ich mit der Winkelstellung die Auslenkung aus der Mittelstellung.
Mittelstellung = 0°
linker Anschlag = -35°
rechter Anschlag = +35°

themanfrommoon:
Ich mach seit über 20 Jahren RC-Modellbau...da is nichts ausgehakt oder so.

Woher soll ich wissen, was Du weißt? Du hast ja nicht darauf geantwortet aber wenn Du sagst das alles passt . -> Dann glaub ich Dir das auch. Ich weiß trotzdem nicht wieviel Erfahrung Du mit dieser Art von Analog Sticks hast und so ein Poti lößt sich schneller als man glaubt.

Wenn man nur ein Poti von der Seite betrachtet, so wie auf dem ersten Foto in diesem Post dann meine ich mit der Winkelstellung die Auslenkung aus der Mittelstellung.
Mittelstellung = 0°
linker Anschlag = -35°
rechter Anschlag = +35°

OK, jetzt verstehe ich was Du damit meinst.
Also sind +/- 20° ca. die Mitte der Mitte.

Sehr eigenartiges Verhalten des Poti. Die Spannung am Poti wird sich doch nicht ändern?
Und ausser komplett entkoppeln fällt mir leider nichts mehr ein aber ich bin hier auch nicht der einzige.
Aber Du kannst ja mal Dein Test Sketch zeigen.

lg dony
edit

Aber Du kannst ja mal Dein Test Sketch zeigen.

Das Testsketch vom Netzteil oder vom Multimeter? :wink:

Ich hab mir mal die Mühe gemacht das in Fritzing aufzumalen, wie ich mir das fertig vorstelle:
Gamecontroller Steckbrett.PNG
Gamecontroller Schaltplan.PNG

Zwischen 5V und GND sind doch jetzt 9kOhm / 4 = 2,25kOhm, richtig?

Also Grundsätzlich alles richtig, aber ich bin kein Profi. Vielleicht haben andere User Einwände?

Schließe mal einen Analog Stick an das Arduino an. Hier gleich ein minimum Test Sketch.

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.print("X: ");
  Serial.print(analogRead(A0));
  Serial.print(" Y: ");
  Serial.print(analogRead(A1));

  Serial.println();
}

themanfrommoon:
Zwischen 5V und GND sind doch jetzt 9kOhm / 4 = 2,25kOhm, richtig?

Paralle Widerstände berrechnet man so:
Rges = 1/R1 + 1/R2 + 1/R3 + 1/R4
Rges liegt zwischen 5V und GND, Ja. Aber wie gesagt ich bin kein Profi, das können andere sicher besser erklären.

Ich kann Dir nur sagen, das ich selber diese Analog Sticks habe und das die bei mir so funktionieren wie in Deiner Fritzing Zeichnung. Allerdings verwende ich für 2 Achsen auch lieber 2 Sticks (kommt aber auch darauf an für was ich die brauche).

lg dony
PS: Ich bin erst morgen wieder online, gn8 :wink: