PDA

Ver la Versión Completa : Tutorial....Cómo crear una centralita ibiza 2000



chabo
05/03/2010, 03:48
Hola a todos, me llamo Fernando, Chabo "pa" los amigos, soy de Ourense, y por aquí tengo algún conocido.....
Soy el poseedor de un Cordoba TDI PD100, con 141CV en el CDV de Madrid (cuando existia), y con reproTLR.
Tambien tengo un ibiza SDI, con el que ando habitualmente, y que me de dolores de cabeza por los fallos del controlador de la calefacción, y por ese motivo abro este hilo, por si alguien más tiene ese problema.
El tema es que lo voy a eliminar completamente y lo voy sustituir por un controlador con pantalla LCD, que ademas de controlar el caudal y la temperatura del aire, quiero ampliarlo con alguna utilidad más, pero eso ya sobre la marcha veré lo que se puede hacer....

Proyecto con Arduino en Ibiza 2000.
Mi proyecto es para intentar solucionar el problema para los usuarios de los Ibiza/Córdoba del 2000. (Incluido yo).

Sería utilizando una tarjeta Arduino, Hardware libre y económica, y por unos 60€ o 70€ en todo el material, sería suficiente....

SÓLO VALIDO PARA LOS QUE NO TIENEN AIRE ACONDICIONADO.


Los coches en cuestión, tienen un problema con los radio-casette que traen de serie (son los controladores de la calefacción), y no hay manera de encontrarlos en los desguaces, y nuevos cuestan una pasta, y para volverse averiar, no me apetece gastarme esa pasta.

La solución que veo, es montar un control para la apertura del "grifo" del agua caliente de la calefacción con un servo, y de la velocidad del motor del aire.
Para ello, propongo el montaje con un Arduino y una pantalla LCD de 4x20.

Ya puestos, lo ideal el aprovechar la “potencia” del bicho en cuestión, y para ello, vamos colocarle un par de sensores de temperatura y otro para la velocidad, además de un detector de luces encendidas y un marcador de tensión de la batería.

El panel en cuestion quedaría así.

Air= ***** .......Tem= ******
Tout= 20.5º .......Tin= 20.5º
Bat= 12.5V .......Luces = On
100km/h..............Unos 9 o 10 caracteres libres

Quedaría algo de espacio en el LCD para poner algún dato más, pero ahora no se me ocurre.

Air= es la cantidad de aire que echa por los difusores, y el numero de *, marcan esa cantidad.
Tem= es la apertura del agua caliente de la calefacción, y tambien se marcaría con *.
Tout es la temperatura exterior.
Tin la interior.
Bat la tension de la bateria.
Luces… pues eso,
Y Km/h, más de lo mismo. (habría que hacer la formulita…, que llegados a este punto, no creo que sea los más difícil……).


Funcionamiento.

Lo ideal, sería que tan pronto encendiéramos el Arduino, nos guardara la configuración anterior, pero otra opción sería la siguiente.

Según ponemos el contacto, que verifique la temperatura exterior, y dependiendo del valor, que haga lo siguiente.

Si Tout<5º , entonces PWM (ventilador) al maximo y servo a 360º (temperatura maxima)
Si Tout>5 y <10, PWM(ventilador) a ¾ y servo 360º.
Si Tout>10<18, PWM (ventilador)2/4 y servo a 180º (temperatura media).
Si Tout >18, PWM a 0, y servo oº. (ventilador y calor desconectados).



Eso serian las posibilidades según ponemos en marcha el vehículo, tendríamos luego que poder cambiar esos valores con dos pulsadores para el control PWM (velocidad ventilador), y otros dos para la temperatura (servo) a nuestro gusto.

El control PWM debería ser en 5 pasos/velocidades (solo tenemos sitio para 5 ***** en el LCD).
Y el control de la temperatura en 6, por el mismo motivo.

Espero opiniones, o ayuda si alguien controla de Arduino.
Yo tengo las ideas y estoy empezando con la programación, pero como en eso ando pez, pues estoy intentando que me ayude un coleguilla......

Si alguien controla el funcionamiento de la placa en cuestión y quiere ayudar desinteresadamente, sería muy bueno para todos los que tenemos este problema.

Un saludo y ya contareis.

PD: Este texto es de hace un par de días, y hoy ya tengo algo avanzado, en vez de pulsadores voy empezar con dos potenciómetros, y más adelante miro si lo puedo cambiar, pero por la sencillez de programar con potenciómetros, voy hacerlo así por ahora.
El video es con una pantalla de 2 líneas, pero me está de camino un pedido de un par de LCD`S de 4 lineas y 40 caracteres.......así cabe más info.
Ya os iré informando.

[Only registered and activated users can see links]

chabo
05/03/2010, 03:54
Aquí está el codigo fuente by Chabo, usando un poco de aqui y otro poco del otro lado... y por ahora, pues sólo me falta conectarle un servo y ver que realmente va para donde quiero. Ya más tarde conectaré un controlador PWM para variar la velocidad del motor de la calefacción..
Los entendidos en programación, haber si ven algo que esté mál.... ya se que sobran algunas variables y otras cosillas, pero es que aun está sin acabar.

Un saludo.


Código fuente

#include <LiquidCrystal.h>;
#include <Servo.h>
LiquidCrystal lcd(12,11,5,4,3,2);
Servo myservo;
float potPin1=1; //Entrada potenciometro.
int pwmPin1=9; //Salida PWM Servo
int sensorValue1;
float salidaPwm1;

void setup(){
lcd.clear();
lcd.begin(16,2); // configura la geometria de la pantalla LCD 16 columnas, 2 filas
lcd.setCursor(0,0);
lcd.print("Saludos de Chabo");
lcd.setCursor(0,1);
lcd.print("[Only registered and activated users can see links] ([Only registered and activated users can see links])");
myservo.attach(10); //Activamos la salida 10 para otro servo, usando otra forma distinta, dando los grados.
pinMode(pwmPin1,OUTPUT);
Serial.begin(4800); // configura la velocidad del puerto serie
delay(5000); //Deja este mensaje 5 segundo segun encendemos.
}
void loop(){
lcd.clear();
sensorValue1=analogRead(potPin1);
salidaPwm1=map(sensorValue1,0,1024,0,180); //Ajuste ancho pulso para 180º
analogWrite(pwmPin1,salidaPwm1); //Ancho de pulso enviado segun el resultado de la calibracion.
myservo.write(salidaPwm1); //Manda al servo en que grados se coloca
//y sacamos los datos de salidaPwm1 que varia desde 0 a 180

if (salidaPwm1==0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Air=>");
lcd.setCursor(6,0);
lcd.print("OFF");
//lcd.setCursor(10,0);
//lcd.print(salidaPwm1);
delay(50);
}
else if (salidaPwm1<=30&&salidaPwm1>0)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Air=>");
lcd.setCursor(6,0);
lcd.print("*");
//lcd.setCursor(10,0);
//lcd.print(salidaPwm1);
delay(50);
}
else if (salidaPwm1<=60&&salidaPwm1>30)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Air=>");
lcd.setCursor(6,0);
lcd.print("**");
//lcd.setCursor(10,0);
//lcd.print(salidaPwm1);
delay(50);
}
else if (salidaPwm1<=90&&salidaPwm1>60)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Air=>");
lcd.setCursor(6,0);
lcd.print("***");
//lcd.setCursor(10,0);
//lcd.print(salidaPwm1);
delay(50);
}

else if (salidaPwm1<=120&&salidaPwm1>90)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Air=>");
lcd.setCursor(6,0);
lcd.print("****");
//lcd.setCursor(10,0);
//lcd.print(salidaPwm1);
delay(50);
}

else if (salidaPwm1<=150&&salidaPwm1>120)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Air=>");
lcd.setCursor(6,0);
lcd.print("*****");
//lcd.setCursor(10,0);
//lcd.print(salidaPwm1);
delay(50);
}

else if (salidaPwm1<=180&&salidaPwm1>150)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Air=>");
lcd.setCursor(6,0);
lcd.print("Full");
//lcd.setCursor(10,0);
//lcd.print(salidaPwm1);
delay(50);
}
}

cosmin scm
05/03/2010, 10:27
tal y como pinta parece un brico bonisimo, pena que no tengo ni coche en cuestion y tampoco conocimiento en programacion.

[[C|-|E]]
05/03/2010, 12:07
Que curro, la verdad. Espero poder verlo en funcionamiento :).

chabo
05/03/2010, 14:46
Quen sabe.... igual termino controlando también el aire acondicionado.....
Por cierto, en principio vale para cualquier coche que NO tenga A/C.

Gracias.

seycker
07/03/2010, 02:29
hola nene,bienvenido a este foro,espero que estes por aqui mucho.a ver si te sale el invento.ya te vi con la burra el otro dia pero la quiero ver de cerca.

MichaelKnight
07/03/2010, 02:55
desconocia el problema, pero los afectados tienen un gran proyecto para solucionarlo. Buen trabajo.

chabo
07/03/2010, 10:08
Si doy acabado esto, que voy por buen camino, luego haber en que otro "fregao" me meto...

Seycker.... te moló eh!!!

Un saludo.

chabo
07/03/2010, 20:51
La placa que uso para las pruebas es ésta, pero el tamaño final, es el de la pantallita, luego ya tendríamos que llevar el cableado a cada lugar donde pongamos el sensor.
Ya está funcionando, solo falta que le revise algunas cosillas e implementar la rutina para el cálculo de la temperatura.
Una vez instalado en el coche, ya iría mirando para automatizar la calefacción... variando automaticamente la temperatura del aire diciendo yo los grados que quiero, pero por ahora, con poder eliminar el sistema de serie, ya me doy por satisfecho.
Esta semana pediré otra tarjetita mas pequeña, para hacer el montaje final, y si me llegan los sensores y la pantalla, haber si en un par de semanas está todo montado en el sitio.

[Only registered and activated users can see links][/URL]

[Only registered and activated users can see links][URL="[Only registered and activated users can see links]"] ([Only registered and activated users can see links])

MichaelKnight
07/03/2010, 22:08
Me gusta tu proyecto, si quieres te puedo echar una mano haciendote un circuito impreso. Si me mandas el fotolito en PDF te lo puedo hacer sin problema.

saludos.

chabo
09/03/2010, 00:16
Gracias por el ofrecimiento, por suerte, tengo tambien algunos medios para hacerla, pero quien sabe, una ayudita nunca viene mal...
Cuando esté plenamente funcionando, entonces si que puede que haga el modelo algo más "Pro".
[Only registered and activated users can see links]

Un saludo.

cosmin scm
30/03/2010, 10:55
ese jugete se podria progamar para furnizar datos en tiempo real sobre presion turbo, temp y presion aceite ?

chabo
01/04/2010, 23:18
Si, tiene varias entradas analogicas y digitales, simplemente hay que conectar los sensores correspondientes, y luego que operacion matematica tiene que hacer para calcular lo que quieras.... sabiendo lo que significan los valores de los sensores, es relativamente facil que lo muestre en la pantalla.....

chabo
01/04/2010, 23:25
Ya tengo nuevas noticias del sistema.... lo tengo practicamente terminado,, aun no me llegaron los sensores de temperatura, y me queda por cambiar la forma de mostrar esos valores...., pero el resto ya lo tengo, aunque no implementé lo de que haga esas historias de encender automaticamente nada... va a ser solo manual.

La cosa queda pues de la siguiente manera....

4 pulsadores, 2 para subir y bajar la velocidad del motor del aire (caudal) y otros 2 para mover el servo de apertura del agua caliente(temperatura).

El codigo fuente lo publicaré más adelante, pero si alguien entá interesado antes, que lo diga y se lo envio por correo.

Lo mismo con el pcb y el esquemático.

Si hay algún voluntario que controle de eagle, u otro similar de diseño de esquemas y pcbs, me gustaría que me hechara un cable.... (sin ánimo de lucro)... :P yo le enviaría el esquema en papel para que lo pasara al programa y diseñara el pcb.......

Bueno, nada más...... espero que os guste........

Un saludo.

jmageitos
01/04/2010, 23:55
Ennorabuena

un saludo

seycker
02/04/2010, 03:43
vale tio,ya me pasare por tu casa para ver el invento.si vale para presion de turbo tengo que hablar contigo.

kloki28
02/04/2010, 13:04
la verdad que para quitarse el sombrero,menuda ñapa ufff

chabo
02/04/2010, 15:18
Aqui unas imagenes del PCB y de la pantalla mostrando como queda cuando está todo al mínimo.....

[Only registered and activated users can see links]

[Only registered and activated users can see links]


Aquí está el código fuente.



#include <LiquidCrystal.h>;
#include <Servo.h>
int motorPin = 6; // Motor conectado al pin 6
int valtIn=0;//valores temperatura que muestra
int valtOut=0;
int tempIn;
int tempOut;
int fila=0;
int columna=0;
int tIn=0;
int tOut=1;
int t=0; //Almacena los valores de los incrementos de los pulsadores de aumentar disminuir Temperatura
int c=0; //Almacena los valores de los incrementos de los pulsadores de aumentar disminuir Caudal
int PushUpT =7; //Asigna los pines de los Pulsadores para subir o bajar
int PushDwT =8;
int PushUpC =10; //Estaban en boolean
int PushDwC =13;
boolean PBTU; //Donde se guarda el valor de los pines de los pulsador
boolean PBTD;
boolean PBCU;
boolean PBCD;
int time=100;
LiquidCrystal lcd(12,11,5,4,3,2);
Servo myservo;
int salidaServo;
int refreshLcd=30; //Tiempo de refresco del LCD
int inicioV=10; //Velocidad del paso de los asteriscos.
void setup(){
pinMode(motorPin, OUTPUT); // asigna el pin como modo salida
pinMode(tempIn,INPUT);
pinMode(tempOut,INPUT);

pinMode(PushUpT,INPUT);//Asigna los pines de los pulsadores como entradas.
pinMode(PushDwT,INPUT);
pinMode(PushUpC,INPUT);
pinMode(PushDwC,INPUT);

lcd.clear();
lcd.begin(20,4); // configura la geometria de la pantalla LCD 20 columnas, 2 filas
lcd.setCursor(0,1);
lcd.print(" Bienvenido");
lcd.setCursor(0,2);
lcd.print(" Seat Ibiza");
myservo.attach(9); //Activamos la salida 9 para un servo.
delay(1000); //Dejamos este tiempo para mostrar el mensaje

for(columna=0;columna<20;columna++){
lcd.setCursor(columna,0);
lcd.print("*");
delay(inicioV);
}
for(columna=0;columna<20;columna++){
lcd.setCursor(columna,0);
lcd.print(" ");
delay(inicioV);
}

for(columna=0;columna<20;columna++){
lcd.setCursor(columna,3);
lcd.print("*");
delay(inicioV);
}
for(columna=0;columna<20;columna++){
lcd.setCursor(columna,3);
lcd.print(" ");
delay(inicioV);
}
lcd.clear();
//delay(1000);

}

void InicializarPantalla1() //----------------------------------------------------------------------------------
{

lcd.setCursor(0,0);
lcd.print("Temperatura");
lcd.setCursor(2,1);

}
void InicializarPantalla2() //-----------------------------------------------------------------------------------
{

lcd.setCursor(13,0);
lcd.print("Caudal");
lcd.setCursor(13,1);
}
void InicializarPantallatemperaturain() //-------------------------------------------------------------------------
{

lcd.setCursor(2,2);
lcd.print("T.in=");
lcd.setCursor(2,3);


}
void InicializarPantallatemperaturaout() //--------------------------------------------------------------------------
{
lcd.setCursor(13,2);
lcd.print("T.out=");
lcd.setCursor(13,3);

}
void LeerPulsadores() //---------------------------------------------------------------------------------------
//Programa que lee los pulsadores que cambio por potenciometros
{
PBTU=digitalRead(PushUpT);
PBTD=digitalRead(PushDwT);
PBCU=digitalRead(PushUpC);
PBCD=digitalRead(PushDwC);

if (PBTU==HIGH)
delay(250);
if (PBTU==HIGH)
t=t+1;
else
if (PBTD==HIGH)
delay(250);
if (PBTD==HIGH)
t=t-1;
else
if (PBCU==HIGH)
delay(250);
if (PBCU==HIGH)
c=c+1;
else
if (PBCD==HIGH)
delay(250);
if (PBCD==HIGH)
c=c-1;
if (t<0)
t=0;
else

if (t>8)
t=8;

if (c<0)
c=0;
else
if (c>8)
c=8;
}

void loop(){ //************************************************** ************************************************** ***

LeerPulsadores();
tempIn = analogRead(tIn); //Lee el sensor de la temperatura de adentro
tempOut =analogRead(tOut); //Lee el sensor de la temperatura de afuera
valtIn= (tempIn / 12); //Hace la conversion del valor para adaptar el rango
valtOut=(tempOut / 12); //Hace la conversion del valor para adaptar el rango
analogWrite(motorPin, c *31.8); // hace que la salida motor tenga 255 posiciones, del 0 a 100%

salidaServo=map(t,0,8,10,175); //Modifica el rango de lectura del potenciómetro, lo pasa de entre 0-8 a entre 10-175
myservo.write(salidaServo); //Manda al servo en que grados se coloca y sacamos los datos de salidaServo que varia desde 10 a 175


InicializarPantalla1();

if (t==0) lcd.print(" OFF ");
else if (t==1) lcd.print("* ");
else if (t==2) lcd.print("** ");
else if (t==3) lcd.print("*** ");
else if (t==4) lcd.print("**** ");
else if (t==5) lcd.print("***** ");
else if (t==6) lcd.print("****** ");
else if (t==7) lcd.print("*******");
else if (t==8) lcd.print(" MAX ");


InicializarPantalla2();

if (c==0) lcd.print(" OFF ");
else if (c==1) lcd.print("* ");
else if (c==2) lcd.print("** ");
else if (c==3) lcd.print("*** ");
else if (c==4) lcd.print("**** ");
else if (c==5) lcd.print("***** ");
else if (c==6) lcd.print("****** ");
else if (c==7) lcd.print("*******");
else if (c==8) lcd.print(" MAX ");


InicializarPantallatemperaturain();
lcd.print(valtIn);
lcd.print(" ");
InicializarPantallatemperaturaout();
lcd.print(valtOut);
lcd.print(" ");

}

bcm43xx
03/04/2010, 19:59
Muy buen trabajo chabo, es un gran aporte.
Por curiosidad, ¿por qué no has usado un PIC en lugar de arduino? Podrías implementar estas funciones sin ningún problema y te saldría mucho más económico.

Un saludo.

chabo
04/04/2010, 09:11
Pues más que nada, porque no sé programar apenas.... estudié Turbo Pascal en el año 96 o por ahí.... y en arduino,que es como C, es muy sencillo, y tampoco es tan caro, teniendo en cuenta que te lo pone todo bastante "facil"......

bcm43xx
04/04/2010, 14:08
Si sabes programar en C, con los PIC también lo tienes muy fácil. Hay un IDE que se llama MikroC for PIC, que básicamente es C y además trae implementadas un montón de funciones. Además tiene un manual en el que se explica como se usan una por una, con ejemplos incluídos.
Te recomiendo que por lo menos le eches un vistazo, seguro que te gustan las posibilidades que ofrece. Los PICs los puedes conseguir en la web de microchip, envían a casa muestras gratuítas.

Un saludo.

cosmin scm
04/04/2010, 23:57
seguire mirando ese post, es curioso ese aparato. lo mismo me animo en pillar uno para cualquier cosa que le puede pasar a algunos por la cabeza.

seycker
05/04/2010, 00:05
hoy lo he visto en vivo y en directo y esta muy bien el invento.puede salir cosas buenas de esto.

lebrillo
05/04/2010, 00:13
Muy muy interesante. Enhorabuena chabo y gracias por compartirlo con todos nosotros.

chabo
05/04/2010, 22:23
Hoy estube hablando con un colega, y me va a pasar dos sensores de temperatura en formato SMD (muy pequeñiiiitos)..., haber si en estos dias doy implementado ya la temperatura real con estos sensores y tambien un medidor de tensión de la batería, y veremos com meto todo eso en el LCD y que quede bonito.

Un saludo.

tastolo
30/01/2012, 12:57
buenas, que tal.
Tengo algunas dudas sobre un proyecto con el arduino, me podrias enviar tu correo y te las expongo, es de un proyecto que tengo en mente para mi coche de carreras y me vendria bien algo de ayuda, un saludo

ubeda 84
19/02/2012, 00:09
buenas, que tal.
Tengo algunas dudas sobre un proyecto con el arduino, me podrias enviar tu correo y te las expongo, es de un proyecto que tengo en mente para mi coche de carreras y me vendria bien algo de ayuda, un saludo

Buenas, el ultimo post de nuestro compañero Chabo, es de Abril del 2010 y no entra en el foro, desde Octubre del 2010.

Saludos

ubeda 84
19/02/2012, 00:10
idem a4, le ocurre lo mismo


Buenas, el ultimo post de nuestro compañero Chabo, es de Abril del 2010 y no entra en el foro, desde Octubre del 2010.

Saludos

chabo
26/12/2014, 22:42
Vamos a revivir ésto.... siento haber tardado tanto.. jajajja, solo dos años después... pero decir que está funcionando en el Ibiza, aunque ya no es mío... y tiene algún ligerillo problema que tendría que pulir. En casa funcionaba bien, pero una vez instalado, parece ser que los botones a veces no van del todo finos. Supongo que revisando conexiones y poniendo algún filtro en la alimentación del arduino se soluciona.
Al final el controlador del motor lo hice de otra manera, pues como son 16A de consumo, y no es nada fácil manejar ésa potencia sin montar disipadores grandes(al menos yo no lo he conseguido sin generar bastante calor), decidí utilizar un controlador de un motor de coche de RC, por 12€ en ebay... total, arduino unos 3€, y sensores y todo lo demás sale en unos 20... más el chollo... sale baratillo...
Perdón por no seguir con el tema en su momento, pero ando a tantas cosas que al final "perdí el hilo", nunca mejor dicho, y ahora revisando una copia de seguridad encontré el link.....
Ale, ahí queda... quien necesite ponerse en contacto conmigo que lo haga a través de mi correo, que está puesto por ahí atrás.....

Saludos!!!!