Bemerkung
Hallo und herzlich willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauche tiefer in die Welt von Raspberry Pi, Arduino und ESP32 zusammen mit anderen Enthusiasten ein.
Warum mitmachen?
Fachkundige Unterstützung: Löse nach dem Kauf auftretende Probleme und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tausche Tipps und Tutorials aus, um deine Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalte frühzeitige Informationen über neue Produktankündigungen und Vorschauen.
Spezielle Rabatte: Genieße exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Verlosungen: Nimm an Verlosungen und saisonalen Aktionen teil.
👉 Bereit, mit uns zu entdecken und zu kreieren? Klicke auf [hier] und tritt noch heute bei!
20. Automatischer Seifenspender
Willkommen zu unserem Kurs über den Bau eines automatischen Seifenspenders mithilfe von Arduino-Technologie! In diesem Kurs erkunden wir die faszinierende Welt der automatisierten Systeme und wie einfache Elektronik Alltagsgegenstände erheblich verbessern kann. Unser Schwerpunkt liegt darauf, ein Gerät zu entwickeln, das die Nähe einer Hand erkennt und automatisch Seife ausgibt.
Am Ende dieser Lektion wirst du in der Lage sein:
Die Funktionsweise einer Wasserpumpe zu verstehen.
Einen automatischen Seifenspender zu entwickeln, der auf die Nähe deiner Hand reagiert und mithilfe von Entfernungsmessungen eines Ultraschallsensors Seife ausgibt.
Bau der Schaltung
Benötigte Komponenten
1 * Arduino Uno R3 |
1 * Pumpe |
1 * Ultraschallmodul |
1 * L293D-Chip |
1 * USB-Kabel |
1 * Steckbrett |
Verbindungskabel |
1 * Steckbrett-Netzteilmodul |
1 * 9V Batterie |
1 * Batteriekabel |
||
Schritt-für-Schritt Aufbau
Folge dem Verdrahtungsdiagramm oder den unten stehenden Schritten, um deine Schaltung aufzubauen.

Bei der Verwendung von Motoren, Servos und anderen Aktoren wird empfohlen, eine externe Stromversorgung zu verwenden, um Schäden an der Hauptplatine zu vermeiden. Setze das Steckbrett-Netzteilmodul in das Steckbrett ein und verwende ein Verbindungskabel, um die negative Schiene des Steckbretts mit dem GND des Arduino Uno R3 zu verbinden, um eine gemeinsame Masse zu erreichen.

Bemerkung
Die Anordnung der positiven und negativen Klemmen auf dem Steckbrett im Verdrahtungsdiagramm ist im Vergleich zum Steckbrett im Bausatz vertauscht.
Beim tatsächlichen Verdrahten musst du das Steckbrett-Netzteilmodul von der höheren Zahlenseite (60~65) einfügen, sodass das „-“ des Netzteilmoduls in die negative Schiene „-“ des Steckbretts und das „+“ in die positive Schiene „+“ gelangt.
Setze das Ultraschallmodul in das Steckbrett ein.

Verbinde den VCC-Pin des Ultraschallmoduls mit der positiven Seite des Steckbretts, den Trig-Pin mit Pin 8 auf dem Arduino-Board, den Echo-Pin mit Pin 7 und den GND mit der negativen Seite des Steckbretts.

Finde die Wasserpumpe.

Dies ist die DC 2.5-6V Mini-Tauchpumpe, ideal für kleine Projekte wie Tischbrunnen, Aquarien und Hydrokultursysteme.
Diese Pumpe verwendet zentrifugale Mechanik, wobei ein Elektromotor Rotationsenergie in Strömungsenergie umwandelt und so effizient Wasser durch das System bewegt. Einfach zu installieren und zu warten, ist sie eine zuverlässige Wahl für DIY-Enthusiasten.

Die Wasserpumpe benötigt auch einen Motortreiber-Chip. Jetzt setzen wir den L293D-Chip in die mittlere Kerbe des Steckbretts ein. Achte darauf, dass die Kerbe auf dem Chip nach links zeigt.

Verbinde die Pins des L293D-Chips wie folgt:
1(1,2EN): Verbinde mit der positiven Schiene des Steckbretts, um den Chip zu aktivieren.
4(GND): Verbinde mit der negativen Schiene des Steckbretts, um den Chip zu erden.
8(VCC2): Verbinde mit der positiven Schiene des Steckbretts, um die Pumpe mit Strom zu versorgen.
16(VCC1): Verbinde mit der positiven Schiene des Steckbretts, um den Chip mit Strom zu versorgen.

Im Gegensatz zu Motoren haben Wasserpumpen keine Drehrichtung, die unterschieden werden muss. Sie benötigen lediglich eine Spannungsdifferenz an zwei Pins, um Wasser zu pumpen. Verbinde daher Pin 2 (1A) des L293D mit Pin 2 des Arduino Uno R3 und Pin 3 (1Y) mit der Wasserpumpe, wobei der andere Pin der Wasserpumpe mit GND verbunden wird.
Indem Pin 2 einfach auf High gesetzt wird, beginnt die Wasserpumpe, Wasser zu pumpen.

Codeerstellung - So funktioniert die Wasserpumpe
Lass uns zunächst sehen, wie die Wasserpumpe funktioniert. Du benötigst ein Glas Wasser, das groß genug ist, um die Pumpe vollständig zu untertauchen, und ein weiteres leeres Glas, um das abgepumpte Wasser aufzufangen.
Öffne die Arduino IDE und starte ein neues Projekt, indem du „New Sketch“ aus dem „File“-Menü wählst.
Speichere dein Sketch unter dem Namen
Lesson20_Pump
mitCtrl + S
oder durch Klicken auf „Save“.Das Betreiben der Wasserpumpe ist genauso einfach wie das Ansteuern einer LED. Initialisiere einfach den Pumpensteuerungspin, setze ihn als Ausgang und schalte ihn dann auf High.
#define PUMP_PIN 2 // Pumpensteuerungspin
void setup() {
pinMode(PUMP_PIN, OUTPUT); // Setze den Pumpensteuerungspin als Ausgang
}
void loop() {
digitalWrite(PUMP_PIN, HIGH); // Schalte die Pumpe mit voller Geschwindigkeit ein
}
Der Code ist vollständig. Du kannst ihn jetzt auf das Arduino Uno R3 Board hochladen. Danach wirst du sehen, wie das Wasser durch den Schlauch der Pumpe vom vollen Glas in das leere Glas gepumpt wird.
Frage
In diesem Projekt hast du die Wasserpumpe mit einem speziellen Treiber und einer bestimmten Konfiguration angeschlossen. Was denkst du, würde passieren, wenn du die Anschlüsse der Pumpe umkehrst? Würde die Pumpe rückwärts arbeiten, aufhören zu funktionieren oder etwas anderes tun? Probiere es aus und reflektiere über das Ergebnis.

Codeerstellung - Automatischer Seifenspender
Hier bauen wir einen automatischen Seifenspender, der durch eine Wasserpumpe Seifenflüssigkeit abgibt. Der Spender wird durch einen Ultraschallsensor ausgelöst, der die Nähe einer Hand erkennt. Wenn die gemessene Entfernung weniger als 10 cm beträgt, was darauf hindeutet, dass eine Hand in der Nähe ist, wird der Spender Seife abgeben.
Um den Seifenverbrauch zu optimieren, läuft die Pumpe 500 Millisekunden, um Seife abzugeben. Wird nach einer Pause von 2 Sekunden weiterhin eine Hand erkannt, aktiviert sich die Pumpe erneut für 500 Millisekunden, um eine ausreichende Menge Seife abzugeben. Dieses Setup verwaltet die Seifenabgabe effizient und berücksichtigt die Bedürfnisse des Benutzers.
Öffne die Arduino IDE und starte ein neues Projekt, indem du „New Sketch“ aus dem „File“-Menü wählst.
Speichere dein Sketch unter dem Namen
Lesson20_Soap_Dispenser
mitCtrl + S
oder durch Klicken auf „Save“.Initialisiere die beiden Pins für den Ultraschallsensor und den Pumpenpin.
#define TRIGGER_PIN 8
#define ECHO_PIN 7
#define PUMP_PIN 2 // Pumpensteuerungspin
void setup() {
// füge hier den Setup-Code ein, der einmal ausgeführt wird:
}
In der Funktion
void setup()
, setze die Modi für die im Projekt verwendeten Pins und initialisiere die serielle Kommunikation bei 9600 bps zur Fehlerbehebung und Überwachung der Sensorausgabe.
#define TRIGGER_PIN 8
#define ECHO_PIN 7
#define PUMP_PIN 2 // Pumpensteuerungspin
void setup() {
pinMode(PUMP_PIN, OUTPUT); // Setze den Pumpensteuerungspin als Ausgang
pinMode(TRIGGER_PIN, OUTPUT); // Setze den Trig-Pin als Ausgang
pinMode(ECHO_PIN, INPUT); // Setze den Echo-Pin als Eingang
Serial.begin(9600); // Starte die serielle Kommunikation zur Fehlerbehebung
}
Du benötigst eine spezifische Funktion, um die vom Ultraschallmodul gemessene Entfernung abzurufen. Wie diese Funktion implementiert wird, kannst du unter Code-Erstellung - Distanzmessung nachlesen.
void loop() {
// füge hier den Hauptcode ein, der wiederholt ausgeführt wird:
}
// Funktion zum Auslesen der Sensordaten und Berechnung der Entfernung
long measureDistance() {
digitalWrite(TRIGGER_PIN, LOW); // Stelle sicher, dass der Trig-Pin vor einem Puls auf LOW ist
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH); // Sende einen hohen Puls
delayMicroseconds(10); // Pulsdauer von 10 Mikrosekunden
digitalWrite(TRIGGER_PIN, LOW); // Beende den hohen Puls
long duration = pulseIn(ECHO_PIN, HIGH); // Messe die Dauer des hohen Pegels am Echo-Pin
long distance = duration * 0.034 / 2; // Berechne die Entfernung (in cm)
return distance;
}
Nun wechsle zur Funktion
void loop()
, rufe die FunktionmeasureDistance()
auf, um die gemessene Distanz in der Variablendistance
zu speichern, und gib sie im seriellen Monitor aus.
void loop() {
long distance = measureDistance(); // Ruft die Funktion zur Distanzmessung auf
Serial.println(distance);
delay(100); // Verzögerung zwischen den Messungen
}
Anschließend wird basierend auf der gemessenen Distanz der Betriebszustand der Pumpe festgelegt. Wenn die Distanz zwischen 2 und 10 cm liegt, wird die Pumpe aktiviert, um für 500 Millisekunden Seife abzugeben, und schaltet sich dann ab. Danach wartet sie 2 Sekunden, bevor eine erneute Aktivierung erfolgen kann.
void loop() {
long distance = measureDistance(); // Ruft die Funktion zur Distanzmessung auf
Serial.println(distance);
if (distance > 2 && distance < 10) { // Wenn die Distanz zwischen 2 und 10 cm liegt
digitalWrite(PUMP_PIN, HIGH); // Schalte die Pumpe ein
delay(500);
digitalWrite(PUMP_PIN, LOW); // Schalte die Pumpe aus
delay(2000);
} else {
digitalWrite(PUMP_PIN, LOW); // Schalte die Pumpe aus
}
delay(100); // Verzögerung zwischen den Messungen
}
Hier ist dein vollständiger Code, den du auf das Arduino Uno R3 Board hochladen kannst.
#define TRIGGER_PIN 8
#define ECHO_PIN 7
#define PUMP_PIN 2 // Pumpensteuerungspin
void setup() {
pinMode(PUMP_PIN, OUTPUT); // Setze den Pumpensteuerungspin als Ausgang
pinMode(TRIGGER_PIN, OUTPUT); // Setze den Trig-Pin als Ausgang
pinMode(ECHO_PIN, INPUT); // Setze den Echo-Pin als Eingang
Serial.begin(9600); // Starte die serielle Kommunikation zur Fehlerbehebung
}
void loop() {
long distance = measureDistance(); // Ruft die Funktion zur Distanzmessung auf
Serial.println(distance);
if (distance > 2 && distance < 10) { // Wenn die Distanz zwischen 2 und 10 cm liegt
digitalWrite(PUMP_PIN, HIGH); // Schalte die Pumpe ein
delay(500);
digitalWrite(PUMP_PIN, LOW); // Schalte die Pumpe aus
delay(2000);
} else {
digitalWrite(PUMP_PIN, LOW); // Schalte die Pumpe aus
}
delay(100); // Verzögerung zwischen den Messungen
}
// Funktion zum Auslesen der Sensordaten und Berechnung der Entfernung
long measureDistance() {
digitalWrite(TRIGGER_PIN, LOW); // Stelle sicher, dass der Trig-Pin vor einem Puls auf LOW ist
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH); // Sende einen hohen Puls
delayMicroseconds(10); // Pulsdauer von 10 Mikrosekunden
digitalWrite(TRIGGER_PIN, LOW); // Beende den hohen Puls
long duration = pulseIn(ECHO_PIN, HIGH); // Messe die Dauer des hohen Pegels am Echo-Pin
long distance = duration * 0.034 / 2; // Berechne die Entfernung (in cm)
return distance;
}
Denke schließlich daran, deinen Code zu speichern und deinen Arbeitsplatz aufzuräumen.
Zusammenfassung
In der heutigen Lektion haben wir erfolgreich einen automatischen Seifenspender gebaut und programmiert. Wir haben den Einsatz von Ultraschallsensoren zur Erkennung von Annäherungen untersucht und gelernt, wie man eine Wasserpumpe über Arduino-Programmierung steuert. Die erworbenen Fähigkeiten erweitern nicht nur dein Verständnis von elektronischen Schaltungen, sondern eröffnen auch eine Vielzahl von Möglichkeiten für zukünftige Projekte.