2025西电A测 气压测控仿真系统(自行编写上位机软件)
到此为止2025的A测已顺利解决,希望能为同学们的考公考研节省一点时间。这篇也是我写的第一篇文章,有写的烂的地方请尽管告诉我。文中如有侵权,联系立删。还有问题的地方也请在评论区反馈,我会尽量回复。最后,所有源码放在下方,有需要自取。A测_气压测控仿真系统.zip。
目录
题目
软件环境:推荐采用Proteus 8.9 SP2及以上仿真软件,Arduino IDE,虚拟串口 驱动软件Virtual Serial Port Driver(VSPD)。 实现功能:使用Arduino UNO微控制器,搭建一个PC上位机远程气压检测控制系统。
功能:Arduino UNO(Atmega328P)通过串行接口组件与上位机PC进行双向 通信,PC上位机软件向Arduino UNO发送学生自己的学号,Arduino UNO收到 后向PC机发送当前的气压值,并且在LCD上显示学生的学号、当前的气压值。 PC 上位机软件显示收到的气压值。
Arduino UNO 控制驱动直流电机,当环境气压等于或高于预定的气压((860+ 学号末位数)hPa)时,启动直流电机转动;当环境气压低于预定的气压((860+ 学号末位数)hPa)时,直流电机停止转动。同时,实时环境气压在LCD和PC 上位机软件显示。如:学生学号末位数为5,手动增加气压等于或超过设定的气 压值865 hPa(860+5=865)时,驱动直流电机开始转动。
LCD第一行显示 ID:学号,第二行显示 PRESS:气压值
必须自行编写PC上位机软件,实现PC与Arduino的双向数据传输及管理控制。编程语言不限。
上位机软件GUI界面Title显示学生自己的学号和姓名;需要有发送窗口显示发 送的学号;有接收窗口显示接收到的气压值;GUI 界面上需要有串口选择和串口打开关闭功能。
相比于之前,多了一个编写上位机软件的工作,很烦。室友AI两三下搞了一个简易的,但有点太简易了。后来我找到了另一位博主的文章。用Qt Designer和Python做了一个我还算满意的。
仿真电路及Arduino程序
该部分内容从软件安装、环境搭建到最后的模拟,老学长都有资料
西电A测:串口通信仿真(这个重点是环境搭建,教你怎么安装软件,以及怎么使用)
2024春季 西电A测-气压测控仿真系统(这篇提供了Arduion程序)
文中的程序在使用XCOM时完全没问题,但在用自己编的软件时可能会出现错误。具体原因与换行符\r\n有关,下面会详细介绍。
上位机软件编写
参考文章
软件的编写我参考了以下文章(文末有项目文件)
从零开始编写一个上位机(串口助手)QT Creator + Python
这里节省时间可以直接下载文件,但需要学习配置Pyside2以及Qt designer。
修改Tital
修改GUI的tital只需要用Qt Designer打开ui_Serial.ui文件,修改MainWindow的属性,如下
然后保存,再用Pyside2-uic转换为.py文件,重新运行main.py即可看到更新后的软件。
参考文章中软件的问题
文中的软件没什么太大的问题,跟着做就能得到一个如下的软件
但有一个问题,如果直接使用该串口助手,你会发现仿真时,LCD显示的学号的对的,但是气压预设值跟【860+学号最后一位】不一样(其实这里是倒数第三位)。原因来自于Arduino程序中获取最后一位的片段:
if (Serial.available() > 0) { // 检查是否有串口输入
while (Serial.available() > 0) {
str += (char)Serial.read();
delay(10);
}
lcd.println(str);
// 提取学号的末位数字
length_ = str.length();
last = str.substring(length_ - 3, length_ - 2).toInt();
setPressure = 860 + last;
str = "";
length_ = 0;
last = 0;
}
由于当时使用了XCOM的发送新行,导致发次发送末尾都有\r\n,所以学号的最后一位变成了倒数第三位。而上面我们自制的软件只发送原文,不会换行,导致选到了学号的倒数第三位。
两种解决方法
第一种
修改Arduino程序中定位最后一位的位置
last = str.substring(length_ - 1, length_).toInt();
第二种
为软件添加换行,及在发送数据前,在尾部加上\r\n
找到文件 main_Serial.py ,找到函数 pBtn_Serial_Send_Data_Slot(self)
def pBtn_Serial_Send_Data_Slot(self):
text = self.ui.lEdit_Serial_Send_Data.text() # 获取输入内容
try:
if text and self.Serial.is_open:
# print(text.encode('utf-8'))
text_with_newline = text + '\r\n'
self.Serial.write(text_with_newline.encode('utf-8')) # 发送数据将数据转换成 utf-8 格式发送
except Exception as error:
print(error)
用以上代码替换,即可实现换行。
总结
到此为止2025的A测已顺利解决,希望能为同学们的考公考研节省一点时间。这篇也是我写的第一篇文章,有写的烂的地方请尽管告诉我。文中如有侵权,联系立删。还有问题的地方也请在评论区反馈,我会尽量回复。最后,所有源码放在下方,有需要自取。如果你要用在报告中,请做一些修改(注释还有软件界面),谢谢。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)