Nota
Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 con altri appassionati.
Perché unirsi?
Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni l’accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.
Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni e Concorsi Festivi: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!
Pattumiera Intelligente
Questo codice Arduino è progettato per controllare una pattumiera intelligente. Quando un oggetto è entro 20 centimetri di distanza davanti alla pattumiera, il coperchio si apre automaticamente. Questo progetto utilizza un servo motore SG90 e un sensore di distanza ultrasonico HC-SR04.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Elite Explorer Kit |
300+ |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTI |
LINK ACQUISTO |
|---|---|
- |
|
Collegamenti
Schema Elettrico
Codice
Nota
Puoi aprire il file
07_smart_trash_can.inonel percorsoelite-explorer-kit-main\fun_project\07_smart_trash_candirettamente.Oppure copia questo codice nell’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}
Come funziona?
Ecco una spiegazione passo-passo del codice:
Importa Librerie e Definisci Costanti/Variabili:
La libreria
Servo.hviene importata per controllare il servo motore SG90. I parametri per il servo motore, il sensore ultrasonico e altre costanti e variabili necessarie sono definiti.setup():Inizializza la comunicazione seriale con il computer a un baud rate di 9600. Configura i pin di trigger ed echo del sensore ultrasonico. Collega il servo motore al suo pin di controllo e imposta la sua posizione iniziale all’angolo di chiusura. Dopo aver impostato l’angolo, il servo motore viene disconnesso per risparmiare energia.
loop():Misura la distanza tre volte e memorizza i valori di ciascuna misurazione. Calcola la distanza media dalle tre misurazioni. Se la distanza media è minore o uguale a 20 centimetri (soglia di distanza definita), il servo motore ruota all’angolo di apertura (0 gradi). Altrimenti, il servo motore ritorna alla posizione di chiusura (90 gradi) dopo un ritardo di un secondo. Il servo motore viene disconnesso quando non in uso per conservare energia.
readDistance():Invia un impulso al pin di trigger del sensore ultrasonico. Misura la durata dell’impulso del pin di echo e calcola il valore della distanza. Questo calcolo utilizza la velocità del suono nell’aria per determinare la distanza basata sul tempo dell’impulso.