欢迎光临
我们一直在努力

基于Arduino的烟雾报警系统(烟雾传感器、蜂鸣器、温湿度模块、OLED12864显示屏)

1、概述

我们将各种示例组合成一套相对于使用的系统装置。您可以将其放置在天然气或者煤气旁。

对于模块不了解的,可以先看一下我们的模块教程[传送门],了解掌握模块使用方法后,再尝试本小实验。因为综合实验一般涉及多个模块,我们仅对全部使用我司产品的客户做技术支持,若只是部分使用我司产品的,我们只对我司产品部分是否有故障进行排查。

2、模块所需材料(点击即可跳转购买)

1、UNO主控板:官方板 或者 国产板
2、辅助配件:面包板杜邦线
3、传感器和模块:温湿度模块烟雾传感器无源蜂鸣器显示屏LED

3、接线方式

4、示例程序



/* Arduino+OLED12864显示屏+DHT11温湿度传感器+MQ-2烟雾传感器+蜂鸣器 功能:安全、警告、危险情况的烟雾报警装置,室内温湿度显示。 */ double Fahrenheit(double celsius) { return 1.8 * celsius + 32; } //摄氏温度度转化为华氏温度 double Kelvin(double celsius) { return celsius + 273.15; } //摄氏温度转化为开氏温度 // 露点(点在此温度时,空气饱和并产生露珠) // 参考: http://wahiduddin.net/calc/density_algorithms.htm double dewPoint(double celsius, double humidity) { double A0= 373.15/(273.15 + celsius); double SUM = -7.90298 * (A0-1); SUM += 5.02808 * log10(A0); SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ; SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ; SUM += log10(1013.246); double VP = pow(10, SUM-3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558-T); } // 快速计算露点,速度是5倍dewPoint() // 参考: http://en.wikipedia.org/wiki/Dew_point double dewPointFast(double celsius, double humidity) { double a = 17.271; double b = 237.7; double temp = (a * celsius) / (b + celsius) + log(humidity/100); double Td = (b * temp) / (a - temp); return Td; } //========================================================== #include <dht11.h>//程序中调用了dht11的库 #include <SPI.h>//SPI头文件 #include <Wire.h>//I2C头文件 #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>//OLED头文件 #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define LOGO16_GLCD_HEIGHT 16 //定义显示高度 #define LOGO16_GLCD_WIDTH 16 //定义显示宽度 static const unsigned char PROGMEM str_1[] = { 0x00,0x08,0x43,0xFC,0x32,0x08,0x12,0x08, 0x83,0xF8,0x62,0x08,0x22,0x08,0x0B,0xF8, 0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4, 0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x20,0x00, };//温 static const unsigned char PROGMEM str_2[] = { 0x01,0x00,0x00,0x84,0x3F,0xFE,0x22,0x20, 0x22,0x28,0x3F,0xFC,0x22,0x20,0x23,0xE0, 0x20,0x00,0x2F,0xF0,0x22,0x20,0x21,0x40, 0x20,0x80,0x43,0x60,0x8C,0x1E,0x30,0x04, }; // 度 static const unsigned char PROGMEM str_3[] = { 0x00,0x08,0x47,0xFC,0x34,0x08,0x14,0x08, 0x87,0xF8,0x64,0x08,0x24,0x08,0x0F,0xF8, 0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28, 0x23,0x30,0x21,0x24,0x3F,0xFE,0x20,0x00, }; //湿 static const unsigned char PROGMEM str_4[] = { 0x02,0x00,0x01,0x00,0x3F,0xFC,0x20,0x04,0x42,0x08,0x02,0x00,0x02,0x00,0xFF,0xFE, 0x04,0x20,0x08,0x20,0x18,0x40,0x06,0x40,0x01,0x80,0x02,0x60,0x0C,0x10,0x70,0x08, }; //安 static const unsigned char PROGMEM str_5[] = { 0x01,0x00,0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x10,0x10,0x2F,0xE8,0xC1,0x06, 0x01,0x00,0x01,0x00,0x1F,0xF0,0x01,0x00,0x01,0x00,0x01,0x00,0x7F,0xFC,0x00,0x00, }; //全 static const unsigned char PROGMEM str_6[] = { 0x24,0x20,0xFF,0x20,0x24,0x7E,0x7E,0xC4,0x82,0x28,0x7A,0x10,0x4A,0x28,0x7A,0xC6, 0x05,0x00,0xFF,0xFE,0x00,0x00,0x3F,0xF8,0x00,0x00,0x3F,0xF8,0x20,0x08,0x3F,0xF8, }; //警 static const unsigned char PROGMEM str_7[] = { 0x01,0x00,0x11,0x00,0x11,0x00,0x1F,0xF8,0x21,0x00,0x41,0x00,0x01,0x00,0xFF,0xFE, 0x00,0x00,0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10, }; //告 static const unsigned char PROGMEM str_8[] = { 0x04,0x00,0x04,0x00,0x0F,0xF0,0x10,0x10,0x20,0x20,0x5F,0xFC,0x10,0x00,0x13,0xF0, 0x12,0x10,0x12,0x10,0x12,0x50,0x12,0x20,0x22,0x04,0x22,0x04,0x41,0xFC,0x80,0x00, }; //危 static const unsigned char PROGMEM str_9[] = { 0x00,0x40,0x78,0x40,0x48,0xA0,0x50,0xA0,0x51,0x10,0x62,0x08,0x55,0xF6,0x48,0x00, 0x48,0x88,0x48,0x48,0x6A,0x48,0x51,0x50,0x41,0x10,0x40,0x20,0x47,0xFE,0x40,0x00, }; //险 #if (SSD1306_LCDHEIGHT != 64) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); #endif dht11 DHT11;//定义一个名字叫做DHT11,类型为dht11的值。 #define DHT11PIN 2//定义DHT11的引脚号为D2。 int led=9;//红灯接PWM引脚9 int alarm=4;//蜂鸣器 void setup(){ Wire.begin();//I2C初始化 // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) // init done display.clearDisplay();//清屏 pinMode(led,OUTPUT);//led引脚输出 pinMode(alarm,OUTPUT);//蜂鸣器引脚输出 } void loop(){ int chk = DHT11.read(DHT11PIN);//读取DHT11的值 display.clearDisplay();//清屏 //英文字符显示 display.setTextSize(1); //设置字体大小 display.setTextColor(WHITE); //设置字体颜色白色 display.setCursor(0,0); //设置字体的起始位置 display.drawBitmap(0, 5, str_1, 16, 16, 1); //在坐标X:0 Y:5的位置显示中文字符温 display.drawBitmap(18, 5, str_2, 16, 16, 1);//在坐标X:18 Y:5的位置显示中文字符度 display.setCursor(36,11); //设置字体的起始位置 display.setTextSize(1); //设置字体大小 display.print(":"); //输出冒号 display.println((float)DHT11.temperature, 2);//输出温度值 display.drawBitmap(0, 25, str_3, 16, 16, 1); //在坐标X:0 Y:25的位置显示中文字符湿 display.drawBitmap(18, 25, str_2, 16, 16, 1);//在坐标X:18 Y:25的位置显示中文字符度 display.setCursor(36,30); //设置字体的起始位置 display.setTextSize(1); //设置字体大小 display.print(":"); //输出冒号 display.println((float)DHT11.humidity, 2);//输出湿度值 int x=analogRead(A0);//读取MQ-2的值 float vol=5.00*(x/1023.00);//输出值转换成电压,该程序未显示。 display.setCursor(0,45);//在坐标X:0 Y:45的位置显示英文MQ-2: display.print("MQ-2: ");//输出MQ-2: display.println(x);//输出变量x,即MQ-2的值 display.display();//显示上述内容 if(x<310){//判断x大小 analogWrite(led,0);//LED灯默认不亮 display.drawBitmap(74, 45, str_4, 16, 16, 1); //在坐标X:74 Y:45的位置显示中文字符安 display.drawBitmap(90, 45, str_5, 16, 16, 1); //在坐标X:90 Y:45的位置显示中文字符全 display.display();//显示上述内容 } else if(x>310&&x<600){//判断x值大小 analogWrite(led,analogRead(A0)/4);//LED灯按照A0端口的值显示 display.drawBitmap(74, 45, str_6, 16, 16, 1);//在坐标X:74 Y:45的位置显示中文字符警 display.drawBitmap(90, 45, str_7, 16, 16, 1); //在坐标X:90 Y:45的位置显示中文字符告 display.display(); tone(alarm,500); delay(500); noTone(alarm);//蜂鸣器发声 } if(x>600){//判断x值大小 analogWrite(led,255);//LED灯最亮显示 display.drawBitmap(74, 45, str_8, 16, 16, 1); //在坐标X:74 Y:45的位置显示中文字符危 display.drawBitmap(90, 45, str_9, 16, 16, 1); //在坐标X:90 Y:45的位置显示中文字符险 display.display(); tone(alarm,1200); delay(200); noTone(alarm);//蜂鸣器发声 analogWrite(led,0); } }

上传程序,OLED显示屏显示温湿度以及MQ-2的值。当值超过范围,显示相应的警示,蜂鸣器对应的报警。

5、相关下载

库文件

未经允许不得转载:Arduino-Maker » 基于Arduino的烟雾报警系统(烟雾传感器、蜂鸣器、温湿度模块、OLED12864显示屏)

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 13

评论前必须登录!

 

  1. #7

    请问如何获取传感器的单一气体呢?(ppm)打个比方说我要获取 CO 的ppm

    lukason2年前 (2018-05-23)
    • 烟雾传感器是感测可燃性气体和烟雾浓度。属于广谱型传感器。

      ZBST技术&售后2年前 (2018-05-28)
  2. #6

    那请问其他的呢, 类似MQ7,6,9

    lukason2年前 (2018-05-28)
    • 目前我们所售的就该一款烟雾传感器。其他的不清楚。

      ZBST技术&售后1年前 (2018-06-04)
  3. #5

    楼主,请问一下问什么在arduino上边编译时候他讲编译出错呢?显示为开发板 Arduino/Genuino Mega or Mega 2560 编译时出错。

    dc7_1年前 (2018-05-30)
    • 按照报错内容解决问题。程序是得添加库文件的。

      ZBST技术&售后1年前 (2018-06-04)
    • 请问你解决了吗?填上库文件程序可以了吗

      sgx5213个月前 (09-02)
  4. #4

    那个黄色的元器件是什么?

    kalo6个月前 (05-23)
  5. #3

    加上库文件上面那个程序可以吗

    sgx5213个月前 (09-02)
    • 程序肯定没问题呀

      颠覆的灵魂3个月前 (09-03)
  6. #2

    为啥做这个东西 ,连线和代码都是上面的,但显示屏上全是白点,不现实温湿度呢

    sgx5212个月前 (09-11)
  7. #1

    你好,我的0.96寸OLED显示不完全该怎么更改呢

    21zrr1个月前 (10-11)

线上商城

中贝斯特创客空间蘑菇云创客教育