Advertisement

Arduino实战小项目:电子烟花

阅读量:

前言:

通过火焰传感器,获取信号后,控制ws2812的亮灯顺序与颜色,实现一个简单的电子烟花的效果。

效果如下:

目录

前言:

材料:

接线图:

说明:

完整代码如下:


材料:

1.火焰传感器:

2.arduino nano

3.ws2812

接线图:

说明:

1.WS2812主要使用FastLED库,该库的安装如下:

工具>管理库>库管理器:

选择安装即可

2.FastLED库常用代码:

颜色控制函数 说明
leds[i]=CRGB::Red 颜色设置,其中设置Black为关灯
leds[i]=CRGB(252,156,93); 根据GRB参数设置颜色
fill_solid(leds, 12, CRGB::Red) 将所有灯设置一个颜色
fill_solid(leds+n, 2, CRGB::Red) 从第n个灯开始起后2个灯设置为一个颜色
fill_gradient_RGB(leds,0,CRGB::Red,4,CRGB::Blue); 从0到4号灯设置渐变色

3.火焰传感器上有D0和A0两个接口,其中D0是发送数字信号,A0是发送模拟信号。本文只需要一个识别是否打火的信号,故只用D0即可。

完整代码如下:

复制代码
 #include <FastLED.h>  
    
 #define NUM_LEDS 12             // LED灯珠数量
    
 #define DATA_PIN 2              // Arduino输出控制信号引脚
    
 #define LED_TYPE WS2812         // LED灯带型号
    
 #define COLOR_ORDER GRB         // RGB灯珠中红色、绿色、蓝色LED的排列顺序
    
 uint8_t max_bright = 80;       // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越
    
 int fire_check_pin=2;
    
 CRGB leds[NUM_LEDS];           // 建立灯带leds
    
 void setup() {
    
    LEDS.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);  // 初始化灯带
    
    FastLED.setBrightness(max_bright);                            // 设置灯带亮度
    
 }
    
  
    
 void loop() {
    
   if (digitalRead(fire_check_pin)==HIGH){
    
     for (int i=0;i<NUM_LEDS;i++){
    
       leds[i] = CRGB::Red;          // 设置灯带中第一个灯珠颜色为红色,leds[0]为第一个灯珠,leds[1]为第二个灯珠
    
       FastLED.show();               // 更新LED色彩                      
    
       if (i!=0){
    
     leds[i-1] = CRGB::Black;
    
     FastLED.show();               // 更新LED色彩  
    
    }
    
    delay(500);
    
       }
    
       fill_gradient_RGB(leds,0,CRGB::Red,NUM_LEDS/4,CRGB::Blue);
    
       fill_gradient_RGB(leds,NUM_LEDS/4,CRGB::Red,NUM_LEDS,CRGB::Green);
    
       FastLED.show();
    
       delay(250);
    
       for (int i=0;i<NUM_LEDS;i++){
    
     leds[i] = CRGB::Black;  
    
       }
    
       FastLED.show();
    
       delay(250);
    
       fill_gradient_RGB(leds,0,CRGB::Red,NUM_LEDS/4,CRGB::Blue);
    
       fill_gradient_RGB(leds,NUM_LEDS/4,CRGB::Red,NUM_LEDS,CRGB::Green);
    
       FastLED.show();
    
       delay(250);
    
       for (int i=0;i<NUM_LEDS;i++){
    
     leds[i] = CRGB::Black;  
    
       }
    
       FastLED.show();
    
       delay(1000); 
    
   }
    
 }

全部评论 (0)

还没有任何评论哟~