本文主要是介绍用WS2812做一个自行车转向尾灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用WS2812做一个自行车转向尾灯
这段时间锻炼的少了,血糖又有上升的趋势,就把我的破自行车修了一下,开始骑行。但夜间骑行不安全,就考虑加一个尾灯。
把零件盒里的电子垃圾扒拉了一下,找到一块ws2812b,8联封装好的那种,一块以前买的的arduino nano,再从老婆的旧电动车上拆了一个转向开关总成,然后就开始组装了。
【实现功能】
我要实现的功能很简单,从车把上控制尾灯的开关及左转右转。正常情况下,尾灯以呼吸灯的形式提醒后车,转向的时间采用向左或向右的流水灯显示。
【所需配件】
1、Arduino nano一个。
2、Ws2812b-8 LED组件一个。
电源开关一个(尾灯白天断电关闭,夜间需要时通电打开)、双向开关一个(控制左转和右转)实际上我用一个电动车的转向总成控制,上面有大灯开关和转向开关(还有一个喇叭开关,空置不用)。
10K电阻两个(用于转向灯的分流)
【程序代码】
程序如下:
/** 本实例用于实现自行车电子尾灯,主要功能是实现夜行警示及右转、右转提示* 主要元器件包括:* 1、一块arduino nano(控制灯光显示及变化)* 2、一块8联ws2812B-8彩色LED* 3、一块9v层叠电池(普通的电量小不奈用,我用的是一个可充电的)* 4、三位开关、电源开关(也可以使用一个电动车的转向开关总成)* 5、10K色环电阻两个(用于分流)* 源码所涉及库文件到:https://download.csdn.net/download/hnkkfan/72395780下载*/#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#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;//设置右转信号接A1void setup() {#if defined (__AVR_ATtiny85__)if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif// End of trinket special codepixels.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);}}
【线路连接】
接线如下图:
安装后用3d打印机简单做了一个盒子,上盖用白色的PLA材料(我本来想用透明的,但手头没有),做完后固定到自行车后座下面,然后把开关总成固定在车把上,一个有转向提示功能的尾灯就完成了。
【效果】
安装后的效果如下:
通电尾灯呼吸状态
左转时的流水灯
右转时的流水灯
做完了试下,夜行时,偶就是最靓的仔!
这篇关于用WS2812做一个自行车转向尾灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!