Académique Documents
Professionnel Documents
Culture Documents
Edition 3 - 22/02/2018
PROJET ATS :
RESOLUTION DE
LABYRINTHE
CHAÎNE D’INFORMATION
CHAÎNE D’ENERGIE
Problématique
L’ambition de ce projet est de concevoir 2 robots, qui auront pour finalité
de résoudre un labyrinthe.
Sommaire
A.Analyse fonctionnelle et structurelle! __________________________________________5
A.1.Diagramme des exigences
5
A.2.Diagramme de définition de blocs du robot autonome
6
A.3.Diagramme de définition de blocs du robot piloté
7
A.4.Diagramme de bloc interne du robot piloté
8
B.Problématiques à résoudre!__________________________________________________9
B.1.Liste des problématiques
9
B.2.Ressources
10
B. Problématiques à résoudre
B.1. Liste des problématiques
B.2. Ressources
Objectif : comprendre de quelle façon un tel codeur peut être exploité pour
extraire les informations de position et de vitesse d’un moteur
C.1.1. Protocole
L’objectif est d’utiliser les signaux d’un tel codeur pour mesurer la vitesse angulaire et la rotation d’un
arbre moteur
C.1.1.1. Recherche documentaire
Consulter les 2 pages suivantes sur Internet :
Principe du codeur
Exploitation d’un codeur à quadrature
➢ Ouvrir la console : .
Le moteur tourne alors en fonction de la consigne.
Visualiser les signaux issus des 2 codeurs sur l'oscilloscope.
C.1.1.4. Exploitation et conclusions
NB : la méthode décrite ci-dessous s’applique à tous les moteurs du projet. Il faudra mener cette
expérimentation pour chaque motoréducteur, afin d’en extraire un modèle de comportement.
L’objectif est de définir les courbes caractéristiques des points de fonctionnement du moteur
C.2.1.1. Recherche documentaire
Le moteur étudier est le «34:1 Metal Gearmotor 25Dx52L mm HP 6V with 48 CPR Encoder». Le site Internet du
fabricant du moteur fournit quelques caractéristiques du moteur.
Consulter la page https://www.pololu.com/product/2273 et en extraire les données suivantes :
• Rapport de réduction
• Couple et courant de décrochage
• Vitesse et courant consommé à vide
• Tension d’alimentation nominale
Les valeurs de couple fournies sont exprimées en oz.in. Chercher sur Internet l’équivalence en Nm
C.2.1.2. Tracé des courbes caractéristiques
A partir des données constructeurs, un programme Matlab permet de construire les courbes caractéristiques
de ce moteur
Télécharger le programme Matlab, ainsi que le protocole expérimental
Ouvrir Matlab et lancer l'application téléchargée
Après avoir renseigné les données constructeur, le programme affiche les courbes caractéristiques qu’il faut
sauvegarder afin de pouvoir les exploiter ultérieurement, ainsi que la résistance d’induit et la constante de couple du
moteur.
Identifier la valeur de la résistance d’induit et la constante de couple
L’objectif est de déterminer un modèle de comportement sous forme de fonction de transfert du moteur
C.2.2.1. Réalisation du câblage expérimental (moteur équipé d’un codeur à quadrature)
Réaliser le câblage ci-dessous
Appeler le professeur pour la validation du câblage
Afin d’avoir la tension réelle en sortie du hacheur, connecter un multimètre aux bornes du moteur
Afin d’avoir la tension réelle en sortie du hacheur, connecter un multimètre aux bornes du moteur
C.2.2.3. Préparation logicielle
Les programmes exploités pour le tracé sont au nombre de 2 :
• Arduino pour programmer l’échelon en tension
• Matlab pour afficher le résultat
Télécharger les programmes Arduino et Matlab. (les programmes avec l’indice 2 affichent en supplément
l’allure de la réponse du courant moteur)
1. Lancer le logiciel Arduino et ouvrir le programme téléchargé précédemment. Aux lignes 52 à 54 de ce
programme, sélectionner le type d’échelon à appliquer :
Les // signalent un commentaire, donc une ligne non prise en compte. Dans l’exemple ci-dessus, la vitesse du
moteur est réglée à un rapport cyclique du hacheur égal à 70%. Pour une valeur réglable, activer la ligne 53 et pour
une entrée sinusoïdale, activer la ligne 54.
3. Lancer le logiciel Matlab et ouvrir le fichier téléchargé. A la ligne 21 de ce programme, renseigner le
nom du port sur lequel est connecté l’Arduino :
Pour connaître le numéro de port, vous pouvez cliquer, dans le logiciel Arduino, sur «Outils > Port» : le numéro
de port y est indiqué
Lancer l’application en cliquant sur «Run» :
C.2.2.4. Exploitation des résultats et conclusion
Pensez à écrire sur votre compte-rendu la fonction de transfert ainsi identifiée, qui sera utile pour les
asservissements du moteur.
Nota : Si les expérimentations de la problématique 2 ne sont pas encore achevées, on pourra mener l’analyse
avec cette fonction de transfert proposée :
4,82
H moteur ( p) =
1+ 0,2 p + 8.10 −3 p 2
L’objectif est de définir les paramètres optimum de l’asservissement, de façon à respecter le cahier des
charges
On cherche à avoir un erreur statique nulle, une marge de phase de 45°, et un temps de réponse de 100ms.
Par ailleurs, on tolère un dépassement maximum égal à 10%.
KI KD p
Le correcteur envisagé est de type PID, d’expression C( p) = K P + + (N désigne la constante de
p 1+ Np
temps du filtre de l’action dérivée. On prendra N=10-4)
L’objectif est d’implanter le correcteur continu précédent sous la forme d’un correcteur numérique
échantillonné, et de valider le comportement réel du moteur
Réaliser le câblage page suivante, qui permet d’afficher la réponse du moteur asservi en vitesse à un
échelon de tension. Dans ce montage, les valeurs des coefficients Kp, Ki et Kd, ainsi que la consigne, sont réglables
à l’aide de potentiomètres.
De même, si le hacheur retenu est le DFRobot, mettre en commentaire la ligne 138 (la faire précéder de //)
Télécharger ensuite le programme Matlab qui servira à afficher la réponse indicielle. Décompresser l’archive
et ouvrir le programme Lecture_serial_Asservissement_vitesse.m, ainsi que le modèle Comparaison_expe_modele.slx
Les châssis des deux robots doivent permettre le montage des motoréducteurs des roues et de la roue libre,
des micro contrôleurs (Arduino et ECIO40 pour le robot piloté), des capteurs, des driver moteur, de la caméra et de
l’alimentation.
La structure sera la plus simple possible
Certains éléments modulaires sont disponibles en téléchargement :
• Contrôleurs : Arduino Mega2560 - Arduino Nano - Arduino Uno
• Drivers moteur : Arduino Motor Shield - Driver DFR-19
• Moteurs : Pas à pas RS-191-8299 - Pas à pas T2129 - Servomoteur - Motoréducteur RB-Dfr-667
• Interface communication : Module 433 MHz - Caméra JF01
• Capteurs : Accéléromètre LSM6DS3 - Magnétomètre LSM303D - Sonar HC-SRO4
• Divers : Ball Caster - Kit Moteur-Roues - Tourelle servomoteurs - Support capteur Sonar
λ + CG
+ + + + +
D l A G A D
e e
C.5.1. Données
!!!" !
+
G
!!" u
TG FTD !
+
!!" v
D
!" TD !
P z
L’objectif est de définir une vitesse limite en virage au-delà de laquelle le robot risque de basculer.
En notant I CG,1 la matrice d’inertie en CG du robot (1), écrire l’expression du torseur dynamique { D1/0 }
L’objectif est de définir une vitesse limite en virage au-delà de laquelle le robot risque de déraper.
On note f le coefficient d’adhérence du contact roue/sol.
Chercher la valeur du coefficient d’adhérence dans le cas d’un contact caoutchouc/béton
Ecrire la condition de non glissement des roues arrières.
A partir des équations issues du Principe Fondamental de la dynamique, écrire la condition sur la vitesse en
fonction du rayon de virage pour assurer le non glissement des roues arrière.
A la vitesse maximale possible, calculer le rayon minimal de virage pour éviter le dérapage.
Evaluer les performances du robot en réponse à une consigne de tension de 6V sur les
moteurs.
En déduire la valeur moyenne de l’accélération γ1/0
Paramétrage
!!!!!"
On note G le centre de la roue arrière + !
gauche du robot (1), D celui de la roue arrière I1/0 VG∈1/0 v
droite et M l’entraxe des roues.
!!!!!"
Les données du déplacement sont la
!!!!!"
+
VM ∈1/0
vitesse souhaitée V = VM ∈1/0 et le rayon de r G !!!!!"
virage ρ = I1/0 M ! + VD∈1/0
y M
Le torseur cinématique du mouvement du +
robot (1) par rapport au sol (0) est noté : D
! !
⎧⎪ !!!" " ⎫⎪ x u
Ω =ω z
{C1/0 } = ⎨ 1/0 " 1/0 ⎬ !!!!!" "
⎪⎩ Vu ⎪⎭ M I1/0 M = ρ v
!!!!" "
ω1/0 > 0 dans le cas d’un virage gauche MG = ev
!!!" "
ω1/0 < 0 dans le cas d’un virage droite MD = −ev avec e = 60 mm
!!!!!" !!!!!"
C.6.1.Expression des vitesses VD∈1/0 et VG∈1/0
!!!!!!" "
I1/0 est le centre de rotation. Par conséquent, VI1/0 ∈1/0 = 0 . En déduire l’expression de ω1/0 en fonction de V et
r.
On pose désormais r>0 en cas de virage gauche, et r<0 en cas de virage droite. Ecrire l’expression des
!!!!!" !!!!!"
vecteurs vitesse VD∈1/0 et VG∈1/0 en fonction de V, r et e.
C.6.3.Cas particuliers
Que se passe-t-’il si le rayon de virage est égal à r=2e (centre de rotation au point de contact IG) ?
Que se passe-t-il si le rayon de virage est inférieur à 2e (centre de rotation entre les 2 roues ?
Que se passe-t-il si r=0 (rotation du robot sur lui-même) ?
Modifier le programme Arduino de façon à afficher la distance en mm (il suffit de changer le type de la variable
duration)
Connecter l’Arduino, et visualiser les signaux en procédant à plusieurs mesures de distance.
L’algorithme de Pledge, du nom de son inventeur (Jon Pledge d’Exeter, un garçon de 12 ans), permet de sortir
de tout labyrinthe quelle que soit sa configuration.
Le principe de cet algorithme est décrit sur ce site.
Prendre connaissance de ce principe
Créer un algorithme basé sur l’algorithme de Pledge qui permet au robot de sortir d’un
labyrinthe
Traduire ensuite cet algorithme sous forme de graphe d’état
L’objectif est de tester le graphe d’état précédent dans un robot Lego EV3
Le graphe d’état précédent doit maintenant être implanté dans un robot EV3 à
des fins de test.
Avant tout, il faut calculer l’angle de rotation des roues correspondant à un
pivotement d’1/4 de tour du robot sur lui-même. Pour cela :
1.Mesurer la distance entre les deux roues arrières, et en déduire la longueur
+ que doivent parcourir chacune des roues lors d’une rotation de 90°
2. Après avoir mesuré le diamètre des roues, en déduire enfin l’angle ce
rotation correspondant à cette longueur à parcourir
Cette partie doit se faire en concertation avec le groupe responsable de la problématique 4 (conception du
châssis).
A partir des données du module 2 axes prévu pour le support de caméra, il faut prévoir son installation sur le
châssis, en tenant compte des dimensions du servo moteur retenu.
La rotation en azimut de la caméra se faisant par motoréducteur, il faudra également concevoir la liaison entre
l’arbre moteur de ce motoréducteur et le support de caméra.
L’assemblage Solidworks de la tourelle équipée du servomoteur d’élévation est disponible au téléchargement,
ainsi qu’un modèle de la caméra utilisée.
Emplacement de la
caméra
Plateau à entraîner
par le moteur
Un servomoteur est un actionneur électrique constitué d’un moteur à courant continu, capable de maintenir
une consigne angulaire. Il s’agit d’un actionneur asservir en position.
C.10.1.Principe du servomoteur
Ce site permet de prendre connaissance de la composition d’un servomoteur, et de son mode de pilotage.
A la suite de sa lecture :
Les servomoteurs retenus sont les Hitec HS-422, dont les données constructeurs sont disponibles sur cette
page.
Déduire de la lecture de ces données :
• Le couple maximum
• La vitesse de rotation à vide
• Les largeurs d’impulsion de pilotage (position neutre et pleins débattements)
B a n d e a u h o r i z o n t a l p e r m e t t a n t d ’ i n s é re r u n
potentiomètre (Input), un controleur de servo et un
servo (Mechatronics) :
C.10.3. Test de fonctionnement sur contrôleur Arduino (en secours du test précédent)
C.10.4.Tests du servomoteur
(V) Calibrer la vidéo (afin de renseigner l’échelle pour les mesures de distance) en sélectionnant 2 points
dont on connaît la distance
(VI) Un axe se positionne automatiquement. Déplacer l’origine de cet axe sur le
centre du servomoteur
(VIII) Afficher alors le graphique ω = f (t)
Les angles de la tête sont mesurés à partir d’un magnétomètre pour l’azimut, et à partir d’un accéléromètre
pour l’élévation.
Ce capteur détecte les flux magnétiques,et, en l'absence de champs magnétique perturbateur, détermine la
position du Nord magnétique. Il fournit une indication de cap par rapport à ce Nord magnétique.
Il dispose également de 3 accéléromètres dans les 3 directions x, y et z.
C.11.1.Recherche documentaire
Chercher sur Internet comment, à partir de la connaissance des valeurs des accélérations en x, y et z
mesurées par un accéléromètre, il est possible d’en déduire l’angle de ce capteur autour des axes x et y.
En particulier, le document à cette adresse dresse une étude de l'exploitation des accéléromètres.
C.11.2.Montage expérimental
Le capteur LSM303D doit être relié aux broches suivantes d’un contrôleur Arduino :
• Broche «Vin» du capteur sur broche «3.3V» de l’Arduino (pas 5V)
• Broche «GND» du capteur sur broche «GND» de l’Arduino
• Broche «SDA» du capteur sur broche «A4» de l’Arduino Uno, ou «20» de l’Arduino Mega
• Broche «SCL» du capteur sur broche «A5» de l’Arduino Uno, ou «21» de l’Arduino Mega
Faire vérifier le câblage par le professeur avant de connecter l’Arduino au port USB.
Télécharger et décompresser le programme suivant : Test_LSM303D.ino.zip
Implanter ce programme dans le contrôleur Arduino :
➢ Ouvrir le logiciel Arduino et ouvrir le programme téléchargé
➢ Outils > Port : vérifier le numéro de port auquel Arduino est connecté
➢ Outils > Type de carte : vérifier que le type de carte correspond à l’Arduino utilisé
➢ Implanter le programme dans le contrôleur :
➢ Ouvrir la console : .
⎛ A⎞
On précise que la fonction angleX = atan ⎜ ⎟ s’écrit en langage Arduino sous la forme :
⎝ B⎠
float angleX=atan2(A,B);
Implanter un programme d’essai permettant de mesurer la position de la tête dans les 3 directions. En s’aidant
des résultats de la partie C.11.1, i faudra pour cela modifier le programme Arduino, en demandant le calcul de angleX
et angleY
Afficher ces valeurs dans la console en modifiant les instructions Serial.print
Valider ce programme par comparaison entre les angles réels et les angles mesurés par le programme
C.12.1.Montage expérimental
Il s’agit de tester l’émission et la réception d’informations par voie hertzienne, sur la fréquence 433 MHz.
il faudra 2 contrôleurs Arduino, un pour l’émission des messages, et le second pour la réception.
Télécharger et décompresser les programmes compressés dans le fichier suivant : Test_radio.zip
Implanter le programme emission_date.ino dans le contrôleur Arduino de l’émetteur:
➢ Ouvrir le logiciel Arduino et ouvrir le programme téléchargé
➢ Outils > Port : vérifier le numéro de port auquel Arduino est connecté
➢ Outils > Type de carte : vérifier que le type de carte correspond à l’Arduino utilisé
➢ Implanter le programme dans le contrôleur :
➢ Ouvrir la console : .
Vérifier que la manipulation des potentiomètres modifie la valeur affichée sur la console
Sur un autre ordinateur distant, implanter ensuite le programme reception_date.ino dans le contrôleur Arduino
du récepteur.
Câblage du récepteur:
Broche «DATA» sur broche 7 de l’Arduino
Broche «Vcc» sur «5V»
Broche «GND» sur «GND»
Câblage de l’émetteur :
Broche «DATA» sur broche 12 de
l’Arduino
Broche «Vcc» sur «5V»
Broche «GND» sur «GND»
Afficher la console de l’Arduino du récepteur, et vérifier que la manipulation des potentiomètres de l’émetteur
sont effectivement répercutés sur la console du récepteur.
La diode sur le montage du récepteur clignote en fonction des consignes émises par radio.
La caméra est asservie en fonction de la position angulaire transmise par liaison radio à l’Arduino. Ce
contrôleur transmet cette position angulaire au contrôleur ECIO40P ou Arduino Mini dans lequel il va falloir implanter
l’asservissement
3 motorisations sont envisagées : Servomoteur - MCC+codeur - Moteur pas à pas
Ce principe est relativement simple à mettre en oeuvre, car les servomoteurs sont des
actionneurs asservis en position. Il suffit donc de piloter ces servomoteurs en fonction de
la consigne en azimut souhaitée.
En revanche, l’amplitude angulaire est limitée à 120° pour la majorité des servomoteurs.
C.2.1.1.Schéma de câblage
Réaliser le schéma de câblage suivant :
Il se trouve que les variations rapides des valeurs fournies par le capteur rendent le mécanisme trop réactif, et
donc inexploitable.
Il va donc falloir filtrer les données du capteur de façon à éliminer le bruit : il s’agit d’un filtre passe-bas du 1er
ordre, dont la fonction de transfert est la suivante :
S filtre ( p) 1
H PB ( p) = =
Sbrut ( p) 1+ τ p
Traité de façon numérique, cette fonction de transfert permet d’écrire (voir cours d’informatique sur le
traitement du signal) :
Te
s filtre (ti+1 ) = s(ti )+
τ
( sbrut (ti ) − s filtre (ti )) où Te désigne la période d’échantillonnage
C.2.1.3. Amélioration du programme
Il va falloir implanter ce filtrage dans le programme. Pour cela, il faut insérer :
• un timer dont la fonction sera d’appeler à une fréquence donnée une routine de calcul des signaux filtrés
• une routine qui va calculer la valeur filtrée à partir des valeurs brutes (voir lignes 72 à 75)
Le programme suivant à télécharger intègre le filtrage des entrées, dans lequel il va falloir déterminer la
fréquence d’échantillonnage et la constante de temps.
Se référer à la problématique 11 qui reprend les points à développer dans cette problématique
A partir de ces informations d’angles, il s’agit maintenant d’élaborer les consignes de vitesse des roues du
chariot, de façon à déplacer le robot à la vitesse souhaitée, et sur le rayon de virage souhaité.
A partir des caractéristiques du moteur, mesurées expérimentalement, dessiner le schéma bloc de la mise en
position angulaire (élévation) de la caméra.
Vérifier que les performances du cahier des charges, en réponse à une consigne en échelon et en rampe, sont
respectées.
A l’issue des problématiques 10 et 13, écrire le programme complet des asservissements en position de la
caméra dans le micro contrôleur ECIO40P
Ce programme doit, à partir des 2 consignes émises par le contrôleur Arduino (azimut et élévation de la
position de la tête), envoyer la consigne de tension au moteur assurant l’asservissement en azimut, et la consigne de
position pour le servomoteur assurant l’asservissement en élévation.