Projet Rob3 : Fatah,Oualid,Dounia (FOD : Fonctional Omnidirectional Drawing Robot )
I ) PréPréaumbule :
1) Membres de l'ééquipe :
Contacte | Formation | |
Mohamed El Oualid BOUDEMAGH | mohamed_el_oualid.boudemagh@etu.sorbonne-universite.fr | Polytech-Sorbonne ( ROB3 ) |
Fatah MSAID | fatah.msaid@etu.sorbonne-universite.fr | Polytech-Sorbonne ( ROB3 ) |
Dounia BAKALEM | dounia.bakalem@etu.sorbonne-universite.fr | Polytech-Sorbonne ( ROB3 ) |
PéqPériode du projet : 14/02/2024 au 23/05/202
2) Indroduction, cadre et objectifs de la réréalisation :
Etant actuellement des éétudiants en vue de devenir des ingéingénieurs roboticiens, nous sommes amenéamenés àà concevoir un robot en passant par toutes les éétapes de modémodélisation et réréalisation. Dans le cadre de ce projet, il s'agit d'un robot qui dessine sur une face 2D de dimension 25*25 mm.
De ce fait, vous trouverez dans la suite de ce rapport notre cheminement pour mener àà bien ce projet, cela comportera la conception de la partie mémécanique, le systèsystème de commande, la motorisation, l'interface de pilotage et les diffédifférents codes informatiques pilotants.
Ainsi, nous mettrons en pratique les connaissance acquises en programmation (langage C), en modémodélisation (SolidWorks), en calculs cinécinématiques (ModèModèles géomégéométriques direct/indirecte). Par ailleurs, nous aspirons àà consolider notre inventaire de Roboticien en apprenant le codage en Arduino, les impressions 3D et le dédécoupage laser.
Enfin, nous nous engageons àà prendre soin du matématériel mis àà notre disposition au sein du FablabSU, nous tenons éégalement àà remercier nos enseignants et le personnel qui nous encadront tout au long de notre projet.
3 ) Diagramme de Gantt (au 21/02/2024) et distribustion des rôrôles :
II ) Cahier des charges :
Le but génégénéral est de faire un robot capable de dessiner avec un crayon sur un support plan horizontal.
2.1 Fonctions àà réréaliser
Le robot doit êêtre fixéfixé ou poséposé sur une plaque horizontale carrécarrée de 250mm par 250mm. Il doit êêtre capable de réréaliser deux exercices :
1) Tracer, avec l’l’aide d’d’un crayon fixéfixé sur l’l’organe terminal du robot, dans le plan de la plaque support diffédifférentes figures imposéimposées de difficultédifficulté croissante :
a. Une ligne de 5cm de long,
b. Une ligne pointillépointillée de 5cm de long,
c. Un cercle de 2.5cm de rayon,
d. Un cercle pointillépointillé de 2.5cm de rayon.
Le tracétracé de chacune des figures doit êêtre réaliséréalisé en 10 secondes +/- 0.2 secondes.
2) Tracer, avec l’l’aide d’d’un crayon fixéfixé sur l’l’organe terminal du robot, dans le plan de la plaque support, un dessin imposéimposé dans un carrécarré de 5cm par 5cm. Le dédéplacement de l’l’organe terminal du robot devra êêtre pilotépiloté par un joystick. Il est possible que la figure soit discontinue, et donc il faut préprévoir de pouvoir relever le crayon du support horizontal sur lequel on éécrit.
Une fonction supplésupplémentaire, optionnelle , peut êêtre réaliséréalisée :
ÊÊtre capable de modifier la vitesse de dédéplacement du robot via l’l’interface.
2.2 Fonctions contraintes
Les contraintes imposéimposées sont :
- Respect des
rèrèglesd’d’utilisation du FABLAB de SorbonneUniversitéUniversité au sein duquel vous travaillerez, en particulier la charte des FabLab du MIT. Cela implique que vous travaillerez sur le WIKI du FABLAB pour documenter votre projet. Il y a une bonne documentation ici pour savoir comment utiliser le WIKI. - Utilisation de composants (moteurs,
contrôcontrôleurs, boutons,élééléments de guidage, alimentationstabiliséstabilisée, boutons, etc.) parmi un ensembleimposéimposé. Une liste de composants utilisables est disponible au paragraphe 4. - Fabrication des
pièpiècesgrâgrâceàà :- Machine
ààdédécoupe LASER. - Imprimantes RAISE 3D PRO2.
- Machine
Ces machines du FABLAB de sont pas toutes accessibles tout le temps ni en mêmême temps. C’C’est une contrainte qu’qu’il vous faut intéintégrer dans la gestion de votre projet (par exemple, priviléprivilégier la dédécoupe LASER qui est trètrès rapide, lorsque c’c’est possible).
Un objectif est de minimiser la quantitéquantité de matièmatière utiliséutilisée pour réréaliser le projet.
- Programmation en C utilisant la
chaîchaîne dedédéveloppement Arduino IDE
CE NE SONT PAS LES FONCTIONS CONTRAINTE DE L'OBJET, MAIS VOS CONTRAINTES DE REALISATION DU PROJET
4. Liste des composants et matématériels disponibles
- Un crayon
- Interface de commande :
- Une carte arduino UNO avec
câcâble USB-B; - Un joystick:
- Une platine de protoypage;
- Alimentation
régulérégulée 5V ; CâCâbles, LEDs, boutons poussoirs,rérésistances.
- Une carte arduino UNO avec
- Motorisation :
- Deux servomoteurs HS422
180°180°; - Un servomoteur Emax ES08A
180°180°.
- Deux servomoteurs HS422
MéMécanique :Matiè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èdiamètre 4mm.
III ) Solutions ProposéProposées :
1 ) Solution 1 : La voiture qui dessine
-
L'une des
idéidéesexploréexploréeséétait de concevoir un robot sous forme de voiture capable d'éécrire avec un stylo. Cependant,aprèaprès avoirexaminéexaminé les servomoteurs disponibles et les contraintes du projet, nous avonsconstatéconstaté que ces servomoteurs ne conviendraient pas pour tourner les roues demanièmanière efficace en raison de leur limitation de rotation maximaleàà 180degrédegrés. De plus, les restrictionsimposéimposées, comme l'interdiction d'utiliser des outils externes tels qu'un hacheur pour la motorisation, et l'incapacitéincapacité d'incorporer unsystèsystème Bluetooth pourcontrôcontrôler la voiture avec un joystick, ontétéété des obstacles significatifs.En raison de ces contraintes techniques et de conception, nous avons
étéété contraints d'abandonner l'idéidée de la voiture robotique. Nous nous sommesplutôplutôtconcentréconcentrés sur des alternatives qui seraientréréalisables dans le cadre des ressources et des contraintes du projet, tout en restant conformes au cahier des charges initial.
2 ) Solution 2 : Robot àà deux rails :
|
SchéSchéma non-contractuel du robot àà deux rails Source de la photo : (19) Technical Tushar - YouTube
- Fonctionnement : Le servomoteur 1 est
collécollé sur le pignon 1 qui est luimêmêmefixéfixé sur la plateforme fixe. Ce premirsystèsystème entraine la translation de lacrémalliècrémallière 1 selon x. Au bout de cettedernièdernière, la plateforme mobile estfixéfixé, cette plateforme se deplace donc selon x suivant lacrémalliècrémallière 1. Par ailleurs, lemêmêmemémécanisme (servomoteur 2, pignon 2,crémalliècrémallière 2)fixéfixé sur la plateforme mobile entraine la traslation du stylo selon y. Enfin, le servomoteur 3 actionne la manivel permettant au stylo d'êêtre ou non au contacte avec la feuille. - Noter que les servomoteurs ne pouvant effectuer une rotation de
90°90° dans un sens et90°90° dans l'autre, les pignons sontdimensionnédimensionnés enconséconséquence (ici r = 2.5cm) permettant au stylo d'agir sur une surface de 7cm * 7cm. - Avantages : -
SimplicitéSimplicité de conception, deréréalisation et de calcul. -RigiditéRigidité etsoliditésolidité dusystèsystème. -PréPrécision permettant au stylo de dessiner toute forme. - Absence desingularitésingularité dans le cadre des 7 * 7 cm. - Consommation assez raisonnable de ressources - Limites :
- Une lubrification peut
êêtre envisageable. - Frottements.
- La plateforme tenant le stylo peut se pencher vers le sol
àà cause de son poids.
3 ) Solution 3: Robot àà 3 rails :
Nous avons pris cette photo afin d'illustrer nos explications dans "Fonctionnement". Cela dit, elle ne |
Source de la photo : Laser Engraver TT-5.5S Laser Wood Engraver - Two Trees (twotrees3d.com)
- Fonctionnement :Le fonctionnement demeure fondamentalement
inchangéinchangé par rapportàà la solutionprécéprécédente. Simplement, ici lemémécanisme servomoteur-pignon-crécrémalliere (sur le rail 1) entraine la translation du stylo selon y, et en face (sur le rail 2) on retrouve un roulement quiréréalise le guidage permettant au rail 3 de toujoursêêtre perpendiculaire aux rails 1 et 2. De plus, un autre mecanisme servomoteur-pignon-crécrémalliere permet au style de se deplacer selon x ( sur le rail 3). Enfin, le dernier servomoteur actionne la manivel permettant au stylo d'êêtre ou non au contacte avec la feuille. - Avantages : - Absence de
singularitésingularité dans le cadre des 7 * 7 cm. - Calculsthéthéoriques assez simples. - Limites :
- Le guidage n'est pas optimal ce qui peut engendrer la diagonalisation du rail 3.
- Trop de ressources
utiliséutilisées. - Conception,
réréalisation et montage assez fastidieux . NécéssitéNécéssité absolue de lubrification (notamment le roulement).
4 ) Solution 4 : (Solution retenue ) : Robot a articulations :
Pour la 3è3ème idéidée nous avons optéopté pour un robot qui utilise le principe du FANUC pour fonctionner ,
Le principe : le but de cette solution est d'atteindre le maximum de points dans un carrécarrée , pour cela on va relier 2 bras sous forme de "L" avec 3 servos-moteurs , un pour le bras droit, un pour le bras gauche , un pour remonter les bras selon z , donc on aura au totale 3 mouvements selon les 3 axes , chaque bout de bras sera relier a l'aide d'une articulation pivot et donc pour chaque mouvement du bras relier au moteur , l'autre bras suivra .
Pour réréaliser cela , nous reliant un repaire pour chaque bout de bras et àà l'aide des matrices de DH on pourra donner directement les coordonnécoordonnées articulaires pour la taches voulue et le microcontroleur calculera les angles nénécessaire a faire pour le réréaliser , cette solution est plus préprécise par rapport au 2 autres car on pourra atteindre n'importe quel point àà l'aide de calcules
ProblèProblèmes :
MalgréMalgré l'efficacitéefficacité de cette solution , elle pose un problèproblème extrêextrêmement contraignant qui est : les points de singularitésingularités, effectivement , contrairement, aux 2 autres solutions , les singularitésingularités sont atteintes trètrès facilement ce qui donc nous limitera dans le nombre de mouvement possibles , ces points de singularitésingularités sont atteint pour : les angles des 2 bras est de 180°180° et quand l'un des deux bras est totalement tendu , quand l'angles des bras atteins au meme temps 90°90° AH BON ? VOUS l'AVEZ CALCULE ?
Croquis àà main levélevée de la solution
Exemple de la solution
source de la photo : https://youtu.be/s5AP7tbfueg
Pourquoi avons-nous gardégardé cette idéidée ?
Cette idéidée est restérestée pour nous la plus réréaliste et la plus efficace , effectivement , la réréalisation de ce type de robot n'est pas trètrès compliquécompliquée vue que pour le guidage on aura besoin que 2articulations pivot , et donc facile a réréaliser , de plus , cette solution nous permet d'avoir plus de libertéliberté car on pour pratiquement atteindre n'importe quelle point dans un carrécarré si on envoie les bonne coordonnécoordonnées articulaires , bien-sur tout en éévitant les cas de singularitésingularités , donc au final, le vrai gros problèproblème de cette solution serait la singularitésingularité qui est un problèproblème qui théthéoriquement ne devrait pas êêtre trètrès dur a rérésoudre si on le compare avec les solutions abandonnéabandonnées .
IV. conception détaillédétaillée :
1)SchéSchéma éélectrique et modèmodèle géomégéométrique :
1 .1).modèmodèle géomégéométrique (1er modèmodèle) :
Les coordonnécoordonnées articulaires sont nécénécéssaire pour qu'on puissent attendre les positions voulue par notre robot , et pour les trouver on a du calculer le modèmodèle géomégéométrique inverse de notre robot et nous avons ainsi trouver les ééquations qui relie les coordonnécoordonnées articulaires aux paramèparamètres de notre robot et aux paramèparamètres de la position voulue . Cela a pu éétre effectuer selon les éétapes suivantes :
- Relier chaque corps du robot a un repaire
- Trouver les
ééquations de contraintes qui relient les repaires - Trouver les
coordonnécoordonnées voulue en fonction des angles articulaires - Regrouper tout en
ééquations - Enfin
aprèaprès avoirdérivédérivés lesééquations et les avoirrérésolue nous obtenons les relations suivantes pour chaquecoordonnécoordonnées articulaire :
Source : Cours de Mr.Morel de mémécanique génégénéral
Remarque : ici l3=0
SchéSchéma cinécinématique du robot
Remarque :
S1 : Biele 1
S2 : Biele 2
S3 : Biele 3
S4 : Biele 4
O1 : Centre du 1er servo-moteur
O2 : Centre du 2è2ème servo-moteur
Ensuite nous avons impléimplémenter le rérésultat sur MATLAB pour effectuer le calcule des coordonnécoordonnées articulaires
Code de la fonction utiliséutilisée pour le calcule du modèmodèle géomégéométrique inverse
1.2).ModèModèle géomégéométrique final :
AprèAprès avoir réaliséréalisé le premier modèmodèle géomégéométrique, nous avons constatéconstaté rapidement qu'il comportait quelques erreurs, notamment parce qu'il éétait éétabli àà partir d'un seul bras, ne prenant pas en considéconsidération le fait que les deux bras fonctionnent ensemble.
Par conséconséquent, nous avons optéopté pour un nouveau modèmodèle, plus complet. Ce nouveau modèmodèle prend en compte les mouvements des deux bras en parallèparallèle. La fonction MATLAB ci-dessous illustre ce nouveau modèmodèle géomégéométrique amélioréamélioré, qui calcule les angles nénécessaires pour les deux bras en fonction des coordonnécoordonnées (x, y) et des longueurs des bras (l1, l2, l3, l4).
Code MATLAB utiliséutilisée
2 . SchéSchéma éélectrique :
SchéSchéma éélectrique du FOD
Composant | Pin |
Bouton |
2 |
Bouton |
3 |
Bouton |
4 |
Bouton |
5 |
Joystick | X: A0 , Y : A1 , SW : 10 |
Servo droit | 7 |
Servo gauche | 8 |
Servo haut | 9 |
3. Code :
Dans cette éétape, nous avons exploréexploré deux méméthodes distinctes. Pour la premièpremière méméthode, nous avons utiliséutilisé MATLAB pour calculer les angles àà donner aux servomoteurs, puis nous les avons intégréintégrés directement dans notre code Arduino.
Descriptif du code :
Cependant, lorsque nous avons introduit le joystick dans notre systèsystème, nous avons réaliséréalisé que cette méméthode limitait notre flexibilitéflexibilité et rendait impossible l'utilisation du joystick.
C'est pourquoi nous avons optéopté pour la deuxièdeuxième méméthode, oùoù nous effectuons les calculs directement dans le code Arduino. Cette approche nous permet d'obtenir les angles directement àà partir du programme, ce qui simplifie l'intéintégration du joystick et offre une plus grande flexibilitéflexibilité dans le contrôcontrôle du systèsystème.
Pour réréaliser cela, nous avons implémentéimplémenté dans notre code une fonction qui effectue le mêmême calcul que celui que nous avions réaliséréalisé avec MATLAB. Cette fonction prend en compte les coordonnécoordonnées de destination et les longueurs des bras, puis calcule les angles nénécessaires pour positionner les bras de manièmanière appropriéappropriée.
Code de la fonction de calcule du modèmodèle géomégéométrique
En incorporant cette fonction dans notre code Arduino, nous avons pu obtenir les angles requis directement àà partir du microcontrômicrocontrôleur, sans avoir besoin de faire des calculs prépréalables dans MATLAB. Cela simplifie le processus et permet une exéexécution plus efficace des opéopérations, ce qui est particulièparticulièrement important dans un environnement en temps réréel comme celui des systèsystèmes embarquéembarqués. De plus, cela nous permet d'avoir un contrôcontrôle total sur le fonctionnement du systèsystème directement àà partir du code Arduino, offrant ainsi une solution plus intégréintégrée et autonome.
Remarque : Pour la partie Joystick , elle est en cours de dédéveloppement et doit êêtre testétestée
Organigrame du programme
A partir de cette organigramme nous avons commencer la creation du code .
Le code comporte 5 partie :
1)- dessin de la ligne continue de 5 cm :
2)-Dessin de la ligne discontinue de 5cm :
3) Dessin du cercle de rayon 2.5 cm:
4) Dessin du cercle discontinue de rayon 2.5 cm :
5) Mode manuel (joystick) :
Pour le mode manuel, le travail a étéété réaliséréalisé en collaboration avec les membres du projet robot "Majin". Ensemble, nous avons réfléréfléchi àà la manièmanière de concevoir et de coder ce mode manuel. Et donc, nous avons pu commander notre robot en position et en vitesse.
L'afficheur LCD :
AprèAprès avoir finaliséfinalisé le code, nous avons constatéconstaté qu'il manquait encore un éléélément essentiel àà notre robot : une interface permettant de connaîconnaître en temps réréel le mode de fonctionnement. Initialement, nous avions pensépensé utiliser des LED, mais cela encombrait notre montage et n'éétait pas intuitif pour une personne extéextérieure sans explications. C'est alors que nous avons eu l'idéidée d'ajouter un afficheur LCD.
Comment çça marche ?
Nous avons utiliséutilisé un afficheur LCD LiquidCrystal I2C. C'est un module pratique et facile àà utiliser pour afficher des informations sur deux lignes de 16 caractècaractères chacune. Il se connecte àà une Arduino via le bus I2C et ne nénécessite que 4 broches : Vcc, GND, SDA et SCL.
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16,2);
#define X_pin A0
#define Y_pin A1
#define sw 10
#define Bb 2 //Bouton Bleu
#define Bv 3 //Bouton Vert
#define Br 4 //Bouton Rouge
#define Bg 7 //Bouton Gris
//Etat des boutons
int bouttonb_stat = 0;
int bouttonv_stat = 0;
int bouttonr_stat = 0;
int bouttong_stat = 0;
float Rx;//CordonnéCordonnée Actuel selon x
float Ry;//CordonnéCordonnée Actuel selon y
float Rxx;//CordonnéCordonnée a atteindre selon x
float Ryy;//CordonnéCordonnée a atteindre selon y
int angle_effecteur=0;
//Definition des servos
Servo droit;
Servo gauche;
Servo haut;
//Valeur de sauvgarde d'éétats
int haut_s=50;
int bas_s=43;
int etat=bas_s;
float cpt=0;
//Parametres du modele geometrique inverse
float l1=7;
float l4=8;
float l2=7;
float l3=8;
float l5=3.5;
float a=5;
int cpts=0;
int x_val;
int y_val;
int sw_val;
//Modele geometrique inverse
float theta1(float xp,float yp){
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;
float theta=180-(beta+alpha);
return theta;
}
float theta2(float xp,float yp){
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;
float theta2=beta2+alpha2;
return theta2;
}
//DEbut du programme
void setup() {
Serial.begin(9600);
droit.attach(5);
gauche.attach(6);
haut.attach(9);
pinMode(X_pin,INPUT);
pinMode(Y_pin,INPUT);
pinMode(sw,INPUT_PULLUP);
pinMode (Bb,INPUT_PULLUP);
pinMode (Bv,INPUT_PULLUP);
pinMode (Br,INPUT_PULLUP);
pinMode (Bg,INPUT_PULLUP);
droit.write(90);
gauche.write(120);
haut.write(60);
lcd.init();//initialisation de l'afficheur Lcd
lcd.backlight();//Allumer le retro eclairage
}
void loop() {
//initialisation des bouttons
bouttong_stat = digitalRead(Bg);
bouttonb_stat = digitalRead(Bb);
bouttonr_stat = digitalRead(Br);
bouttonv_stat = digitalRead(Bv);
//Ligne continue
if(bouttonb_stat==LOW){
haut.write(60);
lcd.setCursor(1,0);//Position d'éécriture dans l'afficheur
lcd.print("Mode : Ligne ");//Ecriture dans l'afficheur
haut.write(45);
//Dessin d'une ligne de 5cm
for(float i=-2.5;i<=2.5;i=i+0.0015){
droit.write(180-theta1(i,12));
gauche.write(180-theta2(i,12));
}
delay(50);
haut.write(60);
droit.write(180-theta1(-2.5,12));
gauche.write(180-theta2(-2.5,12));
delay(1000);
lcd.clear();//Effacer
}
//Ligne discontinue
if(bouttonv_stat==LOW){
lcd.setCursor(1,0);//Position d'éécriture dans l'afficheur
lcd.print("Mode : Ligne ");//Ecriture dans l'afficheur
lcd.setCursor(1,1);//Position d'éécriture dans l'afficheur
lcd.print("Discontinue ");//Ecriture dans l'afficheur
//Dessin d'une ligne de 5cm
for(float i=-2.5;i<=2.5;i=i+0.1){
droit.write(180-theta1(i,12));
gauche.write(180-theta2(i,12));
cpt=cpt+0.1;
//Sauvegarde de l'éétat
if(cpt>=0.1 && etat==bas_s ){
etat=haut_s;
haut.write(haut_s);
delay(700);
}
else if(cpt>=0.1 && etat==haut_s) {
etat=bas_s;
haut.write(bas_s);
delay(700);
}
}
delay(50);
droit.write(180-theta1(-2.5,12));
gauche.write(180-theta2(-2.5,12));
delay(1000);
lcd.clear();//Effacer
}
//Cercle
if(bouttonr_stat==LOW){
lcd.setCursor(1,0);//Position d'éécriture dans l'afficheur
lcd.print("Mode : Cercle ");//Ecriture dans l'afficheur
haut.write(40);
//Dessin du demi cercle superieur
for(float x=-2;x<=2;x=x+0.009){
gauche.write(180-theta2(x,12+sqrt((2*2)-(x*x))));
droit.write(180-theta1(x,12+sqrt((2*2)-(x*x))));
delay(10);
}
//Dessin du demi cercle inferieur
for(float x=2;x>=-2;x=x-0.009){
gauche.write(180-theta2(x,12-sqrt((2*2)-(x*x))));
droit.write(180-theta1(x,12-sqrt((2*2)-(x*x))));
delay(10);
}
delay(2000);
lcd.clear();//Effacer
}
//Cercle discontinue
if(bouttong_stat==LOW){
lcd.setCursor(1,0);//Position d'éécriture dans l'afficheur
lcd.print("Mode : Cercle ");//Ecriture dans l'afficheur
lcd.setCursor(1,1);//Position d'éécriture dans l'afficheur
lcd.print("Discontinue ");//Ecriture dans l'afficheur
cpt=0;
etat=haut_s;
//Dessin du demi cercle superieur
for(float x=-2.5;x<=2.5;x=x+0.2){
gauche.write(180-theta2(x,12+sqrt((2.5*2.5)-(x*x))));
droit.write(180-theta1(x,12+sqrt((2.5*2.5)-(x*x))));
delay(10);
cpt=cpt+0.1;
//Sauvgarde de l'etat actuel
if(cpt>=0.1 && etat==bas_s ){
etat=haut_s;
cpt=0;
haut.write(haut_s);
delay(700);
}
else if(cpt>=0.1 && etat==haut_s) {
etat=bas_s;
cpt=0;
haut.write(bas_s);
delay(700);
}
}
//Dessin du demi cercle inferieur
for(float x=2.5;x>=-2.5;x=x-0.2){
gauche.write(180-theta2(x,12-sqrt((2.5*2.5)-(x*x))));
droit.write(180-theta1(x,12-sqrt((2.5*2.5)-(x*x))));
delay(10);
cpt=cpt+0.1;
//Sauvgarde de l'etat actuele
if(cpt>=0.1 && etat==bas_s ){
etat=haut_s;
cpt=0;
haut.write(haut_s);
delay(700);
}
else if(cpt>=0.1 && etat==haut_s) {
etat=bas_s;
haut.write(bas_s);
delay(700);
}
}
delay(2000);
lcd.clear();//Effacer
}
//Mode manuel
if (bouttonr_stat == HIGH && bouttonb_stat == HIGH && bouttonv_stat == HIGH && bouttong_stat == HIGH) {
lcd.setCursor(1,0);//Position d'éécriture dans l'afficheur
lcd.print("Mode : Manuel ");//Ecriture dans l'afficheur
// Lecture des valeurs du joystick
sw_val=digitalRead(sw);
Serial.println(sw_val);
x_val = analogRead(X_pin);
y_val = analogRead(Y_pin);
//conversion
Rx=map(x_val,0,1023,3,-3);
Ry=map(y_val,0,1023,13.8,7);
//Commande en vitesse
if (Rxx < Rx) {
Rxx += 0.01;
if (Rxx > Rx) {
Rxx = Rx;
}
} else if (Rxx > Rx) {
Rxx -= 0.01;
if (Rxx < Rx) {
Rxx = Rx;
}
}
if (Ryy < Ry) {
Ryy += 0.01;
if (Ryy > Ry) {
Ryy = Ry;
}
} else if (Ryy > Ry) {
Ryy -= 0.01;
if (Ryy < Ry) {
Ryy = Ry;
}
}
droit.write(180-theta1(Rxx,Ryy));
gauche.write(180-theta2(Rxx,Ryy));
//Lever le stylo
if(!digitalRead(sw) && etat==haut_s){
haut.write(45);
etat=bas_s;
delay(300);
}
else if (!digitalRead(sw) && etat==bas_s){
haut.write(60);
etat=haut_s;
delay(300);
}
/*if(cpts==1 && sw_val==0 ){
haut.write(haut_s);
}
else{
haut.write(bas_s);
}*/
delay(10);
}
}
2) Conception CAO :
Nous avons procédéprocédé àà la modémodélisation de notre robot àà l'aide du logiciel SolidWorks.
Cette conception peut êêtre segmentésegmentée en deux principaux sous-ensembles :
Le bâbâti : Cet ensemble abrite les deux servo-moteurs qui dirigent les deux bras, chacun composécomposé de deux bielles.
La table : DestinéDestinée àà recevoir la feuille sur laquelle éécrire, cette composante intèintègre un servo-moteur situésitué en dessous. Ce dernier est connectéconnecté àà la table et permet de rérégler la hauteur du stylo pour l'éécriture en basculant l'ensemble du bâbâti. Les dédétails de ce mémécanisme sont explicitéexplicités ci-dessous
image du robot final
Le bâbâti: du robot a étéété conçconçu en priviléprivilégiant la dédécoupe laser comme méméthode de fabrication principale. Il se compose de trois pièpièces qui s'emboîemboîtent de manièmanière adéadéquate, toutes adaptéadaptées àà la dédécoupe laser. La pièpièce centrale préprésente deux ouvertures destinédestinées àà recevoir les deux servomoteurs. Les bielles sont fixéfixées aux servomoteurs au moyen d'une vis au centre, avec un trou additionnel permettant le vissage àà l'héhélice du moteur pour assurer le guidage.
le bâbâtis
Les liaisons entres les bielles :
Comme évoquéévoqué précéprécédemment dans notre documentation, le robot est constituéconstitué de quatre bielles. Pour les articulations entre ces bielles, nous avons optéopté pour l'utilisation de roulements associéassociés àà des vis pour assurer la fixation. Comme illustréillustré dans l'image ci-dessous, l'une des bielles préprésente un trou de diamèdiamètre correspondant àà celui du roulement externe, tandis que l'autre bielle possèpossède un diamèdiamètre légèlégèrement inféinférieur (correspondant au diamèdiamètre interne du roulement). Ces élééléments sont ensuite solidement fixéfixés àà l'aide d'une vis et d'un éécrou, soigneusement serréserrés. Nous avons éégalement intercaléintercalé une plaque mémétallique entre le roulement et la vis afin de garantir la fluiditéfluidité du mouvement.
Images qui illustrent les liaisons entres les bielles
Emplacement et RéRéglage du Stylo dans le MéMécanisme du Robot :
- Comme visible, l'une des bielles est
prépréalablementéquipééquipée d'une extension et d'un orificedestinédestinéàà recevoir le stylo.ÉÉtantdonnédonné que cettepièpièce serafabriquéfabriquée en bois, nous aurons lapossibilitépossibilité d'ajouterultéultérieurement un trou sur lecôtécôté pourinséinsérer une vis permettant derérégler la hauteur du stylo.
bielle du stylo
-
Le
mémécanisme pour lever le stylo consisteàà fixer la bielle au moyen d'une vis sur l'héhélice du servomoteur. Cette bielle est ensuitefixéfixée sur unepièpièceéémergeant dubâbâti. Lesbâbâtis et la table sont ainsireliéreliés par deux liaisons pivot sur lescôtécôtés, commeillustréillustré dans l'image. Pourréréduire les frottements et faciliter le mouvement, nouspréprévoyons d'utiliser un morceau de cylindreinséréinséré dans le trou de la table, lequel serafixéfixéàà l'aide d'une vis et d'unéécrou traversant le trou dubâbâti.MéMécanisme de Levage du Stylo : Illustration et Fonctionnement
- vous trouverez ci-joint l'ensembles des fichiers SolidWorks: assemblage_FOD.zip.