Rapport de Stage

Mécatronique, Robotique, Arduino · notes

Voir tous les documents en électronique et automatique

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

[email protected]

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