Dans le cadre du projet de fin d’année du 2ᵐᵉ cycle d’ingénierie, j’ai contribué à la conception d’un bras robotisé multi-axes avec trois missions principales :
Concevoir un bras robotisé multi-axes capable d’effectuer des mouvements précis et coordonnés, afin d’exécuter des tâches de manipulation telles que la prise, le déplacement et le dépôt d’objets, en autonomie partielle ou totale.
Le projet visait à intégrer plusieurs domaines de la mécatronique (électronique, mécanique et programmation embarquée) pour créer un système complet et fonctionnel, du schéma de commande jusqu’à la structure physique du bras.
Le choix des composants a été guidé par un équilibre entre performance, fiabilité et simplicité d’intégration :
Servomoteurs : offrent un couple élevé à grande vitesse (≈10 kg·cm), idéaux pour les articulations.
Moteur pas à pas NEMA 17 : garantit un positionnement angulaire précis et stable.
Accéléromètre MPU-6050 : permet d’analyser la vitesse et l’accélération du bras pour ajuster les mouvements.
J’ai conçu et optimisé le schéma d’alimentation et de commande en m’appuyant sur une logique de signaux PWM.
Les moteurs sont pilotés par trois broches principales (RB11, RB13, RB15) associées à trois sorties PWM indépendantes.
Cette architecture a permis d’obtenir :
Un contrôle précis de la position angulaire,
Une régulation de la vitesse et de l’accélération,
Une alimentation stable pour éviter les chutes de tension pendant les pics de couple.
J’ai calculé la période du signal PWM à partir de la fréquence d’oscillateur (7,37 MHz) afin d’obtenir une plage de largeur d’impulsion comprise entre 500 µs et 2500 µs.
Cette étape a permis d’adapter la commande à la réponse mécanique du servomoteur.
La formule utilisée :
PTPER = (PWM / TCY) – 1
PTPER = 7,37 × x – 1, pour x ∈ [500 µs ; 2500 µs]
Le code a été développé en langage C sous MPLAB X IDE.
InitApp(void)Cette fonction initialise les broches de sortie, configure le module PWM et définit les cycles de travail.
Elle permet de synchroniser les trois servomoteurs selon les pins RB11, RB13, RB15.
convert_deg()Convertit un angle en durée d’impulsion, assurant une correspondance exacte entre la consigne logicielle et la position physique du moteur.
motor1() et motor3()Elles assurent le contrôle individuel ou simultané des moteurs.motor3() synchronise les trois servomoteurs avec des angles définis, tandis que motor1() ajuste finement un seul moteur.
main(void)Le programme principal exécute une boucle infinie (while(1)) pour enchaîner plusieurs positions programmées avec un délai de 2 s entre chaque mouvement.
Ce fonctionnement permet d’observer la coordination des moteurs et de tester les séquences de mouvement.
Le bras robotisé exécute des mouvements cohérents, précis et synchronisés entre plusieurs axes.
Le projet a permis de consolider mes compétences en électronique embarquée, automatisation et programmation bas-niveau C.
Vous recherchez un profil technique, curieux et rigoureux pour renforcer votre équipe ou collaborer sur un projet d’ingénierie ? Contactez-moi pour échanger sur vos besoins en développement, mécatronique ou automatisation.
Ingénieur en mécatronique et passionné de technologies numériques, je développe aussi des projets web et cultive ma passion pour le sport