Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!
Lektion 35: Intelligenter Mülleimer
Dieses Projekt dreht sich um das Konzept eines intelligenten Mülleimers. Das Hauptziel besteht darin, dass sich der Deckel des Mülleimers automatisch öffnet, wenn sich ein Objekt auf eine festgelegte Entfernung (in diesem Fall 20 cm) nähert. Diese Funktion wird durch die Verwendung eines Ultraschallsensors in Kombination mit einem Servomotor erreicht. Der Abstand zwischen dem Objekt und dem Sensor wird kontinuierlich gemessen. Wenn das Objekt nah genug ist, wird der Servomotor ausgelöst, um den Deckel zu öffnen.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ITEMS IN THIS KIT |
LINK |
|---|---|---|
Universal Maker Sensor Kit |
94 |
Sie können sie auch einzeln über die unten stehenden Links kaufen.
Component Introduction |
Purchase Link |
|---|---|
ESP32 & Development Board |
|
Verkabelung
Code
Code-Analyse
Das Projekt basiert auf der Echtzeitüberwachung des Abstands zwischen einem Objekt und einem Mülleimer. Ein Ultraschallsensor misst diesen Abstand kontinuierlich, und wenn sich ein Objekt auf 20 cm nähert, interpretiert der Mülleimer dies als Absicht, Abfall zu entsorgen, und öffnet automatisch den Deckel. Diese Automatisierung verleiht einem herkömmlichen Mülleimer Intelligenz und Komfort.
Initiale Einrichtung und Variablendeklaration
Hier binden wir die Bibliothek
ESP32Servoein und definieren die Konstanten und Variablen, die wir verwenden werden. Die Pins für das Servo und den Ultraschallsensor werden deklariert. Wir haben auch ein ArrayaverDist, um die drei Distanzmessungen zu speichern.#include <ESP32Servo.h> // Set up the servo motor parameters Servo servo; const int servoPin = 27; const int openAngle = 0; const int closeAngle = 90; // Define the minimum and maximum pulse widths for the servo const int minPulseWidth = 500; // 0.5 ms const int maxPulseWidth = 2500; // 2.5 ms // Set up the ultrasonic sensor parameters const int trigPin = 26; const int echoPin = 25; long distance, averageDistance; long averDist[3]; // Distance threshold in centimeters const int distanceThreshold = 20;
Funktion
setup()Die Funktion
setup()initialisiert die serielle Kommunikation, konfiguriert die Pins des Ultraschallsensors und setzt die Ausgangsposition des Servos auf die geschlossene Position.void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); servo.attach(servoPin); servo.write(closeAngle); delay(100); }
Funktion
loop()Die Funktion
loop()ist dafür verantwortlich, kontinuierlich den Abstand zu messen, den Durchschnitt zu berechnen und dann zu entscheiden, ob der Deckel des Mülleimers basierend auf diesem Durchschnittsabstand geöffnet oder geschlossen wird.void loop() { // Measure the distance three times for (int i = 0; i <= 2; i++) { distance = readDistance(); averDist[i] = distance; delay(10); } // Calculate the average distance averageDistance = (averDist[0] + averDist[1] + averDist[2]) / 3; Serial.println(averageDistance); // Control the servo based on the averaged distance if (averageDistance <= distanceThreshold) { servo.attach(servoPin); // Reattach the servo before sending a command delay(1); servo.write(openAngle); // Rotate the servo to the open position delay(3500); } else { servo.write(closeAngle); // Rotate the servo back to the closed position delay(1000); servo.detach(); // Detach the servo to save power when not in use } }
Funktion zur Abstandsmessung
Diese Funktion,
readDistance(), interagiert tatsächlich mit dem Ultraschallsensor. Sie sendet einen Impuls und wartet auf ein Echo. Die Zeit, die für das Echo benötigt wird, wird dann verwendet, um den Abstand zwischen dem Sensor und einem Objekt davor zu berechnen.Sie können sich auf das Funktionsprinzip des Ultraschallsensors beziehen.
float readDistance() { // Send a pulse on the trigger pin of the ultrasonic sensor digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Measure the pulse width of the echo pin and calculate the distance value float distance = pulseIn(echoPin, HIGH) / 58.00; // Formula: (340m/s * 1us) / 2 return distance; }
Servo-Schreibfunktion
Diese Funktion ordnet den Winkelwert der Pulsbreite zu und ruft die Funktion
writeMicroseconds(pulseWidth)auf, um das Servo auf einen bestimmten Winkel zu bewegen.// Function to make the servo work void servoWrite(int angle){ int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth); servo.writeMicroseconds(pulseWidth); }