Arduino 制造光污染 | 全彩灯带 WS2812

WS2812 是什么样的?

按照惯例,打开淘宝,输入 WS2812 关键词即可搜到一堆产品,如下图所示(图片来自淘宝)。其中每一个 LED 灯珠可以单独控制,一个 IC(WS2812) 驱动 1个 LED 芯片;可以根据不同的需求有不同灯珠间距可供选择,如 30灯/米、60灯/米、74灯/米、96灯/米、100灯/米、144灯/米等规格;还可以根据实际情况选择灯带的防水处理版本。

WS2812 灯带的特点和应用

特点

  • 高亮度贴片LED灯条。
  • 光的均匀性、柔和、色彩丰富。
  • 低功耗。
  • 各种单色和RGB颜色。

应用场景

  • 点亮多彩家居生活, DIY 家用灯的走廊、楼梯、步道。
  • 酒店装修使用,剧院、俱乐部、购物中心、节日和表演。
  • 建筑装饰照明,拱门,冠桥边缘照明,安全照明和应急。
  • 广泛应用于标牌字母背光,隐蔽照明和广告标志照明。
  • 适用于汽车和飞机模型装饰,轮廓照明。 

WS2812 灯带 配合 Arduino 使用

连接方式

一般来说,该灯带中的每个灯珠的连接处有三个 pin 接口,分别为 电源正极(+5v)、电源负极和数据口(D0),且单个灯珠都能单独控制。需要多少个灯珠就用剪刀剪下多少颗灯珠,且这些剪下来的灯珠都可以单独控制(如下图所示)。和 Arduino 相连也是非常的方便,以 Arduino UNO 为例,连接方式对应表格如下所示:

Arduino UNOWS 2812
5VVCC
GNDGND
任一数字口。(在 Adafruit_NeoPixel 库中,默认为数字口 D6)D0
Arduino UNO 与 WS 2812 的连接对应表

找一个合适的库

推荐 Arduino 控制 WS2812 的库文件为 Adafruit_NeoPixel ,可以通过 Github 找到该库文件,直接点击下载 zip 包,在 Arduino IDE 中安装库文件(项目 --> 加载库 --> 添加 .zip 库)即可。

安装完毕之后,打开 文件 --> 示例 --> 第三方库示例 找到 Adafruit_NeoPixel 的示例代码(如下图所示)。点击“上传”按钮后,即可查看效果,从示例代码中可以选取代码用于自己的项目之中。

一些常用的点亮方法

变化颜色

下方两种函数均可以指定灯珠的颜色,理论上有 255*255*255 种颜色,strip 为在代码一开始所定义(如上图),如:

strip.Color(255, 0, 0); //红
strip.Color(0, 255, 0); //绿
strip.Color(0, 0, 255); //蓝
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(35536, 255, 255 * j / fadeMax)));

strip.ColorHSV() 函数可以填 1 个参数或者 3 个参数。这里使用了 3 个参数的风格,前两个为色调、色相(0 to 65535),最后一个为明度 (0 to 255) ,第二个数值为饱和度常量 255 。

HSV 表达彩色图像的方式由三个部分组成:

  • Hue(色调、色相)
  • Saturation(饱和度、色彩纯净度)
  • Value(明度)

淡进淡出

使用一个 for 循环,使灯的亮度逐渐增大;再使用一个相反的for循环,可以使灯珠的亮度逐渐减小。为了使得每个灯珠均达到此类效果,此处在 for 循环中再嵌入一个 for 循环,从而可以使得淡入淡出效果应用于整条灯带。

  //淡进淡出
  int fadeVal = 0, fadeMax = 100;
  for (int j = 0; j < fadeMax; j++ ) {
    for (int i = 0; i < NUMPIXELS; i++) { // 给每个灯珠赋予颜色
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(35536, 255,
                                           255 * j / fadeMax)));
      strip.show();   // 发送至灯珠,显示颜色。
    }
  }
  for (int j = 100; j > fadeVal; j-- ) {
    for (int i = 0; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(35536, 255,
                                           255 * j / fadeMax)));
      strip.show();
    }
  }

顺序点亮

顺序点亮的过程比较简单,通过 for 循环即可实现;在此处通过 delay() 函数来控制顺序点亮的间隔时间,delay 数值越小则点亮的速度越快。

  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, strip.Color(255, 0, 0));
    strip.show();
    delay(DELAYVAL); //间隔时间
  }
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇