目录

 

题目

仿真电路及Arduino程序

上位机软件编写

参考文章

修改Tital

 

参考文章中软件的问题

两种解决方法

第一种

第二种

总结


 

题目

软件环境:推荐采用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测已顺利解决,希望能为同学们的考公考研节省一点时间。这篇也是我写的第一篇文章,有写的烂的地方请尽管告诉我。文中如有侵权,联系立删。还有问题的地方也请在评论区反馈,我会尽量回复。最后,所有源码放在下方,有需要自取。如果你要用在报告中,请做一些修改(注释还有软件界面),谢谢。

 

A测_气压测控仿真系统.zip

 

Logo

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

更多推荐