memoria proyecto

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

Upload: soryjero

Post on 11-Aug-2015

173 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Memoria Proyecto

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

Page 2: Memoria Proyecto
Page 3: Memoria Proyecto

Í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

Page 4: Memoria Proyecto

Í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

Page 5: Memoria Proyecto

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

Page 6: Memoria Proyecto

1

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:

Page 7: Memoria Proyecto

2

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

30 º

22 % 102 km/h

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.

Page 8: Memoria Proyecto

3

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

30 º

22 % 102 km/h

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.

Page 9: Memoria Proyecto

4

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

Page 10: Memoria Proyecto

5

1.4.2.- Distancia que supera el tercer nivel

1.4.3.- Selección del nivel de configuración de distancia

Page 11: Memoria Proyecto

6

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

1.4.5.- Establecimiento de un nivel de distancia o velocidad

Page 12: Memoria Proyecto

7

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.

Page 13: Memoria Proyecto

8

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.

Page 14: Memoria Proyecto

9

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 €

Page 15: Memoria Proyecto

10

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

Page 16: Memoria Proyecto

11

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.

Page 17: Memoria Proyecto

12

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

4.1.2.- Imagen de la pantalla táctil

GND

5 V

22 23 24 25 26 27 28 29

3,3 V

38 39

37 36 35 34 33 32 31 30

40 41

21 20 19 18 17

Page 18: Memoria Proyecto

13

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

Page 19: Memoria Proyecto

14

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.

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

9 8

GND 5 V

Page 20: Memoria Proyecto

15

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)

Page 21: Memoria Proyecto

16

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

siguiente:

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

50 - 51 52 - 53

GND

5 V

Page 22: Memoria Proyecto

17

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:

4.4.2. Figura de la conexión del zumbador

GND

5

Page 23: Memoria Proyecto

18

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:

5 k

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

5 V

GND

2

Page 24: Memoria Proyecto

19

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

Page 25: Memoria Proyecto

20

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

Page 26: Memoria Proyecto

21

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:

Page 27: Memoria Proyecto

22

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

Page 28: Memoria Proyecto

23

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

Page 29: Memoria Proyecto

24

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.

Page 30: Memoria Proyecto

25

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.

Page 31: Memoria Proyecto

26

//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;

Page 32: Memoria Proyecto

27

//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);

}

Page 33: Memoria Proyecto

28

//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);

Page 34: Memoria Proyecto

29

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)){

Page 35: Memoria Proyecto

30

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);

Page 36: Memoria Proyecto

31

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);

}

Page 37: Memoria Proyecto

32

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

{

Page 38: Memoria Proyecto

33

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;

Page 39: Memoria Proyecto

34

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");

Page 40: Memoria Proyecto

35

}

}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);

Page 41: Memoria Proyecto

36

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);

}

}

Page 42: Memoria Proyecto

37

//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;

Page 43: Memoria Proyecto

38

}

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();

}

Page 44: Memoria Proyecto

39

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

Page 45: Memoria Proyecto

40

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

Page 46: Memoria Proyecto

41

7.5.- Pruebas de distancia

7.6.- Pruebas de velocidad

Page 47: Memoria Proyecto

42

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.

Page 48: Memoria Proyecto

43

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.

Page 49: Memoria Proyecto

44

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

Page 50: Memoria Proyecto

45

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&products_id=242

http://iteadstudio.com/store/images/produce/Sensor/Humidity_temperature_sensor/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