Conception d'une Station de Triage & Bras Robotisé
Système automatisé complet de tri de balles associant un Robot mobile Zumo (ESP32) et un Bras Robotisé (WAGO CC100 / Servos Dynamixel RS485)
1. Présentation du Système de Triage Automatisé
Présentation du Projet E&R
Ce projet d'Ingénierie & Recherche (E&R) réalisé à l'IUT de Cachan (2025/2026) par l'équipe d'Emmanuel Coignard vise à concevoir une cellule de tri industrielle totalement autonome pour balles de ping-pong (rouges, vertes, bleues). Le système est découpé en deux sous-ensembles complémentaires interconnectés : un Robot mobile Zumo à chenilles chargé de naviguer sur la piste et transporter les balles, et un Bras Robotisé articulé chargé de saisir, trier par couleur et déposer les balles dans les réservoirs dédiés.
L'architecture combine le contrôle embarqué temps réel sur microcontrôleur ESP32 (programmé en C++ sous PlatformIO / Arduino Framework) pour le robot mobile et un automate industriel WAGO CC100 relié à un capteur de couleur I2C U009 et à des servomoteurs industriels Dynamixel (avec pont de communication RS485 à TTL) pour le bras manipulateur.
Robot Mobile Zumo
Robot à chenilles fourni par l'IUT, équipé de 2 moteurs CC à pont en H, d'un support de balle imprimé en 3D sous SolidWorks et de capteurs CNY70.
Bras Robotisé 3 Axes + Pince
Bras articulé mû par 3 servomoteurs Dynamixel et une pince de préhension (Gripper), assurant le rangement dans le réservoir de stockage.
Armoire de Commande & Câblage
Intégration du coffret électrique avec automate WAGO CC100, disjoncteur Schneider, convertisseurs 230V/24V/12V/5V Mean Well et pupitre IHM.
2. Architecture Système, PCB KiCad & Câblage QElectroTech
Diagramme Synoptique - Robot Zumo (ESP32)
Alimenté par 4 piles AA (5VDC), le PCB principal basé sur l'ESP32 reçoit les signaux analogiques de la carte 4x capteurs CNY70 et du capteur de présence de balle TOR, puis pilote le Pont en H (H-Bridge) par signaux PWM pour ajuster les moteurs gauche et droit.
Diagramme Synoptique - Armoire & Bras Robotisé (WAGO CC100)
Alimentation secteur 230V convertie en 24V, 12V et 5V par modules Mean Well. L'ESP32 traite l'analyse de couleur via le capteur I2C U009 et transmet les états aux entrées analogiques du WAGO CC100, qui contrôle ensuite le bus RS485 des servos Dynamixel via un pont de communication DXL.
Carte Principale Zumo ESP32 (KiCad)
Conception du PCB sous KiCad avec carte de développement ESP32, régulateur 7805, boutons poussoirs IHM, potentiomètre et connecteurs Omnimate.
Carte Interface Capteur de Couleur (KiCad)
PCB développé sous KiCad hébergeant l'ESP32 dédié au traitement d'image/couleur I2C et la conversion vers les entrées d'automate WAGO.
3. Spécifications Techniques & Code C++ / PlatformIO
Développement sous Visual Studio Code avec PlatformIO (Framework Arduino C++). Algorithme de suivi de ligne autonome par réflexion infrarouge (4x CNY70) et régulation de vitesse.
Conception sous SolidWorks et impression 3D FDM d'un entonnoir de réception de balle sur le châssis Zumo, intégrant un capteur optique d'embouchure.
3 servomoteurs à communication série et pont RS485 vers TTL assurant la rotation de base, l'élévation d'épaule/coude et l'ouverture/fermeture de la pince (Gripper).
Analyse spectrale via le capteur I2C U009 décodée en 4 combinaisons logiques (Pas de balle = 00, Verte = 10, Bleue = 01, Rouge = 11) envoyées au WAGO CC100.
Code Source Embarqué ESP32 / PlatformIO (C++)
#include <Arduino.h>
// Pin Definitions for Zumo ESP32
#define SENSOR_1_PIN 32
#define SENSOR_2_PIN 33
#define SENSOR_3_PIN 34
#define SENSOR_4_PIN 35
#define BALL_SENSOR_PIN 25
#define MOTOR_LEFT_PWM 18
#define MOTOR_RIGHT_PWM 19
#define MOTOR_LEFT_DIR 21
#define MOTOR_RIGHT_DIR 22
int sensor_values[4];
bool ball_present = false;
void setup() {
Serial.begin(115200);
pinMode(SENSOR_1_PIN, INPUT);
pinMode(SENSOR_2_PIN, INPUT);
pinMode(SENSOR_3_PIN, INPUT);
pinMode(SENSOR_4_PIN, INPUT);
pinMode(BALL_SENSOR_PIN, INPUT_PULLUP);
pinMode(MOTOR_LEFT_PWM, OUTPUT);
pinMode(MOTOR_RIGHT_PWM, OUTPUT);
pinMode(MOTOR_LEFT_DIR, OUTPUT);
pinMode(MOTOR_RIGHT_DIR, OUTPUT);
Serial.println("ESP32 Zumo Robot Initialized.");
}
void read_sensors() {
sensor_values[0] = analogRead(SENSOR_1_PIN);
sensor_values[1] = analogRead(SENSOR_2_PIN);
sensor_values[2] = analogRead(SENSOR_3_PIN);
sensor_values[3] = analogRead(SENSOR_4_PIN);
ball_present = (digitalRead(BALL_SENSOR_PIN) == LOW);
}
void loop() {
read_sensors();
// Differential Line Following Algorithm
int error = (sensor_values[1] - sensor_values[2]);
int base_speed = 180;
int kp = 2;
int left_speed = constrain(base_speed + (kp * error), 0, 255);
int right_speed = constrain(base_speed - (kp * error), 0, 255);
digitalWrite(MOTOR_LEFT_DIR, HIGH);
digitalWrite(MOTOR_RIGHT_DIR, HIGH);
analogWrite(MOTOR_LEFT_PWM, left_speed);
analogWrite(MOTOR_RIGHT_PWM, right_speed);
if (ball_present) {
// Transporting ball to robotic arm sorting area
Serial.println("Ball Detected - Executing Transfer Sequence");
}
}