You are on page 1of 75

ESCUELA SUPERIOR POLITCNICA DEL LITORAL

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



2N
O;ile A4B
\
if Astatete=tB\
-0D[puts[fAstatete=t8 4B>
-0D[0olonA3B>
statete=t ] @)-->
_


input ] getCe5AB> SS (ead buttons

sOitc; AinputB \
case V/+[/@!/("


statete=t ] P7!(AT@O('*-TB>
)sart[!=A`c`B>


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>

ifApoOer[differenceZAM3WintegralSF333WderiatieaNBB
set[motorsA3M83B>
ifApoOer[differenceYAKM3WintegralSF333WderiatieaNBB
set[motorsA383MB>




_
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>

ifApoOer[differenceZAM3WintegralSF333WderiatieaNBB
set[motorsA3M83B>
ifApoOer[differenceYAKM3WintegralSF333WderiatieaNBB
set[motorsA383MB>


_
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>

LM
ifApoOer[differenceZA433WintegralSF333WderiatieaNBB
set[motorsA3M83B>
ifApoOer[differenceYAK433WintegralSF333WderiatieaNBB
set[motorsA383MB>
_

_

_
_
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.

You might also like