Luces de tablero dinámicas

Hola a todos
Una vez monté en la oscuridad y se me ocurrió la idea, sería interesante si el color de la iluminación del instrumento cambiara de la velocidad o la velocidad del motor. Porque No tengo un tacómetro ordenado, luego se decidió implementar la segunda opción, para una será posible determinar aproximadamente la velocidad.
Si alguien quiere repetir, lo diré de inmediato, usted trabaja con un electricista en un automóvil bajo su propio riesgo.
Los artesanos pueden decir razonablemente sobre los disparos de cañones en gorriones y sobre mi excelente capacidad para programar, pero el objetivo se logra, el plan se realiza y funciona por sí mismo :). En general, necesitará: Arduino, un par de LED RGB, varias resistencias y un par de chips de estabilización de voltaje, soportes para LED. Interesado por favor debajo del gato.





Una búsqueda rápida en Internet proporcionó información de que el tacómetro recibe información en pulsos. No se encontró información precisa sobre la forma y la duración de los pulsos. Si su duración cambia o es estática, pero cambia el tiempo entre pulsos. Bueno, tienes que enseñarle a Arduin a contar impulsos y determinar por un mismo tiempo cuándo estás en el contacto "+" y cuándo "0".

Conectamos el diodo RGB. No olvide poner una resistencia límite en cada LED.

const int RED_PIN = 9;
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;


Utilizaremos el método attachInterrupt . El método llama a una función cuando el voltaje aparece y / o desaparece en el pin. En nuestro caso, necesitamos reaccionar en ambos casos, porque no sabemos nada sobre el impulso excepto su presencia. Como resultó más tarde, con un aumento en la velocidad, tanto la duración + como la duración 0 disminuyen.

long  micro_prev=0; // 
long  micro_now=0;
long  razn;

long  impulse; // 1 (+)
long  silence; // 0


En la configuración, conectamos el pin al que se conectará el cable de impulso. Este es un pin digital 2. 0 en el código. Esta es la numeración de los pines que pueden funcionar en este modo. Coincide con el pin 2.

  attachInterrupt(0, blink, CHANGE  );


  micro_now=micros(); //   
  razn=micro_now-micro_prev; //   
  a++;

if(digitalRead(2)==LOW){ //   0,      +,  ,         .
  impulse=razn;
  } else {
  silence=razn;
   }

  if(a==2){ //      ,       
    Serial.println(String(impulse)+" "+String(silence)); //  
    obr_v_min=30000000/(impulse+silence); //   .
    a=0; // 


A continuación, verificamos que los datos sean adecuados: la duración del pulso y, en consecuencia, las revoluciones corresponden a las normas físicas y comienzan a controlar la luz.

La velocidad cambiará de azul a verde y de amarillo a rojo. El diagrama de la dependencia del color de las revoluciones a continuación. Escala horizontal de revoluciones. Verticalmente, el nivel de brillo es de 0 a 255. El azul puro y el rojo no iluminaban el panel lo suficientemente brillante, así que tuve que diluirlos un poco diferentes. Pero el azul comenzó a aparecer en moretones, muy hermoso :)

imagen

Para cada una de las secciones, debe crear una fórmula mediante la cual se calculará el brillo. De hecho, esta ecuación es una línea recta en dos puntos. Se considera fácil.
Entonces, por ejemplo, para una parcela de 800-1300, el brillo se considerará como
g=0.21*obr_v_min-18;
b=-0.51*obr_v_min+663 ;
r=0;


No olvide considerar errores si los datos adecuados dejan de fluir. Más de 100 errores consecutivos (por experiencia, si el cable se cae, este centenar de moscas en una fracción de segundo), lo dejamos en un color estático. Cuando aparecen los datos, regresamos.

 error++;
  if(error>=100){  
  k = go_to_color(0,255,255);  
          }


Y finalmente, la suavidad del cambio de color.
int go_to_color(int r, int g, int b){
while(r_current!=r || g_current!=g || b_current!=b) //            
{

if(r_current>r){ //         
      r_current=r_current-1;
    }
   if(r_current<r){ //         
      r_current=r_current+1;
    } 

//    
....
delay(100);
  
analogWrite(RED_PIN, r_current);
analogWrite(GREEN_PIN, g_current);
analogWrite(BLUE_PIN, b_current);

}}


Cuando encienda el sistema, encienda suavemente la luz de fondo. Para hacer esto, configuramos la variable first_loop, que y le dirá a la arduina que aún no es necesario prestar atención a los pulsos.
  if(first_loop==1){  
   int i;   
     for(i=0;i<255;i++){
        analogWrite(RED_PIN, 0);
        analogWrite(GREEN_PIN, 0);
        analogWrite(BLUE_PIN, i);
        delay(5);
      }
  b_current=255;
  r_current=0;
  g_current=0;
   delay(500);
       
   first_loop=0;
      
    }


Entonces, todo, es hora de probar. En la calle, en enero, hace frío para pasar frío y probar en un automóvil. Necesito un simulador Tomamos el segundo ardudinka y hacemos un generador de pulsos a partir de él.
En términos generales, esto es así. Al depurar, agregué el control COM aquí para cambiar la longitud.
digitalWrite(8, HIGH);  
delay(10);          
digitalWrite(8, LOW); 
delay(10);  


Por una feliz coincidencia, el osciloscopio USB resultó estar en mis manos, lo que ayudó mucho con el desarrollo. Nos conectamos y vemos la salida de aproximadamente la misma imagen.


Después de jugar, nos aseguramos de que todo parece funcionar. Ahora vamos y buscamos impulsos en el auto. Mirando hacia el futuro, diré que en el tablero no encontré la salida del cable para el tacómetro, así que tuve que conectarme al conector OBDII. Enciende y ...



¿Qué es esto?
Nosotros gas



Bueno, no saben cómo contarlos. Tendré que rehacer todo, pensé. Y un poco más tarde noté que el segundo cable de la sonda del osciloscopio se cayó de la masa. Ugh tu




Wow, todo está bien. Eso es solo la amplitud no es 5V Arduino. No lo arriesgaremos. Habrá que bajar.
Por cierto, otro momento. La frecuencia es dos veces mayor que la velocidad del motor. Entiendo que el tacómetro muestra el número de ciclos por minuto, es decir número de flashes en el cilindro, por ejemplo. Pero el cigüeñal en un ciclo gira dos veces. Y se le quitan los impulsos. Sin embargo, puedo estar equivocado. Pero al ralentí, un pequeño automóvil se enfrió, mi oscilador mostró 34.4 Hz. Que corresponde a 2000 rpm. Incluso de oído, esto no fue así. Pero 1000 lo es. Considere en las fórmulas al calcular revoluciones.

Durante las pruebas de potencia, el Arduino 12V no siempre se comportó adecuadamente, por lo que lo suministraremos desde la red a bordo, pero lo bajaremos a 5V.

El esquema general del sistema. A través de los estabilizadores L7805C alimentamos al arduino y reducimos la amplitud del pulso mediante el divisor. A la salida de los arduins, conectamos en paralelo un par de LED a través de resistencias. Esa es exactamente la cantidad de lámparas de luz de fondo en mi tablero.



Entonces, bueno, ahora es el momento de hacer cartuchos para diodos.



Cartucho nativo a la derecha. No encontré tal en la tienda, tuve que tomar los estándares. Sacamos los terminales de los cartuchos, porque no les quitaremos comida. Perforamos agujeros para llevar los cables al cartucho desde abajo. Soldamos los cables al diodo, lo aislamos bien usando tubos termocontraíbles.



Durante mucho tiempo estuve buscando cómo aumentar la longitud de ese cartucho; nada tenía un diámetro. Como resultado, utilicé un aislamiento hermético del cable. Aprietamos y fijamos una gota de pegamento caliente desde el extremo del cartucho.



Traté de hacer un estabilizador y 6 resistencias para LED en una placa separada, pero por alguna razón, la textolita se grabó solo a la mitad en el proceso. En una parte del tablero, simplemente permaneció intacto, en la segunda mitad desapareció por completo. Y entre ellos hay un borde liso, como diferentes metales. Por lo tanto, el resto no iba a verse muy estético, sin fotos. Pero todo está de acuerdo con el esquema anterior. Mientras buscaba cómo aumentar el cartucho, encontré un estuche casi perfecto :).



Para que el tablero se elimine en el futuro, se decidió hacer una conexión desmontable. Una fuente de alimentación quemada ayudó a encontrar el chip. un extremo para el arduino, el segundo extremo para la red a bordo del automóvil.



En el reverso del panel, desenrosque un tornillo de la caja y atorníllelo nuevamente con una parte de la salida de la computadora que actúa como la caja.



Abrimos el estuche, recogemos los cables para que no se cuelgue y volvemos a colocar todo. Tomé comida para arduins del cableado que va al panel. Llamé a los contactos responsables del suministro de energía de las lámparas de luz de fondo normales y encontré los cables correspondientes en el chip. Como resultado, arduin se enciende con la inclusión de la luz, pero no funciona constantemente. No encontré un tacómetro, tuve que llevar el cableado al conector OBDII.



En general, todo está listo. Video de trabajo. Por supuesto, el video no transmite toda la profundidad y el contraste cuando se toman elementos luminosos por la noche.






Monto por una semana. Pensé que sería un esfuerzo. Sin embargo, no, me gusta. Bueno, hasta ahora no cansado de al menos :). No cambia bruscamente, a veces un cambio en la visión lateral no tiene tiempo para notarlo. Se nota solo cuando cambia a rojo, pero es muy impresionante cuando el automóvil comienza a acelerar ganando impulso y entra en la zona roja al adelantar :).

Sketch for Arduino

UPD
Scheme no pretende ser correcto e ideal. Los artesanos no aconsejan usar un estabilizador de voltaje para reducir la amplitud de los pulsos, pero usan un divisor de voltaje convencional. Los comentarios se pueden ver en los comentarios a continuación.
UPD2
Cambió el esquema en relación con los comentarios. Antiguo esquema de enlace

Bueno, repito, la responsabilidad de reproducir este esquema solo recae en usted. ¡Buena suerte en creatividad técnica! :)

Source: https://habr.com/ru/post/es389475/


All Articles