Está en la página 1de 50

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA

SISTEMAS EMPOTRADOS Y DE TIEMPO REAL

GRADO EN INGENIERÍA INFORMÁTICA

Proyecto:
Ordenador de a bordo
(visualización de velocidad, distancia, temperatura...)

Nombre: Cupeiro Durán, Carlos

Nombre: López González, Javier

Nombre: Redondo Arroyo, Daniel

CURSO 2011-2012
Índice de contenidos

1.- Descripción del proyecto............................................................................................................................. 1

1.1.- Distancia trasera respecto a un automóvil .................................................................................. 1


1.2.- Velocidad del automóvil ...................................................................................................................... 1
1.3.- Modificación de los límites de notificaciones ............................................................................. 3
1.4.- Imágenes de la pantalla táctil............................................................................................................ 4

2.- Revisión 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 imágenes....................................................................................................... 11

4.1.- Pantalla táctil ......................................................................................................................................... 11


4.2.- Módulo 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.- Implementación del código ...................................................................................................................... 25

7.- Resultado final del proyecto .................................................................................................................... 39

8.- Valoración, dificultades y comentarios ............................................................................................... 42

9.- Hojas de características de los componentes ................................................................................... 44


Índice de ilustraciones

1.2.1.- Gráfico explicativo de la visualización de la pantalla para la fase 2 ................................... 2

1.3.1.- Gráfico explicativo de la visualización de la pantalla para la fase 3 ................................... 3

1.3.2.- Gráfico explicativo de la selección del número de niveles en la fase 3 1/2 .................... 3

1.3.3.- Gráfico explicativo de la selección del número 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.- Selección del nivel de configuración de distancia ..................................................................... 5

1.4.4.- Selección del nivel de configuración 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 táctil ................................................................................... 12

4.1.2.- Imagen de la pantalla táctil ............................................................................................................... 12

4.1.3.- Imagen con las conexiones de la pantalla táctil 1/2 ............................................................... 13

4.1.4.- Imagen con las conexiones de la pantalla táctil 2/2 ............................................................... 13

4.2.1.- Figura de conexiones del módulo GPS.......................................................................................... 14

4.2.2.- Imagen con las conexiones de la pantalla táctil 1/2 ............................................................... 14

4.2.3.- Imagen con las conexiones de la pantalla táctil 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 conexión del zumbador (Fritzing) .......................................................................... 17

4.4.2. Figura de la conexión del zumbador ............................................................................................... 17

4.4.3. Imagen de la conexión del zumbador ............................................................................................. 18

4.5.1. Figura de la conexión del sensor de temperatura y humedad ............................................. 18

4.5.2. Figura de la conexión del sensor de temperatura y humedad (Fritzing) ........................ 19

4.5.3. Esquemático de la conexión del sensor de temperatura y humedad ................................ 19

4.5.4. Imagen de la conexión 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 conexión 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.- Colocación de uno de los sensores de distancia en el parachoques trasero .................... 39

7.2.- Conexión de la pantalla táctil 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.- DESCRIPCIÓN DEL PROYECTO

La realización del proyecto se va a dividir en tres tareas que irán añadiendo


funcionalidad a dicho proyecto como conjunto, así como aumentando su complejidad y
utilidad.

1.1.- DISTANCIA TRASERA RESPECTO A UN AUTOMÓVIL

En primer lugar se recogerá información mediante dos sensores de distancia por


ultrasonidos, colocados en el parachoques trasero del automóvil y en función de la
distancia que aporte cada uno de ellos, se escogerá la mínima de las dos magnitudes
aportadas por ellos. Este dato refleja la distancia que existe entre dicho parachoques y el
objeto más cercano a él, normalmente utilizable en la maniobra de aparcamiento.
Esta información será mostrada en una pantalla táctil, cuyo primer objetivo será
únicamente ofrecer tanto esta distancia, como la temperatura y humedad, recogidas
mediante un sensor que se utilizará para tal función.
Además, se realizará el diseño de un semáforo, con tres luces: verde, naranja y
roja, las cuales se utilizarán a modo de leds de colores. Para que dichas luces se
enciendan, deben ir superándose tres niveles de distancia, uno para cada una de las
luces. Estos niveles se han determinado numéricamente en 30, 20 y 8 centímetros.
Asimismo, habrá redundancia de información, ya que mediante un zumbador se emitirá
un sonido informando también 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 táctil, se
utilizará un Arduino Mega 2560, que consta de 54 entradas/salidas digitales, así como
16 entradas analógicas, a través de las cuales se podrán conectar todos los dispositivos
que se comentarán en el apartado 3.
Y en cuanto a la alimentación que se le suministrará a este Arduino Mega, se
realizará a través de la salida de 12-24 V que hay en todos los automóviles, mediante un
cable que conecta esta salida al Arduino.

1.2.- VELOCIDAD DEL AUTOMÓVIL

En esta fase se añadirá al Arduino Mega un módulo GPS, a través del cual se
obtendrán tanto la velocidad del automóvil, como la hora actual.
Una vez que se recojan estos datos, se reestructurará el formato en el que se
muestra la información a través de la pantalla, comenzando a utilizar la posibilidad que
ofrece de introducir parámetros a través de ella, al ser táctil.
Por lo tanto se va a poder elegir entre tres modos de funcionamiento, los cuales
tienen en común la información sobre la temperatura y la hora en un tamaño de fuente
menor a los datos característicos de cada uno de los modos, que serán explicados a
continuación:

1
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 más próximo a él, tal y como se comentó anteriormente. Además se recuerda
que al pasar cada uno de los límites establecidos para los niveles, se comunicarán estos
hechos de forma acústica y visual según se explicó previamente.

2.- Modo velocidad: el funcionamiento es análogo al caso anterior, solo que esta
vez el dato mostrado será la velocidad del automóvil recogida por el módulo GPS. De
nuevo vuelve a notificarse si se sobrepasan tres límites de velocidad, los cuales se han
establecido en 90, 100 y 110 kilómetros por hora. Por lo tanto al superar dichas
velocidades de nuevo se encenderán las luces correspondientes en la pantalla y también
el zumbador funcionará del mismo modo que en el caso de la distancia.

3.- Modo automático: este será el modo que aparecerá por defecto. En él se
mostrará la velocidad del automóvil, siempre y cuando ésta sea superior a los 10
kilómetros 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 más deprisa
al aparcar). Además puede ser interesante saber esta distancia en paradas, como pasos
de cebra o semáforos, ya que si es una parada con pendiente hacia arriba es conveniente
saber la distancia al objeto que se tenga detrás.

Se ha pensado en una estructuración de la pantalla del siguiente modo:

Automático Velocidad Distancia


14:41

102 km/h
30 º
22 %

1.2.1.- Gráfico explicativo de la visualización de la pantalla para la fase 2

De tal forma que las tres ‘cajas’ que se sitúan en la parte superior de la pantalla,
se utilizarán de modo que el usuario, al pulsar en una de ellas, cambie fácilmente 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 cuál es el que está visualizando en
todo momento.

2
1.3.- MODIFICACIÓN DE LOS LÍMITES DE NOTIFICACIONES

Por último, ya que se cuenta con una pantalla táctil, que permite la introducción
de datos, se le va a permitir al usuario que establezca los valores límites en cuanto a la
velocidad y a la distancia que desee.
Se va a poder elegir cada uno de los tres límites, tanto para la velocidad, como
para la distancia, y de esta forma modificarlo.
Una vez que se acceda mediante la pantalla táctil a la modificación bien de los
límites de la velocidad, o bien de los límites de la distancia, se le pedirá al usuario que
señale qué nivel de límite desea establecer, como se ha comentado anteriormente. A
continuación se le mostrará por la pantalla un teclado numérico, con las opciones de
borrar y aceptar límite actual.
Para ello se ha pensado añadir un par de opciones más a la interfaz de usuario
que se mostró para la segunda fase:

Automático Velocidad Distancia


14:41

102 km/h
30 º
22 %
Conf. Velocidad Conf. Distancia

1.3.1.- Gráfico explicativo de la visualización 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 cambiaría
todo el formato por el siguiente:

¿Qué nivel de velocidad desea configurar?

1 2 3

Volver

1.3.2.- Gráfico explicativo de la selección del número de niveles en la fase 3 1/2

Es bastante intuitivo que hay que pulsar sobre la opción que se desea escoger.
La caja de debajo será para volver directamente a la pantalla principal sin
realizar ningún cambio.

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

1 2 3 4 5

6 7 8 9 0

Borrar Aceptar

1.3.3.- Gráfico explicativo de la selección del número de niveles en la fase 3 2/2

Las opciones que permite realizar serán la de borrar, que elimina el último dígito
introducido, aceptar, que intentará establecer el límite introducido, y evidentemente la
pulsación de cada dígito, lo irá cargando en la pantalla.
En caso de error, debido a que la distancia o velocidad introducida no sean
válidas (ya sea por incompatibilidades con otros niveles o porque se salga del rango
establecido), se le notificará dicho error al usuario.

1.4.- IMÁGENES DE LA PANTALLA TÁCTIL

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.- Selección del nivel de configuración de distancia

5
1.4.4.- Selección del nivel de configuración de velocidad

1.4.5.- Establecimiento de un nivel de distancia o velocidad

6
2.- REVISIÓN DE PROYECTOS SIMILIARES

Dado que el proyecto agrupa fundamentalmente el análisis de la distancia


comentado en el apartado anterior, así como la velocidad del automóvil, 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 página web cooking-


hacks en el cual se ha realizado un sensor de distancia para un coche, en el que se
envían los datos de forma inalámbrica, indicando la proximidad exclusivamente
mediante cinco leds verdes y dos rojos:
http://www.cooking-hacks.com/index.php/let-s-cook/community-hacks/parking-
sensor
Existen varias diferencias con este proyecto:
- Se pondrán dos sensores de distancia, para cubrir la distancia en todo el
parachoques trasero y no exclusivamente en su punto central. Además estos dos
sensores se colocarán en el interior del parachoques, para que no se rompan en caso de
choque (como podría ocurrir en este proyecto de cooking-hacks) y además así se evitará
también que le pueda entrar agua en caso de lluvia.
- La comunicación entre el Arduino y los sensores se realizará mediante cables y
no de forma inalámbrica.
- La forma de mostrar la información estará mucho más depurada mediante la
pantalla, en lugar de exclusivamente con leds, contando también con un zumbador.
- Y además de la distancia se comunicarán otros datos relevantes como la
velocidad, la hora, la temperatura y la humedad.

Se han visto vídeos 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 centímetros respecto al único
sensor del que consta.

Hay alguno más 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 información en función de la distancia, como: Estás lejos, Un poco más, Le vas
a dar… y en la inferior se informa de la distancia en centímetros.

7
Esto tiene algo más 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 información tendrá más datos que la que
aparece en dicho vídeo, además de agruparlos de una mejor forma.
- Los niveles en los que se le notificará al usuario tanto gráficamente, como
acústicamente, podrán ser modificados por el propio usuario, interactuando con la
pantalla táctil.

2.2.- PROYECTOS RELACIONADOS CON LA VELOCIDAD

Y en cuanto al GPS y a la velocidad, se han encontrado los siguientes vídeos 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
automóvil, 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 módulo GPS.

2.- https://www.youtube.com/watch?v=QNlG-Zp_zwM
En este vídeo 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 módulo 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 módulo GPS. De nuevo
es uno de los datos que se mostrarán en el proyecto, recogiéndolo de la misma forma
que en el vídeo mostrado, pero dotándole de más aspectos.

8
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 €

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

3.1.- Imagen del material utilizado

Y los dispositivos utilizados, que se detallarán en el apartado siguiente, son los


siguientes:

3.2.- Imagen de los dispositivos utilizados

10
4.- DIAGRAMAS, CONEXIONES E IMÁGENES

Se van a mostrar varios diagramas para realizar la especificación de cada uno de


los componentes que se van a conectar al Arduino Mega, el cual consta de 54
conexiones digitales y 14 analógicas, tal y como se puede apreciar en la siguiente
imagen:

4.1.- Imagen del Arduino Mega

4.1.- PANTALLA TÁCTIL

La pantalla táctil 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 táctil de la pantalla,
se conectarán 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 señal de habilitación de escritura, con bajo por defecto,
WR, se conectará con la salida digital 39.
 El pin 15, de selección de chip, también 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.
 Además el pin 6, de la señal de habilitación 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 conectarán a 5 V de corriente.
 Y finalmente el pin 1, correspondiente a la toma de tierra, GND, se
conectará a tierra.

11
GND 37
36
5V 35
38 34
3,3 V 39 33
32
22 31
23 30
24 21
25 20
26 19
27
28 18
29 17

40
41

4.1.1.- Figura de conexiones de la pantalla táctil

4.1.2.- Imagen de la pantalla táctil


12
Además pueden apreciarse todas estas conexiones en las dos siguientes
imágenes del Arduino Mega utilizado para la realización de este proyecto. Para ello se
ha utilizado un cable azul para la toma de tierra, los de alimentación 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 táctil 1/2

4.1.4.- Imagen con las conexiones de la pantalla táctil 2/2

13
4.2.- MÓDULO GPS

La conexión del módulo GPS lleva un total de 8 salidas, de las cuales se


conectarán exclusivamente las dos correspondientes a RX y TX, a los pines digitales 8 y
9, tal y como se muestra en la siguiente figura. También hay 2 conexiones más en ella,
conectadas mediante los cables negro y rojo, que serán para tierra y alimentación.

9 8

GND 5V

4.2.1.- Figura de conexiones del módulo GPS


Además, se pueden apreciar todas estas conexiones en las siguientes imágenes
tomadas en las pruebas realizadas con el Arduino Mega. Para ello se ha vuelto a utilizar
un cable rojo para la alimentación, 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 táctil 1/2

14
4.2.3.- Imagen con las conexiones de la pantalla táctil 2/2

4.3.- SENSORES DE DISTANCIA

Para la explicación de la conexión 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 utilizarán 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). Además hay
dos conexiones a tierra y dos a alimentación, 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 conexión de los


sensores de distancia al Arduino Mega. En ella se han vuelto a hacer conexiones a tierra
con cables azules y a alimentación 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 conexión 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 conexión del zumbador (Fritzing)


Las conexiones también se indican en la siguiente figura sobre una imagen real
del zumbador:
5

GND

4.4.2. Figura de la conexión del zumbador

17
Para acoplar este zumbador al Arduino Mega, se ha conectado simplemente su
pata más 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 conexión 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 alimentación, y además, de las otras dos patitas que tiene, solo se
conectará la más cercana a la de alimentación, tal y como se puede apreciar en la figura
4.5.1. La conexión negra se corresponde a la toma de tierra, la azul al pin digital 2, a
modo de conexión analógica, y la roja a la alimentación. Además se debe conectar esta
entrada analógica mediante una resistencia conectada a la alimentación, tal y como se
puede observar a continuación:

GND
5 k

5V 2

4.5.1. Figura de la conexión del sensor de temperatura y humedad

18
También se ha realizado su representación mediante el programa Fritzing de la
siguiente forma:

4.5.2. Figura de la conexión del sensor de temperatura y humedad (Fritzing)

El esquemático relativo a este sensor de temperatura y humedad se puede


apreciar también en su esquemático correspondiente:

4.5.3. Esquemático de la conexión del sensor de temperatura y humedad


19
Y por último, su conexión real en la placa de conexiones se puede apreciar
mediante la siguiente imagen:

4.5.4. Imagen de la conexión 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 serán detallados a continuación:

5.1.- Elementos adicionales

En primer lugar se han adquirido 12 resistencias más de 10 k, para colocarlas


en las siguientes conexiones de la pantalla táctil analizada en el apartado 4.1:
 conexiones DB8-DB15, a los pines 22-29
 conexión RS, al pin 38
 conexión WR, al pin 39
 conexión CS, al pin 40
 conexión 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 más fácilmente 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 conexión y punteros, que aparecen en la siguiente imagen:

5.4.- Clemas de conexión 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 cartón. 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 alimentación y
la antena del módulo 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 elaboración de todo este proyecto también se han utilizado otros


elementos como:

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


situarán las cajas de chapa con los sensores de distancia.

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


de cartón.

 Plastilina: para ajustar correctamente los sensores de distancia en las


cajas metálicas, evitando así movimientos o incorrectas fijaciones.

 Destornilladores, tijeras, cúter... para trabajar con los componentes.

24
6.- IMPLEMENTACIÓN DEL CÓDIGO

Con el fin de realizar la codificación necesaria para el correcto funcionamiento


de todos los dispositivos, se han utilizado las siguientes librerías:

 ITDB02_Touch: correspondiente a las funciones táctiles utilizadas para


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

 LB_GPS: utilizada para el acceso a los datos del módulo GPS.


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

 Ultrasonic: permite la utilización 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 métodos necesarios extraer la información del sensor de


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

 UTFT: utilizada para mostrar toda la información por la pantalla táctil,


tanto para hacer botones o colocar texto, como para editar el color o el
tamaño 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.

Además, se probó la librería correspondiente a Protothreads (accesible desde la


dirección: 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 ejecución sigue siendo secuencial.
Por lo tanto la realización de dicho código sin hilos incluye ciertos aspectos poco
deseables, ya que mientras se está actualizando la información de la pantalla, o bien
mientras está sonando el zumbador, no se puede hacer uso de la función táctil de la
pantalla, aunque dicho tiempo no es elevado.
Una vez analizadas todas las librerías utilizadas, a continuación se expone la
propia implementación del código realizado para este ordenador de a bordo, en el que
se comienza declarando las librerías, a continuación las constantes y variables
utilizadas, para seguir con la inicialización 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


continuación se exponen las imágenes del resultado obtenido con los demás elementos:

7.1.- Colocación de uno de los sensores de distancia en el parachoques trasero

7.2.- Conexión de la pantalla táctil 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.- VALORACIÓN, DIFICULTADES Y COMENTARIOS

La valoración general del proyecto es bastante positiva, ya que, aunque se han


encontrado diversos obstáculos en su realización, se han podido solventar y con ello
finalizar su realización tal y como se tenía previsto en un inicio.

Sin embargo, ha llevado bastante tiempo su realización, ya que los componentes


se pidieron en dos lugares distintos, con fechas de entrega distintas, aunque fue previsto
con tiempo para comenzar su elaboración 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 más dificultades
que en otros:
 El zumbador ha sido el elemento más sencillo de probar, ya que
estábamos familiarizados con su uso.

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


la librería que encontramos en un primer momento funcionó
correctamente.

 El sensor de humedad y temperatura nos llevó más tiempo del


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

 La pantalla táctil ha sido más que difícil, compleja, ya que requiere la


utilización de dos librerías: por un lado la de la propia pantalla para
representar los distintos elementos en ella y por otro la relativa al aspecto
táctil.
Por lo tanto el funcionamiento quedó claro desde un primer momento,
pero su realización ha sido bastante laboriosa.

 El módulo GPS ha sido el mayor problema. En primer lugar la librería


que se aportaba en la página del producto no era correcta, con lo que nos
costó bastante encontrar la apropiada.
Además su conexión también era poco intuitiva, ya que de las ocho
patitas que tiene tan solo se conectan dos, a través de las cuales se
aportan todos los datos.
Un gran problema ha sido la correcta lectura de la velocidad, ya que para
que el módulo GPS pueda ofrecer la velocidad debe estar conectado a
varios satélites, lo cual puede tardar bastante tiempo, desde 5 o 10
minutos hasta 30 o 40 minutos. También el correcto formato de la hora
ha llevado bastante tiempo.
Y el otro gran problema fue dotarle de alimentación, ya que al conectar
todos los componentes al mismo tiempo no había energía suficiente bien
para la pantalla táctil o bien para el módulo GPS. Este problema se
solucionó una vez que se dotó de alimentación desde la conexión del
mechero del coche, que aporta mayor voltaje al Arduino.

42
En cualquier caso la alimentación apropiada para que todos los componentes
funcionen correctamente es la que recibe al mismo tiempo tanto del cable con
terminación USB, como el que termina en la conexión del mechero en el coche.

En el apartado anterior, correspondiente a la implementación, se han comentado


los problemas encontrados al intentar utilizar la librería correspondiente a Protothreads,
al no funcionar de la manera esperada.

Otro problema fue el que tuvimos al realizar la integración de todos los


componentes en una nueva placa de conexiones, con la cual no se obtenía ningún
resultado coherente. En este caso finalmente nos percatamos de que no se había
conectado una mitad de la fila con la otra mitad, por lo tanto ni la toma de tierra, ni la
alimentación estaban llegando a los componentes.

Y por último, el montaje de todos los componentes entre sí y su inclusión 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 demás componentes.

Como conclusión, se cree haber realizado un trabajo bastante completo, en el


que se han cumplido con los requisitos que se establecieron previamente a su
realización y solventando todos aquellos inconvenientes que han ido surgiendo a lo
largo de su elaboración.

43
9.- HOJAS DE CARACTERÍSTICAS DE LOS COMPONENTES

 1 Arduino Mega 2560:


http://www.cooking-hacks.com/index.php/shop/arduino/arduino-mega-
2560.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/car-
adapter-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-ranging-
module-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-on-
itdb02-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