• 【毕业设计】 基于单片机的空气质量分析仪 - 嵌入式 物联网



    1 简介

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

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

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


    单片机-嵌入式毕设选题大全及项目分享:

    https://blog.csdn.net/m0_71572576/article/details/125409052


    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  }   }  
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    单片机-嵌入式毕设选题大全及项目分享:

    https://blog.csdn.net/m0_71572576/article/details/125409052

    6 最后

  • 相关阅读:
    2023年最新版Apollo保姆级使用手册(超级详尽版本)
    LeetCode75——Day16
    论文阅读CVPR2022 MaskformerV1和V2
    【云原生 | 从零开始学istio】六、istio核心功能
    Vue3学习
    2022 9.6 模拟
    Java注释
    二叉树的前序、中序、后序、层序遍历
    应用统计-点估计法(1.矩估计 2.极大似然估计)
    吃透Redis(九):缓存淘汰篇-LFU算法
  • 原文地址:https://blog.csdn.net/m0_71572576/article/details/125416358