Zum Inhalt springen
Potentiometer auslesen mit Arduino/ESP

Potentiometer auslesen mit Arduino/ESP

In diesem Tutorial liest du den Wert eines Potentiometers (Poti) präzise aus. Du bekommst Schaltung, Pinouts und kompakten Beispielcode für Arduino UNO, ESP32 und ESP8266/D1 Mini – inklusive Spannungsberechnung und Tipps gegen Rauschen.

Beispiele für die Anwendung

  • Helligkeitsregler für LED-Streifen
  • Menü-Navigation per Drehknopf
  • Sollwertvorgabe für Motor-/PID-Regelung
  • Analoges Throttle für RC/Robotik
  • Live-Tuning von Filtern/Sensoroffsets


Ein Potentiometer ist ein verstellbarer Spannungsteiler. Du legst an die äußeren Anschlüsse VCC und GND, der Schleifer (Wiper) liefert eine Zwischen­spannung proportional zur Stellung. Diese Spannung misst du am Analog-Eingang (ADC) deines Boards.

Typische Werte sind 10 kΩ (linear). Der ADC liefert Rohwerte (UNO: 0–1023, ESP32: 0–4095, ESP8266: 0–1023). Aus Rohwert und Referenzspannung berechnest du die tatsächliche Spannung. Stolpersteine: falsche Betriebsspannung (5 V vs. 3,3 V), nicht gemeinsame Masse, ADC-Rauschen und beim ESP8266 die abweichende A0-Spannungsgrenze.


Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


Teileliste (Bill of Materials)

  • Potentiometer, 10 kΩ linear (B10K)
  • Breadboard + Jumperkabel (M/M)
  • Optional: 100 nF Keramikkondensator zwischen Wiper und GND (Glättung)
  • Arduino UNO oder ESP32 DevKit oder ESP8266 Wemos D1 Mini
  • USB-Kabel zum Programmieren

Pinout & Verdrahtung

Hinweise:

  • Arduino UNO arbeitet mit 5 V. ESP32/ESP8266 arbeiten mit 3,3 V.
  • Kein Level-Shifter nötig, aber niemals 5 V an ADC-Pins der ESP-Boards anlegen.
  • ESP8266: Der blanke Chip-ADC (Analog to Digital Converter) erwartet 0–1,0 V. Dev-Boards (z. B. NodeMCU oder D1 Mini) haben einen Teiler, sodass A0 = 0–3,2 V verträgt.

Arduino UNO

Potentiometer Arduino Schaltplan
SignalSensor/Modul-PinBoard-PinHinweis
+VAußenanschluss5VVersorgung vom UNO
GNDAußenanschlussGNDGemeinsame Masse
WiperMittelanschlussA0Optional 100 nF nach GND

ESP32 (Beispiel: GPIO34, ADC1_CH6)

Potentiometer ESP32 Schaltplan
SignalSensor/Modul-PinBoard-PinHinweis
+VAußenanschluss3V3Max. 3,3 V
GNDAußenanschlussGNDGemeinsame Masse
WiperMittelanschlussGPIO34Input-only, stabiler ADC1

ESP8266 / D1 Mini

Potentiometer D1 Mini Schaltplan
Potentiometer NodeMCU Schaltplan
SignalSensor/Modul-PinBoard-PinHinweis
+VAußenanschluss3V3Max. 3,3 V
GNDAußenanschlussGNDGemeinsame Masse
WiperMittelanschlussA0D1 Mini: 0–3,2 V dank Teiler

Bibliotheken & Installation:

  • Keine zusätzliche Library erforderlich – Nutzung der Kern-Funktionen (analogRead)
  • Board-Pakete im Boardverwalter:
    • esp32 by Espressif Systems
    • ESP8266 by ESP8266 Community

Verwendung mit Arduino (UNO/Nano):

Kurz: Wiper an A0, 5 V Versorgung. Der ADC liefert 10 Bit (0–1023).

// Potentiometer auslesen – Arduino UNO (A0) //
const int PIN_POT = A0;                      // Analog-Pin für den Schleifer //
const float VREF = 5.0;                      // Referenz am UNO (AVcc ≈ 5,0 V) //
void setup() {                               // Setup beginnt //
  Serial.begin(115200);                      // Seriellen Monitor starten //
}                                            // Setup endet //
void loop() {                                // Loop beginnt //
  int raw = analogRead(PIN_POT);             // Rohwert 0–1023 lesen //
  float volt = raw * VREF / 1023.0;          // Spannung berechnen //
  int percent = (raw * 100) / 1023;          // Prozentwert 0–100 % //
  Serial.print("raw="); Serial.print(raw);   // Rohwert ausgeben //
  Serial.print("  U="); Serial.print(volt,2);// Spannung mit 2 Nachkommastellen //
  Serial.print(" V  ");                      // Einheit //
  Serial.print(percent); Serial.println(" %");// Prozent ausgeben //
  delay(200);                                // Kurze Pause zur Beruhigung //
}                                            // Loop endet //

Hinweis: Öffne den Seriellen Monitor mit 115200 Baud.

Verwendung mit ESP32:

Nutze ADC1-Pins wie GPIO34/35/32/33/36/39; vermeide Boot-Pins (z. B. 0, 2, 12, 15) für kritische Signale.

// Potentiometer auslesen – ESP32 (GPIO34) //
const int PIN_POT = 34;                      // ADC1 Kanal, input-only //
const float VREF = 3.3;                      // Nominal 3,3 V an 3V3 //
void setup() {                               // Setup beginnt //
  Serial.begin(115200);                      // Seriellen Monitor starten //
  analogReadResolution(12);                  // 12 Bit: 0–4095 //
}                                            // Setup endet //
void loop() {                                // Loop beginnt //
  int raw = analogRead(PIN_POT);             // Rohwert 0–4095 lesen //
  float volt = raw * VREF / 4095.0;          // Spannung berechnen //
  int percent = (raw * 100) / 4095;          // Prozentwert 0–100 % //
  Serial.print("raw="); Serial.print(raw);   // Rohwert ausgeben //
  Serial.print("  U="); Serial.print(volt,2);// Spannung mit 2 Nachkommastellen //
  Serial.print(" V  ");                      // Einheit //
  Serial.print(percent); Serial.println(" %");// Prozent ausgeben //
  delay(200);                                // Kurze Pause //
}                                            // Loop endet //

Verwendung mit ESP8266/NodeMCU/D1 Mini:

D-Labels beachten: A0 ist der einzige ADC. Auf D1 Mini ist A0 durch einen Teiler auf ca. 0–3,2 V skaliert (Rohwerte 0–1023).

// Potentiometer auslesen – ESP8266 (D1 Mini A0) //
const int PIN_POT = A0;                      // Einziger ADC-Pin //
const float VREF = 3.2;                      // D1 Mini: A0 ≈ 0–3,2 V durch Teiler //
void setup() {                               // Setup beginnt //
  Serial.begin(115200);                      // Seriellen Monitor starten //
}                                            // Setup endet //
void loop() {                                // Loop beginnt //
  int raw = analogRead(PIN_POT);             // Rohwert 0–1023 lesen //
  float volt = raw * VREF / 1023.0;          // Spannung berechnen //
  int percent = (raw * 100) / 1023;          // Prozentwert 0–100 % //
  Serial.print("raw="); Serial.print(raw);   // Rohwert ausgeben //
  Serial.print("  U="); Serial.print(volt,2);// Spannung mit 2 Nachkommastellen //
  Serial.print(" V  ");                      // Einheit //
  Serial.print(percent); Serial.println(" %");// Prozent ausgeben //
  delay(200);                                // Kurze Pause //
}                                            // Loop endet //

Troubleshooting:

  • Messwert 0 oder 1023/4095 fest → Wiper falsch verkabelt → Mittelanschluss an ADC prüfen.
  • Werte springen stark → Störungen/Leitungsrauschen → 100 nF vom Wiper nach GND + delay(200) oder Mittelwertbildung.
  • Invertierter Verlauf → Außenanschlüsse vertauscht → +V und GND am Poti tauschen.
  • ESP zeigt falsche Spannung → Falsches VREF angenommen → VREF im Code an Board anpassen (UNO 5,0 V; ESP 3,3 V; D1 Mini 3,2 V).
  • ESP8266 übersteuert → A0 > zulässig → Sicherstellen: D1 Mini A0 ≤ 3,2 V; bei Bare-ESP8266 nur 1,0 V!
  • ESP32 unstetig bei bestimmten Pins → ADC2/PWM/Touch-Interferenzen → ADC1-Pins (z. B. GPIO34) verwenden.
  • Keine Reaktion im Monitor → Falsche Baudrate → 115200 Baud einstellen.
  • Werte „treiben“ bei langen Kabeln → Hoher Quellwiderstand → 10 kΩ verwenden und Leitungen kurz halten.

Projektideen:


Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

  • Die beliebtesten Arduino-Projekte von StartHardware
  • Inklusive Schaltplan, Beschreibung und Code
  • Arduino-Schnellstart-Kapitel
  • Kompakter Programmierkurs