
Pojet V NOM KiCAD
MohamedBenabdelhadi/2425_ESE_Projet_V-NOM
Mohamed Benabdelhadi_Nouhaila Faris_Oliver Belliard_Valerian Priou

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.
StealthKitty.kicad pro is an open-source printed circuit board by flexdrt, from the flexdrt/2425_ESE_Projet_StealthKitty repository on GitHub. It is a 4-layer board of 54 × 57 mm with 82 parts on 75 nets, routed with 637 tracks and 197 vias.
It is built around the STM32G431CBU6, ZXBM5210-SP and MP1475DJ-LF-P, with the ADXL343BCC and BU33SD5WG-TR among its other parts. Its parts include 30 capacitors, 14 resistors, 6 connectors, 5 ICs and 4 diodes. It belongs with the STM32 boards of this library.
StealthKitty est un projet de système embarqué innovant basé sur un STM32.
🎯 Objectif : Développer plusieurs robots capables de se déplacer sur une table sans bordure.
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.
Ce projet s'inscrit dans le cadre de la formation 3A à l'ENSEA.
🎯 L'objectif est de concevoir un système embarqué complet, depuis la conception électronique jusqu'à l'implémentation logicielle.
Ce schéma ne détaille pas que chaque moteur a sa propre pwm et son driver propre également.
⚡ Alimentation principale
🖥️ Microcontrôleur principal - STM32G431
🔍 Capteurs
⚙️ Contrôle des moteurs
🌟 Indicateurs d'état (LEDs)
Communication avec l'accéléromètre (ADXL343)
Contrôle des moteurs avec le driver ZXBM5210
Gestion des capteurs de bordure/détection de chute
Interfaçage avec le LiDAR YDLIDAR X4
POWER_CTL : Activer le mode mesure.THRESH_TAP, DUR, INT_ENABLE : Configurer les seuils et activer les interruptions pour les tapotements.INT_SOURCE : Vérifier les événements de tapotements.INT_SOURCE.tap_detected pour signaler un événement.acc_rawX, acc_rawY, acc_rawZ.vTaskADX pour :vTaskDelay).https://github.com/user-attachments/assets/b687c830-fabb-43c3-ac29-a924f9b9cf93
VL53L1__DISTANCE_MODE = 2)VL53L1__TIMING_BUDGET = 20)uint8_t VL53L1__Init() {
uint8_t status = 0;
printf("Initialisation du capteur VL53L1X...\n");
status |= VL53L1X_SensorInit(TOF_ADDR);
if (status != 0) {
printf("Erreur lors de l'initialisation du capteur !\n");
return status;
}
status |= VL53L1X_SetDistanceMode(TOF_ADDR, VL53L1__DISTANCE_MODE);
status |= VL53L1X_SetTimingBudgetInMs(TOF_ADDR, VL53L1__TIMING_BUDGET);
status |= VL53L1X_SetInterMeasurementInMs(TOF_ADDR, VL53L1__INTERMEASUREMENT);
printf("Capteur initialisé avec succès.\n");
return status;
}Acquisition des données :
VL53L1X_CheckForDataReady() pour vérifier la disponibilité.VL53L1X_GetDistance().Filtrage et validation :
RangeStatus pour éliminer les mesures aberrantes.Analyse :
if (distance > 250) {
printf("Obstacle détecté : pivot en cours...\n");
reverse_motors(); // Fonction pour inverser les moteurs
vTaskDelay(pdMS_TO_TICKS(500)); // Pause pour effectuer le pivot
forward_motors(); // Reprise de la trajectoire
}#define VL53L1__TIMING_BUDGET 20
#define VL53L1__DISTANCE_MODE 2
#define VL53L1__LOWER_THRESHOLD 0
#define VL53L1__UPPER_THRESHOLD 4000typedef struct {
uint8_t Status; // Statut de la mesure (erreurs incluses)
uint16_t Distance; // Distance mesurée en mm
uint16_t SignalRate; // Taux de signal en kcps
uint16_t AmbientRate; // Taux de bruit ambiant
uint16_t SpadNum; // Nombre de SPADs actifs
} VL53L1X_Result_t;void vTaskToF(void *argument) {
uint16_t distance;
uint8_t range_status;
for (;;) {
// Vérification de la disponibilité des données
VL53L1X_CheckForDataReady(TOF_ADDR, &range_status);
if (range_status == 0) {
// Lecture de la distance
VL53L1X_GetDistance(TOF_ADDR, &distance);
printf("Distance mesurée : %d mm\n", distance);
// Détection d'obstacle
if (distance > 250) {
printf("Obstacle détecté, exécution d'un pivot.\n");
reverse_motors();
vTaskDelay(pdMS_TO_TICKS(500));
forward_motors();
}
}
// Pause entre les mesures
vTaskDelay(pdMS_TO_TICKS(100));
}
}RangeStatus pour éviter des comportements inattendus.VL53L1X_SensorInit() : Initialise le capteur avec les valeurs par défaut.VL53L1X_GetDistance() : Récupère la distance mesurée (mm).VL53L1X_SetTimingBudgetInMs() : Configure le budget temporel des mesures.VL53L1X_ClearInterrupt() : Réinitialise les interruptions après une mesure.VL53L1X_SetDistanceMode() : Change le mode de mesure (écourté ou étendu).https://github.com/user-attachments/assets/b8a1714b-683e-4680-be36-7b728edb92a1
Les moteurs utilisés sont des motoréducteurs de la marque DFRobot, les modèles FIT 052X équipés d'un encodeur à quadrature.
Nos moteurs ont une vitesse différentes pour un même rapport cyclique, cependant la différence de vitesse varie en fonction des rapports cycliques choisis, nous n'avons pas pu compenser cette erreur de manière durable et fiable. Cela a aussi rendu plus complexe l'implémentation des asservisssements en vitesse et en angle qui devaient prendre en compte ce problème.
Le contrôle des moteurs est effectué à l'aide d'un driver. Ce driver contient plusieurs fonctions pour contrôler la direction et la vitesse des moteurs du robot.
void init_motors(void); : Initialisation des moteurs.void forward_r(uint16_t alpha); : Faire avancer le moteur droit.void forward_l(uint16_t alpha); : Faire avancer le moteur gauche.void reverse_r(uint16_t alpha); : Faire reculer le moteur droit.void reverse_l(uint16_t alpha); : Faire reculer le moteur gauche.void stop_r(void); : Arrêter le moteur droit.void stop_l(void); : Arrêter le moteur gauche.
Le robot utilise deux moteurs, un pour chaque roue :
| Moteur Gauche | Sens de marche Robot | Moteur Droit |
|---|---|---|
| Sens reverse | Sens forward | Sens forward |
Pour avoir le sens de marche du robot en arrière, le tableau est le même sauf que l'on change le sens de chaque moteur.
Avancer :
forward_r(uint16_t alpha) : Configure le moteur droit pour avancer en réglant le rapport cyclique PWM sur la valeur spécifiée par alpha. Cela contrôle la vitesse de rotation du moteur droit. Point critique : Assurez-vous que alpha reste dans les limites de la plage autorisée pour éviter de surcharger le moteur.forward_l(uint16_t alpha) : Configure le moteur gauche pour avancer avec un fonctionnement similaire au moteur droit.Reculer :
reverse_r(uint16_t alpha) : Inverse la polarité pour le moteur droit afin qu'il recule. Le rapport cyclique PWM alpha détermine la vitesse en mode reverse. Point critique : La synchronisation entre les moteurs est essentielle pour un déplacement précis.reverse_l(uint16_t alpha) : Applique le même principe pour le moteur gauche.stop_r() : Arrête le moteur droit en mettant le signal PWM à zéro et en désactivant le canal PWM correspondant. Point critique : Un arrêt brusque peut endommager le système mécanique si des forces importantes sont en jeu.stop_l() : Arrête le moteur gauche de manière similaire pour immobiliser le robot.Les encodeurs mesurent la rotation des moteurs pour calculer leur position et leur vitesse. Ces données sont essentielles pour un contrôle précis. Un test en vidéo des encodeurs est visible plus haut dans ce document, dans la partie "Détail sur l'utilisation de l'accéléromètre ADXL343" (on peut voir la vitesse du moteur droit et gauche).
Position :
get_encoder_position(uint8_t motor) : Retourne la position actuelle en impulsions pour le moteur spécifié (gauche ou droit). Cette valeur est obtenue en lisant le compteur du timer associé à l'encodeur. Point critique : Une dérive dans les valeurs peut indiquer un problème de calibration ou de bruit.Réinitialisation :
reset_encoder(uint8_t motor) : Réinitialise la valeur du compteur de l'encodeur à zéro, permettant de redémarrer les mesures à partir d'une référence claire. Point critique : Réinitialisez uniquement lorsque les moteurs sont à l'arrêt pour éviter des erreurs de mesure.Vitesse :
calculate_motor_speed(uint8_t motor, uint32_t delta_time_ms, uint16_t encoder_resolution) : Calcule la vitesse en tours par seconde à partir des différences de positions mesurées par l'encodeur sur une durée spécifiée. La résolution de l'encodeur (en impulsions par tour) est utilisée pour la conversion. Point critique : Le choix d'un intervalle de temps trop court peut amplifier le bruit dans les calculs de vitesse.Le contrôle PID ajuste dynamiquement la commande des moteurs pour maintenir une vitesse cible.
compute_pid(float target_speed, float measured_speed, float *integral_error, float *previous_error, float kp, float ki, float kd) :
target_speed : La vitesse souhaitée pour le moteur.measured_speed : La vitesse réelle mesurée par l'encodeur.integral_error : Accumulation des erreurs précédentes pour l'effet intégral.previous_error : Dernière erreur enregistrée pour l'effet dérivé.kp, ki, kd : Gains proportionnel, intégral et dérivé.forward_r() et forward_l() configurent les moteurs pour avancer avec un rapport cyclique moyen (environ 40%).Timers :
Résolution :
Rapports Cycliques :
alpha utilisée dans les fonctions correspond au rapport cyclique du signal PWM. Un rapport plus élevé entraîne une vitesse de rotation plus importante. Point critique : Vérifiez que le matériel supporte la plage de fonctionnement du PWM pour éviter des dommages.🎯 Caractéristiques techniques
⚙️ Communication et trames
🔧 Traitement des données
📊 Analyse des données
⚡ Performances
🔁 Cycle de fonctionnement
🛠️ Fonctions clés du driver
sns_begin() // Démarrage acquisition
sns_parse_data() // Traitement trame
smooth_data() // Filtrage données
detect_objects() // Détection objets⚠️ Points critiques
Vérification séquence 7 octets :
Si fin de trame (i==frame_end) :
Recherche de l'objet le plus proche :
Affichage données :
Dans la vidéo suivante un test est réalisé avec un script python pour mieux visualiser les donnés reçus, on remarque une légère latence pour que les données soient affichés et des outliers.
https://github.com/user-attachments/assets/c904982a-7dda-46ab-8d87-f73b21fb672f
e(t) = θ_consigne - θ_mesureu(t) = Kp × e(t)où Kp est le gain proportionnel
v_g = v_base + u(t)
v_d = v_base - u(t)où v_base est la vitesse nominale
Pour avoir un comportement symétrique, l'angle mesuré est normalisé dans l'intervalle [-180°, 180°] :
Si θ_mesure > 180° :
θ_normalisé = θ_mesure - 360°
Sinon :
θ_normalisé = θ_mesureDans le domaine de Laplace, la fonction de transfert du système peut être approximée par :
G(s) = K / (1 + τs)où :
Le système en boucle fermée a une fonction de transfert :
H(s) = (K × Kp) / (1 + τs + K × Kp)La stabilité est assurée si :
0 < Kp < 1/(K × τ)Conversion en commandes moteurs (alpha1 et alpha2) :
Si la cible est à droite :
On augmente la vitesse du moteur gauche (alpha1)
On diminue la vitesse du moteur droit (alpha2)
→ Le robot tourne à droite
Si la cible est à gauche :
On augmente la vitesse du moteur droit (alpha2)
On diminue la vitesse du moteur gauche (alpha1)
→ Le robot tourne à gauche
A défaut d'un fonctionnement asservi en vitesse de nos moteurs, nous n'avons pas pu tester cet asservissement angulaire sur notre robot bien qu'une ébauche du code soit implémentée dans la tache du Lidar TaskLIDAR.
La partie matérielle a été conçue avec KiCad 8.0 et comprend :
Pour construire notre carte électronique, il nous a fallut commencer par designer sous KiCad le schéma électrique de notre système électronique, ce que l'on appelle schematic dans KiCad. Nous allons maintenant détaillé les différentes parties du schematic (les sheets du projet KiCad).
Le robot contient plusieurs capteurs, un capteur Time Of Flight TOF, un capteur LIDAR, et un capteur accéléromètre.
Le capteur TOF est un capteur de distance qui communique en I2C avec le cerveau du robot qu'est le stm32. L'avantage de cette communication est qu'elle permet une évolutivité si le besoin d'ajouter d'autres composants matériel par la suite se fait sentir (c'est pourquoi on a prévu des résistances de pull-up pour le bus I2C). Ce n'était pas notre cas, un seul capteur a suffit finalement.
Ces signaux sont représentés sur le connecteur JST de la figure ci-dessous.

Le capteur Accéléromètre est le seul capteur qui communique en SPI.

Comme on peut le voir, pour des raisons CEM nous avons placé une capacité de 1µF et une capacité de 0.1 µF pour découpler les deux alimentations en +3.3V.
Afin de pouvoir débugger le capteur, nous avons également placé des points de test TestPoint.
Le capteur LIDAR est un capteur qui communique par liason série UART dont les signaux sont les suivants :

Les composants qui s'assure déplacer le robot sont les moteurs qui sont des mcc FIT 0520.
Pour commander ces moteurs nous avons besoin de driver, ce sont eux qui vont envoyer les signaux de commande au moteur (des PWM).
Les drivers utilisés sont les ZXBM5210-S-13.

Voici le schéma du composant. Les sorties out 1 et out 2 sont connectés au moteur par Motor1+ et Motor 1-.
Comme ce sont les signaux de commande PWM, nous avons découplé ces signaux avec des capacités de 100nF.
Quant aux signaux d'alimentation, nous découplons la tension de la batterie avec une capacité de 10 µF pour le signal Vm et une capacité de 1µF pour la tension VBAT.
Le signal PWM_MOT1_CH1 est le signal PWM généré par le STM32 en direction du pin FWD du composant. Le signal PWM_MOT1_CH2 est le signal PWM généré par le STM32 en direction du pin REV du composant.
D'après le tableau de la datasheet, si on envoie un signal PWM pour contrôler le driver en mode "PWM control mode".
Il faut alors envoyer un signal PWM en entré sur un des pins FWD ou REV. Ce qui donnera naissance à un signal PWM en sortie de fréquence égale à celle en entrée du pin qui reçoit le signal PWM.
Comme nous avons deux moteurs, il faut deux drivers, voici le schéma du deuxième driver :

Pour obtenir la vitesse des roues, nous utilisons les encodeurs des moteurs. Pour cela il faut préparer, l'alimentation et les signaux dont ils ont besoin dans un connecteur (jst en l'occurrence).
D'après la documentation des moteur/encodeurs, les signaux sont placés de la façon suivante sur le brochage :

On peut lire sur cette image que les signaux de l'encodeur sont les suivants :
Nous avons placé ces signaux, entre les deux signaux destinés au moteurs, et conservé l'ordre d'affectation des broches de la documention, ce qui donne ce schéma de connecteur :

Dans cette feuille, nous avons connecté les composants suivants, le STM32, la STlink, le quartz, des leds, un bouton pour changer d'état et un bouton NRST pour reset le STM32.

Pour assigner les pins du STM32, nous avons positionné d'abord les signaux PWM sur le timer 1, puis ceux des encodeurs. Les encodeurs, qui fonctionnent à une fréquence plus basse que les signaux PWM, ont besoin de leurs propre timer (le timer 3) configurés en mode "encoder mode".
Ensuite nous avons connecté les signaux restant :
Nous avons ajouté une résistance de pull-up sur le signal SDA et SCL respectivement de 3.3 kOhms et 2.2 kOhms
Lors des transitions rapides des circuits internes du microcontrôleur, comme celles générées par les horloges et les commutations d’état des broches, des variations soudaines de courant peuvent se produire. Ces fluctuations génèrent des perturbations haute fréquence qui risquent de déstabiliser l'alimentation. Les condensateurs de 100 nF, placés aussi près que possible des broches d'alimentation (VDD, VDDA), jouent un rôle important en filtrant ces perturbations haute fréquence, agissant ainsi comme un réservoir d'énergie pour combler les besoins instantanés.
Pour stabiliser davantage l’alimentation, un condensateur de capacité plus élevée, comme un 4,7 µF, est ajouté. Celui-ci répond aux variations de courant plus lentes et de plus grande amplitude. Par ailleurs, des broches spécifiques comme VDDA et VREF+, utilisées pour des fonctions sensibles telles que les convertisseurs analogiques-numériques (ADC), exigent une alimentation particulièrement propre. Un condensateur de 1 µF y est ajouté pour découpler VREF+ tandis qu'un condensateur de 10 nF découple VDDA.
Ainsi, la combinaison de condensateurs de différentes valeurs, placés stratégiquement près des broches concernées, permet de garantir la stabilité et la fiabilité du microcontrôleur STM32 tout en réduisant les effets des perturbations électriques.
Le quartz fonctionne avec des niveaux de signaux très précis pour maintenir une oscillation stable. Sans découplage capacitif, les variations de tension peuvent causer des décalages de phase ou des changements de fréquence. Le condensateur agit comme un filtre passif, en éliminant les hautes fréquences parasites et en assurant une meilleure stabilité du signal.
Les signaux électriques OSC_In et OSC_OUT peuvent parfois inclure des pics de tension ou des variations transitoires. Un découplage capacitif agit comme une barrière, protégeant le quartz de ces stress électriques, augmentant ainsi sa durée de vie. La valeur de la capacité de découplage est 10 pF pour l'entrée et 10pF pour la sortie du quartz. En résumé, le découplage par une capacité assure une meilleure isolation, stabilité, et performance du circuit oscillateur.
La ST-Link est un outil nécessaire pour la gestion et le développement des microprocesseurs STM32. Elle remplit deux fonctions principales : la programmation du microprocesseur, en permettant de flasher le code directement sur celui-ci, et le débogage, grâce à une interface de communication série dédiée.
En bref, la ST-Link établit un lien direct entre l’environnement de développement et le STM32, simplifiant le processus de programmation et assurant une prise en charge efficace du débogage.
Le PCB est consituté de deux boutons : le premier NRST sert à reset le code qui a été téléversé sur la carte. Le deuxième permet au robot de changer d'état entre souris et chat.

Les leds servent d'indicateurs pour visualiser l'état du robot, il y a une led bleue et une led rouge.

Alimentation et Gestion d'Énergie :



Points d'Attention :

Le PCB à été conçu afin de respecter le cahier des charges en termes de dimension afin de pouvoir l'intégrer facilement au robot.
Les vias ont été placés aussi proches que possible des pastilles des composants.
Cela minimise la longueur des connexions, réduisant ainsi les résistances parasites et améliorant la qualité des signaux.
Un mur de vias entoure l’oscillateur externe pour le protéger des interférences électromagnétiques.
Cette isolation réduit le risque de perturbations provenant des autres composants de la carte.
Des vias ont été placés dans les zones où des antennes indésirables pourraient se former.
Cela aide à minimiser les effets d’induction et les émissions parasites.
Des plans dédiés ont été créés pour les signaux importants.
Exemple pour le signal Motor+ qui a son propre plan pour assurer une transmission stable et fiable, réduisant les pertes et les perturbations.
Les plans d’alimentation, tels que 5V et VBAT, ont été placés dans la couche 3 de la carte. Cela permet une meilleure répartition du courant et une connexion optimale aux composants qui nécessitent ces alimentations.
Des vias thermiques ont été ajoutés pour améliorer la dissipation thermique.
Cette pratique concerne des composants contenant des pads thermiques tels que le STM32 et les drivers des moteurs. Ces vias facilitent le transfert de chaleur vers d’autres couches, améliorant la dissipation thermique et empêchant les surchauffes.
Les condensateurs de découplage ont été positionnés au plus près des broches d’alimentation (ex. STM32, drivers).
Cela réduit les parasites haute fréquence et stabilise l’alimentation.
La largeur des pistes a été ajustée pour correspondre aux pastilles des composants.
Cela améliore la transmission des signaux et réduit les impédances parasites.
Des points de test accessibles ont été placés pour faciliter le débogage.
Le logiciel embarqué a été développé avec STM32CubeIDE et inclut :
✅ Déplacement avant/arrière
✅ Rotation sur place
✅ Contrôle indépendant des moteurs
✅ Lecture des encodeurs
🟡 Asservissement en vitesse des moteurs
Fonctionnel mais nécessite des optimisations pour plus de précision
✅ Détection des bords via capteur ToF
✅ Arrêt automatique en cas de détection de vide
✅ Pivot arrière automatique(manœuvre d'évitement)
Testé et validé sur table sans bordure comme visible sur vidéo
✅ Scan LIDAR
✅ Détection des autres robots
🟡 Suivi de cible
Asservissement angulaire pas terminé et lecture du Lidar à améliorer
✅ Changement de rôle via accéléromètre
✅ Mode "Chat" (prédateur), avec une vitesse augmentée
✅ Mode "Souris" (proie)
🟡 Algorithme de poursuite
Base implémentée, work in progress
Pour conclure, ce projet nous a permis de mettre en pratique et d'approfondir nos connaissances en électronique et systèmes embarqués.
La réalisation de StealthKitty, de la conception du PCB à l'implémentation du firmware, nous a confrontés aux défis concrets de l'ingénierie : optimisation CEM, conception de cartes multicouches, intégration de capteurs et développement d'algorithmes de contrôle en temps réel.
Cette expérience pratique a été formatrice, a renforcé notre compréhension des systèmes embarqués et nous a préparés aux futures exigences du monde professionnel.
📝 Ce projet est sous licence MIT.
Pour plus d’informations, consultez le fichier LICENSE.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | 1uF | Capacitor_SMD:C_0603_1608Metric | C201, C202, C207, C208, C402, C504, C506, Cs301 |
| 6 | TestPoint | TestPoint:TestPoint_Pad_D1.5mm | TP301, TP302, TP307, TP308, TP309, TP310 |
| 5 | 100 nF | Capacitor_SMD:C_0402_1005Metric | C401, C403, C404, C405, C406 |
| 4 | 0.1uF | Capacitor_SMD:C_0402_1005Metric | C502, C503, C505, Cio301 |
| 4 | 1k | Resistor_SMD:R_0402_1005Metric | R403, R404, R405, R507 |
| 4 | Conn_01x06 | Connector_JST:JST_XH_S6B-XH-A_1x06_P2.50mm_Horizontal | J201, J202, J301, J302 |
| 4 | ~ | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H401, H402, H403, H404 |
| 3 | 22uF | Capacitor_SMD:C_0805_2012Metric | C501, C507, C509 |
| 2 | 10 pF | Capacitor_SMD:C_0402_1005Metric | C409, C411 |
| 2 | 100k | Resistor_SMD:R_0402_1005Metric | R501, R502 |
| 2 | 100n | Capacitor_SMD:C_0402_1005Metric | C204, C205 |
| 2 | 10uF | Capacitor_SMD:C_0603_1608Metric | C203, C206 |
| 2 | SW_Push | Button_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mm | SW401, SW402 |
| 2 | ZXBM5210-SP | Package_SO:Diodes_SO-8EP | U1, U2 |
| 1 | 10 nF | Capacitor_SMD:C_0402_1005Metric | C408 |
| 1 | 100nF | Capacitor_SMD:C_0402_1005Metric | C412 |
| 1 | 10K | Resistor_SMD:R_0402_1005Metric | R407 |
| 1 | 10k | Resistor_SMD:R_0402_1005Metric | R406 |
| 1 | 15pF | Capacitor_SMD:C_0402_1005Metric | C508 |
| 1 | 16k | Resistor_SMD:R_0402_1005Metric | R504 |
| 1 | 2.2k | Resistor_SMD:R_0402_1005Metric | R402 |
| 1 | 20 | Resistor_SMD:R_0402_1005Metric | R503 |
| 1 | 3.3k | Resistor_SMD:R_0402_1005Metric | R401 |
| 1 | 4.7 uF | Capacitor_SMD:C_0603_1608Metric | C407 |
| 1 | 4.7uH | Library:INDPM5050X200N | L501 |
| 1 | 40.2k | Resistor_SMD:R_0402_1005Metric | R506 |
| 1 | 7.68k | Resistor_SMD:R_0402_1005Metric | R505 |
| 1 | ADXL343 | Package_LGA:LGA-14_3x5mm_P0.8mm_LayoutBorder1x6y | U301 |
| 1 | BU33SD5WG-TR | Library:SOT95P280X125-5N | PS501 |
| 1 | Battery_Cell | Connector_JST:JST_XH_S2B-XH-A-1_1x02_P2.50mm_Horizontal | BT501 |
| 1 | Conn_01x02 | Connector_JST:JST_XH_S2B-XH-A-1_1x02_P2.50mm_Horizontal | Alim_charger501 |
| 1 | Conn_01x08 | Connector_JST:JST_XH_S8B-XH-A_1x08_P2.50mm_Horizontal | J303 |
| 1 | Conn_ST_STDC14 | Connector_PinHeader_1.27mm:PinHeader_2x07_P1.27mm_Vertical_SMD | J401 |
| 1 | Crystal_GND24_Small | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y401 |
| 1 | LED_ON | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D501 |
| 1 | LED_purple | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D402 |
| 1 | LED_status_LiDAR | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D403 |
| 1 | LED_status_orange | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D401 |
| 1 | LOGO | Library:LOGO | G*** |
| 1 | M1_PWM_FWD | TestPoint:TestPoint_Pad_D1.5mm | TP201 |
| 1 | M1_PWM_REV | TestPoint:TestPoint_Pad_D1.5mm | TP202 |
| 1 | M2_PWM_FWD | TestPoint:TestPoint_Pad_D1.5mm | TP203 |
| 1 | M2_PWM_REV | TestPoint:TestPoint_Pad_D1.5mm | TP204 |
| 1 | MP1475DJ-LF-P | Library:SOT65P280X100-8N | IC501 |
| 1 | STM32G431CBU6 | Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm | U401 |
| 1 | Switch | Connector_JST:JST_XH_S3B-XH-A-1_1x03_P2.50mm_Horizontal | SW501 |

MohamedBenabdelhadi/2425_ESE_Projet_V-NOM
Mohamed Benabdelhadi_Nouhaila Faris_Oliver Belliard_Valerian Priou

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.


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.

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


HOSTEER/ESE2024
Activer doxygen dans les propriétés du projet -> général C/C++, tuto doxygen https://www.youtube.com/watch?v=GC9Xy7nLxyw

It measures 54 × 57 mm and has 4 copper layers, 1.6 mm thick.
82 parts, built around the STM32G431CBU6, ZXBM5210-SP, MP1475DJ-LF-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.
From the flexdrt/2425_ESE_Projet_StealthKitty repository on GitHub, at the commit this page was made from: the board is hardware/StealthKitty.kicad_pro/StealthKitty.kicad_pro.kicad_pcb and its schematic annexes/logic center stm32/meziane_part/1_0/Block STM32.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 flexdrt before reusing the design.