Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino and ESP32-Based Smart Waste Sorting System with Color Detection and Servo Control

View and Edit Project In Cirkit DesignerImage of Arduino and ESP32-Based Smart Waste Sorting System with Color Detection and Servo Control

Circuit Documentation

Summary

This circuit involves an Arduino UNO and an ESP32 microcontroller, interfacing with various sensors and actuators. The Arduino UNO is primarily responsible for controlling a TCS230 color sensor and multiple servos, while the ESP32 handles ultrasonic sensors. The circuit is designed to detect different types of waste based on color and sort them accordingly using servos.

Component List

Arduino UNO

ESP32

Ultrasonic Sensor

Servo

TCS230

RAIN SENSOR

HC-SR501 PIR motion sensor

MQ135

Wiring Details

Arduino UNO

ESP32

Ultrasonic Sensor

Servo

TCS230

RAIN SENSOR

HC-SR501 PIR motion sensor

MQ135

Documented Code

// Définir les broches utilisées pour le TCS3200
#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define OUT 6
#define LED 7 // LED pour éclairage

// Définir la broche du servo moteur
#include <Servo.h>
Servo myservo;  // Crée un objet pour contrôler le servo

void setup() {
  // Initialisation des broches pour le capteur
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(LED, OUTPUT); // LED pour éclairer l'objet
  pinMode(OUT, INPUT);

  // Commencer la communication série pour afficher les résultats
  Serial.begin(9600);

  // Initialisation du servo
  myservo.attach(9); // Broche D9 pour le servo

  // Allumer la LED pour éclairer l'objet
  digitalWrite(LED, HIGH); // Activer l'éclairage LED
}

void loop() {
  // Sélection des filtres pour mesurer les couleurs
  // Pour mesurer la couleur rouge
  digitalWrite(S2, LOW); 
  digitalWrite(S3, LOW);  
  int redValue = pulseIn(OUT, HIGH); // Mesure du temps en HIGH sur la sortie

  // Pour mesurer la couleur verte
  digitalWrite(S2, HIGH); 
  digitalWrite(S3, HIGH); 
  int greenValue = pulseIn(OUT, HIGH);

  // Pour mesurer la couleur bleue
  digitalWrite(S2, LOW);  
  digitalWrite(S3, HIGH); 
  int blueValue = pulseIn(OUT, HIGH);

  // Affichage des valeurs des couleurs sur le moniteur série
  Serial.print("Rouge : ");
  Serial.print(redValue);
  Serial.print("\tVert : ");
  Serial.print(greenValue);
  Serial.print("\tBleu : ");
  Serial.println(blueValue);

  // Identification du type de déchet en fonction des couleurs
  if (redValue > greenValue && redValue > blueValue) {
    Serial.println("Déchet plastique détecté - Couleur : Rouge");
    // Action : Ouvrir le compartiment plastique
    myservo.write(0); // Position du servo pour le plastique
    delay(1000); // Attendre que le compartiment s'ouvre
    myservo.write(90); // Refermer après une seconde
  } else if (greenValue > redValue && greenValue > blueValue) {
    Serial.println("Déchet verre détecté - Couleur : Vert");
    // Action : Ouvrir le compartiment verre
    myservo.write(45); // Position du servo pour le verre
    delay(1000);
    myservo.write(90); // Refermer après une seconde
  } else if (blueValue > redValue && blueValue > greenValue) {
    Serial.println("Déchet papier détecté - Couleur : Bleu");
    // Action : Ouvrir le compartiment papier
    myservo.write(135); // Position du servo pour le papier
    delay(1000);
    myservo.write(90); // Refermer après une seconde
  } else {
    Serial.println("Autre déchet - Couleur indéterminée");
    // Action : Refuser ou stocker dans un compartiment