Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Proyecto:
Ordenador de a bordo
(visualizacin de velocidad, distancia, temperatura...)
CURSO 2011-2012
ndice de contenidos
ndice de ilustraciones
102
14:41
30
km/h
22 %
14:41
102
Conf. Velocidad
30
km/h
22 %
Conf. Distancia
Volver
1.3.2.- Grfico explicativo de la seleccin del nmero de niveles en la fase 3 1/2
Es bastante intuitivo que hay que pulsar sobre la opcin que se desea escoger.
La caja de debajo ser para volver directamente a la pantalla principal sin
realizar ningn cambio.
3
Por ltimo, para establecer el valor de los niveles que se hayan escogido, la
interfaz de usuario tendr el siguiente formato:
Borrar
Aceptar
Esto tiene algo ms de parecido con nuestro proyecto, pero sigue habiendo
varias diferencias:
- De nuevo hay un nico sensor, mientras que se van a utilizar dos, como ya se
coment anteriormente.
- La pantalla en la que se mostrar la informacin tendr ms datos que la que
aparece en dicho vdeo, adems de agruparlos de una mejor forma.
- Los niveles en los que se le notificar al usuario tanto grficamente, como
acsticamente, podrn ser modificados por el propio usuario, interactuando con la
pantalla tctil.
Producto
Precio
48.38
17.70
9.44
1 x Buzzer (DC5V)
6.49
1 x Placa de pruebas
8.85
13 x Resistencia de 10 k
1.30
...
cables macho-macho...
Total sin transporte
129.525
Transporte cooking-hacks.com
8.26
Transporte iteadstudio.com
140.785
37
36
35
34
33
32
31
30
GND
5V
3,3 V
38
39
22
23
24
25
26
27
28
29
21
20
19
18
17
40
41
GND
5V
15
50 - 51
52 - 53
5V
GND
16
4.4.- ZUMBADOR
El zumbador llevar una simple conexin a tierra y otra al pin digital 5, tal y
como se puede observar en la siguiente figura realizada con Fritzing:
GND
5 k
5V
20
21
5.2.- Resistencias de 10 k
Para evitar soldar cables y realizar las conexiones ms fcilmente se ha utilizado
la siguiente placa de conexiones:
Para realizar las conexiones con los sensores de distancia, se han utilizado
clemas de conexin y punteros, que aparecen en la siguiente imagen:
Y por ltimo todos los componentes han sido integrados en el interior de una
caja de cartn. Para ello se realiz un agujero para ver la pantalla, as como otros dos
para poder meter los cables de los sensores de distancia, el/los cable/s de alimentacin y
la antena del mdulo GPS. Esta caja va unida a la bandeja del coche mediante velcro y
los componentes que se han situado en su interior van pegados con cinta aislante.
La caja utilizada es la que aparece en la siguiente imagen:
24
//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
27
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.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
}
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
43
http://www.cooking-hacks.com/index.php/shop/arduino/arduino-mega2560.html
http://arduino.cc/en/Main/ArduinoBoardMega2560
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
http://www.cooking-hacks.com/index.php/internal-gps-antenna.html
http://www.cooking-hacks.com/index.php/shop/power-1/power-supply/caradapter-power-supply-7-5vdc-1a-sale.html
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=4&pr
oducts_id=52
http://iteadstudio.com/store/images/produce/Sensor/HCSR04/HC-SR04.pdf
http://iteadstudio.com/application-note/arduino-library-for-ultrasonic-rangingmodule-hc-sr04/
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=57_58
&products_id=530
http://iteadstudio.com/store/images/produce/Display/TFT/TFTLCD_ITBD02_2.
8/ITDB02_2.8_sch.pdf
http://iteadstudio.com/store/images/produce/Display/TFT/TFTLCD_ITBD02_2.
8/ITDB02_2.8_DS.pdf
44
http://iteadstudio.com/store/images/produce/Display/TFT/TFTLCD_ITBD02_2.
8/ILI9325DS_V0.29_2007-08-21-15-12-29-179.pdf
http://iteadstudio.com/store/images/produce/Display/TFT/TFTLCD_ITDB02_2.
2/TSC2046_DS.pdf
http://www.henningkarlsen.com/electronics/library.php?id=38
http://www.henningkarlsen.com/electronics/library.php?id=35
http://www.henningkarlsen.com/electronics/library.php?id=37
http://iteadstudio.com/application-note/show-images-and-different-fonts-onitdb02-series-lcd/
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
http://www.cooking-hacks.com/index.php/jumper-wires-f-m.html
45