Luzes dinâmicas no painel

Olá pessoal.
Certa vez, andei no escuro e tive uma ideia: seria interessante se a cor da iluminação do instrumento mudasse de velocidade ou velocidade do motor. Porque Eu não tenho um tacômetro em ordem, então foi decidido implementar a segunda opção; para uma, será possível determinar aproximadamente a velocidade.
Se alguém quiser repetir, direi imediatamente, você trabalha com um eletricista em um carro por sua conta e risco.
Os artesãos podem dizer razoavelmente sobre disparos de canhão em pardais e sobre minha excelente capacidade de programar, mas o objetivo foi alcançado, o plano foi realizado e funciona para si :). Em geral, você precisará de: Arduino, um par de LEDs RGB, vários resistores e dois chips de estabilização de tensão, suportes para LEDs. Interessado por favor, sob o gato.





Uma pesquisa rápida na Internet forneceu informações de que o tacômetro recebe informações em pulsos. Informações precisas sobre a forma e duração dos pulsos não foram encontradas. Se a sua duração muda ou é estática, mas o tempo entre os pulsos muda. Bem, você precisa ensinar o Arduin a contar impulsos e determinar ao mesmo tempo quando está no contato "+" e quando "0".

Nós conectamos o diodo RGB. Não se esqueça de colocar um resistor limite em cada LED.

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


Usaremos o método attachInterrupt . O método chama uma função quando a tensão aparece e / ou desaparece no pino. No nosso caso, precisamos reagir nos dois casos, porque não sabemos nada sobre o impulso, exceto sua presença. Como se viu depois, com o aumento da velocidade, a duração + e a duração 0 diminuem.

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

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


Na instalação, conectamos o pino ao qual o fio de impulso será conectado. Este é um pino digital 2. 0 no código. Essa é a numeração de pinos que podem funcionar nesse modo. Corresponde ao pino 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 seguir, verificamos se os dados são adequados: a duração do pulso e, consequentemente, as revoluções correspondem às normas físicas e começam a controlar a luz.

A velocidade mudará de azul para verde e de amarelo para vermelho. O diagrama da dependência da cor nas revoluções abaixo. Escala horizontal de revoluções. Na vertical, o nível de brilho é de 0 a 255. Azul e vermelho puro não iluminavam o painel com brilho suficiente, então tive que diluí-los um pouco diferente. Mas o azul começou a formar hematomas, muito bonito :)

imagem

Para cada uma das seções, você precisa criar uma fórmula pela qual o brilho será calculado. De fato, esta equação é uma linha reta em dois pontos. É considerado fácil.
Por exemplo, para um gráfico de 800 a 1300, o brilho será considerado como
g=0.21*obr_v_min-18;
b=-0.51*obr_v_min+663 ;
r=0;


Não se esqueça de considerar erros se os dados adequados deixarem de fluir. Mais de 100 erros consecutivos (por experiência, se o fio se soltar, centenas de vezes voam em uma fração de segundo), deixamos a cor estática. Quando os dados aparecem, retornamos.

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


E, finalmente, a suavidade da cor muda.
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);

}}


Ao ligar o sistema, acenda suavemente a luz de fundo. Para fazer isso, configuramos a variável first_loop, que y dirá ao arduino que ainda não é necessário prestar atenção aos 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;
      
    }


Então, tudo, é hora de testar. Nas ruas de janeiro, é frio entrar no frio e apenas testar em um carro. Precisa de um simulador. Tomamos o segundo ardudinka e fazemos dele um gerador de pulsos.
Em termos gerais, é assim. Ao depurar, adicionei o controle COM aqui para alterar o comprimento.
digitalWrite(8, HIGH);  
delay(10);          
digitalWrite(8, LOW); 
delay(10);  


Por uma feliz coincidência, o osciloscópio USB acabou por estar em minhas mãos, o que ajudou muito no desenvolvimento. Conectamos e vemos a saída aproximadamente da mesma imagem.


Depois de jogar, garantimos que tudo parece funcionar. Agora vamos procurar impulsos no carro. Olhando para o futuro, direi que no painel não encontrei a saída de fio do tacômetro, então tive que me conectar ao conector OBDII. Ligue e ...



O que é isso!?
Nós gás.



Bem, eles não sabem como contá-los. Vou ter que refazer tudo, pensei. E um pouco mais tarde notei que o segundo fio da sonda do osciloscópio caiu da massa. Ugh você.




Uau, está tudo bem. Isso é apenas a amplitude não é 5V Arduino. Não vamos arriscar. Terá que baixar.
A propósito, outro momento. A frequência é duas vezes maior que a velocidade do motor. Entendo que o tacômetro mostra o número de ciclos por minuto, ou seja, número de flashes no cilindro, por exemplo. Mas a cambota em um ciclo gira duas vezes. E impulsos são tomados dele. No entanto, posso estar errado. Mas em marcha lenta, um pequeno carro esfriou, meu oscilador mostrou 34,4 Hz. O que corresponde a 2000 rpm. Mesmo de ouvido, não era assim. Mas 1000 é isso. Considere em fórmulas ao calcular revoluções.

Durante os testes de energia, o Arduino 12V nem sempre se comportou adequadamente, portanto, o forneceremos a partir da rede de bordo, mas o reduziremos para 5V.

O esquema geral do sistema. Através dos estabilizadores L7805C, alimentamos o arduino e reduzimos a amplitude de pulso pelo divisor. Na saída dos arduinos, conectamos em paralelo um par de LEDs através de resistores. Esse é exatamente o número de lâmpadas de luz de fundo no meu painel.



Então, agora é hora de fazer cartuchos para diodos.



Cartucho nativo à direita. Eu não encontrei isso na loja, tive que pegar os de série. Retiramos os terminais dos cartuchos, porque não levaremos comida deles. Realizamos furos para colocar os fios no cartucho por baixo. Soldamos os fios ao diodo, isolamos-o bem usando tubos termo-retráteis.



Durante muito tempo, eu estava procurando por um modo de aumentar o tamanho de um cartucho, mas nada tinha diâmetro. Como resultado, usei isolamento rígido do cabo. Apertamos e fixamos uma gota de cola quente no final do cartucho.



Tentei fazer um estabilizador e 6 resistores para LEDs em uma placa separada, mas por algum motivo o textolite foi gravado apenas pela metade no processo. Em uma parte do quadro, ele simplesmente permaneceu intocado; no segundo semestre, desapareceu completamente. E entre eles há uma borda lisa, como metais diferentes. Portanto, o resto não seria muito estético, sem fotos. Mas tudo está de acordo com o esquema acima. Ao pesquisar como aumentar o cartucho, encontrei um estojo quase perfeito :).



Para que o painel fosse removido no futuro, foi decidido fazer uma conexão destacável. Uma fonte de alimentação queimada ajudou a encontrar o chip. uma extremidade ao arduino, a segunda extremidade à rede de bordo do carro.



No lado oposto do painel, desaparafuse um parafuso do gabinete e aperte-o novamente com uma parte da tomada do computador que funciona como o gabinete.



Pegamos o estojo, recolocamos os fios para que ele não saia e colocamos tudo de volta. Peguei comida para os arduinos da fiação que vai para o painel. Liguei para os contatos responsáveis ​​pelo fornecimento de energia das lâmpadas de luz de fundo regulares e encontrei os fios correspondentes no chip. Como resultado, o arduin é ativado com a inclusão da luz, mas não funciona constantemente. Não encontrei um tacômetro, tive que levar a fiação ao conector OBDII.



Em geral, tudo está pronto. Trabalho em vídeo. Obviamente, o vídeo não transmite toda a profundidade e contraste ao fotografar elementos luminosos à noite.






Eu monto por uma semana. Eu pensei que iria forçar. No entanto, não, eu gosto. Bem, até agora não está cansado de pelo menos :). Não muda muito, às vezes uma mudança na visão lateral não tem tempo para notar. É perceptível apenas quando muda para vermelho, mas é muito impressionante quando o carro começa a acelerar e ganha impulso e entra na zona vermelha ao ultrapassar :).

O esboço para o esquema

UPD do Arduino
não afirma ser correto e ideal. Os artesãos não recomendam o uso de um estabilizador de tensão para diminuir a amplitude dos pulsos, mas usam um divisor de tensão convencional. Os comentários podem ser vistos nos comentários abaixo.
UPD2
Alterou o esquema em conexão com os comentários. Esquema de link antigo

Bem, repito, a responsabilidade de reproduzir esse esquema é apenas sua. Boa sorte em criatividade técnica! :)

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


All Articles