IMA4 2017/2018 Pré-projet 1 : Différence entre versions

De Wiki de Projets IMA
(Réalisation du Projet)
(Feuille d'heures)
 
(51 révisions intermédiaires par le même utilisateur non affichées)
Ligne 10 : Ligne 10 :
 
* programmation du robot pour monter des escaliers,
 
* programmation du robot pour monter des escaliers,
 
* localisation du robot dans Polytech et mesure de la puissance du wifi.
 
* localisation du robot dans Polytech et mesure de la puissance du wifi.
 
==Objectifs==
 
  
 
=Analyse du projet=
 
=Analyse du projet=
Ligne 21 : Ligne 19 :
  
 
- le scénario d'usage --> le robot doit monter les escaliers
 
- 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=
 
=Préparation du projet=
Ligne 34 : Ligne 28 :
 
Dans ce fichier, vous pouvez voir les images de conception [[Fichier:Diseño_robot.docx.pdf]]
 
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.  
+
Les pattes ont trois parties, jointes par les servos. Avec trois servomoteurs par patte on peut avoir un mouvement complet des pattes.
  
  
==Cahier des charges==
 
 
==Choix techniques : matériel et logiciel==
 
==Choix techniques : matériel et logiciel==
 
Pour ce robot, on a besoin de:
 
Pour ce robot, on a besoin de:
  
- 18 servo-moteurs (3 par patte, 6 pattes) --> MG90s
+
- 18 servo-moteurs (3 par patte, 6 pattes) --> SG90
  
 
- Arduino MEGA
 
- Arduino MEGA
Ligne 51 : Ligne 44 :
 
- Une banque de batterie usb de 5 V  
 
- Une banque de batterie usb de 5 V  
  
- Une batterie de 9 V et 300 mA
+
- Batteries portables 5 V
 
 
- Batteries portables
 
  
 
- 18 vis et écrous
 
- 18 vis et écrous
  
- Adhésive
+
- Adhésive/Colle forte
  
 
==Liste des tâches à effectuer==
 
==Liste des tâches à effectuer==
# 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.
+
# 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. Les fichiers avec l'estructure et les designs sont jointes précédement.
# Utiliser l'imprimante 3D pour obtenir les parties du robot.
+
# Utiliser l'imprimante 3D pour obtenir les parties du robot. Il faut faire la formation de l'imprimante 3D au Fabricarium pour l'utiliser.
 
# Commencer la programation de l'Arduino. Vous devez programmer 18 servomoteurs (3 par patte, 6 pattes).
 
# Commencer la programation de l'Arduino. Vous devez programmer 18 servomoteurs (3 par patte, 6 pattes).
 
# Faire la connexion entre l'Arduino et les servo-moteurs.
 
# Faire la connexion entre l'Arduino et les servo-moteurs.
 
==Calendrier prévisionnel==
 
  
 
=Réalisation du Projet=
 
=Réalisation du Projet=
 
 
 
 
 
 
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.
 
 
  
  
Ligne 90 : Ligne 62 :
  
 
{| class="wikitable"
 
{| class="wikitable"
!Tâche !! Prélude !! Novembre !! Décembre !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !!Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total
+
!Tâche !! Prélude !! Novembre !! Décembre !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !!Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10
 
|-
 
|-
 
| Analyse du projet  
 
| Analyse du projet  
 
| 3
 
| 3
 
|  
 
|  
|
 
 
|
 
|
 
|
 
|
Ligne 113 : Ligne 84 :
 
| 2
 
| 2
 
|  
 
|  
|
 
 
| 2
 
| 2
 +
| 2
 +
|
 
|
 
|
 +
| 1
 
|
 
|
 
|
 
|
|
+
| 3
|
+
| 4
|
 
|
 
|
 
 
|-
 
|-
 
| Construction
 
| Construction
Ligne 132 : Ligne 102 :
 
| 3
 
| 3
 
| 3
 
| 3
|
+
|  
|
+
| 1
|
+
| 3
|
+
| 1
|
+
|  
|
 
 
|
 
|
 
|-
 
|-
Ligne 147 : Ligne 116 :
 
| 4
 
| 4
 
| 2
 
| 2
|
 
 
|
 
|
 
|
 
|
Ligne 163 : Ligne 131 :
 
|
 
|
 
|
 
|
 +
| 4
 +
| 1
 +
| 1
 +
| 1
 +
| 2
 
| 3
 
| 3
|
 
|
 
|
 
|
 
|
 
|
 
 
|-
 
|-
 
| Test
 
| Test
Ligne 176 : Ligne 143 :
 
| 4
 
| 4
 
| 1
 
| 1
|
+
| 3
 
|
 
|
 
|
 
|
 
| 1
 
| 1
 +
| 2
 +
| 2
 +
| 3
 +
| 2
 +
| 3
 +
|-
 +
| Wifly
 +
|
 
|
 
|
 +
|
 +
|
 +
|
 
|
 
|
 
|
 
|
|
+
|  
|
+
|  
|
+
|  
 +
|
 +
|
 +
| 15
 
|-
 
|-
 
|}
 
|}
Ligne 264 : Ligne 245 :
  
  
Le robot sera supporté par au moins deux servomoteurs. Si le robot pèse environ 1 kg, comme nous l'avons calculé, nous pouvons utiliser l'un des deux servomoteurs pour le robot. Finalement, on va utiliser des servomoteurs sg90, qui sont les servomoteurs disponibles.
+
Le robot sera supporté par au moins deux servomoteurs. Si le robot pèse moins de 1 kg, comme nous l'avons calculé, nous pouvons utiliser l'un des deux servomoteurs pour le robot. Finalement, on va utiliser des servomoteurs sg90, qui sont les servomoteurs disponibles.
  
==Construction du robot==
+
On peut trouver la datasheet du servomoteurs ici: [[Fichier:Sg90_datasheet.pdf]]
 +
 
 +
==Construction==
  
 
===Construction d'une patte===
 
===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.
+
Pour la construction du robot je vais utiliser 18 servomoteurs SG90, 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.
 
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.
 +
 +
Les designs sont obtenus de la page ''thingiverse'', mais j'ai fait des changes dans eux. Le design original utilise des roulements, mais pour simplifier la construction j'ai réduit le trou et faire passer un vis au lieu d'un roulement. Le vis supporte le poids du robot avec le colle du servomoteur. Sinon, la colle peut n'être pas suffisant et il peut se casser.
 +
 +
Il y a aussi un trou dans la partie du moyen de la patte pour faire passer les fils du servomoteur. J'ai agrandi cette partie parce que l'imprimante 3D remplit le trou quand elle imprime l'élément, et si le trou est très petit on peut pas éliminer le matériau excédentaire.
  
 
[[Fichier:Unepatte.jpg|400px]]
 
[[Fichier:Unepatte.jpg|400px]]
  
Ci-dessus, on peut voir une patte et les components separés.
+
Ci-dessus, on peut voir une patte et les composants séparés.
 +
 
 +
J'ai amelioré aussi le design d'une patte dans le projet Mécanique. On a la description du projet dans la page du fabricarium: [http://fabricarium.polytech-lille.fr/#!/projects/patte-d-un-robot-araignee]
 +
 
 +
===Construction du robot===
 +
 
 +
La première partie consiste à construire les pattes. J'ai actuellement 12 servomoteurs disponibles, donc j'ai construit 4 pattes. Chaque patte est montée de la même manière que la première(cf section précédente). C'est un long processus car il est nécessaire d'attendre à chaque un long moment afin que la colle sèche. De plus, la fixation n'est pas tout le temps bien faite donc je dois m'y reprendre à plusieurs fois pour y arriver.
 +
 
 +
Lorsque les pattes sont prêtes, elles doivent être jointes au corps. Pour cela, j'ai utilisé la même colle, mais les nouveaux servomoteurs n'ont pas assez de surface pour coller, donc j'ai besoin d'une colle plus forte. J'ai essayé autre fois avec la même colle et j'ai essayé aussi avec de la résine rapide, la colle de bois et la colle forte. La résine rapide et la colle de bois n'ont pas marché: quand il est séché, si j’essaie de tester les pattes ils se séparent du robot. ça a fait beaucoup de temps en train coller le robot pour atteindre à que la colle sèche.
 +
 
 +
Finalement, j'ai utilisé de la colle forte. On doit attendre 100 heures pour que la colle sèche, mais je n'a pas trouvé autre colle ou adhésive qui marche.
 +
 
 +
J'ai trouvé un problème de construction pendant les tests du robot. Comme la taille des servomoteurs est différente au espace destiné à eux, ils se mouvent dans la patte, donc si l'effort est très grand ils peuvent se détacher. Pour que les servomoteurs restent fixes, j'ai utilisé des vis M2 à chaque coté du servomoteur. J'ai utilisé 16 vis dans 4 pattes, et il reste faire autres deux pattes de la même manière.
 +
 
 +
[[Fichier:vis.jpg|250px]]
 +
 
 +
Les servomoteurs sont réutilisés (ils étaient utilisés l'année dernier pour autre robot). Je n'ai pas les vis des servomoteurs et il n'y a pas des éléments détachés. Le vis des servomoteurs n'est pas normalisé, donc je ne peux pas chercher autre vis dans le Fabricarium. C'est pour ça que je dois coller les servomoteurs dans la partie qui tourne. Je vais utiliser la même colle fort d'avant, parce qu'ils devraient supporter beaucoup de force là bas. Il faudra atteindre 100 heures aussi pour qu'ils sèchent.
 +
 
 +
[[Fichier:corprob.jpg|250px]] Ici on peux voir la partie centrale du robot. Je vais imprimer autre semblable pour que la patte reste bien fixé. Les deux parties seront unies par une petite élément fixé avec des vis.
 +
 
 +
Comme nous n'avions pas les vis des servomoteurs nous les avons collés avec de la colle forte aussi. Il faut faire attention car la surface est très petite et peut coller au servomoteur, ce qui ne transmettrait pas bien le mouvement. On a ajouté des vis par l'autre lieu pour que la colle ne se casse pas.
 +
 
 +
Ci-dessus on peut voir des images sur le robot terminé:
 +
 
 +
[[Fichier:Hexa.jpg|250px]][[Fichier:Terminado.jpg|250px]]
  
 
==Test d'un patte==
 
==Test d'un patte==
Ligne 340 : Ligne 351 :
 
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:
 
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:
  
[[Fichier:Schemaconnexion.jpg|400px]]
+
[[Fichier:Schemaconnexion1.jpg|400px]]
  
 
Dans le schéma, A = mesure de l'intensité et V = mesure de la tension.
 
Dans le schéma, A = mesure de l'intensité et V = mesure de la tension.
Ligne 351 : Ligne 362 :
  
  
[[Fichier:MesuresIV.jpg|600px]]
+
[[Fichier:MesuresIV.jpg|550px]]
  
  
Ligne 388 : Ligne 399 :
  
 
==Programme Arduino==
 
==Programme Arduino==
 +
 +
Pour programmer le robot on va utiliser Servo.h, où on peut trouver les commandes .attach(), pour définir le pin de chaque servomoteur, et .write(), pour écrite la position en grades du servomoteur.
  
 
Ici c'est le programme que je suis en traint de faire pour monter les escaliers:
 
Ici c'est le programme que je suis en traint de faire pour monter les escaliers:
Ligne 395 : Ligne 408 :
 
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.
 
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.
  
#include <Servo.h>
+
Ici on peut voir le programme que j'ai utilisé pour faire que le robot marche (et l'initialisation des servomoteurs).[[Fichier:Programme_Arduino.zip]]
Servo AD1;
+
 
Servo AD2;
+
 
Servo AD3;
+
 
Servo AG1;
+
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.
Servo AG2;
+
 
Servo AG3;
+
 
 +
'''Méthode pour que le robot marche'''
 +
 
 +
Pour faire que le robot marche je vais faire avancer chaque patte par séparé est après tourner au même temps toutes les servomoteurs qui unissent les pattes avec le structure du robot. Pour que le robot marche plus vite, il peut tourner ces servomoteurs de trois pattes pendant les autres pattes avancent. Le programme pour que le robot marche est ajouté dans le fichier précédent.
  
Servo BD1;
+
==Capteur de proximité==
Servo BD2;
 
Servo BD3;
 
Servo BG1;
 
Servo BG2;
 
Servo BG3;
 
  
Servo CD1;
 
Servo CD2;
 
Servo CD3;
 
Servo CG1;
 
Servo CG2;
 
Servo CG3;
 
  
int i;
+
Pour détecter les escaliers et activer le programme, nous pouvons utiliser un capteur de proximité: Le HC-SR04. Il est spécialement recommandé pour utiliser avec l'Arduino, parce qu'il travaille à 5V et 1.5mA. On peut trouver la datasheet ici: [http://www.micropik.com/PDF/HCSR04.pdf]
  
 +
Pour utiliser le capteur on doit initialiser le Trigger et le Echo au pins correspondants:
  
void setup() {
+
const int Trigger = 46;
 
+
const int Echo = 48;
  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);
+
   Serial.begin(9600);   //on initialise la communication
   BG2.attach(6);
+
   pinMode(Trigger, OUTPUT);  //pin de sortie
   BG3.attach(7);
+
  pinMode(Echo, INPUT);   //pin d'entrée
 +
   digitalWrite(Trigger, LOW);   //On initialise le pin à 0
  
  CD1.attach(22);
+
Le capteur donne un valeur du temps de réponse, donc pour avoir la distance on doit multiplier cette valeur par la vitesse:
  CD2.attach(24);
 
  CD3.attach(26);
 
  
  CG1.attach(28);
+
v = d / t --> d = v * t
  CG2.attach(30);
 
  CG3.attach(32);
 
}
 
  
void loop() {
+
Fialement, on a d = t / 59 pour avoir la distance en cm.
 
 
  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);
+
==Mesure de la puissance Wifi et localisation==
  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);
+
On va utiliser le Wifly shield pour se connecter à une réseau Wifi et pouvoir mesurer sa puissance. On peut trouver la datasheet ici: [[Fichier:Wifly_datasheet.pdf]]
  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);
 
}
 
  
 +
Dans un prémier temps, on doit configurer le Wifly. On va utiliser la librerie Sparkfun d'Arduino pour accéder au Wifly: [[Fichier:SparkFun_WiFly_Shield_Arduino_Library-master.zip]]
  
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.
+
On doit ouvrir l'exemple SpiUart Terminal, et avec le monitor serie d'Arduino on va le configurer. Le shield a deux modes: data mode et command mode. Pour changer à command mode on doit écrire $$$, et on aura la réponse CMD. Maintenant on peut configurer le Wifly. Les commandes qu'on doit écrire sont:
  
 +
*Set wlan join 1 --> se connecter au réseu avec le ssid déterminé
 +
*set wlan chan 0 --> il cherche toutes les canaux
 +
*set wlan ssid AquarisV --> se connecter au Wifi de mon portable
 +
*set wlan phrase _____ --> mot de passe
 +
*set ip address 169.254.1.1 --> direction IP du module
 +
*set ip netmask 255.255.0.0 --> mask du module
 +
*set ip dhcp 0 --> IP statique
 +
*save
 +
*reboot
  
'''Méthode pour que le robot marche'''
+
On peut trouver toutes les commandes du Wifly et ses descriptions ici: [[Fichier:Wifly_configuracion.pdf]]
  
Pour faire que le robot marche je vais faire avancer chaque patte par séparé est après tourner au même temps toutes les servomoteurs qui unissent les pattes avec le structure du robot. Pour que le robot marche plus vite, il peut tourner ces servomoteurs de trois pattes pendant les autres pattes avancent. Le programme pour que le robot marche avec trois servomoteurs est:
 
  
void loop() {
+
Pour obtenir la puissance du wifi, on doit écrire show rssi et il donnera la valeur de la puissance en dB.
 
AD1.write(0);
 
AG1.write(0);
 
BD1.write(0);
 
 
AD2.write(90);
 
delay(200);
 
AD3.write(90);
 
delay(200);
 
  
AG2.write(90);
+
Pour faire la localisation, on doit mesurer dans un prémier temps la puissance du Wifi dans différents lieus, donc si on mesure la puissance après, en comparaison avec les autres valeurs on peut savoir où est-ce que le robot se trouve.
delay(200);
 
AG3.write(90);
 
delay(200);
 
  
BD2.write(90);
 
delay(200);
 
BD3.write(90);
 
delay(700);
 
  
  AD2.write(150);
+
Avec la configuration précédente, on peut obtenir la puissance du wifi, mais l'Arduino doit être connecté à l'ordinateur, puisque cela se fait via le moniteur de la série Arduino. Pour se connecter à l'Arduino sans un fils, on doit ouvrir a socket qui permet d'envoyer et recevoir des donnés via TCP. On écrira:
delay(500);
 
AD1.write(90);
 
delay(500);
 
AD2.write(90);
 
delay(500);
 
  
AG2.write(150);
+
*set ip proto 0x2 --> pour utiliser TCP
delay(500);
+
*set ip host 192.168.43.103 --> On ajoute l’IP donné à l’Arduino
AG1.write(90);
+
*set ip remote 2000 --> on precise le port
delay(500);
+
*open 192.168.43.103 2000 --> ouvrir la connexion
AG2.write(90);
+
Le logiciel répondra OPEN si le socket est bien ouvert.
delay(500);
 
  
BD2.write(150);
+
Maintenant on peut utiliser le logiciel Tera Term pour se connecter à l'Arduino et lui demander la puissance du Wifi. Pour faire la connection telnet on doit écrire la IP de l'Arduino et le port de communication (dans notre cas, le port 2000).
delay(500);
+
Avec la commande show rssi on obtiendra la valeur de la puissance en dB.
BD1.write(90);
 
delay(500);
 
BD2.write(90);
 
delay(500);
 
 
}
 
  
 
=Documents Rendus=
 
=Documents Rendus=
 +
Rapport: [[Fichier: Rapport_ima4.pdf]]

Version actuelle datée du 16 mai 2018 à 11:13


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.

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

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 pattes ont trois parties, jointes par les servos. Avec trois servomoteurs par patte on peut avoir un mouvement complet des pattes.


Choix techniques : matériel et logiciel

Pour ce robot, on a besoin de:

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

- Arduino MEGA

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

- Imprimante 3D

- Une banque de batterie usb de 5 V

- Batteries portables 5 V

- 18 vis et écrous

- Adhésive/Colle forte

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. Les fichiers avec l'estructure et les designs sont jointes précédement.
  2. Utiliser l'imprimante 3D pour obtenir les parties du robot. Il faut faire la formation de l'imprimante 3D au Fabricarium pour l'utiliser.
  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.

Réalisation du Projet

Feuille d'heures

Tâche Prélude Novembre Décembre Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10
Analyse du projet 3
Recherches 6 4 2 2 2 1 3 4
Construction 3 4 5 4 4 3 3 1 3 1
Imprimante 3D 4 9 10 6 4 2
Wiki 5 5 1 1 4 1 1 1 2 3
Test 4 4 1 3 1 2 2 3 2 3
Wifly 15

Prologue

L'objectif de ce projet est de construire un robot hexapode capable de déplacer et de monter des escaliers. Pour cela, le robot aura besoin d'une grande mobilité dans ses pattes, pour laquelle nous utiliserons trois servomoteurs par patte. Cela fait un total de 18 servomoteurs, qui devraient être dirigés par un Arduino.

Il sera nécessaire d'obtenir une conception du robot (corps et pattes) en 3D pour pouvoir l'imprimer sur l'imprimante 3D.

Pour les servomoteurs, il faudra effectuer une étude sur la force qu'ils doivent exercer en fonction du poids éventuel du robot pour pouvoir les sélectionner.

Le programme sera réalisé en Arduino, en connectant les servomoteurs aux sorties digitales et PWM de l'Arduino.

Analyse du servomoteurs

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

1. 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.

3. 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.

4. Le GPS pèse 8.5 grammes.

2. 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.3kg: M = 8 g ; V = 4.8 - 7.2 V ; F = 1.3 kg/cm ; v = 0.12 s/60º
  • 1.5kg: M = 9 g ; V = 4.8 - 7.2 V ; F = 1.5 kg/cm ; v = 0.10 s/60º
  • 1.8kg: M = 10 g ; V = 4.8 - 7.2 V ; F = 1.8 kg/cm ; v = 0.12 s/60º
  • 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.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


   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


  • Pour le servo de 2.5 kg, l'intensité total doit être 7.2 A (si I = 0.4 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 trois servomoteurs, on a 4 batteries, qui pèsent 384 grammes.
  • Pour le servo de 1.5 kg, l'intensité total doit être 4.5 A (si I = 0.25 A). Si on utilise batteries AA, on peux utiliser une batterie de 6 V pour six servomoteurs, donc on aura 3 batteries, qui pèsent 288 grammes.
  • Le support de batterie pèse 16 grammes. Si on utilise 4 supports ça fait 64 grammes. Avec 3 supports c'est 48 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).

5. 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 + 288 + 48 + [100, 250] = 736.5 +- 75 grammes


  • Deuxième supposition

Servo-moteur de 2.5 kg --> Mtotal= 55 + 234 + 8.5 + 384 + 64 + [100, 250] = 920.5 +- 75 grammes


Le robot sera supporté par au moins deux servomoteurs. Si le robot pèse moins de 1 kg, comme nous l'avons calculé, nous pouvons utiliser l'un des deux servomoteurs pour le robot. Finalement, on va utiliser des servomoteurs sg90, qui sont les servomoteurs disponibles.

On peut trouver la datasheet du servomoteurs ici: Fichier:Sg90 datasheet.pdf

Construction

Construction d'une patte

Pour la construction du robot je vais utiliser 18 servomoteurs SG90, 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.

Les designs sont obtenus de la page thingiverse, mais j'ai fait des changes dans eux. Le design original utilise des roulements, mais pour simplifier la construction j'ai réduit le trou et faire passer un vis au lieu d'un roulement. Le vis supporte le poids du robot avec le colle du servomoteur. Sinon, la colle peut n'être pas suffisant et il peut se casser.

Il y a aussi un trou dans la partie du moyen de la patte pour faire passer les fils du servomoteur. J'ai agrandi cette partie parce que l'imprimante 3D remplit le trou quand elle imprime l'élément, et si le trou est très petit on peut pas éliminer le matériau excédentaire.

Unepatte.jpg

Ci-dessus, on peut voir une patte et les composants séparés.

J'ai amelioré aussi le design d'une patte dans le projet Mécanique. On a la description du projet dans la page du fabricarium: [3]

Construction du robot

La première partie consiste à construire les pattes. J'ai actuellement 12 servomoteurs disponibles, donc j'ai construit 4 pattes. Chaque patte est montée de la même manière que la première(cf section précédente). C'est un long processus car il est nécessaire d'attendre à chaque un long moment afin que la colle sèche. De plus, la fixation n'est pas tout le temps bien faite donc je dois m'y reprendre à plusieurs fois pour y arriver.

Lorsque les pattes sont prêtes, elles doivent être jointes au corps. Pour cela, j'ai utilisé la même colle, mais les nouveaux servomoteurs n'ont pas assez de surface pour coller, donc j'ai besoin d'une colle plus forte. J'ai essayé autre fois avec la même colle et j'ai essayé aussi avec de la résine rapide, la colle de bois et la colle forte. La résine rapide et la colle de bois n'ont pas marché: quand il est séché, si j’essaie de tester les pattes ils se séparent du robot. ça a fait beaucoup de temps en train coller le robot pour atteindre à que la colle sèche.

Finalement, j'ai utilisé de la colle forte. On doit attendre 100 heures pour que la colle sèche, mais je n'a pas trouvé autre colle ou adhésive qui marche.

J'ai trouvé un problème de construction pendant les tests du robot. Comme la taille des servomoteurs est différente au espace destiné à eux, ils se mouvent dans la patte, donc si l'effort est très grand ils peuvent se détacher. Pour que les servomoteurs restent fixes, j'ai utilisé des vis M2 à chaque coté du servomoteur. J'ai utilisé 16 vis dans 4 pattes, et il reste faire autres deux pattes de la même manière.

Vis.jpg

Les servomoteurs sont réutilisés (ils étaient utilisés l'année dernier pour autre robot). Je n'ai pas les vis des servomoteurs et il n'y a pas des éléments détachés. Le vis des servomoteurs n'est pas normalisé, donc je ne peux pas chercher autre vis dans le Fabricarium. C'est pour ça que je dois coller les servomoteurs dans la partie qui tourne. Je vais utiliser la même colle fort d'avant, parce qu'ils devraient supporter beaucoup de force là bas. Il faudra atteindre 100 heures aussi pour qu'ils sèchent.

Corprob.jpg Ici on peux voir la partie centrale du robot. Je vais imprimer autre semblable pour que la patte reste bien fixé. Les deux parties seront unies par une petite élément fixé avec des vis.

Comme nous n'avions pas les vis des servomoteurs nous les avons collés avec de la colle forte aussi. Il faut faire attention car la surface est très petite et peut coller au servomoteur, ce qui ne transmettrait pas bien le mouvement. On a ajouté des vis par l'autre lieu pour que la colle ne se casse pas.

Ci-dessus on peut voir des images sur le robot terminé:

Hexa.jpgTerminado.jpg

Test d'un patte

Robot de test

J'ai effectué le test d'une patte 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


Robot construit

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:

Schemaconnexion1.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 servomoteur, avec 2 servomoteurs et avec les 3 servomoteurs, 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 plusieurs 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 servomoteur) n'est pas plus grand que 1 A, donc avec cette batterie on peut alimenter au moins deux pattes (6 servomoteurs).

Pour mesurer l'intensité et la tension j'ai utilisé une programme d'Arduino qui fait que les servomoteurs 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 voir les pics d'intensité on va utiliser un résistance en série avec le servomoteur. Comme normalement le servomoteur consomme 200 mA. on va supposer que dans la résistance aura 100 mV plus ou moins (parce que toute la tension sera dans le servomoteur) donc on a besoin d'une résistance de 0.5 Ohms (V=RI Loi de Ohm).

Comme on n'a pas des résistances de 0.5 Ohm, on utilisera deux résistances de 1 Ohm en parallèle pour donner une résistance de 0.5. A l'aide d'une oscillateur, en mesurant la tension on peut obtenir l'intensité (multiplier par 2) et on trouve que les pics sont de 400 mA plus ou moins, pas de 1 A comme on a vu précédemment, parce que les autres mesures de l'intensité étaient fait directement sur le servomoteur et sans oscillateur, et ça ne donne pas une mesure précise des pics de l'intensité.

  • J'ai testé deux pattes en obtenant des résultats très pareils à les mesures d'une patte (une consommation moyenne de 200 mA quand ils tournent et des pics de 400 mA avec de la charge). Il faut dire que si les servomoteurs sont connectés seulement à la batterie, a partir de 3 servomoteurs ils ne marchent pas bien, mais si on connecte les servomoteurs à la batterie et à la sortie 5 V de l'Arduino on peut connecter au minimum 12 servomoteurs (4 pattes) et toutes marchent bien.
  • Pour utiliser toutes les pattes avec le même programme j'ai besoin d'une batterie plus grand (pour la consommation d'intensité des servomoteurs). J'ai cherché et il est conseillé d'utiliser des batteries LIPO qui ont un taux de décharge plus grand.

Programme Arduino

Pour programmer le robot on va utiliser Servo.h, où on peut trouver les commandes .attach(), pour définir le pin de chaque servomoteur, et .write(), pour écrite la position en grades du servomoteur.

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.

Ici on peut voir le programme que j'ai utilisé pour faire que le robot marche (et l'initialisation des servomoteurs).Fichier:Programme Arduino.zip


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.


Méthode pour que le robot marche

Pour faire que le robot marche je vais faire avancer chaque patte par séparé est après tourner au même temps toutes les servomoteurs qui unissent les pattes avec le structure du robot. Pour que le robot marche plus vite, il peut tourner ces servomoteurs de trois pattes pendant les autres pattes avancent. Le programme pour que le robot marche est ajouté dans le fichier précédent.

Capteur de proximité

Pour détecter les escaliers et activer le programme, nous pouvons utiliser un capteur de proximité: Le HC-SR04. Il est spécialement recommandé pour utiliser avec l'Arduino, parce qu'il travaille à 5V et 1.5mA. On peut trouver la datasheet ici: [4]

Pour utiliser le capteur on doit initialiser le Trigger et le Echo au pins correspondants:

const int Trigger = 46; const int Echo = 48;


 Serial.begin(9600);    //on initialise la communication
 pinMode(Trigger, OUTPUT);   //pin de sortie
 pinMode(Echo, INPUT);    //pin d'entrée
 digitalWrite(Trigger, LOW);    //On initialise le pin à 0

Le capteur donne un valeur du temps de réponse, donc pour avoir la distance on doit multiplier cette valeur par la vitesse:

v = d / t --> d = v * t

Fialement, on a d = t / 59 pour avoir la distance en cm.


Mesure de la puissance Wifi et localisation

On va utiliser le Wifly shield pour se connecter à une réseau Wifi et pouvoir mesurer sa puissance. On peut trouver la datasheet ici: Fichier:Wifly datasheet.pdf

Dans un prémier temps, on doit configurer le Wifly. On va utiliser la librerie Sparkfun d'Arduino pour accéder au Wifly: Fichier:SparkFun WiFly Shield Arduino Library-master.zip

On doit ouvrir l'exemple SpiUart Terminal, et avec le monitor serie d'Arduino on va le configurer. Le shield a deux modes: data mode et command mode. Pour changer à command mode on doit écrire $$$, et on aura la réponse CMD. Maintenant on peut configurer le Wifly. Les commandes qu'on doit écrire sont:

  • Set wlan join 1 --> se connecter au réseu avec le ssid déterminé
  • set wlan chan 0 --> il cherche toutes les canaux
  • set wlan ssid AquarisV --> se connecter au Wifi de mon portable
  • set wlan phrase _____ --> mot de passe
  • set ip address 169.254.1.1 --> direction IP du module
  • set ip netmask 255.255.0.0 --> mask du module
  • set ip dhcp 0 --> IP statique
  • save
  • reboot

On peut trouver toutes les commandes du Wifly et ses descriptions ici: Fichier:Wifly configuracion.pdf


Pour obtenir la puissance du wifi, on doit écrire show rssi et il donnera la valeur de la puissance en dB.

Pour faire la localisation, on doit mesurer dans un prémier temps la puissance du Wifi dans différents lieus, donc si on mesure la puissance après, en comparaison avec les autres valeurs on peut savoir où est-ce que le robot se trouve.


Avec la configuration précédente, on peut obtenir la puissance du wifi, mais l'Arduino doit être connecté à l'ordinateur, puisque cela se fait via le moniteur de la série Arduino. Pour se connecter à l'Arduino sans un fils, on doit ouvrir a socket qui permet d'envoyer et recevoir des donnés via TCP. On écrira:

  • set ip proto 0x2 --> pour utiliser TCP
  • set ip host 192.168.43.103 --> On ajoute l’IP donné à l’Arduino
  • set ip remote 2000 --> on precise le port
  • open 192.168.43.103 2000 --> ouvrir la connexion

Le logiciel répondra OPEN si le socket est bien ouvert.

Maintenant on peut utiliser le logiciel Tera Term pour se connecter à l'Arduino et lui demander la puissance du Wifi. Pour faire la connection telnet on doit écrire la IP de l'Arduino et le port de communication (dans notre cas, le port 2000). Avec la commande show rssi on obtiendra la valeur de la puissance en dB.

Documents Rendus

Rapport: Fichier:Rapport ima4.pdf