IMA5 2019/2020 P11
Sommaire
- 1 Présentation générale
- 2 Préparation du projet
- 3 Etat de l'art
- 4 Réalisation du Projet
- 4.1 Semaine 1&2 :09 - 22 Septembre
- 4.2 Semaine 3 :23 - 29 Septembre
- 4.3 Semaine 4 :30 Septembre - 06 Octobre
- 4.4 Semaine 5 :07 - 13 Octobre
- 4.5 Semaine 6 :14 - 20 Octobre
- 4.6 Semaine 7&8 :21 Octobre - 03 Novembre
- 4.7 Semaine 9 & 10 :04 Novembre - 17 Novembre
- 4.8 Semaine 11 :18 Novembre - 24 Novembre
- 4.9 Semaine 12 & 13 :25 Novembre - 08 Décembre
- 4.10 Semaine 14 :09 Décembre - 15 Décembre
- 4.11 Semaine 16 & 17 :06 Janvier - 19 Janvier
- 4.12 Semaine 18 & 19 :20 Janvier - 02 Février
- 4.13 Semaine 20 :03 Février - 09 Février
- 4.14 Semaine 21 :10 Février - 16 Février
- 5 Documents Rendus
Présentation générale
Etudiants : Xuelu YAN
Encadrant : Blaise Conrard
Objectifs
Destinée comme démonstrateur des compétences IMA le projet vise à construire une réalisation de labyrinthe à bille autonome où un système de commande contrôle le parcours d'une bille sur un plateau mobile avec des obstacles.
Description
Pour cette réalisation, les suggestions suivantes sont proposées : - création de l'équipement à la découpe laser - utilisation d'un arduino comme système de traitements - utilisation d'une caméra comme capteur de position - utilisation de servo-moteurs pour le contrôle de l'inclinaison du plan.
Préparation du projet
Cahier des charges
Contexte
C'est le projet de IMA5. Ce projet vise à réaliser un démonstration où une bille parcourt un labyrinthe. Il doit se déplacer en douceur vers la position désignée en fonction de l’itinéraire spécifié. Une fois le projet terminé, il sera exposé lors de la journée portes ouvertes.
Objectif
L'objectif du projet est de créer un labyrinthe dans lequel une bille doit suivre une trajectoire de la surface. L'un des systèmes de contrôle assure le mouvement de la bille grâce au contrôle de la pente de la surface.
Fonctionnement
1. La bille se déplace en douceur
La bille doit éviter les obstacles et se déplacer en douceur dans le labyrinthe.
2. Déterminer les coordonnées de la bille
Pendant le mouvement de la bille, le système doit surveiller ses informations de position en temps réel et obtenir les coordonnées de la bille.
3. La bille se déplace selon la trajectoire spécifiée
Nous utilisons le programme pour définir la trajectoire de la bille. La bille peut répéter le mouvement en fonction de la trajectoire spécifié.
Ressources
Sous la direction de mon tuteur Blaise Conrard, ce système est réalisé par moi personnellement. Le matériel informatique, les composants et le support technique requis dans ce système sont fournis par l’école.
Delai
Il est prévu de mettre en place le fonctionnement et l’utilisation du système au début du mois de février 2020. La date de livraison est fin février 2020.
Choix techniques : matériel et logiciel
Liste des tâches à effectuer
Tâche | Heures S1 | Heures S2 | Heures S3 | Heures S4 | Heures S5 | Heures S6 | Heures S7 | Heures S8 | Heures S9 | Heures S10 | Heures S11 | Heures S12 | Heures S13 | Heures S14 | Total |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Déterminer le cahier de charges | 2 | 2 | 1 | 5 | |||||||||||
Choisir et étudier sur les matériaux | 1 | 2 | 4 | 2 | 9 | ||||||||||
Chercher les informations sur le projet | 1 | 1 | 2 | 2 | 2 | 8 | |||||||||
Dessiner le schéma de conception | 2 | 2 | 4 | ||||||||||||
Equipement - Labyrinthe (3D) | 1 | 1 | 2 | 1 | 5 | ||||||||||
Tester les machines | 3 | 3 | |||||||||||||
Circuit électrique | 2 | 1 | 3 | ||||||||||||
Code Arduino | |||||||||||||||
Rencontre avec M.Blaise CONRARD | 1 | 1 | 1 | 1 | 1 | 5 | |||||||||
Remplissage du wiki | 1 | 1 | 2 | 2 | 1 | 7 | |||||||||
Rédaction du rapport | |||||||||||||||
Total | 5 | 6 | 13 | 12 | 11 | 4 |
Calendrier prévisionnel
Etat de l'art
Réalisation du Projet
Semaine 1&2 :09 - 22 Septembre
* Rendez-vous avec M.Blaise CONRARD - 19/09/2019
Cahier des charges (voir https://cahiersdescharges.com/comment-faire-cahier-des-charges/)
⇒ 1er version pour jeudi 26/9 (par mail)
Réfléchir sur la gestion de projet : méthode employée (WBS, GANTT, quels jalons, forme des livrables à chaque jalon...)
⇒ quelques notes pour le Je 26/9
Prochain RDV : Je 26/9 13h20
Semaine 3 :23 - 29 Septembre
Pour cette semaine, après de déterminer le cahiers de charges et les tâches du projet, j'ai réfléchi que comment dessiner la figure de mécanique. Ce n’est qu’en déterminant au préalable la figure de mécanique, que nous pourrons analyser plus avant la technologie nécessaire au système.
Le principe de la mécanique de la machine
Premièrement, deux moteurs sont placés en bas pour contrôler les axes x et y dans deux directions. J'ai utilisé une structure de support à bascule orthogonale. La rotation du moteur provoque le mouvement de va-et-vient de la bielle pour contrôler la déflexion de la plaque. Ensuite, au milieu de la planche, je souhaite utiliser un joint universel et une tige de joint universel pour construire la structure de support. Au niveau de la connexion inférieure, trois fils de fer peuvent être ajoutés pour renforcer la structure. Enfin, nous devons fixer la caméra sur le poteau directement au-dessus du tableau. Et la caméra et les pièces de connexion Arduino sont également fixées sur le poteau. Cela garantit la stabilité de la caméra. La figure de mécanique est comme ci-dessous:
Rendez-vous avec M.Blaise CONRARD - 26/09/2019
Une décomposition du projet est proposée
Une 1ère version du cahier des charges ⇒ A améliorer, il doit décrire les fonctions de l'objet à développer
⇒ A envoyer par mail
Proposition : définir des livrables (forme = doc., photo, dessin...., volume...) pour chaque tâche du projet
⇒ https://www.manager-go.com/gestion-de-projet/glossaire/les-livrables
A Faire :
Améliorer cahier des charges
Développer la décomposition du projet en ajoutant livrables et jalons
Commencer l'analyse technique de certaines fonctions (opt.)
Semaine 4 :30 Septembre - 06 Octobre
Diagramme de processus
Pour cette semaine, j'ai cherché des informations sur ce projet. Et j'ai enfin dessiné le schéma de processus. Le schéma de processus définit les étapes du projet. Et pour chaque étape, je dois étudier les technologies connexes.
choix des matériaux
Après déterminer le processus du projet, j'ai abord choisi les matériaux appropriés.
1. Labyrinthe
Pour la conception du labyrinthe, il faut ajouter quelques déflecteurs et plusieurs obstacles au labyrinthe. C’est aussi l’objectif du projet, le balle doit éviter les obstacles pour atteindre l’emplacement désigné. Il faut d’abord dessiner un labyrinthe sur le logiciel Onshape. Ensuite, je vais utiliser la technique de coupe 3D pour faire le labyrinthe.
2. Servomoteur
Principe:
Le système servo est un système de contrôle automatique qui permet à une quantité de sortie contrôlée d'un objet (comme la position, l'orientation, le statut...) de suivre un changement arbitraire d'une cible d'entrée. Le servomoteur est principalement positionné par impulsions. Lorsque le servomoteur reçoit une impulsion, il fait pivoter l'angle correspondant à une impulsion pour obtenir un déplacement. Le servo-moteur lui-même a pour fonction d'émettre une impulsion. Ainsi, chaque fois que le servo-moteur tourne d'un angle, un nombre correspondant d'impulsions est émis. De cette manière, l'impulsion reçue par le servomoteur forme un écho ou une boucle fermée. En conséquence, le système sait combien d'impulsions ont été envoyées au servomoteur et combien d'impulsions ont été reçues. De cette manière, la rotation du moteur peut être contrôlée avec une très grande précision, ce qui permet d'obtenir un positionnement précis pouvant atteindre 0,001 mm.
Avantage:
1. Précision: réalise un contrôle en boucle fermée de la position, de la vitesse et du couple, résout le problème du moteur pas à pas en déséquilibre;
2, Vitesse: la performance à haute vitesse est bonne, la vitesse nominale générale peut atteindre 2000 ~ 3000 tr / min;
3. Adaptabilité: il possède une forte capacité anti-surcharge et peut résister à trois fois le couple nominal.Il est particulièrement adapté aux occasions avec des fluctuations de charge transitoires et un démarrage rapide.
4. Stabilité: Il fonctionne sans heurts à basse vitesse et ne produit pas d'opération pas à pas similaire à celle d'un moteur pas à pas lorsqu'il tourne à basse vitesse. Convient pour les occasions avec des exigences de réponse à grande vitesse;
5. Rapidité d'exécution: La dynamique d'accélération et de décélération motrices est courte, généralement en quelques dizaines de millisecondes.
6, Confort: la chaleur et le bruit sont considérablement réduits.
3. Arduino UNO
Arduino Uno est une carte à microcontrôleur basée sur l’ATmega328P. Il possède 14 broches d'entrée / sortie numériques (dont 6 peuvent être utilisées en tant que sorties PWM), 6 entrées analogiques, un quartz 16 MHz, une connexion USB, une prise d'alimentation, un en-tête ICSP et un bouton de réinitialisation. Il contient tout le nécessaire pour prendre en charge le microcontrôleur. Connectez-le simplement à un ordinateur avec un câble USB ou alimentez-le avec un adaptateur AC / DC ou une batterie pour commencer.
4. Caméra (pixycam)
Pixy est un capteur de reconnaissance d'image open source qui prend en charge la reconnaissance de couleur multi-objet et multicolore et prend en charge jusqu'à 7 couleurs. Vous pouvez lui dire la couleur que vous voulez et lui apprendre à trouver quelque chose. Pixy prend en charge plusieurs méthodes de communication, telles que SPI, I2C, etc., qui peuvent être directement connectées à la carte de commande Arduino. Installez-le sur votre robot et ajoutez une paire d'yeux à votre petit robot. Il est équipé d'un capteur d'image doté d'un matériel puissant pouvant être utilisé avec un PC pour suivre et analyser des données multicolores. Pixy peut communiquer directement avec l'Arduino. Il envoie des informations de bloc à l'Arduino à 1 Mbit / s, ce qui signifie que le Pixy peut envoyer plus de 6 000 objets identifiés par seconde ou 135 objets identifiés par frame (Pixy peut traiter 50 images par seconde).
Rendez-vous avec M.Blaise CONRARD - 03/10/2019
Avis documents fournis :
Gantt : trés bien
Cahier des charges ⇒ à améliorer
1. Context en premier, mais il décrit les besoins de Polytech, c-à-d., une machine de démonstration
2. Théoriquement pas de solution technique (sauf, éventuellement, dans un paragraphe anexe)
Prochaines étapes :
liste matériel (générique)
bibliographie sur des projets similaires
Questions/Avis :
comment dessiner une pièce 3D ⇒ OnShape
choix moteur ⇒ Un servomoteur est peut-être mieux adapté
choix caméra ⇒ proposé camera pixycam
A chaque fois :
remettre à jour le planning ou le Gantt
transmettre les nouveaux documents ou ceux corrigés
Semaine 5 :07 - 13 Octobre
Pour cette semaine, j'ai obtenu la caméra 'Pixycam' et une chute de bois pour les tester.
Tester la caméra
Avant de tester la caméra, il faut installer le logiciel ‘PixyMon’. Et puis, je l’ai connecté sur le ordinateur pour le tester. Lorsque je l'ai connecté, l'image capturée par la caméra est très floue. J'ai essayé d'ajuster la caméra pour la faire la mise au point. Ensuite, j'ai commencé à apprendre à Pixy à reconnaître un objet. Dans pixymon, j'ai choisi ‘Signature 1’ pour enregistrer la cible du suivi de la caméra. J'ai utilisé le trousseau à titre d'exemple pour tester l'appareil photo. Après l'objet est sélectionné, la caméra suit la position de l'objet bleu sur le trousseau.
Découper le plateau
J’ai réservé la machine ‘Découpeuse Laser’ et le professeur m’a appris comment utiliser la machine. J’ai installé le logiciel ‘Inscape’ pour créer une image d’objet que je veux imprimer. J’ai fait un objet facile pour l’essayer. La circonférence de cet objet est coupée. Le cercle au milieu est gravé.
Rendez-vous avec M.Blaise CONRARD - 10/10/2019
Tuteur :
Corriger/Valider nouvelle version du cahier des charges
Proposer des servomoteurs
Vous :
Tester la caméra => Objectif : exemple de mesure de la position d'un objet
Apprendre à utiliser la découpeuse Laser ⇒ Fabriquer un petit objet
1. rencontrer les FabManager
2. peut être réservation sur http://fabricarium-old.polytech-lille.fr/#!/machines
3. une chute de bois a été donnée
Dessiner un 1er plan de la mécanique de la machine (logiciel libre)
Semaine 6 :14 - 20 Octobre
Dessin du labyrinthe version 1.0
Après j'ai fait la formation de Découpeuse Laser, je comprends comment utiliser la machine pour créer le labyrinthe. Et donc pour cette semaine, j'ai commencé à dessiner la première version du labyrinthe. Comme indiqué ci-dessous, c'est le labyrinthe précis. Il y a quelques murs et obstacles. Je mets la largeur du mur sur 1cm et le diamètre de l'obstacle circulaire sur 1.5cm. La trajectoire de la bille est montrée et il répétera la trajectoire.
La rapport d'image est 1:5
Et ensuite, je l'ai dessiné avec le logiciel 'Inscape'. J'ai ajouté le symbole 'Polytech-Lille'. La taille du labyrinthe est de 30cm x 30cm. Et il faut encore faire un autre planche comme le planche du bas pour mettre les moteurs et les autres matériaux. La taille est de 40cm x 40cm. Cette planche est une simple planche de bois qui ne nécessaire pas de gravure. J'ai aussi ajouté le symbole 'Polytech-Lille'.
Le plan précis du schéma de principe
1). La première partie est la planche du haut. Cette planche est le labyrinthe. Je utilise un joint universel et une tige de joint universel comme support dans la partie centrale inférieure de la planche. De cette façon, la planche peut être plus stable. Et avec le joint universel, la planche peut tourner plus facilement pour incliner. Les deux moteurs contrôlent respectivement l'axe de X et l'axe de Y. Je mets le moteur au milieu du bord du labyrinthe et du point central. Parce que si il est proche du centre, elle a besoin de suffisamment de force pour supporter l'inclinaison de la planche. Si il est loin du centre, il est difficile à contrôler car la planche change rapidement. Donc, les moteurs doivent être placé au milieu.
2). La deuxième partie est la planche du bas. Elle est utilisée pour mettre les machines et Arduino. Le centre de la planche est une tige de joint universel. Je veux utiliser de la colle de verre pour coller trois fils de fer à la planche du bas afin de rendre la structure plus stable. Les moteurs, l'Arduino et d'autres équipements sont placés sur la planche du bas.
3). La troisième partie est la structure détaillée du moteur. J'ajoute un culbuteur à la partie où le moteur tourne. En ajoutant du fil de fer au culbuteur, lorsque le moteur tourne, le culbuteur déplace le fil de fer de haut en bas, de sorte que la plaque supérieure soit inclinée lorsque le fil de fer se déplace.
4). La quatrième partie est la caméra. Je place la caméra sur le pilier pour le séparer du labyrinthe. Parce que la caméra doit être placée dans une position stable. De cette manière, l'image acquise peut être rendue plus précise et les coordonnées de position précises de la bille peuvent être obtenues.
Rendez-vous avec M.Blaise CONRARD - 18/10/2019
Cahier des charges
10/10/2019 : p1 du CR3 ⇒ le texte est à améiolorer (18/10/2019)
Acquisition position
test de la camera : Fini (18/10/2019) : note dans le CR4, p3
Réalisation du labyrinthe/machine
1. Labyrinthe
Formation découpeuse Laser : Fait et fini (18/10/2019), CR3 p.4
A FAIRE (S43) : dessiner un labyrinthe précis (taille, motif, parcours...)
2. Machine
architecture matériel générale : Fait (18/10/2019) : un schéma de principe, CR4, p1-2
A FAIRE : Plan précis
A FAIRE (S43) : un permier plan
3. moteur
Sélectionner moteurs
A FAIRE (S43) : tester l'utilisation (possible ou pas) servomoteur bioloid
A FAIRE (plus tard) : Fixation des moteurs
Semaine 7&8 :21 Octobre - 03 Novembre
Après la réunion avec mon tuteur, j'ai amélioré quelques parties.
Envisager une autre version 2.0 du labyrinthe
Le symbole de Polytech de la première version du labyrinthe est trop petit, donc je l'ai modifié. Et je mets la sortie de la bille à l'intérieur du symbole. Je mets quelques murs, le largeur de la mur est 1.5cm et la longueur de la mur est 6cm. Le trajectoire de la bille est affiché dans le dessin en papier. La rapport est 1:6, l’image réel est de 30cm x 30cm. Après j'ai déterminé le dessin en papier, je l'ai crée dans le logiciel 'Inkscape'.
Tester l'utilisation de servomoteur Bioloid
Cette semaine, j'ai obtenue les servomoteurs. Pour tester les servomoteurs, je m’ai abord référé aux instructions d’utilisation et puis j’ai connecté les deux moteurs avec la source. Et ensuite pour les programmer, il faut installer le logiciel ‘Behavior Control Programmer’ avec le disque. J’ai essayé de réaliser l’action facile, le programme est comme ci-dessous.
Je règle séparément la vitesse et l'angle des deux moteurs, puis observe leur comportement. Il y a deux problèmes :
- Le premier moteur tourne à la vitesse spécifiée, mais le deuxième moteur ne tourne pas. J'ai essayé de changer l'ordre des connexions ou de changer le programme, mais il y a rien qui change.
- Le premier moteur tourne éternellement, l'angle cible j'ai défini est invalide.
Rendez-vous avec M.Blaise CONRARD - 24/10/2019
Matériel en prêt
Caméra Pixy (10/10/2019)
Kit bioloid (18/10/2019)
Un arduino (24/10/2019)
Cahier des charges
10/10/2019 : p1 du CR3 ⇒ le texte est à améiolorer (18/10/2019)
A FAIRE (S45) : ajouter description IHM (bouton, LED... fonction de chacun)
A FAIRE (S45) : préciser rangement ou pas de la caméra
A FAIRE (S45) : préciser l'alimentation
Acquisition position
test de la camera :Fini (18/10/2019) : note dans le CR4, p3
Réalisation du labyrinthe/machine
1. Labyrinthe
Formation découpeuse Laser :Fait et fini (18/10/2019), CR3 p.4
2. Concevoir le labyrinthe
(S43) dessiner un labyrinthe précis (taille, motif, parcours...) :Fait CR5 p1-2
A FAIRE (S45) proposition : envisager/tester une autre version avec Polytech en motif
3. Machine
architecture matériel générale :Fait (18/10/2019) : un schéma de principe, CR4, p1-2
Plan précis
(S43) : un permier schéma
A FAIRE (S45) : préciser les hauteurs, largeur, fixation des moteurs, de la caméra... plus de détails
PLUS TARD : plan de chaque pièce + mode de fixation
4. moteur
Sélectionner moteurs
A FAIRE (S45) : tester l'utilisation (possible ou pas) servomoteur bioloid
PLUS TARD : Fixation des moteurs
PLUS TARD : connexion moteur/arduino + commande des moteurs par arduino
Semaine 9 & 10 :04 Novembre - 17 Novembre
Résoudre les problèmes des moteurs
Avant, j'ai rencontré deux problèmes lors du test du moteur.
J'ai consulté le livre de référence et demandé à mon mentor. J'ai trouvé que la raison pour laquelle le moteur n°2 ne tournait pas était que son numéro de série était devenu le n°6. Ensuite, le programme a changé son numéro en n°2. Testez à nouveau et le moteur n°2 fonctionne correctement. Deuxièmement, nous avons précédemment défini la vitesse de rotation et l'angle de rotation du moteur en sélectionnant différentes fonctions.
Speed
Position
Cependant, j'ai découvert plus tard que le moteur ne tournait pas à la vitesse et à l'angle spécifiés. J'ai ensuite essayé de contrôler la rotation des deux moteurs via les boutons. Les deux boutons de haut et bas sont pour contrôler le moteur n°1, les deux de gauche et droite sont pour contrôler le moteur n°2. Et le programme est comme ci-dessous :
Découper le labyrinthe
Ensuite, j'ai réservé la machine ‘Découpeuse Laser’ pour faire ma planche de labyrinthe. Avant de couper, je dois ajuster divers paramètres. J'ai importé le fichier conçus à l'ordinateur. Avant de couper, je dois ajuster divers paramètres. Le rouge représente la coupe et le noir représente le gravure. Donc, j'ai défini la bordure en rouge , le chemin du milieu et la zone du logo en noir. Le labyrinthe résultant est le suivant :
Rendez-vous avec M.Blaise CONRARD - 15/11/2019
1. Contenu du rendez-vous
CR : description de la fonction des boutons et des voyants trop floue
Prochaines actions : Tester les moteurs commandés par arduino
Conseils de poursuite du projet :
a). Un vrai schéma éléctronique
b). Commencer à réaliser la partie mécanique
2. Tuteur :
matériel de test (câble + plaque d'essai) +composant LS241 ou CI avec 2-portes 3états: A trouver pour le Me 20/11
Accès à une salle de TP
planche de bois pour la suite
Semaine 11 :18 Novembre - 24 Novembre
Tester la caméra avec Arduino
Dans cette semaine, j’ai connecté la caméra avec Arduino. J’ai téléchargé la bibliothèque Arduino sur le site : https://pan.baidu.com/s/1dDpDlvV#list/path=%2F et puis j’ai ouvert le logiciel Arduino et importé le fichier de bibliothèque Pixy correspondant. Pour tester le programme, il faut le compiler et l’importer.
Ensuite j’ai ouvert le moniteur série et il a affiché :
Detected 1: block 0: sig: 1 x: 159 y: 109 width: 61 height: 61Detected 1: block 0: sig: 1 x: 173 y: 114 width: 60 height: 61Detected 1: block 0: sig: 1 x: 146 y: 111 width: 70 height: 65…
Il faut communiquer les informations d’objet identifiées par pixy à Arduino via le port série. Arduino analysera ensuite ces informations pour contrôler les moteurs.
getBlocks () : Cette fonction retournera le nombre d'objets reconnus par Pixy.
Ensuite, on peut obtenir les données de chaque objet identifié via le tableau de pixy.blocks [ ] (chaque membre du tableau correspond à un objet identifié). Chaque membre (i) contient les éléments suivants:
pixy.blocks [i] .signature: le numéro d'étiquette de l'objet identifié;
pixy.blocks [i] .x: les coordonnées de la position centrale de l'objet identifié dans la direction x;
pixy.blocks [i] .y: les coordonnées de la position centrale de l'objet identifié dans la direction y;
pixy.blocks [i] .width: la largeur de l'objet identifié (1 à 320);
pixy.blocks [i] .height: hauteur de l'objet identifié (1 200);
pixy.blocks [i] .print (): une fonction membre utilisée pour imprimer les informations de l'objet identifié sur le port série.
Semaine 12 & 13 :25 Novembre - 08 Décembre
Pour ces deux semaines, J‘ai travaillé sur la partie électronique et j'ai testé les servomoteurs avec l'Arduino.
IHM de chaque composant
Tout d'abord, j'ai déterminé les fonctions que le schéma doit réaliser.
1). LEDs
- LED rouge: indique si le programme est mis en pause.
- LED orange: indique si le système est alimenté (couplée à l'interrupteur).
- LED vert: indique si le programme tourne.
2). Bouton
Le bouton à contact temporaire contrôle la mise en route du système. Une fois le bouton appuyé le programme de gestion du labyrinthe se met en marche. Si le bouton est appuyé à nouveau le programme se met en pause.
3). Interrupteur
L'interrupteur contrôle l'alimentation du système. Activer l'interrupteur signifie que le système est déjà en place et que le courant circule.
4). Servomoteurs
Je me réfère au projet IMA4 de 2015 concernant la commande de servos bioloid pilotés par Arduino. J‘utilise un buffer permettant de commander les servos.
Donc, le schéma est comme suivant:
Tester les servos avec l'Arduino
Pour ce projet, je dois remplacer le CM5 par une carte Arduino, ceci afin d'avoir des possibilités de programmation étendue. Avant toute chose , étudie les caractéristiques électroniques du CM5. Après avoir étudié ces caractéristiques, j'ai remarqué que l'on pourrait directement passer par les ports RX et TX de l'Arduino pour le contrôle des servomoteurs, il suffirait juste d'ajouter un composant 74LS241N pour les contrôles alternatifs de TX et RX. En effet ce buffer trois états permettrait de faire passer alternativement Rx ou Tx en état d'haute impédance, ceci dans le but de n'avoir qu'une unique information sur le bus data vers le servo.
En raison du composant manquant 74LS241N, j'ai choisi de remplacer ce composant par un buffer non inverseur 74LS244N. J'ai réalisé les branchements entre l'Arduino et les servos via ce composant en nous aidant de les datasheets des ces composants. De cette façon, il sera possible de se substituer du CM5 et de commander directement les servos via l'Arduino. J'ai effectué quelques tests en connectant les ports TX et RX de l'Arduino sur les différentes entrées du buffer 3 états. Le test a échoué et la connexion entre les servos et Arduino n'a pas été établie avec succès.
En recherchant les informations, j'ai trouvé que la différence entre 74LS241N et 74LS244N est que le port 2G de ce dernier doit être inversé. En d'autres termes, 74LS241N est un buffer non inverseur et ne peut pas être remplacée directement. Cela signifie que je dois ajouter un inverseur pour obtenir le même effet. J'ai donc ajouté l'inverseur 74HC04N, le schéma des broches est le suivant:
74LS244N & 74HC04N
Ce qui donne pour notre circuit, la figure ci-dessous :
Après avoir ajouté l'inverseur, j'ai réessayé de tester le circuit avec un exemple de code. Le moteur a tourné avec succès. J'ai ouvert le moniteur série en même temps, on peut voir les informations imprimées et connaître la rotation du moteur. On peut utiliser des programmes pour ajuster différents moteurs, y compris le sens de rotation, la vitesse de rotation et l'angle de rotation.
Semaine 14 :09 Décembre - 15 Décembre
Semaine 16 & 17 :06 Janvier - 19 Janvier
Commander les moteurs par ordinateur
Il y a un programme pour Arduino, ça c’est pour déterminer la rotation du moteur. Et il y a un autre programme dans l’ordinateur pour contrôler le fonctionnement du programme.
J’ai essayé d’ajouter des commandes pour que pouvoir imposer une position aux moteurs, commandée par l'ordinateur :
⇒ w tourne le moteur 1 dans le sens horaire
⇒ z tourne le moteur 1 dans le sens anti-horaire
⇒ a et d, pareil pour le moteur 2
Après fonctionner la programme, le résultat est comme ci-dessous :
Mouvement des moteurs commandé par la position d'un objet vu par la caméra
1. Apprend à Pixy un objet
Dans le logiciel PixyMon, j'utilise signature1 pour marquer un objet. Exécutez ensuite le firmware par défaut dans le logiciel. À ce moment, le contenu affiché à l'écran devient un fond noir et une zone carrée où se trouve l'objet.
2. Connecter la caméra avec Arduino
Après avoir réussi à identifier l'objet et à exécuter le firmware, nous avons connecté la caméra et l'Arduino. Exécutez ensuite un programme de base, le port série imprimera toutes les informations de l'objet. Comme indiqué ci-dessous :
3. Commander les moteurs par la position d’un objet
camera_info():Cette fonction permet d'extraire les coordonnées x et y de l’objet reconnu par la caméra.
sport():Dans cette fonction, imprimez les informations de coordonnées de l'objet. Le moteur changera le sens de rotation en fonction du changement des coordonnées de l’objet. J'ai écrit les commandes simples pour le tester. Lorsque la coordonnée x est supérieure à zéro, le moteur 1 tourne à gauche. Le code est le suivant :
Les résultats et les informations d'impression obtenus après l'exécution du programme sont les suivants :
Dessiner le PCB
Avant, j’ai déterminé les fonctions que la carte électronique doit réaliser. Et après j’ai testé le schéma et le dessiné dans le logiciel Fritzing.
Pour cette semaine, j'ai vérifié le circuit pour voir si les broches de chaque composant étaient correctement connectées. Ensuite, j’ai dessiné le PCB, comme ci-dessus :
Rendez-vous avec M.Blaise CONRARD - 06/01/2020
Objectifs pour Ve 10/1 :
Finaliser la commande des moteurs par l'Arduino
pouvoir imposer une position aux moteurs, commandée par l'ordinateur :
⇒ 8 tourne le moteur 1 dans le sens horaire
⇒ 2 tounre le moteur 1 dans le sens antihoraire
⇒ 4 et 6, pareil pour le moteur 2
Donc : 1 programme pour l'arduino (commande des moteurs et écoute de liaison USB/Série)
Pour l'ordi :
soit développer un programme de lecture clavier/transmission USB/Série
soit utiliser un programme standard (ex. : Robot Terminal)
Anticiper étape suivante : réalisation plateau mobile dirigé par les moteurs
Rendez-vous avec M.Blaise CONRARD - 13/01/2020
Rendre le compte-rendu de la semaine S2 (6/1 au 11/1)
Propositons de l'étudiant :
Dessiner le PCB
Poursuite du programme ⇒ Définir un objectif précis (1 ou 2j)
Propositions Encadrant :
Réalisation du plateau mobile commandé par servo-moteur
1) Réfléchir aux élements d'assemblage
2) Usiner plateau, côté de la machine
3) Faire le montage
Avancer le développement informatique
Mouvement des moteurs commandé par la position d'un objet vu par la caméra
Planning et jalons du reste du projet
Demain soir (ma 14/1) : par mail, retourner vos choix de réalisations pour cette semaine
Prochain RdV : Lu 20/1 13h30 (ou avant)
Semaine 18 & 19 :20 Janvier - 02 Février
Carte électronique
Dans la semaine dernière, j’ai dessiné le PCB sur deux face. Mais après avoir consulté l'encadrant, car la carte doit être empilée avec Arduino, on doit concevoir le PCB sur une seule face avec des pistes plus larges. Dans ce cas, afin d'éviter les croix, il faut souder les cavaliers en quelques connexions. Le dessin de conception est le suivant :
Enfin, en raison d'un temps insuffisant, on a choisi d'utiliser le plaque d'essai pour réaliser la partie électronique. J’ai ajouté les broches pour le connecter avec l’Arduino. Après j’ai fini la soudure, je l’ai testé. Les moteurs tournent bien avec les commandes de Arduino. La carte soudée est comme ci-dessous :
Construire la partie mécanique
1. Pour la partie mécanique, j’ai coupé les deux planches (labyrinthe et la planches du bas). J’ai acheté un tube, son diamètre intérieur est 5mm, son diamètre extérieur est 16mm et son longueur est 30cm. J'ai mis l’universel joint dessus le tube. J'ai placé l‘universel joint et la tube au centre du labyrinthe. Percez un trou au centre de la plaque supérieure et fixez le joint universel avec un écrou. Ceci complète la structure de base.
2. J’utilise les composants du servomoteur Bioloid comme la bascule. Et ajouter du fil de fer au milieu. Pour pouvoir contrôler précisément l'inclinaison du labyrinthe, il faut limiter la zone de mouvement du fil, j'ai donc mis un anneau en plastique.
3. Pour fixer le fil de fer sur le labyrinthe, j'ai collé un anneau sur la face dessous.
Calculs de position des servomoteurs
Avant fixer et commencer à commander les servomoteurs, il faut déterminer les trois positions du moteur: la valeur de position initiale, la valeur de position la plus élevée et la valeur de position la plus basse. Je les testé en utilisant la commande :
Dynamixel.move(ID, Position);
- Pour la moteur 1 : 450 (élevée), 757 (basse)
- Pour la moteur 2 : 512 (élevée), 819 (basse)
Enfin, il faut déterminer la valeur de position initiale. Il faut assurer que le moteur tourne pour incliner la plaque, et que la hauteur de sa montée et de sa descente doit être la même, afin que l'inclinaison soit la même dans les deux sens. L'angle entre les positions haute et basse que je fixe est de 90 degrés. Donc, dans la plus grande mesure, l'ascension est la longueur du rayon r de la bascule. Ensuite, la position initiale du moteur doit être à 1 / 2r du sol. Calculé comme suit :
Donc, sur la rapport, les positions initiales des deux moteurs peuvent être déterminées :
- Pour la moteur 1 : 757 - (757-450)/3 = 654.7
- Pour la moteur 2 : 819 - (819-512)/3 = 716.7
Avant fonctionner le système, il faut initialiser chaque fois les positions des deux servomoteurs.
Dynamixel.move(1, 654.7);
Dynamixel.move(2, 716.7);
Rendez-vous avec M.Blaise CONRARD - 20/01/2020
Retour du 14/1 sur objectifs :
- Dessiner le PCB
- Mouvement des moteurs commandé par la position d'un objet vu par la caméra
- Réfléchir et commencer la partie d'assemblage
Etat :
Freiné par problème : pas de commande des moteurs
Mesure de la position d'un objet ⇒ opérationnel
Objectifs pour cette semaine :
Remettre en marche la commande d'au moins 1 moteur
Etudiant : si besoin correction du PCB si défaut identifié
Dessiner les plans des pièces pour le montage
Semaine 20 :03 Février - 09 Février
Assemblage de mécanique
Après construire la structure de base, j'ai fixé les servomoteurs sur la planche du bas. En même temps, j'ai ajouté un fil de fer épais pour mettre la caméra.
Enfin, la structure mécanique est terminée, comme la suivante :
Programme sur le contrôleur P (proportion)
P : Effet d'ajustement proportionnel : l'écart du système est reflété de manière proportionnelle.Une fois qu'un écart se produit dans le système, l'ajustement proportionnel produit immédiatement un effet d'ajustement pour réduire l'écart. Le grand effet proportionnel peut accélérer le réglage et réduire l'erreur, mais une proportion trop grande réduira la stabilité du système et même rendra le système instable.
Le principe de PI est comme ci-dessous :
U(p) = Kp * Err(p);
Plus la bille est éloigné de la position cible, plus le moteur tourne; plus la bille est proche de la position cible, plus le moteur est proche de la position initiale. Sur le principe, il faut définir plusieurs variables.
void Pid_controlClass :: PID_init(){ printf("PI_init begin \n"); pi.SetPosition=0.0; pi.ActualPosition=0.0; pi.err=0.0; pi.err_last=0.0; pi.voltage=0.0; pi.integral=0.0; pi.Kp=0.2; pi.Ki=0.015; pi.angle=0.0; printf("PI_init end \n"); }
L'erreur est la distance entre la position actuelle et la position cible. Définissez une valeur intégrale pour additionner chaque erreur. Utilisez ensuite le principe de contrôle PI pour stocker les résultats du calcul dans pi.voltage.
Programme sur le contrôleur PI (proportion + integral)
I : Fonction de réglage intégral : faites en sorte que le système élimine l'erreur en régime permanent et améliore le degré sans erreur. Parce qu'il y a une erreur, le réglage intégral est effectué jusqu'à ce qu'il n'y ait pas de différence, le réglage intégral est arrêté et la sortie de réglage intégral est une valeur constante. La force de l'action intégrale dépend de la constante de temps intégrale Ti. Plus le Ti est petit, plus l'action intégrale est forte. Inversement, si Ti est grand, l'effet intégral est faible. L'ajout d'un réglage intégral peut réduire la stabilité du système et ralentir la réponse dynamique. L'action intégrale est souvent combinée avec les deux autres règles de régulation pour former un régulateur PI ou un régulateur PID.
Le principe de PI est comme ci-dessous :
pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral;
Rendez-vous avec M.Blaise CONRARD - 04/02/2020
Objectif pour prochaine RdV
- Carte éléctronique
Faire un PCB 1 face
- Construire la partie mécanique
Réfléchir et choisir la place et la liaison mécanique des moteurs
si pièce manquante ⇒ voir Laura Medina (ass. ingé, C-005)
- Poursuivre le programme
objectif : code de génération d'une trajectoire