Skip to the content
4 layers54 × 57 mmESE AL8, the printed circuit board in 3D

Projet_2024/2025

Size
54 × 57 mm
Copper layers
4
Thickness
1.6 mm
Parts
89
Nets
80
Pads
331
Tracks, vias
508, 154
Pours
12
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
11 Sep 2024
Updated
15 Jan 2025

Overview

ESE AL8 is an open-source printed circuit board by Bayazid7, from the Bayazid7/Projet_git_2425_ESE_BAHL repository on GitHub. It is a 4-layer board of 54 × 57 mm with 89 parts on 80 nets, routed with 508 tracks and 154 vias.

It is built around the ZXBM5210-SP, MP1475SGJ-P and ADXL343BCC. Its parts include 32 capacitors, 17 resistors, 8 connectors, 6 ICs and 6 diodes. It belongs with the STM32 boards of this library.

Main components

3

README

README.md

Projet_git_2425_ESE

Projet_2024/2025

Membres du groupes

Bayazid BELKHIR
Hedia WERHENI
Hugo DEVAUX
Aliou LY

Introduction

Ce projet a pour objectif de développer un robot autonome utilisant un microcontrôleur STM32 pour la gestion de son comportement, tout en appliquant des principes de noyaux temps réel pour contrôler la communication entre ses composants matériels et logiciels. Ce robot sera capable de fonctionner en deux modes :

  • Mode Chat :
  • Mode Souris :

Le robot est alimenté par une batterie de 7.2V et comprend des composants essentiels pour son fonctionnement tels que des moteurs, un accéléromètre, et un LIDAR.


Objectifs du projet

Les principaux objectifs de ce projet sont les suivants :

  1. Conception du système à microcontrôleur STM32 : Intégrer un microcontrôleur pour gérer le comportement du robot.
  2. Implémentation d'un noyau temps réel : Utiliser un noyau temps réel pour garantir une gestion efficace des tâches .
  3. Contrôle des moteurs avec PWM : Piloter deux moteurs à l'aide de drivers PWM pour contrôler la vitesse et la direction.
  4. Détection des chocs avec l'accéléromètre ADXL343 : Détecter les collisions avec d'autres robots pour ajuster les actions du robot.
  5. Détection des autres robots avec LIDAR YDLIDAR X4 : Utiliser un LIDAR pour permettre au robot de connaître la position des autres robots. image

Matériel utilisé

1. Microcontrôleur STM32

Le projet repose sur un STM32 qui gère l'ensemble du système.La programmation du STM32 se fait par un SW

  • Modèle utilisé : STM32G431CBU6
  • Fonction principale : Gestion des moteurs, communication avec l'accéléromètre et le LIDAR, traitement des données en temps réel.
  • Peripherals : PWM pour le contrôle des moteurs, interfaces I2C pour l'accéléromètre et UARTpour le LIDAR et la communication avec le PC. image_stm32

2. Alimentation et régulation de tension

Le robot est alimenté par une batterie NIMH 7.2V 1.3Ah. Cette tension est ensuite convertie en différentes tensions nécessaires au bon fonctionnement des différents composants :

  • Convertisseur 3.3V BU33SD5WG-TR pour alimenter le STM32, l'accéléromètre, et les capteurs de position des moteurs.
  • Convertisseur 5V MP1475S pour alimenter le LIDAR. image

3. Drivers de moteurs PWM

Le robot est équipé de deux moteurs DC, chacun étant contrôlé par un driver PWM. Chaque driver reçoit des signaux PWM du STM32 pour réguler la vitesse et la direction des moteurs.

  • Modèle des drivers : ZXBM5210-SP-13
  • Fonction principale : Piloter les moteurs en avant ou en arrière grâce à des signaux PWM.
  • Commandes PWM : Les signaux PWM (Forward et Reverse) contrôlent la direction des moteurs. La vitesse est ajustée en modifiant le rapport cyclique du PWM. image

4. Accéléromètre ADXL343

L'accéléromètre ADXL343 est utilisé pour détecter les chocs entre les robots. Il mesure l'accélération dans les trois axes et peut détecter des variations rapides, comme celles d'une collision.

  • Communication : Le module utilise le protocole I2C pour envoyer les données d'accélération au STM32.
  • Fonction principale : Détecter les impacts ou les vibrations et permettre une réaction rapide du robot (comme changer de direction ou ajuster son comportement). image

5. LIDAR YDLIDAR X2

Le LIDAR YDLIDAR X4 est utilisé pour scanner l'environnement autour du robot et déterminer la position des autres robots et des obstacles.

  • Type de capteur : LIDAR à balayage laser.
  • Portée : Jusqu'à 12 mètres.
  • Communication : UART pour transmettre les données de mesure.
  • Protocole : Utilise une communication série avec un format de trame spécifique (en-tête 0x55AA).
  • Résolution : Distance : 0.25 mm (valeur brute divisée par 4) et Angle : 1/64° (0.015625°)

Schema de cablage

image image

Software

Drivers de Moustache

1. Fichier Moustache.c-contient l'implémentation du pilote pour gérer les interruptions et les tâches liées à un système utilisant des capteurs "moustaches" pour détecter des bords.

**Principales fonctions et variables :

  1. Variables principales :

    • cb_out1_task_handle et cb_out2_task_handle : Des handles pour les tâches FreeRTOS associées aux deux GPIO.
    • exclusive_task : Variable pour enregistrer quelle tâche est en cours d'exécution, afin d'éviter que plusieurs tâches ne soient actives simultanément ( On a remarqué que lorsque l'une des deux moustaches détecte le bord, la deuxième va également interrompre après un petit moment, et cela est dû à la conception du robot ).
      • 0: Aucune tâche active.
      • 1: La tâche CB_OUT1_Task est active.
      • 2: La tâche CB_OUT2_Task est active.
    • robot : Variable globale externe, représentant l'état d'un robot. Elle est utilisée dans la fonction Bord.
  2. Initialisation (Moustache_Init):

    • Création de deux tâches FreeRTOS :
      • CB_OUT1_Task pour gérer les événements associés au GPIO CB_OUT1_Pin.
      • CB_OUT2_Task pour gérer les événements associés au GPIO CB_OUT2_Pin.
  3. Gestion des interruptions (Moustache_HandleInterrupt):

    • Cette fonction est appelée lorsqu'une interruption GPIO est détectée.
    • Vérifie si une tâche peut être exécutée (selon la valeur de exclusive_task).
    • Envoie une notification à la tâche correspondante (cb_out1_task_handle ou cb_out2_task_handle) en utilisant xTaskNotifyFromISR.
  4. Fonction Bord :

    • Gère le comportement du robot en fonction de sa direction (robot.direction).
      • 'A': Le robot recule.
      • 'R': Le robot avance.
    • Cette fonction est appelée par les tâches pour ajuster le mouvement du robot.
  5. Tâches CB_OUT1_Task et CB_OUT2_Task :

    • Chaque tâche attend une notification via xTaskNotifyWait.
    • Lorsqu'une notification est reçue :
      • Elle effectue une action définie (appel de Bord).
      • Réinitialise exclusive_task à 0 pour permettre d'autres interruptions.
2. Fichier Moustache.h

Ce fichier est l'en-tête associé, qui déclare les prototypes des fonctions et les dépendances nécessaires.

Principales fonctionnalités :
  1. Inclusion de bibliothèques nécessaires :

    • stm32g4xx_hal.h : Bibliothèque HAL pour la famille STM32G4.
    • gpio.h : Bibliothèque pour gérer les GPIO.
  2. Prototypes de fonctions :

    • Moustache_Init(void) : Initialisation du pilote et des tâches.
    • Moustache_HandleInterrupt(uint16_t GPIO_Pin) : Gestion des interruptions GPIO.

Drivers de Moteur

1.Fichier 'MoteurPWM.c'

  1. La fonction Moteur_init:

Est responsable de l'initialisation d'un moteur en configurant ses paramètres de base. Elle prend en entrée un pointeur vers la structure du moteur, le timer PWM et le canal associé, initialisant la direction à l'arrêt et la vitesse à zéro.

  1. Moteur_setSpeed: gère la vitesse du moteur avec une conversion d'échelle, transformant une vitesse d'entrée (±290) en valeur PWM (0-8500) et configurant la direction appropriée.

  2. Moteur_setDirection:

contrôle la direction du moteur en gérant les signaux PWM complémentaires elle peut faire avancer, reculer ou arrêter le moteur en activant ou désactivant les canaux PWM appropriés.

  1. Moteur_start, Moteur_stop et Moteur_recule:

sont des fonctions d'aide qui simplifient le contrôle du moteur en appelant Moteur_setDirection avec les paramètres appropriés.

Du côté du robot, Robot_Start initialise le mouvement en avant avec des vitesses asymétriques (120 pour la droite, 80 pour la gauche), tandis que Robot_Stop arrête les deux moteurs.Robot_Recule fait reculer le robot avec les mêmes vitesses que l'avance mais en négatif.

2.Fichier 'MoteurPWM.h'

c'est un fichier d’en-tête conçu pour gérer le contrôle des moteurs d’un robot. Il définit deux structures principales :

  1. Moteur_HandleTypeDef : utilisée pour représenter un moteur individuel, incluant ses paramètres essentiels comme le timer PWM associé (pwm_timer), le canal PWM (channel), la direction actuelle (direction) et la vitesse (vitesse).

  2. h_Robot : utilisée pour représenter un robot comprenant deux moteurs (droit et gauche) et des paramètres globaux comme la vitesse linéaire, la vitesse angulaire, l’angle (theta) et le mode de fonctionnement.

pour que en peux controlé l'angle de lidar nous allons utulisé La fonction : xTaskCreate(robotAngle, "Init Task", 256, NULL, 2, &setangleTaskHandle) sert à créer une tâche dans un système RTOS. Cette tâche exécute la fonction robotAngle telque:

utilise une pile de 256 mots, et a une priorité de 2. Le nom "Init Task" est utilisé pour identifier la tâche, et le handle setangleTaskHandle permet de la contrôler ultérieurement. Cette commande initialise efficacement la tâche pour qu'elle s'exécute dans le système.

4 .Driver ADXL343 (ADXL343.c)

Introduction

Le driver ADXL343 permet de gérer un accéléromètre ADXL343 dans un système embarqué en temps réel. Ce capteur mesure l'accélération sur trois axes (X, Y, Z) et est utilisé pour détecter des événements comme les chocs. Ce driver est conçu pour intégrer les fonctionnalités du capteur avec FreeRTOS.

1. Initialisation et Configuration du Capteur

Le driver initialise le capteur ADXL343 en configurant les registres nécessaires pour le fonctionnement de l'accéléromètre. Cela inclut la configuration de la plage de mesures, des seuils de tapotement, et des interruptions.

  • Initialisation de l'I2C : La fonction ADXL343_Init() initialise la communication I2C avec le capteur, vérifie l'identifiant du dispositif et configure les registres pour la lecture des données d'accélération.
  • Configuration des Interrups : Le capteur est configuré pour détecter des événements sur les axes X et Y, en activant les interruptions pour ces axes.
  • Configuration du Format des Données : Le capteur est configuré pour un mode de résolution complète avec une plage de ±16g, ce qui est adapté pour de nombreuses applications.

2. Réception et Traitement des Données

Une fois l'accéléromètre configuré, le driver permet de récupérer les données d'accélération en temps réel.

  • Traitement des Interruptions : Le driver utilise des interruptions pour détecter des événements de tapotement (tap) sur les axes X et Y.

3. Gestion des Interruptions

  • Gestion des Interruptions Tap : Le capteur est configuré pour activer les interruptions uniquement pour les axes X et Y, en désactivant l'axe Z qui peut souvent générer des interruptions indésirables.

4. Intégration en Temps Réel ⏱️

  • Utilisation de FreeRTOS : Le driver fonctionne avec FreeRTOS pour gérer les tâches liées à la lecture des données du capteur et au traitement des événements. Une tâche dédiée TapDetectedTask est utilisée pour traiter les événements en temps réel.

5. Drivers Ylidar X2 (lidar_X2_driver.c)

Le code du dirver implémente la gestion d'un capteur LiDAR YLIDAR X2 dans un système embarqué temps réel. Ci-dessous, les principaux aspects du fonctionnement du LiDAR :

Initialisation et réception des données

La fonction lidar_init() initialise la communication UART avec le LiDAR en mode interruption. La réception des données se fait octet par octet via la fonction readTrame(), qui implémente une machine à états pour assembler les trames complètes.

Traitement des données

Une fois une trame complète reçue, lidar_process() est appelée pour extraire et traiter les données :

  • lidar_extractDataFromTrame() décode la structure de la trame.
  • lidar_DataProcessing() calcule la distance et l'angle pour chaque point mesuré.
  • lidar_calculatingDistance() et lidar_calculatingAngle() effectuent les calculs spécifiques.

Intégration temps réel

  • Utilisation d'interruptions UART pour la réception asynchrone des données.
  • Traitement des données dans une tâche FreeRTOS dédiée (lidarTask).
  • Synchronisation avec d'autres tâches du système pour le contrôle du robot.

Pistes d'amélioration

  • Implémenter la vérification du checksum pour valider l'intégrité des données.
  • Optimiser le traitement des données pour réduire la charge CPU.
  • Ajouter des filtres pour améliorer la précision des mesures.
  • Implémenter une gestion d'erreurs plus robuste.

Datasheets et sourcing des composants

https://1drv.ms/x/s!AjphXEW6glNckYErezblGW1QHlP9SQ

Démonstrations du robot en marche:

https://github.com/user-attachments/assets/f6af12cb-7911-474c-adf0-7a1f33a06a41

https://github.com/user-attachments/assets/32c66e7f-6e20-4e83-ad37-8ae89d0b7e4e

Parts

89
QtyValueFootprintReferences
12100nCapacitor_SMD:C_0402_1005MetricC2, C14, C17, C18, C19, C20, C21, C24, C25, C26, C27, C201
8TestPointTestPoint:TestPoint_Pad_D1.0mmTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8
71uCapacitor_SMD:C_0603_1608MetricC1, C10, C11, C15, C23, C29, C31
6680Resistor_SMD:R_0402_1005MetricR3, R11, R12, R13, R14, R15
41kResistor_SMD:R_0402_1005MetricR1, R2, R16, R17
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
30.1uCapacitor_SMD:C_0402_1005MetricC4, C5, C6
322uCapacitor_SMD:C_0805_2012MetricC3, C8, C9
3LED_POWERLED_SMD:LED_0603_1608MetricD1, D5, D6
2100KResistor_SMD:R_0402_1005MetricR4, R5
210pCapacitor_SMD:C_0402_1005MetricC12, C16
210uCapacitor_SMD:C_0603_1608MetricC28, C30
2SolderJumper_2_OpenJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1, JP2
2ZXBM5210-SPSTM32:Diodes_SO-8EPU4, U5
110nCapacitor_SMD:C_0402_1005MetricC22
115pCapacitor_SMD:C_0402_1005MetricC7
116MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
116kResistor_SMD:R_0603_1608MetricR7
120Resistor_SMD:R_0603_1608MetricR6
120Resistor_SMD:R_0402_1005MetricR10
14.7uSTM32:IND_052047_WREL1
14.7uCapacitor_SMD:C_0603_1608MetricC13
140.2kResistor_SMD:R_0603_1608MetricR9
17.68kResistor_SMD:R_0603_1608MetricR8
1ADXL343Package_LGA:LGA-14_3x5mm_P0.8mm_LayoutBorder1x6yU1
1BUxxSD5Package_TO_SOT_SMD:SOT-23-5U2
1BatterieConnector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_HorizontalJ6
1CB1Connector_JST:JST_XH_S4B-XH-A_1x04_P2.50mm_HorizontalJ1
1CB2Connector_JST:JST_XH_S4B-XH-A_1x04_P2.50mm_HorizontalJ2
1Conn_ST_STDC14Connector_PinHeader_1.27mm:PinHeader_2x07_P1.27mm_Vertical_SMDJ7
1ECRANConnector_JST:JST_XH_S4B-XH-A_1x04_P2.50mm_HorizontalJ8
1LED_USER1LED_SMD:LED_0603_1608MetricD2
1LED_USER2LED_SMD:LED_0603_1608MetricD3
1LED_USER3LED_SMD:LED_0603_1608MetricD4
1LIDARConnector_JST:JST_XH_S8B-XH-A_1x08_P2.50mm_HorizontalJ3
1LOGOSTM32:logoG***
1MP1475SGJ-PPackage_TO_SOT_SMD:TSOT-23-8IC1
1Moteur1Connector_JST:JST_XH_S6B-XH-A_1x06_P2.50mm_HorizontalJ4
1Moteur2Connector_JST:JST_XH_S6B-XH-A_1x06_P2.50mm_HorizontalJ5
1ON/OFFConnector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_HorizontalSW2
1STM32G431CBUxSTM32:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm_AJU3
1SW_c/sSTM32:SW_Push_1P1T_NO_6x6mm_H9.5mmSW1
1lCapacitor_SMD:C_0402_1005Metric_Pad0.74x0.62mm_HandSolderL2

More from Bayazid7/Projet_git_2425_ESE_BAHL

1
  • 4 layers60 × 60 mmESE AL8, the printed circuit board in 3D

    ESE AL8

    Bayazid7/Projet_git_2425_ESE_BAHL

    Projet_2024/2025

    70 parts

Similar boards

  • 4 layers54 × 57 mmTagBot, the printed circuit board in 3D

    TagBot

    exysta/2425_ESE_Projet_TagBot

    Vous vous trouvez actuellement dans le projet TagBot (ou robot chat), qui s'intègre à un projet de classe où chaque équipe doit concevoir un robot.

    87 parts3MIT
  • 4 layers57 × 54 mmPojet V NOM KiCAD, the printed circuit board in 3D

    Pojet V NOM KiCAD

    MohamedBenabdelhadi/2425_ESE_Projet_V-NOM

    Mohamed Benabdelhadi_Nouhaila Faris_Oliver Belliard_Valerian Priou

    78 parts2
  • 4 layers54 × 57 mmProjet torero, the printed circuit board in 3D

    Projet torero

    Manassehalt/2425_ESE_Projet_Torero

    Projet de 3ème année d'ESE réalisé par : - JACQUOT Nolan - GUIFFAULT Gabriel - BOULOT Paul - THOMAR Jean-Philippe

    82 parts
  • 4 layers54 × 57 mmStealthKitty.kicad pro, the printed circuit board in 3D

    StealthKitty.kicad pro

    flexdrt/2425_ESE_Projet_StealthKitty

    Ce projet est réalisé dans le cadre de la dernière année de la filière électronique et systèmes embarqués (ESE) de l'ENSEA.

    82 parts
  • 4 layers212.5 × 152.5 mmGaussSpeedway, the printed circuit board in 3D

    GaussSpeedway

    mcbridejc/GaussSpeedway

    PCB design for the Gauss Speedway. Designed in Kicad 6.

    48 parts36
  • 4 layers90 × 72 mmRobot, the printed circuit board in 3D

    Robot

    Dorian12000/Projet

    robot chat

    62 parts1
  • 4 layers389.9 × 88.9 mmPCB Repetition, the printed circuit board in 3D

    PCB Repetition

    DBXYD/2025-CGS-ESP32-IoT

    Il s'agit d'un PCB permettant de centraliser l'alimentation des appareils et de les connecter au réseau local.

    101 parts
  • 4 layers54.1 × 57 mmProjet Robot, the printed circuit board in 3D

    Projet Robot

    ezer-soltani/HellKitty-Autonomous-Robot

    Professional firmware and hardware design for an autonomous mobile robot using STM32G431 and FreeRTOS. Features Lidar perception, ToF safety algorithms, and PID motor control.

    88 partsMIT

Questions

How big is the ESE AL8 PCB?

It measures 54 × 57 mm and has 4 copper layers, 1.6 mm thick.

What parts does the ESE AL8 use?

89 parts, built around the ZXBM5210-SP, MP1475SGJ-P and ADXL343BCC. 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.

Where can I download the ESE AL8 KiCad files?

From the Bayazid7/Projet_git_2425_ESE_BAHL repository on GitHub, at the commit this page was made from: the board is Schema_KICAD/ESE_AL8/ESE_AL8/ESE_AL8.kicad_pcb and its schematic Docs/Schema_KICAD/ESE_AL8/ESE_AL8/ESE_AL8.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ESE AL8 design in my own project?

Its repository states no licence, so its author keeps all rights: ask Bayazid7 before reusing the design.