动态仪表盘灯

大家好
我曾经在黑暗中骑行,想出了一个主意,如果仪表灯的颜色从速度或发动机速度改变会很有趣。因为我没有整洁的转速表,于是决定实施第二种方法,因为一种方法可以大致确定速度。
如果有人想重复一遍,我会立即说,您在汽车上与电工一起工作,风险自负。
工匠们可以合理地谈论麻雀上的加农炮射击以及我出色的编程能力,但可以实现目标,可以实现计划,并且可以自己工作:)。通常,您将需要:Arduino,一对RGB LED,几个电阻器和几个稳压芯片,用于LED的安装座。有兴趣的请下猫。





在Internet上进行的快速搜索给出了转速计接收脉冲信息的信息。找不到有关脉冲形状和持续时间的准确信息。它的持续时间是变化的还是静态的,但是脉冲之间的时间是否变化。好吧,您必须教Arduin计算脉冲,并确定一次和同时在触点“ +”上和“ 0”上的时间。

我们连接RGB二极管。不要忘记在每个LED上放置一个限流电阻。

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


我们将使用attachInterrupt方法当引脚上出现电压和/或消失时,该方法将调用一个函数。在我们的情况下,我们需要在两种情况下都做出反应,因为除了冲动的存在我们对脉冲一无所知。后来发现,随着速度的增加,持续时间+和持续时间0都会减小。

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

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


在安装程序中,我们连接将要连接脉冲线的引脚。这是代码中的数字引脚2。0。这是可以在此模式下工作的引脚编号。它与引脚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; // 


接下来,我们检查数据是否足够:脉冲持续时间以及相应的转数符合物理规范,并开始控制光。

速度将从蓝色变为绿色,从黄色变为红色。颜色与下面的转数的关系图。水平旋转刻度。在垂直方向上,亮度级别是从0到255。纯蓝色和红色无法充分照亮面板,因此我不得不将它们稀释一些。但是蓝色开始变成青铜色,非常漂亮:)

图片

对于每个部分,您需要创建一个公式来计算亮度。实际上,该方程是在两个点上的一条直线。这被认为很容易。
因此,例如对于800-1300的图,亮度将被视为
g=0.21*obr_v_min-18;
b=-0.51*obr_v_min+663 ;
r=0;


如果没有足够的数据停止流动,请不要忘记考虑错误。超过100个连续的错误(经验,如果导线脱落,那么这100个瞬间飞过),那么我们将保持不变的颜色。当数据出现时,我们返回。

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


最后,颜色的平滑度会发生变化。
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);

}}


打开系统电源时,请轻轻点亮背光灯。为此,我们设置变量first_loop,y将告诉arduine尚未注意脉冲。
  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;
      
    }


因此,一切都该测试了。一月份的大街上,寒冷的天气只是在汽车上测试,实在太冷了。需要一个模拟器。我们取第二个ardudinka,并从中制成一个脉冲发生器。
总的来说,是这样。调试时,我在此处添加了COM控件以更改长度。
digitalWrite(8, HIGH);  
delay(10);          
digitalWrite(8, LOW); 
delay(10);  


巧合的是,USB示波器竟然掌握在我的手中,这对开发起到了很大作用。我们连接并看到大约相同图片的输出。


玩完游戏后,我们确保一切似乎正常。现在我们去寻找汽车中的动力。展望未来,我会说我没有在仪表板中找到转速表的电线,因此必须连接到OBDII连接器。打开然后...



这是什么!
我们加油。



嗯,他们根本不知道如何计算它们。我想我必须重做所有事情。过了一会儿,我注意到示波器探头的第二根导线从质量上掉落了。 gh




哇,一切都很好。那只是幅度不是5V Arduino。我们不会冒险。将不得不降低。
顺便说一下该频率是发动机转速的两倍。我了解转速表会显示每分钟的循环数,即例如,气缸中的闪光次数。但是曲轴在一个周期内转过两次。从他身上得到了冲动。但是,我可能是错的。但是在闲置时,一辆小汽车冷却下来,我的振荡器显示34.4 Hz。对应于2000 rpm。即使是耳朵,也并非如此。但是是1000。计算转数时应考虑公式。

在电源测试期间,Arduino 12V并非总是表现良好,因此我们将通过车载网络为其供电,但会将其降低至5V。

系统的总体方案。通过稳定器L7805C,我们给arduino供料,并通过分频器减小脉冲幅度。在arduins的输出处,我们通过电阻并联连接一对LED。这恰好是我的仪表板中的背光灯数量。



因此,现在该制造二极管墨盒了。



右侧的原始墨盒。我在商店里没找到这样的东西,我不得不拿标准的。我们不会从墨盒中取出端子,因为我们不会从墨盒中取出食物。我们钻了一些孔,用于将电线从下面插入墨盒。我们将导线焊接到二极管上,使用热缩管将其隔离。



很长时间以来,我一直在寻找如何增加这种墨盒长度的方法;直径没有增加。结果,我使用了紧密的电缆绝缘层。我们从墨盒末端拧紧并固定一滴热胶。



我试图在单独的板上制作用于LED的稳定器和6个电阻器,但是由于某种原因,在此过程中,仅蚀刻了一半的文字沸石。在董事会的一部分,它只是保持不变,在下半年,它完全消失了。它们之间有一个平滑的边界,就像不同的金属一样。因此,其余的看起来不会很美,没有照片。但是一切都是按照上面的方案。在寻找如何增加墨盒的同时,我发现了一个几乎完美的案例:)。



为了将来删除仪表板,决定进行可分离的连接。烧毁的电源有助于找到芯片。一端连接到arduino,另一端连接到汽车的车载网络。



我们从面板的背面拧下机箱上的一颗螺丝,然后将其与用作机箱的计算机插座部分固定在一起。



我们扣紧箱子,收集电线,使其不会挂出,然后将所有物品放回原处。我从面板上的配线中取了沙丁鱼的食物。我对负责常规背光灯电源的触点进行了调整,并在芯片上找到了相应的导线。结果,在包含光的情况下,arduin会打开,但不能持续工作。我没有找到转速表,我不得不将电缆连接到OBDII连接器。



总的来说,一切就绪。视频作品。当然,在夜间拍摄夜光元素时,视频并不能传达所有的深度和对比度。






我骑了一个星期。我以为会紧张。但是,不,我喜欢。好吧,到目前为止至少不厌倦:)。它不会急剧变化,有时侧视力的变化没有时间引起注意。只有当它变成红色时,它才引人注目,但是当汽车开始加速获得动力并在超车时进入红色区域时,这是非常令人印象深刻的。

Arduino

UPD
Scheme的草图并不声称是正确和理想的。工匠不建议使用稳压器降低脉冲幅度,而应使用常规的分压器。可以在下面的评论中看到评论。
UPD2
更改了与评论有关的方案。链接方案

好吧,我重复一遍,复制此方案的责任仅在于您。技术创造力祝您好运!:)

Source: https://habr.com/ru/post/zh-CN389475/


All Articles