FACULTAD DE INGENIERA EN ELECTRICIDAD Y COMPUTACIN
Optimizacin de algoritmos para seguidor de lnea utilizando tcnicas de control PID con el robot Pololu 3pi e incorporacin de control inalmbrico por radio frecuencia. TESINA DE SEMINARIO Preia la obtencin del !tulo de" INGENIERO EN ELECTRICIDAD ESPECIALIZACIN EN ELECTRNICA Y AUTOMATIZACIN INDUSTRIAL. INGENIERO EN ELECTRNICA Y TELECOMUNICACIONES. Presentado por" Diego Daid #s$uez %ran&a Daid 'iguel 'artnez (odrguez %)*+*,)I- . /0)*DO( *1O 2344 I AGRADECIMIENTO * Dios. * todas las personas $ue contribu5eron en el desarrollo de este traba&o. *l Ing. 0arlos 6aldiieso. * las personas $ue en con&unto forman a la /7PO- por brindarnos la oportunidad de ad$uirir conocimientos 5 formarnos profesionalmente. II DEDICATORIA * Dios8 nuestro creador por su amor 5 proteccin. * nuestros maestros8 por su paciencia8 bondad 5 generosidad por iluminar nuestra senda con la luz del conocimiento8 por ense9arnos a ser :tiles a los dems. * nuestros amigos 5 compa9eros8 por la alegra compartida8 por ser espritu de solidaridad8 por animarnos constantemente ;acia la culminacin de nuestra carrera. III TRIBUNAL DE SUSTENTACIN Ing. 0arlos 6aldiieso *. Profesor del 7eminario de %raduacin Ing. <ugo 6illaicencio 6. Delegado del Decano I6 DECLARACIN EXPRESA -a responsabilidad del contenido de este traba&o8 nos corresponde e=clusiamente> 5 el patrimonio intelectual del mismo a la /70)/-* 7)P/(IO( PO-I!?0@I0* D/- -I!O(*-. A(eglamento de e=menes 5 ttulos profesionales de la /7PO-B Diego Daid #s$uez %ran&a Daid 'iguel 'artnez (odrguez 6 RESUMEN /l ob&etio de este pro5ecto de tesis es lograr la implementacin de un robot seguidor de lnea con lazo de control PID para la posicin8 con la finalidad de optimizar el tiempo de reaccin de los sensores infrarro&os en seguidor de lnea. -o $ue realiza este sistema es una deteccin de la posicin del Pololu 3Pi mediante el uso de sensores infrarro&os 5 el mane&o del mismo a tras de una tar&eta #utterfl5 con &o5sticC a distancia $ue tienen integrado dispositios de radiofrecuencia8 teniendo en cuenta de $ue tanto el Pololu 3Pi como la tar&eta #utterfl5 tienen integrado pantallas -0DDs8 podemos programar una sencilla interfaz entre el usuario 5 el robot. /ste pro5ecto resalta la aplicacin de la programacin $ue se realiza mediante el microcontrolador *!'/- Eatmega32FpD 6I NDICE GENERAL *%(*D/0I'I/@!O.......................................................................................................I D/DI0*!O(I*...............................................................................................................II !(I#)@*- D/ 7)7!/@!*0IG@...............................................................................III D/0-*(*0IG@ /HP(/7*.........................................................................................I6 (/7)'/@.......................................................................................................................6 I@DI0/ %/@/(*-.......................................................................................................6I I@DI0/ D/ JI%)(*7..................................................................................................IH I@!(OD)00IG@...........................................................................................................H 0*PI!)-O 4....................................................................................................................4 4.K D/70(IP0IG@ %/@/(*- D/- P(O+/0!O........................................................4 4.4. *ntecedentes............................................................................................................4 4.2. Descripcin del pro5ecto..........................................................................................2 4.3. *plicaciones.............................................................................................................3 4.L. Descripcin del problema.........................................................................................L 4.M. Pro5ectos 7imilares..................................................................................................L 0*PI!)-O 2....................................................................................................................N 6II 2. J)@D*'/@!O !/G(I0O....................................................................................N 2.4. <erramientas de 7oftOare........................................................................................F 2.1.1. 7oftOare *6( 7tudio L.....................................................................................F 2.1.2. P(O!/)7 A6ersin N.NB..................................................................................P 2.2. <erramientas de <ardOare.....................................................................................43 2.2.4 !ar&eta #utterfl5..............................................................................................43 2.2.2 (obot Pololu 3Pi.............................................................................................43 0*PI!)-O 3..................................................................................................................4P 3. D/70(IP0IG@ / I'P-/'/@!*0IG@ D/- P(O+/0!O...............................4P 3.4 Implementacin del Pro5ecto.................................................................................4P 3.2 Descripcin del Pro5ecto Jinal..............................................................................23 3.3 Diagrama de #lo$ues del pro5ecto.....................................................................22 3.L Diagrama de Jlu&o del Pololu 3Pi.......................................................................22 3.M Diagrama de flu&o del #utterfl5..............................................................................2M 3.Q Programas principales............................................................................................2M 3.Q.4 P*(* /- *!'/%* 4QPP D/- #)!!/(J-+.................................................2Q 3.Q.2 P*(* /- *!'/%* 32FP D/- PO-O-) 3Pi..................................................2P 0*PI!)-O L..................................................................................................................LN L. 7I')-*0IG@ + P()/#*7................................................................................LN L.4 7imulacin en Proteus............................................................................................LN L.2 Imgenes del pro5ecto final...................................................................................LF 6III 0O@0-)7IO@/7 + (/0O'/@D*0IO@/7.................................................................. *@/HO7............................................................................................................................ #I#-IO%(*JI*................................................................................................................ INDICE DE FIGURAS IH Jigura4K4" (obot *ra9a RRRRRRRRRRRRRRRRRRR...L Jigura4K2" (obot combate RRRRRRRRRRRRRRRRRR...M Jigura2K4" /ntorno *6( 7tudioL .....RRRRRRRRRRRRRR...F Jigura2K2" /ntorno Proteus 6N.N ..RRRRRRRRRRRRRRR...P Jigura2K3" Pantalla -0D %rafica AL=2MB #utterfl5RRRRRRRRR.43 Jigura2KL" 6isualizacin del 'icrocontrolador *!'ega4QPp....................44 Jigura2KM" Diagrama de Distribucin Interna del #utterfl5 R.RRRRR42 Jigura2KQ" (obot Pololu 3Pi .RRRRRRRRRRRRRRRRR.43 Jigura2KN" 'odulo de (adiofrecuencia RRRRRRRRRRRRR.4F Jigura3K4" Diagrama de #lo$ues del Pro5ecto RRRRRRRRRR..22 JiguraLK4" 7imulacin del Pro5ectoRRRRRRRRRRRRR..LNKLF JiguraLK2" Imagen del Pro5ecto JuncionandoRRRRRRRRRR...LP JiguraLK3" Pololu 7eguidor de -neaRRRRRRRRRR..RRR...LP H INTRODUCCIN /n los siguientes captulos de este informe8 se e=plicar sobre la programacin e implementacin del controlador *!mega32FP del Pololu 3Pi un pe$ue9o robot autnomo8 usado para competiciones de seguimiento de lnea $ue es capaz de alcanzar elocidades ma5ores a 433 cmSs mientras realiza ueltas 5 cambios de sentido $ue no aran el olta&e de las bateras. /l primer captulo contiene una descripcin del pro5ecto8 las partes $ue lo componen 5 las funciones $ue es capaz de realizar8 adems contiene las aplicaciones ms comunes en las cuales es utilizado el pro5ecto 5 sistemas de similares caractersticas. /l segundo captulo contiene una descripcin general del softOare 5 el ;ardOare utilizado para la elaboracin del pro5ecto> entre las ;erramientas de softOare de programacin8 tenemos el *6( 7tudio L8 con sus respectias caractersticas8 el simulador de circuitos Proteus con sus funciones principales. /ntre las ;erramientas de <ardOare se encuentran" -a pantalla grfica -0D #utterfl5 de L=2M segmentos8 el Pololu 3Pi 5 el dispositio de (adiofrecuencia. /l tercer captulo contiene todo lo referente a la descripcin e implementacin del pro5ecto 5 las pruebas realizadas. /l cuarto captulo8 se muestra la simulacin final en P(O!/)7 5 los es$uemas utilizados para el correcto funcionamiento del pro5ecto. *dems se ad&untan los diagramas 5 es$uemas electrnicos. CAPTULO 1 1.- DESCRIPCIN GENERAL DEL PROYECTO 1.1. Anteceente! /n empresas mu5 importantes8 podemos obserar la aplicacin de robots como ;erramientas para facilitar o realizar ciertas tareas $ue tienen un grado de peligro 5 dificultad para los ;umanos sin influir de manera negatia en la calidad de los productos. -as aplicaciones ms comunes son el transporte de carga en la industria8 desactiadores de e=plosios8 e=ploracin de terrenos de difcil acceso e incluso se ;an utilizado en puertos de descarga. /n la rama de la instrumentacin8 la familiaridad con el control PID es constante. /s com:n obserar la instalacin8 sintonizacin 5 utilizacin de estos controladores. -a presencia de algoritmos cu5a estructura puede ser me&orada8 es la parte sustancial para este pro5ecto con control PID. /ntendimiento 5 comprensin son los elementos claes 2 para optimizar el comportamiento del lazo de control. 7e re$uiere un conocimiento especfico del proceso as como del control. /ntre las enta&as de usar el PID8 estn la unin de las caractersticas proporcional $ue prooca el producto entre la se9al de error 5 la constante proporcional para anular el efecto del error 5 establece una rpida respuesta a cambios o perturbaciones8 una integral $ue tiene como propsito restringir el error en estado estacionario8 5 la parte deriatia se manifiesta cuando ;a5 un cambio en el alor absoluto del error. )n robot seguidor de lnea se caracteriza por el empleo de mecnica8 transductores $ue aran en n:mero dependiendo de la comple&idad del pro5ecto 5 electrnica por lo $ue se encuentra en el campo de la robtica mil cu5o funcionamiento se basa en el moimiento8 sensores 5 controles $ue les permitan decidir. 7u principal misin es seguir una lnea marcada en el suelo. -as ariedades de estos dispositios an desde el seguidor de una lnea ;asta los robots $ue recorren laberintos8 entre todos comparten partes similares. 1.". De!c#$%c$&n e' %#()ect( /l funcionamiento del sistema se basa en un robot seguidor de lnea dependiendo de la comple&idad del recorrido. -os seguidores de lnea negra ms simples utilizan 2 sensores8 ubicados en la parte inferior de la estructura8 uno &unto al otro8 en nuestro caso e=isten M sensores. 0uando uno de los sensores detecta el color blanco8 significa 3 $ue el robot est saliendo de la lnea negra por ese lado. /l robot debe girar ;acia el lado contrario ;asta $ue retome su posicin sobre la lnea /l 3pi de Pololu es un pe$ue9o robot autnomo de alto rendimiento8 $ue puede competir contra otros. /l 3pi puede alcanzar elocidades por encima de los 433cmSs en lnea recta 5 da la posibilidad de cambios de sentido. Podemos afirmar $ue un robot seguidor de lnea en general posee" 7ensores infrarro&os8 dos micro motores de corriente continua8 ruedas $ue son moidas por los motores $ue son antiKdeslizantes para eitar fallas de traccin8 tar&eta de control $ue se encarga de la toma de decisiones 5 el control de los motores estn generalmente a cargo de un microcontrolador. -a tar&eta de control contiene dic;o elemento8 &unto a otros componentes electrnicos bsicos $ue re$uiere el microcontrolador. 1.*. A%'$c+c$(ne! /ntre las aplicaciones de los robots miles se encuentran el trasporte de la carga en la industria8 robots desactiadores de e=plosios8 e=ploracin de terrenos no aptos para el ;ombre> entre otras dependiendo Adel tama9o de estosB. /l campo de accin de este pro5ecto est relacionado con la optimizacin de algoritmos de control para robot seguidores de lnea8 es decir8 me&oramiento de lazos de control PID para un me&or desempe9o. L 1.,. De!c#$%c$&n e' %#(-'e.+ 'e&orar el lazo de control PID del robot seguidor de lnea Pololu 3pi8 mediante el uso de un sistema de control a tras de sensores infrarro&os8 estos sistemas son mu5 utilizados en las industrias en diferentes procesos en la aplicacin de nuestro pro5ecto se optimiza el lazo de control PID. Pero debemos tener en cuenta $ue para diferentes procesos e=isten diferentes ariables as $ue los lazos de control debern ser relacionas con el traba&o a realizar 5 los resultados $ue se debern obtener mediante el uso de esta tcnica. 1./. P#()ect(! S$.$'+#e! 1./.1 R(-(t A#+0+ /l dise9o de este modelo fue inspirado en los moimientos de una ara9a8 con sus m:ltiples patas ofrece buena estabilidad al trasladarse8 aun$ue en demostraciones se ;a obserado un moimiento lento en el aance8 el cual se muestra en la Jigura 4K4. Jigura4K4" (obot *ra9a 1./." C(.-+te M /ste tipo de robots se ;an dise9ado para combates con otros modelos robticos simplemente para demostracin o diersin de sus creadores8 poniendo a prueba sus aances8 me&oras 5 dise9os8 adems de $ue con cada dise9o 5 me&ora los creadores ;acen actualizaciones. /l cual se muestra en la figura 4K2. Jigura 4K2" (obot 0ombate Q CAPTULO " ". FUNDAMENTO TERICO /n el presente captulo se demostrar el uso de las ;erramientas de 7oftOare 5 <ardOare utilizadas para nuestro pro5ecto. *dems se indicarn ciertas caractersticas embebidas en el desarrollo del tema" /l 0ompilador %008 el simulador Proteus8 la pantalla -0D %rfica butterfl5 $ue inclu5e &o5sticC8 el microcontrolador *6( *!mega42F $ue se programar para controlar el robot PO-O-) 3PI8 5 la interfaz de radiofrecuencia /misor8 (eceptor. ".1. 1e##+.$ent+! e S(2t3+#e 2.1.1. S(2t3+#e A4R St5$( , /l programa *6( 7tudio L8 desarrollado por *!'/-> es un entorno de programacin desarrollado para microcontroladores *!'/-8 5 se lo puede utilizar de me&or forma $ue la programacin tradicional de assembler. 0aractersticas del *6( 7tudio L" N )n n:cleo del lengua&e simple8 con funcionalidades a9adidas importantes8 como funciones matemticas 5 de mane&o de arc;ios8 proporcionadas por bibliotecas. /s un lengua&e mu5 fle=ible $ue permite programar con m:ltiples estilos. )no de los ms empleados es el estructurado Tno lleado al e=tremoT )sa un lengua&e de pre procesado8 el preprocesador de 08 para tareas m:ltiples arc;ios de cdigo fuente. *cceso a memoria de ba&o niel mediante el uso de punteros. )n con&unto reducido de palabras clae. Por defecto8 el paso de parmetros a una funcin se realiza por alor. Plataforma de traba&o8 UindoOs8 -inu=. %enera un cdigo de ma$uina compatible con simuladores como Proteus Punteros a direcciones de memoria8 $ue permiten el uso de la informacin necesaria. 7e muestra la entana principal del entorno de traba&o en la Jigura 2K4. FIGURA "-16 Ent(#n( A4R St5$( , F 2.1.2. PROTEUS 74e#!$&n 8.89 P(O!/)7 ersin N.N8 desarrollado por -abcenter /lectronics> es un entorno integrado dise9ado para la realizacin completa de pro5ectos de construccin de e$uipos electrnicos en todas sus etapas" dise9o8 simulacin8 depuracin 5 construccin. /ste emulador consta de dos programas principales" *res e Isis8 5 los mdulos 67' 5 /lectra. I7I7.K Intelligent Schematic Input System A7istema de /nrutado de /s$uemas InteligenteB> es la ;erramienta $ue permite simular el es$uema elctrico del pro5ecto> incorporando una librera de ms de Q.333 modelos de dispositios digitales 5 analgicos como son" resistencias8 microcontroladores8 leds8 rels8 microprocesadores8 inclu5endo fuentes de alimentacin8 generadores de se9ales8 etc. *(/7.K *danced(outing and /diting 7oftOare A7oftOare de /dicin 5 (uteo *anzadoB> es la ;erramienta de enrutado8 ubicacin 5 edicin de componentes8 se utiliza para la fabricacin de placas de circuito impreso AP0#DsB. /n la siguiente Jigura se muestra la entana principal Jigura 2K2. P FIGURA "-"6 Ent(#n( PROTEUS 4 8.8 ".". 1e##+.$ent+! e 1+#3+#e ".".1 T+#:et+ B5tte#2') -a Pantalla -0D %rfica iene dada en segmentos AL=2MB la cual tiene incorporado un &o5sticC8 $ue se usar para el mane&o del Pololu 3pi. *dems gracias a su fle=ibilidad 5 buena isibilidad se ;a conertido en el estndar de isualizacin ms utilizado con los microcontroladores. 0omo se muestra en la Jigura 2K3. 43
JI%)(* 2K3" Pantalla -0D %rfica AL=2MB #utterfl5 ".".1.1. C+#+cte#;!t$c+! e '+ T+#:et+ B5tte#2')6 -a tar&eta #utterfl5 con microcontrolador *tmega4QP integra los siguientes parmetros" 'emoria Jlas; de 4QV#8 'emoria //P(O' M42 #5tes8 'emoria 7(*' 4V#8 pantalla -0D de L=2M segmentos8 dos timerS0ounters de F bits 8 un timerS0outer de 4Q bits8 L 0anales PU'8 Uatc;dog !imer8 comparador analgico. ".".1.". M$c#(c(nt#('+(# ATMEGA1<= * continuacin se muestra el microcontrolador *!'ega4QP Jigura 2KL 44 JI%)(* 2KL" 6isualizacin del microcontrolador *!'ega4QP de la tar&eta #utterfl5. ".".1.*. D$+>#+.+ e -'(?5e! $nte#n( e '+ t+#:et+ B5tte#2')6 F$>5#+ "-/ JI%)(* 2KM" Diagrama de distribucin interna de la tar&eta #utterfl5 *tmega4QP 42 "."." R(-(t P('('5 *P$ /l robot est totalmente ensamblado con dos micro motores de metal para las ruedas8 cinco sensores de refle=in8 una pantalla -0D de F=2 caracteres8 un buzzer8 tres pulsadores 5 ms8 todo ello conectado a un microcontroladores programable *6(. /l 3pi mide apro=imadamente P8M cm A38NB de dimetro 5 pesa alrededor de F3 gr. A28P oz.B sin bateras. /l 3pi se basa en un microcontroladores *tmel *!mega4QF a 23 '<z con 4QVb de memoria flas; 5 4Vb de memoria de datos. /l uso del *!mega4QF lo ;ace compatible con la plataforma de desarrollo *rduino. -as ;erramientas gratuitas de desarrollo en 0 5 0WW estn disponibles as como un e=tenso pa$uete de libreras $ue pueden traba&ar con el ;ardOare $ue llea integrado. /stn disponibles simples programas $ue muestran cmo traba&an los diferentes componentes 3pi. 0omo se muestra a continuacin en la figura 2KQ. JI%)(* 2KQ" (obot Pololu 3Pi 43 ".".".1 E!?5e.+ e' c$#c5$t( !$.%'$2$c+( 4L 4M "."."." T+-'+ e +!$>n+c$&n e PINES !e>@n 25nc$&n 25nc$&n AT.e>+1<= P$n ISO digitales A=3B A$uita &umper P0M para liberar el pin 4P digitalB PD38 PD48 P0M /ntradas analgicas A$uita los &umpers8 =3B P0M8 *D0Q8 *D0N motor 4 Aiz$uierdoB control A* 5 #B PDM 5 PDQ motor 2 Aderec;oB control A* 5 #B PD3 5 P#3 ,!(K(0 sensores de refle=in Aiz$uierda a der8 =MB P03 . P0L ro&o Aiz$uierdaB -/D de usuario PD4 erde Aderec;aB -/D de usuario PDN #otones de usuario Aleft to rig;t8 =3B P#48 P#L8 5 P#M #uzzer P#2 -0D control A(78 (SU8 /B PD28 P#38 5 PDL -0D data ALKbit" D#L . D#NB P#48 P#L8 P#M8 5 PDN sensor I( -/D control drie loO to turn I( -/Ds offB P0M trimmer potenciometro de usuario *D0N 2S3rds de olta&e de la batera *D0Q I07P lienas de programacin A=3B P#38 P#L8 P#M #otn de (/7! P0Q )*(! A(H 5 !HB PD3 5 PD4 I20S!UI inaccesible al usuario 7PI inaccesible al usuario ".".* RADIOFRECUENCIA6 DEFINICIN Y AO CONCEPTOS. *l estudiar este tipo de medio de transmisin de datos es importante saber $ue cual$uier transmisin de datos puede efectuarse sin ning:n tipo de ;ilo8 simplemente utilizando dispositios $ue transportan la informacin mediante ondas. Por e&emplo la informacin recibida a tras de radio 5 teleisin. -a radiofrecuencia es en efecto un tipo de onda electromagntica $ue es mu5 seme&ante a la energa luminosa8 5 tiene la misma elocidad $ue la luz $ue es 33383338333 metros por segundo. -as ondas de radio pueden generarse en una amplia gama de frecuencias8 empezando apro=imadamente de 438333 ;z 5 siguiendo a tras 4Q de millones de ;ertzios ;asta miles de millones. 7e ;an incluido tambin ondas electromagnticas8 como luz isible. -as caractersticas de propagacin de las ondas de radio a tras de la atmsfera aran en gran medida con la frecuencia 5 deben tenerse presentes a la ;ora de elegir una frecuencia para un sericio de radio en particular. -as ondas de radio se diiden en diferentes bandas de frecuencia de acuerdo con sus caractersticas de propagacin. *lgunos de los sericios tpicos asignados a las diferentes bandas de frecuencia son" 6.-.J. (adio difusin telegrfica a larga distancia. -.J. 7ericio punto a punto de larga distancia8 a5udas a la naegacin8 difusin de sonido. 7istemas de portadora por lnea. '.J. Difusin de sonido8 sericios costeros para embarcaciones8 sistemas de portadoras -neas. <.J. 7ericios punto a punto para distancias media 5 larga8 difusin de sonidos8 sistemas De portadoras por lneas. 6.<.J. 0omunicaciones a corta distancia8 difusin de t 5 sonido8 radar. ).<.J. 7ericios aireKaire 5 tierra aire. 7.<.J. 7istemas de comunicacin de microondas punto a punto8 radar. 4N /ste tipo de transmisin se realiza a tras de" microondas Infrarro&os -ser Otros ".".*.1 M&5'(! e #+$(2#ec5enc$+ 'dulos <'K!(8 uno conectado Pololu 3 Pi 5 otro conectado a la tar&eta *6( #)!!/(J-+. 0omo se muestra en la Jigura 2KN. 4F JI%)(* 2KN" 'dulos de radiofrecuencia 4P CAPTULO * *. DESCRIPCIN E IMPLEMENTACIN DEL PROYECTO 3.1 I.%'e.ent+c$&n e' P#()ect(. Para la implementacin fsica del pro5ecto se necesit de los siguientes componentes detallados a continuacin" (obot Pololu 3Pi seguidor de lnea por medio de sensores infrarro&os controlado por radiofrecuencia8 importado de )7*. 0uatro pilas triple * recargables8 $ue se utilizan como fuente de poder del Pololu 3Pi. !ar&eta #utterfl5 con &o5sticC8 en la cual 5a iene incorporada una pila de 3 oltios como fuente de poder8 importado de )7*. 0ondensadores de 43 uJ8 en con&unto al integrado '*H 2328 elean los 3 oltios de salida del #utterfl5 a un niel !!- AM oltiosB. )n regulador NF3M con dos bateras de P oltios en serie conectados al pin de entrada del mismo. 23 0omponentes electrnicos emisor 5 receptor por radiofrecuencia8 los cuales sern incorporados a nuestro pro5ecto final para eniar las se9ales de control desde la tar&eta #utterfl5 al Pololu 3Pi por medio de radiofrecuencia8 la polarizacin del dispositio receptor se tom del mismo Pololu 3Pi EPolarizacin de M oltiosD. Programador I7P8 se us para la programacin del robot Pololu 3Pi8 importado de )7*. *." De!c#$%c$&n e' P#()ect( F$n+'. *l finalizar con la programacin 5 la implementacin del prototipo8 podemos ;acer una descripcin del funcionamiento del pro5ecto" I. 7e enciende el dispositio Pololu 3PI8 cone=in por bateras triple * recargables. II. 7e inicializa el robot presionado el botn #8 el cual muestra un moimiento de motores. III. 7e presiona # nueamente en ese momento se escuc;a un sonido8 entonces el robot pololu 3Pi estar listo para recibir las ordenes de radiofrecuencia desde la tar&eta butterfl5 E/l robot debe estar sobre la pistaD I6. *l presionar el &o5sticC de la butterfl5 el robot pololu 3Pi realiza los moimientos indicados en la -0D del mdulo #utterfl5. 6. -a -0D muestra cada uno de los moimientos $ue realizar el Pololu 3pi dentro de la pista. 6I. /n el diagrama de flu&o del seguidor de lnea se encuentra la respuesta a cada uno de los cdigos recibidos8 desde el PID 4 ;asta el PIDM8 cada uno de estos indican diferentes moimientos controlados dentro de la misma pista. 24 PID4.K /s el modo normal en donde la elocidad no es tan rpida8 se trata de mantener una elocidad constante durante todo el tra5ecto. PID2.K/s el modo rpido8 se mantiene una elocidad alta $ue mantenga el e$uilibrio del robot tratando de tener una elocidad constante. PID3.K 7e emplea en el modo de tramos rpidos 5 lentos8 este modo desarrolla un incremento de elocidad ;asta un tope 5 luego un decremento ;asta casi llegar a una detencin8 luego se repite el proceso de manera cclica. PIDL.K /s una detencin total del robot en lnea recta8 si est en cura el robot intenta centrar su posicin en la lnea negra para detenerse. PIDM.K/s el modo de rectas rpidas 5 curas lentas en donde una elocidad alta es alcanzada en lnea recta 5 las curas son tomadas con lentitud. *.*D$+>#+.+ e B'(?5e! e' %#()ect( Jigura 3K4 muestra el diagrama de blo$ues de nuestro pro5ecto. 22 FIGURA *-16 D$+>#+.+ e -'(?5e! e' %#()ect( *., D$+>#+.+ e F'5:( e' P('('5 *P$ 23 2L *./ Diagrama de fujo del u!!erf" 2M *.<P#(>#+.+! %#$nc$%+'e!. 2Q 3.#.1$ARA E% AT&EGA 1#'$ DE% UTTERF%( Xinclude YarSio.;Z Xinclude YarSinterrupt.;Z Xinclude YarSpgmspace.;Z Xinclude Yintt5pes.;Z Xinclude Tm5defs.;T Xinclude T-0D[functions.;T Xinclude T-0D[drier.;T Xinclude Tbutton.;T Xinclude Tusart.;T int mainAoidB\ P%'[P statete=t ] P7!(AT0O@!(O- (JTB> uintF[t input>
SS Disable *nalog 0omparator ApoOer saeB *07( ] A4YY*0DB>
SS Disable Digital input on PJ3K2 ApoOer saeB DID(3 ] ANYY*D03DB> SS /nable pullups PO(!# ] A4MYYP#3B> PO(!/ ] A4MYYP/LB>
#utton[InitAB> SS Initialize pin c;ange interrupt on &o5sticC
-0D[InitAB> SS initialize t;e -0D 0-VP( ] A4YY0-VP0/B> SS set 0locC Prescaler 0;ange /nable SS L';z 0-VP( ] A3YY0-VP74B ^ A4YY0-VP73B> )7*(![InitA2MB> SS PQ33 #P7
breaC> case V/+[@/H!" statete=t ] P7!(AT(*PIDOTB> )sart[!=A`r`B>
breaC> case V/+[P(/6" statete=t ] P7!(AT!(*'O7 (*PIDO7 + -/@!O7TB> )sart[!=A`l`B>
breaC> case V/+[P-)7"
statete=t ] P7!(ATD/!/@IDOTB> )sart[!=A`u`B>
breaC> case V/+['I@)7" statete=t ] P7!(AT(/0!*7 + 0)(6*7TB> )sart[!=A`d`B>
breaC> 2F default" breaC>
_
_
return 3> _ )7*(!" Xinclude YarSio.;Z Xinclude Tusart.;T Sa 2M. 'a5 233M K adapted to arlibc iom4QF.; ersion 4.4N aS oid )7*(![InitA unsigned int ubrrB Sa *--OU7 7/!!I@% OJ #P7 aS \ )#((< ] Aunsigned c;arBAubrrZZFB> )#((- ] Aunsigned c;arBubrr> )07(* ] A3YY)2HB> )07(# ] A4YY(H/@B^A4YY!H/@B^A3YY(H0I/B^A3YY)D(I/B> )07(0 ] A3YY)'7/-B^A3YY)P'3B^A3YY)7#7B^A3YY)07b3B^A3YY)0PO-B> _ oid )sart[!=Ac;ar dataB Sa !(*@7'I77IO@aS \ O;ile AcA)07(* d A4YY)D(/BBB> )D( ] data> _ c;ar )sart[(=AoidB Sa (/0/P!IO@aS \ O;ile AcA)07(* d A4YY(H0BBB> return )D(> _ 3.#.2$ARA E% AT&EGA 32)$ DE% $O%O%U 3$i Xinclude YarSio.;Z 2P Xinclude YpololuS3pi.;Z Xinclude YarSpgmspace.;Z Sa M U*+7 UI!< PID JO--OU/( U<I0< <*6/ (*DIO 0O@!(O- aS Sa Protot5pes aS oid Init)*(! Aunsigned int ubrrB> unsigned c;ar (eceie#5te AoidB> SS Introductor5 messages. !;e TP(O%'/'T identifier causes t;e data to SS go into program space. const c;ar Oelcome[line4ef P(O%'/' ] T PololuT> const c;ar Oelcome[line2ef P(O%'/' ] T3g=fN (obotT> const c;ar demo[name[line4ef P(O%'/' ] TPID -ineT> const c;ar demo[name[line2ef P(O%'/' ] TfolloOerT> SS * couple of simple tunes8 stored in program space. const c;ar Oelcomeef P(O%'/' ] TZg32ZZc32T> const c;ar goef P(O%'/' ] T-4Q cdegregLT> SS Data for generating t;e c;aracters used in load[custom[c;aracters SS and displa5[readings. #5 reading leelsef starting at arious SS offsets8 Oe can generate all of t;e N e=tra c;aracters needed for a SS bargrap;. !;is is also stored in program space. const c;ar leelsef P(O%'/' ] \ 3b333338 3b333338 3b333338 3b333338 3b333338 3b333338 3b333338 3b444448 3b444448 3b444448 3b444448 3b444448 3b444448 3b44444 33 _> SS !;is function loads custom c;aracters into t;e -0D. )p to F SS c;aracters can be loaded> Oe use t;em for N leels of a bar grap;. oid load[custom[c;aractersAB \ lcd[load[custom[c;aracterAleelsW383B> SS no offset8 e.g. one bar lcd[load[custom[c;aracterAleelsW484B> SS tOo bars lcd[load[custom[c;aracterAleelsW282B> SS etc... lcd[load[custom[c;aracterAleelsW383B> lcd[load[custom[c;aracterAleelsWL8LB> lcd[load[custom[c;aracterAleelsWM8MB> lcd[load[custom[c;aracterAleelsWQ8QB> clearAB> SS t;e -0D must be cleared for t;e c;aracters to taCe effect _ SS !;is function displa5s t;e sensor readings using a bar grap;. oid displa5[readingsAconst unsigned int acalibrated[aluesB \ unsigned c;ar i> forAi]3>iYM>iWWB \ SS Initialize t;e arra5 of c;aracters t;at Oe Oill use for t;e SS grap;. )sing t;e space8 an e=tra cop5 of t;e oneKbar SS c;aracter8 and c;aracter 2MM Aa full blacC bo=B8 Oe get 43 SS c;aracters in t;e arra5. const c;ar displa5[c;aracterse43f ] \` `83838482838L8M8Q82MM_> SS !;e ariable c Oill ;ae alues from 3 to P8 since SS calibrated alues are in t;e range of 3 to 43338 and SS 4333S434 is P Oit; integer mat;. c;ar c ] displa5[c;aractersecalibrated[alueseifS434f> SS Displa5 t;e bar grap; c;aracter. print[c;aracterAcB> _ _ SS Initializes t;e 3pi8 displa5s a Oelcome message8 calibrates8 and SS pla5s t;e initial music. oid initializeAB \ unsigned int counter> SS used as a simple timer unsigned int sensorseMf> SS an arra5 to ;old sensor alues 34 pololu[3pi[initA2333B> load[custom[c;aractersAB> SS load t;e custom c;aracters SS Pla5 Oelcome music and displa5 a message print[from[program[spaceAOelcome[line4B> lcd[goto[=5A384B> print[from[program[spaceAOelcome[line2B> pla5[from[program[spaceAOelcomeB> dela5[msA4333B> clearAB> print[from[program[spaceAdemo[name[line4B> lcd[goto[=5A384B> print[from[program[spaceAdemo[name[line2B> dela5[msA4333B> SS Displa5 batter5 oltage and Oait for button press O;ileAcbutton[is[pressedA#)!!O@[#BB \ int bat ] read[batter5[millioltsAB> clearAB> print[longAbatB> printATm6TB> lcd[goto[=5A384B> printATPress #TB> dela5[msA433B> _ SS *lOa5s Oait for t;e button to be released so t;at 3pi doesn`t SS start moing until 5our ;and is aOa5 from it. Oait[for[button[releaseA#)!!O@[#B> dela5[msA4333B> SS *utoKcalibration" turn rig;t and left O;ile calibrating t;e SS sensors. forAcounter]3>counterYF3>counterWWB \ ifAcounter Y 23 ^^ counter Z] Q3B set[motorsAL38KL3B> else set[motorsAKL38L3B> SS !;is function records a set of sensor readings and Ceeps SS tracC of t;e minimum and ma=imum alues encountered. !;e 32 SS I([/'I!!/(7[O@ argument means t;at t;e I( -/Ds Oill be SS turned on during t;e reading8 O;ic; is usuall5 O;at 5ou SS Oant. calibrate[line[sensorsAI([/'I!!/(7[O@B> SS 7ince our counter runs to F38 t;e total dela5 Oill be SS F3a23 ] 4Q33 ms. dela5[msA23B> _ set[motorsA383B>
SS Displa5 calibrated alues as a bar grap;. O;ileAcbutton[is[pressedA#)!!O@[#BB \ SS (ead t;e sensor alues and get t;e position measurement. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS Displa5 t;e position measurement8 O;ic; Oill go from 3 SS AO;en t;e leftmost sensor is oer t;e lineB to L333 AO;en SS t;e rig;tmost sensor is oer t;e lineB on t;e 3pi8 along SS Oit; a bar grap; of t;e sensor readings. !;is alloOs 5ou SS to maCe sure t;e robot is read5 to go. clearAB> print[longApositionB> lcd[goto[=5A384B> displa5[readingsAsensorsB> dela5[msA433B> _ clearAB> printATOVcTB> SS Pla5 music and Oait for it to finis; before Oe start driing. pla5[from[program[spaceAgoB> O;ileAis[pla5ingABB> _ SS !;is is t;e main function8 O;ere t;e code starts. *ll 0 programs SS must ;ae a mainAB function defined someO;ere. oid main AB 33 \ unsigned int sensorseMf> SS an arra5 to ;old sensor alues unsigned int last[proportional]3> long integral]3> int contador4]3> int contador2]3> c;ar &> c;ar last&]`u`> initializeAB>
Init)*(!A42PB>
O;ileA4B\ & ] (eceie#5teAB>
if A& ]] `c`B \ last&]`c`> SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. 3L int poOer[difference ] proportionalSM W integralSN333W deriatieaN> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ] 433> ifApoOer[difference Z ma=B poOer[difference ] ma=> ifApoOer[difference Y Kma=B poOer[difference ] Kma=> ifApoOer[difference Y 3B set[motorsAma=WpoOer[difference8 ma=B> else set[motorsAma=8 ma=KpoOer[differenceB> _ else if A&]]`r`B \ last&]`r`> SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. 3M int poOer[difference ] proportionalSMW integralSN333 W deriatieaN> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ] 4M3> ifApoOer[difference Z ma=B poOer[difference ] ma=> ifApoOer[difference Y Kma=B poOer[difference ] Kma=> ifApoOer[difference Y 3B set[motorsAma=WpoOer[differenceW238ma=B> else set[motorsAma=8 ma=KpoOer[differenceW23B>
_ else if A&]]`l`B \ last&]`l`> contador4]3> SS !;is is t;e Tmain loopT K it Oill run foreer. for Acontador4]3>contador4Y433>contador4WWB \ dela5[msAFB> SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> 3Q SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ]proportionalS43WintegralSF333Wderiatiea3S2> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ]4M3> ifApoOer[difference Z ma=B poOer[difference ] ma=> ifApoOer[difference Y Kma=B poOer[difference ] Kma=> ifApoOer[difference Y 3B set[motorsAma=WpoOer[differenceWM8ma=Kcontador4B> else set[motorsAma=Kcontador48 ma=KpoOer[differenceWMB> _ contador2]433> for Acontador2]]433>contador2Z3>contador2]contador2K4B \ dela5[msAFB> SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> 3N SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ]proportionalSMWintegralSF333WderiatieaN> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ]4M3> ifApoOer[difference Z ma=B poOer[difference ] ma=> ifApoOer[difference Y Kma=B poOer[difference ] Kma=> ifApoOer[difference Y 3B set[motorsAma=WpoOer[differenceWM8ma=Kcontador4B> else set[motorsAma=Kcontador48 ma=KpoOer[differenceWMB> _
_ else if A&]]`u`B \ last&]`u`> SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e 3F SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ]proportionalS43WintegralSF333Wderiatiea3S2> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. ifAApoOer[differenceY]AM3WintegralSF333WderiatieaNBBdApoOer[differenceZ]AK M3WintegralSF333WderiatieaNBBB set[motorsA383B>
_ else if A&]]`d`B \ last&]`d`> SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> 3P SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ]proportionalSMWintegralSF333WderiatieaN> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ]F3> ifAApoOer[differenceY]A433WintegralSF333WderiatieaNBBdApoOer[differenceZ]AK 433WintegralSF333WderiatieaNBBB set[motorsAma=8ma=B>
ifApoOer[differenceZA433WintegralSF333WderiatieaNBB set[motorsA3M83B> ifApoOer[differenceYAK433WintegralSF333WderiatieaNBB set[motorsA383MB> _ else if A&]]`O`B\ &]last&> if A&]]`c`B\ SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> L3 SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ] proportionalSM W integralSN333 W deriatieaN> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ] 433> ifApoOer[difference Z ma=B poOer[difference ] ma=> ifApoOer[difference Y Kma=B poOer[difference ] Kma=> ifApoOer[difference Y 3B set[motorsAma=WpoOer[difference8 ma=B> else set[motorsAma=8 ma=KpoOer[differenceB> _ if A&]]`r`B\ SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ] proportionalSMW integralSN333 W deriatieaN> L4 SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ] 4M3> ifApoOer[difference Z ma=B poOer[difference ] ma=> ifApoOer[difference Y Kma=B poOer[difference ] Kma=> ifApoOer[difference Y 3B set[motorsAma=WpoOer[differenceW238ma=B> else set[motorsAma=8 ma=KpoOer[differenceW23B> _
if A&]]`l`B \ contador4]3> SS !;is is t;e Tmain loopT K it Oill run foreer. for Acontador4]3>contador4Y433>contador4WWB \ dela5[msAFB> SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn L2 SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ]proportionalS43WintegralSF333Wderiatiea3S2> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ]4M3> ifApoOer[difference Z ma=B poOer[difference ] ma=> ifApoOer[difference Y Kma=B poOer[difference ] Kma=> ifApoOer[difference Y 3B set[motorsAma=WpoOer[differenceWM8ma=Kcontador4B> else set[motorsAma=Kcontador48 ma=KpoOer[differenceWMB> _ contador2]433> for Acontador2]]433>contador2Z3>contador2]contador2K4B \ dela5[msAFB> SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn L3 SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ]proportionalS43WintegralSF333Wderiatiea3S2> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ]4M3> ifApoOer[difference Z ma=B poOer[difference ] ma=> ifApoOer[difference Y Kma=B poOer[difference ] Kma=> ifApoOer[difference Y 3B set[motorsAma=WpoOer[differenceWM8ma=Kcontador4B> else set[motorsAma=Kcontador48 ma=KpoOer[differenceWMB> _ _ if A&]]`u`B\SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ]proportionalSMWintegralSF333WderiatieaN> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. LL ifAApoOer[differenceY]AM3WintegralSF333WderiatieaNBBdApoOer[differenceZ]AK M3WintegralSF333WderiatieaNBBB set[motorsA383B>
_ if A&]]`d`B\ SS %et t;e position of t;e line. @ote t;at Oe amusta proide SS t;e TsensorsT argument to read[lineAB ;ere8 een t;oug; Oe SS are not interested in t;e indiidual sensor readings. unsigned int position ] read[lineAsensors8I([/'I!!/(7[O@B> SS !;e TproportionalT term s;ould be 3 O;en Oe are on t;e line. int proportional ] AAintBpositionB K 2333> SS 0ompute t;e deriatie Ac;angeB and integral AsumB of t;e SS position. int deriatie ] proportional K last[proportional> integral W] proportional> SS (emember t;e last position. last[proportional ] proportional> SS 0ompute t;e difference betOeen t;e tOo motor poOer settings8 SS m4 K m2. If t;is is a positie number t;e robot Oill turn SS to t;e rig;t. If it is a negatie number8 t;e robot Oill SS turn to t;e left8 and t;e magnitude of t;e number determines SS t;e s;arpness of t;e turn. int poOer[difference ]proportionalSMWintegralSF333WderiatieaN> SS 0ompute t;e actual motor settings. Ue neer set eit;er motor SS to a negatie alue. const int ma= ]F3> ifAApoOer[differenceY]A433WintegralSF333WderiatieaNBBdApoOer[differenceZ]AK 433WintegralSF333WderiatieaNBBB set[motorsAma=8ma=B>
_ _ SaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaS Sa Initialize )*(! aS oid Init)*(! Aunsigned int ubrrB \ )#((3< ] Aunsigned c;arBAubrrZZFB> )#((3- ] Aunsigned c;arBubrr> )07(3* ] A3YY)2H3B>
Sa /nable )*(! receier aS )07(3# ] A4 YY (H/@3B > Sa set to F data bits8 4 stop bit aS )07(30 ] A3YY)7#73B ^ A3 YY )07b33B> _ Sa (ead and Orite functions aS unsigned c;ar (eceie#5te AoidB \ Sa Uait for incomming data aS O;ile AcA)07(3* d A4 YY (H03BBB\ return `O`>_ Sa (eturn t;e data aS return )D(3> LQ _ SaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaS CAPTULO , ,. SIMULACIN Y PRUEBAS *.1 S$.5'+c$&n en P#(te5! %racias a la a5uda de la ;erramienta de simulacin Proteus8 se logr mostrar el funcionamiento bsico de nuestro pro5ecto. /n la primera figura LK4 se muestra el es$uemtico simplificado del robot pololu con unos motores D0 e intentando simular a los dos micromotores del robot8 ambos an conectados a un drier $ue en este caso es el -2P3D $ue recibe las se9ales del microcontrolador. Dependiendo de las se9ales de los sensores se da el moimiento de los motores $ue mueen al seguidor de lnea. 0omo se muestra en la Jigura LK4 $ue se puede obserar a continuacin. LN FIGURA ,-16 SIMULACIN DEL PROYECTO -a simulacin de nuestro robot Pololu 3Pi lo ;emos implementado con el uso de arios elementos como motores para representar el moimientos conectados a una fuente de L bateras triple * presionamos los pus; buttons para simular la se9al $ue emite la tar&eta #utterfl5. LF *.2 I.B>ene! e' %#()ect( 2$n+' /n la Jigura LK2 se muestra la tar&eta #utterfl5 ensamblada en una tar&eta electrnica la cual tiene la batera de P oltios con un regulador de M oltios para alimentar al dispositio de radiofrecuencia8 para la tar&eta #utterfl5 se usa una pila de 3oltios independiente. 0omo se muestra en la figura LK2. FIGURA ,-"6 I.+>en e' %#()ect( 25nc$(n+n( /l inicio del pro5ecto empieza mostrando en la pantalla -0D seg:n se presione el &o5sticC la orden $ue ena al Pololu 3Pi pro5ecto. *dems nos pide presionar la tecla # del PO-O-) para $ue los motores 5 se sensores puedan inicializarse8 nueamente se presiona # para $ue el Pololu 3Pi entre en modo de recepcin de la se9al de radiofrecuencia. 0omo se muestra en la Jigura LK3. LP FIGURA ,-*6 P('('5 Se>5$(# e L;ne+. *l momento del eni de la se9al por parte de butterfl5 se podr obserar brillar unos leds $ue tienen los mdulos de radiofrecuencia8 estos leds nos indicarn $ue las se9ales estn siendo eniadas 5 recibidas respectiamente8 cuando el robot reciba las ordenes este e&ecutara la programacin asignada para sus respectias ordenes con los diferentes lazos PID. CONCLUSIONES Y RECOMENDACIONES -as conclusiones son" 4. @uestro pro5ecto realizado es un prototipo para mostrar uno de los muc;os usos de los lazos de control PID8 en nuestro caso mediante la deteccin de la se9al de posicin por sensores infrarro&os8 del robot Pololu 3Pi seguidor de lnea. 2. -a optimizacin del lazo de control PID permite un incremento importante de elocidad 5 el control de la elocidad en diferentes tipos de tramos de la pista8 tanto en las rectas como en los curas8 empleamos la debida operacin para mantener una elocidad deseada en el tramo en el $ue se encuentre. 3. -as funciones $ue gobiernan el moimiento de los motores8 sensores infrarro&os son de sencilla aplicacin. -as libreras aplicadas pueden presentarnos un buen seguimiento de los alores $ue ;an sido obtenidos por los sensores de energa 5 de posicin en la pista8 necesarios para el buen desenolimiento del seguidor de lnea. L. /l dise9o 5 el prototipo se lo pueden tomar para comparar con otros modelos de robot seguidores de lnea 5 as detectar diferencias8 enta&as8 desenta&as para posteriores estudios e implementacin de me&oras8 reconociendo $ue el mundo est en constante cambio. -as recomendaciones son" 1. Para el uso de los sensores infrarro&os se debe dise9ar una pista donde claramente se distinga de color negro el camino a seguir 5 la plataforma de color blanco8debido a $ue los sensores son mu5 sensibles a cambios de colores 5 nos puede ocasionar una mala lectura lo cual ;ace salir de pista a nuestro robot. 2. Debemos tener en cuenta la inercia del robot con su antena8 debido a $ue la elocidad en curas mu5 pronunciadas8 es peligrosa para el robot. 3. /s recomendable usar bateras del tipo recargables 5a $ue nuestro robot demanda un consumo de energa moderado. 7i usaramos las pilas normales8 esto representara un alto costo a largo plazo 5 muc;o ma5or la contaminacin del medio ambiente debido a los $umicos $ue estas contienen. 4. Debemos tener en cuenta $ue la tar&eta butterfl5 no puede proeer de muc;a energa al mdulo de radio frecuencia 5 fue necesario implementar un circuito para suministrarle energa a tras de una fuente al dispositio de transmision de datos. ANEXOS BIBLIOGRAFA 4. %O@b*-/b O70*(8 0O'O /'P/b*( 0O@ /- (O#O! PO-O-)8 ;ttp"SSblog.bricogeeC.comSnoticiasSroboticaScomoKempezarKconKelKsigueKlineasK3piK deKpololuS, 06 de Enero del 2011. 2. 2334K233P PO-O-) 0O(PO(*!IO@8 7*'P-/ P(Oh/0! PO-O-)8 http://www.sparkfun.com/datasheets/Robotcs/3p!wall!follower.pdf, 16 de febrero 2011. 3. <*hI (/b*8 6ID/O7 D/- (O#O! PO-O-) 3PI J)@0IO@*'I@/!O8 ;ttp"SScode.google.comSpS$uicCanddirt5SOiCiSPololu3pi(obot , 22 de febrero 2011. L. <O77/I@ /%<#*-I8 D/70*(%* D/- *6( 7!)DIO L.38 ;ttp"SSOOO.atmel.comSmicrositeSar[studio[MSdefault.aspi source]cmsdicn];map4K*6([7!)DIOdici]apr[23448 23 de febrero 2344. M. (//- 7Ibb-/8 P(OD)0!O7 *!'/-8 ;ttp"SSOOO.atmel.comSproductsS*!P4S8 23 febrero 2344. Q. (//7 /6/(8 D/70(IP0IG@ D/- 'I0(O0O@!(O-*DO( *!'/- #)!!/(J-+8 ;ttp"SSstore.atmel.comSPartDetail.asp=i$]p"43M333M48 2L febrero 2344.