Schiebepotentiometer an Arduino anschließen

Hallo! :slightly_smiling_face:
Ich bin absoluter Neuling was das Thema Arduino angeht und setze mich gerade damit auseinander.

Nun möchte ich ein Schiebepotentiometer an mein Arduino Motor Shield anschließen. Das ich dafür "GND", "5V" und einen analogen Input brauche, habe ich schon herausgefunden.
Allerdings finde ich im Internet nur Beispiele mit einem Potentiometer welches nur drei Beinchen hat.
Mein ALPS Schiebepotentiometer hat auf der einen Seite vier Beinchen und auf der anderen Seite zwei. Ich habe also gerade keine Ahnung wie ich das an mein Motor Shield angeschlossen bekomme um die Daten auszulesen.

Später muss ich über das Potentiometer dann noch einen Aktor steuern und den momentanen Druck auslesen - aber das ist ein anderes Thema :sweat_smile:

Kann mir vielleicht jemand helfen?

Das ist mein Potentiometer: https://cdn-reichelt.de/documents/datenblatt/B400/ALPS-RS60112.pdf

Das ist ein Stereo-Poti.

2 der 4 Anschlüsse gehören zu einem Kanal - auf der anderen Seite jeweils einer passend dazu.

Vernünftiges DaBla mit Anschlussplan:
https://www.mouser.de/datasheet/2/15/RS__1-1370683.pdf

Da nimmst Du einfach eines der beiden Potentimeter des Stereopotentiometers.
Es ist noch zu schauen welchen Weg/Widerstands-Verlauf das Pontentiometer hat. Es gibt dieses Model als Linear, Logaritmisch und noch 3 Kurven dazwischen Siehe Grafik Seite 99 von https://cdn-reichelt.de/documents/datenblatt/B400/ALPS-RS60112.pdf
Grüße Uwe

Danke euch Beiden!
Mittlerweile habe ich es geschafft, das Poti an meinen Arduino anzuschließen!
Mein Potentiometer ist linear, jedoch werde ich aus den Zahlen die es mir auswirft nicht schlau. Wenn es auf einer Seite ist zeigt es mir den Wert 0 an, schiebe ich es dann ein wenig nach links steigt der Wert nur ganz leicht an. In der Mitte des Potis liegt der Wert bei 3 und kurz bevor es ganz links ist erst bei 20. Auf dem letzten Zentimeter steigt der Wert dann auf ein Maximum von ca. 900.. Der Wert steigt auch sehr stark.

Woran kann das liegen? Laut Verpackung habe ich einen linearen Schiebepoti, habe ich doch irgendetwas falsch angeschlossen?

Das kann ich Dir nicht beantworten, bei den vielen Unbekannten.
Ist es möglich ein Foto vom Aufbau zu machen?
Bitte so, das man sieht welches Kabel wohin geht.
Kabelfarben bitte so wählen, das man nicht raten muss. z.B. rot für +5V , blau für GND und irgendwas anderes für den PIN.

Hast Du das von mir verlinkte DaBla mit der Beschaltung gelesen?
Wie lautet der Typ des guten Teils vollständig? Vielleicht den Typ-Code auf dem Poti vergleichen, um Verwechslungen auszuschliessen...

Rot ist für 5V und geht an den Äußeren der vier Beinchen, Lila ist für A0 und liegt an dem Beinchen daneben und Weiß ist für GND und ist auf dem gegenüberliegenden Beinchen.

Ja das Blatt habe ich mir angeschaut!
Auf der Packung steht „RS60112-LIN10K“ - weitere Informationen habe ich dazu leider nicht.
Auf dem Poti selber steht nur „046C-10KBx2“.

Hoffe die Informationen helfen!

Zumindest stellen sie sicher, das Du hast, was drauf steht :wink:
10K das B für Liniear die 2 für die Anzahl der Kanäle.
Angeschlossen ist es auch so wie gewollt.
Nu heisst es suchen, wo es klemmt.
Ich bin mit den Dupont-Kabeln auf Kriegsfuss und löte wo es geht - zumindest bei der Perepherie.

Was ist das für ein Modul da oben drauf?

Das ist ein Arduino UNO Nachbau von Joy-It "R3DIP" und oben drauf ist das Motor Shield von Arduino! :slightly_smiling_face:

YES!
An A0 liegt ein Chip-Ausgang dran!

Da ist der LMV358 drauf. Du kannst - laut dem Plan - den Leiterzug mit einem Cuttermesser durchtrennen. Wenn Du die später wieder brauchst, kannst auf die Flächen eine Lötzinnbrücke aufbringen.
Alternativ erstmal ohne shield nur messen, was das poti sonst so macht...

Ok ich muss gestehen, dass ich bei solchen Plänen nicht ganz durchblicke. Also soll ich das Beinchen was vom Motor Shield auf A0 sitzt abschneiden?

Jetzt ist der Wert, wenn der Schieber ganz links ist bei 1023. Allerdings habe ich das Problem jetzt irgendwie anders herum - in der Mitte des Reglers liegt der Wert jetzt bei eta 1016 und auf dem letzten Zentimeter fällt er dann von 995 auf 42. Auf den Wert 0 komme ich nicht...
Also irgendwie hat sich das Problem bisher nur verschoben :neutral_face:

NEIN! - Um Himmels Willen...
Wenn Du das Shield in der Hand hälst, wirst Du vermutlich auf der Unterseite eine Leiterbahn sehen, die von A0 abgeht und irgendwo mit etwas größeren Kontaktflächen aufläuft.

Ok, dann versuche ich es anders, bevor Du Dir das Shield ruinierst.
Las A0 bis A3 links liegen. Die werden auf dem Shield verwendet.

Nochmal von vorn.
Steck das Shield aus und das Poti mit dem lila Kabel auf A5. Schreibe Deinen Sketch so um, das das passt.
Dann solltest auch vernünftige Werte bekommen.

A5 ist laut dem Plan nicht direkt mit irgendwas auf dem Shield behaftet - ausser wohl einem Connector - den kannst (wenn das ohne shield funktioniert!) auch vermutlich weiter nutzen, wenn das Shield sein muss :wink:

Haha sorry, jetzt verstehe ich es dann auch mal! :grinning:

Hat geklappt, habe jetzt vernünftige Werte von 0 bis 1023 - danke! :slightly_smiling_face:

Ich werfe gleich mal eine nächste Frage hinterher, dafür will ich keinen neuen Thread eröffnen!

Als nächstes möchte ich gerne einen Aktor (Moving Magnet) über das Schiebepotentiometer steuern.
Das Schiebepotentiometer ist angeschlossen und die Verbindung zu meinem Aktor steht auch.
Wenn ich das Potentiometer nach rechts verschiebe passiert erst einmal nicht, auf dem letzten Zentimeter bewegt der Aktor sich dann nach unten, ist also ganz unten wenn der Regler ganz rechts ist. Das ist soweit auch richtig, allerdings möchte ich das der Aktor über die gesamte Länge des Potentiometers runter geht - also das immer wenn ich das Poti nach rechts bewege, der Aktor runter geht und nach links dann eben wieder nach oben.

Hoffe mein Problem bzw. mein Vorhaben ist klar geworden :grinning:
Ich hänge mal ein Bild von dem Quellcode an!


int value = 0;
int pwmValue;

void setup() {
  //Setup Channel A
  pinMode(12, OUTPUT);    //Initiates Motor Channel A pin
  pinMode(9, OUTPUT);     //Initiates Brake Channel A pin
  Serial.begin(9600);   //Beginn der seriellen Kommunikation.
}


void loop() {

  value = analogRead(A5);                   // Potiwert für die Geschwindigkeit

  if(value > 255){
  pwmValue = map(value, 0, 1024, 0, 255);     // Da ein PWM Signal zwischen 0 und 1023 liegt muss
                                              // die Range des analogen Wertes auf die des PWM gemappt werden 
  analogWrite(3, pwmValue);
  }


    Serial.println(pwmValue);
 }

Damit ist geklärt, das Du ja nicht erst seit heute dabei bist :wink:

Was soll das mit dem Foto.
In der IDE unter BEARBEITEN - FÜR FORUM KOPIEREN und dann ganz schick einfach an Deine Message pinnen...

Sorry, mein Fehler! Habe es verbessert.

Du fängst erst bei 256 an.
las das if Value komplett weg.
Ich hab dann mal den Kommentar verbessert...

void loop() {

  value = analogRead(A5);                   // Potiwert für die Geschwindigkeit
  pwmValue = map(value, 0, 1024, 0, 255);   // Da ein ANALOG-SIGNAL zwischen 0 und 1023 liegt muss
                                            // die Range des analogen Wertes auf die des PWM gemappt werden 
  analogWrite(3, pwmValue);
  }

Danke fürs verbessern! :slightly_smiling_face:
Ändert allerdings nichts, der Magnet geht weiterhin nur beim letzten Zentimeter des Potis runter und nach links dann wieder sprunghaft hoch.

Dann mal bitte den code komplett.

Vom anderen Ende der Kette betrachtet wäre auch ein Link zu dem Aktor mal spannend.

Läuft der eigentlich sauber mit einem Test-Sketch, wo die PWM-Werte ohne Poti hart kodiert oder berechnet sind?


Gruß Walter


int value = 0;
int pwmValue;

void setup() {
  //Setup Channel A
  pinMode(12, OUTPUT);    //Initiates Motor Channel A pin
  pinMode(9, OUTPUT);     //Initiates Brake Channel A pin
  Serial.begin(9600);   //Beginn der seriellen Kommunikation.
}


void loop() {

  value = analogRead(A5);                   // Potiwert für die Geschwindigkeit
  pwmValue = map(value, 0, 1024, 0, 255);   // Da ein ANALOG-SIGNAL zwischen 0 und 1023 liegt muss
                                            // die Range des analogen Wertes auf die des PWM gemappt werden 
  analogWrite(3, pwmValue);

  Serial.println(pwmValue);
}

Also das ist mein ganzer Code!

Und das ist der Aktor!

Habe bisher einen solchen Test-Sketch noch nicht gefunden um ihn mal auszuprobieren.