Вы находитесь на странице: 1из 58

Projet Robot 2010/2011

Souterelle Baptiste Lefebvre Maxime Cherif Sonia Besancon Mathieu Chapoutier Bndicte Carpentier Kevin Debruyne Adrien Houvenagel Kevin Fouilloy Adrien Soukret Amine Hiba Ala-Eddine

Souterelle Baptiste Lefebvre Maxime

PE2

DETECTION DOBSTACLE

Mr GLAY

SOMMAIRE

Introduction........................Page 3

Capteurs, Servomoteur............Page 4

Programmes et Tests..............Page 7

Conclusion...........................Page 14

Introduction

Sur le parcours, il nous faudra viter des obstacles fixes et mobiles comme les robots adverses ainsi que les ventuels murs en cas de problme. Le robot doit aussi tre capable de nous communiquer la distance qui le spare de ces obstacles.

Le semestre prcdent nous a permis de nous documenter sur le matriel et sur comment raliser notre projet. Aprs avoir choisi la disposition de nos capteurs, il a fallu nous informer sur la manire de programmer les capteurs pour rcuprer linformation de la distance, et comment programmer le servomoteur pour quil scrute une vitesse et un angle convenable.

Capteurs, Servomoteur

AVANT

Robot ROBOT

ARRIERE

Servomoteur

CAPTEURS US

1) Capteurs :

Le SRF08 est un module miniature de dtection ultrasons. Sa porte atteint 6 m. Caractristiques: Alimentation: 5 Vcc. Consommation: 15 mA nominal (3 mA en standby) Frquence: 40 kHz Porte de mesure: de 3 cm 6 m (rglable) Unit de mesure: mm, pouces ou s Gain variable entre 40 et 700 (en 16 tapes) Brochage identique au SRF08 Dimensions: 32 x 15 x 10 mm

Le but, la fin du semestre prcdent tait de dterminer la disposition de ces capteurs. Nous avions pens mettre un seul capteur au milieu du robot positionn sur un servomoteur. Il aurait donc fallu mettre les cartes au-dessus du capteur, surleves par des petites tiges. Nous devions donc dterminer si le capteur dtectait les tiges et aprs ralisation du programme, nous avons remarqu que les tiges taient bien dtectes.

Nous nous sommes donc penchs sur une autre alternative qui est de prendre 2 capteurs : Le 1er lavant toujours sur un servomoteur qui scrutera une centaine de degrs. Le capteur ayant un angle de 72 lui-mme, cela devrait tre suffisant. Le 2me larrire sera fixe et sera surtout utilis en secours, au cas o le robot doit reculer.

2) Servomoteur : Servomoteur conomique quip de pignons en Karbonite. Livr avec palonniers, visserie et connecteur JR Alimentation: 4,8 6 Vcc Course: 2 x 45 Couple: 3,0 kg.cm 4,8 Vcc Vitesse: 0,19 s/60 Dimensions: 40 x 20 x 37 mm Poids: 43 gr

Pour une utilisation normale, le servomoteur consomme environ 250mA, sachant que pendant les tests, on pouvait monter jusqu 600mA.

Programmes

1) 1er programme:

void send_sonar_cmd(unsigned short SRF08ADDRESS, unsigned short cmdreg, unsigned short i2cdata) //envoi de lultrason { I2C_Start(); //dmarrage de lI2C I2C_Wr(SRF08ADDRESS); //criture de ladresse du capteur while (!I2C_Is_Idle()) asm nop; //attendre que le bus I2C soit libre I2C_Wr(cmdreg); //envoi de ladresse du registre du capteur while (!I2C_Is_Idle()) asm nop; I2C_Wr(i2cdata); //envoi de la commande du capteur I2C_Stop(); //arrt de lI2C }

int read_sonar_range(unsigned short SRF08ADDRESS)//rception de lultrason { unsigned short highbyte, lowbyte; int range; unsigned short * ptr = ⦥//obtenir une rfrence pour la valeur de range I2C_Start(); while (!I2C_Is_Idle()) asm nop; I2C_Wr(SRF08ADDRESS); while (!I2C_Is_Idle()) asm nop; I2C_Wr(0x03); //envoi de ladresse du registre du capteur while (!I2C_Is_Idle()) asm nop; I2C_Repeated_Start();//redmarrage de lI2C I2C_Wr(SRF08ADDRESS+1);//envoi et incrmentation de ladresse du capteur lowbyte = I2C_Rd(1);//lecture du LSB while (!I2C_Is_Idle()) asm nop; highbyte = I2C_Rd(0);//lecture du MSB while (!I2C_Is_Idle()) asm nop; I2C_Stop();

*ptr = lowbyte; *ptr++; *ptr = highbyte; return (range); } int i; void main() { LCD_Init(&PORTD);//initialisation de lcran LCD LCD_Cmd(LCD_CLEAR); LCD_Cmd(LCD_CURSOR_OFF); ADCon1=0b00000110;//registre de configuration du convertisseur Analogique / Digital TRISA=0b11111110;//mise du PortA en sortie while(1) { unsigned short a, SRF08ADDRESS, cmdreg, i2cdata; int range; char txt[6]; SRF08ADDRESS = 0xE0; cmdreg = 0; i2cdata = 0x51; TRISC = 0; //portC en sortie I2C_Init(100000); //initialisation de lI2C 100kHz send_sonar_cmd(SRF08ADDRESS, cmdreg, i2cdata); //ping du SRFO8 delay_ms(75); //attente de lcho range = read_sonar_range(SRF08ADDRESS); //lecture de la valeur de la distance WordToStr(range,txt);//conversion dun mot en chaine de caractre Lcd_Out(1,1,"d=");//affichage de la valeur de la distance Lcd_Out(1,3,txt); //affichage de la valeur de la distance Lcd_Out(1,12,"cm");//affichage de la valeur de la distance

for (i = 0; i < 90; i++ ) { PORTA.F0=1;//RA0=1 Delay_ms(1); PORTA.F0=0; //RA0=0 Delay_ms(2); } delay_ms(50); for ( i = 0; i < 90; i++ ) { PORTA.F0=1; //RA0=1 Delay_ms(2); PORTA.F0=0; //RA0=0 Delay_ms(1); } delay_ms(50); }}

//PWM
Pour changer le rapport cyclique, il suffit de modifier les valeurs des dlais.

De nombreux tests ont t fait pour rgler langle et la vitesse de rotation de scrutage du servomoteur.

Ce 1er programme faisait bien les tches demandes mais il y avait cependant quelques problmes : La vitesse de droulement du programme tait trop faible, les informations de distance ne nous parvenaient pas assez rapidement. Ce dfaut ntait pas le plus important car si on enlve le temps de laffichage, il pouvait tre ngligeable. Le 2me problme et surtout le plus important est que pendant les delay le PIC ne fait rien dautre quattendre. On bloque donc tout le programme.

Nous avons donc dcid de raliser ce programme dune autre faon, en utilisant une interruption.

2) 2me programme :

Affichage de la distance

void send_sonar_cmd(unsigned short SRF08ADDRESS, unsigned short cmdreg, unsigned short i2cdata) { I2C_Start(); I2C_Wr(SRF08ADDRESS); while (!I2C_Is_Idle()) asm nop; I2C_Wr(cmdreg); while (!I2C_Is_Idle()) asm nop ; I2C_Wr(i2cdata); I2C_Stop(); }

int read_sonar_range(unsigned short SRF08ADDRESS) { unsigned short highbyte, lowbyte; int range; unsigned short * ptr = &range; I2C_Start(); while (!I2C_Is_Idle()) asm nop; I2C_Wr(SRF08ADDRESS); while (!I2C_Is_Idle()) asm nop; I2C_Wr(0x03); while (!I2C_Is_Idle()) asm nop; I2C_Repeated_Start(); I2C_Wr(SRF08ADDRESS+1); lowbyte = I2C_Rd(1); while (!I2C_Is_Idle()) asm nop; highbyte = I2C_Rd(0); while (!I2C_Is_Idle()) asm nop; I2C_Stop(); *ptr = lowbyte; *ptr++;

*ptr = highbyte; return (range); }

void main() { LCD_Init(&PORTD); LCD_Cmd(LCD_CLEAR); LCD_Cmd(LCD_CURSOR_OFF); while(1) { unsigned short a, SRF08ADDRESS, cmdreg, i2cdata; int range; char txt[6]; SRF08ADDRESS = 0xE0; cmdreg = 0; i2cdata = 0x51; TRISC = 0 ; I2C_Init(100000); send_sonar_cmd(SRF08ADDRESS, cmdreg, i2cdata); delay_ms(75); range = read_sonar_range(SRF08ADDRESS); WordToStr(range,txt); Lcd_Out(1,1,"d="); Lcd_Out(1,3,txt); Lcd_Out(1,12,"cm"); } }

Programme de cration de la PWM pour le servomoteur :

#define SV0

PORTB.F1 //SVO est sur la patte RB1

unsigned int compt; unsigned char ser1; int cpval; int cp1=0; void interrupt() { if(--ser1 == 0) SV0=0; if(compt-- == 0) { compt=cpval; SV0=1; if(++cp1<=26) { if(cp1<=13) {ser1=3070;} else {ser1=2880;} } else { cp1=0; }
// PWM par interruption

} PIR1.TMR2IF=0; }

void main() { cpval=4500; TRISB = 0xf0; //port B en sortie SV0=1; INTCON.PEIE =1; // autorisation interruption des priphriques PIE1.TMR2IE=1; // autorisation interruption timer2 PR2=0; T2CON= 0b0000100 ; // pas de post ni prdivision compt=cpval; INTCON.GIE=1; //fin de linterruption do { }while(1); }

Je vais vous dcrire par un schma la PWM que nous avons programm par interruption et grce des compteurs:

2880 3070 T 3070

2880 3070

2880 3070

2880 3070

2880 3070

2880 3070

2880

CPVAL=4500 (Priode)

Compt=4500

Compt=4500

Le servomoteur tourne gauche

Le servomoteur tourne droite

Nous avons commenc fusionner le programme daffichage avec celui de la PWM par interruption mais cela ne ft pas concluant car nous avons remarqu quon ne sortait pas de linterruption donc nous navions aucune possibilit pour excuter autre chose dans le programme principal. Ces valeurs ont t trouves pour avoir un angle maximal (180) et pour viter les pics de courant sur chaque bute. Nous pouvons grce ces valeurs modifier langle de scrutation.

Tests valeurs pour modifier langle de scrutation du servomoteur : Etat haut 2975 3070 2023 Etat bas 2975 2880 2927 Angle 0 180 90

Conclusion

Nous avons pu rencontrer pas mal de problmes pendant la ralisation de ce projet. Ces problmes pouvaient tre dordre logiciel ou matriel : -

Problmes de cblage : les fils tant trop rigides, les soudures ne tenaient pas longtemps, il fallait donc rgulirement les refaire. Certains PIC tant dfaillants et ne sachant pas toujours que ctait le cas, il nous arrivait de chercher rgler un problme de programme inutilement. Logiciel : un mme programme pouvait ne pas toujours donner le mme rsultat : o Fonctionnement correct o Dtection dun PIC autre que celui branch o Dtection de milliers derreurs (imaginaires) Problme dalimentation du servomoteur : ne connaissant pas la rfrence du servomoteur et donc de la consommation en courant du servomoteur, nous lavions branch en lalimentant directement avec les broches du PIC. Mais ceci ntait pas suffisant, il nous fallait une alimentation beaucoup plus importante et nous avons compris ceci en voyant que la consommation moyenne tait de 250mA.

Pour la suite, il nous reste donc trouver pourquoi le programme de la PWM ne veut pas sortir de linterruption. Ce qui nous permettra de rassembler les 2 parties du programme, en esprant ne pas trouver dautres problmes.

PROJET ROBOT : Partie stratgie


Dans le cadre de notre deuxime semestre sur le projet robot, nous avons dcid de nous consacrer principalement la programmation du pic. Nous avons galement apport une partie nouvelle, ayant pour but de faciliter les tests et les modifications de dernire minute. Malgr les nombreux problmes rencontrs nous sommes actuellement en train de Finir les diffrents codes. Dans un premier temps nous aborderons les commandes PWM du moteur sur le PIC. Ensuite nous poursuivrons avec loutil de modification des variables pour faciliter les tests. Nous continuerons avec le programme principal, puis nous terminerons avec les problmes rencontrs.

I) Les commandes PWM II) Outil de modification des variables


A) Intrt
En codant notre programme principal et ses diffrentes fonctions nous avons pu constater que le code tait dense. Le projet ayant pris du retard par rapport aux planifications faites au premier semestre (voir premier rapport). Il ne nous resterait plus beaucoup de temps pour effectuer les tests. Pourtant cest une tape ncessaire, si ce nest lune des plus importantes. Durant ces diffrents tests, des modifications seront forcment ncessaires. Par exemple pour modifier la distance par rapport lobstacle ou on commence tourner pour lviter, nous nallons pas parcourir les centaines de lignes de codes pour modifier cette distance. Cet outil est aussi intressant pour permettre une personne extrieure (ou ny connaissant rien en programmation) de changer ces variables pour pouvoir corriger les erreurs ventuelles, les imprvus, et pour loptimiser.

B) Principe
Pour faire cet outil, il nous faut crer un programme informatique. Comme le pic est programm en C, nous avons choisi dutiliser le mme langage pour ce programme. Cest une application en .exe comme tous les programmes classiques. Ce programme va permettre dcrire les variables dans un fichier texte (.txt). Il sera ensuite possible grce ce programme de venir lire ce fichier pour vrifier les valeurs. Il est galement tout fait possible den modifier une ou au contraire de toutes les rinitialiser. Ce programme sera localis dans un dossier contenant le fichier . txt ainsi que le programme principal. Ce programme principal viendra au dbut lire ce fichier .txt et rcuprera ses variables sous forme dun tableau. Cest la solution la plus adapte pour viter les erreurs et pour programmer plus facilement. Ces valeurs seront dclares sous forme de variables globales pour tre utilises tout au long du programme.

1) La fonction lire

1 FILE* fichier = NULL; 2 fichier = fopen("donnee.txt", "r"); 3 if (fichier != NULL) 4 { 5 caractereActuel = fgetc(fichier); 6 7 8 9 10 11 12 } 13 else 14 { 15 16 } printf("Impossible d'ouvrir le fichier donnee.txt"); } fclose(fichier); while (caractereActuel != EOF) { printf("%c", caractereActuel); caractereActuel = fgetc(fichier);

Pendant les trois premires lignes, on vrifie si le fichier existe et ou louvre sinon (lignes 13 16) on renvoi une erreur. Ensuite, on vient lire un un les caractres dans le fichier jusqu lend of file (dernier caractre marquant la fin du fichier). Et enfin, on viendra fermer le fichier aprs utilisation.

2) La fonction permettant de rcuprer les donnes

1 while(fscanf(fichier,"%c",&c) != EOF) 2 3 4 } { Longueur++;

5 printf("la longueur est %d\n",Longueur); 6 rewind(fichier); 7 int s[Longueur]; 8 for (i =0 ; i <Longueur; i++ ) 9 { 10 fscanf(fichier,"%d\n", &s[i]); 11 } 12 fclose(fichier);

13 for (i=0;i<(Longueur/2);i++) 14{ 15 16} printf("valeur %d\n",s[i]);

Les quatre premires lignes permettent de venir lire tous les caractres prsents dans le fichier (en layant en pralable ouvert) afin de dterminer la longueur du fichier. On affichera ensuite la longueur. La ligne six quant elle, permet ensuite de revenir au dbut du fichier. Nous allons alors rcuprer les donnes. Il faut quelles soient codes dune faon spcifique, choisie par le programmeur afin de venir les rcuprer. Jai choisi de les coder de la faon suivante : Variable1 retour__la_ligne Variable2 retour__la_ligne Variable3 retour__la_ligne Etc

De cette manire on va donc entre les lignes sept et seize, dclarer un tableau pour stocker les variables et rcuprer tous les caractres. Il nous suffira seulement de supprimer les caractres \n qui reprsentent les retours la ligne afin quils napparaissent pas dans le tableau.

3) Remplacer des valeurs

1 printf("choisir varleur\n") ; 2 scanf("%d",&s[0]); 3for (i=0;i<(Longueur/2);i++) 4{ 5 6} 7 FILE* fichier = NULL; 8 fichier = fopen("donnee.txt", "w"); 9 if (fichier != NULL) 10 { 11 12 13 } for (i=0;i<(Longueur);i++) fprintf(s[i], fichier); // Ecriture du caractre printf("valeur %d\n",s[i]);

Nous allons tout dabord choisir la valeur modifier grce sa position dans le fichier. On tapera 4 par exemple pour la variable numro quatre. On affichera la valeur de la variable contenue initialement (ligne cinq). Ensuite nous allons modifier sa valeur (dans le tableau) et recopier le tableau ainsi obtenu dans le fichier.

C) Avancement
Les fonctions tant toutes crites, il reste implanter le programme dans le programme principal. Il faut galement tester ce programme dans le cadre rel du projet.

III) Le programme principal


Le programme principal utilis pour tout le projet, a t reprsent de faon simple sous la forme suivante : while(on_est_arriv!=1){ if(on capte IR){ suivre_IR(); if(obstacle){ gerer_obstacle(); } } else{ suivre boussole(); } }

Il est reprsent par une boucle tant que le robot nest pas arriv. Nous avons donn la priorit linfrarouge. Si on le capte, on le suivra en priorit TANT QUE lobstacle dtect est plus loin que la distance laquelle on compte grer lobstacle. Si on sort du tant que on va grer lobstacle (tourner gauche ou droite suivant si lobstacle est plus gauche ou droite). Sinon en dernire solution, si linfrarouge nest plus visible, on suivra la boussole.

IV) Problmes rencontrs


Le principal problme rencontr a t le manque de temps. Il est du tout dabord au nombre dabsences involontaires de ma pars. Ensuite nous pensions utiliser une carte permettant de modifier directement le programme sur le pic sans passer par la plaquette de tests. Cest une solution avantageuse et plus pratique, mais la carte tant chre et non ralisable car trop complexe, nous avons perdu du temps sur ces recherches en vain.

Mme si le programme nest pas totalement fini nous sommes motivs et continuons le programme hors des cours pour pouvoir le terminer et permettre nos camarades et travail supplmentaire avant de partir Vierzon.

Je me permets dajout que pour la partie stratgie je nai reu que la partie de Sonia et pas celle de Mathieu.

Dtection infrarouge balise et robot


Cette partie permet de guider le robot travers la zone de jeu. Le principe est simple, une balise fixe, plac dans un coin de la piste, qui sera la destination du robot. Cette balise sera compose de diodes infrarouges mettrices, module une frquence prcise. Elle sera reue par le robot grce des photodiodes infrarouge, et une srie de filtre dans le but de ne regarder que le signal modul la frquence de lmission.

I) Compte rendu sance par sance a. 21 janvier 2011 b. 28 janvier 2011 c. 11 fvrier 2011 d. 18 fvrier 2011 II) Projet initial a. Description b. Problmes III) Projet final a. Balise b. Robot c. Amliorations IV) Conclusions

Chapoutier Bndicte Carpentier Kevin Debruyne Adrien

I) Compte rendu sance par sance a. 21 janvier 2011


Nous avons dbut cette sance, par une premire dcision, qui a t de ne pas poursuivre ltude que nous avions mene jusqu' prsent concernant la dtection infra rouge : Car nous tions partis sur une piste de carte de rception dj existante (sources internet), dont nous ne maitrisions pas toutes les parties ! Il nous a t suggr une nouvelle piste, concernant le choix de notre mode de dtection balise-robot , a laquelle nous avons tous les trois adhrs, car plus innovatrice, et aussi plus facile a raliser (tant bas sur des fonctionnalits que nous connaissons dj) et pour certaines, sur lesquelles nous devrons faire des choix, et chercher comment les raliser. SCHEMA fonctionnel, (il manque la deuxime voie idem a celle-ci) :

Nous avons donc dcid, de mettre 2 diodes Pin sur le robot, diodes de rception,(dont la position reste encore a dfinir

PIN Photodiode with Very Short Switching Time:

Une diode PIN (Positive Intrinsic Negative diode en anglais) est une diode constitue d'une zone non-dope, dite intrinsque I, intercale entre deux zones dopes P et N. Une diode PIN polarise dans le sens direct (passante) offre une impdance dynamique (vis--vis des signaux variables) extrmement faible.

Ce sont des diodes de commutation rapide, cest pour cela que nous avons choisie ce type de diode, en rception de signal balise. La diode va rceptionner toute la lumire qui rentre dans son cne dacceptance, celle-ci va donc transmettre un signal(tension) carr, qui va comporter non seulement le signal (la frquence mise par notre balise, mais aussi la lumire de la salle ainsi que les frquences misent par les autres concurrents)

En sortie, il faudra donc centrer le faible signal sur 0, en liminent la composante continue de celui-ci, grce a un filtre passe haut.

PASSE Haut :

Maintenant notre signal est centr sur 0, mais toujours de faible amplitude, il faut donc lamplifier :

Maintenant, il va falloir filtrer de nouveau, afin de rcuprer notre frquence propre ( la frquence dmission de notre balise).Pour se faire, il nous faut mettre un passe bande slectif, qui va liminer toutes les frquences(bruits, parasites) autre que la porteuse de notre signal dmission. On obtient alors un signal sinusodal centr sur 0

Maintenant, pour pouvoir comparer les amplitudes, il faut transformer notre tension (signal sinusodal) en valeur moyenne, il faut donc redresser le signal (la valeur moyenne dune sinusode centre sur 0 cest 0)

Nous avons choisi de faire un redresseur mono-alternance+ une capacit. La capacit va lisser le courant, et donc nous auront une meilleur prcision de la valeur moyenne. Pour comparer les tension moyennes reu par les deux voies, afin de connaitre notre position par rapport a la balise( plutt a gauche, ou plutt a droite), on va utiliser un soustracteur.

Selon le rsultat de la soustraction, positif ou ngatif, et de ce que lon aura dfini dans le pic, on connaitra donc notre position. Afin de connaitre avec prcision la position de notre robot(droit vers la balise, ou bien dvi vers la droite ou vers la gauche), nous avons dcider de comparer aussi la diffrence de phases de nos deux signaux. Pour se faire, on cherche a faire un comparateur de phase, avec soit une PLL( mais cela signifierait un codage difficile au niveau du pic), soit un multiplieur + a dfinir. Il faudra aussi chercher langle , de 0 a 180, ou bien de -90 a +90.

b. 28 janvier 2011
En dbut de sance, nous avons t amen a rflchir, sur lefficacit du comparateur de phase, pour notre application sachant que nous traitons des signaux infra rouge, et non HF.

Nous avons alors fais un petit calcul : la vitesse de propagations de la lumire dans lair est de 3.10^8m/s la distance maxi en diagonale de la piste est de 11,31 mtres. Nous avons effectu nos calculs avec une distance de 3 mtres pour T1=3/3.10^8=1.10^8s soit 10ns Si on prend un dcalage de 10cm, on a donc T2=3,1/3.10^8=10,3ns. On vient de se rendre compte, que pour des frquences infra rouge (donc de la basse frquence), la diffrence de phases nest pas significative. De plus, comme ctait cette partie qui nous posait le plus de problme de comprhension dans la ralisation de ce comparateur de phase, nous avons abandonn cette option. Nous avons donc de nouveau fait un schma fonctionnel, sans comparateur de phase, et incluant quelques correction derreurs.

Ci-dessus, une seule voie.

Le choix de la diode SFH203-FA (filtr), a t fait daprs diffrents critres, nous avons tout dabord recherch, en fonction de langle de rception :

Daprs nos recherches, il existe diffrentes diodes, mais avec des angles de 15 (trop faible selon nous) jusqua 60 ( dans ce cas ci beaucoup trop grand en ouverture). Cela a rduit notre choix par rapport a 3 diodes diffrentes : SFH203-FA, SFH213,et SFH213-FA On a tout de suite enlev la diode SFH213, car celle-ci ntait pas filtre. La longueur donde est de 900nM, et la sensibilit est aussi la mme dordre de 0,59A/W

Carte dmission :

Nomenclature : il nous reste dimensionner R3,R4,R5

c. 11 fvrier 2011
Tirage de la carte test : nous avons dcid, de ne prendre quune seule voix sur les deux existante sur la
carte rceptrice, puisquil sagit dune redondance ;(la carte dorigine, cest 2 en 1) Il faut donc transformer le schma de principe et faire une nouvelle implantation, afin de prparer le typon pour la carte de test, qui va nous servir de test relle, pour voir la bonne faisabilit de nos deux cartes finales.

Le connecteur P2 va nous servir relier nos deux cartes rception.

Nous avons eu un problme pour alimenter les comparateurs en +5 et -5 v Comment faire au niveau de notre carte alim ? De plus, Nous avons ralis que nous allions nous relier au PIC qui lui est aliment en 05V or nous allions lui fournir une tension comprise entre -5V et +5V il naurait donc pas pris en contre les valeurs ngatives. Problme : quelles solutions avons-nous ? Il nous a t suggr de mettre en sortie de notre alim, deux rsistances de 1KH chacune, afin de pouvoir faire apparaitre une nouvelle masse fictive de 2,5V.il faudra ajouter avant le pont de rsistance, une capa de dcouplage de 1uF, et en parallle avec chaque rsistance une capa de 100 nF( toujours pour filtrer les perturbation de tension gnr par le bruit) Nous auront ainsi en sortie de chaque cartes de rception, non plus des valeurs de tensions comprises entre -5 et +5v, mais entre 0 et 5V, avec un signal centr sur 2,5v, ainsi, si le pic reoit une tension comprise entre 2,5 et 5, il sera (a dfinir ou a gauche ou a droite) et idem pour une tension comprise entre 0 et 2,5 v. Voici donc la dernire version pour le moment car elle nest pas dfinitive.

Carte Alimentation :

Pour la partie rception infrarouge, on utilise beaucoup de LM324 en mode de fonctionnement linaire. Ce mode ncessitant une alimentation symtrique pour fonctionner correctement, il nous a fallu faire des modifications dans lalimentation basique

d. 18 fvrier 2011
Aujourdhui, nous allons pouvoir faire limpression des typons, ainsi que la fabrication de nos deux cartes (mission et rception), dont voici ci-dessous, la dernire version.

Carte dmission IR:

Carte de rception :

Voici ce que nous avions effectu a la fin de cette sance :

II) Projet initial a. Description


Au dpart nous tions partit sur une Mthode avec un systme de codage pris sur dautre concurrents, voici ce quil y aurait eu pour la balise :

Avec sur la gauche des boutons poussoir qui permettrai de faire un code unique sur 4 bits, Le codeur (MC145026P), une srie de porte NAND qui permettent de mettre en forme le signal, et de rgler prcisment la frquence de coupage de lmetteur. Et un transistor de puissance qui permettrai de commut une frquence plus lev que des transistors bipolaire, ainsi que de dlivrer assez de courant pour les diodes infrarouge. Ensuite pour la partie rception plac sur le robot, nous aurions eu cela :

Le rcepteur infrarouge (TSOP1738), il y a aussi le dcodeur (MC145027P), le montage situ en dessous est impos par le constructeur du dcodeur, on le trouve dans la documentation.

b. Problmes
Le problme avec ce montage est quil est difficile comprendre, surtout la partie rception, cest pourquoi, nous avons dcid de partir sur autre chose, de plus simple, notre professeur nous a propos une toute autre mthode que nous allons dtailler dans la partie suivante.

III)

Projet final a. Balise

La balise sera dispose dans un des coins de la zone de jeu, une vingtaine de centimtre du sol, il faut pouvoir mettre au moins jusqu lautre bout de la piste, cest pourquoi il faut une mission puissante en luminosit infrarouge. Voici de quoi elle est compose :

Il est donc compos dun NE555 qui permet davoir un signal carr parfaitement rgler la frquence que lon souhaite.

b. Robot
En ce qui Concerne le robot, la carte ralise ce jour est celle-ci (tire en deux exemplaires une pour le ct droit et une autre pour le ct gauche)

Partie dtection infrarouge et filtrage passe haut

Afin de rcuprer notre signal infrarouge mis par la balise nous utilisons une photodiode infrarouge qui rcupre le signal mis, celui-ci est ensuite filtr grce a une cellule CR (filtre passe-haut) ce qui nous permet de supprimer la composante continue du signal, et donc que celui-ci soit centr par rapport au 0.

Partie amplificateur

Apres avoir filtr le signal nous devons lamplifier car il est aux alentours dune centaines de millivolts. Nous avons choisi une amplification par 10 ce qui nous permet de ne pas satur et donc de rester entre -2.5V et +2.5V

Partie filtrage passe-bande

Ensuite le but premier de la rception est de retrouver le signal mis par notre balise dans tous les signaux infrarouges reu sachant que nous mettons 5KHz nous avons mis en place un filtre passe bande a 5KHz. Nous devons utiliser deux filtre passe bande pour que le filtrage soit plus slectif et grce ces deux filtres les frquences de coupure sont de 4KHz et 6Khz.

Redressement et soustracteur damplitude

Apres avoir rcupr nos signaux sinusodaux de frquence 5KHz nous devons les soustraire pour obtenir une tension reprsentative de la position du robot pour cela nous allons utiliser un montage soustracteur mais avant cela nous devons redresser et lisser le signal sinusodal car le soustracteur fais une soustraction de deux signaux continu. Apres la soustraction nous allons obtenir une tension continue variant entre -2.5 et +2.5V pour nous. Le PIC qui na pas la masse fictive recevra un signal entre 0 et 5V qui sera centr sur 2.5V.

c. Amliorations
Nous prvoyons de changer compltement la carte rception pour y inclure un montage suiveur au niveau de la diode qui permet le redressement ce montage permettra de supprimer la tension de seuil de la diode. Et nous prvoyons de supprimer le montage soustracteur prsent actuellement et le remplacer par un amplificateur dexprimentation.

IV)

Conclusion

Pour finir beaucoup de chose ont dj t faite mais il reste encore beaucoup de travail a fournir sur le robot, nous avons russi surmonter tous les problmes survenu et dobtenir des cartes viables mme si plusieurs teste restent faire

Houvenagel Kvin Fouilloy Adrien

PE21

Partie Boussole

ERII4

M. Glay

SOMMAIRE

Sommaire......2

Introduction...3

Choix de la boussole..............4

Cblage de la boussole..7

Programme interne de la boussole..9

INTRODUCTION
Le but de notre partie est de trouver un chemin pour la boussole par rapport une rfrence donne qui est celle de la balise. Nous allons dabord vous prsentez la partie cblage o nous allons vous dire comment nous avons procder avec les diffrents branchements. Par la suite nous continuerons avec le partie programmation en vous dvoilant le programme grer la boussole.

I) Choix de la boussole :
Pour trouver, la boussole idale notre projet, nous avons cherch sur diffrent fournisseur laquelle correspondrait le mieux nos besoins : Sur Selectronic

Boussole CMPS-03 : Prcision : 3 4 aprs calibration Sortie binaire : 8 ou 12 bits Interface bus : I2C Alimentation : 5 VDC Consommation : typique 20mA Dimensions : 32x35cm Prix : 39,70 Boussole HM55B-29123 : Rsolution sur 6 bits soit 64 directions possibles Temps de rponse : 30 ms Transmission srielle Rgulateur 3V intgr Idal pour raliser de petits robots mobiles Prix : 36,20

Sur Radiospares :

Boussole HM55B-29123 : Mme caractristique Prix 37,40 Sur Lextronic Boussole HMC 6352 : Cette petite platine intgre un capteur magnto rsistif HMC 6352 spcialement conu par Honeywell pour la ralisation de boussole lectronique. Dot dune interface I2C, ce dernier est prvu pour tre aliment de 2,7V 5,2V avec une frquence dacquisition 1 20Hz et une rsolution de cap de 0,5 degr Prix : 56,09

Boussole CMP03 : Alimentation : +5VCC Consommation : 20 mA

Rsolution : 0,1 Prcision : 3 4 environ Dimensions : 32x35 mm Prix : 37,85 TTC Boussole HMC6343 : Cette petite platine est un compas HMC6343 avec compensation en tilt spcialement conu par Honeywell par la ralisation de boussole lectronique. Le composant en lui-mme renferme un capteur magnto 3 axes associs un acclromtre 3 axes, le tout supervis par un microcontrleur PIC. Prix : 164 TTC

Sur Farnell : Rien trouv Sur Electronique Diffusion : Rien trouv Sur Conrad : Rien trouv

Nous avons rassembl les informations les plus importantes des diffrentes boussoles dans le tableau suivant. Boussole Alimentation Consommati on typique 5 mA 20 mA 1 mA 4,5 mA Prix Selectronic : 36,20 Radiospares : 37,40 Selectronic : 39,70 Lextronic : 37,85 Lextronic : 56,09 Lextronic : 164 Compatibilit I2C Non Oui Oui Oui Prcision Rsolution

Boussole HM55B- 29123 Boussole CMPS-03 Boussole HMC 6352 Boussole HMC 6343

5 VDC 5 VDC 2,7 5,2 VDC 2,7 3,6VDC 3,3V typique Dimensions (mm)
12,7x10,8x11,4

5,625 3 4 2,5 2

0,1 0,5 0,1

32x35

6,5x6,5x1,5 9x9x1,9

Dans le tableau prcdent, il ne faut pas confondre la rsolution et la prcision. La rsolution est la variation minimale du paramtre mesurer qui introduire une modification sur la sortie et la prcision va quantifier l'erreur maximale de mesure, savoir la diffrence maximum entre ce qu'indique la sortie et la valeur vraie du paramtre mesur. Grce aux comparaisons du tableau, nous avons choisi la boussole CMPS-03 pour raliser notre projet, car elle cote moins cher que les boussoles HMC 6343 et HMC 6352 qui ont une compatibilit I2C mais elle est moins chre que la HM55B- 29123 qui na pas de compatibilit I2C.

II) Cblage de la boussole CMPS-03 :


Nous avons effectu des tests sur la sortie PWM de la boussole, laide de loscilloscope nous avons visualis un signal en crneau. Suivant langle dtect par la boussole nous avons pu observer une modification du rapport cyclique qui entrane une variation de la valeur moyenne du signal. On a donc une tension proportionnelle langle mesur. Malheureusement nous navons pas eu le temps de relever des valeurs. Pour conclure sur la PWM on peut dire que la fonction fonctionne parfaitement. Pour une question de pratique, nous avons dcid de communiquer avec le PIC par I2C et non par PWM car le microcontrleur travaille par I2C et non par MLI. Voici les diffrentes broches de la boussole pour permettre son bon fonctionnement

Voici le cblage ralis lors des sances dERII4 de la boussole qui permet de mesurer langle en degr instantanment.

Description du cblage : Broche 1 : + 5 Volts Alimentation Broche 2 : SCL Ligne dhorloge du bus I2C ( 100 KHz standard ) relie la patte 18 du PIC qui correspondant au SCL Broche 3 : SDA Ligne de donnes du bus I2C relie la patte 23 du PIC qui correspond au SDA Broche 4 : PWM Sortie module en largeur dimpulsion. Dans notre cas non utilise donc non connecte Broche 5 : N.C Non Connecte Broche 6 : CALIBRATE Entre pour le calibrage matriel du module Broche 7 : 50/60 Hz Entre de slection du filtre interne N.C. Ici cette patte est branche au GND pour tre en 50Hz (norme europenne). Broche 8 : Non Connecte : en fait, ligne de reset du microcontrleur avec une rsistance pullup. Utilise lors de la programmation du module. Peut servir pour faire un reset du module boussole Broche 9 : 0 V Masse de lalimentation Tests : Lors des tests de ce cblage, nous avons rencontr plusieurs problmes : - Certains petits cbles oranges ne marchaient pas et donc nous avons perdu un petit peu de temps trouver quel tait le problme. - Confusion des diffrentes broches de la plaquette en reliant sur le port ce qui nous a amen en erreur. - Et le dernier problme cest que par moment, on utilisait une mauvaise carte PIC ce qui nous a fait perdre aussi un peu de temps. Finalement, malgr tous ces problmes, notre cblage a fini par fonctionner, vu et approuv par tout le groupe, il ne reste plus qu calibrer la boussole par rapport un point prcis (dans notre cas la balise). Mais bien sr, pour tester le fonctionnement du cblage, il faut raliser le programme interne de la boussole pour que cette dernire puisse communiquer la valeur de langle au PIC

III) Programme interne de la boussole CMPS-03 :


Voici le programme final de la boussole que nous avons ralis : Pour mieux expliquer le programme, je lai spar en plusieurs parties que jai mises en couleurs : void main() { char j[5]; int angle; angle=0; ADCon1=0b00000110; TRISC = 0x0;
Cette partie du programme concerne juste les dclarations des variables : J est un variable caractre sur 5 bits pour permettre davoir un affichage suffisant Angle est une variable entire comprise entre 0 et 360. Au dpart je linitialise 0. ADCon1 est TrisC =0x0 est pour mettre le port c en sortie

i2c_init(100000);

Lcd_Init(&PORTD); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,2,"angle=");


Protocole de communication I2C : Au dpart, il faut initialiser le bus I2C la frquence de fonctionnement. Ici, 100 kHz Ensuite, il faut envoyer un bit de Start pour commencer le protocole, puis ladresse (OXCO) du module boussole avec le Read/Write au niveau bas, puis le numro du registre que lon veut lire(Ici 1 correspondant un angle sur un octet , entre 0 et 255, pour un cercle de 0 360) puis il faut stopper le protocole. Puis le relancer suivi de ladresse du modle boussole abec le Read/Write au niveau haut(0XC1). Ensuite, on dit que langle est gale la lecture du registre 0 (correspondant au logiciel interne de la boussole. Puis on arrte le protocole On met tout a dans un while pour que la boussole recalcule langle indfiniment. Fonction permettant de convertir langle en dcimal indispensable pour que lafficheur affiche langle en chiffres car au dpart j tait en caractre. f

while(1) { i2c_start(); i2c_wr(0xC0); i2c_wr(1); i2c_stop();

i2c_start(); i2c_wr(0xC1); angle=i2c_rd(0); angle=angle*72/51; i2c_stop();

WordToStr(angle,j);

Lcd_Out(1,9,j); Lcd_Out(1,14,"deg"); Lcd_Cmd(LCD_CURSOR_OFF); } }


On initialise laffichage sur le port D (port par dfaut) puis on utilise toutes les fonctions ncessaires pour afficher la variable j soit langle. On ne met que laffichage du j dans le while car cest lui quon recalcule chaque fois.

Ce programme fonctionne bien car, en effet, lafficheur affiche bien langle et ce dernier varie lorsque lon bouge la boussole mais il reste le calibrage logiciel faire par une mthode simple : il suffit de prendre un angle de rfrence et de le retrancher la variable j . Pour ce qui est des registres, jai fait un tableau rcapitulatif pour bien comprendre pourquoi jai utilis tels ou tels registres. Registre 0 1 2 et 3 4 et 5 6 et 7 8 et 9 10 et 11 12 13 14 15 Fonction Numro du logiciel interne de la boussole Angle sur un octet, entre 0 et 255, pour un cercle complet de 360 Angle sur un mot entre 0 et 3599 reprsentant en angle de 0 359,9 Test interne (Sorties diffrentielles du capteur 1 : sur 16 bits sign) Test interne (Sorties diffrentielles du capteur 2 : sur 16 bits sign) Test interne du calibrage 1 (valeur sign sur 16 bits) Test interne du calibrage 2 (valeur sign sur 16 bits) Non utilis (lecture zro) Non utilis (lecture zro) Non utilis (lecture indfinie) Commande de calibrage (crire 255 pour entrer en mode calibrage)

Partie Moteur
Introduction:

Dans le cadre de notre formation en gnie lectrique et informatique industrielle, nous assistons au cours d'tude et ralisation en gnie lectrique, qui consiste faire un projet Robot et participer au concours de vierzon 2011. Pour ce projet nous devons raliser une carte qui permet de commander les moteurs par un micro contrleur, ensuite nous a t confi la ralisation de la carte d'alimentation de la balise qui a t tudi par M, Julien Lanseman qui malheureusement n'a pas pu le faire suite son interruption d'tudes. I-carte de commande des moteurs:

1- prsentation de la carte:

Durant ltude pralable nous avons choisis le L6203 pour son prix et pour raliser une carte qui pourra communiquer avec le microcontrleur et tourner les moteurs. Puis il faudra ajouter des rsistances et condensateurs, pour effectuer cette connexion.

2-schma lectrique

3-fonctionnement:

Le composant est aliment par une tension continue de 12 V sur la patte 2 et la GND sur la patte 6, sur la patte 10 (sense), nous avons choisie de mettre 4 rsistances de 2ohm en parallle pour ne pas avoir un courant suprieure 4A qui est le courant max admissible par le composant L6203. Les pattes 5,7 se sont des entres logiques qui permettent de faire tourner les moteurs. Les pattes 4,8 filtre les surtensions pour avoir une tension lisse la sortie de la carte(pattes 1et 3). l'activation de la carte se fait par le microcontrleur qui envoie du 5V sur la patte 11.

4-problmes rencontres

Lors de conception de la carte nous avons eu un problme d'impression. Pour avoir deux couches nous avons imprim une couche en mirror, aprs la ralisation il a fallu mettre les composants sur les deux surfaces. Nous avons corrigs l'erreur puis on a ralis la carte finale.

II-carte d'alimentation de la balise:

1-prsentation:

La deuxime carte sert alimenter la balise et qui est alimente par un transformateur de 9V. Suite une tude pralable, nous avons pris le schma suivant.

2-schma lectrique:

3-fonctionnement:

En entre gauche l'alimentation stabilis, suivi d'un condensateur chimique de 10F pour filtrer les basses frquences en cas d'ventuels parasites provenant du bloc d'alimentation. Ensuite il y a le rgulateur de tension 7805 avec en entre un condensateur de filtrage de 100nF et en sortie un condensateur de 10nF pour filtrer le signal et avoir une tension de 5V continu Nous avons ajout une LED avec sa rsistance de protection de 190 Ohms pour qu'on puisse voir si l'alimentation est bien sous tension. Et pour finir, en sortie droite il y aura un connecteur qui aura ses bornes une tension de 0 5V pour alimenter la balise.

Вам также может понравиться