
MAIN PCB TOFS
prichert17/PAMI
Ce dépôt documente le projet PAMI (Petit Actionneur Motorisé Indépendant) sur lequel j'ai travaillé pendant un an, dans le cadre de la coupe Eurobot 2026.

Ce dépôt documente le projet PAMI (Petit Actionneur Motorisé Indépendant) sur lequel j'ai travaillé pendant un an, dans le cadre de la coupe Eurobot 2026.
PCB PAMI 2025-2026 is an open-source printed circuit board by prichert17, from the prichert17/PAMI repository on GitHub. It is a 2-layer board of 125 × 84 mm with 63 parts on 88 nets, routed with 402 tracks and 53 vias.
It is built around the CN3058E, HY2112-CB and TPS63000DRC, with the DMP1045U-7(ES), FS8205A and SS34 among its other parts. Its parts include 15 resistors, 12 capacitors, 12 connectors, 6 ICs and 6 diodes.
Ce dépôt documente le projet PAMI (Petit Actionneur Motorisé Indépendant) sur lequel j'ai travaillé pendant un an, dans le cadre de la coupe Eurobot 2026. Il centralise l'ensemble de la conception matérielle (deux PCB, structure mécanique) et logicielle du robot.
Légende : Photo du robot PAMI assemblé
Légende : Rendu 3D du robot (Fusion 360)
Pour mieux comprendre l'architecture du système, voici les trois éléments importants du dépôt :
PAMI_2026/ : Contient le code haut niveau qui est exécuté sur le microcontrôleur ESP32.Projects/Asservissement_G4/ : Contient tout le code de l'asservissement, de l'odométrie et le contrôle des moteurs. Ce code tourne sur la carte NUCLEO-G431KB (STM32).Projects/IHM_PAMI_2026.py : Une interface homme-machine (IHM) développée en Python qui permet de lire et visualiser en temps réel les coordonnées et l'état du PAMI lors des phases de tests.Le robot dispose de deux cartes électroniques (PCB). La partie bas niveau, gérée par le PCB principal s'occupe de l'alimentation générale et de la motricité du robot. Le PAMI est assez compact : ses dimensions finales sont de 10.5cm par 19cm avec ses bras repliés (et 24cm bras dépliés), ce qui a imposé des contraintes sur le routage du circuit et le choix des composants.
Le robot est alimenté par une unique cellule de batterie LiFePO4 au format 26650. Le circuit d'alimentation a subi plusieurs modifications suite à des problèmes rencontrés lors du développement :
La carte intègre un microcontrôleur STM32 (NUCLEO-G431KB) programmé en C++ pour gérer la dynamique temps-réel du robot. Un travail conséquent a été réalisé sur la fiabilité des déplacements et la prévention du patinage.
pami_com.h.
Légende : Schéma de l'architecture d'asservissement du STM32.
Voici la schématique électrique du PCB principal (Moteurs & Alimentation) montrant l'interconnexion entre la NUCLEO, les drivers moteurs, le circuit de charge de la batterie et le régulateur Buck-Boost :
Légende : Schématique détaillée du PCB d'alimentation
Légende : Routage du PCB d'alimentation
La seconde carte du robot embarque un ESP32. Ce microcontrôleur fait office de cerveau principal : il ne gère pas les moteurs principaux directement, mais s'occupe de la prise de décision, de la vision spatiale (capteurs ToF matriciels), de la gestion du temps de match et de l'interface utilisateur.
Pour garantir une réactivité maximale sans bloquer le système lors de la lecture des capteurs I2C (qui peut être lente), le code de l'ESP32 est architecturé autour du système d'exploitation temps réel FreeRTOS. Les tâches sont réparties sur les deux cœurs (Cores) physiques du processeur :
Task_Comms : Écoute en continu le port série UART pour ne rater aucune mise à jour de position venant du STM32. Permet aussi le debug lorsque branché à un PC.Task_Strategy : La machine à états principale du robot. Elle dicte les déplacements et gère le chronomètre du match.Task_Tofs : Gère le multiplexage et l'acquisition des données des 3 capteurs de distance matriciels sur le bus I2C.Task_IHM : Contrôle les animations de la LED d'état WS2812B et pilote les servomoteurs d'actionnement de fin de match.Le robot est équipé de 3 capteurs Time-of-Flight matriciels VL53L5CX (Centre, Gauche, Droite) configurés en résolution 8x8 zones à 15 Hz.
0x30, 0x31, 0x32) en utilisant les broches XSHUT (LPN), ce qui permet de tous les utiliser sur le même bus I2C à 400kHz.stopMotors()) via l'UART. Le robot se met en pause et reprend sa route de lui-même dès que l'obstacle disparaît.La logique de match est dictée par une machine à états :
STATE_WAIT (Attente) : L'ESP32 lit la couleur de l'équipe via un switch (PIN_SW_COLOR). L'ensemble du système de coordonnées (points de départ, waypoints, cibles) est automatiquement symétrisée (inversion de l'axe X) si le robot est dans l'équipe bleue. Le robot attend le retrait de la tirette, en affichant la couleur du terrain sur la led d'IHM.STATE_DELAY (Attente 85s) : Selon les règles, les PAMI ne peuvent entrer en action qu'à la fin du match principal. Au retrait de la tirette, le robot reset son odométrie (resetSTM32) puis attend pendant 85 secondes.STATE_GAME (Match) : L'ESP32 commence à lire sa route de Waypoints et envoie les coordonnées cibles au STM32. Si un obstacle fixe est détecté lors du premier déplacement, un waypoint bonus est généré dynamiquement pour modifier la stratégie en cours de match.STATE_END (Fin de match) : À T+99s, le robot stoppe ses moteurs et déploie ses bras à l'aide de ses servomoteurs.X:123,Y:456,Z:1.57, que l'ESP32 parse via la fonction parseSTM32Data. En retour, l'ESP32 envoie des commandes simples au STM32 (mode auto, stop, X:1000, reset:x:y:z).Pour centraliser toutes ces fonctionnalités, un second PCB a été conçu spécifiquement pour accueillir l'ESP32. Cette carte vient se superposer à la carte d'alimentation principale et gère toute la logique périphérique :
DEBUG pour l'affichage des logs, TERRAIN pour le choix de la couleur, et MODE pour basculer entre le mode automatique et le contrôle manuel via manette bluetooth), le connecteur pour la Tirette de démarrage, ainsi que la LED d'état WS2812B.LPN1, LPN2, et LPN3 permettant d'allumer les capteurs séquentiellement pour modifier leur adresse I2C au boot.SERVO m1, SERVO m2, SERVO m3) sont présents. Ils sont alimentés directement par le rail 6V provenant de la carte principale, et commandés par des broches PWM de l'ESP32. Des condensateurs de 100µF sont placés au plus près des connecteurs pour lisser les appels de courant.COMM_inter_mcu assure la liaison avec la carte STM32 pour l'UART (TX/RX), les alimentations (3.3V et 6V), et les deux moteurs auxiliaires posés sur l'actionneur du robot qui lui permette de gravire des obstacles.Voici la schématique et le routage de cette seconde carte :
Légende : Schématique détaillée du PCB ESP32 (Capteurs, IHM, Servos)
Légende : Routage du PCB ESP32
Après de nombreuses itérations matérielles (sur les deux itérations de PCB et la mécanique) ainsi qu'un gros travail d'optimisation logicielle, le PAMI a su remplir son rôle de manière fiable et concluante.
Voici une courte vidéo démontrant son fonctionnement lors d'un match (cas le plus simple, sans obstacles) :
https://github.com/user-attachments/assets/42d38b15-34ad-48e5-a77b-8a1eeed6a4e9
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H1, H2, H3, H4, H6, H7, H8, H9 |
| 4 | 100n | Capacitor_SMD:C_0603_1608Metric | C3, C6, C10, C13 |
| 4 | 10u | Capacitor_SMD:C_0603_1608Metric | C2, C8, C9, C12 |
| 3 | 10k | Resistor_SMD:R_0603_1608Metric | R7, R16, R17 |
| 3 | 330R | Resistor_SMD:R_0603_1608Metric | R12, R13, R15 |
| 2 | 100u | Capacitor_SMD:CP_Elec_6.3x5.4 | C7, C11 |
| 2 | 1k | Resistor_SMD:R_0603_1608Metric | R2, R14 |
| 2 | 5.1k | Resistor_SMD:R_0603_1608Metric | R3, R4 |
| 2 | GREEN_LED | LED_SMD:LED_0603_1608Metric | D4, D6 |
| 1 | 100R | Resistor_SMD:R_0603_1608Metric | R5 |
| 1 | 178k | Resistor_SMD:R_0603_1608Metric | R9 |
| 1 | 1M | Resistor_SMD:R_0603_1608Metric | R8 |
| 1 | 1k2 | Resistor_SMD:R_0603_1608Metric | R1 |
| 1 | 1u | Capacitor_SMD:C_0603_1608Metric | C1 |
| 1 | 2.2p | Capacitor_SMD:C_0603_1608Metric | C4 |
| 1 | 2.2u | Inductor_SMD:L_Wuerth_WE-TPC-3816 | L1 |
| 1 | 2k | Resistor_SMD:R_0603_1608Metric | R6 |
| 1 | BAT+ | TestPoint:TestPoint_THTPad_D2.5mm_Drill1.2mm | J2 |
| 1 | BAT- | TestPoint:TestPoint_THTPad_D2.5mm_Drill1.2mm | J4 |
| 1 | BAU | Connector_JST:JST_VH_B2P-VH_1x02_P3.96mm_Vertical | J1 |
| 1 | BOOST_IN | Connector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_Vertical | J6 |
| 1 | BOOST_OUT | Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical | J13 |
| 1 | CN3058E | Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.29x3mm | U4 |
| 1 | COMM_inter_mcu | Connector_PinSocket_2.54mm:PinSocket_1x09_P2.54mm_Vertical | J11 |
| 1 | Charge | LED_SMD:LED_0603_1608Metric | D1 |
| 1 | DMP1045U-7 | Package_TO_SOT_SMD:SOT-23 | Q2 |
| 1 | DRIVER 1 | Package_DIP:DIP-16_W10.16mm_LongPads | U2 |
| 1 | DRIVER 2 | Package_DIP:DIP-16_W10.16mm_LongPads | U6 |
| 1 | FS8205A | Package_TO_SOT_SMD:SOT-23-6 | Q1 |
| 1 | Full | LED_SMD:LED_0603_1608Metric | D2 |
| 1 | HY2112 | Package_TO_SOT_SMD:SOT-23-6 | U3 |
| 1 | MOTOR 1 | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J8 |
| 1 | MOTOR 2 | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J9 |
| 1 | MOTOR 3 | Connector_JST:JST_VH_B2P-VH_1x02_P3.96mm_Vertical | J7 |
| 1 | MOTOR 4 | Connector_JST:JST_VH_B2P-VH_1x02_P3.96mm_Vertical | J10 |
| 1 | NUCLEO-G431KB | Module:Arduino_Nano | U1 |
| 1 | RED_LED | LED_SMD:LED_0603_1608Metric | D5 |
| 1 | SS34 | Diode_SMD:D_SMA | D3 |
| 1 | SW_SPDT | Button_Switch_SMD:SW_SPDT_PCM12 | SW1 |
| 1 | TPS63000 | Package_SON:Texas_DRC0010J_ThermalVias | U5 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J12 |
| 1 | VIN_Connector | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J3 |

prichert17/PAMI
Ce dépôt documente le projet PAMI (Petit Actionneur Motorisé Indépendant) sur lequel j'ai travaillé pendant un an, dans le cadre de la coupe Eurobot 2026.


chof747/kitchen-clock
This project is building a kitchen glock with the following functions:


EdgeCoil/wiegand-bridge
ESP32-S3 Wiegand reader bridge for Home Assistant: 4-layer board, BOM and ESPHome firmware.

petnica-rac-seminari/BCD-0o27-Tetris
The BalcCon Cyberdeck 0o27 (BCD-0o27) comes with a development framework that makes it easier to add functionality to the cyberdeck.



pho/esp32-lifepo4-board
Kicad pcb design of a minimal board with an ESP32 and a LiFePo4 charging circuit
It measures 125 × 84 mm and has 2 copper layers, 1.6 mm thick.
63 parts, built around the CN3058E, HY2112-CB, TPS63000DRC and DMP1045U-7(ES). The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the prichert17/PAMI repository on GitHub, at the commit this page was made from: the board is PCB_PAMI_2025-2026/PCB_PAMI_2025-2026.kicad_pcb and its schematic MAIN_PCB_TOFS/MAIN_PCB_TOFS.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask prichert17 before reusing the design.