欢迎光临
我们一直在努力

Arduino温湿度显示烟雾报警系统

20180508135244_55

==概述==

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

本次是以小实验的方式写的,对于模块不了解的,可以先看一下我们的模块教程,了解掌握模块使用方法后,再尝试本小实验。

(对于非本店模块不提供技术支持!如果无法做通,可能是不兼容导致,请自行尝试)。

模块教程:

MQ-2烟雾传感器:http://arduino365.com/2016/08/31/%E7%83%9F%E9%9B%BE%E4%BC%A0%E6%84%9F%E5%99%A8mq-2/

DHT11温湿度传感器:http://arduino365.com/2016/08/31/%E6%B8%A9%E6%B9%BF%E5%BA%A6%E4%BC%A0%E6%84%9F%E5%99%A8dht11/

OLED显示屏:http://arduino365.com/2016/10/24/oled12864%E6%98%BE%E7%A4%BA%E5%B1%8F/

蜂鸣器:http://arduino365.com/?s=%E8%9C%82%E9%B8%A3%E5%99%A8

大面包板:http://arduino365.com/2016/09/01/%E9%9D%A2%E5%8C%85%E6%9D%BF/

发光二极管:http://arduino365.com/2016/08/31/%E5%8F%91%E5%85%89%E4%BA%8C%E6%9E%81%E7%AE%A1/

所需材料:

UNO R3主控版一块:点我购买

DHT11温湿度传感器一个:点我购买

MQ-2烟雾传感器一个:点我购买

蜂鸣器一个:点我购买

OLED显示屏一个:点我购买

LED发光二极管一个:点我购买

220欧电阻一个(为了方式LED损坏):点我购买

面包线若干:点我购买

大面包板一个:点我购买

==接线方式==

按照下面接线图接线。

==接线图==

yanwu-mq2_33

==例子程序==

/*
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的值。当值超过范围,显示相应的警示,蜂鸣器对应的报警。

==相关下载==

库文件:https://pan.baidu.com/s/1NDn-oMz7x_Pa7suKTtaeew

未经允许不得转载:Arduino-Maker » Arduino温湿度显示烟雾报警系统

支付宝扫码打赏 微信打赏

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

分享到:更多 ()

评论 7

评论前必须登录!

 

  1. #4

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

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

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

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

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

      ZBST技术&售后12个月前 (06-04)
  3. #2

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

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

      ZBST技术&售后12个月前 (06-04)
  4. #1

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

    kalo11小时前

线上商城

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