Schiebepotentiometer mit Arduino

Hallo Community,

ich habe folgendes Problem und benötige eure Expertise.
Hardware:
Arduino Mega 2560
Linear Schiebepotentiometer

Ich lese mir den aktuellen Wert über AnalogRead aus. Leider springt der Wert willkürlich umher.
Die Sprünge sind eigentlich minimal aber die Werte werden über SerialPort an Windows gesendet und der Lautstärkeregler in Windows zittert. Dies möchte ich vermeiden.
Hab keine Idee oder Ansätze mehr...

Könnte es am Poti selbst liegen? Keine konstante Stromzufuhr vom Arduino (5V)?

Vielen Dank für eure Hilfe.
Grüße,
Manuel

Da würde ich mal eine Mittelwertbildung oder einen Tiefpass probieren oder das Poti mal mit Kontaktspray behandeln. Ganz ruhig wirst Du den Wert ohne Bearbeitung nicht bekommen, da +- 1 Digit die Mindestschwankung ist.

Gruß Tommy

1 Like

Schaltplan geheim, Programm geheim!
So kann man keine Diagnose machen.

Multimeter!

Erst Messen, bevor andere Maßnahmen (z.B Chemie) getroffen werden.

Poti kaputt oder falsch verkabelt oder falsch im Code.

Lässt sich von uns nicht prüfen, da du weder einen Schaltplan, noch Bilder deines Aufbaus noch Code gepostet hast.

Na da würde ich erstmal die Finger von lassen. Das hilft nur Kurzzeitig. Den Rest deiner Aussage stimme ich zu 100% zu.

Auch ich will mehr Infos. Wie hast Du das Potentiometer angeschlossen?

Grüße Uwe

Poti ist folgendermaßen angeschlossen:
A0 --> DTB
5V --> VCC
GND --> GND

Code:

const byte NUM_SLIDERS = 2;
const int analogInputs[NUM_SLIDERS] = { A0, A1 };
int analogSliderValues[NUM_SLIDERS];

void updateSliderValues() {
  for (int i = 0; i < NUM_SLIDERS; i++) {
    analogSliderValues[i] = analogRead(analogInputs[i]);
    analogSliderValues[i] = map(analogSliderValues[i], 0, 1023, 0, 100);
  }
}

void sendSliderValues() {
  String builtString = String("");

  for (int i = 0; i < NUM_SLIDERS; i++) {
    builtString += String((int)analogSliderValues[i]);

    if (i < NUM_SLIDERS - 1) {
      builtString += String("|");
    }
  }

  Serial.println(builtString);
}

void setup() {
  Serial.begin(9600);

 for (int i = 0; i < NUM_SLIDERS; i++) {
   pinMode(analogInputs[i], INPUT);
 }
}

void loop() {
  updateSliderValues();
  sendSliderValues();

 delay(20);
}

Code bis zur Untestbarkeit verstümmelt.

Sieht ok aus.
Hast du das mit einem Multimeter überprüft?

schaut nicht so schlecht aus,

Poti - Wokwi ESP32, STM32, Arduino Simulator

zeig mal Echtbilder von deiner Verkabelung.

Hab den Code angepasst. Sorry!

Nein, habe ich noch nicht getestet mit Multimeter. Habe nachdem ich den Post gemacht habe, noch ein mapping eingefügt. Jetzt springt er tatsächlich nur noch um 1 herum. Bei 0 springt er garnicht mehr.
Denke jetzt kommt die Mittelwertbildung in betracht.

Hast du das mit einem Multimeter überprüft?

Hab es jetzt überprüft. Der Slider ist komplett offen und schwankt zwischen 4.90V - 4.95V hin und her.

Nimm Dir @Tommy56 seinen Rat zu Herzen :wink: Ein ca. 4700 pF vom Slyder an GND sollte Wunder bewirken. Im Prog dann noch glätten einbauen und gut is.

Ich meinte eher einen Tiefpass in Software :wink:

Gruß Tommy

Ich bin Hardware Fetischist :slight_smile: ... glätten einbauen wäre ja deine Software.

Ich mehr Software :wink:
Ich meine sowas:

// newVal = neuer Wert, FF Filterfaktor - über wie viele Werte
// Tiefpass
float filtern(float newVal, uint16_t FF){
static float filtVal = 0.0;
static uint16_t count = 0;
  // damit am Anfang der Wert nahe am Messwert ist
  if (count < FF) {
    FF = count++;
  }
  filtVal= ((filtVal * FF) + newVal) / (FF +1);
  return filtVal;	
}

Gruß Tommy

1 Like

Ich danke euch! Ich versuch mal mein Glück.

Grüße,
Manuel

FF 1 ist bissel knapp. 3 hat sich bei meiner Hardware als gut herrausgestellt.
So war das ja bei meinem Testaufbau zu dem 98 Möglichkeiten MIDI Controler.

Den muss man je nach Anwendung optimieren. Für manche Signale ist auch 10 ein brauchbarer Wert, wenn sie ziemlich zappeln, aber die Tendenz eindeutig ist und die Relation zwischen Messfrequenz und Reaktionszeit passt.

Gruß Tommy

Geil, das zittern ist weg, dank Tiefpassfilter.
Muchas Gracias!

Mich würde dennoch interessieren wie die Verkabelung mit einem 4700nP aussehen würde.