毕业设计 单片机便携式空气质量检测仪 - 物联网 嵌入式

news2024/11/24 16:49:20

文章目录

  • 0 前言
  • 1 简介
  • 2 主要器件
  • 3 实现效果
  • 4 设计原理
  • 5 部分核心代码
  • 5 最后


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于单片机的便携式空气质量检测仪

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

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 部分核心代码

/*

 

   本程序为V1版本空气质量检测仪代码,显示屏幕为2.2寸串口高分屏。

 

*/

 

#include <SoftwareSerial.h>//调用软串口库文件

SoftwareSerial pm(2, NULL);//定义PM2.5传感器接收引脚

SoftwareSerial co(4, NULL);//定义CO2传感器接收引脚

 

unsigned int CO2;//定义全局变量

unsigned int  pm25;//定义全局变量

 

 

void getCO2(unsigned char Data) //定义CO2计算函数

{

  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()//定义PM2.5计算函数

{

  uint8_t mData = 0;

  uint8_t i = 0;

  uint8_t mPkt[32] = {0};

  int mCheck = 0;

  pm.listen();  //监听pm软串口

  delay(100);

  while (pm.available() > 0)

  {

    mData = pm.read();

    delay(2);

    if (mData == 0x42) //头数据1   OK

    {

      mPkt[0] =  mData;

      mData = pm.read();

      delay(2);

      if (mData == 0x4d) //头数据2  OK

      {

        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);

        // Serial.println("-----------");  //系统调试用

        // Serial.print(mCheck);//系统调试用

        // Serial.print("  ");//系统调试用

        // Serial.println(mPkt[30] * 256 + mPkt[31]);//系统调试用

        if (mCheck == mPkt[30] * 256 + mPkt[31]) //CRC校验  OK

        {

          // Serial.println("CRC OK");//系统调试用

          pm25 = mPkt[12] * 256 + mPkt[13];//根据协议计算出PM2.5浓度值

          // Serial.print("pm25:");  Serial.print(pm25); Serial.println("ug/m3  ");//系统调试用

          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();//调用PM2.5计算函数

  co.listen();  //监听co软串口

  delay(100);

  static unsigned char TxBuffer[] = {0xFE, 0x04, 0x00, 0x03, 0x00, 0x01, 0xD5, 0xC5};//定义读取指令

  co.write(TxBuffer, 8);//发送读取指令给CO2传感器

  delay(100);

  while (co.available())

  {

    getCO2(co.read());//获取CO2浓度值

  }

  Serial.print("LABL(48,0,40,159,'");  Serial.print(pm25);  Serial.print("',");  Serial.print(15);  Serial.println(",1);");//将PM2.5数据输出给屏幕

  Serial.print("LABL(48,161,40,319,'");  Serial.print(CO2);  Serial.print("',");  Serial.print(15);  Serial.println(",1);");//将CO2数据输出给屏幕

}

 

 

//程序结束,如有优化方案,欢迎沟通交流

5 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51.`.format`字符串格式化—最适合小白的格式化笔记

51..format字符串格式化 文章目录51..format字符串格式化1.课题导入2.知识回顾3..format的基本用法3.1{}为空3.2 {}中有编号3.3 {}中有变量名4.浮点数的格式化5..format官方语法6. .format格式化语法总结7. 总结8.课堂练习1.课题导入 【描述】 用input函数输入你每个月的工资…

MySQL中WHERE后跟着N多个OR条件会怎样...

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;叶金荣文章来源&#xff1a;社区原创 可能会执行非常慢&#xff0c;线上生产环境千万别写出这种SQL ... 背景交…

Docker+Gitlab+Jenkins+Springboot

安装Gitlab 开放防火墙端口80和配置映射文件夹 firewall-cmd --zonepublic --add-port80/tcp --permanent firewall-cmd --reload mkdir -p /docker_data/gitlab/{data,logs,config}启动Gitlab容器&#xff08;启动容器之前确保80&#xff0c;443端口没用被占用&#xff0c;被…

H3C双点双向路由引入,以及使用路由策略进行路由控制,路由学习的配置

如下拓扑中&#xff0c;存在两个路由域&#xff0c;左边为isis区域&#xff0c;所有设备均为level-1-2角色。右边为ospf区域&#xff0c;所有使能ospf的接口均在area0区域中&#xff1a; 组网中需要在R1和R3上&#xff0c;分别将各自的isis路由引入到ospf进程中&#xff0c;同时…

Go C 编程 第9课 放飞汽球(魔法学院的奇幻之旅 Go C编程绘图)

Goc编程第八课 Goc编程第八课_哔哩哔哩_bilibili Goc编程第九课 Goc编程第九课_哔哩哔哩_bilibili 59.实心椭圆 (魔法学院第9课) 难度&#xff1a;1 登录 60.双色椭圆 (魔法学院第9课) 难度&#xff1a;1 登录 61.气球串 (魔法学院第9课) 登录 62.同心圆环 (魔法学院第9课…

C++类与对象的应用—日期计算器

目录 一、前言 二、日期类的实现 检查日期的合法性 < 运算符重载 运算符重载 <运算符重载 >运算符重载 >运算符重载 !运算符重载 进一步优化 日期天数 日期天数 日期-天数 日期-天数 前置&&后置 前置--&&后置-- 思路&#…

强化学习的基础知识和6种基本算法解释

强化学习的基础知识和概念简介&#xff08;无模型、在线学习、离线强化学习等&#xff09; 机器学习(ML)分为三个分支:监督学习、无监督学习和强化学习。 监督学习(SL):关注在给定标记训练数据的情况下获得正确的输出无监督学习(UL):关注在没有预先存在的标签的情况下发现数据…

[附源码]Python计算机毕业设计Django校园疫情防范管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

我的周刊(第070期)

我的信息周刊&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。&#x1f3af; 项目streamlit[1]用 Python 快速构建数据应用&#xff1…

微信公众号开发—通过网页授权实现业务系统登录及用户绑定(微信网页授权自动登录业务系统)

&#x1f60a; 作者&#xff1a; 一恍过去&#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390&#x1f38a; 社区&#xff1a; Java技术栈交流&#x1f389; 主题&#xff1a; 微信公众号开发—通过网页授权实现业务系统登录及用户绑定(微信网页授权自…

产品经理快速入门指南之常见问题篇

产品经理作为近几年互联网最炙手可热的岗位&#xff0c;可谓是赚足了眼球。其实呢&#xff0c;产品经理是很难定义的一个角色&#xff0c;如果非要一句话定义&#xff0c;那么产品经理是为终端用户服务&#xff0c;负责产品整个生命周期的人。今天这篇文章小编会带大家了解一下…

交通部1078-2016版中的音视频协议的一点想法

交通部1078的音视频中的格式有点像TS流, 交通部中1078的音视频的解析用的走的HTTP的协议,内容是流媒体,之前用的是ffmpeg解析的内容流之前是把payload中的数据流区分出音频,视频直接塞给ffmpeg,由ffmpeg推两路流到rtmp协议上去,这种方法有点粗暴, 最近分析ffmpeg源码发现交通…

谷歌通过Chrome简化登录安卓密码支持

谷歌宣布&#xff0c;它正在为其 Chrome 网络浏览器和 Android 操作系统引入密码支持&#xff0c;以简化跨应用程序、网站和设备的登录。 谷歌今天表示&#xff1a; “密码是密码和其他可钓鱼身份验证因素的一种更安全的替代品。它们不能重复使用&#xff0c;不会在服务器漏洞…

AngularJS 2.0 稳定版真的发布了!

导读之前我们还哀叹&#xff0c;谷歌的 AngularJS 2.0 的稳定版看起来年底也未必能见到&#xff0c;然而&#xff0c;在 9 月 14 日谷歌总部召开的一个会议上&#xff0c;突然就宣布最终的稳定版发布了——而这距离前一个版本 RC7 的发布才过去了一天。 AngularJS 2.0 的开发始…

详解入门安全测试最难懂的概念 —— CSRF

对于刚刚入门安全的同学来说&#xff0c;csrf是最难理解的概念之一&#xff0c;本文会用最简单的方式对csrf进行讲解&#xff0c;包括csrf的定义&#xff0c;csrf典型的攻击流程以及如何对其进行防范&#xff0c;希望本文能够帮到大家&#xff01; CSRF定义 CSRF&#xff08;…

Nacos学习笔记 (1)Nacos的简介与安装

1. Nacos 介绍与发展前景 1.1 官网概览&#xff1a; Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一…

性能测试(一)—— 概述、策略、指标、流程

目录 一、性能测试概述 1、为什么要进行性能测试&#xff1f; 2、性能测试的概念 2.1 什么是性能&#xff1f; 2.2 什么是性能测试&#xff1f; 2.3 性能测试目的 3、性能测试与功能测试 3.1 焦点不一样 3.2 关系 二、性能测试策略 1、性能测试策略 1.1 基准测试 …

PageObject(PO)设计模式在 UI 自动化中的实践总结(以 QQ 邮箱登陆为例)

1080608 28.8 KB PO的思想最早是2013年由IT大佬Martin Flower提出的&#xff1a; martinfowler.com bliki: PageObject A page object wraps an HTML page, or fragment, with an application-specific API, allowing you to manipulate page elements for testing without d…

MVC操作方法如何绑定Stream类型的参数

1、我需要读取HTTP消息的整个 body 来填充 MVC 方法参数&#xff1b; 2、HTTP消息的 body 不是 form-data&#xff0c;而是完全的二进制内容。 最简单的方法就是不使用模型绑定&#xff0c;即在MVC方法中直接访问 HttpContext.Request.Body。 var request HttpContext.Requ…

[附源码]计算机毕业设计Python的物品交换平台(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…