HOWTO · Arduino
Arduino Pull Down Widerstand
Erfahren Sie, wie Sie einen Arduino-Pull-down-Widerstand und einen Schalter verdrahten, einen Widerstandswert wählen und den Eingang in einem Sketch auslesen.
Auf dieser Seite
Für einen Arduino-Pull-down-Widerstand verbinden Sie einen Widerstand zwischen dem Knotenpunkt am Digitaleingang und GND. Schließen Sie dann einen Schalter zwischen diesen Knotenpunkt und eine Versorgungsspannung an, die zum Eingang des Boards passt. Bei geöffnetem Schalter liest der Eingang LOW, bei geschlossenem HIGH. Verwenden Sie 5V nur, wenn der Eingang des Boards 5V-tolerant ist; ein ausschließlich für 3,3V ausgelegter Eingang benötigt eine passende 3,3V-Versorgung. Diese Anleitung erklärt die Verdrahtung, die Wahl des Widerstands und das Auslesen des Schalters im Sketch.
Warum ein Pull-down-Widerstand benötigt wird
Ein Mikrocontroller-Eingang nimmt nur sehr wenig Strom auf. Wenn ein Schalter den Eingang nicht mit einer definierten Spannung verbindet, können elektrische Störungen dessen Spannung verändern und unvorhersehbare Messwerte verursachen. Das nennt man einen offenen oder floatenden Eingang. Ein Pull-down-Widerstand verbindet den Eingang bei geöffnetem Schalter mit GND und hält ihn dadurch auf LOW. Beim Schließen des Schalters wird derselbe Knotenpunkt mit der Versorgung des Boards verbunden, sodass der Pin HIGH liest.
Einen externen Pull-down-Widerstand an einen Digitaleingang anschließen
Bauen Sie die Schaltung so auf, dass der Eingangspin, ein Anschluss des Schalters und ein Anschluss des Widerstands an einem gemeinsamen Knotenpunkt zusammentreffen:
- Wählen Sie eine Versorgungsspannung, die der Eingang des Boards sicher verträgt. Verbinden Sie einen Anschluss eines Drucktasters oder Schalters mit dieser Versorgung. Verwenden Sie den 5V-Pin des Boards nur, wenn der Eingang 5V-tolerant ist. Bei einem ausschließlich für 3,3V ausgelegten Eingang verwenden Sie eine passende 3,3V-Versorgung.
- Verbinden Sie den anderen Schalteranschluss mit dem digitalen Pin 2. Dieser Verbindungspunkt ist der Eingangsknoten.
- Verbinden Sie einen Widerstand zwischen diesem Knotenpunkt und GND.
Der Ausgangstext nennt 1 kΩ bis 100 kΩ als Ausgangsbereich. Der passende Wert hängt vom Board und von der Schaltung ab. Prüfen Sie daher die elektrischen Spezifikationen des Boards und berücksichtigen Sie Störungen sowie den erforderlichen Strom. Ein sehr kleiner Widerstand kann beim Schließen des Schalters einen zu hohen Stromfluss ermöglichen. Der Widerstand gehört zwischen den Eingangsknoten und GND; verbinden Sie die Versorgung nicht direkt mit GND. Die Beschriftung +5V im folgenden Schaltbild gilt nur, wenn der Eingang des Boards 5V-tolerant ist. Verwenden Sie andernfalls an diesem Schalteranschluss eine zum Board passende Versorgungsspannung.
Den Schalter in einem Arduino-Sketch auslesen
Konfigurieren Sie den Pin-Modus als INPUT und lesen Sie den Schalter mit digitalRead aus. Der vollständige Sketch gibt für jeden Schaltzustand eine Meldung aus. Ein kleiner Kompatibilitätsabschnitt ermöglicht es, denselben Quelltext als Demonstration auf dem Host-System zu kompilieren. In der Arduino IDE stellt der Board-Core diese Namen bereit; die IDE liefert außerdem den Programmeinstiegspunkt. Die Host-Demonstration verwendet einen fest eingestellten HIGH-Wert. Die ausgegebene Zeile veranschaulicht deshalb den Zweig für den geschlossenen Schalter; sie prüft keine Hardware.
#ifndef ARDUINO
#include <iostream>
constexpr int INPUT = 0;
constexpr int LOW = 0;
constexpr int HIGH = 1;
struct SerialPort {
void begin(long) {}
void println(const char* message) { std::cout << message << '\n'; }
} Serial;
void pinMode(int, int) {}
int digitalRead(int) { return HIGH; }
void delay(unsigned long) {}
#endif
const int switchPin = 2;
void setup() {
pinMode(switchPin, INPUT);
Serial.begin(9600);
}
void loop() {
int switchState = digitalRead(switchPin);
if (switchState == HIGH) {
Serial.println("Switch closed");
} else {
Serial.println("Switch open");
}
delay(200);
}
#ifndef ARDUINO
int main() {
setup();
loop();
}
#endif
Switch closed
Bei der beschriebenen externen Pull-down-Schaltung gibt digitalRead für einen geöffneten Schalter LOW und für einen geschlossenen Schalter HIGH zurück. Führen Sie die jeweilige Aktion im passenden Zweig aus. Weitere bedingte Abläufe erklärt der Artikel Arduino-if-Anweisung. Wenn Ihr Sketch auf eine Benutzeraktion warten soll, lesen Sie In Arduino auf eine Eingabe warten.
Einen Analogeingang mit einem externen Pull-down-Widerstand verwenden
Sie können dieselbe Schaltung statt mit einem digitalen Pin auch mit einem Analogeingang wie A0 verbinden. Lassen Sie den Widerstand zwischen Eingangsknoten und GND und verbinden Sie den Schalter zwischen diesem Knoten und einer Versorgungsspannung, die zum Analogeingang passt. Verwenden Sie 5V nur, wenn dieser Eingang 5V-tolerant ist. Bei geöffnetem Schalter liegt der Analogwert nahe am unteren Ende des Bereichs; beim Schließen steigt er in Richtung des für die Boardversorgung zu erwartenden Werts. Die genauen Messwerte hängen vom Analog-Digital-Wandler und von der Referenzspannung des Boards ab.
Lesen Sie den Pin im Arduino-Sketch mit analogRead aus und vergleichen Sie den Wert mit einem Schwellenwert, der zur Platine und Schaltung passt. Bei dieser Verdrahtung steht die Bedingung reading >= threshold beispielsweise für den geschlossenen Schalter, weil dieser den Knotenpunkt mit der Versorgung verbindet. Bestimmen Sie den Schwellenwert anhand von Messungen; ein Wert wie 512 eignet sich nicht für jede Schaltung. Dieses Analogbeispiel hängt vom Board ab und ist in der obigen Host-Demonstration nicht enthalten.
Den internen Pull-up als Alternative verwenden
Ein interner Pull-up ist eine alternative Schaltung und kein externer Pull-down. Dabei wird der eingebaute Widerstand des Mikrocontrollers verwendet. Verbinden Sie den Schalter zwischen dem Digitaleingang und GND und konfigurieren Sie den Pin anschließend mit INPUT_PULLUP. Bei geöffnetem Schalter wird HIGH gelesen. Beim Drücken verbindet der Schalter den Pin mit GND, sodass LOW gelesen wird. Damit ist die Logik gegenüber der externen Pull-down-Schaltung umgekehrt.
Verwenden Sie im Arduino-Sketch pinMode(switchPin, INPUT_PULLUP) und behandeln Sie digitalRead(switchPin) == LOW als den gedrückten Zustand. Das Verhalten hängt vom Arduino-Core und der tatsächlichen Verdrahtung ab; die Host-Demonstration oben bildet es daher nicht ab.