
|
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 :

