IMA4 2017/2018 Pré-projet 1

De Wiki de Projets IMA
Révision datée du 16 janvier 2018 à 15:09 par Egomezri (discussion | contributions) (Réalisation du Projet)


Présentation générale

Le projet consiste à faire un robot araignée hexapode qui monte les escaliers

Description

Le projet se découpe en plusieurs phases :

  • fabrication du robot hexapode avec des servos-moteurs,
  • programmation du robot pour monter des escaliers,
  • localisation du robot dans Polytech et mesure de la puissance du wifi.

Objectifs

Analyse du projet

La première étape est de faire de la bibliographie sur le sujet afin de définir :

- les actions à mener pour le projet --> définir l'estructure, programation du robot et montage du robot

- le matériel à utiliser

- le scénario d'usage --> le robot doit monter les escaliers


Positionnement par rapport à l'existant

Scénario d'usage du produit ou du concept envisagé

Préparation du projet

Pour la structure du robot je vais utiliser l'imprimante 3D, donc je va faire la structure au format .stl. Pour la structure je vais faire 3 composants pour les pattes et une partie central. Comme un exemple de la structure on peux regarder cette vidéo: [1]

J'ai trouvé un design qui pourrait être intéressant pour la structure du robot: [2]

Dans ce fichier, vous pouvez voir les images de conception Fichier:Diseño robot.docx.pdf

Les jambes ont trois parties, jointes par les servos.


Cahier des charges

Choix techniques : matériel et logiciel

Pour ce robot, on a besoin de:

- 18 servo-moteurs (3 par patte, 6 pattes) --> MG90s

- Arduino MEGA

- Fils pour connecter l'Arduino et les servo-moteurs

- Imprimante 3D

- Une banque de batterie usb de 5 V

- Une batterie de 9 V et 300 mA

- Batteries portables

- 18 vis et écrous

- Adhésive

Liste des tâches à effectuer

  1. Décider de la structure du robot: Le robot aura 6 pattes. Quelque patte aura 3 composants pour avoir un mouvement qui ressemble à une araignée. Le design sera fait au format stl pour être utilisé dans l'imprimante 3D.
  2. Utiliser l'imprimante 3D pour obtenir les parties du robot.
  3. Commencer la programation de l'Arduino. Vous devez programmer 18 servomoteurs (3 par patte, 6 pattes).
  4. Faire la connexion entre l'Arduino et les servo-moteurs.

Calendrier prévisionnel

Réalisation du Projet

Pour mener à bien le projet, nous devons savoir quels servos utiliser. Les servos doivent être capables de soulever le robot entier, ils doivent donc avoir la force nécessaire. Pour bouger, le robot tiendra sur ses trois jambes tout en avançant avec les trois autres. Cependant, en montant les escaliers, deux servos doivent être capables de soulever le robot. C'est pourquoi nous allons diviser le poids du robot entre les deux servos qui fonctionneront en même temps.

Le robot a:

  1. Arduino
  2. Batteries
  3. Servo-moteurs
  4. GPS
  5. Sructure

Nous devrons utiliser le méga arduino, car nous avons besoin de suffisamment d'épingles pour les 18 servo-moteurs. L'arduino mega pèse 55 grammes.

Nous avons 18 servo-moteurs. Chaque servo-moteur pèse entre 8 et 13 grammes, selon le modèle. Par conséquent, ce sera entre 144 et 234 grammes.

Le GPS pèse 8.5 grammes.

Pour connaître le nombre de batteries dont nous avons besoin, nous devons savoir quelle intensité consomme un servomoteur. Les modèles possibles de servomoteur sont:

  1. 1.3kg: M = 8 g ; V = 4.8 - 7.2 V ; F = 1.3 kg/cm ; v = 0.12 s/60º
  2. 1.5kg: M = 9 g ; V = 4.8 - 7.2 V ; F = 1.5 kg/cm ; v = 0.10 s/60º
  3. 1.8kg: M = 10 g ; V = 4.8 - 7.2 V ; F = 1.8 kg/cm ; v = 0.12 s/60º
  4. 2.5kg: M = 13 g ; V = 4.8 - 7.2 V ; F = 2.5 kg/cm ; v = 0.10 s/60º

M = masse ; V = tension ; F = force ; v = vitesse

On va faire les calculs avec deux servos:

  1. 1.5kg:

C = 1.5 kg/cm * 9.8 N/kg * 1 m / 100 cm = 0.147 Nm

w = 10.47 rad/s

P = C * w = 1.539 W

I = P / V = 0.2565 A


  1. 2.5kg:

C = 2.5 kg/cm * 9.8 N/kg * 1 m / 100 cm = 0.245 Nm

w = 10.47 rad/s

P = C * w = 2.565 W

I = P / V = 0.4275 A

Il doit être pris en compte que la performance d'un servomoteur est d'environ 50%, donc finalement, pour un servo de 1.5 kg --> I = 0.513 A et pour un servo de 2.5 kg --> I = 855 A.

Pour le servo de 2.5 kg, l'intensité total doit être 16.2 A (si I = 0.9 A). On peux utiliser batteries AA. 4 batteries de 1.5 V fait un batterie de 6 V (pour la tension du servo) avec I = 2 A. Cet batterie pèse 24 * 4 = 96 grammes. Si on utilise une batterie de 6 V pour deux servo-moteur, on a 9 batteries, qui pèsent 864 grammes.

Pour le servo de 1.5 kg, l'intensité total doit être 10.8 A (si I = 0.6 A). Si on utilise batteries AA, on peux utiliser une batterie de 6 V pour trois servo-moteur, donc on aura 6 batteries, qui pèsent 576 grammes.

Le support de batterie pèse 16 grammes. Si on utilise 9 supports ça fait 144 grammes. Avec 6 supports c'est 96 grammes.


Pour le gps nous allons utiliser une banque de batterie usb de 5 V (286 g), et pour l'Arduino nous allons utiliser une batterie de 9 V et 300 mA (54 g).

Pour trouver le poids de la structure, j'ai utilisé le robot que mes collègues ont fait l'année dernière. J'ai calculé un poid de 180 grammes, donc on peut supposer que le poids de la structure sera compris entre 100 et 250 grammes.

Première supposition

Servo-moteur de 1.5 kg --> Mtotal= 55 + 162 + 8.5 + 576 + 96 + [100, 250] = 1072.5 +- 75 grammes


Deuxième supposition

Servo-moteur de 2.5 kg --> Mtotal= 55 + 234 + 8.5 + 864 + 144 + [100, 250] = 1480 +- 75 grammes


Je crois que on peux choisir la première supposition pour le robot, donc on a besoin des servo-moteurs de 1.5 kg, 24 batteries AA de 1.5 V et 6 supports des batteries


J'ai effectué le test d'une jambe de robot. Pour ce test, j'ai branché les servo-moteurs à la protoboard, qui est alimenté par la batterie. L'Arduino est branché à l'ordinateur pour télécharger le programme et l'alimenter. Connexion.jpg

Pour tester les mouvements de la patte, j'ai utilisé cette programme:

  1. include <Servo.h>

Servo hom; Servo cod; Servo pie; Servo otro;

void setup() {

 hom.attach(3);
 cod.attach(5);
 pie.attach(6);
 otro.attach(9);

}

void loop() {

hom.write(90);
delay(1000);
hom.write(180);
 delay(1000);
 
 pie.write(90);
delay(1000);
pie.write(180);
 delay(1000);
 
 cod.write(90);
delay(1000);
cod.write(180);
 delay(1000);
 
  otro.write(90);
delay(1000);
otro.write(180);
 delay(1000);

}


Il y a un problème avec l'alimentation. si un seul servo est testé, il fonctionne correctement, mais si deux servos ou plus sont connectés, ils sont bloqués ou ils font de courts mouvements et ils vibrent. J'ai testé le programme avec différents Arduino (Arduino Mega et Arduino Uno). L'arduino Uno fonctionne mieux mais donne aussi les mêmes problèmes, donc le problème n'est pas ni l'Arduino ni le programme (j'ai testé différents programmes plus basiques et la même chose arrive).

J'ai cherché des solutions par Internet et il dit que le problème est probablement l'alimentation. Je vais faire des testes pour voir si le problème c'est le fil de l'alimentation, mais sinon je va essayer avec une batterie plus grande.


J'ai testé les servos avec le dernier programme que j'ai ajouté et en changent l'alimentation (avec l'ordinateur ou avec la batterie). Je crois qu'on doit alimenter les servo-moteurs avec plusier d'intensité (c'est pour ça qu'ils ne marchent pas bien). Je veux tester à alimenter l'Arduino avec l'ordinateur et le robot avec la batterie et la sortie de 5V de l'Arduino. Si on fait ça, l'intensité du circuit augmente et les servos peuvent marcher bien. La connexion sera:

DoubleConnexion.jpg


Ici c'est le programme que je suis en traint de faire pour monter les escaliers:

Les servo-moteurs s'appelent A=avant, B=Au milieu, C=derrière; D= à droite, G= à gauche; 1=épaule, 2=femur, 3= pied.

J'ai testé les parties du programme séparement et avec un ou deux servo-moteurs seulement. Si la connexion avec l'ordinateur et la batterie marche bien je peux le tester avec plusiers de servos.

  1. include <Servo.h>

Servo AD1; Servo AD2; Servo AD3; Servo AG1; Servo AG2; Servo AG3;

Servo BD1; Servo BD2; Servo BD3; Servo BG1; Servo BG2; Servo BG3;

Servo CD1; Servo CD2; Servo CD3; Servo CG1; Servo CG2; Servo CG3;

int i;


void setup() {

 AD1.attach(8);
 AD2.attach(9);
 AD3.attach(10);
 AG1.attach(11);
 AG2.attach(12);
 AG3.attach(13);
 BD1.attach(2);
 BD2.attach(3);
 BD3.attach(4);
 BG1.attach(5);
 BG2.attach(6);
 BG3.attach(7);
 CD1.attach(22);
 CD2.attach(24);
 CD3.attach(26);
 CG1.attach(28);
 CG2.attach(30);
 CG3.attach(32);

}

void loop() {

 AD1.write(90);
 AG1.write(90);
 AD2.write(90);
 AG2.write(90);
 AD3.write(90);
 AG3.write(90);
 BD1.write(90);
 BG1.write(90);
 BD2.write(180);
 BG2.write(180);
 BD3.write(180);
 BG3.write(180);
 CD1.write(90);
 CG1.write(90);
 CD2.write(180);
 CG2.write(180);
 CD3.write(180);
 CG3.write(180);
 
 delay(500);
 AD2.write(0);
 AG2.write(0);
 delay(500);
 AD3.write(60);
 AG3.write(60);
 delay(500);
 AD1.write(0);
 AG1.write(0);
 delay(500);
 AD2.write(45);
 AG2.write(45);
 delay(500);
 

for(i=0; i<5; i++){

 CG2.write(135);
 delay(500);
 CG1.write(135);
 delay(500);
 CG2.write(180);
 delay(500);
 BG2.write(135);
 delay(500);
 BG1.write(135);
 delay(500);
 BG2.write(180);
 delay(500);
 CD2.write(135);
 delay(500);
 CD1.write(45);
 delay(500);
 CD2.write(180);
 delay(500);
 BD2.write(135);
 delay(500);
 BD1.write(45);
 delay(500);
 BD2.write(180);
 delay(500);
 BD1.write(135);
 BG1.write(45);
 CD1.write(135);
 CG1.write(45);

}

 BD2.write(135);
 BG2.write(135);
 delay(20);
 BD1.write(90);
 BG1.write(90);
 delay(20);
 BD2.write(0);
 BG2.write(0);
 BD3.write(60);
 BG3.write(60);
 delay(20);
 BD1.write(150);
 BG1.write(150);
 delay(20);
 BD2.write(45);
 BG2.write(45);

}


Ce programme marche avec les positions initiales de chaque servo-moteur. Il peut être necessaire qu'on devra changer les positions du programme en fonction de la contruction du robot.

J'ai essayé d'imprimer une patte du robot dans l'imprimante 3D mais l'imprimante a été occupée tout la semaine. Je dois construir et tester la patte avec les servo-moteurs et mesure la puissance des servos.


CONSTRUCTION D'UNE PATTE:

Pour la construction du robot je vais utiliser 18 servomoteurs MG90s, 18 vis M3-16 avec ses écrous et une adhésive pour coller les servos à la patte.

Chaque patte est composée de trois parties: l'épaule, le fémur et la tibia. Il y a deux servomoteurs dans le fémur et un dans l'épaule. L'union entre les trois parties est faite par le servomoteur d'un côté, et une vis M3 de l'autre. Les servomoteurs sont collés avec un colle double face. Pour que le colle marche bien, on doit atteindre 24 heures avant d'utiliser la patte. Le vis ne doit pas être trop serrée car il empêche le mouvement.

Unepatte.jpg

Ci-dessus, on peut voir une patte et les components separés.


TEST D'UNE PATTE:

Pour tester une patte j'ai mesuré l'intensité et la tension en connectant les servos. Les servos sont connectés en parallèle à la batterie. La deuxième sortie de la batterie alimente l'Arduino. Les servos sont aussi connectés à l'Arduino avec les ports PWM. Ici on peut voir un schéma de la connexion:

Schemaconnexion.jpg

Dans le schéma, A = mesure de l'intensité et V = mesure de la tension.

Pour ces mesures j'ai utilisé un voltmètre et un oscilloscope pour voir la variation de la tension.

Théoriquement, la tension doit être constant en 5 V (c'est l'alimentation de la batterie). Les servomoteurs consomment normalement entre 200 et 300 mA quand ils se mouvent.

Dans la pratique, j'ai mesuré un tension de 5,11 V (proche à 5 V) et il varie entre 4,9 et 5,1 quand les servomoteurs se mouvent. Pour l'intensité j'ai fait trois testes: avec 1 servo, avec 2 servos et avec les 3 servos, en mesurant toutes les courants à chaque fois. Les résultat étaient:


MesuresIV.jpg


On peut voir que les servomoteurs 2 et 3 consomment un intensité entre 100 et 300 mA (normalement 250 mA) quand ils se mouvent. S'ils rentent immobiles ils ne consomment pas d'intensité. Le servomoteur 1 a des valeur différentes. Normalement il a besoin entre 600 et 800 mA, mais il y a des moments où il consomme 2 A plus ou moins. Ces sont des moments très courts et seulement quand il bouge. J'ai cherché et quand les servomoteurs sont activés il peut avoir des pics de consommation. Aussi, si le servomoteur est vieux il peut avoir plusier des pertes et pour ça il consomme plus d'intensité.

On peut voir que l'intensité total du circuit (sans les pics de consommation du premier servo) n'est pas plus grand que 1 A, donc avec cette batterie on peut alimenter au moins deux pattes (6 servos).

Pour mesurer l'intensité et la tension j'ai utilisé une programme d'Arduino qui fait que les servos bougent entre 0 et 180 degrés tour à tour:

void loop() {

for (i=0; i<180; i=i+10){
AD1.write(i);
delay(100);
}
for (i=0; i<180; i=i+10){
AD2.write(i);
delay(100);
}
for (i=0; i<180; i=i+10){
AD3.write(i);
delay(100);
}

}



Pour détecter les escaliers et activer le programme, nous pouvons utiliser un capteur de proximité: Le HC-SR04

Caractéristiques: - Alimentation de 5 volts. - Connexion (vcc, trigger, echo, GND). - Mesure: 2 cm a 400cm. - Courant d'alimentation: 1.5mA. - Fréquence: 40Khz. - 15°. - Taille: 45x20x15mm.




Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Total
Analyse du projet 0


Prologue

Semaine 1

Semaine 2

Documents Rendus