Theme - Robot Fourmi

download Theme - Robot Fourmi

of 13

Transcript of Theme - Robot Fourmi

Projet Robot Fourmi

TEln

Projet Robot Fourmi(de la rentre des vacances de Toussaint aux vacances de Nol)A B C OEIL_DROIT 1 2 3 C ONN-SIL3 PGD 100 RES4 ANT_DROITE D VCC VPP 1 2 3 4 5 6 OEIL_GAUCH E 1 2 3 100 RES4 ANT_GAUCH E EMBASE_RJ12 VPP CAPT_LU M CAPT_BATT CAPT_SUP1/SERVO CAPT_SUP2/SERVO 1 2 3 4 5 6 7 10 9 21 22 23 24 E F G H VCC J K

0

VCC

J5

R2 J4 U1RE3/MCLR/VPP

R110K RES4

C40100nF CF21

1

R3 J6

PGC

2

DEL_BATT

C ONN-SIL3

OSC1 OSC2 SER VO_GAU CHE SERVO_D ROIT SERVO_CENTR E ANT_GAUCHE

R11100 RES4 VCC

J731 2 3 C ONN-SIL3

RA0/AN0/ULPWU/C 12IN0RA1/AN1/C12IN1RA2/AN2/VREF-/CVREF/C2IN+ RA3/AN3/VREF+/C + 1IN RC0/T1OSO/T1C KI RA4/T0CKI/C1OUT RC1/T 1OSI/CCP 2 RA5/AN4/SS/C2OU T RC2/CCP1/P1A RA6/OSC 2/CLKOU T RC3/SCK/SC L RA7/OSC 1/CLKIN RC 4/SDI/SD A RC5/SDO RB0/AN12/INT RC6/TX/C K RB1/AN10/P1C/C12IN3RC7/RX/D T RB2/AN8/P1B RB3/AN9/PGM/C12IN2PIC 16F886

RB4/AN11/P1D RB5/AN13/T1G RB6/ICSPCLK RB7/ICSPDA T

25 26 27 28 11 12 13 14 15 16 17 18

ANT_DROITE BP_T EST PGC PGD BUZZER OEIL_GAUCHE OEIL_DROIT DEL_BATT

1

2

TX_UC RX_U C

C5VC C 22pF CF21 OSC 1

VCC CAPT_SUP1/SER VO

3

L3LED V_BATT

+

U2MCP1700 2 VI GN D 1 VO 3

J841 2 3 C ONN-SIL3 CAPT_SUP2/SER VO

K4 LS1 R94.7K RES4 BU Z BOR VI2 2 1

X14MH z C RYSTAL OSC 2

C6 C2100nF C F21

4

C1100nF CF21

C3100uF/16V CEL2V

22pF CF21

VC C

=

5FACULTATIFBC337 V_BATT 1 2 3 C ONN-SIL3

Q1 J1

R10BUZZER 4.7K RES4 20 19 18 17 11 15 16 12 9 13 6 7 4

U3DIGI/MaxStream XBee S2AD0/DIO0/CBUTTON AD1/DIO1 AD2/DIO2 AD3/DIO3 DIO4 ASSO/DIO5 RTS/DIO6 CTS/DIO7 DTR/SLEEP_RQ/DIO8 ON/SLEEP/DIO9 PWM0/RSSI/D IO10 PWM/DIO11 DIO12 XBEE S2 DIL VC C 1

5

6

servo_gauche

VCC CAPT_LUM

V_BATT CAPT_BATT

L1LED

R5100 RES4

D OUT DIN/CONFIG

2 3

6RX_UC TX_U C

J271 2 3 C ONN-SIL3

L2LED

R4servo_droit BP_TEST 4.7K RES4

R710K RES4

R6100 RES4

RESET NC 1 NC 2 GND

5 8 14 10

7

8

J31 2 3 C ONN-SIL3 servo_centre

K3BPMIN

LDR15K typ RES4

R812K RES4 F IL E NA M E :

8DA T E:

Robot_Fourmi.DSN Projet Robot FourmiR EV: H J

D E S IG N T IT L E : P AT H:

26/10/2009PA G E :

9

C: \ Us ers\Olivier \Documents\Lyc e\Robot Araigne\Robot_Fourm i.DSN

1

of

115:44 :1 6 K

9

B Y: O .D . & J.D. A B C D E F G

1.0

TIM E :

1 BUT DU PROJET...........................................................................................................................................................2 2 CAHIER DES CHARGES..............................................................................................................................................2 3 ANALYSE FONCTIONNEL DE LOBJET TECHNIQUE........................................................................................2

3.1 SCHMA FONCTIONNEL DE DEGR 1 ...................................................................................................2 3.2 DESCRIPTION DES FONCTIONS PRINCIPALES ET SECONDAIRES....................................................................34 SCHMA STRUCTUREL ET IMPLANTATION DES COMPOSANTS................................................................3

4.1 SCHMA STRUCTUREL......................................................................................................................3 4.2 IMPLANTATION DES COMPOSANTS, DIMENSIONS DU TYPON.....................................................................35 MESURES........................................................................................................................................................................5

5.1 MESURES STATIQUES SANS LES CI U1 ET U3 MAIS AVEC U2................................................................5 5.2 MESURES AVEC U1 ........................................................................................................................56 PROGRAMMATION DU ROBOT FOURMI.............................................................................................................5

6.1 EXERCICE 1 : TESTS DES BOUTONS ET DES DELS................................................................................5 6.2 EXERCICE 2 : TEST DU BUZZER, GNRATION DE MUSIQUE.....................................................................5 6.3 EXERCICE 3 : TEST DE LA TENSION DE BATTERIES.................................................................................5 6.4 EXERCICE 4 : TEST DU CAPTEUR DE LUMINOSIT (LDR)......................................................................5 6.5 EXERCICE 5 : TEST DES SERVOMOTEURS.............................................................................................5 6.6 EXERCICE 6 : DPLACEMENT DU ROBOT (AVANT, ARRIRE, TOURNER DROITE, TOURNER GAUCHE)..........6 6.7 EXERCICE 7 : DPLACEMENT DU ROBOT DE MANIRE AUTONOME............................................................67 PROGRAMMATION AVANCE DU ROBOT FOURMI.........................................................................................7

7.1 EXERCICE 8 : COMMANDE DU ROBOT PAR UN PC L'AIDE D'UNE VOIE SRIE SANS FIL..............................7 7.2 EXERCICE 9 : APPLICATION DE SUPERVISION DU ROBOT EN LANGAGE GAMBAS SOUS LINUX...................7 7.3 EXERCICE 10 : VOS PROPRES PROGRAMMES........................................................................................78 TABLEAUX MESURES STATIQUES.........................................................................................................................8 9 CONSIGNES POUR LA RDACTION DU COMPTE-RENDU...............................................................................8 10 ANNEXES......................................................................................................................................................................8

10.1 DOCUMENTATION DU MCP1700....................................................................................................9 10.2 DOCUMENTATION DU DOUBLE MONOSTABLE 4538..............................................................................9 10.3 DOCUMENTATION DE LA LDR (LIGHT DEPENDANT RESISTOR)............................................................9 10.4 DOCUMENTATION DU BUZZER.......................................................................................................10 10.5 SQUELETTE D'APPLICATION SIMPLE POUR PIC16F886......................................................................10 10.6 SQUELETTE D'APPLICATION POUR LA COMMANDE DES SERVOMOTEURS..................................................11 10.7 SQUELETTE D'APPLICATION POUR LA COMMANDE SANS FIL DU ROBOT FOURMI.......................................12 10.8 DMONTAGE D'UN SERVOMOTEUR ET SCHMA LECTRIQUE.................................................................13

Olivier DARTOIS Jacques DUPRAT

Page 1

Projet Robot Fourmi

TEln

1

But du projet Ce projet permet de dcouvrir et d'approfondir la programmation en langage C de C PIC de MicroChip travers la commande d'un robot fourmi . Le dplacement des pattes commandes par les servo-moteurs sera tudi en cours de mcanique l'aide du logiciel SolidWorks. En fin de projet, une interface de commande du robot pourra tre faite en GAMBAS (http://gambas.sourceforge.net/fr/main.html) sous GNU/Linux l'aide d'une communication sans fil entre le PC et le robot. Cahier des charges Le robot sera aliment sous approximativement 4,8V par un jeu d'accus rechargeables (4 piles). Les pattes du robot seront commandes par des servomoteurs, eux mme commands par le C. Le C ainsi que le module de communication sans fil seront aliments sous 3V. Deux antennes fixs sur le devant du robot serviront de support pour les yeux du robot (2 DELs) et de dtecteurs de chocs. Un capteur de lumire (LDR) permettra de faire suivre une lumire au robot. Un buzzer permettra de sonoriser le robot. Une DEL servira de tmoin test ou de tmoin de surveillance de la tension de la batterie. Un module de communication sans fil permettra le dialogue avec un PC voire la programmation distance du robot avec un bootloader . Des DELs permettront de visualiser la communication entre le robot et le PC. La programmation du C s'effectuera in-situ l'aide d'un connecteur ddi. Analyse fonctionnel de lobjet technique 3.1 Schma fonctionnel de degr 1Visualisation FP6 Amplification FS7.1 Transduction U/son - FS7.2

2

3

DEL Batt DELs Comm DELs Yeux Chocs Lumire BP Test

Sonorisation - FP7 Capteurs FP5

Conversion t / (servo1) - FS2.1

Signal sonore

Module de Communication FP4

Gestion FP1

Conversion t / (servo2) - FS2.2 Conversion t / (servo3) - FS2.3

Alimentation FA2

FP2

Mouvement Fourmi

Batteries FA1

Surveillance Batteries FP3

Module de Communication

PC

Olivier DARTOIS Jacques DUPRAT

Page 2

Projet Robot Fourmi

TEln

3.2

Description des fonctions principales et secondaires FP1 : Gestion : C PIC16F886 gre l'ensemble du robot l'aide d'un programme FP2 : Commande des pattes : Conversion temps (impulsion l'tat haut) vers un angle. FS2.1 : Commande des pattes situes droite (servo1) FS2.2 : Commande des pattes centrales (servo2) FS2.3 : Commande des pattes situes gauche (servo3) FP3 : Surveillance batteries : en entre tension des accumulateurs variant entre 5,5V et 4V, en sortie tension image de la tension de batterie voluant entre 0V et 3V. FP4 : Module de communication : Il permet un dialogue bi-directionnel entre le robot et un PC (liaison srie sans fil asynchrone 9600bauds/s). Si un bootloader est implant dans le PIC, cela permet de faire la programmation du C distance. Facultatif. FP5 : Capteurs : les capteurs informent le C PIC des vnements extrieurs: FS5.1 : Les antennes servent de dtecteurs de chocs FS5.2 : La LDR permet d'avoir une information sur la luminosit FS5.3 : Un BP miniature permet de commander une action spcifique FP6 : Visualisation : Cinq DELs nous informent sur l'tat du robot: FS6.1 : La DEL Batt s'allume si la tension batterie devient trop faible FS6.2 : Les DELs Comm s'allument lors d'un dialogue sans fil avec le PC FS6.3 : Les DELs Yeux permettent de visualiser l'tat du robot en faisant varier l'intensit lumineuse des DELs FP7 : Sonorisation : Le robot fourmi peut mettre des sons (voire de la musique) FS7.1 : Le signal issu du PIC est amplifi par un transistor FS7.2 : Un transducteur piezo-lectrique (buzzer) ralise la conversion signal lectrique vers signal sonore. FA1 : Batteries : L'alimentation en continu est fourni par 4 accumulateurs NiMH de valeur nominale 1,2V/unit. La tension voluera donc entre 5,5V lorsque les accus sont chargs et 4V lorsqu'ils sont dchargs. Cette tension est amene aux servomoteurs. FA2 : Alimentation : L'alimentation du C et du module de communication est rgul 3V l'aide d'un rgulateur LDO (Low Drop Voltage : faible chute de tension). Le PC et son module de communication sont optionnels. Ils vous seront fournis pour faire des tests. A partir des informations prcdentes, ralisez le dcoupage fonctionnel sur le schma structurel. 4 Schma structurel et Implantation des composants 4.1 Schma structurel Tous les composants sont issus de la librairie RobotFourmi (nom des empreintes sur le schma). Reportez-vous au schma structurel page suivante puis saisissez-le dans Proteus Isis 7.4. 4.2 Implantation des composants, Dimensions du typon Routez alors en simple face la carte avec les contraintes de placement et de taille ci-contre. Notez bien que cette implantation n'est pas l'chelle, cependant vous respecterez les dimensions indiques. Les straps sont tolrs dans la limite maximum de 5 ! Perage : Circuits intgrs : 0,8mm K4 : 1,2mm Autres composants : 1mm Fixation: 3,2mm Cblage : Vous souderez dans lordre suivant : les straps, les rsistances, les supports de CI, les condensateurs, le transistor et le rgulateur de tension, le BP, les connecteurs, le quartz, les dels, le buzzer, le connecteur K4 et le connecteur J4, la LDR.Olivier DARTOIS Jacques DUPRAT Page 3

A C VCC VCC VCC VPP 2 3 PGD PGC 6 EMBASE_RJ12 5 CAPT_LUM CAPT_BATT CAPT_SUP1/SERVO CAPT_SUP2/SERVO OSC1 OSC2 SERVO1 SERVO2 SERVO3 ANT_GAUCHE PIC16F886 VCC 21 22 23 24 4 VPP 1 RE3/MCLR/VPP RB4/AN11/P1D RB5/AN13/T1G RB6/ICSPCLK RB7/ICSPDAT 1 10K RES4 D E F G H J K

B

R2 J4 U125 26 27 28 100nF CF21

Projet Robot Fourmi

0

J5

OEIL_DROIT

R1

C40

1 2 3

100 RES4 ANT_DROITE

CONN-SIL3

1

R3

ANT_DROITE BP_TEST PGC PGD

1

VCC

1

CAPT_LUM

CAPT_BATT

Olivier DARTOIS Jacques DUPRATDEL_BATT 2 3 4 5 6 7 10 9 RA0/AN0/ULPWU/C12IN0RA1/AN1/C12IN1RA2/AN2/VREF-/CVREF/C2IN+ RA3/AN3/VREF+/C1IN+ RC0/T1OSO/T1CKI RA4/T0CKI/C1OUT RC1/T1OSI/CCP2 RA5/AN4/SS/C2OUT RC2/CCP1/P1A RA6/OSC2/CLKOUT RC3/SCK/SCL RA7/OSC1/CLKIN RC4/SDI/SDA RC5/SDO RB0/AN12/INT RC6/TX/CK RB1/AN10/P1C/C12IN3RC7/RX/DT RB2/AN8/P1B RB3/AN9/PGM/C12IN211 12 13 14 15 16 17 18 BUZZER OEIL_GAUCHE OEIL_DROIT DEL_BATT TX_UC RX_UC

J6

OEIL_GAUCHE

1 2 3

100 RES4 ANT_GAUCHE

2

CONN-SIL3

R11100 RES4

2

J7 L3LED V_BATT

3

C5VCC 22pF CF21 OSC1

1 2 3

3

CAPT_SUP1/SERVO

U2MCP1700 2 VI GND VO 3

CONN-SIL3

J8 LS1 R94.7K RES4 2 BORVI2 100nF CF21 BUZ 1

K4 C1

X1 C6 C2100nF CF21 4MHz CRYSTAL OSC2

4

1 2 3

4

CAPT_SUP2/SERVO

C3100uF/16V CEL2V

22pF CF21

CONN-SIL3

VCC

5

Q1 R10BUZZER 4.7K RES4 BC337

U3DIGI/MaxStream XBee S2VCC 1

5

FACULTATIF

J1VCC V_BATT

V_BATT

6

1 2 3

SERVO1

L1LED

2

6

CONN-SIL3

R5 L2LED 100 RES4

RX_UC 3 5 TX_UC

J2 R44.7K RES4 BP_TEST

7

1 2 3

R710K RES4

R6100 RES4

78 14 10

SERVO2

CONN-SIL3

20 19 18 17 11 15 16 12 9 13 6 7 4

AD0/DIO0/CBUTTON AD1/DIO1 AD2/DIO2 AD3/DIO3 DOUT DIO4 ASSO/DIO5 DIN/CONFIG RTS/DIO6 CTS/DIO7 DTR/SLEEP_RQ/DIO8 RESET ON/SLEEP/DIO9 PWM0/RSSI/DIO10 NC1 PWM/DIO11 NC2 DIO12 GND

8

J3 K3BPMIN 5K typ RES4

LDR1

R812K RES4FILE NAME: DESIGN TITLE: PATH: BY:

XBEE S2 DIL

8

1 2 3

SERVO3

Robot_Fourmi.DSN Projet Robot FourmiC:\Users\Olivier\Documents\Lyce\Robot Araigne\Robot_Fourmi.DSN

DATE:

CONN-SIL3

04/11/2009PAGE:

9

1O.D. & J.D. REV:

of 1.0D E F G H JTIME:

119:33:48

9

Page 4C

TEln

A

B

K

Projet Robot Fourmi

TEln

5

Mesures Les mesures se font sur les composants passifs (rsistances, condensateurs...) et non sur les broches des circuits intgrs (risques CC). Les mesures se font par rapport la masse laide dun multimtre (mesures statiques) ou d'un oscilloscope (mesures dynamiques). 5.1 Mesures statiques sans les CI U1 et U3 mais avec U2 La carte est alimente en +5V par K4. Prsentez les rsultats sous la forme d'un tableau comparant les mesures et les rsultats attendus. Relever V1 U1, V8 U1, V19 U1, V20 U1, V2 U2, V1 U2, V3 U2, V1 U3, V10 U3, Vc et Ve Q1 Relever V1 J4, V2 J4, V3 J4, V3 J1, V1 J1, V1 J2, V1 J3, V2 J1, V2 J2, V2 J3 Relever V CAPT_LUM avec et sans lumire, V CAPT_BATT, V BP_TEST quand K3 enfonc 5.2 Mesures avec U1 Ralisez un programme qui fait clignoter la DEL L3 (DEL_BATT) la frquence de 1Hz en utilisant le squelette simple donn en annexe et les instructions output_high(), output_low() et delay_ms(). Relevez l'oscilloscope alors le signal obtenu sur R11 et vrifiez sa frquence. Relevez les signaux OSC1 et OSC2 en concordance de temps. Conclusion sur ces deux signaux.

6

Programmation du robot Fourmi 6.1 Exercice 1 : Tests des boutons et des DELs Reprendre le squelette simple disponible en annexe puis ralisez un programme qui allume la DELs L3 si BP_TEST est appuy, la DEL il gauche si l'antenne gauche est active et la DEL il droit si l'antenne droite est active. Pensez activer les rsistances de rappel interne du PIC ! 6.2 Exercice 2 : Test du buzzer, gnration de musique Gnrez un signal carr sur la broche BUZZER la frquence de 3KHz pour faire mettre un son au buzzer. Relevez l'oscilloscope Vbuzzer, VBQ1, VCQ1 en concordance de temps et rdigez une conclusion. Vous pouvez aussi gnrer de la musique (exemple music.c donn sur le rseau). 6.3 Exercice 3 : Test de la tension de batteries Lire le capteur analogique CAPT_BATT l'aide du convertisseur analogique du PIC et allumer la DEL_BATT lorsque la tension des batteries descend sous 4,4V. Pour simuler la baisse de tension des batteries, faites varier la tension de votre alimentation. 6.4 Exercice 4 : Test du capteur de luminosit (LDR) Ralisez un programme qui met un son lorsque que la lumire ambiante devient insuffisante. Il faudra donc numriser la tension CAPT_LUM l'aide du CAN du PIC et gnrer un son comme prcdemment. Une deuxime variante de ce programme est de gnrer une frquence variable destination du buzzer en fonction de la luminosit. 6.5 Exercice 5 : Test des servomoteurs A l'aide du squelette de programme pour la commande des servomoteurs, dterminez les valeurs utiliser pour positionner les pattes de la fourmi vu de derrire dans les situations suivantes: Pattes de droite (servo N ): Max arrire: Centr: Max. avant: Pattes centrale (servo N ): Relev droite: Centr: Relev gauche: Pattes de gauche (Servo N ): Max arrire: Centr: Max. avant: Relev l'oscilloscope sur un mme graphe la dure de l'impulsion l'tat haut dans les trois cas pour les pattes de droite. La dure mesure correspond-elle ce que l'on attendait ? Prcisez aussi la priode du signal de commande des servomoteurs.

Olivier DARTOIS Jacques DUPRAT

Page 5

Projet Robot Fourmi

TEln

6.6

Exercice 6 : Dplacement du robot (avant, arrire, tourner droite, tourner gauche) Pour dterminer les squences de commande des servomoteurs, compltez les tableaux ci-dessous. Testez alors en programmation vos squences l'aide du robot. Pensez mettre une temporisation d'au moins 200ms entre chaque tape. Vous raliserez donc les quatre fonctions suivantes: void Avance(void), void Recule(void), void TourneD(void) et void TourneG(void)Avant Arrire Tourne D Tourne G

6.7 Exercice 7 : Dplacement du robot de manire autonome Ralisez un programme qui fait reculer le robot et tourner celui-ci avant de repartir vers l'avant lorsqu'une de ces antennes touch un obstacle.

Olivier DARTOIS Jacques DUPRAT

Page 6

Projet Robot Fourmi

TEln

7

Programmation avance du robot Fourmi 7.1 Exercice 8 : Commande du robot par un PC l'aide d'une voie srie sans fil Il peut tre intressant de commander le robot distance grce une liaison sans fil et un PC. Pour cela, vous allez utiliser deux modules Xbee qui vont raliser une liaison srie asynchrone sans fil entre un PC et le robot. A l'aide d'un logiciel cot PC qui gre la voie srie, vous allez pouvoir commander distance votre robot. Le logiciel de commande de la voie srie sera soit Hyperterminal, soit TinyBootLoader. Un squelette d'application grant la voie srie sous interruption vous est donn en annexe. Le cahier des charges sera le suivant: des variables boolennes indiqueront l'ordre effectuer (ex: int1 o_avance; ). Ces variables seront vrai (true) si l'ordre doit s'effectuer ou faux (false) dans le cas contraire, ces variables boolennes seront testes dans la fonction principale du programme et appelleront les fonctions Avance(), Recule(), etc. en fonction de l'ordre reu, Les ordres reus seront traits avec une structure switch dans l'interruption INT_RDA (interruption rception de donnes sur la voie srie), Les ordres seront les suivants: caractre 'A' reu : la variable o_avance passe vrai caractre 'R' reu : la variable o_recule passe vrai caractre 'D' reu : la variable o_droite passe vrai caractre 'G' reu : la variable o_gauche passe vrai 7.2 Exercice 9 : Application de supervision du robot en langage GAMBAS sous Linux Plutt que d'utiliser un logiciel peu convivial pour envoyer des ordres notre robot, vous allez raliser une interface simple de commande en langage GAMBAS sous GNU/Linux. GAMBAS est un logiciel libre ressemblant beaucoup VisualBasic de Microsoft. Vous pouvez par exemple raliser une interface avec 4 boutons de directions pour commander votre robot. Chaque appui sur un bouton envoi l'ordre correspondant sur la voie srie. Comme exemple, voici l'interface de test et de commande ralis pour le robot Fourmi:

La distribution utilise est LinuxMint, une drive d'Ubuntu, trs facile installer sur un PC. 7.3 Exercice 10 : Vos propres programmes... Vous pouvez utiliser la LDR pour que votre fourmi recherche ce mettre toujours au soleil. Vous pouvez commander l'intensit lumineuse des yeux en utilisant les deux sorties MLI du PIC (Modulation de Largeur d'Impulsion ou PWM: Pulse Width Modulation). La liste est loin d'tre exhaustive, vous de mettre en place vos propres ides...

Olivier DARTOIS Jacques DUPRAT

Page 7

Projet Robot Fourmi

TEln

8

Tableaux Mesures StatiquesPt de mes Val. attendue Val. mesure Commentaires Pt de mes Val. attendue Val. mesure Commentaires

9

Consignes pour la rdaction du compte-rendu Tous les dossiers doivent avoir une premire page avec nom, prnom, classe et le projet. Sur cette mme page vous pouvez faire apparaitre le sommaire avec les numros de page. La partie thorique serait apprcier dans votre dossier, en particulier lorsque vous comparez vos rsultats de mesures avec la thorie. Ne pas oublier le dcoupage fonctionnel. Pour les documents de fabrication (typon, implantation, plan de perage) indiquez l'chelle et bien sur mettre une lgende. Pour prsenter vos mesures, un schma structurel avec les points de tests est trs bien, complt par un schma d'implantation avec ces mmes points tests c'est encore mieux. Pensez faire une nomenclature. N'oubliez pas de justifier vos mesures statiques (alim et masse sur les broches alim et masse des circuits). Prsentez vos rsultats sous forme de tableau (voir page prcdente) Pour les relevs d'oscilloscope il faut reprer prcisment les traces (avec des couleurs ou une lgende), donner les points caractristiques (minimum, maximum, frquence, etc...) Tous vos programmes doivent tre comments et originaux ! Expliquez le matriel ncessaire la programmation ainsi que la mthode de programmation.

10 Annexes Vous trouverez dans les pages suivantes : les documentations techniques du MCP1700, du 4538, de la LDR et du buzzer Les squelettes d'application en langage C pour les exercices (disponibles sur le rseau ELN) L'intrieur d'un servomoteur et son schma lectrique

Olivier DARTOIS Jacques DUPRAT

Page 8

Projet Robot Fourmi

TEln

10.1 Documentation du MCP1700

10.2 Documentation du double monostable 4538

10.3 Documentation de la LDR (Light Dependant Resistor)

Olivier DARTOIS Jacques DUPRAT

Page 9

Projet Robot Fourmi

TEln

10.4 Documentation du Buzzer

10.5 Squelette d'application simple pour PIC16F886// Squelette d'application simple pour Robot Fourmi #include // Pic utilis dans l'application #device *=16 adc=8 // Pointeur mmoire sur 16 bits et CAN en mode 8 bits #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES NOWDT HS PUT MCLR NOPROTECT NOCPD NOBROWNOUT NOIESO NOFCMEN NOLVP NODEBUG NOWRT BORV21 // // // // // // // // // // // // // Pas de chien de garde Utilisation d'un quartz externe >= 4MHz Compteur la mise sous tension (Power Up Timer) Broche MCLR active Code non protg contre la lecture EEPROM non protg contre la lecture Pas de reset si VCC descend trop bas Pas de basculement oscillateur interne/externe Pas de surveillance de l'oscillateur Pas de programmation basse tension Pas de mode dverminage pour l'ICD Mmoire de programme non protge Reset Brownout 2.1V

#use delay(clock=4000000) #use fast_io(B) #use fast_io(C)

// Frquence du quartz utilis // L'utilisateur gre les E/S sur le port B // L'utilisateur gre les E/S sur le port C

// Les define suivants permettent une meilleure lecture du code #define BUZZER PIN_C0 // Commande du buzzer par la broche C0 (sortie) #define OEIL_GAUCHE PIN_C1 // Del il gauche relie la broche C1 (sortie) #define OEIL_DROIT PIN_C2 // Del il droit relie la broche C2 (sortie) #define DEL_BATT PIN_C3 // Del BATT reli la broche C3 (sortie) #define ANT_DROITE PIN_B4 // Interrupteur droit sur broche B4 (entre) #define ANT_GAUCHE PIN_B3 // Interrupteur gauche sur broche B3 (entre) #define BP_TEST PIN_B5 // BP test sur broche B5 (entre) void initialisation(void) { setup_adc_ports(sAN0|sAN1|VSS_VDD); setup_adc(ADC_CLOCK_INTERNAL); set_tris_b(0b________); port_b_pullups(0b________); set_tris_c(0b________); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,1,1); setup_comparator(NC_NC_NC_NC); disable_interrupts(GLOBAL); } void main(void) { initialisation(); while(true) { // Votre code ici } // Fonction qui regroupe toute l'initialisation du PIC // // // // // // // // // // // // Choix des entres analogiques Horloge interne pour le CAN Choix des E/S sur port B (1:Input, 0:Output) Activation des rsistances de rappel individuellement Choix des E/S sur port C (1:Input, 0:Output) Communication SPI dsactive Compteur0 (Timer0) utilis pour la commande de servo Compteur1 dsactiv (Timer1) Compteur2 dsactiv (Timer2) Comparateurs dsactivs Dsactivation des toutes les interruptions Fin de la fonction d'initialisation

// Fonction principal // Appel de la fonction d'initialisation // Boucle infinie // Fin de la boucle infinie // Fin de la fonction principal

}

Olivier DARTOIS Jacques DUPRAT

Page 10

Projet Robot Fourmi

TEln

10.6 Squelette d'application pour la commande des servomoteurs// Squelette d'application pour la commande des servomoteurs pour Robot Fourmi #include // Pic utilis dans l'application #device *=16 adc=8 #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES #FUSES NOWDT HS PUT MCLR NOPROTECT NOCPD NOBROWNOUT NOIESO NOFCMEN NOLVP NODEBUG NOWRT BORV21 // // // // // // // // // // // // // Pas de chien de garde Utilisation d'un quartz externe >= 4MHz Compteur la mise sous tension (Power Up Timer) Broche MCLR active Code non protg contre la lecture EEPROM non protg contre la lecture Pas de reset si VCC descend trop bas Pas de basculement oscillateur interne/externe Pas de surveillance de l'oscillateur Pas de programmation basse tension Pas de mode dverminage pour l'ICD Mmoire de programme non protge Reset Brownout 2.1V

#use delay(clock=4000000) #use fast_io(B) #use fast_io(C)

// Frquence du quartz utilis // L'utilisateur gre les E/S sur le port B // L'utilisateur gre les E/S sur le port C

// Les define suivants permettent une meilleure lecture du code #define BUZZER PIN_C0 // Commande du buzzer par la broche C0 (sortie) #define OEIL_GAUCHE PIN_C1 // Del il gauche relie la broche C1 (sortie) #define OEIL_DROIT PIN_C2 // Del il droit relie la broche C2 (sortie) #define DEL_BATT PIN_C3 // Del BATT reli la broche C3 (sortie) #define ANT_DROITE PIN_B4 // Interrupteur droit sur broche B4 (entre) #define ANT_GAUCHE PIN_B3 // Interrupteur gauche sur broche B3 (entre) #define BP_TEST PIN_B5 // BP test sur broche B5 (entre) #define PCL 2 // adresse du pointeur de programme pour PIC16F876/886 // Les trois variables suivantes servent commander les servomoteurs // Il suffit de leur affecter une valeur entre 10 et 255 pour commander la rotation du servo // Ces variables sont dclares volatile car elles peuvent tre modifies tout moment volatile int8 servo1, servo2, servo3, num_etape; // Interruption du Timer0 utilis pour la commande des servomoteurs #int_TIMER0 void TIMER0_isr(void) // Cette fonction est optimise (NE PAS MODIFIER) { #asm // Passage en mode assembleur MOVF num_etape,W // Stockage dans le registre W de num_etape ADDWF PCL // Ajout de W au compteur de programme (computed GOTO) #endasm // Fin du mode assembleur GOTO etape0; // Saut l'tape concern GOTO etape1; GOTO etape2; GOTO etape3; etape0: setup_timer_0(RTCC_DIV_8|RTCC_INTERNAL); // Prdiviseur Timer0 8 (incrmentation tts les 8us) set_timer0(servo1); // Prochaine interruption dans servo1 * 8us output_b(0x01); // Servo1 1 (PIN_B0), les autres zro GOTO fin; // Fin de l'tape 0 et saut l'tape de fin etape1: set_timer0(servo2); output_b(0x02); // Servo2 1 (PIN_B1), les autres zro GOTO fin; etape2: set_timer0(servo3); output_b(0x04); // Servo3 1 (PIN_B2), les autres zro GOTO fin; etape3: output_low(PIN_B2); // Servo3 0 num_etape=255; // variable num_etape 255 (car +1 ca fera 0) setup_timer_0(RTCC_DIV_128|RTCC_INTERNAL); // Prdiviseur Timer0 128 (inc. Tts les 128us) set_timer0(110); // Prochaine interruption dans 110*128us=14080us // Temps total max: 2ms + 2ms + 2ms + 14ms = 20ms (50hz) fin: num_etape++; // Passage la prochaine tape } // Fin interruption du Timer0 void initialisation(void) { setup_adc_ports(sAN0|sAN1|VSS_VDD); setup_adc(ADC_CLOCK_INTERNAL); set_tris_b(0b________); port_b_pullups(0b________); set_tris_c(0b________); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8); // Fonction qui regroupe toute l'initialisation du PIC // // // // // // // Choix des entres analogiques Horloge interne pour le CAN Choix des E/S sur port B (1:Input, 0:Output) Activation des rsistances de rappel individuellement Choix des E/S sur port C (1:Input, 0:Output) Communication SPI dsactive Compteur0 (Timer0) utilis pour la commande de servo

Olivier DARTOIS Jacques DUPRAT

Page 11

Projet Robot Fourmi setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,1,1); setup_comparator(NC_NC_NC_NC); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); // Compteur1 dsactiv (Timer1) // Compteur2 dsactiv (Timer2) // Comparateurs dsactivs // Activation de l'interruption Timer0 // Activation des interruptions

TEln

}

servo1=servo2=servo3=74; // Position central des servomoteurs // Le timer0 part de 74 et dclenche l'interruption lorsqu'il passe 256 // soit au bout de 256-74=182 * 8us = 1456us soit 1,5ms num_etape=0; // On part de l'tape 0 // Fin de la fonction d'initialisation // Fonction principal // Appel de la fonction d'initialisation // Boucle infinie // Fin de la boucle infinie // Fin de la fonction principal

void main(void) { initialisation(); while(true) { // Votre code ici }

}

10.7 Squelette d'application pour la commande sans fil du robot Fourmi Vous trouverez ci-dessous les modifications apporter au squelette prcdent pour grer la voie srie. Seules les lignes nouvelles sont listes !// Squelette d'application pour la commande sans fil du Robot Fourmi #include // Pic utilis dans l'application #device *=16 adc=8 #use delay(clock=4000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) // Configuration voie srie volatile int8 servo1, servo2, servo3, num_etape; // Les variables boolennes ci-dessous passent vrai en fonction de l'ordre reu dans INT_RDA volatile int1 o_avance, o_recule, o_droite, o_gauche; // Interruption voie srie pour traiter les demandes depuis l'interface GAMBAS #int_RDA void RDA_isr(void) { switch (getchar()) // en fonction du caractre reu par getchar() { case '_': // Si on a reu 'A' : Marche avant fourmi o_avance=____; // la variable o_avance passe vrai break; // fin du test switch case '_': o_recule=____; break; case '_': o_droite=____; break; case '_': o_gauche=____; break; // Marche arrire fourmi

// Tourne droite

// Tourne gauche

} } void initialisation(void) { o_avance=o_recule=o_droite=o_gauche=_____; } void main() { initialisation();

// Variables initialises faux

while(true) { // En fonction de l'ordre reu, vous appelez la fonction correcte // puis remise faux de la variable concerne if if if if (o_avance) (o_recule) (o_droite) (o_gauche) { { { { avance(); o_avance=false; } recule(); o_recule=false; } tourneD(); o_droite=false; } tourneG(); o_gauche=false; }

}

}

Olivier DARTOIS Jacques DUPRAT

Page 12

2

2

Projet Robot Fourmi

R1 Q41 3 3 10k

D1

D2

Q31

1k

2

1U2:C7 9 13 4011 4011 4011 8

5

U2:D10 12 5

U3:B Q14 1 3 11 6

2

3

Olivier DARTOIS Jacques DUPRAT

U1:A2 6 4011 6 4011 4011 +88.8

C1

1uF

1

CX

2

RCX

0

4

3

R

10.8 Dmontage d'un servomoteur et schma lectrique

4538

50%

RV1 U2:A1 MF220P

U2:B3 5 1

U3:A4 2

& & &3

& & &

D3

D4

Q21

Page 13

TEln