0 前言
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
基于单片机的便携式空气质量检测仪
1、简介
基于IDT的便携式无线供电空气质量检测仪,随着近些年环保问题的日益严峻,身边的朋友也越来越重视自己的生存环境,尤其是对空气质量的关注度日益增高。我就打算自己设计制作一套便携式的空气质量检测仪,采用无线供电的方式来运行保证检测仪的运行,同时利用无线供电系统给检测仪内部的锂电池进行充电。(本项目采用的是IDT 5W无线充电开发套件)
2、主要器件
IDT15W无线充电开发套件
Arduino LGT8F328D单片机
A003最新款颗粒物传感器
S80053二氧化碳传感器
2.2寸串口屏
18650锂电池,容量2600mah
ETA9640充放电芯片,最大充放电电流1000ma
3、实现效果
IDT无线供电系统接收板
无线充电过程
4、设计原理
硬件说明
通过设计计算,整机负载电流约500ma,考虑到设计的充电电流是1000ma,所以项目选用了IDT 5W无线供电系统,该系统可以提供5V 1A的最大5W的功率输出,完全满足设计要求。(本项目采用的是IDT 5W无线充电开发套件)
包含三大部分组成:
1、无线供电锂电池充放电部分,由于传感器的TTL输出电平是3.3V,所以还需要通过一个LDO将MCU供电电源降为3.3V。传感器供电部分是5V(内部有LDO降压),有系统直接供电即可。本项目用的电池选用了常见的18650锂电池,容量2600mah。充放电芯片选用上海钰泰的ETA9640一体式芯片,最大充放电电流1000ma,自带锂电池保护电路,无需外围再加保护电路。无线供电接收板接口直接与USB供电接口并接,既可以采用USB供电,也可以采用IDT无线系统供电。
2、MCU部分选用了AVR内核的8位单片机,LGT8F328D,传感器选用攀藤科技的A003最新款颗粒物传感器和森尔电子的S8 0053二氧化碳传感器(由于二氧化碳传感器价格较贵,最终未进行购买)。
3、显示屏幕选用了2.2寸串口屏,便于快速开发,降低开发难度。
在这里插入图片描述
在这里插入图片描述
项目的PCB图和3D图部分:
这个PCB板子尺寸为80*70mm,正面为主要电路和屏幕部分,反面为18650电池仓和两个传感器接口。
最终PCB板和焊接好的PCB板:
在这里插入图片描述
软件部分
本项目软件设计采用Arduino IDE开源编程框架,主要分为系统初始化和循环执行两大部分构成。
5 部分核心代码
#include SoftwareSerial pm(2, NULL); SoftwareSerial co(4, NULL); unsigned int CO2; unsigned int pm25; void getCO2(unsigned char Data) { staTIc unsigned char RxBuffer[7]; staTIc unsigned char RxCnt = 0; RxBuffer[RxCnt++] = Data; if (RxBuffer[0] != 0xFE && RxBuffer[1] != 0x04) { RxCnt = 0; return; } if (RxCnt > 6) { CO2 = (int) RxBuffer[3] * 256 + (int) RxBuffer[4]; RxCnt = 0; return; } } void getPM25() { uint8_t mData = 0; uint8_t i = 0; uint8_t mPkt[32] = {0}; int mCheck = 0; pm.listen(); delay(100); while (pm.available() > 0) { mData = pm.read(); delay(2); if (mData == 0x42) { mPkt[0] = mData; mData = pm.read(); delay(2); if (mData == 0x4d) { mPkt[1] = mData; mCheck = 66 + 77; for ( i = 2; i < 30; i++) { mPkt[i] = pm.read(); delay(2); mCheck += mPkt[i]; } mPkt[30] = pm.read(); delay(2); mPkt[31] = pm.read(); delay(2); if (mCheck == mPkt[30] * 256 + mPkt[31]) { pm25 = mPkt[12] * 256 + mPkt[13]; Serial.flush(); return; } } } } } void setup() { Serial.begin(9600); pm.begin(9600); co.begin(9600); delay(5000); Serial.println("SPG(2);"); delay(100); } void loop() { getPM25(); co.listen(); delay(100); staTIc unsigned char TxBuffer[] = {0xFE, 0x04, 0x00, 0x03, 0x00, 0x01, 0xD5, 0xC5}; co.write(TxBuffer, 8); delay(100); while (co.available()) { getCO2(co.read()); } Serial.print("LABL(48,0,40,159,'"); Serial.print(pm25); Serial.print("',"); Serial.print(15); Serial.println(",1);"); Serial.print("LABL(48,161,40,319,'"); Serial.print(CO2); Serial.print("',"); Serial.print(15); Serial.println(",1);"); }