← Retour au portfolio

Projet n°6

Projet 6 – Poubelle intelligente (HC-SR04)

Cette poubelle intelligente avec Arduino HC-SR04 améliore l'hygiène et le recyclage en s'ouvrant automatiquement lorsque des déchets sont détectés. En outre, le capteur à ultrasons (HC-SR04) détecte avec précision les déchets à une distance minimale de 15 cm, lequel déclenche l'ouverture du bac à l'aide d'un servomoteur. qui ouvre le couvercle à angle droit (90°) pendant 5 secondes (le temps de jeter les déchets) avant de le fermer immédiatement.

J'ai décidé de réaliser ce projet en deux phases :

  1. D'abord, je vais tester le code sur une boîte en papier pour calculer l'angle et déterminer les matériaux nécessaires à la construction finale.
  2. Une fois terminé (pas encore fait), je vais implémenter le projet sur un vrai bin.

Exigences:

  • Arduino Uno ou ESP32
  • Batterie 5V
  • Capteur à ultrasons HC-SR504
  • Servomoteur
  • 7 fils
  • 1 boîte en papier (pour prototype)
  • De la colle (pour coller le papier)

1. Boîte en papier

1. Création de boîte

Pour créer la boîte, j'utiliserai un patreon que j'ai créé

Patron du boîtier en carton — visuel d’origine à réintégrer

2. Connexion

Nous devons connecter le servomoteur : Rouge -> 5V (sur Arduino),Jaune -> Pin DATA (n'importe lequel), Brun -> GND (sur Arduino).

Et le HC-SR04 : TRIGONOMÉTRIE -> Broche 5, ÉCHO -> Broche 6 (sur Arduino), 5V et GND connectés en conséquence.

3. Coder

Pour écrire le code, nous utiliserons le Ultrasonique bibliothèque pour aider de manière significative à utiliser le HC SR504 pour donner des informations et contrôler la plage de détection. et Servomoteur il suffit de contrôler le servo en donnant l'angle avec monservo.write(90). Pour finir il faut créer une boucle pour le compte à rebours de la poubelle (les 5 secondes entre chaque ouverture). Et j’ai décidé de faire une phase après un cycle où il faut attendre 10 secondes car c’est un peu bête d’ouvrir et rouvrir la poubelle dans un intervalle aussi court.

#include <Ultrasonic.h>
#include <Servo.h>

Ultrasonic ultrasonic(5, 6);  // TRIG = 5, ECHO = 6
Servo myservo;

const int openAngle = 90;
const int closeAngle = 0;
const int triggerDistance = 15;            //  Trigger by 15 cm
const unsigned long openDuration = 3000;  // 5 seconds
const unsigned long cooldownTime = 500;    // Wait before new open

bool isOpen = false;
bool ready = true;
unsigned long eventTime = 0;

void setup() {
  Serial.begin(9600);
  myservo.attach(9);
  myservo.write(closeAngle);
}

void loop() {
  int distance = getFilteredDistance();
  Serial.print("Distance (cm): ");
  Serial.println(distance);

  unsigned long now = millis();

  if (ready && !isOpen && distance <= triggerDistance) {
    myservo.write(openAngle);
    Serial.println("🔓 Open !");
    isOpen = true;
    ready = false;
    eventTime = now;
  }

  // Fermeture après 10 secondes
  if (isOpen && now - eventTime >= openDuration) {
    myservo.write(closeAngle);
    Serial.println("🔒 Lock.");
    isOpen = false;
    eventTime = now;  // Start cooldown
  }

  // Réarmement après cooldown
  if (!ready && !isOpen && now - eventTime >= cooldownTime) {
    ready = true;
    Serial.println("✅ Ready to open if a hand come.");
  }

  delay(100);
}

int getFilteredDistance() {
  int total = 0;
  int count = 0;
  for (int i = 0; i < 3; i++) {
    int d = ultrasonic.read();
    if (d > 0 && d < 100) {
      total += d;
      count++;
    }
    delay(20);
  }
  return (count > 0) ? total / count : 999;
}

4. Conclusion

La poubelle fonctionne très bien dans cette phase de prototype. La prochaine étape consistera à implémenter le même système sur une vraie benne grandeur nature pour tester ses performances dans des conditions pratiques.

Vous pouvez trouver un projet combinant LED, servo et joystick ici !