sheen.bot-Logo

← Einblicke

Warum Ihr Arduino-Pin HIGH anzeigt, wenn nichts angeschlossen ist (und wie Sie das beheben)

14. Okt. 2026·Sheen Robotics
Warum Ihr Arduino-Pin HIGH anzeigt, wenn nichts angeschlossen ist (und wie Sie das beheben)

Ein unbeschalteter Arduino-Eingangspin liegt nicht standardmäßig auf null Volt; er schwebt in einem hochohmigen Zustand und fängt wie eine Antenne elektrostatische Störsignale auf.

Ein unbeschalteter Arduino-Eingangspin liest HIGH aus – oder flackert unvorhersehbar zwischen HIGH und LOW –, weil er sich in einem hochohmigen Zustand befindet, der als offener Pin (floating pin) bezeichnet wird. Er ist mit keiner Referenzspannung verbunden, wodurch er wie eine winzige Antenne wirkt und elektromagnetische Umgebungsfelder, statische Elektrizität von den Händen sowie das 50 Hz-Brummen naheliegender Netzleitungen auffängt.

Um verlässliche Messwerte zu erhalten, muss jeder digitale Eingangspin jederzeit sauber entweder mit der positiven Versorgungsspannung (HIGH) oder mit Masse (LOW) verbunden sein. Um dies zu erreichen, müssen Sie keine externen Widerstände einlöten oder das Steckbrett der Lernenden überladen: Nahezu alle modernen Mikrocontroller besitzen interne Pull-up-Widerstände, die sich mit einer einzigen Codezeile aktivieren lassen.

Das Problem der Hochohmigkeit

Wenn Sie einen Pin mit pinMode(pin, INPUT) konfigurieren, versetzt der Mikrocontroller die interne Schaltung dieses Pins in einen hochohmigen Zustand. Bei einem ATmega328P (dem Mikrocontroller der klassischen Arduino Uno- und Nano-Boards) liegt der Eingangswiderstand eines standardmäßigen GPIO-Pins bei rund 100 Megaohm (100.000.000 Ω). Der Pin zieht so gut wie keinen Strom – weniger als ein einzelnes Mikroampere.

Das ist Absicht: So kann der Mikrocontroller eine externe Schaltung messen, ohne sie zu belasten oder das Signal zu verfälschen. Diese Empfindlichkeit hat jedoch eine direkte physikalische Konsequenz. Da praktisch kein Strom nötig ist, um die Gate-Spannung im Inneren des Chips zu ändern, genügen winzige elektrostatische Ladungen auf der Pin-Oberfläche oder an einem kurzen Jumper-Kabel, um das Spannungsniveau über die digitale Schaltschwelle zu heben.

Auf einem 5V-Board wird alles über etwa 3,0V als HIGH registriert, während alles unter etwa 1,5V als LOW gilt. Wenn ein Pin mit nichts verbunden ist, wandert seine Spannung ziellos durch diesen Zwischenbereich. In dem Moment, in dem jemand mit der Hand winkt, mit den Füßen über einen Synthetikteppich im Klassenzimmer schlurft oder ein Laptop-Netzteil in die Nähe bringt, treibt kapazitive Kopplung die Spannung über den Schwellenwert – und digitalRead() liefert 1 (HIGH).

Das klassische Fehlerszenario im Unterricht

In Unterrichtsräumen und Robotik-AGs sorgt dieses Phänomen für typische Probleme bei der Fehlersuche:

  • Geisterhafte Tastendrücke: Ein Schüler schreibt Code, der eine LED einschalten soll, sobald ein Taster gedrückt wird. Direkt nach dem Hochladen des Sketches leuchtet die LED dauerhaft auf, obwohl der Taster noch gar nicht berührt wurde.
  • Der Schwebe-Effekt: Der Sensor des Roboters löst bereits aus, wenn sich eine Hand dem Board auf zehn Zentimeter nähert. Die Gruppe vermutet daraufhin, ihr Jumper-Kabel habe sich versehentlich in einen Näherungssensor verwandelt.
  • Sporadisches Fehlverhalten auf dem Steckbrett: Ein Projekt funktioniert auf dem Tisch der Lehrkraft absolut zuverlässig, reagiert aber fehlerhaft, sobald es auf einem Schultisch mit Metallgestell unter Leuchtstoffröhren betrieben wird.

Die Standard-Lehrbuchlösung lautet, einen externen 10-kΩ-Pull-down- oder Pull-up-Widerstand auf dem Steckbrett zu ergänzen. Für Einsteigerkurse bedeuten externe Widerstände jedoch unnötige Hürden: Lernende stecken sie in die falsche Kontaktreihe, verwechseln Farbcodes oder verursachen beim Betätigen von Tastern direkte Kurzschlüsse zwischen 5V und GND.

Die saubere Lösung: INPUT_PULLUP

Die Entwickler von Mikrocontrollern haben dieses Problem bereits vor Jahrzehnten bedacht. Bausteine wie der ATmega328P, der RP2040 und der ESP32 verfügen über interne Widerstände, die direkt neben jedem GPIO-Pin im Silizium integriert sind. Auf einem Arduino Uno oder Nano weisen diese internen Widerstände einen effektiven Wert zwischen 20 kΩ und 50 kΩ auf.

Sie können diesen Widerstand direkt in der Funktion setup() aktivieren, indem Sie eine einzige Konstante an pinMode() übergeben:

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
}

Wird INPUT_PULLUP aufgerufen, verbindet der Mikrocontroller Pin 2 intern über einen Widerstand von 20kΩ–50kΩ mit seiner 5V-Leitung. Diese schwache Verbindung zieht den Pin zuverlässig auf 5V hoch, solange der Stromkreis offen ist. Da der Pin nun aktiv an eine Spannungsquelle angebunden ist, kann elektrostatisches Rauschen seinen Schaltzustand nicht mehr verändern. Bleibt er unberührt, liest der Pin dauerhaft stabil HIGH aus.

Das Umdenken bei der Logik: Beschaltung für Active-LOW

Die Verwendung von INPUT_PULLUP erfordert von den Lernenden ein kurzes Umdenken: Die Schaltung muss mit Active-LOW-Logik arbeiten.

Weil der Pin im Ruhezustand auf HIGH gezogen wird, darf ein Taster den Pin nicht mit 5V verbinden. Stattdessen schaltet der Taster den Pin direkt gegen GND:

  • Taster unbetätigt (Stromkreis offen): Der interne Pull-up-Widerstand hält den Pin auf 5V. digitalRead(pin) liefert HIGH.
  • Taster gedrückt (Stromkreis geschlossen): Der Pin wird direkt mit Masse (0V) verbunden. Der minimale Strom durch den internen Pull-up-Widerstand fließt sicher nach GND ab. digitalRead(pin) liefert LOW.

Die Schaltung auf Hardwareseite wird dadurch einfacher: Sie benötigen für Ihren Taster lediglich zwei Leitungen – eine zum digitalen Pin und eine zu einem beliebigen Masse-Pin (GND) auf dem Board. Die Verbindung zur 5V-Schiene sowie externe Widerstände entfallen komplett.

Im Programmcode kehren Sie die Abfragebedingung entsprechend um:

void loop() {
  int buttonState = digitalRead(2);

  // Bei INPUT_PULLUP bedeutet LOW, dass der Taster gedrückt ist
  if (buttonState == LOW) {
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }
}

Wann stattdessen externe Widerstände nötig sind

Obwohl INPUT_PULLUP der Standard für digitale Schalter im Unterricht sein sollte, setzt die Physik dem Verfahren Grenzen:

SzenarioInterner Pull-up (20k–50kΩ)Externer Widerstand (1k–10kΩ)
Standard-Taster auf einem SteckbrettIdeal (keine zusätzlichen Bauteile)Unnötige Komplexität
Lange Leitungswege (> 1 Meter)Anfällig für kapazitive Verzögerungen und StörungenErforderlich (einen niederohmigen Pull-up mit 1kΩ oder 4,7kΩ verwenden)
I2C-Busleitungen (SDA/SCL)Zu schwach für hohe ÜbertragungsratenErforderlich (typischerweise 2,2kΩ bis 4,7kΩ)
Sensoren mit zwingendem Active-HIGH-AusgangInterne Spannungsanbindung kann hardwareseitig nicht invertiert werdenErforderlich (externen Pull-down gegen GND verwenden)

Entdecken Sie für modulare MINT-Hardware und Prototyping-Plattformen im Unterricht, bei denen Verdrahtungsfehler minimiert werden müssen, die passenden Mikrocontroller-Komponenten und Sensoren im Sheen Robotics Store.

Checkliste für Lehrkräfte

  1. Eingänge niemals offen lassen: Wenn ein Eingangspin rein als INPUT definiert ist, muss er über eine externe Beschaltung jederzeit an ein definiertes Potenzial gebunden sein.
  2. Standardmäßig INPUT_PULLUP nutzen: Stellen Sie Unterrichtsvorlagen so um, dass Pins standardmäßig über pinMode(pin, INPUT_PULLUP) initialisiert werden.
  3. Taster gegen GND schalten, nicht gegen 5V: Das spart Bauteile auf dem Steckbrett, vermeidet Kurzschlüsse und entspricht gängigen Industriestandards.
  4. Active-LOW frühzeitig thematisieren: Zu vermitteln, warum LOW hier „aktiv“ bedeutet, führt Lernende an praxisnahe Schaltungslogik heran: Das Schalten gegen Masse ist sicherer und störfester, als Versorgungsspannungen über externe Taster zu führen.
#arduino#elektronik#programmieren#unterricht#robotik

Mehr aus Einblicke