stm32毕业设计 空气质量分析仪

该项目使用ArduinoNano控制6个MQ系列气体传感器来检测多种气体浓度,包括酒精、甲烷、CO2等。传感器的模拟电压通过ADC读取,数据经过特定算法转换为气体浓度。当检测到有害气体浓度超过一定阈值时,系统会触发LED和蜂鸣器报警。
摘要由CSDN通过智能技术生成


1 简介

Hi,大家好,今天向大家介绍一个学长做的单片机项目

基于单片机的空气质量分析仪

大家可用于 课程设计 或 毕业设计

2 主要器件

本项目使用了的6个气体传感器,可测量12种气体的气体浓度。

在开始工作之前,应该给传感器供电,让它发热至少24小时。这一步非常重要,因为MQ传感器受到了污染,发热可以帮助它们自我清理。必须用5V给传感器供电然后把它们放在干净的地方。

MQ传感器输出模拟电压,该电压随某些选定气体的浓度而变化。所以可以通过Arduino ADC读取模拟值,得到空气中的气体浓度。

使用6个MQ传感器(MQ3、MQ4、MQ7、MQ8、MQ9和MQ135)。

传感器的用途:

  • MQ3用于测量酒精,苯和己烷
  • MQ4用于测量甲烷和烟雾
  • MQ135用于测量CO2, NH4,甲苯和丙酮
  • MQ7 测量CO
  • MQ8用于测量H2
  • MQ9用于测量可燃气体

3 实现效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 设计原理

4.1 电路接线图

这里主控学长选择的是arduino,你们可以选其他自己熟悉的主控,比如stm32,51等…
在这里插入图片描述

将传感器连接到Arduino nano,因为它有8个ADC,6个ADC用于传感器,2个用于I2C与LCD通信。

Arduino与传感器连接:

  • MQ3 Ao - Arduino A0
  • MQ4 Ao - Arduino A1
  • MQ135 Ao - Arduino A2
  • MQ7 Ao - Arduino A3
  • MQ8 Ao - Arduino A6
  • MQ9 Ao - Arduino A7
  • Arduino与LCD 连接:
  • Arduino A4 - LCD SDA
  • Arduino A5 - LCD SCL

5 气体传感器数据解析算法

参考这篇文章:
https://jayconsystems.com/blog/understanding-a-gas-sensor

#include <SPI.h> //Library for SPI interface 
#include <Wire.h> //Library for I2C interface 
#include <Adafruit_GFX.h> //Core graphic library for displays 
#include <Adafruit_SSD1306.h> //Library for OLED display
 
#define OLED_RESET 11 //Reset pin 
Adafruit_SSD1306 display(OLED_RESET); //Set Reset pin for OLED display 
 
int led = 10; //LED pin 
int buzzer = 9; //Buzzer pin 
int gas_sensor = A0; //Sensor pin 
float m = -0.318; //Slope 
float b = 1.133; //Y-Intercept 
float R0 = 11.820; //Sensor Resistance in fresh air from previous code
 
void setup() {
  Serial.begin(9600); //Baud rate 
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Initialize screen 
  display.setTextColor(WHITE); //Set text color 
  display.setTextSize(3); //Set text size 
  pinMode(led, OUTPUT); //Set LED as output 
  digitalWrite(led, LOW); //Turn LED off 
  pinMode(buzzer, OUTPUT); //Set buzzer as output 
  digitalWrite(buzzer, LOW); // Turn buzzer off 
  pinMode(gas_sensor, INPUT); //Set gas sensor as input 
}
 
void loop() {  
  display.clearDisplay(); //Clear display 
  display.setCursor(0,5); //Place cursor in (x,y) location 
  float sensor_volt; //Define variable for sensor voltage 
  float RS_gas; //Define variable for sensor resistance  
  float ratio; //Define variable for ratio
  float sensorValue = analogRead(gas_sensor); //Read analog values of sensor  
  sensor_volt = sensorValue*(5.0/1023.0); //Convert analog values to voltage 
  RS_gas = ((5.0*10.0)/sensor_volt)-10.0; //Get value of RS in a gas
  ratio = RS_gas/R0;  // Get ratio RS_gas/RS_air
 
  double ppm_log = (log10(ratio)-b)/m; //Get ppm value in linear scale according to the the ratio value  
  double ppm = pow(10, ppm_log); //Convert ppm value to log scale 
  double percentage = ppm/10000; //Convert to percentage 
  display.print(percentage); //Load screen buffer with percentage value 
  display.print("%"); //Load screen buffer with "%"
  display.display(); //Flush characters to screen 
  
  if(ppm>2000){ //Check if ppm value is greater than 2000 
    digitalWrite(led, HIGH); //Turn LED on 
   digitalWrite(buzzer, HIGH); //Turn buzzer on  }  else{ //Case ppm is not greater than 2000    digitalWrite(led, LOW); //Turn LED off    digitalWrite(buzzer, LOW); //Turn buzzer off  }   }  

6 最后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值