Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Autores:
Andrs Patricio Cabrera Flor
Gabriel Alfonso Delgado Oleas
Director:
Hugo Marcelo Torres Salamea
Cuenca, Ecuador
2014
DEDICATORIA
A mis padres y mis abuelos, los que me
han enseado a superarme un da a la
vez y que, a pesar de todas las
dificultades,
han
ayudado
Andrs Cabrera.
iii
DEDICATORIA
Este trabajo va dedicado a mis padres
Carlos y Nancy por haberme apoyado
incondicionalmente en el camino de
mis estudios. A mi hermana Kaly por
haberme dado el gran ejemplo de lucha
y sacrificio. A mi hermana Ximena
quien
ha
motivacin
Gabriel.
sido
mi
permanente
iv
AGRADECIMIENTO
Agradezco
Dios
por
haberme
Andrs Cabrera
AGRADECIMIENTO
Agradezco a Dios quien me dio la vida
y la salud, a mi amigo PATO quien me
ha enseado que la vida hay que
construirla da a da, a mis amigos de la
Universidad con quienes he compartido
muchsimos momentos de estudio, de
cansancio, de risas A la Junta
acadmica de Ingeniera Electrnica
(Ing. Santiago Mora, Lcdo. Leopoldo
Vzquez, Ing. Francisco Vzquez), al
Decano de la Facultad de Ciencia y
Tecnologa
Ing.
Germn
Ziga,
Gabriel.
vi
RESUMEN
La presente tesis tiene como finalidad desarrollar un robot mvil capaz de obtener
informacin del entorno de una mina a travs de un conjunto de sensores. Esta
informacin se enva a un computador mediante un enlace Wi-Fi para recrear el mapa
en 2 dimensiones de la mina, y mostrar datos importantes como temperatura, humedad,
gas metano y video en tiempo real.
Para el control, adquisicin de datos de los sensores y comunicaciones del robot se han
implementado tarjetas de microcontroladores con distintas prestaciones. Estas tarjetas
se han configurado para formar un solo sistema autnomo y compacto dentro del robot.
vii
ABSTRACT
This thesis aimed to develop a mobile robot able to obtain information from a mine
environment by a set of sensors. This information is sent to a computer using a Wi-Fi
link to recreate a 2 dimensional mine map, and to show important data such as
temperature, humidity, methane and video in real time.
For robots control logic, data sensors acquisition and data communications,
microcontroller boards with different specs are implemented. These boards are
configured to form a single self-contained, compact system within the robot.
viii
NDICE DE CONTENIDOS
DEDICATORIA ......................................................................................................... ii
AGRADECIMIENTO .............................................................................................. iv
RESUMEN ................................................................................................................. vi
ABSTRACT .............................................................................................................. vii
INTRODUCCIN ..................................................................................................... 1
ix
xi
xii
xiii
NDICE DE FIGURAS
xiv
xv
xvi
xvii
xviii
NDICE DE TABLAS
xix
NDICE DE ANEXOS
INTRODUCCIN
1. CAPTULO 1
MARCO TERICO
En este captulo se describirn los robots mviles, en especial los de tipo terrestre que
usan ruedas o dispositivos similares de locomocin. Se describirn varias de las
principales caractersticas de los mismos, indicando cules son los mejores y ms
comnmente utilizados para desplazarse en caminos no convencionales. Adems, se
realizar una investigacin de robots mviles aplicados en la minera o exploracin.
Tambin se tratar brevemente acerca de la actividad minera en nuestro pas, en
especial sobre minas subterrneas, los riesgos que implican para el personal que
ingresa a las mismas, y las ventajas de un robot explorador para brindar informacin
detallada que brinde mayor seguridad y evite accidentes innecesarios.
En los ltimos aos, los robots mviles han sido el tema de investigacin preferido en
muchos laboratorios y universidades. Esto se debe a que son excelentes plataformas
de enseanza y aplicacin de teoras y tcnicas, teniendo adems aplicaciones en gran
cantidad de campos de la industria, la milicia, e incluso el hogar.
Robots areos.
Robots acuticos.
Los robots con ruedas poseen varias ventajas con respecto a otros tipos de locomocin
en tierra. Usualmente son diseados para que todas o la mayora de las ruedas estn en
contacto con el suelo, proporcionando al robot un equilibrio casi constante. Ya que el
equilibrio no es un problema, el campo de investigacin en robots con ruedas se
concentra en problemas de traccin, maniobrabilidad y control dentro de su entorno.
Estos parmetros estn fuertemente influenciados por el diseo, nmero y disposicin
de las ruedas. A continuacin, se describen estos parmetros.
1.1.2. Maniobrabilidad
Los grados de libertad de un robot mvil con ruedas son tres: posicin en eje X, en eje
Y, y ngulo u orientacin del vehculo. Se conoce como grados de libertad
diferenciables a los grados de libertad completamente controlables por el robot. Por
ejemplo, un robot en forma de bicicleta no controla su orientacin de manera directa.
Por otro lado, un robot omnidireccional controla todos sus grados de libertad, y puede
cambiar su posicin en los ejes y su orientacin de manera directa.
1.1.4. Controlabilidad
Los tipos de ruedas y su disposicin son muy variados dentro de los robots mviles.
Estos parmetros se eligen tomando en cuenta los criterios de estabilidad,
maniobrabilidad y controlabilidad necesarios para cada tipo de aplicacin y entorno
de movimiento del robot. En este apartado se analizarn los principales modelos
utilizados en los robots mviles.
Es un modelo especial basado en tres ruedas controladas por dos motores. El primer
motor hace girar las tres ruedas, que siempre estn direccionadas en el mismo sentido,
para generar movimiento lineal de avance en lnea recta. El segundo motor permite el
cambio de direccin de las tres ruedas para orientar el cuerpo en los giros. Este robot
se considera casi omnidireccional, aunque no puede realizar giros sin antes detenerse
y orientar sus ruedas. Este modelo es eficiente en medio ambientes controlados y
conocidos, donde el giro en tres ruedas y la orientacin son posibles gracias a la
regularidad del terreno y el conocimiento del entorno (2).
Figura 1.1 Esquema de un modelo sncrono. El robot puede moverse en cualquier direccin, pero su
orientacin no es controlable (1).
Este diseo posee dos motores coaxiales a cada lado, los cuales estn fijos a la
estructura y mueven una rueda cada uno. Como se haba mencionado en apartados
anteriores, para una estabilidad aceptable se debe apoyar en una tercera o cuarta rueda
sin traccin, las cuales pueden ser ruedas pivotantes o ruedas de tipo esfera. Este
modelo es ms sencillo en su diseo mecnico, ya que no incluye rotaciones en los
ejes de las ruedas como el modelo de Ackermann. Sin embargo, su control es un tanto
ms complejo debido a la necesidad de sincronizacin de los motores de las ruedas
(2).
10
Este modelo puede considerarse un caso especial del modelo diferencial. Se distingue
por su mejor maniobrabilidad en terreno irregular, por lo cual es muy utilizado en
vehculos agrcolas, tractores, excavadores y tanques. Su diseo ms simple consta de
dos motores independientes a cada lado, conectados a las orugas. Estas orugas son un
conjunto de eslabones que aumentan la superficie de contacto de las ruedas
permitiendo distribuir de una forma ms equitativa el peso del vehculo. Este diseo
evita que el vehculo quede atascado en superficies inestables, pudindose disear
vehculos con un peso total mucho mayor a los diseados con ruedas comunes. Sin
embargo, el uso de orugas aumenta en gran cantidad la energa utilizada en los
motores, y adems produce gran dificultad e imprecisin en la realizacin de giros (1).
11
Los robots autnomos son aquellos que pueden realizar tareas en ambientes variables
sin la gua continua de un humano. Muchos tipos de robots tienen grados distintos de
autonoma y pueden reflejarla de varias maneras: desde exploracin espacial, hasta
limpieza de pisos y tratamiento de aguas.
Para obtener informacin de su entorno, los robots estn dotados de una gran variedad
de sensores. Los objetivos de los sensores en un robot autnomo son la localizacin y
navegacin.
1.1.6.1. Localizacin
12
1.1.6.2. Mapeo
13
El ltimo aspecto lo componen los cambios del entorno. Algunos cambios son
mnimos como nuevas construcciones en un edificio, pero otros son recurrentes y
rpidos, como el movimiento de muebles, puertas, autos de un estacionamiento,
escombros, etc. Este dinamismo del ambiente puede producir errores en la creacin de
mapas y en la medicin de los sensores.
Figura 1.8 Robot experimental para tneles de minera (National Robotics Engineering Center).
Fuente: Carnegie Mellon. Anglo American Partner on Mining Robotics [en lnea]. 9 de enero de 2013.
Disponible en web: <http://www.laserfocusworld.com/articles/2013/01/carnegie-mellon-and- angloamerican-plc -sign-agreement-to-develop-mining- robots//1357940721553.jpg>.
Carnegie Mellon and Anglo American PLC sign agreement to develop mining robots [en lnea].
Pittsburgh: John Wallace, 11 enero 2013 [8 de marzo de 2013]. Disponible en web:
<http://www.laserfocusworld.com/articles/2013/01/carnegie-mellon-and-anglo-american-plc-signagreement-to-develop-mining-robots.html>.
14
15
Esta ley, adems, obliga a la pequea minera a pagar regalas al Estado del 3%,
suponiendo una recaudacin de USD 31 millones. La minera a gran escala debe pagar
una regala mnima del 5%, representando solo para el Proyecto Mirador un anticipo
de USD 40 millones (7). En el total de los proyectos, se estima una inversin inicial
de USD 3600 millones, exportndose el mineral por alrededor de USD 3 700 millones,
representado el 14% de las exportaciones anuales y el 5,6% del producto interno bruto
PIB2.
INVEC. Oportunidades en el sector minero a gran escala del Ecuador [en lnea]. Cuenca, Ecuador:
INVEC [7 de marzo de 2013]. Pginas 2, 3, 18. Disponible en web:
<http://www.invec.ec/archivos/menu_6/Oportunidades%20en%20el%20Sector%20Minero%20a%20
Gran%20Escala%20del%20Ecuador.pdf>
16
2. CAPTULO 2
El presente captulo abarcar los temas de diseo de las partes mecnicas del robot,
incluyendo los materiales, formas, disposicin y locomocin, todas importantes para
permitir al robot movilizarse dentro de un tnel de manera eficiente.
El diseo debe ser realizado de forma que permita la adecuacin de sensores de manera
sencilla y segura, puesto que estos cumplen una funcin fundamental para obtener
informacin.
17
Un acercamiento entre estos dos modelos se puede lograr al considerar la oruga como
una serie de ruedas dispuestas una despus de otra, lo que permite la distribucin del
peso del chasis sobre ms puntos (Figura 2.1.b). Es as que se aproxima a un modelo
intermedio, partiendo del modelo diferencial, con una rueda en el mismo eje a cada
lado (Figura 2.1.a), y aadiendo ms ruedas que comparten eje a lo largo del chasis. Si
se aade un par, se obtiene un modelo diferencial con cuatro ruedas (Figura 1.c), en el
cual se logra una mejor estabilidad y se prescinde de las ruedas de apoyo, pero se logra
muy poco en cuanto a la distribucin de peso, ubicndose los puntos crticos cerca de
las esquinas en la localizacin de las llantas. Si se aade un par ms, en el centro
(Figura 2.1.d), se obtiene un modelo similar al de un tanque con orugas, con puntos de
apoyo en los extremos y en el centro del chasis (8).
18
Este chasis es de aluminio de 45,72 x 36,19 cm; con llantas de tipo tractor que dan una
altura desde el piso de 5 cm. Sin embargo, no posee un sistema de amortiguacin, y
todos los ejes se encuentran alineados en la misma altura. Su peso es de 2 kg, con
capacidad de carga de hasta 2,7 kg. Su cubierta es de un polmero muy resistente y
adems es un aislante elctrico. Sin embargo, esta plataforma esta ideada para colocar
sobre ella elementos especficos (controladores, bateras, actuadores), por lo que su
adaptacin a nuevos elementos es complicada.
19
Este chasis es mucho ms robusto y de grandes dimensiones: 52,2 x 48,57 cm. Sus
llantas permiten una distancia desde el piso de 5,4 cm y son neumticas, lo que mejora
su adaptabilidad al terreno, sin embargo, no reemplazan a una suspensin (no
incluida). Tiene un peso 15 kg, con capacidad de carga de hasta 25 kg. Est hecho de
aluminio y los motores requieren de bateras de 24 voltios. Esto aumenta las
caractersticas de los dispositivos de control de motores, los que tienen que soportar
mayor voltaje y corriente, incurriendo en mayor costo.
20
21
El chasis robtico Wild Thumper 6WD se obtiene en piezas, tal como se muestra en
la Figura 2.7. Los motores con sus respectivas cajas reductoras se encuentran
atornillados al chasis mediante los contenedores de la amortiguacin (Figura 2.8).
Cada motor posee un par de cables soldados, los cuales convergen en un conector de
nylon incluido en el centro de la estructura principal. El proceso de ensamblaje
requiere la colocacin de las ruedas, las cuales poseen un tornillo para asegurarse al
eje de la caja reductora de los motores, la colocacin de la tapa protectora superior y
el ajuste de cualquier pieza en donde sea necesario.
22
23
Se considera al robot como un modelo diferencial, es decir las tres ruedas de cada
lado se consideran una, y se les aplica la misma variable de control, por lo tanto
poseen la misma velocidad.
Figura 2.9 Simplificacin del modelo de 6 ruedas a un modelo diferencial (dos ruedas).
24
El punto P (x, y) es la posicin actual del centro del robot en el marco general.
Cada eje de cada conjunto de ruedas se encuentra a una distancia 0,5l del punto P.
En el marco de referencia propio del robot (XR, YR), el movimiento hacia adelante
siempre coincide con el eje XR.
Figura 2.10 Robot diferencial dentro de los marcos de referencia propio y general. (1)
25
En primer lugar, se definen las variables que se deben conocer en todo momento para
definir con certeza la ubicacin del robot. A esto se le denomina estado, y est formado
por el vector que contiene las coordenadas x e y del punto P con respecto al marco
general, y la orientacin del robot E = [x y ] T.
De la misma manera, se puede definir un vector de velocidades = [ ]T. Si
tomamos en cuenta el vector de velocidades con referencia al marco propio del robot,
se puede simplificar la ecuacin a R = [ 0 ]T, puesto que, como se haba impuesto
en las condiciones del modelo, el movimiento hacia adelante se encuentra en direccin
XR, y no existe ningn deslizamiento, por lo tanto R = 0.
1 = 1 ()
cos
1 = [ sin
0
sin
cos
0
0
0] [ 0 ]
1
26
Como se aprecia en la Figura 2.11, la velocidad angular es comn para todo el robot,
por lo tanto tambin lo es para el conjunto de ruedas de cada lado. Es as que se pueden
escribir las velocidades lineales de la siguiente manera:
( + 0,5) = ;
( 0,5) =
27
; =
cos
1 = [ sin
0
sin
cos
0
0
0]
1
( + )
2
0
[
]
0 +
cos 0
[ 0 + ] = [ sin 0
0 +
0
sin 0
cos 0
0
0
0]
1
( + )
0
2
+ [0 ]
0
0
[
]
La ecuacin matricial anterior define la posicin del robot para cualquier tiempo,
siendo conocidos los estados iniciales y las velocidades de los motores. Sin embargo,
para determinar la posicin de manera precisa es necesario calcular el estado en
intervalos de tiempo cortos para evitar errores. Esto implica el manejo de gran cantidad
de informacin en poco tiempo, y creando la necesidad de sistema de procesamiento
de importantes prestaciones. A pesar de conseguir un sistema de procesamiento con
las caractersticas necesarias, seguiran existiendo errores debido a la resolucin de los
sensores, la descarga de bateras, demora en las comunicaciones, etc.
28
sin 0
cos 0
0
0
0
0] [ 0 ] + [0 ]
0
1 0
0 +
0 + cos(0 )
[ 0 + ] = [0 + sin(0 ) ]
0 +
0
2. Si vR = -vL, entonces R = 0, y el ICC se encuentra en el punto P. Adems, se cumple
que V = R = 0.
0 +
cos 0
+
[ 0 ] = [ sin 0
0 +
0
sin 0
cos 0
0
0
0
0
0
0] [2 ] + [0 ]
0
1
0
0 +
0
[0 + ] = [
2 ]
0 +
0 +
Estas dos condiciones se cumplirn en el control del robot, sea en su forma autnoma
o a control remoto. La programacin del equipo remoto y de las placas controladoras
tomar en cuenta estas condiciones de diseo.
29
Las fuerzas y momentos son presentados en la Figura 2.12, donde Fxi representa la
fuerza de traccin generada por los motores y Rxi representa la fuerza resistiva en cada
llanta (cada fuerza est referida al lado izquierdo o derecho). Las llantas de la izquierda
son activadas con la misma seal, al igual que las llantas del lado izquierdo, por lo que
Fdx1=Fdx2=Fdx3 y Fix1=Fix2=Fix3. Las fuerzas laterales resistivas Ryi son consecuencia
del deslizamiento lateral, el cual es mnimo cuando el robot se mueve hacia adelante
o atrs; sin embargo, cuando el robot realiza giros, esta fuerza es considerable. Estas
fuerzas aportan al momento de inercia total M, ya sea a favor o en contra (Mr). (10)
30
Con este anlisis se construyen las ecuaciones dinmicas para el momento de inercia
I, y para la aceleracin en las direcciones X e Y:
= 3 + 3
=
= = 0.5 (3 3 )
Donde m es la masa del robot e I es el momento de inercia alrededor del punto P
considerado el centro de masa. Rx y Ry representan el conjunto de fuerzas de reaccin
contrarias al movimiento.
31
3. CAPTULO 3
DISEO ELECTRNICO
El diseo electrnico es una de las partes principales del sistema. Esto incluye una
fuente de alimentacin con gran autonoma y potencia, chips controladores
programables para manejo de motores, adquisicin de datos de los sensores y circuitos
de comunicacin interna y externa con el equipo remoto.
3.1. Arduino
Arduino inici en 2005 como un proyecto para los estudiantes del Interaction Design
Institute de Ivrea en Italia (IIDI). El objetivo era crear una plataforma para
programacin de microcontroladores que sea mucho ms barata, potente y fcil de
programar que las que se encontraban en el mercado. Adems, era necesario que el
dispositivo sea plug-and-play y multiplataforma, por lo que su comunicacin con el
computador deba ser USB para evitar la necesidad de mdulos adicionales (como
grabadores y circuitos de comunicacin con el computador) y poder ser usada en PC
y MAC (11).
El proyecto Arduino es de hardware libre, bajo licencia Creative Commons3, y el
software posee una licencia libre GNU General Public License4. El producto final es
una plataforma de hardware basado en microcontroladores Atmel incluidos en una
placa de circuito impreso con entradas y salidas, la cual se puede programar mediante
USB en un entorno de desarrollo basado en software Wiring y Processing, el cual se
explica en los siguientes captulos.
32
NetDuino. Netduino [en lnea]. [11 diciembre de 2013]. Disponible en web: < http://netduino.com/>.
Sainsmart. Sainsmart [en lnea]. [11 diciembre de 2013]. Disponible en web:
<http://www.sainsmart.com>.
7
Flyduino. Flyduino [en lnea]. [11 diciembre de 2013]. Disponible en web: < http://flyduino.net/>.
6
33
34
Existe una gran cantidad de placas oficiales de Arduino, las cuales han sido creadas
para aplicaciones y necesidades especficas. A continuacin, se muestra la lista de
placas oficiales actualizada.
Arduino Uno, Arduino Mega 2560, Arduino Due, Arduino Micro, Arduino Mini,
Arduino Nano, Arduino Pro Mini, Arduino Pro, Arduino Leonardo son placas
genricas de entrada-salida con diferentes formas y tamaos.
Arduino Robot posee sensores, pantalla LCD y ruedas para prcticas bsicas de
robtica.
Arduino Tre (en desarrollo) es una plataforma que incluye un sistema Linux
embebido.
A continuacin, se describirn las placas Arduino Uno y Arduino Mega 2560, las
cuales sern utilizadas dentro del prototipo.
35
ATMEL. 8-bit AVR Microcontroller with 4/8/16/32K Bytes In-System Programmable Flash,
ATmega48PA ATmega88PA ATmega168PA ATmega328P. Rev. 8161DAVR10/09 [en lnea]. 2009.
[20 diciembre de 2013]. Disponible en web: <http://www.atmel.com/Images/doc8161.pdf>
36
ATMEL. 8-bit AVR Microcontroller with 4/8/16/32K Bytes In-System Programmable Flash,
ATmega640/V ATmega1280/V ATmega1281/V ATmega2560/V ATmega2561/V. 2549PAVR10/2012
[en
lnea].
2012.
[20
diciembre
de
2013].
Disponible
en
web:
<http://www.atmel.com/Images/doc2549.pdf>
37
A pesar de que la placa Arduino Mega 2560 es ms grande y posee ms entradassalidas que el Arduino UNO, es importante notar que la distancia entre los conectores
tipo peineta que se encuentran paralelos en los extremos de la placa es la misma para
ambos.
38
Las placas Arduino oficiales, as como sus similares o clones permiten el uso de
shields, que son placas de circuitos impresos para expandir las funcionalidades de la
placa base, y que generalmente se colocan sobre los conectores de la misma. Entre las
funciones que se pueden aadir se encuentran controladores de motores, pantallas,
antenas de todo tipo (GPS, Wireless, ZigBee, radiofrecuencia), sensores, luces, etc.
Existen varios shields oficiales de Arduino, sin embargo, la mayor cantidad y variedad
de estos dispositivos han sido diseadas por terceros con aplicaciones especficas,
muchos de los cuales se encuentran en el mercado. Para propsitos de este proyecto se
utilizarn shields comerciales y otros realizados especficamente para ajustarse a las
necesidades del prototipo. Muchos de ellos incluso permiten la conexin de otros
shields encima de los mismos (Figura 3.6), permitiendo ampliar sus funcionalidades
an ms.
39
Es una placa de expansin que permite la conexin a redes de tipo Ethernet 10/100
mediante un cable RJ-45. Est basado en el controlador Wiznet W5100, el cual provee
un acceso a redes IP a travs de TCP (Transmission Control Protocol) o UDP (User
Datagram Protocol), soportando hasta cuatro conexiones simultneas. Este chip se
encuentra en una placa de circuito impreso que se coloca sobre cualquier placa
Arduino o compatible, permitiendo la colocacin de otro shield de expansin sobre el
mismo.
40
Los motores incluidos en el chasis del Wild Thumper 6WD son de corriente continua,
con imanes extra fuertes para poder mover con facilidad la caja de reduccin de 75:1.
Su rango de voltaje est entre los 6 y 7,2 VDC, generando una velocidad de 160
revoluciones por minuto (rpm) y un consumo mnimo de corriente de 450 mA,
generando un par motor de 11 kg-cm.
11
WIZnet. W5100 Datasheet Version 1.2.2. [en lnea]. [22 de diciembre de 2013]. Disponible en web:
<http://www.wiznet.co.kr/UpLoad_Files/ReferenceFiles/W5100_Datasheet_v1.2.2.pdf>.
41
Debido a la necesidad de manejar 6 motores, 3 de cada lado, con una corriente mxima
de 6,6 A DC cada uno (en promedio 2 A cada uno), se requieren controladores de
potencia con caractersticas suficientes para manejar con holgura la cantidad de 19,8
amperios por lado, con un total de 39,6 A a 7.2 V en el peor caso. Adems, se requiere
que el controlador sea capaz de regular el voltaje que se le entrega a los motores, con
el objetivo de controlar su velocidad.
42
Para el control del voltaje entregado al motor es necesario utilizar una seal de PWM
en uno de los 2 transistores activos. Una seal de PWM es peridica y tiene un estado
en alto y uno en bajo, los cuales son variables pero sumados dan un perodo. El ciclo
de trabajo o duty cycle es la relacin entre el ancho de pulso en estado encendido con
relacin al perodo, se expresa en porcentaje y es proporcional al voltaje promedio que
se genera.
Para que el voltaje promedio sea eficiente son necesarios: una onda de PWM de una
frecuencia considerable (sobre los 10 kHz) y elementos de encendido y apagado
eficientes a esa frecuencia con prdidas mnimas debido a la corriente que soportan.
Asimismo, debido al ruido de alta frecuencia que se genera, se producen prdidas de
potencia en los motores, lo cual debe ser solucionado con circuitos de filtrado.
43
Corriente mxima 30 A.
Voltaje mximo 41 V.
12
Pololu Corporation. Pololu Dual VNH5019 Motor Driver Shield User's Guide. [en lnea]. [22 de
diciembre
de
2013].
Disponible
en
web:
<http://www.pololu.com/docs/pdf/0J49/dual_vnh5019_motor_driver_shield.pdf>.
13
STMicroelectronics. VNH5019A-E Automotive fully integrated H-bridge motor driver. [en lnea].
2010.
[22
diciembre
de
2013].
Disponible
en
web:
<http://www.pololu.com/file/download/VNH5019A-E.pdf?file_id=0J504>.
44
Funcin Bsica
Digital 2
M1INA
Entrada A de Motor 1
Digital 4
M1INB
Entrada B de Motor 1
Digital 6
M1EN/DIAG
Habilitacin de Motor 1
Digital 7
M2INA
Entrada A de Motor 2
Digital 8
M2INB
Entrada B de Motor 2
Digital 9
M1PWM
Velocidad Motor 1
Digital 10
M2PWM
Velocidad Motor 2
Digital 12
M2EN/DIAG
Habilitacin de Motor 2
Analog 0
M1CS
Analog 1
M2CS
Medicin de Corriente 1
Medicin de Corriente 2
Figura 3.12 Shield Pololu dual VNH5019 motor driver para Arduino.
Fuente: Pololu Corporation. Pololu dual VNH5019 motor driver shield for Arduino [en lnea]. [23
diciembre de 2013]. Disponible en web: <http://www.pololu.com/picture/view/0J3748>.
45
3.2.3.3. Pantalla
Con el objetivo de mostrar informacin directamente a travs del robot, sin necesidad
del equipo remoto, se implementar una pantalla interactiva, la cual permita la
visualizacin de la informacin captada por los sensores. La pantalla permite al usuario
acceder a travs de su men tctil, al monitoreo de la informacin captada por el robot.
Para ello se ha escogido la pantalla LCD TFT de 3,2 de la marca SainSmart, la cual
posee una interfaz de 40 pines, un controlador de pantalla SSD1289 con control de 8
o 16 bits, y un controlador para pantallas tctiles ADS7843, el cual utiliza un bus de 4
pines de tipo Serial, ambos de fcil manejo mediante microcontroladores. A
continuacin, se enumeran sus principales caractersticas:
Color de 65K.
46
Figura 3.14 Placa SainSmart para pantalla LCD (Shield de Arduino Mega 2560).
Fuente: SainSmart. SainSmart TFT LCD Adjustable Shield for Arduino Mega 2560 R3 1280 A082
Plug [en lnea]. [23 diciembre de 2013]. Disponible en web:
<http://www.sainsmart.com/arduino/arduino-shields/sainsmart-tft-lcd-adjustable-shield-for-arduinomega-2560-r3-1280-a082-plug.html>.
47
Alimentacin a 5 VDC.
Resolucin de 1 cm.
48
= ( [])
[ ]
2
Si se toma la velocidad del sonido en 340 m/s, se mide el tiempo del pin ECHO en
microsegundos y la distancia en centmetros, la frmula puede simplificarse a:
[] = ( [])
0.034 [
2
[]
( [])
58
Para conseguir un mapeo de todo el entorno del robot es necesario utilizar varios de
los sensores de distancia ubicados estratgicamente para captar objetos cercanos en
todas direcciones, evitando zonas sin mapeo o puntos ciegos que puedan generar
errores.
49
Figura 3.17 Placa de expansin (shield) de prueba para ubicacin de sensores de distancia.
Figura 3.18 Disposicin final de los sensores sobre chasis del robot.
50
Con el objetivo de obtener informacin extra acerca de sus alrededores, se han tomado
en cuenta sensores para variables crticas como la temperatura, humedad y la presencia
de ciertos gases comunes en las minas, que pueden significar peligros para la actividad
del robot.
51
Pin 1: VCC, pin 2 DATA, pin 3 No Conectado, Pin 4 GROUND (Figura 3.20).
52
La presencia de gas natural es muy comn dentro del ambiente de una mina, el cual
est formado principalmente por gas metano (CH4). El sensor MQ-4 posee material
sensitivo basado en dixido de estao (SnO2), el cual se encuentra en un micro tubo
de cermica que es calentado por un pequeo electrodo, generando las condiciones
adecuadas para la medicin. El sensor posee 6 pines, dos de los cuales se usan para
proveer la corriente de calentamiento, y los otros 4 se usan para recoger las seales 14.
A su salida, el sensor genera una seal analgica, provocada por un cambio en la
conductividad del elemento sensitivo cuando existe un cambio en la concentracin de
gas, en especial de los gases metano, propano y butano. Es poco sensible a los gases
producidos por el alcohol, y poco sensible al humo. El sensor est cubierto por una
malla de acero para proteger el material sensitivo, permitiendo a la vez la entrada de
gas del ambiente.
14
HANWEI ELECTRONICS. Technical Data MQ-4 Gas Sensor [en lnea]. [20 enero de 2014].
Disponible en web: <https://www.sparkfun.com/datasheets/Sensors/Biometric/MQ-4.pdf>.
53
El sensor se encuentra colocado en una placa de circuito impreso, con un resistor para
calibrar la sensibilidad y un amplificador operacional en forma de comparador. Esto
permite una salida digital cuando se alcanza el nivel calibrado (con un indicador LED).
Su salida analgica de 0 a 5 V es proporcional a la concentracin de gas detectada. A
continuacin, se muestran las caractersticas principales del sensor colocado en la
placa de circuito impreso:
Pin 1: VCC, pin 2 DOUT (salida digital), pin 3 AOUT (salida analgica), Pin 4
GROUND.
54
3.5. Giroscopio
Este chip se encuentra integrado en una pequea placa de circuito impreso, la cual
permite una conexin ms sencilla con los pines de comunicacin y posee un LED que
indica su funcionamiento. El chip posee integrada una memoria FIFO (First In, First
Out) de 1024 bytes que permite guardar los datos captados por el sensor en grandes
rfagas, para luego ser enviado a travs del sistema de comunicacin, sin producir
retrasos.
55
3.6. Cmara IP
Con el objetivo de monitorear mediante video el entorno del robot, se incorpora una
cmara de video IP, la cual transmite las imgenes mediante red Ethernet por un cable
RJ-45. Para ello se ha elegido la cmara HooToo HT-IP206, la cual posee las
siguientes caractersticas:
Cmara de 0,3 Megapxeles con resolucin de hasta 640 x 480 a 30 cuadros por
segundo en formato MJPEG.
56
Para enviar los datos desde el Ethernet shield de Arduino y las imgenes captadas por
la cmara, es necesario tener un equipo que capte estas dos fuentes de informacin y
que las transmita de forma segura sin cables hacia un equipo remoto. Adems, debe
permitir que este equipo remoto enve datos de regreso para el control del robot o de
la cmara. Un equipo con estas caractersticas es un punto de acceso inalmbrico, el
cual interconecta dispositivos almbricos con inalmbricos en una misma red. En este
caso, el punto de acceso inalmbrico o WAP (Wireless Access Point) es parte del robot,
y tanto el Ethernet shield como la cmara estarn conectados a l mediante cables de
red.
57
3.8. Bateras
El robot debe poseer autonoma energtica, es decir, debe llevar consigo una fuente de
energa para funcionar por un perodo considerable, sin la necesidad de cables. Para
ello, en primer lugar, es necesario tomar en cuenta el consumo de energa de los
componentes antes mencionados que estn incluidos en el robot. En la Tabla 3-2 se
muestran los consumos de los elementos incluidos en el robot. Se ha considerado una
corriente de 1,1 A mximo por motor y no los 6 A indicados en sus especificaciones,
puesto que es una medida ms cercana al real funcionamiento cuando los 6 motores se
reparten la carga del chasis del robot.
DISPOSITIVO
CONSUMO MXIMO mA
Arduino Uno
Arduino Mega Pantalla
Arduino Mega Ethernet
chipKIT UNO32
Ethernet Shield
Pololu Dual Motor Shield
Sensor Ultrasnico x6
Sensor DHT11
Sensor Gas
Giroscopio
Cmara IP
Access Point Inalmbrico
Pantalla Tctil
Motor x6
TOTAL
200
500
500
300
800
20
90
0,3
100
100
500
800
200
6600
10710,3
Tabla 3-2 Consumo de energa de los dispositivos electrnicos dentro del robot.
Con este dato se ha decidido utilizar dos bateras de 7,2 V Tenergy recargables con
capacidad de 3 800 mAh de NiMH, con corriente mxima de 38 A, diseadas para
autos de control remoto y robots pequeos, lo que permite un funcionamiento normal
(sin cadas de voltaje) a mximo consumo. La capacidad total de las bateras suma
7200 mAh.
58
Todos los elementos antes descritos deben formar un solo conjunto dentro del robot.
Por lo tanto es necesario realizar la conexin fsica y elctrica entre todos estos
elementos de acuerdo a las necesidades. Para ello se toma en cuenta lo siguiente:
El giroscopio demanda gran capacidad de procesamiento a travs del bus I2C, por
lo que es conveniente que sus datos sean procesados por una placa controladora de
manera exclusiva.
59
Los sensores ambientales, los cuales no son de prioridad crtica, sern controlados
por cualquier dispositivo tomando en cuenta su disponibilidad fsica y de
procesamiento.
La comunicacin entre las placas de control ser de tipo Serial, y su velocidad ser
determinada en el la creacin de los programas.
Ya que cada placa controladora posee un regulador lineal, el voltaje de las bateras
se conecta directamente puesto que se encuentra dentro de los lmites seguros de
funcionamiento de cada regulador.
Figura 3.28 Esquema de la conexin del sistema electrnico dentro del robot.
60
61
J1
VCC
5V
T1 TRIGGER
E1
ECHO
HDR1X4
SENSOR1
La placa de adaptacin creada para este conjunto conecta los 6 sensores de distancia a
pines libres de la placa controladora. Adems, est diseada para permitir la conexin
del shield controlador de motores sobre la misma, sin modificar su funcionamiento. Es
importante que no se vea afectada la conexin del shield, puesto que cualquier cambio
en la ocupacin de pines puede crear problemas en el momento del desarrollo del
software.
62
Debido a que los sensores se encuentran lejos del lugar de conexin, es necesario
utilizar conectores que no permitan errores de enlace con la placa en el proceso de
instalacin, como los que se muestran en la Figura 3.31.
63
Se ha escogido la placa Arduino Mega 2560 para controlar el shield Ethernet y los
sensores ambientales. Aunque con la cantidad de entradas-salidas dentro de una placa
ms pequea (como un Arduino UNO) es posible controlar tanto los sensores como la
comunicacin Ethernet, este elemento, al ser el centro de las comunicaciones internas,
puesto que por aqu pasan los datos de control y de informacin de los sensores,
necesita de al menos dos sistemas de comunicacin Serial fsicos, una cantidad
considerable de memoria para procesar los datos enviados y recibidos, y pines de
entrada-salida para los sensores, prestaciones no disponibles en la placa Arduino UNO.
De igual manera que en la placa anterior, se han utilizado conectores que no permitan
error en el enlace, puesto que los sensores ambientales deben estar colocados en la
parte externa del robot para captar adecuadamente las variables del ambiente.
64
Figura 3.34 Placa de adaptacin para sensores ambientales sobre shield Ethernet.
Debido a la gran demanda de procesamiento por parte del giroscopio electrnico MPU6050, se ha colocado a este sensor sobre una placa Arduino UNO, la cual enviar los
datos de la orientacin de manera simplificada mediante una conexin Serial a la placa
controladora de motores.
La placa creada para conectar el giroscopio tiene la funcin de facilitar su enlace con
el controlador Arduino Uno y tambin la de darle un adecuado soporte mecnico,
puesto que es crucial que este sensor est firmemente adherido al robot para que sea
activado solo por los movimientos del mismo. Adems, en esta placa se han incluido
un circuito de reinicio mediante un pulsante y un indicador LED que sern utilizados
para realizar pruebas posteriores de software.
65
66
El punto de acceso inalmbrico es uno de los elementos de mayor tamao, por lo que
ha sido colocado sobre el chasis del robot de tal manera que sus puertos LAN y el
conector de la antena sean de fcil acceso.
Figura 3.38 Ubicacin del punto de acceso inalmbrico con antena de mayor ganancia.
67
68
Para el encendido y apagado del robot se han implementado dos interruptores de dos
posiciones cada uno (Figura 3.42). En la primera posicin las bateras son conectadas
a todos los reguladores y adaptadores de los dispositivos, encendiendo el robot. En la
segunda posicin, las bateras son desconectadas de los dispositivos del robot y se
enlazan a dos conectores de carga, como se ve en la Figura 3.43.
La pantalla tctil ha sido colocada en la parte superior del robot para fcil acceso y
visualizacin por parte del operador. El robot, con todos sus dispositivos electrnicos
enlazados entre s y colocados sobre el chasis, se muestra en las siguientes imgenes.
Figura 3.45 Vista lateral del robot, con antena de alta ganancia.
Figura 3.46 Vista posterior del robot, donde se aprecia pantalla LCD.
69
70
4. CAPTULO 4
Un entorno de desarrollo integrado, conocido por sus siglas en ingls como IDE
(Integrated Development Environment), es una aplicacin de software que
proporciona facilidades a los programadores para el desarrollo de nuevo software.
71
Arduino
Processing
Matrices (Array)
Int bar[8];
int[] bar = new int[8];
bar[0] = 1;
bar[0] = 1;
int foo[] = { 0, 1, 2 };
int foo[] = { 0, 1, 2 };
Bucles
int i;
for (int i = 0; i < 5; i++) { ... }
for (i = 0; i < 5; i++) { ... }
Impresin
Serial.println("hola mundo");
println("hola mundo");
int i = 5;
Serial.println(i);
int i = 5;
Serial.println();
Serial.print("i = ");
Serial.println(i);
Serial.println();
int i = 5;
println(i);
int i = 5;
println("i = " + i);
Arduino Comparison [en lnea]. 2012. [22 enero de 2014]. Disponible en web:
http://arduino.cc/es/Reference/Comparison?from=Main.ComparisonProcessing
16
Arduino Enviroment [en lnea]. 2012. [22 enero de 2014]. Disponible en web:
<http://arduino.cc/es/guide/Environment>.
15
72
Arduino utiliza los denominados sketchs para escribir los programas. Posee tambin
una consola para poder revisar los errores de compilacin y una barra de herramientas
que se describir a continuacin.
73
4.1.2. MPIDE
4.1.3. Libreras
Las libreras, tanto en Arduino como en MPIDE, son elaboradas para cada
microcontrolador o para una funcin especfica del mismo. Un ejemplo de esto se
encuentra en la Figura 4.3.
74
#include <SD.h>
const int chipSelect = 4;
void setup()
{
Serial.begin(9600);
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");{
}
void loop()
{
String dataString = "";
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ",";
}
}
En este caso se observa que para poder manejar una memoria SD, es necesario importar
la librera SD y la librera SPI, la primera maneja las funciones especficas de la
memoria microSD, mientras que la segunda ayuda en la comunicacin de la misma
con el microcontrolador a travs del protocolo SPI.
75
Para poder programar sobre Arduino son necesarias dos funciones: setup() y loop().
76
Figura 4.4 Esquema de la funcin setup() para el control de motores y sensores de distancia.
77
Figura 4.5 Funcin loop() para la placa controladora de motores y sensores de distancia.
78
Comando
Movimiento
Retorno
para
comunicacin
con
el
giroscopio,
la
librera
79
Figura 4.6 Funcin setup y parte de funcin loop de placa de control de giroscopio.
80
Esta funcin espera por una interrupcin del giroscopio o un desborde de la memoria
FIFO. Cuando ocurre uno de los dos eventos, se procesa la interrupcin, se limpia la
memoria que contiene los datos de le pila FIFO si esta se ha desbordado, y se obtiene
la informacin de la orientacin de los ngulos en 3 ejes, de los cuales se utilizar solo
la orientacin correspondiente a la direccin de movimiento del robot.
81
#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>
#include <dht11.h>
82
La librera DTH11 contiene la implementacin a bajo nivel del protocolo 1-Wire para
la comunicacin con el sensor de humedad y temperatura. Se debe mencionar que esta
es una implementacin de software, es decir, que el microcontrolador no posee un
perifrico para este protocolo de comunicaciones, sino que sus parmetros han sido
aplicados mediante cdigo.
Por ltimo, se inicia el servidor Ethernet, el cual estar listo para aceptar hasta 4
conexiones o peticiones al mismo tiempo. De igual manera, si en cualquier parte del
proceso se presenta algn error, este ser reportado a travs del puerto Serial a USB.
El diagrama de bloques simplificado de esta funcin se encuentra en la Figura 4.8.
83
En esta funcin se recogen los datos provenientes del Serial2 conectado a la placa de
control de motores. La trama recibida se concatena y almacena hasta la llegada de un
carcter de fin de trama.
A continuacin, se toman los datos de los sensores de gas (lectura directa del
convertidor analgico-digital en el pin A1), humedad y temperatura, y se crea una
trama de datos que es enviada al controlador de la pantalla a peticin por el Serial1.
84
AxxxBxxxCxxxDxxxExxxJxxxXxxxHxxxTxxxRxxxGxxxF
Las letras maysculas permiten diferenciar los datos recibidos. Desde A hasta J se
encuentran las distancias obtenidas por los sensores ultrasnicos; despus de X est la
orientacin dada por el giroscopio, despus de H est el porcentaje de humedad, de T
la temperatura, de R el estado del batera y de G la presencia de gases inflamables. La
F indica fin de transmisin de trama.
Enviar Trama
http://10.0.1.177:80?A$
http://10.0.1.177:80?B$
http://10.0.1.177:80?D$
http://10.0.1.177:80?I$
85
Figura 4.9 Esquema de funcin loop del controlador Ethernet (parte 1).
En caso de no existir conexin con algn cliente, se lleva un conteo de las veces en las
que la conexin ha sido fallida. Esto permite comprobar el estado de la conexin con
el equipo remoto, y, en caso de haberse perdido contacto, activar la secuencia
autnoma de regreso del robot (Figura 4.10).
86
Figura 4.10 Esquema de funcin loop del controlador Ethernet (parte 2).
87
Figura 4.11 Funcin setup y parte de la funcin loop para control de pantalla LCD tctil.
88
89
Para evitar el consumo excesivo de energa por parte de la pantalla, sta posee un botn
que permite apagarla parcialmente y no mostrar los datos ambientales. Cuando la
pantalla se encuentra apagada los datos se siguen enviando al equipo remoto y
almacenando en la memoria microSD, pero el controlador de pantalla no har
peticiones, mejorando la velocidad del sistema.
Figura 4.14 Funcin loop (continuacin) para control de pantalla LCD tctil.
90
91
Una vez dentro del men de configuracin, se establecen sus funciones como Servidor
DHCP (Dynamic Host Configuration Protocol), es decir, que asignar una direccin
IP automticamente a cualquier cliente conectado. Su SSID (Service Set Identifier o
nombre de red inalmbrico) se establece como Robot, y se cambia su direccin base
a 10.0.1.25 (clase A, privada, mscara de red 255.255.255.0). Es importante que todos
los elementos de la red estn dentro del rango de direcciones IP de la red del punto de
acceso para poder comunicarse. As, la direccin del servidor de la placa controladora
de Ethernet se ha establecido en 10.0.1.177 y la de la cmara en 10.0.1.150.
Por ltimo se introduce una contrasea para el acceso inalmbrico y se coloca la banda
de radiofrecuencia en 2,4 GHz.
92
93
5. CAPTULO 5
El lenguaje que usa se conoce como lenguaje G, que proviene de su naturaleza grfica,
el cual se caracteriza por el uso de estructuras, bloques y diagramas en los que el
programador conecta nodos, entradas, salidas y controla el orden de la ejecucin
dibujando cables. Cada programa o VI posee tres partes diferenciadas: diagrama de
bloques, panel frontal y panel de conexin (10).
94
El panel frontal contiene las entradas y salidas que se han colocado en el diagrama de
bloques, los cuales pueden ser modificados para mostrarse de varias maneras (grficas,
termmetros, tanques, texto, luces, etc.)
Figura 5.1 Ventana del diagrama de bloques (izquierda) y ventana del panel frontal en LabVIEW.
Figura 5.2 Panel de conexin. En la izquierda se colocan las entradas y en la derecha, las salidas.
95
Figura 5.3 Men de diagrama de bloques (izquierda) y del panel frontal (derecha).
96
El orden de ejecucin del cdigo no est definido en todos los casos; el sistema del
entorno de programacin selecciona qu actividades realizar primero. Sin embargo, el
programador puede controlar la secuencialidad del programa tomando en cuenta que
ninguna funcin u operacin se realiza si no tiene todas sus entradas disponibles. Esto
hace que el flujo de la programacin, en general, sea de izquierda a derecha. En los
ordenadores que poseen varios ncleos e hilos de procesamiento, LabVIEW ejecuta el
cdigo en paralelo ocupando los ncleos e hilos de acuerdo a su disponibilidad (14).
97
Esta estructura repite los subdiagramas que se encuentren en su interior hasta que la
condicin de su terminal booleano se cumpla. Esta condicin puede ser Stop if True
(detener si es verdadero) o Continue if True (continuar si es verdadero). Similar al
bucle For, el terminal i contiene la iteracin actual que se ejecuta.
Puede contener uno o ms subdiagramas o casos, los cuales son ejecutados excluyendo
a los otros, de acuerdo al valor cableado al terminal selector. Por defecto, los valores
a ingresar son booleanos y los casos son True y False; sin embargo, se puede colocar
cualquier tipo de valor en el terminal y los casos pueden ser varios y de cualquier tipo.
98
En el entorno del programa existen varios tipos de datos. Los tipos bsicos son los de
tipo booleano, numrico y cadena de caracteres. Los de tipo booleano solo toman los
dos estados digitales.
Los datos de tipo numrico pueden ser de distintos tipos de acuerdo a la capacidad en
memoria que ocupan. Se distinguen los datos de tipo entero (con y sin signo, de 8, 16,
32 y 64 bits) y los con punto flotante (de simple o doble precisin). Tambin existen
los valores de tipo complejo (real e imaginario).
99
Las funciones matemticas son exclusivas para nmeros y permiten realizar todas las
operaciones bsicas y algunas operaciones especiales como redondeos, incrementos
rpidos, etc.
100
Las funciones de comparacin pueden ser utilizadas con datos de cualquier tipo, y su
salida ser un valor booleano.
La funcin Select de este men devuelve el valor cableado en su terminal true o false,
de acuerdo a la condicin de ingreso. Es una funcin muy utilizada para control de
flujo de valores numricos y de caracteres.
Los valores de tipo cadena pueden ser transformados a sus correspondientes valores
de tipo numrico y viceversa (conversin ASCII). Esto es til cuando se utilizan
comunicaciones a bajo nivel en donde el tipo de dato no est especificado.
101
102
La transaccin de HTTP se inicia con una peticin por parte del cliente, el cual indica
la URL (Uniform Resource Locator) del recurso que desea, pudiendo ser este un
conjunto de datos de tipo texto o multimedia cualquiera que el servidor posea. El
servidor enva un encabezado, una lnea en blanco y, al final, el recurso requerido si
este existe; si no existe, enva un mensaje de error. El formato general de un URL a
travs de HTTP es el siguiente: http://IP-servidor:puerto/directorio/recurso. Las
peticiones pueden realizarse utilizando distintos mtodos o verbos, siendo los
principales GET y POST.
GET pide el recurso enviando informacin a travs de la misma URL. Este ser
utilizado por el cliente para pedir datos al servidor dentro del robot. En este caso se
utilizar la URL http://10.0.1.177/?T$, que es la peticin de la trama de datos completa
captada por el robot como se indica en la Tabla 4-3.
El mtodo POST enva datos para que sean procesados por el servidor, actualizando
sus archivos, creando nuevas entradas o realizando alguna accin. Las acciones del
robot controladas por el equipo remoto sern enviadas a travs de este mtodo con la
URL http://10.0.1.177/?X$, en donde X indica la accin de acuerdo a la Tabla 4-3.
La funcin de navegador web se encuentra en el men .NET & ActiveX del panel
frontal de LabVIEW. Esta herramienta permite insertar una instancia del navegador
web del sistema, la cual permitir la visualizacin de la cmara IP del robot.
103
Figura 5.17 Control de navegador web configurado con la URL de la cmara IP.
104
En la rutina inicial se crea el arreglo de igual nmero de filas y columnas con el color
blanco (255). El tamao del arreglo est predefinido en 900 pixeles de alto y ancho,
pero puede ser modificado por el usuario al inicio del programa. En base al tamao, se
calcula la posicin del pixel medio y se enva sus coordenadas al subVI CAMINO
ROBOT para que dibuje su posicin dentro del Grfico de Intensidades IGraph
(este se describir ms adelante).
105
106
Figura 5.20 Adquisicin de datos enviados por servidor dentro del robot.
107
Figura 5.22 Panel frontal donde se muestran los datos de los sensores.
Por ltimo, se enva los datos de los sensores de distancia al subVI DISTANCIAS,
el cual dibuja los rayos de accin de los 6 sensores en base a la ubicacin y orientacin
actual del robot.
Figura 5.23 Llamada al subVI DISTANCIAS insertando las distancias adquiridas de los sensores.
108
Figura 5.24 Ejemplo de uso del subVI SENSOR para el sensor delantero, a 45 derecha y a 90
izquierda, respectivamente.
109
=
sin(7.5)
sin(82.5)
sin(7.5)
0.14
sin(82.5)
sin(7.5)
= 0.5
sin(82.5)
0.14 = 0.5
110
Dentro de esta parte del cdigo se encuentran los botones de control del robot en el
panel frontal. Cuando son pulsados, estos envan la seal indicada a travs del mtodo
POST de HTTP, manejado por el subVI HTTP CONTROL.
Este subVI es llamado para todos los movimientos. Sin embargo, para los movimientos
de giro a la izquierda y derecha no se realiza una actualizacin de la posicin del robot
dentro del mapa, puesto que solo cambia su orientacin, la cual es monitorizada por el
segmento de trama adquirida correspondiente al giroscopio.
Figura 5.28 Parte del hilo de control del robot. Movimientos de giro del robot.
111
Por otro lado, dentro de los movimientos adelante y atrs se llama al subVI CAMINO
ROBOT, el cual actualiza la posicin del robot dentro del mapa y lo desplaza 10
pixeles en la direccin indicada por el giroscopio. Se ha realizado la relacin de 1 pixel
a 1 cm, puesto que esta es la precisin de los sensores. Adems, el movimiento de 10
pixeles con cada pulsacin del botn atrs o adelante se ha definido mediante pruebas
de funcionamiento, puesto que dentro del robot no existen sensores que permitan
medicin de la distancia recorrida (odometra), ya que la implementacin de estos no
mejorara la estimacin de la posicin como se haba explicado en captulos anteriores.
Figura 5.29 Rutina de movimiento hacia adelante llamando al subVI CAMINO ROBOT.
Por ltimo, en la Figura 5.31 se muestra la apariencia del panel frontal, el cual posee
indicadores adecuados para mostrar la informacin adquirida de los sensores, alarmas
de mediciones peligrosas, botones de control, el mapa generado en tiempo real y el
video transmitido por la cmara.
112
113
6. CAPTULO 6
PRUEBAS DE FUNCIONAMIENTO
6.1. Simulacin
114
115
Figura 6.2 Robot DaNI del LabVIEW Robotics Starter Kit con entorno de simulacin prediseado.
Fuente: National Instruments. Overview of the LabVIEW Robotics Module [en lnea]. [20 enero de
2014]. Disponible en web: <http://www.ni.com/white-paper/11564/en/>.
6.1.3. MATLAB
116
117
6.1.4. Webots
118
119
Para medir los errores de orientacin se ha realizado una prueba basada en las
siguientes condiciones:
120
Figura 6.8 Presentacin de datos por tiempo segn ngulo con batera a 8,2 V.
Figura 6.9 Presentacin de datos por tiempo segn ngulo con batera a 7,6 V.
121
Por ltimo se repite la prueba con un nivel de batera mnimo de 6,8 V (Figura
6.10).
Figura 6.10 Presentacin de datos por tiempo segn ngulo con batera a 6,8 V.
122
Se han cargado las bateras hasta su nivel mximo, en el que se encuentran a 8,2
VDC.
123
Para obtener los errores que se producen en la creacin del mapa se ha colocado al
robot dentro de un laberinto en el que se han preparado cinco escenarios comunes.
124
Sin embargo, si tomamos en cuenta solo las paredes, las reales tienen un total de 360
pixeles (180 en cada pared) ubicados horizontalmente a cada lado, y las paredes
mapeadas coinciden con ellas en 75 pixeles, lo que significa un error del 80%, el cual
es bastante alto. No obstante, como se puede ver en la Figura 6.12, las paredes
mapeadas se encuentran desplazadas solo unos cuantos pixeles por arriba o por debajo
de las lneas reales, lo que puede implicar errores en la precisin de los sensores. Se
debe tomar en cuenta que estas imgenes no se encuentran modificadas por filtros, los
cuales pueden ayudar mucho a corregir y reubicar los puntos.
125
Tomando en cuenta solo las paredes, las reales estn formadas por 530 pixeles, y las
mapeadas coinciden con ellas en 82 pixeles, lo que implica un error del 84,52%. Se
puede apreciar que las lneas que generan mayor error son la frontal y las de 45 grados,
y se deben a la interferencia acstica recibida.
El tercer escenario consiste en una esquina que obliga al robot a realizar un giro de 90
grados. El camino horizontal tiene una longitud de 1,8 m, y el camino vertical, 1,7.
Las paredes horizontales estn separadas 0,9 m y las verticales, 0,7 m. Las paredes
reales estn formadas por 540 pixeles en una matriz de 300 x 300 pixeles.
126
Los datos de las paredes reales se han ingresado manualmente en un arreglo de datos
tipo IGraph de LabVIEW y se ha realizado la comparacin con las paredes mapeadas.
La sustraccin de las matrices result en una diferencia de 1115 pixeles, lo que
representa el 1,23% de error.
Si se toman en cuenta los pixeles formados solo por las paredes reales de la esquina
(540), se obtiene que las paredes mapeadas coinciden en 92 pixeles, representando el
82,96% de error.
Tomando en cuenta solo las paredes, las reales estn formadas por 800 pixeles, y las
mapeadas coinciden con ellas en 77 pixeles, lo que implica un error del 90,375%. Se
puede apreciar que las lneas que generan mayor error son las laterales, sin embargo,
se ha intentado recrear lo ms real posible las curvas en las paredes, pero al final el
ngulo del robot y las mediciones estn relacionadas entre s.
127
Tomando en cuenta solo las paredes, las reales estn formadas por 730 pixeles, y las
mapeadas coinciden con ellas en 370 pixeles, lo que implica un error del 49,31%. Se
puede apreciar que la lnea que genera mayor error es la lateral ms sinuosa, esto se
produce ya que los sensores no poseen movimientos angulares para realizar un barrido
en lugares internos.
En la Figura 6.17 se muestra un resumen de los datos recogidos de los mapas recreados
anteriormente. Las barras rojas indican la cantidad de pixeles graficados de las paredes
reales y las barras grises indican los pixeles dibujados por el robot que han coincidido
con los reales.
128
Figura 6.17 Grfico de resumen de los errores en el mapeo por caso segn porcentaje y pixeles.
129
CONCLUSIONES
El chasis seleccionado ha probado ser adecuado para su uso sobre terrenos agrestes
similares a los encontrados en minas subterrneas. Sin embargo, su tamao,
especialmente el de sus ruedas, limita los obstculos que puede sortear sin provocar
riesgo de dao o volcamiento.
A partir de los datos adquiridos, y en base a la Figura 6.11, existe mayor error en
la orientacin (ngulo) cuando las bateras se encuentran sobre el lmite de 8,2V
(29,67 grados) producido al recargar al mximo las bateras. Una solucin a este
error podra ser la incorporacin de un regulador inteligente de voltaje, el cual
disminuya o aumente el nivel de voltaje entregado por las bateras segn sea
necesario.
130
De los datos obtenidos en las pruebas se pudo determinar que, debido al alto
porcentaje de error, se recomienda utilizar sensores infrarrojos o laser LIDAR
(Light Detection and Ranging o Laser Imaging Detection and Ranging), los cuales
son muy utilizados para este tipo de aplicaciones. Algunos de ellos permiten un
mapeo en 3 dimensiones a alta velocidad y precisin; sin embargo, su precio es
elevado. Se recomienda el uso de este tipo de sensores para aplicaciones que
requieren mayor precisin o para una aplicacin de carcter industrial.
131
BIBLIOGRAFA
9. LUCET, Eric, y otros. Dynamic control of the 6WD skid-steering mobile robot
RobuROC6. 2009, Vols. Intelligent Robots and Systems, 2009, IROS 2009.
132
11. BANZI, Massimo. Getting Started with Arduino. [ed.] Brian Jepson. First Edition.
s.l. : O'Reilly Media Inc., 2009. ISBN: 978-0-596-15551-3.
12. MARGOLIS, Michael. Arduino Cookbook. [ed.] Shawn Wallace and Brian
Jepson. Second Edition. s.l. : OReilly Media, 2012. ISBN: 978-1-449-31387-6.
ANEXOS
133
134
135
HDR2X6
CKIZQDOWN
J5
HDR1X4
SERIAL
J11
VCC
5V
HDR2X9
CKDERUP
HDR1X6
CKIZQUP
J2
T1
E1
T2
E2
J4
T5
E5
5V
J1
E6
5V
Date: 20/02/2014
T6
VCC
J7
E1
5V
T3
VCC
HDR1X4
SENSOR3
T1
VCC
HDR1X4
SENSOR1
HDR1X4
SENSOR6
J10
HDR2X9
CKDERDOWN
VCC
HDR1X4
SENSOR5
J9
T3
E3
T4
E4
T5
E5
T6
E6
J3
T4
VCC
HDR1X4
SENSOR4
J8
E4
5V
E2
5V
A4
Size:
Sheet
of
1.0
Rev:
DISEO Y CONSTRUCCIN
DE UN ROBOT PARA MAPEO Y EXPLORACIN
DISEO Y CONSTRUCCIN
E3
5V
T2
VCC
HDR1X4
SENSOR2
J6
HDR1X6
HDR1X6
J5
J1
5V
GAS1
GAS2
1M
R2
VCC
R1
1M
SERIAL2
J9
TEMP
J7
VCC
J10
HDR1X8
J8
Date: 20/02/2014
dig
SERIAL1
5V
J3
HDR1X4
GAS2
5V J6
GAS1
5V J2
A4
Size:
Sheet
of
1.0
Rev:
DISEO Y CONSTRUCCIN
DE UN ROBOT PARA MAPEO Y EXPLORACIN
DISEO Y CONSTRUCCIN
GAS2
VCC
dig
GAS1
VCC
HDR1X6
330
J2
SDA
SCL
R1
VCC
3.3V
HDR1X6
J1
RESET
3
J3
Date: 20/02/2014
HDR1X2 HDR1X8
J5
INT
LED
X1
SCL
SDA
INT
GIROSCOPIO
A4
Size:
Sheet
of
1.0
Rev:
DISEO Y CONSTRUCCIN
DE UN ROBOT PARA MAPEO Y EXPLORACIN
DISEO Y CONSTRUCCIN
VCC
3.3V
J4
139
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "DualVNH5019MotorShield.h"//Librera
motores
#include <Ultrasonic.h>
del
shield
de
DualVNH5019MotorShield md;
//Las velocidades de los motores se pueden establecer entre -400
y 400
Ultrasonic IZQ(37,36);
// (Trig PIN,Echo PIN)
Ultrasonic DER(35,34);
Ultrasonic FRONT(33,32);
Ultrasonic DOWN(30,31);
Ultrasonic FIZQ(28,29);
Ultrasonic FDER(26,27);
int a_izq;
int a_der;
int front;
int down;
int d_izq;
int d_der;
char angle;
char var;
String trama;
boolean contgiro = true;
char flag;
========================================================
SETUP
========================================================
void setup()
{
angle='0';
Serial1.begin(115200);
Serial.begin(115200);
md.init();
}
========================================================
LOOP
========================================================
void loop()
{
leerGyro();
leerSensores();
Serial1.print("A");
Serial1.print(a_izq);
Serial1.print("B");
Serial1.print(a_der);
Serial1.print("C");
Serial1.print(front);
Serial1.print("D");
Serial1.print(down);
Serial1.print("E");
Serial1.print(d_izq);
Serial1.print("J");
Serial1.print(d_der);
Serial1.print("X");
Serial1.print(trama);
Serial1.println("F");
md.setM1Speed(0);
md.setM2Speed(0);
controlremoto();
}
void leerGyro()
{
Serial.println("P");
while (Serial.available()) {
angle = Serial.read();
if(angle == 'X'){
trama="";
angle = Serial.read();
while (angle != 'F' && angle != '\n'){
delay(1);
trama.concat(angle);
angle = Serial.read(); //serial
}// FIN MIENTRAS NO SEA F NI \N
Serial.flush();
break;
}
else {
Serial.flush(); //serial
}
}
}
//RUTINA QUE DETECTA SI SE HAN ENVIADO DATOS DE CONTROL
void leerSensores()
{
a_izq=
IZQ.Ranging(CM);// CM or INC
a_der=
DER.Ranging(CM);
front=
FRONT.Ranging(CM);
down=
DOWN.Ranging(CM);
d_izq=
FIZQ.Ranging(CM);
d_der=
FDER.Ranging(CM);
}
//RUTINA QUE DETECTA SI SE HAN ENVIADO DATOS DE CONTROL
void controlremoto()
{
if(Serial1.available())
var=Serial1.read();
switch (var) {
//adelante
case 'A':
md.setM1Speed(250);
140
md.setM2Speed(250);
delay(50);
break;
//atras
case 'B':
md.setM1Speed(-250);
md.setM2Speed(-250);
delay(50);
break;
//derecha
case 'D':
md.setM1Speed(-300);
md.setM2Speed(300);
delay(70);
break;
//izquierda
case 'I':
md.setM1Speed(300);
md.setM2Speed(-300);
delay(70);
break;
//return
case 'R':
retorno();
break;
}
stopIfFault();
}
}
// RUTINA QUE DETIENE MOTORES SI HAY SOBRECARGA //
void stopIfFault()
{
if (md.getM1Fault())
{
Serial1.println("M1 fault");
while(1);
}
if (md.getM2Fault())
{
Serial1.println("M2 fault");
while(1);
}
}
void retorno()
{
if(contgiro){
giro();
} else
{
//REGRESAR CON LOS SENSORES
if (a_izq >= 100){
141
md.setM1Speed(300);
md.setM2Speed(300);
delay(150);
}else if(d_izq >=100){
md.setM1Speed(300);
md.setM2Speed(-300);
delay(150);
md.setM1Speed(0);
md.setM2Speed(0);
delay(500);
}else if (d_der >= 100){
md.setM1Speed(-300);
md.setM2Speed(300);
delay(150);
md.setM1Speed(0);
md.setM2Speed(0);
delay(500);
}
}
}
void giro()
{
while (flag != 'M') {
Serial.println("R");
while (Serial.available() < 0);
flag = Serial.read();
}
while (flag != 'T'){
Serial.println("W");
Serial.flush();
md.setM1Speed(-300); // Gira Derecha
md.setM2Speed(300);
delay(200);
md.setM1Speed(0);
md.setM2Speed(0);
delay(500);
flag = Serial.read();
Serial.flush();
}
contgiro=false;
}
142
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 mpu;
#define OUTPUT_READABLE_YAWPITCHROLL
#define LED_PIN 13
bool blinkState = false;
143
144
145
146
#include
#include
#include
#include
<SD.h>
<SPI.h>
<Ethernet.h>
<dht11.h>
dht11 DHT11;
int temp;
int humi;
int gas;
int bat;
int conteofallo=0;
String datos;
char character;
String content;
String datosp; // Crea variables.
boolean leyendo= false;
String variable("");
//Ethernet
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//MAC ADDRESS
byte ip[] = { 10,0,1,177 };//IP FIJA
byte gateway[] = {10, 0, 1, 1};//PUERTA DE ENLACE
byte subnet[] = {255, 255, 255, 0};//MASCARA DE RED
EthernetServer server(80); //PUERTO DE PROTOCOLO TCP 80 (HTTP)
//SD
const int chipSelect = 4; //PIN DEL CHIP SELECT PARA SD EN SHIELD
ETHERNET
========================================================
SETUP
========================================================
void setup() {
DHT11.attach(9); //PIN DE COMUNICACION PARA EL SENSOR DHT11.
Serial2.begin(115200);// SERIAL: WEB SERVER CON
PIC32(CONTROL).
Serial1.begin(9600);// SERIAL: WEB SERVER CON PANTALLA.
Serial.begin(9600);
int chk = DHT11.read();//LEE SENSOR DE TEMPERATURA
switch (chk)
{
case 0: Serial.println("OK"); break;
case -1: Serial.println("Checksum error"); break;
case -2: Serial.println("Time out error"); break;
default: Serial.println("Unknown error"); break;
//SD
pinMode(53, OUTPUT); //PIN DEL MEGA2560 PARA BUS SPI
if (!SD.begin(chipSelect)) {
Serial.println("Error en SD
PRESENTE EN EL ARDUINO
(no
presente)");//SD
ESTA
147
return;
}
Serial.println("SD Inicializada");
//ETHERNET
Ethernet.begin(mac, ip,
ETHERNET Y DEL SERVIDOR.
server.begin();
delay(900);
gateway,
subnet);
//INICIO
DEL
"T"+
String(temp)
148
113
114
if (dataFile) {
115
116
117
dataFile.print(content);
118
dataFile.println(datos;
119
dataFile.close();
120
}
else {
121
122
Serial.println("error opening datalog.txt");
123
}
124 /////////////////////SERVIDOR ETHERNET////////////////////
125
EthernetClient client = server.available();
if (client) {
126
127
conteofallo=0;
boolean currentLineIsBlank = true;
128
boolean enviacabecera= false;
129
130
while (client.connected()) {
131
if (client.available()) {
132
if (!enviacabecera){
133
134
client.println("HTTP/1.1 200 OK");
135
client.println("Content-Type: text/html");
136
client.println();
enviacabecera = true;
137
138
}
139
char c = client.read();
140
141
if (leyendo && c == ' '){
142
leyendo= false;
143
144
Serial.println("leyendo=f");
145
}
146
if (c == '?') {
147
leyendo = true;
148
149
Serial.println("leyendo=t");
150
}
151
if (leyendo && variable==""){
152
153
c=client.read();
154
Serial.println(c);
155
switch(c){
156
157
case 'T':
158
do{
159
160
c=client.read();
161
client.print(content);
162
client.println(datos);
163
client.println("<br />");
164
}while(c != '$');
165
166
leyendo=false;
167
break;
168
169
case 'A':
do{
c=client.read();
client.println("Adelante OK");
client.println("<br />");
Serial2.print("A");
}while(c != '$');
leyendo=false;
break;
case 'B':
do{
c=client.read();
client.println("Atras OK");
client.println("<br />");
Serial2.print("B");
}while(c != '$');
leyendo=false;
break;
case 'D':
do{
c=client.read();
client.println("Derecha OK");
client.println("<br />");
Serial2.print("D");
}while(c != '$');
leyendo=false;
break;
case 'I':
do{
c=client.read();
client.println("Izquierda OK");
client.println("<br />");
Serial2.print("I");
}while(c != '$');
leyendo=false;
break;
}
}
if (c == '\n' && currentLineIsBlank) {
break;
}
if (c== '\n'){
currentLineIsBlank = true;
}else if (c != '\r') {
currentLineIsBlank = false;
149
}
}
}
delay(1);
client.stop();
} else
{
if (conteofallo > 90)
{
Serial2.print("R");
delay(200);
}else{
conteofallo++;
delay(500);
}
}
}//FIN DEL LOOP
//Imprime R al chipkit
150
151
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <UTFT.h>
#include <avr/pgmspace.h>
#include <UTouch.h>
// FUENTES
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t Ubuntu[]; //24x32
// Arduino Mega
UTFT myGLCD(ITDB32S,38,39,40,41);
UTouch
myTouch(6,5,4,3,2);
//IMAGENES
extern unsigned int logo_uda[0x36D8];
//variables
int x1=0;
int y1=0;
int t=0;
int bandera=0;
int caso=2;
char character ;
String content = "";
String hud = "";
String them = "";
String ghas = "";
String batt = "";
//TOUCH
int x, y;
========================================================
SETUP
========================================================
void setup()
{
Serial.begin(9600);
myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);
myGLCD.InitLCD();
myGLCD.setFont(BigFont);
myGLCD.fillScr(255, 255, 255);
myGLCD.setColor(38, 21, 148);
myGLCD.setBackColor(255,255,255);
myGLCD.print("Prototipo", CENTER, 10);
myGLCD.print("Robot Mapeador", CENTER, 28);
myGLCD.drawBitmap (100, 48, 120, 117, logo_uda);
myGLCD.setFont(SmallFont);
myGLCD.drawRoundRect(120,200,200,220); //rectangulo cargando
152
//UBICACION DE CARGANDO
x1=120;
//120
y1=180;
//150
t=600; //300
Serial1.begin(9600);
}
========================================================
LOOP
========================================================
void loop()
{
if (bandera==0){ //PANTALLA Iniciando..
for (int p=0;p<4;p++){
myGLCD.setColor(255, 255, 255);
myGLCD.fillRect(x1, y1, x1+89, y1+12);
myGLCD.setColor(38, 21, 148);
delay(t);
myGLCD.print("I", x1,y1);
delay(t);
myGLCD.print("N", x1+8,y1);
delay(t);
myGLCD.print("I", x1+16,y1);
delay(t);
myGLCD.print("C",x1+24 ,y1);
delay(t);
myGLCD.print("I", x1+32,y1);
delay(t);
myGLCD.print("A", x1+40,y1);
delay(t);
myGLCD.print("N", x1+48,y1);
delay(t);
myGLCD.print("D", x1+56,y1);
delay(t);
myGLCD.print("O", x1+64,y1);
delay(t);
myGLCD.print(".", x1+72,y1);
delay(t);
myGLCD.print(".", x1+80,y1);
delay(t);
switch (p) {
case 0:
myGLCD.fillRoundRect(x1,y1+20,x1+20,y1+40);
break;
case 1:
myGLCD.fillRoundRect(x1,y1+20,x1+40,y1+40);
break;
case 2:
myGLCD.fillRoundRect(x1,y1+20,x1+60,y1+40);
break;
case 3:
myGLCD.fillRoundRect(x1,y1+20,x1+80,y1+40);
break;
}
}
bandera=1;
}
//LEER DATOS
Serial1.println("P");
delay(50);
while (Serial1.available()) { //serial
character = Serial1.read(); //serial
if(character == 'H'){
hud="";
them="";
ghas="";
batt="";
character = Serial1.read(); //serial
while (character != 'T'){
delay(2);
hud.concat(character);
character = Serial1.read(); //serial
}// FIN MIENTRAS NO SEA F NI \N
character = Serial1.read(); //serial
while (character != 'R'){
delay(2);
them.concat(character);
character = Serial1.read(); //serial
}// FIN MIENTRAS NO SEA F NI \N
character = Serial1.read(); //serial
while (character != 'G'){
delay(2);
batt.concat(character);
character = Serial1.read(); //serial
}// FIN MIENTRAS NO SEA F NI \N
character = Serial1.read(); //serial
while (character != 'F' && character != '\n'){
delay(2);
ghas.concat(character);
character = Serial1.read(); //serial
}// FIN MIENTRAS NO SEA F NI \N
break;
}// FIN SI CHAR = H
else {
Serial1.flush(); //serial
}// SI NO ES H LIMPIO EL BUFFER
}
if (bandera==1){ //BORRA LA PANTALLA
myGLCD.fillScr(255,255,255);
bandera =caso;// ENTRA AL CASO SELECCIONADO
}//FIN BANDERA 1
if (bandera==2){ //PANTALLA Datos Ambientales
153
myGLCD.setFont(BigFont);
myGLCD.print("Datos",85,10);
myGLCD.print("Ambientales",35,25);
myGLCD.setColor(79, 129, 189);
myGLCD.setBackColor(79,129,189);
myGLCD.fillRoundRect(250,0,319,239);
myGLCD.fillRoundRect(10,54,122,133);
myGLCD.fillRoundRect(133,54,241,133);
myGLCD.fillRoundRect(67,147,192,226);
myGLCD.fillRect(250,1,320,239);
myGLCD.setColor(255,255,255);
myGLCD.print("Temp.",25,69);
myGLCD.print("Hum.",160,69);
myGLCD.print("Gas.",100,165);
myGLCD.setFont(SmallFont);
myGLCD.print("Cabrera",258,128);
myGLCD.print("Delgado",260,147);
myGLCD.setFont(BigFont);
myGLCD.print("UDA",260,25);
myGLCD.print("2014",252,60);
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 255, 255);
myGLCD.fillRoundRect(270,200,300,219);
myGLCD.setBackColor(255,255,255);
myGLCD.setColor(49, 86, 131);
myGLCD.print("off",274,205);
bandera=3;
} //FIN BANDERA 2
if (bandera ==3){
myGLCD.setFont(BigFont);
myGLCD.setBackColor(79,129,189);
myGLCD.setColor(255,255,255);
myGLCD.print(them+"C ",40,99);
myGLCD.print(hud+"% ",150,99);
myGLCD.print(ghas+"ppm ",80,192);
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((y >=180) && (y<=240)) //EN Y
{
if ((x>=250) && (x<=310))
{
bandera=4;
}
154
155