Vous êtes sur la page 1sur 26

UNIVERSIDAD DE LAS FUERZAS ARMADAS

ESPE
DEPARTAMENTO DE CIENCIAS EXACTAS

PROFESORA:

ING. ALEXANDRA CORRALES.

ASIGNATURA
FSICA II AUTOMOTRIZ B
TEMA:
INFORME DEL PROYECTO FINAL
UNIDAD
TRES

NRC
1442
DEBER N
01
FECHA
01/08/2014

AUTORES:
EDISON MALDONADO
JIMMY GALLEGOS

Objetivo general
Programar una simulacin del tablero de un vehculo en java, aplicando los conocimientos adquiridos
en clases

Objetivos especficos

Aplicar la programacin orientada a objetos implementando los conocimientos de las fallas


comunes de los vehculos
Implementar las libreras aprendidas e investigar nuevas libreras
Simular las fallas que comnmente nos puede aparecer en el tablero de nuestro vehculo

Desarrollo
Para desarrollar de manera correcta y efectiva nuestro proyecto tuvimos que crear variables globales.
Estas variables nos permiten tener acceso en todos los mtodos creados del programa.
Es el caso de las VARIABLES ERRORES donde creamos cada falla para cada posicin de nuestro arreglo
el cual es un boolean, con esta manera sabemos en qu posicin se va encontrar cada falla para
posteriormente agregar al arreglo si este es true.

En la parte de nuestro constructor desarrollamos el proceso para q los iconos del programa estn
ocultos (setVisible(false)) al momento de iniciar el mismo.
Tambin se hizo el ingreso de fondo del formulario de desarrollo del progra.

Proceso que realiza el programa:


1. Odmetro
Odmetro digital:
Fue realizado con hilos el primero que nos permite incrementar la velocidad.
public class Velocidad extends Thread {
boolean op = true;
public void run() {
while (op) {
jlbv.setText(String.valueOf(m));
try {
Thread.sleep(18);
} catch (InterruptedException ex) {
Logger.getLogger(Tablero.class.getName()).log(Level.SEVERE, null, ex);
}
m++;

if (m == 251) {
op = false;
}
}
}
}
El Segundo hilo nos indica la disminucin de velocidad
public class Velocidadd extends Thread {
boolean opc = true;
public void run() {
while (opc) {
jlbv.setText(String.valueOf(m));
try {
Thread.sleep(18);
} catch (InterruptedException ex) {
Logger.getLogger(Tablero.class.getName()).log(Level.SEVERE, null, ex);
}
m--;
if (m == -1) {
opc = false;
}
}
}

}
Odmetro convencional
Utilizamos 4 timer los dos primeros nos indica la aceleracin del vehiculo mientras los otros
dos la disminucin de velocidad.
Para la realizacin de la flecha del odmetro utilizamos fillArc(), mediante esta aplicacin
generamos un ngulo de giro pequeo asimilando una flecha.
public class MiTimer implements ActionListener {
public void actionPerformed(ActionEvent ev) {
g = jPanel1.getGraphics();
g.setColor(Color.red);

g.fillArc(2, 15, 100, 150, cont, -5);


cont -= 5;
t2.start();
t1.stop();
if (cont == -40) {
t1.stop();
t2.stop();
}
//MENSAJE VELOCIDAD
if (cont <= 110 && cont >= 108) {
JOptionPane.showMessageDialog(rootPane, "VELOCIDAD LIMITE DE 100km");
t1.stop();
t2.stop();
txtm.setVisible(false);
}
if (cont == 130) {
txtm.setText("VELOCIDAD LIMITDE 90KM");
}
if (cont == 175) {
txtm.setText("VELOCIDAD LIMITDE 50KM");
}
}
}
public class MiTimer2 implements ActionListener {
public void actionPerformed(ActionEvent ev) {
g = jPanel1.getGraphics();
g.setColor(Color.red);
jPanel1.repaint();
t1.start();
t2.stop();
if (cont == -40) {
t1.stop();
t2.stop();

}
if (cont <= 110 && cont >= 108) {
t1.stop();
t2.stop();
}
}
}
public class MiTimer3 implements ActionListener {
public void actionPerformed(ActionEvent ev) {
g = jPanel1.getGraphics();
g.setColor(Color.red);
g.fillArc(2, 15, 100, 150, cont, -5);
cont += 5;
t4.start();
t3.stop();
if (cont == 210) {
t3.stop();
t4.stop();
}
}
}
public class MiTimer4 implements ActionListener {
public void actionPerformed(ActionEvent ev) {
g = jPanel1.getGraphics();
jPanel1.repaint();
g.setColor(Color.red);
t3.start();
t4.stop();
if (cont == 210) {
t3.stop();
t4.stop();
}
}
}

2. Comando de aceleracin
Para poder ejecutar el odmetro digital y convencional utilizamos el comando MousePressed y
MouseReleased los mismos que nos permiten mantener presionado el botn para que los
odmetros funcionen y se desactive cuando lo soltamos, asimilando as los pedales del vehculo.
En el mismo mtodo pudimos aplicar la validacin de gasolina ya que a medida q se acelera la
gasolina se disminuye.
private void aceleradorMousePressed(java.awt.event.MouseEvent evt) {
//MOVIMIENTO DE FLECHA ODOMETRO
t1 = new Timer(50, new MiTimer());
t1.start();
t2 = new Timer(50, new MiTimer2());
t2.start();
//NIVEL DE GASOLINA
jProgressBar2.setValue(jProgressBar2.getValue() - gas);
if (jProgressBar2.getValue() == 2) {
tabla[gasolina] = true;
jlbg.setVisible(true);
} else if (jProgressBar2.getValue() == 0) {//APAGAR EL MOTOR
JOptionPane.showMessageDialog(rootPane, "SE TERMINO LA GASOLINA");
sonido.stop();
jProgressBar1.setVisible(false);
jProgressBar2.setVisible(false);
jProgressBar3.setVisible(false);
jSlider1.setVisible(false);
jSlider2.setVisible(false);
acelerador.setVisible(false);
freno.setVisible(false);
jPanel2.setVisible(false);
tbnf.setVisible(true);
jButton1.setVisible(false);
txtm.setVisible(false);
jlbe.setVisible(false);
jlbee.setVisible(false);
jlbc.setVisible(false);

jlbh.setVisible(false);
}
//VELOCIDAD DIGITAL
while (oda == 1) {
v1.start();
oda--;
}
v1.resume();
}
En el mtodo acelerador MouseReleased nos permite parar los odmetros cuando dejamos de
acelerar, colocando stop en cada timer.
private void aceleradorMouseReleased(java.awt.event.MouseEvent evt) {
t1.stop();
t2.stop();
g.fillArc(2, 15, 100, 150, cont, -5);
//VELOCIDAD DIGITAL
v1.suspend();
}
3. Comando de freno
Al igual que el comando de aceleracin utilazamos los mismos eventos de Mouse ya que su
funcionamiento es similar.
Adicional en este mtodo se pudo generar los fallos en el ABC y sistema de frenos mediante el
tiempo que se tena aplastado el botn de activacin.

private void frenoMousePressed(java.awt.event.MouseEvent evt) {


//FLACHA INDICADORA DE VELOCIDAD
if (cont == 210) {
t3.stop();
t4.stop();

} else {
t3 = new Timer(65, new MiTimer3());
t3.start();
t4 = new Timer(65, new MiTimer4());
t4.start();
}
//VELOCIDAD DIGITAL
while (odf == 1) {
v2.start();
odf--;
}
v2.resume();
//LUZ SIST FRENOS
fr++;
if (fr == 2) {
jlbf.setVisible(true);
tabla[frenos] = true;
}
//LUZ ABS
if (fr == 4) {
jlbabs.setVisible(true);
tabla[frenosABS] = true;
}
}
private void frenoMouseReleased(java.awt.event.MouseEvent evt) {
//FLCHA INDICADORA DE VELOCIDAD
t3.stop();
t4.stop();
g.setColor(Color.red);
g.fillArc(2, 15, 550, 500, cont, -1);

//VELOCIDAD DIGITAL
v2.suspend();
}

4. Evento WindowsOpened
En este evento se realiz la activacin de controles de Swing como el indicador de gasolina,
temperatura, etc.
private void formWindowOpened(java.awt.event.WindowEvent evt) {
//MANTENER LA FLECHA DEL ODOMETRO EN 0 KM
g = jPanel1.getGraphics();
g.setColor(Color.red);
g.fillArc(2, 15, 100, 150, cont, -5);
//INDICADOR DE GASOLINA LLENO
jProgressBar2.setValue(10);
//START-OFF
jlboff.setVisible(true);
jlbon.setVisible(false);
//WELCOME
txtw.setVisible(false);
//TEMPERATURA
jProgressBar1.setValue(5);
//ACEITE
jProgressBar3.setValue(5);
}

5. Luces de parque
Utilizamos un jButton para poder activar las luces de parqueo y mediante la clase Math.random
generamos un numero aleatorio para que el error de batera.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
if (p == 0) {
jlb1.setVisible(true);
jlb2.setVisible(true);
p++;
} else {
jlb1.setVisible(false);
jlb2.setVisible(false);
p--;
}
if (Math.floor((Math.random() * 10) + 1) == 7) {
jlbb.setVisible(true);
tabla[bateria] = true;
}
}
6. Encendido del vehculo
Para el encendido del vehculo se utiliz el evento MouseMoved el cual nos permito ocultar el
icono ce ON-OFF cuando acercamos mouse.
private void jlboffMouseMoved(java.awt.event.MouseEvent evt) {
jlboff.setVisible(false);
jlbon.setVisible(true);
}
Al momento que el icono se apareca realizbamos el evento MouseClicked para el encedido y
apagado del vehculo.

private void jlbonMouseClicked(java.awt.event.MouseEvent evt) {


if ((s == 0) || (s == 2) || (s == 4)) {
sonido =
java.applet.Applet.newAudioClip(getClass().getResource("/proyectofinal/car.wav"));
sonido.play();
//ICONO ON-OFF
jlboff.setVisible(true);
jlbon.setVisible(false);
txtw.setVisible(true);
//CHECKENGINE
if (Math.floor((Math.random() * 10) + 1) == 2) {
jlbch.setVisible(true);
tabla[checkengine] = true;
}
//ENCENDIO VER ICOCNOS
jProgressBar1.setVisible(true);
jProgressBar2.setVisible(true);
jProgressBar3.setVisible(true);
jSlider1.setVisible(true);
jSlider2.setVisible(true);
acelerador.setVisible(true);
freno.setVisible(true);
jPanel2.setVisible(true);
tbnf.setVisible(true);
jButton1.setVisible(true);
jlbe.setVisible(true);
jlbee.setVisible(true);
jlbc.setVisible(true);
jlbh.setVisible(true);
s++;

} else if ((s == 1) || (s == 3) || (s == 5)) {


sonido.stop();
jProgressBar1.setVisible(false);
jProgressBar2.setVisible(false);
jProgressBar3.setVisible(false);
jSlider1.setVisible(false);
jSlider2.setVisible(false);
acelerador.setVisible(false);
freno.setVisible(false);
jPanel2.setVisible(false);
tbnf.setVisible(false);
jButton1.setVisible(false);
jlbe.setVisible(false);
jlbee.setVisible(false);
txtm.setVisible(false);
s++;
}
}
7. Almacenamiento de fallas
En este mtodo procedemos a realizar la comprobacin del arreglo de booleanos para poder
guardar nuestras fallas en la tabla de datos.

private void tbnfActionPerformed(java.awt.event.ActionEvent evt) {


TablaErrores abrir = new TablaErrores();
abrir.setVisible(true);
this.setVisible(false);
if (tabla[0] == true) {
String fg = "INDICADOR DE GASOLINA";
String cg = "NIVEL BAJO DE GASOLINA";
//String dato[] = {ft, id};
TablaErrores.tbl.setValueAt(fg, co, 0);
TablaErrores.tbl.setValueAt(cg, fi, 1);
co++;
fi++;

}
if (tabla[1] == true) {
String fb = "INDICADOR DE BATERIA";
String cb = "BATERIA BAJA";
TablaErrores.tbl.setValueAt(fb, co, 0);
TablaErrores.tbl.setValueAt(cb, fi, 1);
co++;
fi++;
}
if (tabla[2] == true) {
String fch = "FALLA DE FUNCIONAMIENTO";
String cch = "FALLA EN EL SISTEMA DE CONTROL DE EMISION";
TablaErrores.tbl.setValueAt(fch, co, 0);
TablaErrores.tbl.setValueAt(cch, fi, 1);
co++;
fi++;
}
if (tabla[3] == true) {
}
if ((tabla[4] == true) && (auxc >= 2)) {
String fa = "INDICADOR DE ACEITE";
String ca = "PRESION DE ACITE ELEVADA";
TablaErrores.tbl.setValueAt(fa, co, 0);
TablaErrores.tbl.setValueAt(ca, fi, 1);
co++;
fi++;
}
if ((tabla[5] == true) && (auxc <= 0)) {
String fa = "INDICADOR DE ACEITE";

String ca = "PRESION DE ACITE BAJA";


TablaErrores.tbl.setValueAt(fa, co, 0);
TablaErrores.tbl.setValueAt(ca, fi, 1);
co++;
fi++;
}
if (tabla[6] == true) {
String ff = "SISTEMA DE FRENOS";
String cf = "TANQUE DE RESERVE EN PELIGRO";
TablaErrores.tbl.setValueAt(ff, co, 0);
TablaErrores.tbl.setValueAt(cf, fi, 1);
co++;
fi++;
}
if (tabla[7] == true) {
String ff = "SISTEMA DE FRENOS ABS";
String cf = "ANOMALIA EN EL ABS";
TablaErrores.tbl.setValueAt(ff, co, 0);
TablaErrores.tbl.setValueAt(cf, fi, 1);
co++;
fi++;
}
if ((tabla[8] == true) && (auxt >= 2)) {
String fta = "INDICADOR DE TEMPERATURA";
String cta = "TEMPERATURA ELEVADA";
TablaErrores.tbl.setValueAt(fta, co, 0);
TablaErrores.tbl.setValueAt(cta, fi, 1);
co++;
fi++;

}
if ((tabla[9] == true) && (auxt <= 0)) {
String ftb = "INDICADOR DE TEMP";
String ctb = "TEMPERATURA BAJA";
TablaErrores.tbl.setValueAt(ftb, co, 0);
TablaErrores.tbl.setValueAt(ctb, fi, 1);
co++;
fi++;
}
}
8. Barra Slider
La barra jSlider nos permiti realizar la variacin de temperatura y aceite en el programa para
poder generar las fallas respectivas.
private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {
jProgressBar1.setValue(jSlider1.getValue());
if (jSlider1.getValue() >= 8) {
jProgressBar1.setForeground(Color.red);
tabla[tempa] = true;
auxt++;
jlbt.setVisible(true);
} else if (jSlider1.getValue() <= 3) {
tabla[tempb] = true;
auxt--;
jlbt.setVisible(true);
}
}
private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt) {
jProgressBar3.setValue(jSlider2.getValue());
if (jSlider2.getValue() >= 8) {
tabla[aceitea] = true;
auxc++;

jlba.setVisible(true);
} else if (jSlider2.getValue() <= 3) {
tabla[aceiteb] = true;
auxc--;
jlba.setVisible(true);
}
}
Proyecto en ejecucion

En nuestro segundo formulario hicimos la recoleccin de los datos guardados en la tabla generada por
las fallas encontradas.
private void btnsActionPerformed(java.awt.event.ActionEvent evt) {
int cont = 0;
String Falla[] = new String[10];
Vehiculo v1 = new Vehiculo();
for (int j = 0; j < Falla.length; j++) {
if ((tbl.getValueAt(j, 1)) == null) {
cont++;
} else {
Falla[j] = (String) tbl.getValueAt(j, 1);

}
}
try {
v1.scanner(Falla);
} catch (IOException ex) {
Logger.getLogger(TablaErrores.class.getName()).log(Level.SEVERE, null, ex);
}

Para el la creacin de nuestro archivo txt se tuvo que crear un java class para poder generar la
exception.
Para poder generar el archivo guardamos todos los datos generados en la tabla en un arreglo de String
pasando a nuestra clase scanner el cual realizaba el proceso de crear el archivo txt.
public class Vehiculo {
FileWriter fred;
BufferedWriter bf;
PrintWriter salida;
int cont = 0;
public void scanner(String[] fallas) throws IOException {

fred = new FileWriter("scanner.txt");


bf = new BufferedWriter(fred);
salida = new PrintWriter(bf);
for (int i = 0; i < 10; i++) {
if (fallas[i] == null) {
cont++;
}
}
if (cont != 10) {
for (int j = 0; j < 10 - cont; j++) {
salida.write(fallas[j]);
salida.println();
}
}
else{
salida.write("NO HAY ERRORES EN EL SISTEMA");
}
salida.close ();
String ruta = "D:\\TERCER SEMESTRE\\Progra\\Ejercicios en
clase\\ProyectoFinal\\scanner.txt";
File f = new File(ruta);
if (f.exists ()
){
try {
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + ruta);
} catch (IOException e) {
}
}
else {
System.out.println("Error");
}
}

Marco terico
Timers: Al programar es posible que nos veamos con la necesidad de realizar una tarea cada cierto

tiempo. Por ejemplo, si queremos pintar un reloj en pantalla, cada segundo debemos mover o repintar
el segundero. Quizs deseemos ver cundo se crea un fichero, con lo que podemos, por ejemplo, cada
diez segundos ver si existe. En fin, hay un montn de posibles aplicaciones en las que podemos
necesitar realizar tareas peridicamente.
Java nos proporciona dos clases distintas que nos ayudan a esta tarea. Son las
clases javax.swing.Timer y java.util.Timer. A ambas clases les decimos cada cunto queremos el aviso
(por ejemplo, un aviso cada segundo en el caso del reloj) y ellas se encargan de llamar a un mtodo
que nosotros hayamos implementado. El resultado es que ese mtodo (el que pinta el segundero en la
pantalla), se llamar cada cierto tiempo (una vez por segundo en el caso del reloj).
Los Hilos: o los Threads en Java, son bsicamente una forma de poder ejecutar varios

procesos simultneamente en nuestros programas en Java.


Usualmente para poder utilizarlos tenemos que crear clases que extienden a la clase Thread, y
reescribir el mtodo principal run(), el cual es el que se va a ejecutar principalmente al iniciar un hilo,
thread o nuevo proceso en java.
IOException: Problema de entrada o salida de datos.

InputStream, OutputStream,Reader, Writer: Todos los archivos se abren gracias a que se crean
objetos de estas clases de flujos, que heredan de las estas clases.
Encapsulamiento: Las clases permiten implementar tipos de datos abstractos. El problema que se
presenta es que desde cualquier clase se puede accesar los campos de un objeto perteneciente a otra
clase. Esto es una violacin al principio de abstraccin que dice que un tipo de datos abstracto slo
puede ser manipulado a travs de las operaciones que se definen para ste.

En la actualidad los autos que circulan por las calles da a da son ms sofisticados, ahora cuentan con sensores
en el tablero que indican mal funcionamientos en el auto.
En general el tablero de los autos se compones por dos diferentes tipos de luces; las luces de advertencia y las
luces indicadoras de fallas.
Luces de advertencia
Estas nos avisan del sistema de frenos, sistema de carga, presin de aceite del motor, sistema antibloqueo de
frenos (ABS), sistema de pretensores de cinturones de cinturones de seguridad,bolsas de aire, nivel bajo de
combustible, puerta mal cerrada, nivel bajo del lquido del lavador, transmisin automtica, sistema de
monitoreo de presin de neumticos, entre otros.
Estas luces son de color rojo y su alerta no representa grado de peligro, pero no por eso las vamos a ignorar en
vez de solucionar la falla.

Luces indicadoras de falla


Tambin conocidas como MIL, son aquellas que hacen referencia a un sistema ms complicado que es
controlado por la computadora. Esta falla indicada por la luz del tablero, requiere de un tcnico para que realice
pruebas y determine la naturaleza exacta de la falla, y lo repare en caso de ser necesario. Estos sistemas
incluyen; indicador de seguridad, luces de carretera, posicin de cambio, TS/DSC, DSC OFF, control de crucero,
luz encendida, mal funcionamiento de la direccin asistida, aviso de peligro / seales de viraje, entre otros.
Estas luces son de color mbar y aparecen como un icono, o bien con las iniciales del sistema que presenta la
falla, y prenden desde que giramos la llave para encender el auto. Cuando usted encienda el motor del auto, es

normal que algunos smbolos se enciendan. Pero si usted observa algn smbolo en el tablero cuando usted est
manejando, es muy recomendable que vaya al mecnico para hacer un chequeo de su automvil lo ms pronto
posible.

Cuando usted encienda el motor del auto, es normal que algunos smbolos se enciendan. Pero si usted observa
algn smbolo en el tablero cuando usted est manejando, es muy recomendable que vaya al mecnico para
hacer un chequeo de su automvil lo ms pronto posible.

SNTOMA -- CAUSA -- SOLUCIN


* Intermitentes locos -- rel roto -- Cambio de rel (boton del warning)
* El intermitente parpadea ms rpido de lo habitual -- Luz fundida, generalmente avisa en el FIS -- Cambiar
lmpara fundida.
* Luz de posicin delantera y trasera no se enciende de un mismo lado. - Fusible en mal estado - Cambiar fusible
5A
* Luces de freno encendidas siempre -- Interruptor en el pedal de freno defectuoso -- Cambiar interruptor
* El coche se para tras el arranque -- Bombn del inmovilizador defectuoso -- Cambiar bombn (generalmente
situado alrededor de la llave de contacto)

* El coche se para tras el arranque -- Mdulo del inmovilizador en mal estado -- Cambiar mdulo. (En algunos
Audis, este mdulo se encuentra dentro e inseparablemente del cuadro de instrumentos)
* El coche se para tras el arranque -- Chip de la llave defectuosa -- Probar con otra llave. Si esa funciona, pedir
una nueva llave (tarda un mes aprox) y slo se puede solicitar en concesionario.
* Le cuesta arrancar (parece que va ms lento el motor de arranque) -- Batera en las ltimas -- Cambiar la
batera.
* Le cuesta arrancar -- Calentadores o inyectores -- Cambiar Calentadores o Inyectores
* Al girar la llave no hace nada (apenas se enciende el cuadro) tras una semana parado -- Batera descargada -Cargar la batera. Si vuelve a pasar, la batera debe cambiarse.
* Al girar la llave no hace nada, pero tras unos 10-20 segundos de mantener la llave girada a tope, arranca
normalmente (generalmente cuando hace fro y el coche lleva un par de das parado) -- Clausor -- Cambiar
conmutador del clausor
* El testigo de batera no se apaga al arrancar -- Alternador en mal estado -- Cambiar alternador.
* El testigo de batera no se apaga al arrancar -- Escobillas del alternador desgastadas -- Cambiar escobillas del
alternador.
* El testigo de batera no se apaga al arrancar -- Cable del alternador en mal estado -- Comprobar cableado.

Ver:
Brico de cambio de alternador

* Los elevalunas no se alzan con una sola pulsacin (como antes) -- Desprogramacin de los elevalunas elctricos
por una desconexin de la batera espordica -- Reprogramar los elevalunas (Generlamente se trata de cerrar los
cristales y una vez en esa posicin, pulsar para levantar los elevalunas durante un segundo, ver modelo y
modo).
* Cierre centralizado no funciona -- Bomba neumtica del cierre centralizado rota -- Cambiar la bomba del
cierre.
* Cierre centralizado no funciona o funciona muy despacio -- Un maguito del cierre pierde -- Comprobar circuito
del cierre y cambiar manguito si procediere.
* Luces interiores no se encienden al abrir la puerta. - Fallo del sensor de la puerta - . Cambiar el sensor.

Conclusiones

El programa elaborado fue realizado con xito


Los errores se generaron al cumplir el algoritmo de funcionamiento del vehculo
El software netbeans tiene varias aplicaciones en la parte grafica
Los hilos del programa nos sirvieron para el odmetro (el puntero que indica la
velocidad)

Recomendaciones
Usar hilos para hacer funcionar el odmetro

Implementar varios formularios


Crear una funcin para abrir los errores del documento de texto txt mediante un
botn

Bibliografa

Como programar JAVA, DEITEL


Fundamentos de programacin en Java, Jorge Martnez Ladrn de Guevara
https://www.youtube.com/watch?v=0Ad08AO-_v0
http://codigoprogramacion.com/cursos/java/133-uso-de-hilos-o-threads-enjava.html
http://www.chuidiang.com/java/timer/timer.php

http://www.taringa.net/posts/autos-motos/11444065/Fallas-de-automoviles-y-sus-posiblescausas.html
http://www.autobodymagazine.com.mx/abm_previo/2013/03/indicadores-tablero3/