Robot autonome de collecte et de tri des déchets alimenté par l’IA

AI Powered Autonomous Waste Collecting and Sorting Robot

Robot autonome de collecte et de tri des déchets alimenté par l'IA

Nom du composant

Quantité

Fiche technique/Lien

Caméra programmable MOMENTO d’Adafruit

1

MCU de nœud ESP32 à 30 broches

1

MG90S

4

Batterie Li-Ion rechargeable 18650

3

#include 
#include 

// Replace with your NodeMCU MAC address
uint8_t receiverMAC[] = {0x24, 0x6F, 0x28, 0xAA, 0xBB, 0xCC};

typedef struct {
int wasteType;  // 1=Wet, 2=Dry, 3=Metal
} MessageData;

MessageData data;

void setup() {
Serial.begin(115200);

WiFi.mode(WIFI_STA);

if (esp_now_init() != ESP_OK) {
 Serial.println("ESP-NOW Init Failed");
 return;
}

esp_now_peer_info_t peerInfo = {};
memcpy(peerInfo.peer_addr, receiverMAC, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;

esp_now_add_peer(&peerInfo);

Serial.println("Transmitter Ready");
}

void loop() {


int aiResult = 1;

data.wasteType = aiResult;

esp_now_send(receiverMAC, (uint8_t *) &data, sizeof(data));

Serial.print("Sent Waste Type: ");
Serial.println(aiResult);

delay(3000);
}


#include 
#include 
#include 

// Servo pins
#define BASE_SERVO 13
#define SHOULDER_SERVO 12
#define ELBOW_SERVO 14
#define GRIPPER_SERVO 27

Servo baseServo, shoulderServo, elbowServo, gripperServo;

typedef struct {
int wasteType;
} MessageData;

MessageData receivedData;

void onReceive(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&receivedData, incomingData, sizeof(receivedData));

Serial.print("Received Waste Type: ");
Serial.println(receivedData.wasteType);

if (receivedData.wasteType == 1) moveToWet();
else if (receivedData.wasteType == 2) moveToDry();
else if (receivedData.wasteType == 3) moveToMetal();
}

void setup() {
Serial.begin(115200);

WiFi.mode(WIFI_STA);

Serial.print("Receiver MAC: ");
Serial.println(WiFi.macAddress());

if (esp_now_init() != ESP_OK) {
 Serial.println("ESP-NOW Init Failed");
 return;
}

esp_now_register_recv_cb(onReceive);

baseServo.attach(BASE_SERVO);
shoulderServo.attach(SHOULDER_SERVO);
elbowServo.attach(ELBOW_SERVO);
gripperServo.attach(GRIPPER_SERVO);

Serial.println("Receiver Ready");
}

void loop() {
// Nothing here, everything handled in onReceive()
}

//  Movement Functions

void pickObject() {
gripperServo.write(30);  // Open
delay(500);
shoulderServo.write(60); // Lower arm
delay(1000);
gripperServo.write(80);  // Close
delay(500);
shoulderServo.write(20); // Lift
delay(1000);
}

void moveToWet() {
pickObject();
baseServo.write(30);  // Wet bin position
delay(1000);
gripperServo.write(30); // Release
}

void moveToDry() {
pickObject();
baseServo.write(90);  // Dry bin
delay(1000);
gripperServo.write(30);
}

void moveToMetal() {
pickObject();
baseServo.write(150); // Metal bin
delay(1000);
gripperServo.write(30);
}

Retrouvez l’histoire de Raspberry Pi dans cette vidéo :

Youtube video