34| 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);*/ |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed