.
Un amigo me pidió que le hiciera unas "Shift Lights" para su coche de competición. Son luces de cambio, es decir, según las revoluciones motor, se van encendiendo progresivamente.
Es un coche antiguo y he sacado la señal del distribuidor. Disponía de un sensor Hall (conmuta con masa para dar la chispa. Está en serie con la bobina). La entrada al pin 2 (int 0) la he protegido con una resistencia en serie de gran valor y un zener de 5V1 (recordad que está en serie con una bobina). A parte, las entradas del ATMega 168 vienen protegidos con "clamp diodes" (como máximo permiten 1 mA).
Recordad: el arbol del levas va a la mitad de velocidad que las revoluciones motor. Además, en mi montaje, por cada vuelta hay 4 pulsos.
He eliminado el conector de alimentación externa del Arduino, y he soldado unos cables para la alimentación en su lugar. También he puesto un Varistor para proteger de sobretensiones la etapa de alimentación.
He usado diodos leds tricolores (los puedes encontrar en Bricogeek ó Sparkfun).
Es un montaje muy rápido preparar y de programar.Pongo un video del resultado:
La secuencia según aumentan las rpm:
1) primer led verde on
2) dos primeros verdes on
3) los dos primeros leds verdes on y el tercero en azul on
4) en el momento de cambio=> los 3 leds on en rojo.
Para avisar de overrevs, se le ponen todas en azul (viene bien sobre todo cuando se baja de marcha si no quieres que sufran válvulas y sus muelles, etc).
En el video, parece que los leds iluminan mucho, pero está bien. Es un problema de la calidad (grabado con un móvil). Tampoco es la ubicación definitiva y se podría hacer más pequeño.... al gusto del consumidor... ;)
Igor R.
Un amigo me pidió que le hiciera unas "Shift Lights" para su coche de competición. Son luces de cambio, es decir, según las revoluciones motor, se van encendiendo progresivamente.
Es un coche antiguo y he sacado la señal del distribuidor. Disponía de un sensor Hall (conmuta con masa para dar la chispa. Está en serie con la bobina). La entrada al pin 2 (int 0) la he protegido con una resistencia en serie de gran valor y un zener de 5V1 (recordad que está en serie con una bobina). A parte, las entradas del ATMega 168 vienen protegidos con "clamp diodes" (como máximo permiten 1 mA).
Recordad: el arbol del levas va a la mitad de velocidad que las revoluciones motor. Además, en mi montaje, por cada vuelta hay 4 pulsos.
He eliminado el conector de alimentación externa del Arduino, y he soldado unos cables para la alimentación en su lugar. También he puesto un Varistor para proteger de sobretensiones la etapa de alimentación.
He usado diodos leds tricolores (los puedes encontrar en Bricogeek ó Sparkfun).
Es un montaje muy rápido preparar y de programar.Pongo un video del resultado:
La secuencia según aumentan las rpm:
1) primer led verde on
2) dos primeros verdes on
3) los dos primeros leds verdes on y el tercero en azul on
4) en el momento de cambio=> los 3 leds on en rojo.
Para avisar de overrevs, se le ponen todas en azul (viene bien sobre todo cuando se baja de marcha si no quieres que sufran válvulas y sus muelles, etc).
En el video, parece que los leds iluminan mucho, pero está bien. Es un problema de la calidad (grabado con un móvil). Tampoco es la ubicación definitiva y se podría hacer más pequeño.... al gusto del consumidor... ;)
//SHIFT LIGHTS //By Igor Real //13-09-09 #define Primera_ON 5500 #define Segunda_ON 6000 #define Tercera_ON 6500 #define Todas_ON 7000 #define OVERREV 8000 //---------------------------- #define Third_Red 13 #define Third_Blue 12 #define Third_Green 11 //---------------------------- #define Second_Red 10 #define Second_Blue 9 #define Second_Green 8 //---------------------------- #define First_Red 5 #define First_Blue 6 #define First_Green 7 volatile unsigned long cont_rpm; void setup() { pinMode(Third_Red, OUTPUT); pinMode(Third_Green, OUTPUT); pinMode(Third_Blue, OUTPUT); pinMode(Second_Red, OUTPUT); pinMode(Second_Green, OUTPUT); pinMode(Second_Blue, OUTPUT); pinMode(First_Red, OUTPUT); pinMode(First_Green, OUTPUT); pinMode(First_Blue, OUTPUT); //----------------------------------------- digitalWrite(Third_Red,LOW); digitalWrite(Third_Green,LOW); digitalWrite(Third_Blue,LOW); digitalWrite(Second_Red,LOW); digitalWrite(Second_Green,LOW); digitalWrite(Second_Blue,LOW); digitalWrite(First_Red,LOW); digitalWrite(First_Green,LOW); digitalWrite(First_Blue,LOW); //----------------------------------------- pinMode(2,INPUT); attachInterrupt(0, rpm, RISING); Serial.begin(9600); } void rpm() { cont_rpm++; } void loop() { static unsigned long rpm_ant; static unsigned long t_anterior; static float rpm_actuales; rpm_ant=cont_rpm; t_anterior=millis(); delay(100); rpm_actuales=(cont_rpm-rpm_ant)/(2.0*(millis()-t_anterior)/60000); Serial.println(rpm_actuales); if (rpm_actualesdigitalWrite(Third_Red,LOW); digitalWrite(Third_Green,LOW); digitalWrite(Third_Blue,LOW); digitalWrite(Second_Red,LOW); digitalWrite(Second_Green,LOW); digitalWrite(Second_Blue,LOW); digitalWrite(First_Red,LOW); digitalWrite(First_Green,LOW); digitalWrite(First_Blue,LOW); }else if((rpm_actuales>=Primera_ON) && (rpm_actuales digitalWrite(First_Green,HIGH); digitalWrite(Third_Red,LOW); digitalWrite(Third_Green,LOW); digitalWrite(Third_Blue,LOW); digitalWrite(Second_Red,LOW); digitalWrite(Second_Green,LOW); digitalWrite(Second_Blue,LOW); digitalWrite(First_Red,LOW); digitalWrite(First_Blue,LOW); }else if ((rpm_actuales>=Segunda_ON) && (rpm_actuales digitalWrite(Second_Green,HIGH); digitalWrite(First_Green,HIGH); digitalWrite(Third_Red,LOW); digitalWrite(Third_Green,LOW); digitalWrite(Third_Blue,LOW); digitalWrite(Second_Red,LOW); digitalWrite(Second_Blue,LOW); digitalWrite(First_Red,LOW); digitalWrite(First_Blue,LOW); }else if ((rpm_actuales>=Tercera_ON) && (rpm_actuales digitalWrite(Third_Blue,HIGH); digitalWrite(First_Green,HIGH); digitalWrite(Second_Green,HIGH); digitalWrite(Third_Red,LOW); digitalWrite(Third_Green,LOW); digitalWrite(Second_Red,LOW); digitalWrite(Second_Blue,LOW); digitalWrite(First_Red,LOW); digitalWrite(First_Blue,LOW); }else if ((rpm_actuales>=Todas_ON) && (rpm_actuales digitalWrite(Third_Red,HIGH); digitalWrite(Second_Red,HIGH); digitalWrite(First_Red,HIGH); digitalWrite(Third_Green,LOW); digitalWrite(Third_Blue,LOW); digitalWrite(Second_Green,LOW); digitalWrite(Second_Blue,LOW); digitalWrite(First_Green,LOW); digitalWrite(First_Blue,LOW); }else if (rpm_actuales>=OVERREV){ digitalWrite(Third_Red,LOW); digitalWrite(Third_Green,LOW); digitalWrite(Second_Red,LOW); digitalWrite(Second_Green,LOW); digitalWrite(First_Red,LOW); digitalWrite(First_Green,LOW); digitalWrite(Third_Blue,HIGH); digitalWrite(Second_Blue,HIGH); digitalWrite(First_Blue,HIGH); delay(1000); } }
.
.
.Saludos!!.
.
.Igor R.
.
.
.
Hola, bueno el post, pero te digo que el árbol de levas va es a la MITAD de la velocidad de las revoluciones motor.
ResponderEliminarGazapo.... corregido!!! Gracias!
ResponderEliminarestoy muy interesado en tu proyecto y agradecería k facilitaras esquemas sobre el conexionado al arduino
ResponderEliminarMuy buen post Igor.
ResponderEliminarMe encuentro haciendo algo muy similar, pero no tengo muy claro como obtener el valor necesario para Serial.begin.
Como lo hiciste tu?
Mil gracias