0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

构建一个基于Arduino的空气质量监测系统

科技观察员 来源:electroschematics 作者:electroschematics 2024-02-11 12:03 次阅读

呼吸清洁、健康的空气对我们的健康至关重要,但在许多环境中,空气质量仍然是一个问题。在本文中,我们将深入探讨如何创建一个基于Arduino的空气质量监测系统。我们将从讨论各种组件开始,然后继续讨论其MQ135传感器与Arduino板的接口,然后是编码。所以,让我们直接进入它。

什么是AQI传感器或空气质量指数传感器?

空气质量指数 (AQI)是一种标准化的测量方法,用于传达特定时间特定区域的空气污染程度或清洁程度。它提供了一种易于理解的方式向公众传达有关空气质量的信息

AQI通常考虑全球环境机构监管的几种主要空气污染物,如地面臭氧、颗粒物(PM2.5和PM10)、一氧化碳(CO)、二氧化硫(SO2)和二氧化氮(NO2)。每种污染物都有自己的规模和阈值水平,这些水平决定了AQI值。

AQI 量表范围从 0 到 500,特定类别表示与空气质量相关的健康问题水平:

0 至 150:正常至中度污染-该范围包括大多数人认为可以接受的空气质量条件,偶尔会关注高端的敏感人群。

151 至 200:较差-每个人都可能开始受到健康影响,敏感人群更有可能受到严重影响。

201 到 300:非常糟糕 -紧急情况的健康警告。整个人口都可能受到影响,并可能产生严重的健康影响。

301 至 500:有毒 - 健康警报:由于空气质量极差,每个人都可能会受到更严重的健康影响。

对于这个项目,我们不会测量PM2.5和PM10,但如果你想了解更多信息,你可以检查AQI监测系统,并在以后将其作为这个项目的升级。

空气质量监测系统如何工作?

空气质量监测系统利用传感器来检测气体水平、温度和湿度等环境参数。具体来说,来自气体传感器的模拟读数连接到Arduino的模拟引脚,提供有关空气质量的数据。这些读数映射到预定义的阈值,将空气质量分类为“好”、“差”、“非常差”或“有毒”。同时,DHT11传感器可测量湿度和温度。收集的数据使用 Adafruit 库实时显示在 OLED
屏幕上。通过持续监测这些参数,该系统提供了空气质量状况的快照,使用户能够评估和应对环境的变化。

此项目所需的组件包括:

Arduino开发板

MQ135气体传感器,用于检测各种气体。

DHT11温湿度传感器

用于视觉输出的OLED显示屏

面包板和跳线

Arduino空气质量监测系统电路图

完整的空气质量监测系统项目连接如下,OLED、DHT11 和 MQ135 气体传感器连接到面包板上的 Arduino Uno。

空气质量监测系统连接电路

arduino在SDA和SCL引脚的帮助下,使用I2C协议连接到OLED。MQ135 气体传感器输出模拟信号,这些信号发送到 Arduino
的模拟输入引脚 A0。DHT11 传感器有一个数字数据输出引脚,连接到 Arduino 的 D2 引脚。

以下是项目在面包板上连接后的外观。

Arduino空气质量监测系统

基于Arduino的空气质量监测系统代码解释

该代码监测空气质量并在OLED显示屏上显示传感器读数(温度、湿度和气体水平)。让我们分解一下:

#include < SPI.h >
#include < Wire.h >
#include < Adafruit_GFX.h >
#include < Adafruit_SSD1306.h >
#include < dht.h >

这些产品线包括通信协议(SPI、有线)、图形处理(Adafruit_GFX)、OLED显示控制(Adafruit_SSD1306)和DHT传感器的必要库。

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4

为OLED显示器的宽度、高度和复位引脚定义常量。

Adafruit_SSD1306显示器(SCREEN_WIDTH、SCREEN_HEIGHT和电线、OLED_RESET);

创建一个名为 Adafruit_SSD1306 类型的 display
对象,以使用指定的宽度、高度、通信(Wire)和复位引脚来控制 OLED 显示器。

#define sensor A0
#define DHT11PIN 2

为连接到气体传感器(传感器)的模拟引脚和连接到 DHT11 传感器
(DHT11PIN) 的引脚定义常数。

int gasLevel = 0;
String quality = "";
dht DHT;

声明变量以存储气体水平和质量描述,并创建 DHT 传感器的实例 DHT。

void sendSensor() {
 // Function to read temperature and humidity from the DHT sensor
int readData = DHT.read11(DHT11PIN);
      float h = DHT.humidity;
      float t = DHT.temperature;

      if (isnan(h) || isnan(t)) {
      Serial.println("Failed  to read from DHT sensor!");
        Return;
  }
      display.setTextColor(WHITE);
      display.setTextSize(1);
      display.setFont();
      display.setCursor(0, 43);
      display.println("Temp  :");
     display.setCursor(80, 43);
      display.println(t);
      display.setCursor(114, 43);
      display.println("C");
      display.setCursor(0,  56);
      display.println("RH    :");
      display.setCursor(80, 56);
      display.println(h);
      display.setCursor(114, 56);
      display.println("%");
}

此功能用于读取DHT传感器的温度和湿度数据,并将其显示在OLED屏幕上。

void air_sensor() {
gasLevel = analogRead(sensor);

      if(gasLevel< 151){
        quality = "  GOOD!";
      }
      else if (gasLevel >151 && gasLevel< 200){
        quality =  "  Poor!";
  }
      else if (gasLevel >200 && gasLevel< 300){
        quality  = "Very bad!";
  }
        else if (gasLevel >300 && gasLevel< 500){
        quality  = "Toxic!";
  }
        else{
        quality = " Toxic";   
}
  display.setTextColor(WHITE);
  display.setTextSize(1);  
  display.setCursor(1,5);
  display.setFont();
  display.println("Air Quality:");
  display.setTextSize(1);
  display.setCursor(5,23);
  display.println(gasLevel);
  
  display.setCursor(20,23);
  display.println(quality);  
}
This function is defined to read gas levels from the analog pin connected to the gas sensor and determine the air quality based on predefined thresholds. It also displays the gas level and quality on the OLED screen.

void setup() {
 Serial.begin(9600);
  pinMode(sensor,INPUT);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { // Address  0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
}
  display.clearDisplay();
  display.setTextColor(WHITE);
  
  display.setTextSize(2);
  display.setCursor(50, 0);
  display.println("Air");
  display.setTextSize(1);
  display.setCursor(23, 20);
  display.println("Quality monitor");
  display.display();
  delay(1200);
  display.clearDisplay();
  
  display.setTextSize(1.5);
  display.setCursor(20, 20);
  display.println("BY Circuit");
  display.setCursor(20, 40);
  display.println("Digest");
  display.display();
  delay(1000);
  display.clearDisplay(); 

}

设置功能初始化串行通信,将传感器引脚设置为输入,并初始化OLED显示屏。它在屏幕上显示介绍性消息。

void loop() {
display.clearDisplay();
air_sensor();
sendSensor();
display.display();  

}

循环功能清除显示屏,使用定义的功能读取气体传感器和 DHT
传感器数据,并使用最新读数不断更新显示屏。

该代码实质上是初始化传感器,读取其数据,根据气体水平确定空气质量,并在OLED屏幕上循环显示所有信息。

#include
#include
#include
#include
#include
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define sensor A0
#define DHT11PIN 2

int gasLevel = 0; //int variable for gas level
String quality ="";
dht DHT;

void sendSensor()
{
int readData = DHT.read11(DHT11PIN);
float h = DHT.humidity;
float t = DHT.temperature;

if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
display.setTextColor(WHITE);
display.setTextSize(1);
display.setFont();
display.setCursor(0, 43);
display.println("Temp :");
display.setCursor(80, 43);
display.println(t);
display.setCursor(114, 43);
display.println("C");
display.setCursor(0, 56);
display.println("RH :");
display.setCursor(80, 56);
display.println(h);
display.setCursor(114, 56);
display.println("%");
}

void air_sensor()
{
gasLevel = analogRead(sensor);

if(gasLevel<151){
quality = " GOOD!";
}
else if (gasLevel >151 && gasLevel<200){
quality = " Poor!";
}
else if (gasLevel >200 && gasLevel<300){
quality = "Very bad!";
}
else if (gasLevel >300 && gasLevel<500){
quality = "Toxic!";
}
else{
quality = " Toxic";
}

display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(1,5);
display.setFont();
display.println("Air Quality:");
display.setTextSize(1);
display.setCursor(5,23);
display.println(gasLevel);

display.setCursor(20,23);
display.println(quality);
}

void setup() {
Serial.begin(9600);
pinMode(sensor,INPUT);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
}
display.clearDisplay();
display.setTextColor(WHITE);

display.setTextSize(2);
display.setCursor(50, 0);
display.println("Air");
display.setTextSize(1);
display.setCursor(23, 20);
display.println("Quality monitor");
display.display();
delay(1200);
display.clearDisplay();

display.setTextSize(1.5);
display.setCursor(20, 20);
display.println("BY Circuit");
display.setCursor(20, 40);
display.println("Digest");
display.display();
delay(1000);
display.clearDisplay();
}

void loop() {
display.clearDisplay();
air_sensor();
sendSensor();
display.display();
}

审核编辑:陈陈

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 监测系统
    +关注

    关注

    8

    文章

    2462

    浏览量

    80769
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184834
收藏 人收藏

    评论

    相关推荐

    汽车空气质量检测与改善方案简介

    的影响因素主要来自两方面:是内饰材料所采用的化工原料引起的空气污染;二是由车外或发动机舱流入驾驶室的有毒气体,比如前车尾气。本文要讨论的是第二种情况,即空气质量传感器如何通过关闭空
    发表于 07-19 14:09

    STM32空气质量检测应用教程

    ;HAL库配合强大的PC端图形化配置工具STM32CubeMX,能够帮助用户大大简化MCU开发,降低门槛。本文以简单的手机APP远程空气质量监测应用为例,将教会大家如何使用STM3
    发表于 12-29 14:36

    【OneNET麒麟座试用申请】空气质量数据监测

    项目名称:空气质量数据监测站试用计划:空气质量数据监测站用于测试空气质量监测及数据采集,实现野外
    发表于 04-05 15:03

    【Thunderboard Sense试用申请】移动空气质量监测

    项目名称:移动空气质量监测站试用计划:项目描述:基于EFR32系列平台,开发可移动式空气质量监测站,板上温湿度传感器监测
    发表于 05-19 17:10

    什么是空气质量网格化监测

    近几年,环境污染问题直都困扰着人们的生活,尤其是大气污染问题不仅严重威胁着人类的生命健康,而且也造成了生态破坏。随着城市大气污染的日益恶化,城市管理部门为了实时采集各区域范围内的空气质量数据,都会选择部署空气环境
    发表于 11-24 06:07

    Arduino检测器:关注空气质量

    Arduino检测器:关注空气质量
    发表于 05-10 06:56

    空气质量微观站是什么?空气质量微观站有哪些功能?

    为什么要研发出空气质量微观站?空气质量微观站是什么?空气质量微观站有哪些功能?
    发表于 06-16 06:55

    怎样去设计基于STM32的空气质量监测系统

    基于STM32的空气质量监测系统简单案例系统简介软硬件介绍STM32F103开发板MQ135空气质量传感器DS18B20温度传感器设计流程硬
    发表于 08-11 07:38

    基于单片机的空气质量监测的设计资料分享

    ,当前时间在设置时间范围时,打开排风继电器空气质量大于设置阈值进行声光报警,并打开排风继电器每半分钟语音播报当前空气质量系统通过蓝牙模块向手机发送当前时间以及空气质量标签:STM32单
    发表于 12-13 07:26

    分享空气质量监测功能的VFD时钟

    描述带空气质量监测功能的 VFD 时钟时钟基于旧的 VFD 显示器 - ILC3-5/7。新技术和老式 VFD 显示器的结合使这款时钟对用户来说非常花哨和有用。时钟使用户不仅可以查看时间和星期几
    发表于 06-17 08:11

    基于RT-Thread+RA6M4 + LVGL的家庭空气质量监测系统设计方案

    1、基于RT-Thread+RA6M4 + LVGL的家庭空气质量监测系统设计整体架构以前使用下列传感器做了空气质量监测采集器:这个采集器通
    发表于 07-22 11:33

    空气质量监测仪:了解您周围空气质量的最佳选择

    空气质量的变化正在影响全球,从政府到个人,所有人都在争取改善空气质量。在这种情况下,空气质量监测仪变得越来越重要,它可以帮助我们熟悉周围空气质量
    的头像 发表于 06-21 11:15 480次阅读

    空气质量监测仪:掌控空气质量

    空气质量的恶化已经成为一个严峻的问题,面对这一问题,空气质量监测仪成为我们实现控制空气质量的有效手段。 一、空气质量
    的头像 发表于 07-21 13:50 437次阅读

    空气质量监测系统介绍

    环境保护已经成为全球的重要议题,而空气质量监测和管理是其中的重要一环。在这个过程中,空气质量监测系统扮演着至关重要的角色。那么,
    的头像 发表于 08-15 10:51 860次阅读

    空气质量监测系统:保护我们的环境和健康

    什么是空气质量监测系统? 空气质量监测系统是一种用于监测
    的头像 发表于 08-16 11:39 353次阅读