Arduino程序设计(九)WS2812B彩灯实验


前言

  • 本文主要介绍WS2812B彩灯实验,主要内容有:
  • 1、介绍WS2812B及灯环,灯环由32个彩灯组成;
  • 2、灯环显示三基色;
  • 3、顺时针、逆时针的彩色流水灯;
  • 4、彩虹灯环,循环显示赤橙黄绿青蓝紫七色。

一、WS2812B及灯环

1、WS2812B简介

  • (1)基本组成:

  • WS2812B是一款智能控制LED光源,控制电路和RGB芯片集成在一个5050个组件的封装中。内部包括智能数字端口数据锁存器和信号整形放大驱动电路。还包括一个精密的内部振荡器和一个12V电压可编程恒流控制部分,有效地保证像素点光的颜色高度一致。

  • (2)通信方式:

  • 数据传输协议采用单一NZR通信方式(单总线)。像素上电复位后,DIN端口接收控制器的数据,第一个像素采集初始的24位数据,然后发送给内部数据锁存器,另一个由内部信号整形放大电路整形的数据通过DO端口发送给下一个级联像素。每个像素传输后,信号减少24位。像素采用自动整形传输技术,使得像素级联数不受信号传输的限制,只依赖于信号传输的速度。

  • (3)优点:

  • WS2812B具有驱动电压低、环保节能、亮度高、散射角大、一致性好、功耗低、寿命长等优点。集成在LED上的控制芯片电路更加简单,体积小,安装方便。

  • (4)机械尺寸:
    在这里插入图片描述

  • (5)管脚说明:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2、灯环介绍

  • (1)本文采用的RGB灯环是自制灯环,由32个WS2812彩灯组成,电路原理图如下:
    在这里插入图片描述
  • (2)灯环说明:
  • ① 32个WS2812按(1)串联后组成灯环,外接引脚三个:VCC_5V0、GND、DIN。
  • ② 灯环的DIN是第1颗灯珠的信号输入引脚DIN,灯环的DOUT是第32颗灯珠的信号输入引脚DOUT,DOUT悬空不接。

二、彩色流水灯实验

1、三基色流水灯

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)三基色流水灯的电路图,如下图所示:
    在这里插入图片描述

  • (3)实验准备:安装下载安装 “Adafruit_NeoPixel” 库文件。

  • (4)实现功能:三基色流水灯,第一圈红色,第二圈绿色,第三圈蓝色,第四圈红色,循环显示。

代码实现:

//WS2812,RGB灯环
//炫彩流水灯,第一圈红色,第二圈绿色,第三圈蓝色,第四圈红色,循环显示

#include <Adafruit_NeoPixel.h>

#define PIN 7    // 控制灯带的引脚
#define NUM_LEDS 32  // 灯带上灯的数量

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();           // 初始化灯带
  strip.show();            // 所有LED灯关闭
}

void loop() {
  for (int i = 0; i < NUM_LEDS; i++)
  {
    strip.setPixelColor(i, 20, 0, 0);  // 设置颜色为红色
    strip.show();              // 展示颜色
    delay(50);                 // 50毫秒的延迟
  }
  for (int i = 0; i < NUM_LEDS; i++)
  {
    strip.setPixelColor(i, 0, 20, 0);  // 设置颜色为绿色
    strip.show();              // 展示颜色
    delay(50);                 // 50毫秒的延迟
  }
  for (int i = 0; i < NUM_LEDS; i++)
  {
    strip.setPixelColor(i, 0, 0, 20);  // 设置颜色为蓝色
    strip.show();              // 展示颜色
    delay(50);                 // 50毫秒的延迟
  }
}
  • (5)实现现象(部分展示):
    在这里插入图片描述
    在这里插入图片描述

2、彩色流水灯(顺时针、逆时针)

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)彩色流水灯(顺时针、逆时针)的电路图,如下图所示:
    在这里插入图片描述

  • (3)实验准备:下载安装 “FastLED” 库文件。

  • (4)实现功能:炫彩流水灯,先是6圈顺时针彩色流水灯,再是6圈逆时针的彩色流水灯,最后重复操作,6圈顺时针、6圈逆时针彩色流水灯效果。

代码实现:

//WS2812,RGB灯环
//炫彩流水灯,顺时针、逆时针的彩色流水灯

#include <FastLED.h>

#define LED_PIN 7
#define NUM_LEDS 32

CRGB leds[NUM_LEDS];

void setup()
{
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
  FastLED.clear();
  FastLED.show();
}

void loop()
{
  //深色,红色→绿色,顺时针
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(255 - 7 * i, 7 * i, 0 );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //深色,绿色→蓝色,顺时针
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(0, 255 - 7 * i, 7 * i );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //深色,蓝色→红色,顺时针
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(7 * i, 0, 255 - 7 * i );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //浅色,红色→绿色,顺时针
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(255 - 7 * i, 7 * i, 255);
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //浅色,绿色→蓝色,顺时针
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(255, 255 - 7 * i, 7 * i);
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //浅色,蓝色→红色,顺时针
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(7 * i, 255, 255 - 7 * i);
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //深色,红色→蓝色,逆时针
  for (int i = NUM_LEDS; i > 0; i-- )
  {
    leds[i] = CRGB(255 - 7 * i, 0, 7 * i );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //深色,蓝色→绿色,逆时针
  for (int i = NUM_LEDS; i > 0; i-- )
  {
    leds[i] = CRGB(0, 7 * i, 255 - 7 * i );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //深色,绿色→红色,逆时针
  for (int i = NUM_LEDS; i > 0; i-- )
  {
    leds[i] = CRGB(7 * i , 255 - 7 * i, 0);
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //浅色,红色→蓝色,逆时针
  for (int i = NUM_LEDS; i > 0; i-- )
  {
    leds[i] = CRGB(255 - 7 * i, 255, 7 * i );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //浅色,蓝色→绿色,逆时针
  for (int i = NUM_LEDS; i > 0; i-- )
  {
    leds[i] = CRGB(255, 7 * i, 255 - 7 * i );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //浅色,绿色→红色,逆时针
  for (int i = NUM_LEDS; i > 0; i-- )
  {
    leds[i] = CRGB(7 * i , 255 - 7 * i, 255);
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }
}
  • (5)实现现象(部分展示):
    在这里插入图片描述
    在这里插入图片描述

3、彩虹灯环

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)彩虹灯环的电路图,如下图所示:
    在这里插入图片描述

  • (3)实验准备:下载安装 “FastLED” 库文件。

  • (4)实现功能:炫彩流水灯,灯环呈现彩虹色,依次显示赤橙黄绿青蓝紫。

//WS2812,RGB灯环
//炫彩流水灯,灯环呈现彩虹色:赤橙黄绿青蓝紫

#include <FastLED.h>

#define LED_PIN 7
#define NUM_LEDS 32

CRGB leds[NUM_LEDS];

void setup()
{
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
  FastLED.clear();
  FastLED.show();
}

void loop()
{
  //红色→橙色→黄色
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(255, 7 * i + 31, 0 );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //黄色→绿色
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(224 - 7 * i, 255, 0 );
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //绿色→青色→蓝色
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(0, 224 - 7 * i, 7 * i + 31);
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //蓝色→紫色
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(7 * i, 0, 255);
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }

  //紫色→红色
  for (int i = 0; i < NUM_LEDS; i++ )
  {
    leds[i] = CRGB(255, 0, 224 - 7 * i);
    FastLED.setBrightness(20);
    FastLED.show();
    delay (50);
  }
}
  • (5)实现现象(部分展示):
    在这里插入图片描述
    在这里插入图片描述

总结

  • 通过上述三个实验,实现了Arduino控制WS2812B灯环,从电路原理到编程实现,进一步了解RGB彩灯的控制原理。

参考资料1: WS2812B引脚图及功能,应用电路和原理说明
参考资料2: 用Arduino制作溢彩流光的LED梦幻灯带
参考资料3: 【雕爷学编程】Arduino动手做(124)—24位WS2812环形灯板
参考资料4: 秒上手!使用Arduino控制基于WS2812B的LED灯条

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值