Gravity:数字RGB全彩LED模块

概述

Gravity:数字RGB全彩LED模块是一款可级联的RGB全彩单灯珠模块。与传统RGB全彩灯珠需要3根控制信号线,硬件占用资源多不同,该模块控制仅需一根信号线,符合Gravity-3P数字接口规范,配合DF各类扩展板,即插即用,可方便用于Arduinomicro:bitESP32LattePanda树莓派等各类主控平台。得益于其精心的设计,模块可方便地通过随产品附送的Gravity 3P数字传感器线多级串联成灯串,实现极低的单位长度耗电量,远超普通RGB全彩灯带的级联长度,为项目制作带来更多可能性。在使用扩展板5V 2A外部供电下,可级联一百多个模块,总长可达数十米。独立模块和标准接插件的设计,让灯串长度的增减更为简单灵活,无需裁剪与焊接,更适合项目的现场制作与搭建。 模块采用与全彩RGB灯带相同的高亮RGB全彩LED灯珠,在保持优秀显示效果的同时,完全兼容灯带所使用的驱动电路或程序,让用户可在灯带和模块级联灯串之间无缝转换,无需对已有项目程序作任何改动,跑马灯、闪烁、彩虹变换,甚至文字,字母,图片,动画等酷炫效果无缝转换实现。模块采用与全彩RGB灯带相同的高亮RGB全彩LED灯珠,在保持优秀显示效果的同时,完全兼容灯带所使用的驱动电路或程序,让用户可在灯带和模块级联灯串之间无缝转换,无需或仅需极少对已有项目程序进行改动,跑马灯、闪烁、彩虹变换,甚至文字,字母,图片,动画等酷炫效果无缝转换实现。

特性

  • 插拔式级联,免焊接,灯珠数量随意调整
  • 优秀显示效果,优质高亮WS2812全彩RGB灯
  • 超长级联长度,极低单位长度功耗
  • 兼容WS2812 RGB全彩灯带程序或驱动电路

应用场景

  • 节日装饰
  • 信号指示灯

技术规格

  • 灯珠类型:WS2812 RGB全彩LED灯珠5050
  • 供电电压:3.3V ~ 5.3V
  • 最大电流:48 mA
  • 静态电流:0.7 mA
  • 通信接口:Gravity数字3P
  • 产品尺寸:30.0mm×22.0mm

接口说明

Gravity:RGB全彩LED模块 引脚说明

序号 标号 功能描述
1 + 电源正极(3.3~5.5V)
2 - 电源负极
3 DI 信号输入
4 DO 信号输出

引脚说明

Arduino使用教程

准备

  • 硬件
    • Arduino UNO控制板 x 1
    • Gravity:RGB全彩LED模块 x 1
    • Gravity 3P数字传感器连接线(或若干杜邦线) x 1

连线图

DFR0605_connection_Arduino.png

样例代码

  • 将模块与Arduino按照连线图相连。
  • 安装Adafruit NeoPixel库。如何安装库?
  • 打开Arduino IDE,将下面的代码上传到Arduino UNO。
  • 观察模块LED点亮效果。
    #include <Adafruit_NeoPixel.h>

    #define PIN_LED 3     // Control signal, connect to DI of the LED
    #define NUM_LED 1     // Number of LEDs in a strip

    // Custom colour1: Yellow
    #define RED_VAL_1       255
    #define GREEN_VAL_1     255
    #define BLUE_VAL_1      0

    // Custom colour2: Purple
    #define RED_VAL_2       255
    #define GREEN_VAL_2     0
    #define BLUE_VAL_2      255

    // Custom colour3: Cyan
    #define RED_VAL_3       0
    #define GREEN_VAL_3     255
    #define BLUE_VAL_3      255

    // Custom colour4: White
    #define RED_VAL_4       255
    #define GREEN_VAL_4     255
    #define BLUE_VAL_4      255

    Adafruit_NeoPixel RGB_Strip = Adafruit_NeoPixel(NUM_LED, PIN_LED, NEO_GRB + NEO_KHZ800);

    void setup() {
      RGB_Strip.begin();
      RGB_Strip.show();
      RGB_Strip.setBrightness(128);    // Set brightness, 0-255 (darkest - brightest)
    }

    void loop() {

      colorWipe(RGB_Strip.Color(255, 0, 0), 1000);  // Red
      colorWipe(RGB_Strip.Color(0, 255, 0), 1000);  // Green
      colorWipe(RGB_Strip.Color(0, 0, 255), 1000);  // Blue

      colorWipe(RGB_Strip.Color(RED_VAL_1, GREEN_VAL_1, BLUE_VAL_1), 1000);   // Custom colour1: Yellow
      colorWipe(RGB_Strip.Color(RED_VAL_2, GREEN_VAL_2, BLUE_VAL_2), 1000);   // Custom colour2: Purple
      colorWipe(RGB_Strip.Color(RED_VAL_3, GREEN_VAL_3, BLUE_VAL_3), 1000);   // Custom colour3: Cyan
      colorWipe(RGB_Strip.Color(RED_VAL_4, GREEN_VAL_4, BLUE_VAL_4), 1000);   // Custom colour4: White

      rainbow(20);  // Rainbow
    }

    // Fill the dots one after the other with a color
    void colorWipe(uint32_t c, uint16_t wait) {
      for (uint16_t i = 0; i < RGB_Strip.numPixels(); i++) {
        RGB_Strip.setPixelColor(i, c);
        RGB_Strip.show();
        delay(wait);
      }
    }

    void rainbow(uint8_t wait) {
      uint16_t i, j;

      for (j = 0; j < 256; j++) {
        for (i = 0; i < RGB_Strip.numPixels(); i++) {
          RGB_Strip.setPixelColor(i, Wheel((i + j) & 255));
        }
        RGB_Strip.show();
        delay(wait);
      }
    }

    // Input a value 0 to 255 to get a color value.
    // The colours are a transition r - g - b - back to r.
    uint32_t Wheel(byte WheelPos) {
      if (WheelPos < 85) {
        return RGB_Strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
      } else if (WheelPos < 170) {
        WheelPos -= 85;
        return RGB_Strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
      } else {
        WheelPos -= 170;
        return RGB_Strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
      }
    }

结果

  • 模块先显示三原色“红”,“绿”,“蓝”,然后显示四种自定义混合颜色“黄”,“紫”,“青”,“白”,每种颜色显示1秒,随即显示“彩虹变换”,再重复刚开始的三原色与四种混合颜色,周而复始。
  • 根据需要,可通过修改代码中setBrightness()的参数来修改LED亮度。数值“0”为最暗(熄灭),数值“255”为最亮。

RGB_Strip.setBrightness(128);    // Set brightness, 0-255 (darkest - brightest)

Mind+ 上传模式编程

准备

上述主控板Arduino UNO控制板micro:bit编程入门开发板+micro:mate多功能I/O扩展板二选一。

连线图

使用micro:bit时,需要将扩展板上右侧开关拨到“5V”。如果拨到“3V”模块虽然能点亮,但是亮度会降低,显示颜色与设定值有一定偏差,可级联的数量也会大大减少。

使用步骤

  • 将模块与主控板按照上方连线图相连,主控板通过USB线与PC相连。
  • 下载安装并打开Mind+图形化编程软件,如下图,依次单击选择:
    • 1.选择“上传模式”。

    • 2.单击“扩展”。

  • 选择所使用的主控板,如下图,依次单击选择:
    • 1.选择标签“主控板”。

    • 2.若使用micro:bit,选择“A”;Arduino UNO控制板,选择“B”。

  • 选择模块驱动,如下图,依次单击选择:
    • 1.选择标签“显示器”。

    • 2.单击“WS2812 RGB灯”。

    • 3.单击左上角“返回”。

  • 若使用Arduino UNO,如下图,配置并上传代码:
    • 1.单击“连接设备”。

    • 2.在下拉菜单中选择后缀带有“Uno”的串口设备(串口号不唯一)。

    • 3.左侧菜单栏选择“显示器”。

    • 4.如图配置,让模块以最大亮度显示橘色。

    • 5.点击“上传到设备”,将代码上传到主控。

    • 6.等待程序上传完毕,模块显示明亮的橘色。

  • 若使用micro:bit,如下图,配置并上传代码:
    • 1.单击“连接设备”。

    • 2.在下拉菜单中选择后缀带有“Microbit”的串口设备(串口号不唯一)。

    • 3.左侧菜单栏选择“显示器”。

    • 4.如图配置,让模块以最大亮度显示橘色。

    • 5.点击“上传到设备”,将代码上传到主控。

    • 6.等待程序上传完毕,模块显示明亮的橘色。

Mind+ Python模式编程(行空板)

Mind+Python模式为完整Python编程,因此需要能运行完整Python的主控板,此处以行空板为例说明

连接图

注意:PinPong当前版本(V0.5.2)仅支持同时使用一条灯带

操作步骤

1、下载及安装官网最新软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装

2、切换到“Python模式”。“扩展”中选择“官方库”中的“行空板”和“pinpong库”中的”pinpong初始化“和“WS2812 RGB灯”。切换模式和加载库的详细操作链接

3、进行编程

4、连接行空板,程序点击运行后,可在终端查看数据。行空板官方文档-行空板快速上手教程 (unihiker.com)

代码编程

以pinpong库为例,行空板官方文档-行空板快速上手教程 (unihiker.com)

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import NeoPixel
from pinpong.board import Board
import time


Board().begin()
np1 = NeoPixel(Pin((Pin.P21)),1)
np1.brightness(255)

while True:
    np1[0] = (0,0,255)
    time.sleep(1)
    np1[0] = (0,0,0)
    time.sleep(1)

应用实例

利用画图软件调色板显示特定的颜色

Arduino使用教程一节的示例程序可以看到,我们可以通过调用

RGB_Strip.Color(RED_VAL, GREEN_VAL, BLUE_VAL);

来配置RGB三种颜色的值RED_VAL, GREEN_VAL, BLUE_VAL,从而让LED显示特定的颜色,但是如何直观地知道到所需要颜色R、G、B的值呢?这可以通过操作系统(以WIN10为例)自带的画图软件实现这点(如下图),具体步骤如下:

  • 1.选择“编辑颜色”。
  • 2.在调色板选择所需颜色。
  • 3.将显示的红绿蓝RGB值依次填入函数Color(RED_VAL, GREEN_VAL, BLUE_VAL)
  • 重新编译上传代码。

模块级联

  • 连线:模块预留2.54mm-3P焊盘用于模块的级联,用户可先将随包装附送的3P弯排针焊接在焊盘上,然后利用Gravity 3P数字传感器连接线,将一端的PH2.0-3P白色公头插入模块对应的PH2.0-3P白色母头,黑色2.54mm-3P排母接头连接在前一模块的3P弯排针上,逐个串联,形成灯串。如下图,注意弯排针线序“+”,“-”,“DO”,顺序对应排母的“+”,“-”,“DIN”。
  • 代码:样例代码适用于单个模块,若要用于由模块级联形成的灯串,需要将其中一段代码(如下所示)的数值“1”改为模块级联的数量,否则无论级联多少个模块,仅有第一个模块会点亮。比如:一个灯串由32个模块级联而成,将该数值改为“32”。

#define NUM_LED 1     // Number of LEDs in a strip

  • 功耗与长度估算:由模块级联形成的灯串每一节(“模块+Gravity 3P数字传感器连接线”)长度约为32cm,相对于普通RGB全彩灯带,大幅降低了单位长度灯珠的个数和功耗,在相同电源输出能力下,整个灯串可延伸数十米。每个模块在5V供电,最大亮度白光下功耗达到最大,约48mA。在该条件下,若使用Arduino USB供电,其最大输出能力为500mA(由Arduino内部自恢复保险丝决定),可驱动约10个模块组成的灯串,总长约3.2m。若使用7-12V对Arduino外部供电(使用电源适配器,2s 7.4V或3s 11.1V锂电池供电)增强输出能力,其最大输出能力为800mA(由Arduino内部LDO决定),可驱动约16个模块组成的灯串,总长约5m。若使用IO传感器扩展板V7.1,利用舵机外部供电接线柱SERVO_PWR,向其提供2A电流,理论最大可级联41个模块,总长约13m。这里仅仅从供电电流与模块最大功耗的角度给出理论级联个数的上限,实际最大可级联数量受模块实际功耗(颜色或亮度),线路电压损耗影响(电压每经过灯串一节,都会下降一点,通常灯串最后一个模块的供电电压不应低于3.3V),可级联个数与长度远高于这里估算值。在不影响作品效果的前提下,适当降低模块亮度,可有效增加可级联的个数。

常见问题

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png Link DFRobot商城购买链接