Uncategorised
MT4 - Labview - 2 Projets (au choix)
- Détails
- Clics : 39
Projet "Robot mobile"
Méteriel disponible:
- 2 x MCC + codeur: documentation
- 2 roues
- 1 x roue folle
- 1 Arduino Uno
- 1 DRV8833: documentation
- Imprimantes 3D + découpeuse laser
Réalisez une base de robot pour fixer les moteurs et la roue folle.
Objectif 1: Pilotez votre robot par le joystick
Objectif 2: Pilotez votre robot à partir d'une interface Matlab (Utilisation de Stateflow pour les machines d'états et Utilisation de MATLAB App Designer pour l'interface) ou ROS2 (Utilisation de FlexBE machines d'états et Utilisation de Qt Designer pour l'interface).
Projet "Robot 2 axes"
Méteriel disponible:
- 2 x AX12
- 1 Arduino Uno
- Imprimantes 3D + découpeuse laser
Réalisez un bras de robot 2 axes: 1 support sur la table, un mas, 1 AX12, un mas et, à l'extrémité, 1 AX12
Objectif 1: Pilotez votre bras avec le joystick
Objectif 2: Pilotez votre bras à partir d'une interface Matlab (Utilisation de Stateflow pour les machines d'états et Utilisation de MATLAB App Designer pour l'interface) ou ROS2 (Utilisation de FlexBE machines d'états et Utilisation de Qt Designer pour l'interface).
MT4 - TP MPP et les drivers L298 et ULN2003 - sur les servomoteurs - et sur l'AX12
- Détails
- Clics : 73
TP – Commande des moteurs pas à pas (TP1), servomoteurs RC (TP2) et servomoteurs intelligents AX-12A (TP3) avec ROS2
Durée totale estimée : 6 heures (3 TP de 2 heures)
Organisation générale
Ce module comporte trois travaux pratiques indépendants :
- TP1 – Moteur pas à pas avec drivers L298N et ULN2003
- TP2 – Servomoteur rotatif RC
- TP3 – Servomoteur intelligent Dynamixel AX-12A
Chaque TP dure 4 heures et suit la même philosophie pédagogique :
- compréhension théorique,
- câblage,
- mesures à l’oscilloscope,
- programmation embarquée,
- commande via ROS2,
- analyse et comparaison.
TP1 – Commande d’un moteur pas à pas
Objectifs pédagogiques
À l’issue de ce TP, l’étudiant devra être capable de :
- Expliquer le principe d’un moteur pas à pas.
- Identifier la séquence d’excitation des bobines.
- Commander un moteur via ULN2003 et L298N.
- Observer les signaux de commande à l’oscilloscope.
- Commander le moteur depuis ROS2.
Matériel
- 1 moteur pas à pas 28BYJ-48
- 1 driver ULN2003
- 1 moteur pas à pas bipolaire
- 1 module L298N
- 1 Arduino Uno ou ESP32
- 1 oscilloscope
- 1 alimentation 5 V / 12 V
- 1 ordinateur avec ROS2
Partie 1 – Principe du moteur pas à pas
Un moteur pas à pas convertit des impulsions électriques en déplacements angulaires.
Exemple :
- 2048 pas par tour
- angle d’un pas :
θ=360°/2048
Questions :
- Calculer l’angle correspondant à un pas.
- Combien de pas sont nécessaires pour effectuer 90° ?
- Quelle différence entre moteur unipolaire et bipolaire ?
Partie 2 – Commande avec ULN2003
Séquence d’excitation
| Pas | A | B | C | D |
|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 0 |
| 2 | 0 | 1 | 0 | 0 |
| 3 | 0 | 0 | 1 | 0 |
| 4 | 0 | 0 | 0 | 1 |
Questions:
- programmez la carte Arduino afin de commander votre pas à pas dans les 2 sens: 10 secondes dans le sens 1 et 10 secondes dans le sens 2, avec une progression linéaire de la vitesse.
- Réalisez la commande de ce MPP à partir de ROS et de votre clavier
Partie 3 – Mesures à l’oscilloscope
Observer une sortie du ULN2003.
Mesurer :
- fréquence des impulsions,
- rapport cyclique,
- ordre d’activation des bobines.
Questions :
- Quelle bobine est alimentée en premier ?
- Que se passe-t-il si l’ordre des phases est inversé ?
- Comment augmenter la vitesse ?
Partie 4 – Commande avec L298N
Le L298N permet de piloter un moteur pas à pas bipolaire.
Comparer :
- vitesse maximale,
- échauffement,
- bruit,
- couple.
TP2 – Commande d’un servomoteur RC
Objectifs
- Comprendre le signal de commande d’un servomoteur.
- Mesurer les impulsions à l’oscilloscope.
- Positionner le servo.
- Commander via ROS2.
Matériel
- Servomoteur RC (ex. SG90 ou MG996R)
- Arduino ou ESP32
- Oscilloscope
- ROS2
Partie 1 – Principe
Un servomoteur reçoit une impulsion toutes les 20 ms.
- 1,0 ms → 0°
- 1,5 ms → 90°
- 2,0 ms → 180°
Partie 2 – Programme Arduino
#include <Servo.h>
Servo myServo;
void setup() {
myServo.attach(9);
}void loop() {
myServo.write(0);
delay(1000); myServo.write(90);
delay(1000); myServo.write(180);
delay(1000);
}
Partie 3 – Mesures à l’oscilloscope
Mesurer :
- période : 20 ms
- largeur d’impulsion : 1 à 2 ms
Questions :
- Quelle largeur correspond à 90° ?
- Que se passe-t-il si l’impulsion dépasse 2 ms ?
TP3 – Servomoteur intelligent Dynamixel AX-12A
Objectifs
- Découvrir le protocole série TTL.
- Lire et écrire des registres.
- Commander position et vitesse.
- Utiliser ROS2.
Caractéristiques principales
- Résolution : 0 à 1023
- Angle : 0° à 300°
- Communication série TTL
- Retour d’état (position, température, charge)
Partie 1 – Mesures à l’oscilloscope
Observer :
- trames série TTL,
- niveau logique,
- temps de réponse.
Mesurer :
- débit binaire,
- durée d’une trame.
Partie 2 – ROS2
- Commandez l'AX12 en donnant sur une interface, l'angle désiré et l'AX12 se déplace de l'angle désiré.
- Même question mais avec le joystick fourni à cet effet.
Compte-rendu à rendre avant le dimanche 21 juin ici
MT4 - TP MPP et les drivers L298 et ULN2003 - sur les servomoteurs - et sur l'AX12 – Remplir le formulaire
Compte-rendu à rendre avant le dimanche 21 juin ici
MT4 - TP MPP et les drivers L298 et ULN2003 - sur les servomoteurs - et sur l'AX12 – Remplir le formulaire
MT3 - TP MCC et les drivers L298 et la Sabertooth 2x12A
- Détails
- Clics : 137
À la fin du TP, l’étudiant doit être capable de :
- Identifier le comportement d’un moteur à courant continu à aimants permanents.
- Commander un moteur en PWM avec un pont en H.
- Observer les signaux de commande et de puissance à l’oscilloscope.
- Comparer une commande par L298N et par Sabertooth.
- Envoyer des commandes moteur depuis ROS2.
Par groupe :
- 1 moteur DC à aimants permanents
- 1 driver L298N - 2A par pont
- 1 driver "surprise"
- 1 driver Sabertooth - 2x12A
- 1 alimentation continue réglable
- 1 Arduino / ESP32 / Raspberry Pi selon votre architecture
- 1 oscilloscope
- 1 multimètre
- 1 VM ROS2
- câbles Dupont, fils moteur, résistances éventuelles
Partie 1 :
- Que se passe-t-il si on augmente la tension moyenne appliquée au moteur ?
- Pourquoi utilise-t-on une PWM au lieu d’une tension continue variable ?
- Quel est le rôle d’un pont en H ?
- Pourquoi faut-il faire attention au courant de démarrage ?
Partie 2 : L298N
- Commander le moteur à 25 %, 50 %, 75 %, 100 % de PWM.
- Observer la variation de vitesse.
- Mesurer la tension moyenne aux bornes du moteur pour les 4 rapports cycliques.
- Mesurer la tension d'alimentation de L298, mesurer la tension de sortie du L298N pour ∝ = 100% et constater la chute de tension.
- Observez les signaux sur l’entrée ENA (signal PWM de commande) à l’oscilloscope pour les 4 rapports cycliques et donnez les valeurs suivantes : fréquence PWM, rapport cyclique α, tension haute, tension basse.
Rappel : Le rapport cyclique: ∝= TH/T
- Observez la tension aux bornes du moteur et observez la forme hachée de la tension, les pics de commutation, le bruit dû au moteur, l’influence du rapport cyclique.
- La tension moteur est-elle sinusoïdale ?
- Pourquoi voit-on des parasites ?
- Pourquoi la tension moyenne augmente avec le rapport cyclique ?
- Que peut-on ajouter pour réduire les parasites ?
Quelques parties de réponses : condensateur antiparasite, diode de roue libre ou structure interne du pont, câblage court, masse propre, alimentation correctement découplée.
Remarque importante : le L298N est ancien et peu efficace, car il utilise des transistors bipolaires. Il provoque une chute de tension importante et chauffe rapidement.
- Mesure du courant moteur : Selon le matériel disponible (mesure avec pince de courant, ou résistance shunt faible valeur, ou mesure indirecte par l’alimentation)
Complétez ce tableau
|
PWM |
Courant à vide |
Courant au démarrage |
Observation |
|---|---|---|---|
|
25 % |
|||
|
50 % |
|||
|
75 % |
|||
|
100 % |
- Pourquoi le courant est-il plus élevé au démarrage ?
Quelques parties de réponses : Au démarrage, la vitesse est nulle, donc la force contre-électromotrice E=Ke.Ω est presque nulle. Le courant est donc principalement limité par la résistance du moteur
Partie 2 : driver "surprise"
- Identifiez le driver
- Commander le moteur à 25 %, 50 %, 75 %, 100 % de PWM.
- Observer la variation de vitesse.
- Mesurer la tension moyenne aux bornes du moteur pour les 4 rapports cycliques.
- Mesurer la tension de sortie du L298N et constater la chute de tension pour les 4 rapports cycliques.
- Observez les signaux sur l’entrée ENA (signal PWM de commande) à l’oscilloscope pour les 4 rapports cycliques et donnez les valeurs suivantes : fréquence PWM, rapport cyclique α, tension haute, tension basse.
Rappel : Le rapport cyclique: ∝= TH/T
Partie 3 : La sabertooth
Le Sabertooth est plus adapté à la commande de moteurs DC de puissance que le L298N.
Modes possibles :
- commande analogique,
- commande PWM / RC,
- commande série simplifiée,
- commande série packetized.
Pour le TP, le plus simple est d’utiliser une commande série simplifiée ou une commande PWM selon votre configuration.
- Commander le même moteur avec le Sabertooth. (4 rapports cycliques différents)
- Refaire une mesure de tension moteur.
- Comparer l’échauffement.
- Comparer la stabilité de la commande.
- Comparer le comportement au démarrage.
Questions :
- Pourquoi le Sabertooth est-il préférable pour un robot mobile ?
- Pourquoi le L298N reste-t-il intéressant pédagogiquement ?
- Quelle solution choisiriez-vous pour un robot autonome ?
Partie 4 : Commande ROS2
ROS2 cmd_moteur → node Python ou C++ → liaison série USB → ArduinoESP32 → L298 ou sabertooth → moteur DS
Nom du topic : /cmd_moteur
Type simple : std_msgs/msg/Int16
|
Valeur |
Effet |
|---|---|
|
0 |
arrêt |
|
100 |
vitesse max sens avant |
|
-100 |
vitesse max sens arrière |
|
50 |
demi-vitesse avant |
|
-50 |
demi-vitesse arrière |
Exemples de commandes manuelles :
ros2 topic pub /cmd_motor std_msgs/msg/Int16 "{data: 50}"
ros2 topic pub /cmd_motor std_msgs/msg/Int16 "{data: 0}"
ros2 topic pub /cmd_motor std_msgs/msg/Int16 "{data: -50}"
- Créer un package ROS2.
- Créer un nœud motor_controller.
- S’abonner au topic /cmd_motor.
- Envoyer la valeur reçue à la carte Arduino ou ESP32.
- Vérifier la commande du moteur.
- Tester les valeurs : -100, -50, 0, 50, 100.
Compte-rendu à rendre avant le 5 juin 2026 ici
La compilation d'un workspace ROS2
- Détails
- Clics : 101
La commande est colcon build
Elle permet de à ROS2 de :
- chercher les packages dans src/
- analyser les dépendances
- compiler le code C++
- préparer les scripts Python
- génèrer les messages/services ROS2
- créer les exécutables
- installer le tout dans install/
Avant compilation, on a, par exemple:
mon_ws/└── src/├── robot_pkg/├── lidar_pkg/└── camera_pkg/
et après compilation, on obtient:
mon_ws/├── src/├── build/├── install/└── log/

Le dossier le plus important : install/
C’est ici que ROS2 place :
- les exécutables ;
- les scripts Python ;
- les bibliothèques ;
- les messages compilés ;
- les launch files.
et surtout, le fichier install/setup.bash
Pourquoi faut-il compiler ?
Parce que ROS2 doit :
- transformer le C++ en binaire ;
- préparer les packages Python ;
- générer les interfaces ROS2 ;
- résoudre les dépendances.
Le fichier Launchfile
- Détails
- Clics : 94
Dans ROS 2, un launch file sert à démarrer automatiquement plusieurs nœuds et leur configuration avec une seule commande.
Sans launch file, il faudrait ouvrir plusieurs terminaux et lancer chaque nœud manuellement: ros2 run ....
Le launch file joue donc le rôle de :
- chef d’orchestre ;
- script de démarrage ;
- système de configuration du robot ou de l’application ROS2.