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

Arduino UNO-Based Waste Sorting System with Dual Servo Control and Metal Detection

View and Edit Project In Cirkit DesignerImage of Arduino UNO-Based Waste Sorting System with Dual Servo Control and Metal Detection

Circuit Documentation

Summary

The circuit is designed to interface with various sensors and actuators using an Arduino UNO microcontroller. It includes metal detection sensors, a capacitive sensor, RGB LEDs (common cathode), resistors, and servo motors. The circuit is likely used for sorting materials based on metal content and possibly other parameters, controlling the position of bins with servo motors, and indicating status or categories with RGB LEDs.

Component List

Microcontroller

Sensors

Actuators

Indicators

Passive Components

Wiring Details

Arduino UNO

Metal Detection Sensors

Capacitive Sensor

Servo Motors

RGB LEDs (Common Cathode)

Documented Code

/// include library

#include <Servo.h> ///servo motor library

// Pin Definitions

//plastic bin pin
#define redpin 5
#define bluepin 6
#define greenpin 7
#define plasticsensor A0
#define metalsensor A1
#define IR_plastic A3

//metal bin pin definitions
#define redpin_M 8
#define bluepin_M 9
#define greenpin_M 10
#define metalsensor_M A2
#define IR_metal A3

Servo myservo; //create servo object to control a servo on plastic bin
Servo myservo_M; // create servo object to control a servo on metal bin

int pos = 165; // default servo position of plastic bin
int pos_M = 158; // default servo position of metal bin

void setup() {

    myservo.attach(11); // attaches the plastic bin servo on pin 11 to the servo object
    myservo_M.attach(12); // attaches the metal bin servo on pin 12 to the servo object
    //RGB LED on plastic bin
    pinMode(redpin,OUTPUT);
    pinMode(bluepin,OUTPUT);
    pinMode(greenpin,OUTPUT);
    //RGB LED on metal bin
    pinMode(redpin_M,OUTPUT);
    pinMode(bluepin_M,OUTPUT);
    pinMode(greenpin_M,OUTPUT);
    //Create sensor values in pull up condition
    pinMode(plasticsensor,INPUT_PULLUP);
    pinMode(metalsensor,INPUT_PULLUP);
    pinMode(metalsensor_M,INPUT_PULLUP);
    //start serial monitor
    Serial.begin(9600);
    //Set RGB LED on default values (white)
    analogWrite(redpin,255);
    analogWrite(bluepin,255);
    analogWrite(greenpin,255);
    analogWrite(redpin_M,255);
    analogWrite(bluepin_M,255);
    analogWrite(greenpin_M,255);
}

void loop() {

    int sensor_read_plastic = digitalRead(plasticsensor);
    int sensor_read_metal = digitalRead(metalsensor);
    int sensor_read_metal2 = digitalRead(metalsensor_M);
    Serial.println("plastic sensor");
    Serial.println(sensor_read_plastic);
    Serial.println("metal sensor");
    Serial.println(sensor_read_metal);
    Serial.println(sensor_read_metal2);

    ///Check if the trash bin is full

    //Plastic bin
    if((sensor_read_plastic == 0) && (sensor_read_metal != 1)){
        for (pos = 160; pos >= 90; pos -= 1) { // goes from 160 degrees to 0 degrees
            myservo.write(pos); // tell servo to go to position in variable 'pos'
            delay(1); // waits 1ms for the servo to reach the position
        }
        analogWrite(redpin,255);
        analogWrite(bluepin,0);
        analogWrite(greenpin,255);
        delay(2500);
        for (pos = 90; pos <= 160; pos += 1) { // goes from 90 degrees to 160 degrees
             myservo.write(pos); // tell servo to go to position in variable 'pos'
             delay(1); // waits 1ms for the servo to reach the position
        }
        analogWrite(redpin,0);
        analogWrite(bluepin,0);
        analogWrite(greenpin,0);
    }
    else{
        // keep the door closed
        myservo.write(pos);

        analogWrite(redpin,255);
        analogWrite(bluepin,255);
        analogWrite(greenpin,255);
    }

    //Metal bin
    if(sensor_read_metal2 == 1){
        for(pos_M = 160; pos_M >= 90; pos_M -= 1) { // goes from 160 degrees to 90 degrees 
           myservo_M.write(pos_M); // tell servo to go to position in variable 'pos'
           delay(1); // waits 1ms for the servo to reach the position 
        }
        analogWrite(redpin_M,255);
        analogWrite(bluepin_M,0);
        analogWrite(greenpin_M,255);
        delay(2500);
        for (pos_M = 90; pos_M <= 160; pos_M += 1) { // goes from 90 degrees to 160 degrees
             myservo_M.write(pos_M); // tell servo to go to position in variable 'pos'
             delay(1); // wait 1ms for the servo to reach the position
        }
        analogWrite(redpin_M,0);
        analogWrite(bluepin_M,0);
        analogWrite(greenpin_M,0);
    }
    else{
        // keep the door closed 
        myservo_M.write(pos_M);

        analogWrite(redpin_M,255);
        analogWrite(bluepin_M,255);
        analogWrite(greenpin_M,255);
    }
}

This code is designed to control a sorting system with two bins, one for plastic and one for metal. It uses servo motors to open and close the bins, metal detection sensors to determine the type of material, and RGB LEDs to indicate the status. The code includes setup routines for the servos and LEDs, and a loop that reads sensor values, operates the servos, and sets the LED colors accordingly.