用WS2812做一个自行车转向尾灯

用WS2812做一个自行车转向尾灯

这段时间锻炼的少了,血糖又有上升的趋势,就把我的破自行车修了一下,开始骑行。但夜间骑行不安全,就考虑加一个尾灯。
把零件盒里的电子垃圾扒拉了一下,找到一块ws2812b,8联封装好的那种,一块以前买的的arduino nano,再从老婆的旧电动车上拆了一个转向开关总成,然后就开始组装了。
【实现功能】
我要实现的功能很简单,从车把上控制尾灯的开关及左转右转。正常情况下,尾灯以呼吸灯的形式提醒后车,转向的时间采用向左或向右的流水灯显示。
【所需配件】
1、Arduino nano一个。
用WS2812做一个自行车转向尾灯_第1张图片

2、Ws2812b-8 LED组件一个。
用WS2812做一个自行车转向尾灯_第2张图片

电源开关一个(尾灯白天断电关闭,夜间需要时通电打开)、双向开关一个(控制左转和右转)实际上我用一个电动车的转向总成控制,上面有大灯开关和转向开关(还有一个喇叭开关,空置不用)。
用WS2812做一个自行车转向尾灯_第3张图片

10K电阻两个(用于转向灯的分流)

【程序代码】
程序如下:

/*
 * 本实例用于实现自行车电子尾灯,主要功能是实现夜行警示及右转、右转提示
 * 主要元器件包括:
 * 1、一块arduino nano(控制灯光显示及变化)
 * 2、一块8联ws2812B-8彩色LED
 * 3、一块9v层叠电池(普通的电量小不奈用,我用的是一个可充电的)
 * 4、三位开关、电源开关(也可以使用一个电动车的转向开关总成)
 * 5、10K色环电阻两个(用于分流)
 * 源码所涉及库文件到:https://download.csdn.net/download/hnkkfan/72395780下载
 */

#include 
#ifdef __AVR__
#include 
#endif


#define PIN 6   //ws2812b的din接在arduino的D6上

#define NUMPIXELS   8 // LED数量为8

// 定义灯珠对象
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // 延时变量
int Pin_Left=A0;//设置左转信号接A0
int Pin_Right=A1;//设置右转信号接A1

void setup() {

#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  // End of trinket special code

  pixels.begin(); // 初始化对象.
}

void loop() 
{
  
  if(digitalRead(Pin_Left)==HIGH)//如果按下左转
   {
     turnLeft();
   }
   else
   {
      if(digitalRead(Pin_Right)==HIGH)//如果按下右转
      {
        
        turnRight();
      }
      else//什么也没按
      {
        
        turnFlash();
      }
   }
   
}
void turnLeft()
{
  for(int i=NUMPIXELS;i>0;i-=2)
  {
    
    //方法pixels.setPixelColor(s, pixels.Color(r,g,b))用于设置灯珠,s为第几个灯珠,rgb为红绿蓝分量,0-255.
    pixels.setPixelColor(i-1, pixels.Color(255,80,0)); 
    pixels.setPixelColor(i-2, pixels.Color(255,80,0));
    pixels.show(); // 在ws2812b上更新LED显示信息
    delay(delayval); 
  }
 
  //下面的循环用于熄灭全部灯珠
  for(int i=0;i<NUMPIXELS;i++)
  {
    pixels.setPixelColor(i, pixels.Color(0,0,0)); 
    pixels.show();    
  }
  delay(delayval); 

}
void turnRight()
{
  for(int i=0;i<NUMPIXELS;i+=2)
  {
    
    pixels.setPixelColor(i, pixels.Color(255,80,0)); 
    pixels.setPixelColor(i+1, pixels.Color(255,80,0));
    pixels.show(); 
    delay(delayval); 
  }
  for(int i=0;i<NUMPIXELS;i++)
  {
    
    pixels.setPixelColor(i, pixels.Color(0,0,0));
    pixels.show(); 
    
  }
  delay(delayval); 
}
void turnFlash()
{

  
  for(int i=255;i>0;i-=64)
  {
    pixels.setPixelColor(3, pixels.Color(i,0,0));
    pixels.setPixelColor(4, pixels.Color(i,0,0));
    pixels.setPixelColor(2, pixels.Color(0,i,0));
    pixels.setPixelColor(5, pixels.Color(0,i,0));
    pixels.setPixelColor(1, pixels.Color(0,0,i));
    pixels.setPixelColor(6, pixels.Color(0,0,i));
    pixels.setPixelColor(0, pixels.Color(i,i/2,0));
    pixels.setPixelColor(7, pixels.Color(i,i/2,0));
    pixels.show();
    delay(250);
  }
  for(int i=0;i<255;i+=64)
  {
    pixels.setPixelColor(3, pixels.Color(i,0,0));
    pixels.setPixelColor(4, pixels.Color(i,0,0));
    pixels.setPixelColor(2, pixels.Color(0,i,0));
    pixels.setPixelColor(5, pixels.Color(0,i,0));
    pixels.setPixelColor(1, pixels.Color(0,0,i));
    pixels.setPixelColor(6, pixels.Color(0,0,i));
    pixels.setPixelColor(0, pixels.Color(i,i/2,0));
    pixels.setPixelColor(7, pixels.Color(i,i/2,0));
    pixels.show();
    delay(250);
  }
  
  
  
}

【线路连接】
接线如下图:
用WS2812做一个自行车转向尾灯_第4张图片

安装后用3d打印机简单做了一个盒子,上盖用白色的PLA材料(我本来想用透明的,但手头没有),做完后固定到自行车后座下面,然后把开关总成固定在车把上,一个有转向提示功能的尾灯就完成了。

【效果】
安装后的效果如下:

通电尾灯呼吸状态

左转时的流水灯

右转时的流水灯

做完了试下,夜行时,偶就是最靓的仔!

你可能感兴趣的:(arduino,物联网,单片机)