Volver a Proyectos
Projet E&R 2025/2026 • IUT de Cachan (GEII)

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)

Projet E&R 2025/2026 ESP32 (PlatformIO) WAGO CC100 PLC Bras Robotisé 3 Servos Pont RS485-TTL Dynamixel Capteur de Couleur U009 (I2C) KiCad PCBs Impression 3D SolidWorks

1. Présentation du Système de Triage Automatisé

Station de Triage Globale - IUT de Cachan

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.

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.

Block Diagram Robot Zumo

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.

Block Diagram Bras Robotisé WAGO

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.

PCB Principale Zumo ESP32 KiCad

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.

PCB Capteur Couleur ESP32 KiCad

3. Spécifications Techniques & Code C++ / PlatformIO

Microcontrôleur ESP32 & 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.

Support de Balle SolidWorks 3D

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.

Servomoteurs Industriels Dynamixel

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).

Discrimination Optique de Couleur

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++)

zumo_main_control.cpp PlatformIO • Arduino C++ Framework
#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");
    }
}
Télécharger le CV (PDF)