Está en la página 1de 50

ESCUELA TCNICA SUPERIOR DE INGENIERA INFORMTICA

SISTEMAS EMPOTRADOS Y DE TIEMPO REAL

GRADO EN INGENIERA INFORMTICA

Proyecto:
Ordenador de a bordo
(visualizacin de velocidad, distancia, temperatura...)

Nombre: Cupeiro Durn, Carlos


Nombre: Lpez Gonzlez, Javier
Nombre: Redondo Arroyo, Daniel

CURSO 2011-2012

ndice de contenidos

1.- Descripcin del proyecto............................................................................................................................. 1


1.1.- Distancia trasera respecto a un automvil .................................................................................. 1
1.2.- Velocidad del automvil ...................................................................................................................... 1
1.3.- Modificacin de los lmites de notificaciones ............................................................................. 3
1.4.- Imgenes de la pantalla tctil............................................................................................................ 4
2.- Revisin de proyectos similiares ............................................................................................................. 7
2.1.- Proyectos relacionados con la distancia....................................................................................... 7
2.2.- Proyectos relacionados con la velocidad ..................................................................................... 8
3.- Material necesario y presupuesto ........................................................................................................... 9
4.- Diagramas, conexiones e imgenes....................................................................................................... 11
4.1.- Pantalla tctil ......................................................................................................................................... 11
4.2.- Mdulo GPS............................................................................................................................................. 14
4.3.- Sensores de distancia ......................................................................................................................... 15
4.4.- Zumbador ................................................................................................................................................ 17
4.5.- Sensor de temperatura y humedad .............................................................................................. 18
5.- Elementos adicionales ................................................................................................................................ 21
6.- Implementacin del cdigo ...................................................................................................................... 25
7.- Resultado final del proyecto .................................................................................................................... 39
8.- Valoracin, dificultades y comentarios ............................................................................................... 42
9.- Hojas de caractersticas de los componentes ................................................................................... 44

ndice de ilustraciones

1.2.1.- Grfico explicativo de la visualizacin de la pantalla para la fase 2 ................................... 2


1.3.1.- Grfico explicativo de la visualizacin de la pantalla para la fase 3 ................................... 3
1.3.2.- Grfico explicativo de la seleccin del nmero de niveles en la fase 3 1/2 .................... 3
1.3.3.- Grfico explicativo de la seleccin del nmero de niveles en la fase 3 2/2 .................... 4
1.4.1.- Distancia que supera el primer nivel .............................................................................................. 4
1.4.2.- Distancia que supera el tercer nivel ................................................................................................ 5
1.4.3.- Seleccin del nivel de configuracin de distancia ..................................................................... 5
1.4.4.- Seleccin del nivel de configuracin de velocidad .................................................................... 6
1.4.5.- Establecimiento de un nivel de distancia o velocidad ............................................................. 6
3.1.- Imagen del material utilizado .............................................................................................................. 10
3.2.- Imagen de los dispositivos utilizados ............................................................................................... 10
4.1.- Imagen del Arduino Mega ..................................................................................................................... 11
4.1.1.- Figura de conexiones de la pantalla tctil ................................................................................... 12
4.1.2.- Imagen de la pantalla tctil ............................................................................................................... 12
4.1.3.- Imagen con las conexiones de la pantalla tctil 1/2 ............................................................... 13
4.1.4.- Imagen con las conexiones de la pantalla tctil 2/2 ............................................................... 13
4.2.1.- Figura de conexiones del mdulo GPS.......................................................................................... 14
4.2.2.- Imagen con las conexiones de la pantalla tctil 1/2 ............................................................... 14
4.2.3.- Imagen con las conexiones de la pantalla tctil 2/2 ............................................................... 15
4.3.1. Figura de las conexiones con los sensores de distancia (Fritzing) .................................... 15
4.3.2. Figura de las conexiones con los sensores de distancia ......................................................... 16

4.3.3. Imagen de las conexiones con los sensores de distancia ....................................................... 16


4.4.1. Figura de la conexin del zumbador (Fritzing) .......................................................................... 17
4.4.2. Figura de la conexin del zumbador ............................................................................................... 17
4.4.3. Imagen de la conexin del zumbador ............................................................................................. 18
4.5.1. Figura de la conexin del sensor de temperatura y humedad ............................................. 18
4.5.2. Figura de la conexin del sensor de temperatura y humedad (Fritzing) ........................ 19
4.5.3. Esquemtico de la conexin del sensor de temperatura y humedad ................................ 19
4.5.4. Imagen de la conexin del sensor de temperatura y humedad ........................................... 20
5.1.- Elementos adicionales ............................................................................................................................ 21
5.2.- Resistencias de 10 k ............................................................................................................................. 22
5.3.- Placa de conexiones ................................................................................................................................. 22
5.4.- Clemas de conexin y punteros .......................................................................................................... 23
5.5.- Cajas de chapa para cubrir los sensores de distancia ................................................................ 23
5.6.- Caja para introducir los componentes ............................................................................................. 24
7.1.- Colocacin de uno de los sensores de distancia en el parachoques trasero .................... 39
7.2.- Conexin de la pantalla tctil con las 12 resistencias ................................................................ 39
7.3.- Componentes en el interior de la caja de madera 1/2 .............................................................. 40
7.4.- Componentes en el interior de la caja de madera 2/2 .............................................................. 40
7.5.- Pruebas de distancia................................................................................................................................ 41
7.6.- Pruebas de velocidad .............................................................................................................................. 41

1.- DESCRIPCIN DEL PROYECTO

La realizacin del proyecto se va a dividir en tres tareas que irn aadiendo


funcionalidad a dicho proyecto como conjunto, as como aumentando su complejidad y
utilidad.
1.1.- DISTANCIA TRASERA RESPECTO A UN AUTOMVIL
En primer lugar se recoger informacin mediante dos sensores de distancia por
ultrasonidos, colocados en el parachoques trasero del automvil y en funcin de la
distancia que aporte cada uno de ellos, se escoger la mnima de las dos magnitudes
aportadas por ellos. Este dato refleja la distancia que existe entre dicho parachoques y el
objeto ms cercano a l, normalmente utilizable en la maniobra de aparcamiento.
Esta informacin ser mostrada en una pantalla tctil, cuyo primer objetivo ser
nicamente ofrecer tanto esta distancia, como la temperatura y humedad, recogidas
mediante un sensor que se utilizar para tal funcin.
Adems, se realizar el diseo de un semforo, con tres luces: verde, naranja y
roja, las cuales se utilizarn a modo de leds de colores. Para que dichas luces se
enciendan, deben ir superndose tres niveles de distancia, uno para cada una de las
luces. Estos niveles se han determinado numricamente en 30, 20 y 8 centmetros.
Asimismo, habr redundancia de informacin, ya que mediante un zumbador se emitir
un sonido informando tambin de este hecho. Dicho zumbador tan solo entrar en
funcionamiento para el segundo y tercer nivel, emitiendo un pitido para el segundo
nivel y dos para el tercero.
Con el fin de conectar todos estos sensores, as como la pantalla tctil, se
utilizar un Arduino Mega 2560, que consta de 54 entradas/salidas digitales, as como
16 entradas analgicas, a travs de las cuales se podrn conectar todos los dispositivos
que se comentarn en el apartado 3.
Y en cuanto a la alimentacin que se le suministrar a este Arduino Mega, se
realizar a travs de la salida de 12-24 V que hay en todos los automviles, mediante un
cable que conecta esta salida al Arduino.
1.2.- VELOCIDAD DEL AUTOMVIL
En esta fase se aadir al Arduino Mega un mdulo GPS, a travs del cual se
obtendrn tanto la velocidad del automvil, como la hora actual.
Una vez que se recojan estos datos, se reestructurar el formato en el que se
muestra la informacin a travs de la pantalla, comenzando a utilizar la posibilidad que
ofrece de introducir parmetros a travs de ella, al ser tctil.
Por lo tanto se va a poder elegir entre tres modos de funcionamiento, los cuales
tienen en comn la informacin sobre la temperatura y la hora en un tamao de fuente
menor a los datos caractersticos de cada uno de los modos, que sern explicados a
continuacin:

1.- Modo distancia: se basa en el funcionamiento explicado para la primera


tarea, en el apartado 1.1, indicando as la distancia del parachoques trasero con respecto
al objeto ms prximo a l, tal y como se coment anteriormente. Adems se recuerda
que al pasar cada uno de los lmites establecidos para los niveles, se comunicarn estos
hechos de forma acstica y visual segn se explic previamente.
2.- Modo velocidad: el funcionamiento es anlogo al caso anterior, solo que esta
vez el dato mostrado ser la velocidad del automvil recogida por el mdulo GPS. De
nuevo vuelve a notificarse si se sobrepasan tres lmites de velocidad, los cuales se han
establecido en 90, 100 y 110 kilmetros por hora. Por lo tanto al superar dichas
velocidades de nuevo se encendern las luces correspondientes en la pantalla y tambin
el zumbador funcionar del mismo modo que en el caso de la distancia.
3.- Modo automtico: este ser el modo que aparecer por defecto. En l se
mostrar la velocidad del automvil, siempre y cuando sta sea superior a los 10
kilmetros por hora, mientras que se mostrar la distancia calculada a partir de los datos
de los sensores colocados en el parachoques trasero en caso contrario. Se ha elegido
dicha velocidad ya que para realizar la maniobra de aparcamiento no se suele superar
ese dato (una persona normal suele andar a 5-6 km/h y no se suele ir mucho ms deprisa
al aparcar). Adems puede ser interesante saber esta distancia en paradas, como pasos
de cebra o semforos, ya que si es una parada con pendiente hacia arriba es conveniente
saber la distancia al objeto que se tenga detrs.
Se ha pensado en una estructuracin de la pantalla del siguiente modo:

Automtico Velocidad Distancia

102

14:41
30

km/h

22 %

1.2.1.- Grfico explicativo de la visualizacin de la pantalla para la fase 2


De tal forma que las tres cajas que se sitan en la parte superior de la pantalla,
se utilizarn de modo que el usuario, al pulsar en una de ellas, cambie fcilmente entre
los modos explicados anteriormente. A su vez, el modo activo estar resaltado de un
color distinto a los otros dos para que el usuario sepa cul es el que est visualizando en
todo momento.

1.3.- MODIFICACIN DE LOS LMITES DE NOTIFICACIONES


Por ltimo, ya que se cuenta con una pantalla tctil, que permite la introduccin
de datos, se le va a permitir al usuario que establezca los valores lmites en cuanto a la
velocidad y a la distancia que desee.
Se va a poder elegir cada uno de los tres lmites, tanto para la velocidad, como
para la distancia, y de esta forma modificarlo.
Una vez que se acceda mediante la pantalla tctil a la modificacin bien de los
lmites de la velocidad, o bien de los lmites de la distancia, se le pedir al usuario que
seale qu nivel de lmite desea establecer, como se ha comentado anteriormente. A
continuacin se le mostrar por la pantalla un teclado numrico, con las opciones de
borrar y aceptar lmite actual.
Para ello se ha pensado aadir un par de opciones ms a la interfaz de usuario
que se mostr para la segunda fase:

Automtico Velocidad Distancia

14:41

102
Conf. Velocidad

30
km/h
22 %

Conf. Distancia

1.3.1.- Grfico explicativo de la visualizacin de la pantalla para la fase 3


Por lo tanto se crean as otras dos cajas, que el usuario podr pulsar para
cambiar los niveles de la velocidad y la distancia. Al pulsar una de ellas se cambiara
todo el formato por el siguiente:

Qu nivel de velocidad desea configurar?


1

Volver
1.3.2.- Grfico explicativo de la seleccin del nmero de niveles en la fase 3 1/2
Es bastante intuitivo que hay que pulsar sobre la opcin que se desea escoger.
La caja de debajo ser para volver directamente a la pantalla principal sin
realizar ningn cambio.
3

Por ltimo, para establecer el valor de los niveles que se hayan escogido, la
interfaz de usuario tendr el siguiente formato:

Borrar

Aceptar

1.3.3.- Grfico explicativo de la seleccin del nmero de niveles en la fase 3 2/2


Las opciones que permite realizar sern la de borrar, que elimina el ltimo dgito
introducido, aceptar, que intentar establecer el lmite introducido, y evidentemente la
pulsacin de cada dgito, lo ir cargando en la pantalla.
En caso de error, debido a que la distancia o velocidad introducida no sean
vlidas (ya sea por incompatibilidades con otros niveles o porque se salga del rango
establecido), se le notificar dicho error al usuario.

1.4.- IMGENES DE LA PANTALLA TCTIL


El resultado final de cada una de estas pantallas que se han ido explicando en los
apartados anteriores es el siguiente:

1.4.1.- Distancia que supera el primer nivel


4

1.4.2.- Distancia que supera el tercer nivel

1.4.3.- Seleccin del nivel de configuracin de distancia


5

1.4.4.- Seleccin del nivel de configuracin de velocidad

1.4.5.- Establecimiento de un nivel de distancia o velocidad


6

2.- REVISIN DE PROYECTOS SIMILIARES


Dado que el proyecto agrupa fundamentalmente el anlisis de la distancia
comentado en el apartado anterior, as como la velocidad del automvil, se van a
realizar comparaciones con proyectos realizados para cada uno de estos aspectos.

2.1.- PROYECTOS RELACIONADOS CON LA DISTANCIA


1.- En primer lugar se ha encontrado un proyecto en la pgina web cookinghacks en el cual se ha realizado un sensor de distancia para un coche, en el que se
envan los datos de forma inalmbrica, indicando la proximidad exclusivamente
mediante cinco leds verdes y dos rojos:
http://www.cooking-hacks.com/index.php/let-s-cook/community-hacks/parkingsensor
Existen varias diferencias con este proyecto:
- Se pondrn dos sensores de distancia, para cubrir la distancia en todo el
parachoques trasero y no exclusivamente en su punto central. Adems estos dos
sensores se colocarn en el interior del parachoques, para que no se rompan en caso de
choque (como podra ocurrir en este proyecto de cooking-hacks) y adems as se evitar
tambin que le pueda entrar agua en caso de lluvia.
- La comunicacin entre el Arduino y los sensores se realizar mediante cables y
no de forma inalmbrica.
- La forma de mostrar la informacin estar mucho ms depurada mediante la
pantalla, en lugar de exclusivamente con leds, contando tambin con un zumbador.
- Y adems de la distancia se comunicarn otros datos relevantes como la
velocidad, la hora, la temperatura y la humedad.
Se han visto vdeos en el portal YouTube, en los que se muestran proyectos
realizados con sensores de distancia. Hay algunos bastante simples, como el siguiente:
2.- https://www.youtube.com/watch?v=z6KUMyk15ng
En l simplemente se muestra la distancia en centmetros respecto al nico
sensor del que consta.
Hay alguno ms elaborado como el siguiente:
3.- https://www.youtube.com/watch?v=ams-hrPQ90k&feature=related
En el cual se informa sobre la distancia tanto con seis leds de colores verdes,
amarillos y rojos, como mediante una pantalla de dos filas de caracteres. En la superior
colocan informacin en funcin de la distancia, como: Ests lejos, Un poco ms, Le vas
a dar y en la inferior se informa de la distancia en centmetros.
7

Esto tiene algo ms de parecido con nuestro proyecto, pero sigue habiendo
varias diferencias:
- De nuevo hay un nico sensor, mientras que se van a utilizar dos, como ya se
coment anteriormente.
- La pantalla en la que se mostrar la informacin tendr ms datos que la que
aparece en dicho vdeo, adems de agruparlos de una mejor forma.
- Los niveles en los que se le notificar al usuario tanto grficamente, como
acsticamente, podrn ser modificados por el propio usuario, interactuando con la
pantalla tctil.

2.2.- PROYECTOS RELACIONADOS CON LA VELOCIDAD


Y en cuanto al GPS y a la velocidad, se han encontrado los siguientes vdeos de
proyectos realizados con Arduino:
1.- https://www.youtube.com/watch?v=PbA_bOO2mMw
Se muestra un proyecto realizado al conectar el Arduino al Bus Can del
automvil, del que adquieren, entre otros datos, las revoluciones por minuto y la
velocidad del mismo. En el caso del proyecto que se pretende realizar, la velocidad se
tomar del mdulo GPS.
2.- https://www.youtube.com/watch?v=QNlG-Zp_zwM
En este vdeo se muestra un cuadro sacado de un BMW E36, en el que se
mueven las agujas de la velocidad y las revoluciones mediante un Arduino Mega. Pero
de nuevo el proyecto que se va a realizar no sigue dicho formato.
3.- https://www.youtube.com/watch?v=TZWaF-xe6H0&feature=related
Aqu se muestra el funcionamiento de un reloj al conectarlo a un mdulo GPS.
Esta es una de las muchas funcionalidades de las que se va a dotar al proyecto que se
realizar.
4.- https://www.youtube.com/watch?v=XX3L3sadiDM
Y por ltimo aqu se muestra la velocidad recogida del mdulo GPS. De nuevo
es uno de los datos que se mostrarn en el proyecto, recogindolo de la misma forma
que en el vdeo mostrado, pero dotndole de ms aspectos.

3.- MATERIAL NECESARIO Y PRESUPUESTO

Producto

Precio

1 x Arduino Mega 2560

48.38

1 x GPS Module for Arduino v1037A

17.70

1 x Antena GPS interna

9.44

1 x Car Adapter Power Supply--7.5VDC 1A (Sale) 3.54


2 x Ultrasonic Ranging Module: HC-SR04

19.80 $ => 14.85

1 x 2.8'' TFT LCD Screen Module: ITDB02-2.8

22.00 $ => 16.5

1 x Humidity Temperature Sensor DHT11

2.80 $ => 2.10

1 x Buzzer (DC5V)

0.50 $ => 0.375

65 x Jumper Wires (F/M), cables Macho-Hembra

6.49

1 x Placa de pruebas

8.85

13 x Resistencia de 10 k

1.30

Otros materiales no comprados: chapa,


cinta aislante, velcro, plastilina,

...

cables macho-macho...
Total sin transporte

129.525

Transporte cooking-hacks.com

8.26

Transporte iteadstudio.com

4.00 $ => 3.00

Total con transporte

140.785

La imagen correspondiente a todo este material utilizado es la siguiente:

3.1.- Imagen del material utilizado


Y los dispositivos utilizados, que se detallarn en el apartado siguiente, son los
siguientes:

3.2.- Imagen de los dispositivos utilizados


10

4.- DIAGRAMAS, CONEXIONES E IMGENES


Se van a mostrar varios diagramas para realizar la especificacin de cada uno de
los componentes que se van a conectar al Arduino Mega, el cual consta de 54
conexiones digitales y 14 analgicas, tal y como se puede apreciar en la siguiente
imagen:

4.1.- Imagen del Arduino Mega

4.1.- PANTALLA TCTIL


La pantalla tctil consta de 40 pines, de los cuales se van a conectar:

Los pines 21-28, que se corresponden a los buses de datos, DB0-DB7, a


las salidas digitales 37-30.
Los pines 7-15, que representan a los buses de datos, DB8-DB15, a las
salidas digitales 22-29.
Los pines 29-31 y 33-34, correspondientes a la parte tctil de la pantalla,
se conectarn a las salidas digitales 21-19 y 18-17.
El pin 4, que permite seleccionar datos o comandos, RS, se conectar con
la salida digital 38.
El pin 5, de la seal de habilitacin de escritura, con bajo por defecto,
WR, se conectar con la salida digital 39.
El pin 15, de seleccin de chip, tambin bajo por defecto, CS, se
conectar con la salida digital 40.
El pin 17, correspondiente al reset, REST, se conectar con la salida
digital 41.
Adems el pin 6, de la seal de habilitacin de lectura, con bajo por
defecto, RD, se conectar a 3,3 V de corriente.
Tanto el pin 2, de la toma de corriente, VCC, como el pin 19,
correspondiente al contraste, LED-A, se conectarn a 5 V de corriente.
Y finalmente el pin 1, correspondiente a la toma de tierra, GND, se
conectar a tierra.
11

37
36
35
34
33
32
31
30

GND
5V
3,3 V

38
39

22
23
24
25
26
27
28
29

21
20
19
18
17

40
41

4.1.1.- Figura de conexiones de la pantalla tctil

4.1.2.- Imagen de la pantalla tctil


12

Adems pueden apreciarse todas estas conexiones en las dos siguientes


imgenes del Arduino Mega utilizado para la realizacin de este proyecto. Para ello se
ha utilizado un cable azul para la toma de tierra, los de alimentacin en rojo, para las
salidas digitales 22-29 el color naranja, para las salidas digitales 30-41 el color amarillo
y para las salidas digitales 17-21 el color verde:

4.1.3.- Imagen con las conexiones de la pantalla tctil 1/2

4.1.4.- Imagen con las conexiones de la pantalla tctil 2/2


13

4.2.- MDULO GPS


La conexin del mdulo GPS lleva un total de 8 salidas, de las cuales se
conectarn exclusivamente las dos correspondientes a RX y TX, a los pines digitales 8 y
9, tal y como se muestra en la siguiente figura. Tambin hay 2 conexiones ms en ella,
conectadas mediante los cables negro y rojo, que sern para tierra y alimentacin.
9

GND

5V

4.2.1.- Figura de conexiones del mdulo GPS


Adems, se pueden apreciar todas estas conexiones en las siguientes imgenes
tomadas en las pruebas realizadas con el Arduino Mega. Para ello se ha vuelto a utilizar
un cable rojo para la alimentacin, uno azul para la toma de tierra y los verdes para los
pines digitales 8 y 9.

4.2.2.- Imagen con las conexiones de la pantalla tctil 1/2


14

4.2.3.- Imagen con las conexiones de la pantalla tctil 2/2


4.3.- SENSORES DE DISTANCIA
Para la explicacin de la conexin de los sensores de distancia se ha realizado la
figura 4.3.1. mediante dos elementos que representan estos sensores, aunque no son
iguales a los que se utilizarn en realidad. Se han representado mediante los cables
azules las conexiones a todos los pines digitales, conectadas a 50 (trigger del primero),
51 (echo del primero), 52 (trigger del segundo) y 53 (echo del segundo). Adems hay
dos conexiones a tierra y dos a alimentacin, representadas con cables negros y rojos
respectivamente en la siguiente figura realizada con Fritzing:

4.3.1. Figura de las conexiones con los sensores de distancia (Fritzing)

15

La imagen de las conexiones sobre los sensores de distancia reales es la


siguiente:

50 - 51

52 - 53

5V
GND

4.3.2. Figura de las conexiones con los sensores de distancia


Y por ltimo se ha tomado una imagen correspondiente a la conexin de los
sensores de distancia al Arduino Mega. En ella se han vuelto a hacer conexiones a tierra
con cables azules y a alimentacin con cables rojos, mientras que las conexiones a los
pines 50-53 se realizan mediante cables verdes:

4.3.3. Imagen de las conexiones con los sensores de distancia

16

4.4.- ZUMBADOR
El zumbador llevar una simple conexin a tierra y otra al pin digital 5, tal y
como se puede observar en la siguiente figura realizada con Fritzing:

4.4.1. Figura de la conexin del zumbador (Fritzing)


Las conexiones tambin se indican en la siguiente figura sobre una imagen real
del zumbador:
5
GND

4.4.2. Figura de la conexin del zumbador


17

Para acoplar este zumbador al Arduino Mega, se ha conectado simplemente su


pata ms corta a tierra (con el cable azul), mientras que la otra se ha llevado al pin
digital 5 (con el cable naranja), tal y como se puede apreciar en la siguiente imagen:

4.4.3. Imagen de la conexin del zumbador


4.5.- SENSOR DE TEMPERATURA Y HUMEDAD
Por ltimo, para conectar el sensor de temperatura y humedad, se volver a
conectar a tierra y a alimentacin, y adems, de las otras dos patitas que tiene, solo se
conectar la ms cercana a la de alimentacin, tal y como se puede apreciar en la figura
4.5.1. La conexin negra se corresponde a la toma de tierra, la azul al pin digital 2, a
modo de conexin analgica, y la roja a la alimentacin. Adems se debe conectar esta
entrada analgica mediante una resistencia conectada a la alimentacin, tal y como se
puede observar a continuacin:

GND

5 k
5V

4.5.1. Figura de la conexin del sensor de temperatura y humedad


18

Tambin se ha realizado su representacin mediante el programa Fritzing de la


siguiente forma:

4.5.2. Figura de la conexin del sensor de temperatura y humedad (Fritzing)

El esquemtico relativo a este sensor de temperatura y humedad se puede


apreciar tambin en su esquemtico correspondiente:

4.5.3. Esquemtico de la conexin del sensor de temperatura y humedad


19

Y por ltimo, su conexin real en la placa de conexiones se puede apreciar


mediante la siguiente imagen:

4.5.4. Imagen de la conexin del sensor de temperatura y humedad

20

5.- ELEMENTOS ADICIONALES


Para ayudar en el acoplamiento de todos estos componentes analizados en el
apartado 4, se han utilizado los elementos que se observan en la siguiente imagen, los
cuales sern detallados a continuacin:

5.1.- Elementos adicionales

En primer lugar se han adquirido 12 resistencias ms de 10 k, para colocarlas


en las siguientes conexiones de la pantalla tctil analizada en el apartado 4.1:

conexiones DB8-DB15, a los pines 22-29


conexin RS, al pin 38
conexin WR, al pin 39
conexin CS, al pin 40
conexin REST, al pin 41

Estas resistencias son iguales que la utilizada para el sensor de temperatura y


humedad, que se especific en el apartado 4.5.
En la siguiente imagen se puede apreciar este tipo de resistencias:

21

5.2.- Resistencias de 10 k
Para evitar soldar cables y realizar las conexiones ms fcilmente se ha utilizado
la siguiente placa de conexiones:

5.3.- Placa de conexiones


22

Para realizar las conexiones con los sensores de distancia, se han utilizado
clemas de conexin y punteros, que aparecen en la siguiente imagen:

5.4.- Clemas de conexin y punteros


Se han utilizado cables de seis metros para hacer estas conexiones y las
siguientes cajas de chapa para cubrir los sensores de distancia:

5.5.- Cajas de chapa para cubrir los sensores de distancia


23

Y por ltimo todos los componentes han sido integrados en el interior de una
caja de cartn. Para ello se realiz un agujero para ver la pantalla, as como otros dos
para poder meter los cables de los sensores de distancia, el/los cable/s de alimentacin y
la antena del mdulo GPS. Esta caja va unida a la bandeja del coche mediante velcro y
los componentes que se han situado en su interior van pegados con cinta aislante.
La caja utilizada es la que aparece en la siguiente imagen:

5.6.- Caja para introducir los componentes


Y para la elaboracin de todo este proyecto tambin se han utilizado otros
elementos como:

Radial: para cortar el parachoques y realizar los agujeros en los que se


situarn las cajas de chapa con los sensores de distancia.

Cinta aislante: para fijar cables y los componentes en el interior de la caja


de cartn.

Plastilina: para ajustar correctamente los sensores de distancia en las


cajas metlicas, evitando as movimientos o incorrectas fijaciones.

Destornilladores, tijeras, cter... para trabajar con los componentes.

24

6.- IMPLEMENTACIN DEL CDIGO

Con el fin de realizar la codificacin necesaria para el correcto funcionamiento


de todos los dispositivos, se han utilizado las siguientes libreras:

ITDB02_Touch: correspondiente a las funciones tctiles utilizadas para


la pantalla tctil.
Descargable en:
http://www.henningkarlsen.com/electronics/library.php?id=35

LB_GPS: utilizada para el acceso a los datos del mdulo GPS.


Descargable en:
http://www.cooking-hacks.com/skin/frontend/default/cooking/
pdf/Libelium-LB_GPS-01a.zip

Ultrasonic: permite la utilizacin de las funciones propias de los sensores


de distancia por ultrasonidos.
Descargable en:
http://iteadstudio.com/store/images/produce/
Sensor/HCSR04/Ultrasonic.rar

DHT: aporta los mtodos necesarios extraer la informacin del sensor de


temperatura y humedad.
Descargable en:
https://github.com/adafruit/DHT-sensor-library

UTFT: utilizada para mostrar toda la informacin por la pantalla tctil,


tanto para hacer botones o colocar texto, como para editar el color o el
tamao de todos estos elementos.
Descargable en:
http://henningkarlsen.com/electronics/library.php?id=52

Stdlib.h: utilizada para realizar operaciones concretas de C, como atoi.

Adems, se prob la librera correspondiente a Protothreads (accesible desde la


direccin: https://www.sics.se/~adam/pt/pt-1.4-refman/a00022.html), pero no result de
utilidad, ya que solamente simulan el comportamiento de los hilos, sin llegar a ejecutar
los hilos al mismo tiempo, sino que dicha ejecucin sigue siendo secuencial.
Por lo tanto la realizacin de dicho cdigo sin hilos incluye ciertos aspectos poco
deseables, ya que mientras se est actualizando la informacin de la pantalla, o bien
mientras est sonando el zumbador, no se puede hacer uso de la funcin tctil de la
pantalla, aunque dicho tiempo no es elevado.
Una vez analizadas todas las libreras utilizadas, a continuacin se expone la
propia implementacin del cdigo realizado para este ordenador de a bordo, en el que
se comienza declarando las libreras, a continuacin las constantes y variables
utilizadas, para seguir con la inicializacin en el setup, diversas funciones usadas y
finalmente el loop que permite realizar las iteraciones.
25

//Librerias
#include <ITDB02_Touch.h>
#include <LB_GPS.h>
#include <Ultrasonic.h>
#include <DHT.h>
#include <UTFT.h>
#include <stdlib.h>
//Constantes
#define PIN_TEMP 2
#define PIN_TRIGER_SENSOR_2 52
#define PIN_ECHO_SENSOR_2 53
#define PIN_TRIGER_SENSOR_1 50
#define PIN_ECHO_SENSOR_1 51
#define RS 38
#define WR 39
#define CS 40
#define RST 41
#define TCLK 21
#define TCS 20
#define TDIN 19
#define TDOUT 18
#define IRQ 17
#define BUZZER 5
//Fuentes del programa
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
//Variables de los componentes
//Sensores de distancia
Ultrasonic ultrasonic_2(PIN_TRIGER_SENSOR_2,PIN_ECHO_SENSOR_2);
Ultrasonic ultrasonic_1(PIN_TRIGER_SENSOR_1,PIN_ECHO_SENSOR_1);
//Sensor de temperatura y humedad
DHT dht(PIN_TEMP, DHT11);
//Pantalla y Tactil
UTFT myLCD(ITDB28,RS,WR,CS,RST);
ITDB02_Touch myTouch(TCLK,TCS,TDIN,TDOUT,IRQ);
//Variables globales para el funcionamiento del programa
long update_time;
int x, y;
char stCurrent[20]="";
int stCurrentLen=0;
char stLast[20]="";
boolean mode_auto=true, mode_speed=false, mode_distance=false;
float humidity, temperature;
int velocity;
char* time;
int distance_1,distance_2;
//Niveles por defecto de velocidad y distancia
int level_v1=90,level_v2=100,level_v3=110;
int level_d1=30,level_d2=20,level_d3=8;
26

//Ajuste de los pines de los componentes


void setup() {
//Ajuste de sensor de temperatura
Serial.begin(9600);
dht.begin();
//Ajuste de la pantalla
myLCD.InitLCD(LANDSCAPE);
myLCD.clrScr();
myTouch.InitTouch(LANDSCAPE);
myTouch.setPrecision(PREC_MEDIUM);
myLCD.setFont(BigFont);
//Ajuste piezoelectrico
pinMode(BUZZER,OUTPUT);
GPS.init();
delay(100);
}
//Funcion usada por pantalla tres para actualizar el valor
deseado
void updateStr(int val)
{
if (stCurrentLen<20)
{
stCurrent[stCurrentLen]=val;
stCurrent[stCurrentLen+1]='\0';
stCurrentLen++;
myLCD.setColor(0, 255, 0);
myLCD.print(stCurrent, LEFT, 224);
}
else
{
myLCD.setColor(255, 0, 0);
myLCD.print("Fuera de rango", CENTER, 192);
delay(500);
myLCD.print("
", CENTER, 192);
delay(500);
myLCD.print("Fuera de rango", CENTER, 192);
delay(500);
myLCD.print("
", CENTER, 192);
myLCD.setColor(0, 255, 0);
}
}
//Dibuja un recuadro rojo cuando tocamos algun boton de la
pantalla
void waitForIt(int x1, int y1, int x2, int y2)
{
myLCD.setColor(255, 0, 0);
myLCD.drawRoundRect (x1, y1, x2, y2);
while (myTouch.dataAvailable())
myTouch.read();
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (x1, y1, x2, y2);
}

27

//Botones de Auto, Velocidad y Distancia


void options_buttons(){
if(mode_auto){
myLCD.setBackColor(255,0,0);
myLCD.setColor(255, 0, 0);
}else{
myLCD.setBackColor(0,0,255);
myLCD.setColor(0, 0, 255);
}
myLCD.fillRoundRect (0, 0, 60, 30);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (0, 0, 60, 30);
myLCD.print("Aut", 5, 8);
if(mode_speed){
myLCD.setBackColor(255,0,0);
myLCD.setColor(255, 0, 0);
}else{
myLCD.setBackColor(0,0,255);
myLCD.setColor(0, 0, 255);
}
myLCD.fillRoundRect (61, 0, 121, 30);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (61, 0, 121, 30);
myLCD.print("Vel", 66, 8);
if(mode_distance){
myLCD.setBackColor(255,0,0);
myLCD.setColor(255, 0, 0);
}else{
myLCD.setBackColor(0,0,255);
myLCD.setColor(0, 0, 255);
}
myLCD.fillRoundRect (122, 0, 182, 30);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (122, 0, 182, 30);
myLCD.print("Dst", 127, 8);
}
//Pantalla principal
void screen_one(){
int pulso_correcto=0;
myLCD.clrScr();
//Dibujamos botones de la pantalla inicial
options_buttons();
//Botones de ajuste
myLCD.setBackColor(0,0,255);
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (183, 0, 319, 30);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (183, 0, 319, 30);
myLCD.setColor(0,0,0);
myLCD.fillCircle(210,15,10);
myLCD.setColor(255,255,255);
myLCD.drawCircle(210,15,10);
28

myLCD.setColor(0,0,0);
myLCD.fillCircle(250,15,10);
myLCD.setColor(255,255,255);
myLCD.drawCircle(250,15,10);
myLCD.setColor(0,0,0);
myLCD.fillCircle(290,15,10);
myLCD.setColor(255,255,255);
myLCD.drawCircle(290,15,10);
myLCD.setBackColor(0,0,255);
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (0, 179, 91, 239);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (0, 179, 91, 239);
myLCD.print("Conf.", 5, 191);
myLCD.print("Dist", 5, 215);
myLCD.setBackColor(0,0,255);
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (92, 179, 183, 239);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (92, 179, 183, 239);
myLCD.print("Conf.", 97, 191);
myLCD.print("Veloc", 97, 215);
while(pulso_correcto==0){
//Aqui se actualizan los valores (Cada 2 segundos)
update_time=millis()/1000;
if((update_time>0) && (update_time%2==0)){
update();
}
//Si se presiona un punto de la pantalla se activa
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((y>=0) && (y<=30))
{
if ((x>=0) && (x<=60))
{
mode_auto=true;
mode_speed=false;
mode_distance=false;
waitForIt(0, 0, 60, 30);
//Cambiar color al Automatico
options_buttons();
}else if ((x>=61) && (x<=121)){
mode_auto=false;
mode_speed=true;
mode_distance=false;
waitForIt(61, 0, 121, 30);
//Cambiar color a la Velocidad
options_buttons();
}else if ((x>=122) && (x<=182)){
29

mode_auto=false;
mode_speed=false;
mode_distance=true;
waitForIt(122, 0, 182, 30);
//Cambiar color a la distancia
options_buttons();
}
}else if((y>=179) && (y<=239)){
if((x>=0) && (x<=91)){
pulso_correcto=1;
waitForIt(0,179,91,239);
}else if((x>=92) && (x<=183)){
pulso_correcto=2;
waitForIt(92,179,183,239);
}
}
}
}
//Para modificar los niveles de Distancia
if(pulso_correcto==1) screen_two(1);
//Para modificar los niveles de velocidad
else screen_two(2);
}
//Pantalla secundaria, configuracion de los niveles
//Se elige el nivel y se cambia, dentro de los parametros
void screen_two (int modo){
//Modo 1 distancia, 2 velocidad;
int pulso_correcto=0;
myLCD.clrScr();
myLCD.setColor(255,255,255);
myLCD.setBackColor(0,0,0);
if (modo==1){
myLCD.print("Que nivel",CENTER,0);
myLCD.print("de distancia",CENTER,20);
myLCD.print("desea configurar?",CENTER , 40);
myLCD.print("**En centimetros",LEFT ,200);
}else{
myLCD.print("Que nivel",CENTER,0);
myLCD.print("de velocidad",CENTER,20);
myLCD.print("desea configurar?",CENTER , 40);
myLCD.print("**En km/hora",LEFT ,200);
}
myLCD.setBackColor(0, 0, 255);
for (x=0; x<3; x++)
{
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (80+(x*60), 80, 130+(x*60), 130);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (80+(x*60), 80, 130+(x*60), 130);
myLCD.printNumI(x+1, 97+(x*60), 97);
}
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (80, 140, 250, 180);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (80, 140, 250, 180);
30

myLCD.print("Volver", 118, 152);


//Empieza la pantalla tactil
while(pulso_correcto==0){
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((y>=80) && (y<=130))
{
if ((x>=80) && (x<=130))
{
//Nivel 1
pulso_correcto=1;
waitForIt(80, 80, 130, 130);
}else if ((x>=140) && (x<=190)){
//Nivel 2
pulso_correcto=2;
waitForIt(140, 80, 190, 130);
}else if ((x>=200) && (x<=250)){
//Nivel 3
pulso_correcto=3;
waitForIt(200, 80, 250, 130);
}
}else if((y>=140) && (y<=180)){
if((x>=80) && (x<=250)){
//Volver a la pantalla
pulso_correcto=4;
waitForIt(80, 140, 250, 180);
}
}
}
}
if(pulso_correcto<4){
//Vamos a la pantalla con teclado
screen_three(modo,pulso_correcto);
}else{
//Vuelve a la pantalla principal
screen_one();
}
}
//Mensajes de error para screen_three
void error_message(char *error){
myLCD.setColor(255, 0, 0);
myLCD.print(error, CENTER, 192);
delay(500);
myLCD.print("
", CENTER, 192);
delay(500);
myLCD.print(error, CENTER, 192);
delay(500);
myLCD.print("
", CENTER, 192);
myLCD.setColor(0, 255, 0);
}
31

//Pantalla para escribir valores, es un teclado tactil


void screen_three(int modo, int nivel){
myLCD.clrScr();
//Modo 1 distancia, 2 velocidad;
myLCD.setColor(0, 0, 255);
myLCD.setBackColor(0, 0, 255);
//Dibujamos los botones de los numeros
for (x=0; x<5; x++)
{
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60);
myLCD.printNumI(x+1, 27+(x*60), 27);
}
//Dibujamos los botones centrales
for (x=0; x<5; x++)
{
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120);
if (x<4)
myLCD.printNumI(x+6, 27+(x*60), 87);
}
myLCD.print("0", 267, 87);
//Dibujamos los botones de abajo
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (10, 130, 150, 180);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (10, 130, 150, 180);
myLCD.print("Clear", 40, 147);
myLCD.setColor(0, 0, 255);
myLCD.fillRoundRect (160, 130, 300, 180);
myLCD.setColor(255, 255, 255);
myLCD.drawRoundRect (160, 130, 300, 180);
myLCD.print("Enter", 190, 147);
myLCD.setBackColor (0, 0, 0);
//Empieza la pantalla tactil
while (true)
{
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();
if ((y>=10) && (y<=60)) // Primera fila
{
if ((x>=10) && (x<=60)) // Boton: 1
{
waitForIt(10, 10, 60, 60);
updateStr('1');
}
if ((x>=70) && (x<=120)) // Boton: 2
{
32

waitForIt(70, 10, 120, 60);


updateStr('2');
}
if ((x>=130) && (x<=180)) // Boton: 3
{
waitForIt(130, 10, 180, 60);
updateStr('3');
}
if ((x>=190) && (x<=240)) // Boton: 4
{
waitForIt(190, 10, 240, 60);
updateStr('4');
}
if ((x>=250) && (x<=300)) // Boton: 5
{
waitForIt(250, 10, 300, 60);
updateStr('5');
}
}
if ((y>=70) && (y<=120)) // Fila central
{
if ((x>=10) && (x<=60)) // Boton: 6
{
waitForIt(10, 70, 60, 120);
updateStr('6');
}
if ((x>=70) && (x<=120)) // Boton: 7
{
waitForIt(70, 70, 120, 120);
updateStr('7');
}
if ((x>=130) && (x<=180)) // Boton: 8
{
waitForIt(130, 70, 180, 120);
updateStr('8');
}
if ((x>=190) && (x<=240)) // Boton: 9
{
waitForIt(190, 70, 240, 120);
updateStr('9');
}
if ((x>=250) && (x<=300)) // Boton: 0
{
waitForIt(250, 70, 300, 120);
updateStr('0');
}
}
if ((y>=130) && (y<=180)) //Fila final
{
if ((x>=10) && (x<=150)) // Boton: Clear
{
waitForIt(10, 130, 150, 180);
stCurrent[0]='\0';
stCurrentLen=0;
33

myLCD.setColor(0, 0, 0);
myLCD.fillRect(0, 224, 319, 239);
}
if ((x>=160) && (x<=300)) // Boton: Enter
{
waitForIt(160, 130, 300, 180);
if (stCurrentLen>0)
{
for (x=0; x<stCurrentLen+1; x++)
{
stLast[x]=stCurrent[x];
}
stCurrent[0]='\0';
stCurrentLen=0;
myLCD.setColor(0, 0, 0);
myLCD.fillRect(0, 208, 319, 239);
myLCD.setColor(0, 255, 0);
myLCD.print(stLast, LEFT, 208);
int answer= atoi(stLast);
if (modo==1){//distancia
if (nivel==1){
if (answer > level_d2 && answer < 200){
level_d1=answer;
break;
}else{
error_message("Distancia incorrecta");
}
}else if (nivel==2){
if (answer > level_d3 && answer < level_d1){
level_d2=answer;
break;
}else{
error_message("Distancia incorrecta");
}
}else if (nivel==3){
if (answer < level_d2 && answer > 2){
level_d3=answer;
break;
}else{
error_message("Distancia incorrecta");
}
}
}else if (modo==2){//velocidad
if (nivel==1){
if (answer < level_v2 && answer > 50){
level_v1=answer;
break;
}else{
error_message("Velocidad incorrecta");
}
}else if (nivel==2){
if (answer > level_v1 && answer < level_v3){
level_v2=answer;
break;
}else{
error_message("Velocidad incorrecta");
34

}
}else if (nivel==3){
if (answer > level_v2 && answer<250){
level_v3=answer;
break;
}else{
error_message("Velocidad incorrecta");
}
}
}
}
else
{
error_message("Texto vacio");
}
}
}
}
}
screen_two(modo);
}
//Se encarga de actualizar la velocidad
void print_velocity(int vel){
myLCD.print("Velocidad:", 10, 50);
myLCD.print("
",10,100);
myLCD.print("
",10,115);
myLCD.print("
",10,130);
myLCD.print("
",10,145);
myLCD.setFont(SevenSegNumFont);
myLCD.printNumI(vel,10,100);
myLCD.setFont(BigFont);
myLCD.print("Km/h", 110, 100);
if(vel>=level_v1){ //Semaforo Verde
myLCD.setColor(0,255,0);
myLCD.fillCircle(210,15,10);
}else{
myLCD.setColor(0,0,0);
myLCD.fillCircle(210,15,10);
}
if(vel>=level_v2){ //Semaforo Ambar
myLCD.setColor(255,127,0);
myLCD.fillCircle(250,15,10);
tone(BUZZER,500);//Aviso sonoro
delay(500);
noTone(BUZZER);
}else{
myLCD.setColor(0,0,0);
myLCD.fillCircle(250,15,10);
}
if(vel>=level_v3){ //Semaforo Rojo
myLCD.setColor(255,0,0);
myLCD.fillCircle(290,15,10);
tone(BUZZER,500);//Aviso sonoro
delay(500);
noTone(BUZZER);
35

tone(BUZZER,500);//Aviso sonoro
delay(500);
noTone(BUZZER);
}else{
myLCD.setColor(0,0,0);
myLCD.fillCircle(290,15,10);
}
}
//Se encarga de actualizar la distancia
void print_distance(int dist){
myLCD.print("Distancia:", 10, 50);
myLCD.print("
",10,100);
myLCD.print("
",10,115);
myLCD.print("
",10,130);
myLCD.print("
",10,145);
myLCD.setFont(SevenSegNumFont);
myLCD.printNumI(dist,10,100);
myLCD.setFont(BigFont);
myLCD.print("CM ", 110, 100);
if(dist<=level_d1){ //Semaforo Verde
myLCD.setColor(0,255,0);
myLCD.fillCircle(210,15,10);
}else{
myLCD.setColor(0,0,0);
myLCD.fillCircle(210,15,10);
}
if(dist<=level_d2){ //Semaforo Ambar
myLCD.setColor(255,127,0);
myLCD.fillCircle(250,15,10);
tone(BUZZER,500);//Aviso sonoro
delay(500);
noTone(BUZZER);
}else{
myLCD.setColor(0,0,0);
myLCD.fillCircle(250,15,10);
}
if(dist<=level_d3){ //Semaforo Rojo
myLCD.setColor(255,0,0);
myLCD.fillCircle(290,15,10);
tone(BUZZER,500);//Aviso sonoro
delay(500);
noTone(BUZZER);
tone(BUZZER,500);//Aviso sonoro
delay(500);
noTone(BUZZER);
}else{
myLCD.setColor(0,0,0);
myLCD.fillCircle(290,15,10);
}
}

36

//Funcion para sacar la hora


void print_Time(char *horatotal){
int index=0,count=0;
char time[30],hora[5],minute[5];
while (*horatotal!=(char)0 && index==0){
if (index==0){
if (*horatotal!=(char)46)
{
time[count++] = *horatotal;
}
else {
time[count] = (char)0;
count=0 ;
index++ ;
}
}
horatotal++;
}
index=0;
count=0;
int contador=0;
while(index<4){
if (index<=1){
hora[count++]=time[index];
}else{
minute[contador++]=time[index];
}
index++;
}
hora[count]='\0';
minute[contador]='\0';
int hour=atoi(hora)+2;
myLCD.print("
",200,80);
myLCD.printNumI(hour, 200, 80);
myLCD.print(":", 230, 80);
myLCD.print(minute, 245, 80);
}
//Funciones de Actualizacion de Datos
void update(){
int distance;
velocity = (int)GPS.getSpeed();
delay(100);
GPS.getLocation();
distance_1=ultrasonic_1.Ranging(CM);
distance_2=ultrasonic_2.Ranging(CM);
humidity = dht.readHumidity();
temperature = dht.readTemperature();
myLCD.setColor(255,255,255);
myLCD.setBackColor(0,0,0);
if(distance_1>distance_2){
distance=distance_2;
}else{
distance=distance_1;
37

}
if (distance>300){
distance=300;
}
if (velocity>200){
velocity=200;
}else if (velocity<0){
velocity=0;
}
//Imprimimos Humedad y Temperatura
myLCD.setColor(255,255,255);
myLCD.print("Hora:", 200, 50);
print_Time(GPS.timeGPS);
myLCD.print("Tempt:", 200, 110);
myLCD.print("
",200,140);
myLCD.printNumF(temperature,1, 200, 140);
myLCD.print("C", 270, 140);
myLCD.print("Humed:", 200, 170);
myLCD.print("
",200,200);
myLCD.printNumF(humidity,1, 200, 200);
myLCD.print("%", 270, 200);
if(mode_auto){
if(velocity<20){
print_distance(distance);
}else{
print_velocity(velocity);
}
}else if(mode_speed){
print_velocity(velocity);
}else if(mode_distance){
print_distance(distance);
}
}
void loop()
{
screen_one();
}

38

7.- RESULTADO FINAL DEL PROYECTO


Los acabados finales de las pantallas aparecen en el apartado 1.4. A
continuacin se exponen las imgenes del resultado obtenido con los dems elementos:

7.1.- Colocacin de uno de los sensores de distancia en el parachoques trasero

7.2.- Conexin de la pantalla tctil con las 12 resistencias


39

7.3.- Componentes en el interior de la caja de madera 1/2

7.4.- Componentes en el interior de la caja de madera 2/2


40

7.5.- Pruebas de distancia

7.6.- Pruebas de velocidad


41

8.- VALORACIN, DIFICULTADES Y COMENTARIOS


La valoracin general del proyecto es bastante positiva, ya que, aunque se han
encontrado diversos obstculos en su realizacin, se han podido solventar y con ello
finalizar su realizacin tal y como se tena previsto en un inicio.
Sin embargo, ha llevado bastante tiempo su realizacin, ya que los componentes
se pidieron en dos lugares distintos, con fechas de entrega distintas, aunque fue previsto
con tiempo para comenzar su elaboracin en la fecha establecida.
Una vez que tuvimos todos los componentes, comenzamos la prueba de cada
uno de ellos por separado, encontrando en algunos de ellos bastantes ms dificultades
que en otros:

El zumbador ha sido el elemento ms sencillo de probar, ya que


estbamos familiarizados con su uso.

Los sensores de distancia tampoco nos llevaron mucho tiempo, ya que


la librera que encontramos en un primer momento funcion
correctamente.

El sensor de humedad y temperatura nos llev ms tiempo del


esperado, hasta que encontramos la librera y los tutoriales correctos, ya
que de las cuatro patitas de las que consta, tan solo se utilizan tres.

La pantalla tctil ha sido ms que difcil, compleja, ya que requiere la


utilizacin de dos libreras: por un lado la de la propia pantalla para
representar los distintos elementos en ella y por otro la relativa al aspecto
tctil.
Por lo tanto el funcionamiento qued claro desde un primer momento,
pero su realizacin ha sido bastante laboriosa.

El mdulo GPS ha sido el mayor problema. En primer lugar la librera


que se aportaba en la pgina del producto no era correcta, con lo que nos
cost bastante encontrar la apropiada.
Adems su conexin tambin era poco intuitiva, ya que de las ocho
patitas que tiene tan solo se conectan dos, a travs de las cuales se
aportan todos los datos.
Un gran problema ha sido la correcta lectura de la velocidad, ya que para
que el mdulo GPS pueda ofrecer la velocidad debe estar conectado a
varios satlites, lo cual puede tardar bastante tiempo, desde 5 o 10
minutos hasta 30 o 40 minutos. Tambin el correcto formato de la hora
ha llevado bastante tiempo.
Y el otro gran problema fue dotarle de alimentacin, ya que al conectar
todos los componentes al mismo tiempo no haba energa suficiente bien
para la pantalla tctil o bien para el mdulo GPS. Este problema se
solucion una vez que se dot de alimentacin desde la conexin del
mechero del coche, que aporta mayor voltaje al Arduino.
42

En cualquier caso la alimentacin apropiada para que todos los componentes


funcionen correctamente es la que recibe al mismo tiempo tanto del cable con
terminacin USB, como el que termina en la conexin del mechero en el coche.
En el apartado anterior, correspondiente a la implementacin, se han comentado
los problemas encontrados al intentar utilizar la librera correspondiente a Protothreads,
al no funcionar de la manera esperada.
Otro problema fue el que tuvimos al realizar la integracin de todos los
componentes en una nueva placa de conexiones, con la cual no se obtena ningn
resultado coherente. En este caso finalmente nos percatamos de que no se haba
conectado una mitad de la fila con la otra mitad, por lo tanto ni la toma de tierra, ni la
alimentacin estaban llegando a los componentes.
Y por ltimo, el montaje de todos los componentes entre s y su inclusin en el
coche tampoco ha sido sencilla, ya que se tuvieron que hacer dos agujeros para los
sensores de distancia en el parachoques trasero, construir dos cajas de chapa para
meterlos en ellas y llevar los cables desde dicho parachoques hasta el salpicadero, donde
se ha colocado la caja con todos los dems componentes.
Como conclusin, se cree haber realizado un trabajo bastante completo, en el
que se han cumplido con los requisitos que se establecieron previamente a su
realizacin y solventando todos aquellos inconvenientes que han ido surgiendo a lo
largo de su elaboracin.

43

9.- HOJAS DE CARACTERSTICAS DE LOS COMPONENTES

1 Arduino Mega 2560:

http://www.cooking-hacks.com/index.php/shop/arduino/arduino-mega2560.html
http://arduino.cc/en/Main/ArduinoBoardMega2560

1 GPS Module for Arduino v1037A:

http://www.cooking-hacks.com/index.php/gps-module-for-arduino-166.html
http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-gps
http://arduino.cc/blog/2009/04/21/library-for-libeliums-gps-module/
http://www.cooking-hacks.com/skin/frontend/default/cooking/pdf
/GPS_Firmware_GSC3_3.5.0_V4.2.pdf
http://home.mira.net/~gnb/gps/nmea.html

1 Antena GPS interna:

http://www.cooking-hacks.com/index.php/internal-gps-antenna.html

1 Car Adapter Power Supply--7.5VDC 1A (Sale):

http://www.cooking-hacks.com/index.php/shop/power-1/power-supply/caradapter-power-supply-7-5vdc-1a-sale.html

2 Ultrasonic Ranging Module: HC-SR04:

http://iteadstudio.com/store/index.php?main_page=product_info&cPath=4&pr
oducts_id=52
http://iteadstudio.com/store/images/produce/Sensor/HCSR04/HC-SR04.pdf
http://iteadstudio.com/application-note/arduino-library-for-ultrasonic-rangingmodule-hc-sr04/

1 2.8'' TFT LCD Screen Module: ITDB02-2.8:

http://iteadstudio.com/store/index.php?main_page=product_info&cPath=57_58
&products_id=530
http://iteadstudio.com/store/images/produce/Display/TFT/TFTLCD_ITBD02_2.
8/ITDB02_2.8_sch.pdf
http://iteadstudio.com/store/images/produce/Display/TFT/TFTLCD_ITBD02_2.
8/ITDB02_2.8_DS.pdf

44

http://iteadstudio.com/store/images/produce/Display/TFT/TFTLCD_ITBD02_2.
8/ILI9325DS_V0.29_2007-08-21-15-12-29-179.pdf
http://iteadstudio.com/store/images/produce/Display/TFT/TFTLCD_ITDB02_2.
2/TSC2046_DS.pdf
http://www.henningkarlsen.com/electronics/library.php?id=38
http://www.henningkarlsen.com/electronics/library.php?id=35
http://www.henningkarlsen.com/electronics/library.php?id=37
http://iteadstudio.com/application-note/show-images-and-different-fonts-onitdb02-series-lcd/

1 Humidity Temperature Sensor DHT11:

http://iteadstudio.com/store/index.php?main_page=product_info&cPath=4&product
s_id=242
http://iteadstudio.com/store/images/produce/Sensor/Humidity_temperature_senso
r/DHT11.PDF
http://www.ladyada.net/learn/sensors/dht.html

1 Buzzer (DC5V):

http://iteadstudio.com/store/index.php?main_page=product_info&cPath=10_14
&products_id=169

65 Jumper Wires (F/M), cables Macho-Hembra:

http://www.cooking-hacks.com/index.php/jumper-wires-f-m.html

45

También podría gustarte