Arduino - Berührungssensor

Berührungssensor (auch Berührungstaste oder Berührungsschalter genannt) wird häufig verwendet, um Geräte zu steuern (z. B. eine berührbare Lampe). Er hat dieselbe Funktion wie ein Knopf. Er wird in vielen neuen Geräten anstelle des Knopfes verwendet, weil er das Produkt optisch ansprechender wirken lässt.

In diesem Tutorial lernen wir, wie man den Berührungssensor mit Arduino verwendet.

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×Berührungssensor
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Sensors/Servo Expansion Shield for Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den Berührungssensor

Pinbelegung

Der Berührungssensor hat 3 Anschlüsse:

  • GND-Pin: muss mit GND (0 V) verbunden werden
  • VCC-Pin: muss mit VCC (5 V oder 3,3 V) verbunden werden
  • SIGNAL-Pin: ist ein Ausgangspin: niedrig, wenn er nicht berührt ist, hoch, wenn er berührt wird. Dieser Pin muss mit dem Eingangspin des Arduino verbunden werden.
Berührungssensor-Pinbelegung

Wie es funktioniert

  • Wenn der Sensor NICHT berührt wird, ist der SIGNAL-Pin des Sensors LOW
  • Wenn der Sensor berührt wird, ist der SIGNAL-Pin des Sensors HIGH

Arduino - Berührungssensor

Der SIGNAL-Pin des Berührungssensors ist mit dem Eingangspin eines Arduino verbunden.

Durch das Auslesen des Zustands des Arduino-Pins (als Eingangspin konfiguriert) können wir feststellen, ob der Berührungssensor berührt wird oder nicht.

Verdrahtungsdiagramm

Arduino-Berührungssensor-Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wie programmiert man für einen Berührungssensor

  • Initialisiert den Arduino-Pin in den digitalen Eingangsmodus, indem die Funktion pinMode() verwendet wird. Zum Beispiel Pin 7
pinMode(7, INPUT_PULLUP);
  • Liest den Zustand des Arduino-Pins, indem er die Funktion digitalRead() verwendet.
int inputState = digitalRead(7);

※ Notiz:

Es gibt zwei weit verbreitete Anwendungsfälle:

  • Der erste: Wenn der Eingangszustand HIGH ist, tue etwas. Wenn der Eingangszustand LOW ist, tue etwas anderes, und zwar umgekehrt.
  • Der zweite: Wenn sich der Eingangszustand von LOW zu HIGH (oder HIGH zu LOW) ändert, tue etwas.

Je nach Anwendung wählen wir einen von ihnen aus. Zum Beispiel bei der Verwendung eines Touch-Sensors zur Steuerung einer LED:

  • Wenn wir möchten, dass die LED AN ist, wenn der Sensor berührt wird, und AUS, wenn der Sensor nicht berührt wird, sollten wir den ersten Anwendungsfall verwenden.
  • Wenn wir möchten, dass die LED bei jedem Berühren des Sensors zwischen EIN und AUS umgeschaltet wird, sollten wir den zweiten Anwendungsfall verwenden.
  • Wie man die Zustandsänderung von LOW zu HIGH erkennt
// Konstanten ändern sich nicht. Sie werden hier verwendet, um Pin-Nummern festzulegen: const int SENSOR_PIN = 7; // der Arduino-Eingangspin, der mit dem SIGNAL-Pin des Sensors verbunden ist // Variablen ändern sich: int lastState = LOW; // der vorherige Zustand vom Eingangspin int currentState; // der aktuelle Zustand vom Eingangspin void setup() { // Initialisiere serielle Kommunikation mit 9600 Bit pro Sekunde: Serial.begin(9600); // initialisiere den Pin des Arduino als Eingangspin pinMode(SENSOR_PIN, INPUT); } void loop() { // lese den Zustand des Eingabepins: currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The sensor is touched"); // speichere den letzten Zustand lastState = currentState; }

Berührungssensor - Arduino-Code

Wir werden vier Beispielcodes ausführen:

  • Liest den Wert des Berührungssensors aus und gibt ihn im Serial Monitor aus.
  • Steuert die LED entsprechend dem Zustand des Berührungssensors.
  • Erkennt, ob der Berührungssensor berührt oder losgelassen ist.
  • Schaltet die LED um, wenn der Berührungssensor berührt wird (dies ist am häufigsten verwendet).

Liest den Wert des Touch-Sensors aus und gibt ihn im Serial Monitor aus

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-touch-sensor */ // Konstanten ändern sich nicht. Sie werden hier verwendet, um Pin-Nummern festzulegen: const int SENSOR_PIN = 7; // der Arduino-Eingangspin, der mit dem SIGNAL-Pin des Sensors verbunden ist void setup() { // Serielle Kommunikation mit 9600 Bit/s initialisieren: Serial.begin(9600); // Initialisiere den Arduino-Pin als Eingang pinMode(SENSOR_PIN, INPUT); } void loop() { // Lese den Zustand des Eingangspins aus: int state = digitalRead(SENSOR_PIN); // Zustand über den Serial Monitor ausgeben Serial.println(state); }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
  • Klicken Sie auf die Hochladen-Schaltfläche in der Arduino IDE, um den Code auf den Arduino hochzuladen.
  • Berühren Sie den Sensor mit Ihrem Finger und heben Sie ihn anschließend wieder ab.
  • Sehen Sie das Ergebnis im Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
0 0 0 1 1 1 1 1 1 0 0
Ln 11, Col 1
Arduino Uno on COM15
2

LED gemäß dem Zustand des Sensors steuern

Wenn der Sensor berührt wird, schalte die LED ein. Wenn der Sensor nicht berührt wird, schalte die LED aus.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-touch-sensor */ // Konstanten ändern sich nicht. Sie werden hier verwendet, um Pin-Nummern festzulegen: const int SENSOR_PIN = 7; // Der Arduino-Eingangspin, der mit dem SIGNAL-Pin des Sensors verbunden ist void setup() { // Initialisiere die serielle Kommunikation mit 9600 Bits pro Sekunde: Serial.begin(9600); // Initialisiere den Pin des Arduino als Eingang pinMode(SENSOR_PIN, INPUT); // Initialisiere den digitalen Pin LED_BUILTIN als Ausgang. pinMode(LED_BUILTIN, OUTPUT); } void loop() { // Lies den Zustand des Eingangspins aus: int state = digitalRead(SENSOR_PIN); // Steuere die LED entsprechend dem Zustand des Sensors digitalWrite(LED_BUILTIN, state); }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den Arduino hochzuladen.
  • Berühren Sie den Sensor mit Ihrem Finger und halten Sie ihn gedrückt.
  • Siehe LED-Zustand ⇒ Die LED sollte eingeschaltet sein.
  • Heben Sie Ihren Finger vom Sensor ab.
  • Siehe LED-Zustand ⇒ Die LED sollte ausgeschaltet sein.

Erkennt, ob der Sensor berührt oder losgelassen wird

// Konstanten ändern sich nicht. Sie werden hier verwendet, um Pin-Nummern festzulegen: const int SENSOR_PIN = 7; // der Eingangspin des Arduino, der mit dem SIGNAL-Pin des Sensors verbunden ist // Variablen werden geändert: int lastState = LOW; // der vorherige Zustand vom Eingangspin int currentState; // der aktuelle Zustand vom Eingangspin void setup() { // Serielle Kommunikation mit 9600 Bits pro Sekunde initialisieren: Serial.begin(9600); // Initialisiere den Arduino-Pin als Eingang pinMode(SENSOR_PIN, INPUT); } void loop() { // lese den Zustand des Eingangs-Pins aus: currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH) Serial.println("The sensor is touched"); else if(lastState == HIGH && currentState == LOW) Serial.println("The sensor is is released"); // speichere den letzten Zustand lastState = currentState; }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE.
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den Arduino hochzuladen.
  • Berühren Sie den Sensor mit Ihrem Finger und halten Sie ihn darauf.
  • Sehen Sie das Ergebnis im Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The sensor is touched
Ln 11, Col 1
Arduino Uno on COM15
2
  • Lösen Sie Ihren Finger vom Sensor.
  • Sehen Sie das Ergebnis im Serial Monitor.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The sensor is touched The sensor is is released
Ln 11, Col 1
Arduino Uno on COM15
2

Schaltet die LED um, wenn der Sensor berührt wird.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-touch-sensor */ // Konstanten ändern sich nicht. Sie werden hier verwendet, um Pin-Nummern festzulegen: const int SENSOR_PIN = 7; // der Arduino-Eingangspin, der mit dem SIGNAL-Pin des Sensors verbunden ist // Variablen werden sich ändern: int lastState = LOW; // der vorherige Zustand vom Eingangspin int currentState; // der aktuelle Zustand des Eingangspins int ledState = LOW; // der aktuelle LED-Zustand void setup() { // Serielle Kommunikation mit 9600 Bit/s initialisieren: Serial.begin(9600); // initialisiere den Arduino-Pin als INPUT pinMode(SENSOR_PIN, INPUT); // Initialisiere den digitalen Pin LED_BUILTIN als OUTPUT. pinMode(LED_BUILTIN, OUTPUT); } void loop() { // lese den Zustand des Eingangspins aus: currentState = digitalRead(SENSOR_PIN); if(lastState == LOW && currentState == HIGH){ // LED-Zustand umschalten if(ledState == LOW) ledState = HIGH; else if(ledState == HIGH) ledState = LOW; // LED steuern digitalWrite(LED_BUILTIN, ledState); } // speichere den letzten Zustand lastState = currentState; }

Schnelle Schritte

  • Kopiere den obigen Code und öffne ihn mit der Arduino IDE.
  • Klicke in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code auf Arduino hochzuladen.
  • Lege deinen Finger auf den Sensor und lasse los.
  • Sieh dir den LED-Status an ⇒ Die LED sollte eingeschaltet sein.
  • Lege deinen Finger auf den Sensor und lasse los.
  • Sieh dir den LED-Status an ⇒ Die LED sollte ausgeschaltet sein.
  • Lege deinen Finger auf den Sensor und lasse los.
  • Sieh dir den LED-Status an ⇒ Die LED sollte eingeschaltet sein.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Die folgende Video-Demo verwendet den folgenden Code. Beachte, dass das Video Arduino Uno R4 zeigt, funktioniert aber identisch für Arduino Uno R3:

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-touch-sensor */ // --- Hardware Pin Definitions --- #define BUZZER_PIN 8 #define TOUCH_1_PIN 2 // Happy Birthday trigger #define TOUCH_2_PIN 3 // Jingle Bells trigger #define LED_A_PIN 4 // First indicator LED (Active-Low) #define LED_B_PIN 5 // Second indicator LED (Active-Low) // --- Musical Note Frequencies (Hz) --- #define NOTE_C4 262 #define NOTE_D4 294 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_G4 392 #define NOTE_A4 440 #define NOTE_A5 880 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_D5 587 #define NOTE_E5 659 // --- Melody 1: Happy Birthday --- const int happyBirthdayMelody[] = { NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4, NOTE_C4, NOTE_C4, NOTE_C5, NOTE_A4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_B4, NOTE_B4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_F4 }; const int happyBirthdayDurations[] = { 8, 8, 4, 4, 4, 2, 8, 8, 4, 4, 4, 2, 8, 8, 4, 4, 4, 4, 4, 8, 8, 4, 4, 4, 2 }; const int happyBirthdayLength = sizeof(happyBirthdayMelody) / sizeof(happyBirthdayMelody[0]); // --- Melody 2: Jingle Bells --- const int jingleBellsMelody[] = { NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_G4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_D4, NOTE_G4 }; const int jingleBellsDurations[] = { 4, 4, 2, 4, 4, 2, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 8, 8, 4, 4, 4, 4, 2 }; const int jingleBellsLength = sizeof(jingleBellsMelody) / sizeof(jingleBellsMelody[0]); // --- Function Prototypes --- void playSong(const int melody[], const int durations[], int songLength); void updateLeds(int noteIndex, bool isQuietNote); void turnOffBothLeds(); /** * @brief Initializes peripheral pins and system communication. */ void setup() { Serial.begin(115200); pinMode(TOUCH_1_PIN, INPUT); pinMode(TOUCH_2_PIN, INPUT); pinMode(BUZZER_PIN, OUTPUT); pinMode(LED_A_PIN, OUTPUT); pinMode(LED_B_PIN, OUTPUT); // For Active-Low LEDs, setting pins HIGH turns them OFF on startup turnOffBothLeds(); Serial.println(F("Active-Low LED Music Box Jukebox Ready.")); } /** * @brief Main execution loop checking for touch sensor triggers. */ void loop() { if (digitalRead(TOUCH_1_PIN) == HIGH) { Serial.println(F("Touch 1 detected: Playing Happy Birthday...")); playSong(happyBirthdayMelody, happyBirthdayDurations, happyBirthdayLength); } else if (digitalRead(TOUCH_2_PIN) == HIGH) { Serial.println(F("Touch 2 detected: Playing Jingle Bells...")); playSong(jingleBellsMelody, jingleBellsDurations, jingleBellsLength); } } /** * @brief Iterates through the provided melody arrays to play the full song with LED sync. * @param melody Array containing note frequencies. * @param durations Array containing corresponding note lengths. * @param songLength Total number of notes in the song. */ void playSong(const int melody[], const int durations[], int songLength) { for (int thisNote = 0; thisNote < songLength; thisNote++) { bool isQuietNote = (melody[thisNote] == 0); int noteDuration = 1000 / durations[thisNote]; // Trigger Active-Low LED effect updateLeds(thisNote, isQuietNote); tone(BUZZER_PIN, melody[thisNote], noteDuration); int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); noTone(BUZZER_PIN); turnOffBothLeds(); // Drive both pins HIGH to turn off the LEDs } Serial.println(F("Song finished. LEDs reset to standby (HIGH).")); } /** * @brief Logic switch designed for Active-Low configurations (LOW = ON, HIGH = OFF). * @param noteIndex Current position in the melody array. * @param isQuietNote Evaluation flag determining if the note produces no sound. */ void updateLeds(int noteIndex, bool isQuietNote) { if (isQuietNote) { turnOffBothLeds(); return; } // Alternating Active-Low pattern if (noteIndex % 2 == 0) { digitalWrite(LED_A_PIN, LOW); // LED A turns ON digitalWrite(LED_B_PIN, HIGH); // LED B turns OFF } else { digitalWrite(LED_A_PIN, HIGH); // LED A turns OFF digitalWrite(LED_B_PIN, LOW); // LED B turns ON } } /** * @brief Forces both LED control pins to HIGH, turning them OFF in Active-Low logic. */ void turnOffBothLeds() { digitalWrite(LED_A_PIN, HIGH); digitalWrite(LED_B_PIN, HIGH); }

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!