典中典之西电A测-气压测控仿真系统

兄弟,如果你看到这篇,只能说明你A测也挂了,没办法,哥们太菜了,抄的太假过不了你电有些老师的慧眼

这坨🐕⑩我先吃为敬

环境搭建可以参考这个兄弟的博客

一、题目要求

实现功能:使用 Arduino UNO 微控制器,搭建一个 PC 上位机远程气压检测控制
系统。
在这里插入图片描述

功能:Arduino UNO(Atmega328P)通过串行接口组件与上位机 PC 进行双向
通信,PC 机用串口调试助手软件向 Arduino UNO 发送学生自己的学号,Arduino
UNO 收到后在 LCD 上显示学生的学号,并且向 PC 机发送当前的气压值。PC
机上的串口调试助手软件接收窗口显示收到的气压值。
Arduino UNO 控制驱动直流电机,当环境气压等于或高于预定的气压((860+
学号末位数)hPa)时,启动直流电机转动;当环境气压低于预定的气压((860+
学号末位数)hPa)时,直流电机停止转动。同时,实时环境气压在 LCD 和 PC
机的串口调试助手软件接收窗口显示。如:学生学号末位数为 5,手动增加气压
等于或超过设定的气压值 865 hPa(860+5=865)时,驱动直流电机开始转动。
LCD 第一行显示 ID:学号,第二行显示 PRESS:气压值
PC 机串口调试助手软件发送窗口显示学号
PC 机串口调试助手软件接收窗口显示 Pressure:气压值

二、设计思路

此电路可以在一个密封环境中维持低于865hPa的气压值,当BMP180检测到气压高于或者等于此值时电机开始转动,往外抽气,当气压低于此值时电机停止转动抽气
可以考虑应用于维持稳压的环境比如低压进行的化学反应

放拟🐎什么够皮呢

三、仿真结果展示

我的学号是20009101015,最后一位是5,那么使电机转动的气压阈值是865,也就是说气压大于等于865时电机转动,气压小于865时停止转动
计算预定值,放上你软件仿真结果截图,包含直流电机停止时和启动时的LCD和PC机串口调试助手软件发送和接收窗口的显示结果,传感器数值、电机转速等;简单地说明和分析仿真结果,证明自己的测试过程。
我实验使用串口调试软件为XCOM,其发送和接收位于同一窗口中
最初Atmega328P启动时,在com口打印了我自定义的调试信息,表明bmp传感器已经注册,此时传感器设置初始压强为860,液晶显示器无显示,电机不转动,程序会阻塞等待com的消息
在这里插入图片描述

于com口发送学号20009101015后,串口接到Pressure:860信息,液晶显示器第一行打印ID:20009101015,第二行打印压强PRESS:860,由于压强没有超过865,电机不会转动
在这里插入图片描述

手动上调bmp传感器的压强数值到865,达到阈值,电机开始转动,转速从0开始增大
在这里插入图片描述

四、参考文献

Adafruit_BMP085.h

西电A测:串口通信仿真-CSDN博客

五、程序设计

在这里插入图片描述

#include <Wire.h>
#include <Adafruit_BMP085.h>  
#include <LiquidCrystal.h>  // LCD控制相关库
#define EMPIN 7 //电机使用io7口
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // 初始化LCD 
Adafruit_BMP085 bmp;  //这位更是重量级
String str1 = "ID:";  
String str2 = "";
String str3 = "";
String PRE = "PRESS:";
String Pre = "Pressure:";
String id;
int len;
int last = 0;
int pressure_limit;
int pressure_real;
int pressure_real_last;
int one_time_flag = false;
void setup() {//setup只会在最开始执行一次,因此各种初始化,获取学号适合放在这里Serial.begin(9600);  // 初始化串口,设置波特率为9600lcd.begin(16, 2);    //初始化1液晶显示器有6列2行pinMode(EMPIN, OUTPUT);  // 设置连接直流电机引脚工作模式id = getInput();str1 += id;lcd.setCursor(0, 0);lcd.println(str1);len = id.length();last = id.substring(len - 3, len - 2).toInt();// Serial.println(last);pressure_limit = 860 + last;pressure_real_last = 0;
}
String getInput() {Serial.flush();while (Serial.available() == 0);delay(100);return Serial.readString();
}
void loop() {//loop会一直循环执行,适合启动后执行重复的操作,可以在其中定义并检查flag避免重复pressure_real=bmp.readPressure()/100;if (pressure_real != pressure_real_last) {//pressure_real_last是个flag,只有实时温度变化时才会刷新液晶屏和com口pressure_real_last = pressure_real;str2 = PRE + String(pressure_real);str3 = Pre + String(pressure_real);lcd.setCursor(0, 1);lcd.print(str2);Serial.println(str3);if (pressure_real >= pressure_limit) {digitalWrite(EMPIN, HIGH);} else {digitalWrite(EMPIN, LOW);}}delay(100);
}

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

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

相关文章

账号管理支持批量测试资产可连接性,资产管理支持通过标签方式选择资产,JumpServer堡垒机v3.10.4 LTS版本发布

2024年3月4日&#xff0c;JumpServer开源堡垒机正式发布v3.10.4 LTS版本。JumpServer开源项目组将对v3.10 LTS版本提供长期的支持和优化&#xff0c;并定期迭代发布小版本。欢迎广大社区用户升级至v3.10 LTS最新版本&#xff0c;以获得更佳的使用体验。 在v3.10.4 LTS版本中&a…

spring-smart-di 动态切换接口源

0、背景 一般我们系统同一个功能可能会对接多个服务商&#xff0c;防止某个服务商的服务不可用快速切换或者收费不同需要切换&#xff0c;那我们一般做快速切换逻辑传统无非就是先将每个服务商实现&#xff0c;然后在配置点&#xff08;数据库或者nacos&#xff09;配置当前正…

ChromeDriver全版本下载教程

确定自己的Chrome版本 step1. 打开Chrome浏览器右上角的三个点&#xff0c;再点击设置 step2. 在设置中点击“关于Chrome”&#xff0c;圈起来的红框即为当前Chrome版本&#xff0c;我的版本就是121.0.6167.185 在json中查找自己对应ChromeDriver版本下载链接 一般教程会让你…

linux条件判断之case-in-esac

之前提到的“if...then...fi”是通过比较来判断变量的&#xff0c;如果符合状态就进行某些行为动作&#xff0c;并且通过较多层次(就是elif...)的方式&#xff0c;进行多个变量的判断&#xff0c;其也可以使用case...in...esac方式进行实现 1.case...in...esac格式 case $变量…

Linux如何设计一个线程池

在设计线程池之前&#xff0c;我们可以对线程进行简单的封装这样子在线程池中就可以少一点调用接口&#xff0c;就像搭积木一样&#xff0c;一层一层的搭上去 #pragma once#include <iostream> #include <pthread.h> #include <string> #include <functi…

【树】【异或】【深度优先】【DFS时间戳】2322. 从树中删除边的最小分数

作者推荐 【二分查找】【C算法】378. 有序矩阵中第 K 小的元素 涉及知识点 树 异或 DFS时间戳 LeetCode2322. 从树中删除边的最小分数 存在一棵无向连通树&#xff0c;树中有编号从 0 到 n - 1 的 n 个节点&#xff0c; 以及 n - 1 条边。 给你一个下标从 0 开始的整数数组…

【操作系统学习笔记】文件管理1.3

【操作系统学习笔记】文件管理1.3 参考书籍: 王道考研 视频地址: Bilibili I/O 控制方式 程序直接控制方式中断驱动方式DMA 方式通道控制方式 程序直接控制方式 关键词: 轮询 完成一次读/写操作的流程 CPU 向控制器发出读指令。于是设备启动&#xff0c;并且状态寄存器设…

2021 年 12 月青少年软编等考 C 语言一级真题解析

目录 T1. 输出整数部分思路分析 T2. 疫情集中隔离思路分析 T3. 字符判断思路分析 T4. 统计数思路分析 T5. 最大质因子思路分析 T1. 输出整数部分 输入一个双精度浮点数 f f f&#xff0c;输出其整数部分。 时间限制&#xff1a;1 s 内存限制&#xff1a;64 MB 输入 一个双精…

C++惯用法之RAII思想: 资源管理

C编程技巧专栏&#xff1a;http://t.csdnimg.cn/eolY7 目录 1.概述 2.RAII的应用 2.1.智能指针 2.2.文件句柄管理 2.3.互斥锁 3.注意事项 3.1.禁止复制 3.2.对底层资源使用引用计数法 3.3.复制底部资源(深拷贝)或者转移资源管理权(移动语义) 4.RAII的优势和挑战 5.总…

探索Pandas:数据处理与分析的利剑

在这篇文章中&#xff0c;我们将深入探讨Pandas库&#xff0c;这是一个开源的Python库&#xff0c;专为数据分析和处理而设计。Pandas提供了高效的DataFrame对象&#xff0c;使得数据清洗、分析变得简单易行。通过本篇文章&#xff0c;我们不仅会了解Pandas的核心功能&#xff…

MATLAB:Image Processing Toolbox工具箱入门实战

目录 1.基本图像导入、处理和导出 2.实战项目一&#xff1a;利用imfindcircles()函数检测和测量图像中的圆形目标 1.基本图像导入、处理和导出 Basic Image Import, Processing, and Export- MATLAB & SimulinkThis example shows how to read an image into the worksp…

linux系统iptables的操作

iptables操作 安装参数解释参数使用iptables语法示例规则匹配条件通用匹配&#xff08;协议&#xff09;&#xff0c;可以独立使用通过端口规则匹配:通过ip地址修改规则: icmp类型匹配扩展匹配指定ip范围指定多端口范围MAC地址匹配通过网卡接口保存和删除规则本地端口转发 网络…

前端Vue篇之Vue 3.0 中的 Vue Composition API?Composition API与React Hook很像,区别是什么

目录 Vue 3.0 中的 Vue Composition API&#xff1f;Composition API与React Hook很像&#xff0c;区别是什么1. 实现原理2. 调用方式和性能3. 生态和社区 Vue 3.0 中的 Vue Composition API&#xff1f; 在Vue 3中&#xff0c;引入了Composition API来解决Vue 2中Options API…

Java集合框架-Collection和Map

文章目录 Collection-单列集合特点ListArrayListLinkedListVecter SetHashSetTreeSet Map-键值对集合特点Map常用APIput添加细节remove Map的三种遍历方式1.通过键找值2.通过"键值对"3.Lambda表达式foreach源码 HashMap需求 为什么要使用泛型 泛型的优点1.集合中存储…

#QT(智能家居界面-布局)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a; 水平布局&#xff0c;垂直布局&#xff0c;栅格布局&#xff08;弹簧&#xff09; 界面自动调整 3.记录 注意弹簧不是拖拽拉长&#xff0c;而是使用栅格布局 运行发现窗口放大缩小可以自动调整 如果想要重新布局&#xff0c;需…

Feign失败降级逻辑

一&#xff0c;为什么要编写失败降级逻辑 业务失败后&#xff0c;不能直接报错&#xff0c;而应该返回用户一个提示或者默认结果 二&#xff0c;实现步骤 1&#xff0c;自定义类实现FallbackFactory接口 import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Sl…

LCR 095. 最长公共子序列【leetcode】/动态规划

LCR 095. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某…

【PHP趣味技术】分分钟教会你轻松采集PDF文本内容 《重庆话真的太吃皮老!》

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

备忘 clang diagnostic 类的应用示例 ubuntu 22.04

系统的ncurses环境有些问题 通过源码安装了ncurses6.3后&#xff0c;才可以在 llvmort-18.1.rc4中编译通过示例&#xff1a; 1&#xff0c;折腾环境 ncurses-6.3$ ./configure ncurses-6.3$ make -j ncurses-6.3$ sudo make install sudo apt install libtinfo5 sudo…

C判断操作系统、编译器类型、编译器版本及编译位数

1. 操作系统 #ifdef __linux__// Linux #elif defined(_WIN32) || defined(_WIN64)// Windows #else// 其他 #endif2. 编译器类型及版本 #ifdef __GNUC__// 使用了GCC编译器#if __GNUC__ > 7// GCC版本大于等于7#else// GCC版本小于7#endif #elif defined(_MSC_VER)// …