PROJET ROB de Maroua, Marco, Yanis
Projet Maranis : Un robot écrivain
Informations
- Membres :
- Maroua Hriouit
- Yanis Sadoun
- Marco Grandclaude
- Mail:
- Polytech ROB 3 Année 2023-2024
- 7 février 2024 - 22 mai 2024
Contexte et objectifs :
Définition et objectifs du projet : Un robot qui dessine
Dans le cadre de nos études en robotique, on est amené à concevoir un robot capable de dessiner a l’aide d’un crayon fixé à l’extrémité terminale du robot.
L'objectif principal de ce projet consiste à élaborer et mettre en œuvre un système robotique complet, englobant sa composante mécanique, son système de motorisation, son dispositif de commande, ainsi que son interface de pilotage. Le cahier des charges fourni définit de manière détaillée les fonctions que le système doit exécuter et les contraintes auxquelles il doit se conformer.
Pour nous, étudiants, ce projet offre l'opportunité d'acquérir une expérience professionnelle en gestion de projet, en mettant particulièrement l'accent sur le travail en équipe. Il nous permettra également de mettre en pratique tout ce que nous avons étudié tout au long du premier semestre, y compris la conception et la modélisation, le calcul des modèles géométriques direct et inverse, ainsi que la programmation en C. Et enfin apprendre à manipuler des machines d’impression 3D et découpe LASER.
Lors de notre première séance, nos professeurs nous ont fourni une description fonctionnelle détaillée des besoins et contraintes pour notre projet. C'est sur cette base que nous avons construit et développé notre plan de travail. Voici un résumé de ces exigences clés :
Description fonctionnelle des besoins :
1 - Dessin Précis : Le robot doit être capable d'exécuter des dessins précis définies en 10 secondes +/- 0.2 secondes conformément aux spécifications fournies, en respectant les dimensions et les formes définies :
a. Une ligne de 5cm de long,
b. Une ligne pointillée de 5cm de long,
c. Un cercle de 2.5cm de rayon,
d. Un cercle pointillé de 2.5cm de rayon.
2 - Dessiner, en utilisant un crayon fixé à l'extrémité du bras robotique, un motif prédéfini sur le plan de la plaque de support, dans un carré de dimensions 5 cm par 5 cm. Le déplacement du bras robotique sera contrôlé par un joystick. Il est à noter que la figure peut être discontinue, ce qui implique la nécessité de pouvoir soulever le crayon du support horizontal au besoin.
3 - Une fonctionnalité supplémentaire pourrait être mise en œuvre : La possibilité de régler la vitesse de déplacement du robot à travers l'interface.
Moyens à disposition :
- Un crayon
- Interface de commande :
- Une carte arduino UNO avec câble USB-B ;
- Un joystick ;
- Une platine de prototypage ;
- Alimentation régulée 5V ;
- Câbles, LEDs, boutons poussoirs, résistances.
- Motorisation :
- Deux servomoteurs HS422 180° ;
- Un servomoteur Emax ES08A 180°.
- Mécanique :
- Matière PLA pour impression 3D ;
- Feuilles medium : 3mm et 6mm d’épaisseur ;
- Vis et écrous : M2, M2.5, M3, M4.
- Roulements et axes de diamètre 4mm.
Diagramme de Gantt :
💭 Remarque Importante : Il est important de noter que notre diagramme de Gantt est un outil vivant. Comme le projet progresse, nous pouvons nous attendre à ce qu'il soit ajusté et modifié pour refléter l'évolution de nos plans et la réalité de notre progression. Cette flexibilité nous permettra de rester réactifs et adaptatifs face aux défis et aux opportunités qui se présenteront.
Etape 1 : Propositions de réalisation et analyse des risques 🔍⚙️
Solution 1 : Robot voiture
Principe :
Comme première solution, l'idée consiste d'utiliser une voiture à deux roues sur laquelle seront fixés nos deux moteurs. Ensuite, nous envisageons de positionner une forme cylindrique sur la voiture, à l'intérieur de laquelle sera intégré un engrenage. Cette configuration permettrait la translation du stylo selon l'axe z, offrant ainsi une méthode mécanique pour réaliser les mouvements nécessaires à notre robot.
Croquis :
figure 1 : croquis du robot voiture
Schéma cinématique :
figure 2 : schéma cinématique du robot voiture
Contraintes:
Compte tenu des moteurs utilisés, cette solution ne sera pas viable. En effet, les servomoteurs n'effectuent qu'une rotation de 180 degrés, ce qui signifie que pour parcourir une certaine distance D, il faudra effectuer n tours de 360 degrés. Cela nous obligerait à utiliser un diamètre de roues très important, entraînant des complications liées aux calculs et aux glissements.
Solution 2 : robot cartésien
Principe :
Ce robot serait conçu pour se déplacer suivant un système de coordonnées en X et Y, offrant une grande précision dans un espace bidimensionnel.
La particularité de ce robot réside dans sa capacité à effectuer des translations le long de deux axes distincts : horizontal (axe X) et vertical (axe Y). Pour ce faire, le robot serait équipé de rails horizontaux et verticaux, permettant des mouvements fluides et contrôlés dans ces deux directions.
Croquis :
figure 3: croquis du robot cartésien
Schéma cinématique :
figure 4 : schéma cinématique du robot cartésien
Contraintes :
Manque de matériel pour les translations : Nous ne disposons pas des composants nécessaires, tels que des courroies, pour réaliser les translations efficaces sur les axes X et Y. L'absence de ces éléments essentiels est un obstacle à la construction de ce système .
Complexité de fabrication des rails : La conception et la réalisation des rails, essentiels pour les déplacements précis du robot, nous semblent particulièrement complexes, surtout avec les seuls servomoteurs disponibles.
Incapacité de mouvement sur l'axe Z : Avec les composants actuels, le robot ne serait pas capable de lever le crayon le long de l'axe Z. Cette limitation rend impossible la réalisation de tracés en pointillés, une des exigences clés du cahier des charges.
Bien que conceptuellement intéressante, la solution du robot cartésien se heurte à des contraintes matérielles et techniques qui compromettent sa faisabilité dans notre contexte actuel.
Solution 3 : Robot constitué d'axe en série
Principe :
Le robot envisagé se caractérise par une structure à axe en série. Il intègre un châssis stable comme base principale, sur lequel est fixé un bras articulé. Ce bras se compose de trois segments (bielles), chacun connecté au suivant via une liaison pivot, permettant ainsi une gamme étendue de mouvements. La dernière bielle est directement soudée à un adaptateur, conçu pour maintenir fermement un stylo. La stabilité et la précision du mouvement des bielles seront assurées par l'intégration de roulements. Parallèlement, un support de feuille sera installé, aligné dans le même plan que le châssis du robot, afin de faciliter l'interaction précise du stylo avec le papier.
Croquis :
figure 5 : croquis du robot à axe en série
Schéma cinématique :
figure 6 : schéma cinématique du robot à axe en série
Avantages :
- Cinématique simple : La structure à axe en série offre une cinématique plus facile à concevoir et à programmer, grâce à une chaîne cinématique linéaire et moins complexe.
Risques et défis :
- Stabilité structurelle : Ces robots peuvent présenter des problèmes de stabilité, surtout lors de la manipulation de charges ou lors de mouvements rapides.
- Précision dans les positions extrêmes : La précision peut diminuer aux extrémités de la portée du robot, où les effets de la gravité et de la flexion des composants sont plus prononcés.
Solution 4 : Robot à trois rotations
Principe :
Ce concept de robot s'inspire directement de la morphologie humaine, intégrant trois axes de rotation pour imiter les mouvements naturels du corps. En faisant une analogie avec le corps humain, la gestion de la hauteur de la pince (qui agirait comme une main) est assurée par deux rotations principales : une au niveau de l'« épaule » et une autre au niveau du « coude », correspondant respectivement aux rotations 2 et 3 du système. Cette configuration permet une manipulation verticale précise et polyvalente de la pince. Pour compléter la gamme de mouvements, une troisième rotation est ajoutée au niveau du « poignet », offrant la capacité de torsion. Cette troisième rotation apporte une flexibilité supplémentaire, essentielle pour des tâches complexes nécessitant une orientation fine de la pince.
Croquis :
figure 7 : croquis du robot à 3 rotations
Schéma cinématique :
figure 8 : schéma cinématique du robot à trois rotations
Avantages :
- Fabrication plus efficace : L’ensemble des pièces peuvent être réalisé en découpe laser ce qui permet une production plus rapide et précise des pièces.
Inconvénients :
- Stabilité du stylo : Assurer que le stylo reste précisément à la position voulue durant les mouvements complexes.
- Complexité du modèle cinématique inverse : La gestion des trois rotations (épaule, coude, poignet) rend le calcul du modèle cinématique inverse complexe, crucial pour la précision des mouvements du robot.
Solution 5 : Robot avec bras parallèles
Principe :
Le concept envisagé ici est celui d'un robot à bras parallèle à deux axes. Afin de gérer les déplacements verticaux du stylo le long de l'axe Z, le système sera doté d'un mécanisme pignon-crémaillère. Ce dispositif garantit une transition douce et maîtrisée du stylo, évitant ainsi les saccades ou les décalages qui pourraient compromettre la qualité du tracé.(le stylo montera et descendra avec une fluidité et une régularité qui permettront de maintenir une qualité de dessin constante). Comme pour le modèle à axe en série, les points de pivot au niveau des "coudes" du robot seront équipés de roulements.
Croquis :
figure 11: croquis détaillé de notre robot à bras parallèles
Schéma cinématique :
figure 12 : schéma cinématique du robot à bras parallèles
Avantages :
- Solidité structurelle : Les robots parallèles offrent une grande solidité et stabilité, ce qui est avantageux pour des tâches nécessitant de la précision et de la force.
- Cinématique simplifiée possible : En configurant les bras du robot pour former un parallélogramme avec les axes de servomoteurs alignés, il est possible de simplifier la cinématique, facilitant ainsi la programmation et le contrôle.
Risques et défis:
- Complexité cinématique initiale : Sans cette simplification, la cinématique des robots parallèles peut être initialement plus complexe, nécessitant une compréhension approfondie des systèmes mécaniques.
De plus , il faut s’assurer que les rotations des servomoteurs de 180° permettent de couvrir l’ensemble de la surface souhaitée.
Solution retenue
Suite à une analyse approfondie des différentes options, notre équipe a décidé de privilégier la conception d'un robot parallèle pour la suite du projet. Cette décision s'appuie sur plusieurs facteurs clés :
- Conformité au cahier des charges : Le robot parallèle répond efficacement aux exigences spécifiées dans le cahier des charges. Sa structure offre la précision et la solidité requises pour les tâches prévues, tout en permettant une gamme de mouvements adaptée à nos besoins.
- Faisabilité technique : Avec les composants et les ressources à notre disposition, la réalisation d'un robot parallèle est non seulement possible mais également pratique. La possibilité de simplifier sa cinématique en configurant ses bras en parallélogramme facilite sa programmation et son contrôle, rendant le projet plus gérable dans le cadre de nos contraintes techniques et temporelles.
Nota bene : Le nom de notre robot sera "Maranis"; il est formé en combinant les prénoms Maroua, Marco, et Yanis. Il symbolise l'union de nos efforts et la collaboration au cœur de notre projet...
Etape 2 : Conception Détaillée de Notre Projet 🌟🛠️💡
A) calculs Mécaniques 🛠️
À cette étape, nous nous sommes concentrés sur les aspects techniques du projet en abordant la modélisation mécanique appliquée aux bras de notre robot. Notre objectif ? Détailler les modèles géométriques, à la fois direct et inverse, que nous avons développés. En effet, ces modèles sont cruciaux pour préciser la position de l'effecteur du robot.
L'utilisation de ces modèles géométriques nous offre la capacité de réguler avec exactitude la position et l'orientation de l'effecteur, en se basant sur les angles des articulations. Cette précision est fondamentale pour diverses applications dans les domaines de la robotique et de l'automatique, où la manipulation et le positionnement exacts sont primordiaux.
A - Modélisation du problème
- Configuration des Moteurs et Simplification Géométrique : Les moteurs de notre robot sont disposés l'un au-dessus de l'autre, mais orientés en sens inverse. Cette configuration particulière permet d'aligner les axes des moteurs, réduisant ainsi l'espace entre deux corps liés et simplifiant de ce fait le modèle géométrique et son inverse. En effet, en alignant les corps opposés à une longueur égale (les quatre bras mesurant la même taille dans notre cas), nous transformons le système en un parallélogramme. Cette transformation apporte plusieurs relations internes utiles au système, liant les angles et les diagonales.
- Modélisation et Références du Système : Nous définissons un repère galiléen 𝑅0 = (𝑥0 , 𝑦0 , 𝑧0 ) associé au bâti (0). Le robot est composé de quatre bras : les bras 2 et 4 mesurant une longueur 𝐿1, tandis que les bras 1 et 3 ont une longueur 𝐿2. - Le bras 1 est en liaison pivot autour de l'axe (𝑂0, 𝑧0) avec le bâti. L'angle formé est noté θ1 = (𝑥0, 𝑥1) = (𝑦0, 𝑦1). - Le bras 2, aussi en liaison pivot autour de l'axe (𝑂0, 𝑧0) avec le bâti, a un angle θ2 = (𝑥0, 𝑥2) = (𝑦0, 𝑦2). - Le bras 3 est en liaison pivot autour de l'axe (𝑂3, 𝑧0) avec le bras 2. L'angle α3 = (𝑥2, 𝑥3) = (𝑦2, 𝑦3) est défini, avec le bras 3 restant horizontal et parallèle à l'axe 𝑥0. - Le bras 4, en liaison pivot autour de l'axe (𝑂4, 𝑧0) avec le bras 1, n'est pas visible dans notre modèle simplifié puisque n’intervenant pas dans nos calculs .
L'effecteur du robot se trouve au point P et a pour coordonnées (𝑥, 𝑦) dans ce système.
Cette modélisation permet de comprendre clairement la structure mécanique du robot et facilite la programmation et le contrôle de ses mouvements.
B - Modèle géométrique direct
Dans notre projet robotique, nous avons élaboré un modèle géométrique direct qui se base sur des principes de trigonométrie fondamentaux, rendant sa détermination relativement simple. Ce modèle utilise des formules basiques pour calculer les positions du robot.
On rappelle que notre modèle se base sur un parallélogramme. 📐Or, dans un parallélogramme, les côtés opposés sont égaux et les angles adjacents sont complémentaires. De plus, les diagonales se coupent en leur milieu et forment des triangles rectangles avec les côtés du parallélogramme. Nous pouvons donc utiliser ces propriétés pour établir des relations entre les longueurs des bras .
Dès lors :
Pour un robot standard avec des bras de longueurs différentes, les coordonnées x et y de l'effecteur peuvent être exprimées comme suit :
x = L1 sin(θ2) - L2 sin(θ1) | y = L1 cos(θ2) +L2 cos(θ1) |
Cependant , nous avons spécifiquement choisi de travailler avec un losange, où ( L = L1 = L2 ). Cette approche réduit la complexité des calculs et permet une meilleure compréhension de la cinématique du robot.
Avec cette simplification, notre modèle géométrique direct se résume à des formules plus simples :
x = L (sin(θ2) - sin(θ1)) |
y = L (cos(θ2) + cos(θ1)) |
💭 Remarque :"Pour le détail des calculs, veuillez consulter le PDF intitulé 'Calcul Modèle Géométrique', joint en annexe."
Nous avons pu valider notre modèle géométrique direct en utilisant SolidWorks. Après avoir conçu une version simplifiée de notre robot et défini des angles pilotes, nous avons simulé plusieurs positions pour obtenir les coordonnées x et y via le logiciel. La comparaison de ces résultats avec ceux calculés par nos formules mathématiques a montré une correspondance notable, validant ainsi la fiabilité de notre modèle géométrique.
figure 14: capture d'écran de notre teste du modèle géométrique direct sur SolidWorks
C- Modèle géométrique Inverse :
L’élaboration du modèle géométrique inverse est une étape essentielle pour le contrôle précis de notre robot. Ce modèle nous permet de calculer les angles nécessaires aux moteurs pour positionner l'effecteur à un point spécifique (x, y) dans l'espace.
Pour commencer, nous avons établi l'angle α1 en utilisant la fonction arctangente, qui est dérivée du rapport entre les côtés opposé et adjacent d'un triangle rectangle formé par les coordonnées de l'effecteur :
α1 =Arctan(x/y)
Ensuite, nous avons appliqué le théorème de Pythagore au triangle rectangle ayant pour longueur 𝑥, 𝑦 𝑒𝑡 𝑙 pour déterminer la longueur de l'hypoténuse l en fonction des coordonnées x et y :
𝑙 = √(x^2+y^2)
En utilisant la propriété fondamentale des triangles selon laquelle la somme des angles internes est égale à 180°, nous avons déduit une relation entre les angles α3 et α2:
α3 = 180°-2*α2 et α2=90°-α3/2
Enfin, grâce à la loi des cosinus ou la formule d'Al-Kashi, nous avons pu exprimer α3 en termes des longueurs des bras L1 , L2 et de l’hypoténuse 𝑙 :
α3= arccos((L1^2+L2^2-𝑙^2)/(2 L1 L2))
Ces relations nous permettent de déterminer les angles des moteurs:
θ1=α2-α1 et θ2=α2+α1
Toutefois, grâce à notre simplification du modèle par un losange ; longueur 𝐿 = 𝐿1 = 𝐿2. On obtient les relations suivantes :
α1 =Arctan(x/y) |
α2=90°-α3 /2 |
α3= arcos((2L^2-𝑙^2)/2L^2) |
θ1=α2-α1 |
θ2=α2+α1 |
Avec ces formules, nous avons en main un système complet qui nous permet de calculer les angles des moteurs pour positionner précisément l'effecteur à un point (x, y) dans l'espace, en considérant les bras de longueur égale.
D - Modélisation de la translation :
Notre mécanisme de translation axiale s'appuie sur un agencement pignon-crémaillère. La crémaillère présente un diamètre de base Bbase 41,25 mm. En prenant en compte un module de conception m de 1,5, nous procédons au calcul du diamètre effectif Deff qui sera utilisé dans les calculs suivants .
- Le diamètre effectif est calculé comme suit : Deff = Bbase + 2,5 m=41,25+2,5×1,5=45 mm
Le calcul du diamètre effectif s'appuie sur des données initiales issues de nos premières simulations réalisées sur SolidWorks, en particulier pour le mécanisme pignon-crémaillère. Il est important de noter que ces chiffres, bien que précis dans le cadre de nos simulations initiales sont susceptibles d'évoluer et d'être ajustés au fur et à mesure de l'avancement de notre projet et à mesure que de nouvelles données seront recueillies et analysées.
- Le lien entre le nombre de révolutions complètes Nrev du servomoteur Emax ES08A et l'angle de déplacement θ est donné par la relation :
Nrev=θ/360°
La position verticale z de la plaque mobile peut être déduite à partir de θ en utilisant l'équation : z=Nrev *Deff * pi ⟹
z=θ/360° * Deff * pi
Ceci nous conduit aux expressions des modèles géométriques de translation axiale :
z=θ/360° * Deff * pi ( modele direct)
θ=(360°*z)/(Deff * pi ) ( modèle inverse)
Ces équations nous fournissent un moyen précis pour établir la position verticale de la plaque en se basant sur l'angle de rotation du servomoteur et, à l'inverse, pour calculer l'angle nécessaire pour atteindre une position verticale déterminée.
B) conception CAO 🖥️✏️📐:
Nous passons maintenant à la phase de modélisation des composants de notre robot. Nous utiliserons SolidWorks pour cette tâche, un outil de CAO parfait pour transformer nos plans en modèles numériques. C'est une étape importante pour rendre nos idées concrètes et fonctionnelles.
Notre création robotique est une interprétation du robot pantographe, caractérisée par une conception où les axes de deux servomoteurs convergent, orchestrant les mouvements des bras et en conséquence, la trajectoire du stylo.
La structure du robot est articulée autour de trois sous-ensembles principaux:
-
Le bâti : Formant la fondation du robot, ce premier sous-ensemble est chargé d'accueillir et de stabiliser les deux servomoteurs principaux. Ces moteurs sont essentiels pour actionner les mouvements latéraux et longitudinaux, conférant au robot une capacité de translation précise sur le plan 2D.
-
Les Bras et le Porte-Stylo : Ce sous-ensemble représente les membres actifs du robot. Attachés aux servomoteurs, les bras articulés du robot sont la clé de sa capacité à dessiner. Ils suivent avec fidélité les instructions de mouvement pour guider le stylo sur la surface dédiée. ,
-
Le Mécanisme de Translation Verticale : Incorporant un système de pignon et crémaillère, ce troisième sous-ensemble enrichit le robot d'une fonctionnalité verticale. Il permet à la surface de dessin de s'élever ou de s'abaisser, donnant au robot la faculté de ponctuer le papier de dessins en pointillés ou de lever le stylo entre les points, conformément aux spécifications techniques préétablies.
- Idées Créatives pour la Conception des Pièces 🎨🔩
.
figure 14 : Idée de bâti pour la modélisation
figure 15 : Idée de bras pour la modélisation
figure 16 : Idée de plaque élévatrice pour la modélisation
- le Développement des Pièces 🛠️:
Figure 17 : Capture d’écran de notre conception de robot sur solidWorks
A) Bâtis :
Notre bâti est composé de quatre pièces différentes. Nous avons créé des logements pour les deux servomoteurs grâce aux dimensions qui nous ont été fournies. Notre bâti assure ainsi le maintien en position des deux servomoteurs grâce à des liaisons appuis-plan réalisées par un épaulement. La mise en position est assurée par des vis qui seront installées lors du montage de nos pièces.
Figure 18 : Epaulement et montage des moteurs sur le bâti
B) Bras:
L'assemblage du bras de notre robot se compose de quatre pièces distinctes : deux demi-bras, l'un côté moteur et l'autre côté effecteur, ainsi qu'un support cylindrique qui nous permettra de loger notre marqueur. Pour assembler les deux demi-bras, nous utiliserons un roulement à billes et un axe en métal afin d'assurer la liaison pivot.
Figure 19: assemblage des bras
- Demi-bras 1: (coté moteur)
Ce demi-bras est une bielle qui permet la liaison directe entre le servomoteur et le reste du bras robotique. Il est fixé au servomoteur via un système de vis.De l’autre côté de la pièce, un enlèvement de matière circulaire a été creusé pour laisser de la place à un roulement à bille.
Figure 20 : demi-bras 1
- Demi-bras 2 : (cote effecteur)
Ce demi-bras est conçu pour tenir et manipuler l'effecteur, ici un marqueur.À une extrémité, ce demi-bras présente un creux compatible avec la liaison pivot, permettant une rotation fluide et un alignement précis avec le premier demi-bras. L'autre extrémité est spécialement élargie pour former un anneau, dans lequel est placé le cylindre creux tenant le marqueur.
Figure 21 : demi-bras 2
💭 Remarque : La pièce mentionnée ici se trouve en deux exemplaires dans l'assemblage du robot. Les extrémités en forme d'anneau de ces deux composants sont disposées l'une sur l'autre, créant ainsi une superposition alignée. Ces deux bras sont alors connectés l'un à l'autre par l'intermédiaire d'une pièce cylindrique, le support du stylo , dont nous détaillons la conception et la fonction dans la suite de notre présentation.
- Support du stylo
Le support à marqueur est constitué d’un cylindre creux et d’un rebord rectangulaire qui assure un contact appui plan avec l’anneau d’une des bielles, ce qui évite que le support ne glisse. Il est essentiel que les bras puissent tourner autour de ce cylindre, d'où la nécessité d'une liaison pivot avec un léger jeu entre le cylindre et les deux demi-bras côté effecteur. Sur le bord du cylindre, un trou a été aménagé pour permettre l'insertion d'un axe. Cet axe sert à maintenir et ajuster la position du marqueur à l'intérieur du support. Un écrou fixé sur cet axe garantira que le marqueur reste stable et en place dans le cylindre.
Figure 22 : Support du marqueur
C) Plaque montante:
Afin de soulever le stylo et exécuter les motifs de dessin spécifiés dans notre cahier des charges, nous avons choisi d'implémenter un mécanisme de pignon-crémaillère. Ce système est conçu pour élever la plaque sur laquelle le dessin est effectué. Pour la conception de ce mécanisme, nous avons utilisé l'outil Toolbox de Solidworks, un choix stratégique qui nous a permis de modéliser avec précision et efficacité le système pignon-crémaillère adapté à nos besoins spécifiques tout en gagnant du temps . Cet outil nous a offert la flexibilité nécessaire pour ajuster les paramètres de conception .
Il est important de veiller à la cohérence du module utilisé pour le pignon et la crémaillère, car ils doivent impérativement être identiques pour assurer un fonctionnement correct et efficace. Pour notre projet, nous avons opté pour un module de 1,5. Ce choix garantit une compatibilité parfaite entre le pignon et la crémaillère, essentielle pour une transmission de mouvement fluide et précise.
Figure 23 : plaque montante
Dans notre conception, nous avons soigneusement intégré une encoche dans la plaque de dessin spécifiquement conçue pour y loger la crémaillère (pour renforcer la fixation de la crémaillère sur la plaque, nous prévoyons d'ajouter des points de colle aux emplacements stratégiques.)
Par ailleurs, pour garantir la stabilité de la plaque de dessin, nous avons conçu une pièce supplémentaire ( petit pied représenté en noir sur la figure 21). Cette pièce est spécialement élaborée pour accueillir un axe .L'insertion de cet axe dans la pièce conçue assure un maintien ferme et stable de la plaque, une caractéristique essentielle pour la précision et la qualité des dessins réalisés par le robot.
Enfin , pour maintenir en place l'ensemble des pièces précédemment évoquées, nous allons découper une
plaque sur laquelle nous allons assembler toutes ces pièces.
- Processus de Fabrication 🏗️⚙️
Nous avons choisi la découpe laser pour fabriquer la majorité nos pièces. Cette décision découle de plusieurs raisons. Tout d'abord, la découpe laser offre une précision remarquable dans la réalisation de pièces, permettant des finitions nettes et détaillées. De plus, elle est rapide et efficace, rendant le processus de fabrication plus rapide comparé à l'impression 3D, qui peut prendre plus de temps pour produire des objets complexes. La découpe laser excelle également dans la découpe de matériaux variés, offrant une flexibilité dans le choix des matériaux adaptés aux besoins spécifiques du projet. En outre, elle est souvent plus économique pour la production en série de pièces, offrant une alternative rentable par rapport à l'impression 3D, notamment pour des applications où la solidité mécanique et la précision sont essentielles.
Toutefois , nous avons opté pour l'impression 3D pour la fabrication des pieds qui servent de support à notre plaque de dessin, ainsi que pour le support cylindrique destiné à accueillir le stylo. Cette décision est motivée par la complexité de la conception de ces pièces et leur épaisseur importante , qui rendent leur fabrication difficile avec la découpe laser disponible à Polytech. L'impression 3D offre la flexibilité et la précision nécessaires pour réaliser ces composants aux formes spécifiques et aux dimensions requises.
Notre modélisation Solidworks est accessible en annexe dans le fichier zip "solidworksRobot.zip"
Nos fichiers DXF et SVG, préparés pour la découpe laser, sont également disponibles dans "solidworksRobot.zip" .
C) Etude électrique ⚡🔌
Dans cette section, nous détaillons l'architecture électronique de notre robot, en mettant l'accent sur le matériel, l'alimentation et la connectique.
- Le matériel utilisé :
Le cœur de notre système de commande est une carte Arduino Uno. Elle est configurée pour contrôler trois servomoteurs : deux servomoteurs HS422 et un servomoteur Emax ES08A. De plus, nous intégrons trois boutons-poussoirs et un joystick pour assurer une interaction utilisateur intuitive, en particulier pour la commande manuelle du stylo. La visualisation de l'état du système et des modes de fonctionnement est rendue possible par l'utilisation de LED : deux pour signaler l'activation des fonctions principales et une troisième pour indiquer le type de trait (continu ou pointillé). Les connexions électriques entre ces composants sont établies à l'aide d'une plaque de prototypage.
- L'alimentation :
Le système robotique est alimenté directement par une carte Arduino Uno, car les besoins en tension et en courant sont compatibles avec ses capacités ( suffisamment faibles). Pour garantir une source d'énergie stable et fiable, nous utiliserons le chargeur standard de l'Arduino, branché via sa prise jack, assurant ainsi le fonctionnement optimal de notre robot.
- Connectique des Éléments à l’Arduino :
Le tableau ci-dessous récapitule la connexion des divers composants aux pins correspondants de la carte Arduino Uno :
- Le joystick:
Le joystick est un composant clé pour la deuxième fonctionnalité attendue, à savoir le contrôle manuel du déplacement du stylo dans un carré de 5 cm de côté. Il dispose de trois sorties : un bouton poussoir et deux potentiomètres fournissant des valeurs analogiques entre 0 et Vcc. Ces valeurs sont traduites en pourcentages de vitesse pour chaque axe, variant de -100% à +100%, permettant ainsi un contrôle précis et réactif du mouvement du stylo.
- Schéma électrique :
Pour la réalisation du schéma électrique et le câblage de notre solution robotique, nous avons choisi d'utiliser le logiciel Tinkercad. Cet outil en ligne s'est révélé être un choix judicieux. En effet, le logiciel offre une large gamme de composants électroniques virtuels qui peuvent être facilement glissés et déposés dans le schéma, permettant ainsi une représentation précise de notre configuration matérielle.
figure 24 : Illustration du câblage de notre robot
💭 Remarque : Ici ,le joystick est imité avec deux potentiomètres et un bouton-poussoir, en raison de l'absence de joystick dans le logiciel. Nous avons également inclus un bloc d'alimentation temporaire pour tester la conformité électrique du circuit, qui ne sera pas inclus dans le montage final.
figure 25: Schéma électrique de notre robot
D) Algorithmes de commande 📊💻
- Les Bibliothèques utilisées:
La bibliothèque `Servo.h` est un composant essentiel de l'environnement de développement Arduino, spécialement conçue pour la commande des servomoteurs. Cette bibliothèque intègre un ensemble de fonctions destinées à simplifier la gestion des signaux PWM, qui sont important pour le contrôle précis de la position et de la vitesse des servomoteurs. Parmi les fonctions offertes par `Servo.h`, on retrouve :
- `attach()` : pour lier un servomoteur à une broche spécifique.
- `write()` : pour définir la position du servomoteur en degrés.
- `read()` : pour lire la position actuelle du servomoteur.
- `writeMicroseconds()` : pour un contrôle plus fin en spécifiant la durée de l'impulsion.
- `detach()` : pour libérer la broche associée au servomoteur.
- 'pinMode()' : pour donner le mode d’entrée ou de sortie de la broche spécifiée.
Grâce à cette bibliothèque, il est possible de gérer simultanément plusieurs servomoteurs de manière autonome, ce qui est indispensable pour la complexité de notre projet.
- Développement d'algorithmes secondaires :
Notre programme intègre diverses fonctions secondaires qui permettent de faire fonctionner les fonctions principales.
- Une fonction de détermination des coordonnées actuelles basée sur les angles des servomoteurs, conformément au modèle géométrique du robot.
- Une fonction de calcul des angles requis pour les servomoteurs afin d'atteindre un point cible, suivant le modèle géométrique inverse.
- Une fonction spécifique pour localiser le point le p lus proche sur un cercle de rayon 2,5 cm, centré sur la surface de travail, par rapport à la position actuelle du stylo.
- Une fonction de calcul du point de départ optimal pour tracer une ligne de 5 cm de longueur à l'intérieur d'un carré de 5 cm de côté.
- Une fonction d'estimation de l'intervalle d'angles possibles pour les segments de 5 cm débutant au point actuel, tout en restant dans les limites du carré prédéfini.
- Une fonction de commande qui ajuste la hauteur de la plaque de dessin, permettant ainsi au stylo de toucher ou de se retirer de la surface, facilitant de ce fait la création de motifs continus ou en pointillés.
- Le fonctionnement général de notre algorithme :
La logique centrale de notre programme est conçue pour réagir aux signaux des boutons poussoirs, initiant ainsi des actions prédéfinies correspondantes.
- Fonction de Dessin de Cercle :
La première opération programmée est le dessin d'un cercle. Cette fonction débute par la localisation du point initial du cercle. Une fois ce point identifié, elle positionne le stylo pour débuter le tracé et entreprend ensuite le parcours circulaire, complétant un tour complet de 360 degrés.
- Fonction de Traçage de Ligne :
La seconde fonction a pour objectif de tracer une ligne droite de 5 cm à l'intérieur d'une zone carrée de dimensions égales. Le programme dirige d'abord l'effecteur vers le point de départ le plus approprié à l'intérieur de ce carré. Il utilise ensuite une routine secondaire pour générer une orientation aléatoire, mais admissible pour le tracé, avant de procéder à l'exécution du tracé de la ligne.
- Fonction de Contrôle Manuel :
La troisième fonctionnalité offre un contrôle manuel du mouvement du stylo via un joystick. Les signaux issus des potentiomètres du joystick sont convertis en un pourcentage de vitesse, qui peut varier de -100% à 100% pour les deux axes du plan.
Enfin, une fonction de navigation autonome est implémentée pour déplacer le robot vers un point cible prédéterminé. Cette fonction calcule les angles nécessaires pour chaque servomoteur afin de diriger précisément le stylo vers le point désigné.
Notre algorithme est entièrement accessible dans le document joint, intitulé "code robot maranis.ino".
Le pseudo code de notre programme est également accessible dans le document joint, intitulé "Les différents pseudo-codes du programme.pdf"
E) Test de notre modèle électrique-informatique ⚡🖥️
Pour valider notre modèle électrique et informatique, nous avons effectué une simulation sur le simulateur Arduino Wokwi. Les résultats se sont révélés concluants : les servomoteurs réagissent conformément à nos attentes, en réponse aux signaux des boutons poussoirs et du joystick en mode manuel. Cette simulation est accessible ici, permettant ainsi de tester et d'expérimenter notre conception directement.
F) Montage et test du robot 🛠️🤖✔️
Nous avons consacré la troisième séance à la fabrication des différentes pièces de notre robot. Pour garantir que notre plaque verticale soit bien droite, nous avons ajouté une autre plaque de guidage afin de nous assurer que nos deux axes métalliques soient parfaitement parallèles.
figure 26: Photo de notre première version de robot
Lors de l'exécution de notre code, la translation selon l'axe Z, assurée par la plaque de dessin pour réaliser les pointillés, fonctionnait parfaitement.
figure 27: Gif de la montée de notre plaque de dessin
Cependant, nous avons constaté que nos bielles ne se déplaçaient pas comme prévu. Ce dysfonctionnement était dû à la grande défectuosité des petits servomoteurs qui contrôlaient le mouvement des bielles, présentant une erreur d'environ 30 % par rapport aux performances attendues.
💭 Remarque : Après plusieurs recherches, nous avons découvert que ces servomoteurs fonctionnaient de 0 à 280 degrés, et non de 0 à 180 degrés comme mentionné dans la documentation.
Malheureusement, notre montage ne permettait pas simplement de remplacer ces moteurs par des plus grands. Néanmoins, nous n'avons pas baissé les bras et avons décidé de repartir de zéro afin de concevoir un modèle nous permettant d'utiliser de grands servomoteurs pour les bras de notre robot et un petit servomoteur pour le mouvement de translation.
__________________________________________________________________________________________________
Proposition de Réalisation du nouveau Robot :🤖🔧
A) Principe de Conception :
Dans le cadre du développement de cette nouvelle version de notre robot, l'objectif principal a été de concevoir un système où les composants sont agencés de manière optimale pour que les plaques puissent à la fois supporter le poids des servomoteurs et minimiser le gaspillage de matériel. Pour ce faire, nous avons opté pour une approche de réutilisation des composants existants tout en éliminant les éléments devenus superflus.
Nous avons commencé par démonter la partie supérieure de l'ancien robot, tout en conservant ses bras, ce qui nous a permis de réduire les coûts et de limiter l'impact environnemental associé à la production de nouvelles pièces.
Par la suite, nous avons procédé à la réduction dimensionnelle des deux axes de guidages qui permettaient auparavant à la plaque dessin de se lever, en optant pour une solution plus compacte et efficace. Nous avons choisi d'utiliser uniquement le palonnier d'un petit servomoteur pour réaliser le mouvement de translation de la plaque (retirant ainsi le mécanisme de pignon-crémaillère). Cette modification a non seulement simplifié la conception globale, mais elle a aussi contribué à alléger le robot.
figure 28 : dessin de l'allure de notre nouvelle version de robot écrivain
Cette approche révisée offre donc une structure plus légère et économiquement viable, tout en conservant l'efficacité et la fonctionnalité requises pour les tâches que le robot est destiné à accomplir.
B) Schéma cinématique :
C) Conception Détaillée de Notre Nouveau Robot :
1- Calcul Mécanique :
Pour analyser la mécanique du système, nous avons étudié les deux triangles, O1BP et O2AC, où P représente le point d'intersection entre la droite BC et celle passant par O1. Cela nous a permis de calculer les différents paramètres nécessaires pour notre conception.
Grace à la formule d’Al Kashi on a :
α = arcos((l12 – l42 + O1P2)/(2L1*OP1)) avec OP1 = √((-a+x)^2+y^2)
β = arctan(y / (a-x))
θ1= π – (α - β)
δ = arcos( (l22 – l32 + O2C2)/ 2*l2*O2C) avec O2C= √(a+x)2-y2
et ϒ = arctan (y/(a+x))
Donc θ2 = δ + ϒ
2- Conception CAO:
Le nouveau robot est composé de trois sous-ensembles principaux :
- Le Bâti : Plus compact, il héberge deux grands servomoteurs pour les mouvements latéraux et longitudinaux, permettant une navigation précise sur le plan 2D.
- Les Bras et le Porte-Stylo : Les bras du robot sont articulés et reliés aux servomoteurs, permettant des mouvements fluides. Le porte-stylo, situé à l'extrémité des bras, maintient fermement un stylo.
- Le Mécanisme de Translation Verticale : Permet l'ajustement de la hauteur de la plaque pour réaliser les pointillés.
3- Développement des pièces :
1) Bâti :
Notre bâti est constitué de deux éléments distincts. Sur la plaque horizontale nous avons créé des logements pour les deux servomoteurs grâce aux dimensions qui nous ont été fournies. Notre bâti assure ainsi la mise en position des deux servomoteurs grâce à des liaisons appuis-plan réalisées par un épaulement. Le maintien en position est assurée par des vis qui seront installées lors du montage de nos pièces.
2) Bras :
L'assemblage des bras de notre robot conserve la configuration du modèle précédent, constitué de quatre pièces distinctes. Cela inclut deux demi-bras, l'un attaché côté moteur et l'autre côté effecteur, ainsi qu'un support cylindrique conçu pour tenir un marqueur. Pour relier les deux demi-bras, nous employons un roulement à billes accompagné d'un axe en métal, formant ainsi une liaison pivot robuste et fiable. Cette conception permet une rotation fluide et précise
figure 31 : capture d'écran SolidWorks de l'assemblage de nos bras
3) Plaque Montante :
Pour faciliter la translation verticale selon l'axe Z, nous avons équipé une plaque horizontale d'un petit servomoteur. Cette plaque est solidement maintenue par deux axes parallèles, assurant ainsi une bonne stabilité et précision lors des mouvements verticaux. Le palonnier du servomoteur est spécifiquement utilisé pour élever et abaisser la plaque de dessin.
figure 32 : capture d'écran SolidWorks de notre nouvelle plaque de dessin
En raison d'un bug sur la plateforme qui nous empêche de déposer nos dossiers ZIP, notre nouvelle modélisation SolidWorks est accessible sur le drive via le lien suivant : Accéder à la modélisation SolidWorks.
4- Processus de fabrication 🏗️⚙:
Cette technique est privilégiée pour sa précision, sa rapidité et sa capacité à produire des coupes nettes et exactes, ce qui est essentiel pour assurer l'alignement correct et le fonctionnement fluide de toutes les parties mécaniques du robot. En complément, certaines pièces spécifiques sont fabriquées à l'aide de l'impression 3D, une méthode choisie pour sa flexibilité et sa capacité à créer des formes complexes qui seraient autrement difficiles à réaliser avec des méthodes traditionnelles.
D) Etude électronique :
L'étude électrique de notre nouveau robot suit le même schéma que celui du modèle précédent. Cette continuité nous permet de capitaliser sur les connaissances et les expériences antérieures, garantissant ainsi la fiabilité et l'efficacité des systèmes électriques déjà éprouvés.
Seuls les pins utilisés pour les branchements électroniques ont été modifiés dans la conception actuelle. Voici un tableau qui résume les broches (pins) utilisées dans le code Arduino, leurs numéros, et à quoi elles correspondent :
E) algorithme de commande:
Développement d’algorithmes secondaires :
- Fonction de détermination des coordonnées : Calcul les coordonnées actuelles du robot en fonction des angles des servomoteurs, basée sur le modèle géométrique du robot.
- Fonction pour tracer un cercle : Ajuste les angles des servomoteurs en utilisant la fonction de détermination des coordonnées pour tracer un cercle précis.
- Fonction pour tracer une ligne horizontale : Active lorsque le bouton poussoir b10 est enfoncé, elle commande le robot pour tracer une ligne horizontale.
- Fonction pour tracer une ligne pointillée : Lorsque le bouton connecté à la broche b8 est enfoncé, cette fonction alterne les positions de monServo3 (petit servomoteur qui est contrôlé en vitesse) pour créer une ligne pointillée.
- Fonction pour tracer un cercle pointillé : Active par le bouton poussoir b7, elle alterne monServo3 entre 70 et 110 degrés pour tracer un cercle pointillé, incluant des temporisations pour chaque segment.
Nous avons également réalisé un organigramme détaillé de notre code afin de structurer et visualiser clairement les différentes fonctions et leur enchaînement avant de procéder à la programmation.
figure 33 : Organigramme de notre code pour faire fonctionner le robot
Voici notre nouveau code :
float angle_effecteur=180-105;
float l1=5; //moteur pas colorie droite
float l4=7; //bielle droite
float l2=5; // bielle gauche
float l3=7; // bielle gauche
float l5=0;
float a=1.5; // distance moteur centre
int axeX=A0; // pin A0
int axeY=A1; // pin A1
int BOUTON = 2; //bouton joystick pour monter
float cpt =0;
float posx=0;
float posy=0;
float an=0;
float haut=80;
float bas=90;
int b10=10;
int b11=11;
int b8=8;
int b7=7;
int b10_stat=0;
int b11_stat=0;
int b8_stat=0;
int b7_stat=0;
#include <Servo.h>
Servo monServo1;
Servo monServo2;
Servo monServo3;
void setup() {
Serial.begin(9600);
monServo1.attach(5);
monServo2.attach(6);
monServo3.attach(9);
pinMode (axeX, INPUT);
pinMode (axeY, INPUT);
pinMode(BOUTON,INPUT_PULLUP);
pinMode (b10, INPUT_PULLUP);
pinMode (b11, INPUT_PULLUP);
pinMode (b7, INPUT_PULLUP);
pinMode (b8, INPUT_PULLUP);
an=bas;
}
void loop() {
b10_stat=digitalRead(b10);
b11_stat=digitalRead(b11);
b7_stat=digitalRead(b7);
b8_stat=digitalRead(b8);
/*
monServo3.write(70);
delay(400);
monServo3.write(90);
delay(99999);*/
// ----------------cerlce-------------------------
if (b11_stat==LOW){
monServo2.write(180-theta2(-2.5,8+sqrt((2.5*2.5)-(-2.5*-2.5))));
monServo1.write(180-theta1(-2.5,8+sqrt((2.5*2.5)-(-2.5*-2.5))));
monServo3.write(110);
delay(400);
monServo3.write(90);
delay(200);
for(float x=-2.5;x<=2.5;x=x+0.1){
Serial.print(theta1(x,x));Serial.print(" ");
Serial.println(x);
monServo2.write(180-theta2(x,8+sqrt((2.5*2.5)-(x*x))));
monServo1.write(180-theta1(x,8+sqrt((2.5*2.5)-(x*x))));
delay(10);
}
for(float x=2.5;x>=-2.5;x=x-0.1){
Serial.print(theta1(x,x));Serial.print(" ");
Serial.println(x);
monServo2.write(180-theta2(x,-sqrt((2.5*2.5)-(x*x))+8));
monServo1.write(180-theta1(x,-sqrt((2.5*2.5)-(x*x))+8));
delay(10);
}
delay(2000);
monServo3.write(70);
delay(400);
monServo3.write(90);
}
// ---------------ligne------------------------
if(b10_stat==LOW){
monServo2.write(180-theta2(-2.5,8));
monServo1.write(180-theta1(-2.5,8));
monServo3.write(110);
delay(400);
monServo3.write(90);
delay(200);
for(float x=-2.5;x<=2.5;x=x+0.1){
monServo2.write(180-theta2(x,0+8));
monServo1.write(180-theta1(x,0+8));
delay(50);
}
delay(1000);
monServo3.write(70);
delay(400);
monServo3.write(90);
}
// ---------------ligne pointillé------------------------
if(b8_stat==LOW){
monServo2.write(180-theta2(-2.5,8));
monServo1.write(180-theta1(-2.5,8));
monServo3.write(110);
delay(400);
monServo3.write(90);
delay(200);
cpt=0;
an=haut;
for(float x=-2.5;x<=2.5;x=x+0.1){
monServo2.write(180-theta2(x,0+8));
monServo1.write(180-theta1(x,0+8));
cpt=cpt+0.1;
Serial.println(cpt);
if(cpt>=1.0 && an==haut){
monServo3.write(110);
delay(400);
monServo3.write(90);
an=bas;
cpt=0;
delay(700);
}
if(cpt>=1.0 && an==bas){
monServo3.write(70);
delay(400);
monServo3.write(90);
an=haut;
cpt=0;
delay(700);
}
delay(10);
}
delay(1000);
monServo3.write(70);
delay(400);
monServo3.write(90);
}
// ---------------cercle pointille ------------------------
if(b7_stat==LOW){
monServo2.write(180-theta2(-2.5,8+sqrt((2.5*2.5)-(-2.5*-2.5))));
monServo1.write(180-theta1(-2.5,8+sqrt((2.5*2.5)-(-2.5*-2.5))));
monServo3.write(110);
delay(400);
monServo3.write(90);
delay(200);
cpt=0;
an=haut;
for(float x=-2.5;x<=2.5;x=x+0.1){
Serial.print(theta1(x,x));Serial.print(" ");
Serial.println(x);
monServo2.write(180-theta2(x,sqrt((2.5*2.5)-(x*x))+8));
monServo1.write(180-theta1(x,sqrt((2.5*2.5)-(x*x))+8));
cpt=cpt+0.1;
if(cpt>=1.0 && an==haut){
delay(500);
monServo3.write(70);
delay(400);
monServo3.write(90);
an=bas;
cpt=0;
delay(700);
}
if(cpt>=1.0 && an==bas){
delay(500);
monServo3.write(110);
delay(400);
monServo3.write(90);
an=haut;
cpt=0;
delay(500);
}
delay(10);
}
for(float x=2.5;x>=-2.5;x=x-0.1){
Serial.print(theta1(x,x));Serial.print(" ");
Serial.println(x);
monServo2.write(180-theta2(x,-sqrt((2.5*2.5)-(x*x))+8));
monServo1.write(180-theta1(x,-sqrt((2.5*2.5)-(x*x))+8));
cpt=cpt+0.1;
if(cpt>=1.0 && an==haut){
delay(500);
monServo3.write(70);
delay(400);
monServo3.write(90);
an=bas;
cpt=0;
delay(500);
}
if(cpt>=1.0 && an==bas){
delay(500);
monServo3.write(110);
delay(400);
monServo3.write(90);
an=haut;
cpt=0;
delay(500);
}
delay(10);
}
monServo3.write(70);
delay(400);
monServo3.write(90);
}
// ---------------joystick------------------------
if(b10_stat==HIGH && b8_stat==HIGH && b7_stat==HIGH && b11_stat==HIGH){
float X=analogRead(axeX)+15; // CHANGER LE DECALAGE
float Y=analogRead(axeY)+8;
double convx=((X*0.2)/1023)-0.1;
double convy=((Y*0.2)/1023)-0.1;
Serial.println(" "); Serial.print(" posx= ");Serial.print(posx);Serial.print(" posy= ");Serial.print(posy); Serial.print(" theta1= ");Serial.print(theta1(posx,posy-1)); Serial.print(" theta2= ");Serial.print(theta2(posx,posy-1));
if(posx>=2.5 && convx>=0){
convx=0;
}
if(posx<=-2.5 && convx<=0){
convx=0;
}
if(posy>=2.5 && convy<=0){
convy=0;
}
if(posy<=-2.5 && convy>=0){
convy=0;
}
posx=posx+convx;
posy=posy-convy;
monServo2.write(180-theta2(posx,posy+8));
monServo1.write(180-theta1(posx,posy+8));
if(!digitalRead(BOUTON) && an==haut){
Serial.println("--------------BOUTON-------------- ");
monServo3.write(110);
delay(400);
monServo3.write(90);
an=bas;
delay(350);
}
else if(!digitalRead(BOUTON) && an==bas){
Serial.println("--------------BOUTON-------------- ");
monServo3.write(70);
delay(400);
monServo3.write(90);
an=haut;
delay(350);
}
delay(50);
}
}
float theta1(float xp,float yp){
float theta;
float O1P=sqrt((-a+xp)*(-a+xp)+(yp)*(yp));
float b=(((l1*l1)-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0) )+(O1P*O1P))/(2*l1*O1P));
float alpha=acos(b)*180/M_PI;
float beta=atan(((yp)/(a-xp)))*180/M_PI;
if(xp>a){
theta=180-(90+(90+beta)+alpha);
}
else{
theta=180-(beta+alpha);
}
return theta;
}
float theta2(float xp,float yp){
float theta2;
float O1P=sqrt((-a+xp)*(-a+xp)+(yp)*(yp));
float omega=(acos(((O1P*O1P)-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0))-(l1*l1))/(-2*(sqrt(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0)))*l1))*180.0/M_PI)+acos((-(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0))+(l5*l5)-(l4*l4))/(-2*l4*(sqrt(l5*l5 +l4*l4 -2*l4*l5*cos((180-angle_effecteur)*M_PI/180.0)))))*180.0/M_PI;
float omega_bis=omega-theta1(xp,yp)-angle_effecteur;
float O2C=sqrt((a+(xp+l5*(cos(omega_bis*M_PI/180.0))))*(a+(xp+l5*cos(-omega_bis*M_PI/180.0)))+(yp+l5*sin(-omega_bis*M_PI/180.0))*(yp+l5*sin(-omega_bis*M_PI/180.0)));
float alpha2=acos((((l2*l2)-(l3*l3)+(O2C*O2C))/(2*l2*O2C)))*180/M_PI;
float beta2=atan(((yp+l5*sin(-omega_bis*M_PI/180.0))/(a+xp+l5*cos(-omega_bis*M_PI/180.0))))*180.0/M_PI;
if(xp<-a){
theta2=90+(90+beta2)+alpha2;
}
else{
theta2=beta2+alpha2;
}
return theta2;
}
Voici un résumé des principales fonctions de ce code Arduino utilisant des servomoteurs pour dessiner avec des mouvements contrôlés par un joystick :
1. Initialisation (`setup`):
- Configure les communications série et attache les trois servomoteurs à leurs broches respectives (5, 6 et 9).
- Initialise les broches du joystick et des boutons comme entrées, avec certaines configurées pour utiliser des résistances de pull-up.
2. Boucle principale (`loop`):
- Lit l'état des boutons pour déterminer quel dessin exécuter (ligne, cercle, ligne pointillée, cercle pointillé).
- Pour chaque type de dessin, le code ajuste les positions des servomoteurs pour créer les formes désirées en utilisant les fonctions `theta1` et `theta2` qui calculent les angles nécessaires pour chaque servomoteur basés sur la géométrie du système.
3. Dessin de cercles et de lignes:
- Cercles : Le code parcourt une série de points sur le périmètre d'un cercle et ajuste les angles des servomoteurs pour suivre cette trajectoire.
- Lignes : Des mouvements linéaires sont générés en ajustant progressivement les angles des servomoteurs pour déplacer l'effecteur d'un point à un autre en ligne droite.
4. Dessin en pointillé:
- Pour les lignes et les cercles en pointillé, le code alterne entre des positions hautes et basses de l'effecteur pour créer l'effet de pointillé, utilisant un compteur (`cpt`) pour gérer le timing de ces mouvements.
5. Contrôle par Joystick:
- En dehors des dessins, si aucun bouton n'est pressé, le joystick contrôle directement les positions des servomoteurs via des lectures analogiques, permettant un contrôle manuel de la position de l'effecteur.
6. Calcul des angles (`theta1`, `theta2`):
- Ces fonctions calculent les angles nécessaires pour les servomoteurs basés sur la géométrie du bras robotique (longueurs des bielles, distances entre les pivots, etc.), en utilisant la trigonométrie pour résoudre les configurations du mécanisme.
F) Montage et test du nouveau robot 🛠️🤖
Suite à l'assemblage des différentes pièces de notre robot, nous avons procédé à l'exécution de nos programmes. Les tests ont démontré que le robot était capable de réaliser avec succès toutes les tâches spécifiées dans le cahier des charges.
figure 34: Photo de notre deuxième version de robot
Voici quelques images GIF illustrant les dessins réalisés par notre robot, conformément aux spécifications demandées:
figure 35: Réalisation d'une ligne de 5cm de long
figure 36: Réalisation d'un cercle de 2.5cm de rayon
figure 37: Réalisation d'une ligne pointillée de 5cm de long
Pour visionner l'ensemble des dessins réalisés par le robot, y compris le cercle en pointillés et le joystick, vous pouvez accéder à la vidéo sur notre drive en cliquant sur le lien suivant: Visionner la vidéo.
Conclusion:
Au cours de ce projet, nous avons mis en pratique les connaissances théoriques acquises durant notre formation, les transformant en solutions concrètes et fonctionnelles. Cette expérience nous a non seulement permis de voir nos calculs et théories prendre vie, mais aussi de comprendre une réalité cruciale du génie : l'imprévisibilité des défis techniques.
En tant que futurs ingénieurs, nous avons appris que les obstacles imprévus sont une constante dans notre domaine et qu'ils se présenteront régulièrement tout au long de notre carrière. L'important est de persévérer, d'adapter nos approches et de continuer à innover malgré les difficultés.
Comme le disait Winston Churchill, « Qui ose, gagne », une leçon de résilience qui nous guidera dans notre future pratique professionnelle.
Journal de Bord - Évolution du Projet Robotique 🤖
📅 Jeudi 7 Février 2024
- Formation des Groupes : Les équipes ont été créées, favorisant une belle diversité de compétences et d'expériences.
- Brainstorming : Séance intense de brainstorming en groupe. Des idées variées ont été proposées, allant de concepts innovants à des applications pratiques pour le robot.
- Choix des Idées : Avec tant d'idées intéressantes, la difficulté principale était de se concentrer sur les plus réalisables. Trouver un consensus a pris du temps mais a été enrichissant. Heureusement, l'orientation des professeurs a été cruciale; ils nous ont guidés pour éviter de tomber dans des pièges ou de concevoir des prototypes irréalistes.
- Planification Initiale : La mise en place d'un plan d'action initial a été un peu chaotique🚨, avec plusieurs opinions sur la direction à prendre. Après discussion, nous avons décidé de fusionner certaines idées pour créer un concept de robot plus cohérent et réalisable. Nous avons ainsi établi un plan d'action plus structuré pour la prochaine séance, en se concentrant sur des objectifs spécifiques.🚀
💡 Note pour la Prochaine Séance
- Se concentrer sur l'élaboration d'un prototype de base pour le robot avec calculs précis des modèles cinématiques.
- Affiner les rôles au sein de l'équipe pour une efficacité accrue.
📅 Jeudi 21 Février 2024
🔧 Répartition des Tâches Aujourd'hui, nous avons réparti les tâches pour booster notre efficacité. Tandis qu’un travaillait sur la modélisation CAO sur SolidWorks, les autres se sont concentrés sur le modèle électronique pour Arduino et la création du code informatique pour assurer les mouvements adéquats du robot.
-
Électronique et Informatique
- La partie électronique-informatique est maintenant réalisée et fonctionnelle. Un grand pas en avant pour notre projet !
-
Réflexion sur la Création des Pièces
- Nous avons décidé des matériaux à utiliser et de l'épaisseur souhaitée pour nos pièces.
- Les mesures clés, comme la longueur des bielles formant le bras et du bâti, ont été déterminées.
- Première expérience avec la machine à découpe laser. Nous avons identifié certaines contraintes : principalement, le laser est plus adapté pour graver que pour faire de gros trous, pour éviter d'enflammer le matériau.
- Nos pièces seront conçues pour s'emboîter, à la manière des petites boîtes à idées du FabLab, avec des encoches pour faciliter la fixation.
-
Retour sur le Modèle Géométrique
- Moment de discussion enrichissant avec le professeur à propos de nos calculs géométriques. Cette révision nous a permis d'affiner notre approche.
🔜 Prochaines Étapes
-
- Notre objectif pour la prochaine séance est d'avoir terminé la modélisation afin de la soumettre aux professeurs pour validation.
- Nous envisageons de commencer la fabrication des pièces avec la découpe laser.
📅 Jeudi 29 Février 2024
🔍 Modèle Géométrique sur SolidWorks:
Nous avons testé et validé notre modèle géométrique direct sur SolidWorks.
Discussion et Solution avec le Professeur 🗣️
Nous avons eu une discussion productive avec notre professeur sur la façon de fixer notre robot, étant donné que nous ne pouvons pas le fixer directement au sol. Après un brainstorming constructif, nous avons trouvé une solution ingénieuse : créer une plaque qui servira de support stable pour le robot, où il pourra être fixé à l'aide d'une MAP .
Finalisation et Assemblage Virtuel des Pièces
Nous avons finalisé la conception des différentes pièces sur SolidWorks et commencé l'assemblage virtuel. Cela nous a donné une première vision concrète de la façon dont les pièces s'emboîteront dans la réalité.
Prochaine Étape : Fabrication Réelle 🏗️
Notre objectif est d'avoir déjà fabriqué nos pièces avec la découpe laser et l'imprimante 3D pour la prochaine session.En effet, notre conception inclut beaucoup de pièces différentes, ce qui signifie un temps de fabrication assez long. On veut s'y prend à l'avance pour ne pas être pris de court et assurer une progression fluide du projet.
📅 Mercredi 24 Avril - Refonte du Modèle Géométrique 😊
Aujourd'hui, nous avons entamé la refonte du modèle géométrique du robot. Après avoir analysé les performances de la première version, nous avons identifié plusieurs améliorations potentielles. Les calculs ont été révisés pour optimiser la structure et la fonctionnalité des composants. Une journée productive qui pose les bases solides pour les étapes suivantes!
📅 Mercredi 30 Avril - Modélisation sur SolidWorks 😄
Nous avons commencé la modélisation du robot sur SolidWorks. Cela implique de transposer nos calculs géométriques en un modèle 3D précis. Chaque pièce a été conçue avec attention pour garantir l'intégration et la compatibilité des différents sous-ensembles. C'est toujours impressionnant de voir le projet prendre forme visuellement!
📅 Vendredi 3 Mai - Codage Arduino 🧐
Le développement du code Arduino pour contrôler notre robot a débuté aujourd'hui. Nous avons intégré des fonctions pour la détermination des coordonnées, le tracé de lignes et de cercles, ainsi que la gestion de l'interface utilisateur via des boutons. Des tests préliminaires montrent une bonne réactivité des commandes, mais quelques ajustements sont encore nécessaires.
📅 Mercredi 15 Mai - Assemblage du Robot 🛠️
L'assemblage des différentes pièces du robot a été réalisé aujourd'hui. Tout s'emboîte parfaitement, grâce à la précision de notre modélisation sur SolidWorks. Chaque composant a été vérifié et ajusté pour assurer un fonctionnement fluide. Demain, nous passerons aux tests complets - un moment crucial!
📅 Jeudi 16 Mai - Tests du Robot et Finalisation 🎉
Une journée intense de tests! Nous avons exécuté plusieurs cycles pour vérifier la stabilité et la précision des mouvements du robot. Après quelques petits ajustements dans le code Arduino et la calibration des servomoteurs, notre robot fonctionne comme prévu. C'est une réussite et un grand soulagement de voir le robot accomplir les tâches du cahier des charges. Un excellent moyen de conclure notre projet!
📅 Mercredi 22 Mai - Présentation du Projet Robotique 🎓
Un support visuel pour la présentation est accessible en annexe sous le nom de "Diaporama Présentation Robot Écrivain".