Nota

Ciao, benvenuto nella Community SunFounder per appassionati di Raspberry Pi, Arduino ed ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti?

  • Supporto Esperto: Risolvi problemi post-vendita e difficoltà tecniche con l’aiuto del nostro team e della community.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Accedi in anteprima agli annunci dei nuovi prodotti e ai contenuti riservati.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Giveaway Festivi: Partecipa a concorsi e iniziative promozionali durante le festività.

👉 Pronto per esplorare e creare con noi? Clicca su [qui] ed entra oggi stesso!

Lezione 37: Cestino Intelligente

Questo progetto si basa sul concetto di cestino intelligente. L’obiettivo principale è quello di far aprire automaticamente il coperchio del cestino quando un oggetto si avvicina entro una distanza predefinita (in questo caso 20 cm). Questa funzionalità viene realizzata utilizzando un sensore di distanza a ultrasuoni abbinato a un servomotore. La distanza tra l’oggetto e il sensore viene monitorata continuamente. Se l’oggetto è abbastanza vicino, il servomotore viene attivato per aprire il coperchio.

Componenti Necessari

In questo progetto abbiamo bisogno dei seguenti componenti.

È sicuramente più comodo acquistare un kit completo, ecco il link:

Nome

COMPONENTI INCLUSI NEL KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

Puoi anche acquistarli singolarmente tramite i seguenti link:

Descrizione Componente

Link per l’acquisto

Arduino UNO R3 o R4

ACQUISTA

Modulo Sensore Ultrasuoni (HC-SR04)

ACQUISTA

Servomotore (SG90)

ACQUISTA

Breadboard

ACQUISTA

Collegamenti

../_images/Lesson_37_smart_trashcan_uno_bb.png

Codice

Analisi del Codice

Il progetto si basa sul monitoraggio in tempo reale della distanza tra un oggetto e il cestino. Un sensore a ultrasuoni misura costantemente questa distanza e, se un oggetto si avvicina entro i 20 cm, il cestino lo interpreta come un intento a gettare un rifiuto, aprendo automaticamente il coperchio. Questa automazione conferisce intelligenza e praticità a un comune cestino.

  1. Inizializzazione e Dichiarazione delle Variabili

    In questa sezione includiamo la libreria Servo e definiamo le costanti e variabili da utilizzare. Vengono dichiarati i pin per il servo e per il sensore a ultrasuoni. Inoltre, è presente un array averDist per memorizzare tre misurazioni della distanza.

    #include <Servo.h>
    Servo servo;
    const int servoPin = 9;
    const int openAngle = 0;
    const int closeAngle = 90;
    const int trigPin = 6;
    const int echoPin = 5;
    long distance, averageDistance;
    long averDist[3];
    const int distanceThreshold = 20;
    
  2. Funzione setup()

    La funzione setup() inizializza la comunicazione seriale, configura i pin del sensore a ultrasuoni e imposta il servo nella posizione iniziale (coperchio chiuso).

    void setup() {
      Serial.begin(9600);
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
      servo.attach(servoPin);
      servo.write(closeAngle);
      delay(100);
    }
    
  3. Funzione loop()

    La funzione loop() misura continuamente la distanza, calcola la media delle letture e decide se aprire o chiudere il coperchio del cestino in base alla distanza media rilevata.

    void loop() {
      for (int i = 0; i <= 2; i++) {
        distance = readDistance();
        averDist[i] = distance;
        delay(10);
      }
      averageDistance = (averDist[0] + averDist[1] + averDist[2]) / 3;
      Serial.println(averageDistance);
      if (averageDistance <= distanceThreshold) {
        servo.write(openAngle);
        delay(3500);
      } else {
        servo.write(closeAngle);
        delay(1000);
      }
    }
    
  4. Funzione di Lettura della Distanza

    La funzione readDistance() si occupa della comunicazione con il sensore a ultrasuoni. Invia un impulso e misura il tempo necessario per ricevere l’eco, calcolando così la distanza dall’oggetto.

    Puoi fare riferimento al Principio di funzionamento per maggiori dettagli sul principio di funzionamento.

    float readDistance() {
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      float distance = pulseIn(echoPin, HIGH) / 58.00;
      return distance;
    }