RAPPORT DE STAGE
*IUT DE CACHANT
Universit PARIS SUD
De 2 juin 15 juillet
GEORGES DAHER
Mon stage portera sur le d veloppement dune partie robotique
MECATRONIQUE au sein du **CRIIP (Centre de ressources et
dinnovation p dagogiques de lIUT).
Mon stage est divis en deux parties:
1. Language V+ (simulation sur robot baby foot) .
2. robot autonome et capable daller dun point A a un point B tout
en vitant des obstacles, pr sent sur la piste des emplacements
al atoires. (Arduino)
Georges DAHER
Bs G nie M catronique
Georges daher
1
REMERCIMENTS
Je tiens remercier dans un premier temps, Pr. Souhil
MEGHERBI, Directeur de lIUT de Cachan, Universit Paris sud,
France de mavoir accept s en tant que stagiaires au sein de
l'universit .
Je remercie galement madame Pascal VAREIL pour son accueil
chaleureux.
Je remercie galement Mr. Bertrand MANUEL, Mr. DEXTER,
pour leurs soutiens techniques.
D'une fa on plus g n rale, je remercie l'universit , pour
lint r t quils mon port tout au long du stage ainsi que pour
leur aide et pr cisions.
Je remercie de m me, mon doyen de facult Dr. Elias KHALIL
pour son encadrement pendant celui-ci.
Georges daher
2
*IUT DE CACHAN
Cr en 1966 la suite du D cret du 7 janvier 1966 instaurant les Instituts Universitaires de
Technologie, lIUT de Cachan a toujours conserv une caract ristique essentielle : il propose des
sp cialit s industrielles articul es autour du G nie Electrique et Informatique Industrielle et du G nie
M canique et Productique.
En restant fid le ce choix, lIUT de Cachan a su sadapter l volution de la technologie et aux
demandes des entreprises. La liste des sp cialit s actuelles lIUT le montre :
lectronique, lectrotechnique, t l communications, informatique industrielle,
m catronique, automatique et automatismes, robotique, m canique, productique, CAO,
CFAO et DAO.
LIUT a aussi su adapter ses cursus et ses m thodes p dagogiques la demande des publics
concern s. Il propose maintenant des parcours de formation temps plein, avec un stage final (statut
tudiant) ou par apprentissage (statut apprenti), de formation ouverte distance, de formation
continue tout au long de la vie avec validation des acquis de lexp rience et alternance adapt e la
situation des stagiaires.
Les dipl mes pr par s lIUT sinscrivent dans le sch ma europ en Licence Master Doctorat (LMD)
des Universit s, soit au niveau L : DUT (bac +2) et Licence Professionnelle (bac +3), soit au niveau
M : Dipl me ding nieur en partenariat pr par par lapprentissage dans le cadre de lIFIPS (fili re
ing nieur de lUPS).
Pour r pondre aux missions qui lui sont assign es, lIUT est structur en 3 d partements
denseignement disposant d quipes ducatives pluridisciplinaires :
G nie Electrique & Informatique Industrielle 1
G nie Electrique & Informatique Industrielle 2
G nie M canique et Productique
Ces D partements sont appuy s par un ensemble de services communs. Au total cest plus de 160
personnels titulaires de lEducation Nationale plein temps qui sont au service de la r ussite des
quelques 1100 tudiants et stagiaires qui fr quentent, chaque ann e, lIUT de Cachan.
Georges daher
3
POUR PLUS DINFORMATIONS
01.41.24.11.00
IUT de Cachan
9 avenue de la division Leclerc
94230 Cachan
-------------------------------------------------------------------------------------------------------------------------------
** CRIIP
Le CRIIP est un Centre de Recherche et dIng nierie Industrielle ou
P dagogique. Il a le statut dun centre de ressources, a t cr en
novembre 2000, regroupe et valide les multiples actions de recherche et de
collaborations industrielles ou p dagogiques men es par les trois
d partements de lIUT de Cachan : GEII1, GEII2 et GMP.
Le CRIIP travaille sur des projets en collaborations avec des partenaires
industriels. Ces derniers permettent aux tudiants de lIUT de simpliquer
directement, dans le cadre de projets tuteur s et des travaux de r alisation,
au d veloppement et la r alisation de projets industriels et technologiques.
Le CRIIP fournit ainsi la logistique n cessaire chaque projet.
Les trois d partements GE1, GE2 et GMP se r partissent quatre activit s :
La recherche fondamentale et appliqu e,
La recherche p dagogique,
Le transfert de technologie,
La coop ration p dagogique internationale.
Georges daher
4
Sommaire
REMERCIEMENTS
LIUT DE CACHAN ET LE CRIIP
SOMMAIRE
INTRODUCTION
PRESENTATION DES PROJECTS
B. deuxi me partie du stage du stage : Robot autonome A => B
1. pr sentation de la carte arduino
2. cahier des charges
3. les composants lectriques et m caniques du robot
4. les programmes et les tests r alis s
5. conclusion
CONCLUSION GENERALE
Fin
Georges daher
5
B. ROBOT AUTONOME
Georges daher
6
Arduino introduction
Le robot autonome est muni dune carte arduino (son cerveau).
Cest quoi arduino :
En quelques mots :
Arduino = 1 carte a microcontr leur + 1 outil de d veloppement + 1
Communaut active.
Le logiciel et le mat riel sont open-source.
La philosophie
L'id e est d'utiliser la carte Arduino comme un macro-composant dans des applications
de
Prototypage lectronique. Le concepteur n'a plus qu' d velopper des interfaces et
Programmer le macro-composant pour r aliser son application !
Georges daher
7
Les avantages
" Pas cher !
" Environnement de programmation clair et simple.
" Multiplateforme : tourne sous Windows, Macintosh et Linux.
" Nombreuses librairies disponibles avec diverses fonctions
impl ment es.
" Logiciel et mat riel open source et extensible.
" Nombreux conseils, tutoriaux et exemples en ligne (forums, site perso
etc...)
Publicité
" Existence de shield (boucliers en fran ais) : ce sont des cartes
suppl mentaires
qui se connectent sur le module Arduino pour augmenter les possibilit s
comme par
exemple : afficheur graphique couleur, interface Ethernet, GPS, etc...
Georges daher
8
Par sa simplicit d'utilisation, Arduino est utilis dans beaucoup
d'applications comme
l' lectronique industrielle et embarqu e, le mod lisme, la domotique mais
aussi dans des
domaines diff rents comme l'art contemporain ou le spectacle !
La carte Arduino uno
Il existe plusieurs types de cartes, j'ai commenc avec une carte Arduino
uno (carte
basique, au dimensions voisines de celle d'une carte bancaire).
Georges daher
9
Caract ristiques de la carte Arduino uno :
Micro contr leur : ATmega328
Tension d'alimentation interne = 5V
tension d'alimentation (recommand e)= 7 12V, limites =6 20 V
Entr es/sorties num riques : 14 dont 6 sorties PWM
Entr es analogiques = 6
Courant max par broches E/S = 40 mA
Courant max sur sortie 3,3V = 50mA
M moire Flash 32 KB dont 0.5 KB utilis e par le bootloader
M moire SRAM 2 KB
m moire EEPROM 1 KB
Fr quence horloge = 16 MHz
Dimensions = 68.6mm x 53.3mm
La carte s'interface au PC par l'interm diaire de sa prise USB.
La carte s'alimente par le jack d'alimentation (utilisation autonome) mais
peut tre
aliment e par l'USB (en phase de d veloppement par exemple).
Louis
Georges daher
10
Les shields
Il existe de nombreux shields que l'on traduit parfois dans les documentations par
boucliers . Personnellement, le terme extension me paraitrait plus appropri . Un
shield Arduino est une petite carte qui se connecte sur une carte Arduino pour
augmenter ses fonctionnalit s. Quelques exemples de shields :
" Afficheur graphique
" Ethernet et carte SD
" GPS
" Carte de prototypage (type labdec)
" etc...
Louis
Georges daher
11
D veloppement d'un projet
Le d veloppement sur Arduino est tr s simple :
" on code l'application : Le langage Arduino est bas sur les langages
C/C++ , avec des
fonctions et des librairies sp cifiques Arduino (gestions des e/s).
" on relie la carte Arduino au PC et on transfert le programme sur la carte,
" on peut utiliser le circuit !
Le logiciel de programmation des modules Arduino est une application
Java multiplateformes
(fonctionnant sur tout syst me d'exploitation), servant d' diteur de code et
de
compilateur, et qui peut transf rer le firmware (et le programme) au travers
de la liaison
s rie (RS232, Bluetooth ou USB selon le module).
Le logiciel est tr s simple prendre en main, il existe de tr s bon tutoriaux
tr s bien faits
avec m me des explications en fran ais. De tr s nombreux exemples sont
fournis.
Les fichiers exemples sont vraiment bien document s et permettent de
coder des choses
tr s compliqu es sans trop d'efforts. Les biblioth ques fournies permettent
d'utiliser des
composants complexes tr s simplement en quelques lignes tr s claires
(afficheur ou
liaison SPI etc..).
d tail de la barre de boutons
Georges daher
12
Liens
Le site Arduino : http://www.arduino.cc
Traduit en fran ais (partiellement) : http://www.arduino.cc/fr
Georges daher
13
2) CAHIER DES CHARGES
Les r gles du concours stipulent que le robot doit parcourir la diagonale dune
piste carr e de 8m par 8m, le robot se dirige vers son point darriv e { laide
dune boussole situ e sur celui-ci.
La piste sera galement parsem e dobstacle, le robot devra donc les viter
puis rejoindre son point darriv e.
Georges daher
14
3) LES COMPOSANTS DU ROBOT
Georges daher
15
Le hacheur (dual h- bridge)
Georges daher
16
La boussole (CMPS10)
Pr sentation
Le module CMPS10 est une boussole d'inclinaison compens e. Employant
un magn tom tre 3 axes et un acc l rom tre 3 axes et un puissant
processeur 16-bit, le CMPS10 a t con u pour liminer les erreurs
caus es par l'inclinaison de la carte. Le CMPS10 produit un r sultat de 0-
3599 repr sentant 0 359,9 ou de 0 255. La sortie des trois capteurs de
mesure de composants z du champ magn tique X, Y et, en m me temps
que le tangage et le roulis sont utilis s pour calculer le palier, chacun de
ces composants sont galement disponibles dans la forme brute. Le
module CMPS10 n cessite une alimentation 3,3 - 5 V et dessine une
25mA nominale de courant. Il y a trois fa ons d'obtenir le roulement du
module. Une interface s rie, une interface I2C ou une sortie PWM.
Linterface I2C est linterface quon doit utiliser pour la relier la carte
arduino.
Georges daher
17
4) LES PROGRAMMES EL LES TESTS REALISES
4.1) TEST CAPTEUR DE POSITION
Le capteur de position est un capteur infra rouge qui d tecte
lexistence et la distance dun objet.
Le test r alise si dessous consiste allume une LED si la
distance de lObject par rapport au capteur est moins que 20cm
Georges daher
18
Georges daher
19
4.2) TEST MOTEURS
Pour pouvoir faire fonctionner les 2 moteurs (changeant leurs
directions et leurs vitesses) on a besoin dun hacheur 4
quadrants.
Publicité
Georges daher
20
Georges daher
21
4.3) TEST DE LA BOUSSOLE
Georges daher
22
PROGRAMME
#include <Wire.h> // Use I2C library
#define ADDRESS 0x60 // Address of CMPS10
void setup(){
Serial.begin(9600);
Wire.begin(); // Connect to I2C
}
void loop(){
byte byteHigh, byteLow, fine; // byteHigh/byteLow store high and low bytes of
the bearing
// fine stores decimal place of bearing
char pitch, roll; // Stores pitch and roll (signed values)
int bearing; // Full bearing
Wire.beginTransmission(ADDRESS); // begin communication with CMPS10
Wire.write(2); // Start read
Wire.endTransmission();
Wire.requestFrom(ADDRESS, 4); // Request 4 bytes from CMPS10
while(Wire.available() < 4); // Wait for the bytes to arrive
byteHigh = Wire.read(); // Store values
byteLow = Wire.read();
pitch = Wire.read();
roll = Wire.read();
bearing = ((byteHigh<<8) + byteLow) / 10; // Calculate full bearing
fine = ((byteHigh<<8) + byteLow) % 10; // Calculate bearing decimal
print_data(bearing, fine, pitch, roll); // Print data
delay(500);
}
Georges daher
23
void print_data(int bearing, int fine, int pitch, int roll) {
// Print data to Serial Monitor window
Serial.print("Bearing=");
Serial.print(bearing, DEC);
Serial.print(".");
Serial.print(fine, DEC);
Serial.print("\t");
Serial.print("Pitch=");
Serial.print(pitch, DEC);
Serial.print("\t");
Serial.print("Roll=");
Serial.print(roll, DEC);
Serial.println("");
}
Georges daher
24
4.4) TEST CARRE
Dans ce test le robot doit faire un carre gr ce la boussole !!!!
Le robot chaque 2 seconde doit ajouter 90 degr s sa direction
d sir , direction initiale = direction de la boussole .
Georges daher
25
Les connections :
Georges daher
26
CODE PROGRAMME
#include <Wire.h> // Use I2C library
#define ADDRESS 0x60 // Address of CMPS10
int E1=6;
int M1=7;
int E2=5;
int M2=4;
float speedLeft=(245/2); // <<245 pas 255 car il y a une diff entre
float speedRight=(255/2); // les deux moteurs >>
int x = LOW;
int direc;
unsigned long timerA; //on initialize le timer
void setup(){
Serial.begin(9600); //serial to simulate on the screen
Wire.begin(); // Connect to I2C
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
}
void loop(){
digitalWrite(M1, HIGH);
digitalWrite(M2, HIGH);
analogWrite(E1, speedRight);
analogWrite(E2, speedLeft);
Georges daher
27
if(x==HIGH)
{if(millis()-timerA >= 2000) // chaque 2 s ajoute 90 degr s
{ direc=direc+90;
if(direc > 360)
{ direc= direc-360;}
timerA=millis(); //bi ballish el timer min jdid
} //reset the timer
}
else
{ timerA=millis(); //set the timer
}
byte byteHigh, byteLow, fine; // byteHigh/byteLow store high and low
//bytes of the bearing
// fine stores decimal place of bearing
char pitch, roll; // Stores pitch and roll (signed values)
int bearing; // Full bearing
Wire.beginTransmission(ADDRESS); // begin communication with
CMPS09
Wire.write(2); // Start read
Wire.endTransmission();
Wire.requestFrom(ADDRESS, 4); // Request 4 bytes from CMPS10
while(Wire.available() < 4); // Wait for the bytes to arrive
byteHigh = Wire.read(); // Store values
byteLow = Wire.read();
pitch = Wire.read(); //pas n cessaire dans ce programme
roll = Wire.read(); //pas n cessaire dans ce programme
Georges daher
28
bearing = ((byteHigh<<8) + byteLow) / 10; // Calculate full bearing
fine = ((byteHigh<<8) + byteLow) % 10; // Calculate bearing decimal
print_data(bearing, fine, pitch, roll); // Print data
if(x== LOW)
{ //delay(500);
direc = bearing;
x = HIGH;
}
int diff = bearing - direc;
// modify degress
if(diff > 180)
diff = -360+diff;
else if(diff < -180)
diff = 360+diff;
// Make the robot turn to its proper orientation
Publicité
// diff = map(diff, --,-- ,--,--);
if(diff > 0) {
// keep the right wheel spinning,
// change the speed of the left wheel
speedLeft = ((245-diff)/2);
speedRight = (255/2);
} else {
// keep the right left spinning,
// change the speed of the left wheel
speedLeft = (245/2);
Georges daher
29
speedRight = ((255+diff)/2);
}
}
void print_data(int bearing, int fine, int pitch, int roll) {
// Print data to Serial Monitor window pour la simulation
Serial.print("Bearing="); //print the bearing
Serial.print(bearing, DEC);
Serial.print(".");
Serial.print(fine, DEC);
Serial.print("\t");
Serial.print("Pitch=");
Serial.print(pitch, DEC);
Serial.print("\t");
Serial.print("Roll=");
Serial.print(roll, DEC);
Serial.println("");
Serial.print("\t");
Serial.print("direc="); //print direction
Serial.print(direc, DEC);
Serial.println("");
Serial.print("\t");
Serial.print("speedLeft="); //print the value of the speed (left)
Serial.print(speedLeft, DEC);
Serial.println("");
Serial.print("\t");
Serial.print("speedRight="); //print the value of the speed (right)
Serial.print(speedRight, DEC);
Serial.println("");
}
Georges daher
30
Probl mes et solutions :
_ Les 2 DC moteurs ne sont pas fiable 100 % et il Ya
un d calage entre eux, pour cela cest mieux
dutilise un servomoteur (car cest plus pr cis quun
moteur DC, moins lourd, et plus facile mettre en
Suvre.
D finition : un servomoteur est un moteur con u pour produire des
mouvements pr cis dun l ment m canique selon une commande
externe.
En dautres termes, cest un moteur qui va une position pr cise en
fonction du signal dentr .
_la boussole est tr s sensible.
Si la boussole est en position 1 :
La boussole devient proche des
Moteurs ce qui cr e un champ
magn tique, la boussole est alors
influencer par ce champ, ce qui
trouble le robot.
Pour cela lune des solutions qui
r duit cette influence est de
mettre la boussole sur un barre
Loin des moteurs (position2), pour avoir une
Pr cision plus exacte.
Georges daher
31
LE TEST FINALE
Il faut maintenant rejoindre les programmes (test), pour avoir
Le programme final.
N.B : je nai pas utilis un capteur (noir et blanc)
Car je nai pas eu le temps de cr er la piste.
Georges daher
32
LE PROGRAMME
//georges daher
//les valeurs des moteurs ne sont pas exacte
#include <Wire.h> // Use I2C library
#define ADDRESS 0x60 // Address of CMPS10
int E1=6;
int M1=7;
int E2=5;
int M2=4;
int sens1=0;
int sens2=1;
int sens3=2;
float speedLeft=(245);
float speedRight=(255);
int x = LOW;
int direc;
unsigned long timerA;
void setup(){
Serial.begin(9600);
Wire.begin(); // Connect to I2C
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
}
void loop()
{
digitalWrite(M1, HIGH);
digitalWrite(M2, HIGH);
analogWrite(E1, speedRight);
analogWrite(E2, speedLeft);
int s1=analogRead(sens1);
int s2=analogRead(sens2);
int s3=analogRead(sens3);
Georges daher
33
byte byteHigh, byteLow, fine; // byteHigh/byteLow store high and low bytes of
//the bearing
// fine stores decimal place of bearing
char pitch, roll; // Stores pitch and roll (signed values)
int bearing; // Full bearing
Wire.beginTransmission(ADDRESS); // begin communication with CMPS09
Wire.write(2); // Start read
Wire.endTransmission();
Wire.requestFrom(ADDRESS, 4); // Request 4 bytes from CMPS10
while(Wire.available() < 4); // Wait for the bytes to arrive
byteHigh = Wire.read(); // Store values
byteLow = Wire.read();
pitch = Wire.read();
roll = Wire.read();
bearing = ((byteHigh<<8) + byteLow) / 10; // Calculate full bearing
fine = ((byteHigh<<8) + byteLow) % 10; // Calculate bearing decimal
print_data(bearing, fine, pitch, roll); // Print data
if(x== LOW)
{//delay(500);
direc = bearing;
Publicité
x = HIGH;
}
int diff = bearing - direc;
// modify degress
if(diff > 180)
diff = -360+diff;
else if(diff < -180)
diff = 360+diff;
if(diff > 0) {
// keep the right wheel spinning,
// change the speed of the left wheel
Georges daher
34
speedLeft = (245-diff);
speedRight = (255);
}
Else
{
// keep the right left spinning,
// change the speed of the left wheel
speedLeft = (245);
speedRight = (255+diff);
}
if( s1>100 && s2>s3)
{
//analogWrite(E1, 255);
// analogWrite(E2, 0);
speedLeft=0; //les valeurs ne sont pas exacte
speedRight=255; //les valeurs se change dun
delay(300); //les valeurs se change dun
//moteurs DC
//if faut faire beaucoup des exp riences
//pour pouvoir a la fin adapter les
//meilleurs valeurs
}
else if ( s1>100 && s2<s3)
{
// analogWrite(E1, 0);
// analogWrite(E2, 255);
speedLeft=255;
speedRight=0;
Georges daher
35
delay(300);
}
else if(s1<100 && s2>150)
{ // analogWrite(E1, 255);
// analogWrite(E2, 0);
speedLeft=0;
speedRight=255;
delay(200);
}
else if(s1<100 && s3>150)
{// analogWrite(E1, 0);
//analogWrite(E2, 255);
speedLeft=255;
speedRight=0;
delay(200);
}
}
void print_data(int bearing, int fine, int pitch, int roll) {
// Print data to Serial Monitor window
Serial.print("Bearing=");
Serial.print(bearing, DEC);
Serial.print(".");
Serial.print(fine, DEC);
Serial.print("\t");
Serial.print("Pitch=");
Serial.print(pitch, DEC);
Georges daher
36
Serial.print("\t");
Serial.print("Roll=");
Serial.print(roll, DEC);
Serial.println("");
Serial.print("\t");
Serial.print("direc=");
Serial.print(direc, DEC);
Serial.println("");
Serial.print("\t");
Serial.print("speedLeft=");
Serial.print(speedLeft, DEC);
Serial.println("");
Serial.print("\t");
Serial.print("speedRight=");
Serial.print(speedRight, DEC);
Serial.println("");
}
Georges daher
37
Conclusion : du robot autonome
Le robot autonome ma permis de bien comprendre ce qui se passe et
comment g rer les probl mes.
Mais lune des propositions est dutiliser des servomoteurs (plus exacte
et pr cis) Pour ne pas perdre le temps faire des essais (sur un dc
moteur et sans encoder)
NB : la simulation sur serial est exacte. Mais en r el plusieurs
probl mes se pose (il faut faire beaucoup des essais pour arriver une
solution). Mais pour ne pas perdre le temps cest mieux dutiliser des
servomoteurs au lieu des DC moteurs, m me si les servomoteurs sont
un peu moins rapides mais plus exacte. En tout cas cest tr s difficile de
faire rouler le robot en grande vitesse car la boussole va tre perturb
et ensuite le robot.
Georges daher
38
Conclusion
Pour conclure, du point de vue professionnel ce stage
ma apport de lexp rience vis- -vis des al as que je
peux rencontrer, de ladaptation de nouveaux
mat riels.
Du point de vue plus personnel, le fait davoir voyag ma
apport e beaucoup que ce soit par la d couverte dune
culture, mais aussi par le mode de vie des fran ais qui
diff rent que celui dun libanais. Cette exp rience je la
consid re comme tr s positive, elle ma appris
d brouiller dans la vie professionnelle et m me
personnelle, dans la vie dun homme responsable, jai
appris beaucoup de chose travers les gens et nos
responsables ici, et am liorer beaucoup dautre comme
les m thodes de communication et g r le temps.
Pour terminer ce stage a t tr s b n fique du point de
vue personnel et restera une bonne exp rience et
professionnel.
Georges daher
39