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!
Smarter Mülleimer
Dies ist ein Arduino-Code, der entwickelt wurde, um einen intelligenten Mülleimer zu steuern. Wenn sich ein Objekt in einem Bereich von 20 Zentimetern vor dem Mülleimer befindet, öffnet sich der Deckel automatisch. Dieses Projekt nutzt einen SG90-Servomotor und einen HC-SR04-Ultraschall-Entfernungssensor.
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 |
ARTIKEL IN DIESEM KIT |
LINK |
|---|---|---|
Elite Explorer Kit |
300+ |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENVORSTELLUNG |
KAUF-LINK |
|---|---|
- |
|
Verdrahtung
Schaltplan
Code
Bemerkung
Sie können die Datei
07_smart_trash_can.inodirekt unter dem Pfadelite-explorer-kit-main\fun_project\07_smart_trash_canöffnen.Oder kopieren Sie diesen Code in die Arduino IDE.
1/*
2 This is an Arduino code for a smart trash can that automatically opens its lid when an object comes within 30cm of it.
3
4 This Arduino code controls an SG90 servo motor based on readings from an ultrasonic distance sensor.
5 The distance is measured three times, and the average is computed. If the averaged distance is less
6 than or equal to 20, the servo rotates to an open angle of 180 degrees; otherwise, it returns to a
7 closed position of 0 degrees after a one-second delay.
8
9 Board: Arduino Uno R4 (or R3)
10 Component: Servo motor and Ultrasonic distance Sensor
11*/
12
13#include <Servo.h>
14
15// Set up the servo motor parameters
16Servo servo;
17const int servoPin = 9;
18const int openAngle = 0;
19const int closeAngle = 90;
20
21// Set up the ultrasonic sensor parameters
22const int trigPin = 5;
23const int echoPin = 6;
24long distance, averageDistance;
25long averDist[3];
26
27// Distance threshold in centimeters
28const int distanceThreshold = 20;
29
30void setup() {
31 // Initialize serial communication with the computer at 9600 baud rate
32 Serial.begin(9600);
33
34 // Configure the trigger and echo pins of the ultrasonic sensor
35 pinMode(trigPin, OUTPUT);
36 pinMode(echoPin, INPUT);
37
38 // Attach the servo to its control pin and set its initial position
39 servo.attach(servoPin);
40 servo.write(closeAngle);
41 delay(100);
42 servo.detach(); // Detach the servo to save power when not in use
43}
44
45void loop() {
46 // Measure the distance three times
47 for (int i = 0; i <= 2; i++) {
48 distance = readDistance();
49 averDist[i] = distance;
50 delay(10);
51 }
52
53 // Calculate the average distance
54 averageDistance = (averDist[0] + averDist[1] + averDist[2]) / 3;
55 Serial.println(averageDistance);
56
57 // Control the servo based on the averaged distance
58 if (averageDistance <= distanceThreshold) {
59 servo.attach(servoPin); // Reattach the servo before sending a command
60 delay(1);
61 servo.write(openAngle); // Rotate the servo to the open position
62 delay(3500);
63 } else {
64 servo.write(closeAngle); // Rotate the servo back to the closed position
65 delay(1000);
66 servo.detach(); // Detach the servo to save power when not in use
67 }
68}
69
70// Function to read the sensor data and calculate the distance
71float readDistance() {
72 // Send a pulse on the trigger pin of the ultrasonic sensor
73 digitalWrite(trigPin, LOW);
74 delayMicroseconds(2);
75 digitalWrite(trigPin, HIGH);
76 delayMicroseconds(10);
77 digitalWrite(trigPin, LOW);
78
79 // Measure the pulse width of the echo pin and calculate the distance value
80 float distance = pulseIn(echoPin, HIGH) / 58.00; // Formula: (340m/s * 1us) / 2
81 return distance;
82}
Wie funktioniert des?
Hier ist eine schrittweise Erklärung des Codes:
Bibliotheken importieren und Konstanten/Variablen definieren:
Die Bibliothek
Servo.hwird importiert, um den SG90-Servomotor zu steuern. Parameter für den Servomotor, Ultraschallsensor und andere erforderliche Konstanten und Variablen werden definiert.setup():Initialisieren Sie die serielle Kommunikation mit dem Computer mit einer Baudrate von 9600. Konfigurieren Sie die Trigger- und Echopins des Ultraschallsensors. Befestigen Sie den Servomotor an seinem Steuerpin und setzen Sie seine Anfangsposition auf den geschlossenen Winkel. Nachdem der Winkel eingestellt wurde, wird der Servomotor abgetrennt, um Energie zu sparen.
loop():Messen Sie die Entfernung dreimal und speichern Sie die Werte jeder Messung. Berechnen Sie die durchschnittliche Entfernung aus den drei Messungen. Wenn die durchschnittliche Entfernung weniger als oder gleich 20 Zentimetern (definierter Abstandsschwellenwert) beträgt, dreht sich der Servomotor auf den offenen Winkel (0 Grad). Andernfalls kehrt der Servomotor nach einer einsekündigen Verzögerung in die geschlossene Position (90 Grad) zurück. Der Servomotor wird abgetrennt, wenn er nicht verwendet wird, um Energie zu sparen.
readDistance():Senden Sie einen Impuls an den Triggerpin des Ultraschallsensors. Messen Sie die Impulsbreite des Echopins und berechnen Sie den Entfernungswert. Diese Berechnung verwendet die Schallgeschwindigkeit in der Luft, um die Entfernung basierend auf der Pulsdauer zu berechnen.