智能检测烟雾、可燃气体、震动,利用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; // 建立光带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// 初始化blinkerBlinker.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);*/
页:
[1]