| 
 
 3606| 0
 
 | 
[项目] 智能检测烟雾、可燃气体、震动,利用RGB灯带及嗡鸣器... | 
| 
智能检测烟雾、可燃气体、震动,利用RGB灯带及嗡鸣器实现报警的智能装置。 本程序利用点灯APP进行调控,可供所有人搬运及修改使用。 // 接口注释:A0(温度传感器),D0(蜂鸣器供电),D1(震动传感器),D2(可燃气体传感器MQ-9) // 接口注释:D3(烟雾传感器),D4(温度传感器),D5(LED灯带控制信号),VV(3V供电),G(接地) // 组件注释: ①警灯(点击时,灯带高频闪烁红蓝交替灯光)   ②检测模式(点击后,对可燃气体、烟雾、震动、温度进行检测,数值异常时翁鸣器工作并灯带高频闪烁红蓝交替灯光) ③色盘模式(点击后,可在手机APP调色盘中直接调节灯带颜色及亮度)  ④彩虹模式(点击后,可在手机APP调节灯带为渐变效果,可调节灯带初始颜色、颜色过渡快慢及亮度) ⑤动态模式(点击后,可在手机APP调节灯带为动态效果,可调节灯带动态模式、颜色过渡快慢及亮度,内置模式有0云朵,1熔岩,2海洋,3森林,4彩虹,5线条,6派对,7心跳) ⑥天气模式(点击后,可在根据天气调节动态效果,0晴天-红橙色变化,1阴天-绿白色变化,2下雨-蓝白色缓慢变化,3雷雨-蓝白色快速变化,4下雪-白色淡入淡出,5大风-蓝色淡入淡出) ⑦RGB色盘(调节灯带颜色) ⑧调试滑块(在数值正常的情况下触发不同的异常情况,测试程序是否正常,0一切正常,1可燃气体异常,2烟雾异常,3温度异常,4震动异常) #include <SoftwareSerial.h> #define BLINKER_WIFI #include <Blinker.h> #include "FastLED.h"    // 此示例程序需要使用FastLED库 #define NUM_LEDS 120    // LED灯珠数量 #define LED_TD D5       // Arduino输出控制信号引脚 #define LED_TYPE WS2812 // LED灯带型号 #define COLOR_ORDER GRB // RGB灯珠中红色、绿色、蓝色LED的排列顺序 uint8_t max_bright = 100; // LED亮度控制变量,可使用数值为 0 ~ 255, 数值越大则光带亮度越高 CRGB leds[NUM_LEDS]; // 建立光带leds // 连接WiFi与模块 char auth[] = "8998b81475da"; char ssid[] = "WiFi2.0"; char pswd[] = "18979713677zzm"; // 新建组件对象 BlinkerButton Button1("jingden"); BlinkerButton Button2("tiaoshi"); BlinkerButton Button3("sepan"); BlinkerButton Button4("caihong"); BlinkerButton Button5("dongtai"); BlinkerButton Button6("tianqi"); BlinkerRGB RGB1("RGB"); BlinkerSlider Slider1("HKQ"); BlinkerSlider Slider2("HKC"); BlinkerSlider Slider3("HKT"); // 赋值 int n = 0;   // 基本模式 int w = 0;   // 天气模式 int W = 0;   // 天气运算 int m = 0;   // 动态模式 int M = 0;   // 动态运算 int YC = 20; // 延迟时间 int zhendongD = 0; int keranD = 0; int yanwuD = 0; int wenduD = 0; uint8_t R = 0; // LED红色数值 uint8_t G = 0; // LED绿色数值 uint8_t B = 0; // LED蓝色数值 uint8_t L = 0; // LED亮度数值 uint8_t Q = 0; // LED起始颜色 uint8_t C = 0; // LED色差 uint8_t T = 0; // 调试模式 //后面可以用  color.R = 值 去修改这个结构体 typedef struct // 结构体定义 {   uint8_t R;   uint8_t G;   uint8_t B; } color_t; // 结构体初始化 color_t color = {     .R = 0,     .G = 0,     .B = 0, }; // 按下按键即会执行该函数 void button1_callback(const String &state) {   n = 1;   Blinker.print("警灯已开启"); } void button2_callback(const String &state) {   n = 2;   Blinker.print("检测调试"); } void button3_callback(const String &state) {   n = 3;   Blinker.print("彩色模式"); } void button4_callback(const String &state) {   n = 4;   Blinker.print("彩虹模式"); } void button5_callback(const String &state) {   n = 5;   M++;   m = M % 9;   Blinker.print("0云朵,1熔岩,2海洋,3森林,4彩虹,5线条,6派对,7心跳", "动态模式", m); } void button6_callback(const String &state) {   n = 6;   W++;   w = W % 6;   Blinker.print("0晴天,1阴天,2下雨,3雷雨,4下雪,5大风", w); } // APP RGB颜色设置回调 void rgb1_callback(uint8_t LR, uint8_t LG, uint8_t LB, uint8_t LL) {   R = LR;   G = LG;   B = LB;   L = LL;   Serial.printf("R=%d, G=%d, B=%d\r\n", R, G, B); } // APP 滑块设置回调 void slider1_callback(int32_t LQ) {   Q = LQ; } void slider2_callback(int32_t LC) {   C = LC; } void slider3_callback(int32_t LT) {   T = LT; } //自定义程序(警灯程序,请勿使用延迟delay();) void jingden ()  {    if (R == 255)   {   lan();   CRGB myRGBcolor(R, G, B);   fill_solid(leds, 120, myRGBcolor); // 设置光带颜色   FastLED.setBrightness(L);          // 设置光带亮度   FastLED.show();   }   else   {   hong();   CRGB myRGBcolor(R, G, B);   fill_solid(leds, 120, myRGBcolor); // 设置光带颜色   FastLED.setBrightness(L);          // 设置光带亮度   FastLED.show();   } } void hong ()  {    R = 255;   G = 0;   B = 0; } void lan ()  {    R = 0;   G = 0;   B = 255; }   ///////////////////////////////以下为单次程序////////////////////////////////// void setup() {   pinMode(D0, OUTPUT); // 蜂鸣器供电   pinMode(D1, INPUT);  // 震动传感器(数字信号)   pinMode(D2, INPUT);  // 可燃气体传感器(MQ-9)   pinMode(D3, INPUT);  // 烟雾传感器(MQ-2)   pinMode(D4, INPUT);  // 温度传感器(数字信号) #if defined(BLINKER_PRINT)   BLINKER_DEBUG.stream(BLINKER_PRINT); #endif   // 初始化blinker   Blinker.begin(auth, ssid, pswd);   Button1.attach(button1_callback);   Button2.attach(button2_callback);   Button3.attach(button3_callback);   Button4.attach(button4_callback);   Button5.attach(button5_callback);   Button6.attach(button6_callback);   // 注册调节颜色的回调函数   RGB1.attach(rgb1_callback);   // 注册滑块的回调函数   Slider1.attach(slider1_callback);   Slider2.attach(slider2_callback);   Slider3.attach(slider3_callback);   LEDS.addLeds<LED_TYPE, LED_TD, COLOR_ORDER>(leds, NUM_LEDS);   // 初始化光带   FastLED.setBrightness(max_bright);                             // 设置光带亮度   Serial.begin(9600); // 启动串行通讯   delay(2000);        // 稳定性等待 }   ///////////////////////////////以下为循环程序////////////////////////////////// void loop() {   Blinker.run();   // 赋值   zhendongD = digitalRead(D1);   keranD = digitalRead(D2);   yanwuD = digitalRead(D3);   wenduD = digitalRead(D4);   ///////////////////////////////以下为报警模式//////////////////////////////////   //////////////////////////////////////////////////////////////////////////////   if (n == 2)   {     if (keranD == 0 || T == 1 ) // 检测到可燃气体过高蜂鸣及报警条件     {       digitalWrite(D0, HIGH);       jingden ();       Blinker.vibrate(1000);       Blinker.notify("!!注意!!检测到有可燃气体泄露!!立即检查!!开窗通风!!");     }     else if (yanwuD == 0 || T == 2 ) // 检测到烟雾气体过高蜂鸣及报警条件        {       digitalWrite(D0, HIGH);       jingden ();       Blinker.vibrate(1000);       Blinker.notify("!!注意!!烟雾浓度过高!!立即检查!!开窗通风!!");     }     else if (wenduD == 0 || T == 3 ) // 检测到温度过高蜂鸣及报警条件     {       digitalWrite(D0, HIGH);       jingden ();       Blinker.vibrate(1000);       Blinker.notify("!!注意!!温度异常!!立即检查!!");     }     else if (zhendongD == 0 || T == 4 ) // 检测到震动异常蜂鸣及报警条件     {       digitalWrite(D0, HIGH);       jingden ();       Blinker.vibrate(1000);       Blinker.notify("!!注意!!存在异常震动!!立即检查!!");     }     else if (zhendongD == 1 && keranD == 1 && wenduD == 1 && yanwuD == 1)      {       digitalWrite(D0, LOW);     }     else     {       digitalWrite(D0, LOW);     }   }   ///////////////////////////////以下为灯带模式//////////////////////////////////   //////////////////////////////////////////////////////////////////////////////   if (n == 1)   {   jingden ();   }   if (n == 3)   {     digitalWrite(D0, LOW);     CRGB myRGBcolor(R, G, B);     fill_solid(leds, 120, myRGBcolor); // 设置光带颜色     FastLED.setBrightness(L);          // 设置光带亮度     FastLED.show();   }   if (n == 4)   {     digitalWrite(D0, LOW);     fill_rainbow(leds, 120, Q, C);     FastLED.setBrightness(L); // 设置光带亮度     FastLED.show();   }   if (n == 5)   {     digitalWrite(D0, LOW);     Q++;     delay(YC);     switch (m)     {     case 1:       fill_palette(leds, 120, Q, C, CloudColors_p, L, LINEARBLEND);       break;     case 2:       fill_palette(leds, 120, Q, C, LavaColors_p, L, LINEARBLEND);       break;     case 3:       fill_palette(leds, 120, Q, C, OceanColors_p, L, LINEARBLEND);       break;     case 4:       fill_palette(leds, 120, Q, C, ForestColors_p, L, LINEARBLEND);       break;     case 5:       fill_palette(leds, 120, Q, C, RainbowColors_p, L, LINEARBLEND);       break;     case 6:       fill_palette(leds, 120, Q, C, RainbowStripeColors_p, L, LINEARBLEND);       break;     case 7:       fill_palette(leds, 120, Q, C, PartyColors_p, L, LINEARBLEND);       break;     case 8:       fill_palette(leds, 120, Q, C, HeatColors_p, L, LINEARBLEND);       break;     }     FastLED.setBrightness(L);     FastLED.show();   }   ///////////////////////////////以下为天气模式//////////////////////////////////   //////////////////////////////////////////////////////////////////////////////   if (n == 6)   {     digitalWrite(D0, LOW);     if (w == 0)     {       n = 5;       m = 8;       Q = 28;       C = 2;     }     if (w == 1)     {       n = 5;       m = 4;     }     if (w == 2)     {       n = 5;       m = 1;       YC = 25;       C = 25;     }     if (w == 3)     {       n = 5;       m = 1;       YC = 5;       C = 1;     }     if (w == 4)     {       R = 255;       G = 255;       B = 255;       CRGB myRGBcolor(R, G, B);       for (int L = 0; L <= 255; L++)       {         delay(5);         fill_solid(leds, 120, myRGBcolor);         FastLED.setBrightness(L);         FastLED.show();       }       for (int L = 255; L >= 0; L--)       {         delay(5);         fill_solid(leds, 120, myRGBcolor);         FastLED.setBrightness(L);         FastLED.show();       }     }     if (w == 5)     {       R = 59;       G = 255;       B = 255;       CRGB myRGBcolor(R, G, B);       for (int L = 0; L <= 255; L++)       {         delay(5);         fill_solid(leds, 120, myRGBcolor);         FastLED.setBrightness(L);         FastLED.show();       }       for (int L = 255; L >= 0; L--)       {         delay(5);         fill_solid(leds, 120, myRGBcolor);         FastLED.setBrightness(L);         FastLED.show();       }     }   } } /* // 输出数据到串口监视器在loop运行卡顿时,请将loop中此代码删除 Serial.print("温度A: "); Serial.println(wenduA); Serial.print("温度S: "); Serial.println(wenduS); Serial.print("震动D: "); Serial.println(zhendongD); Serial.print("温度D: "); Serial.println(wenduD); Serial.print("可燃D: "); Serial.println(keranD); Serial.print("烟雾D: "); Serial.println(yanwuD);*/  | 
 沪公网安备31011502402448© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed