基于STM32的医用输液监测系统设计_322
随着医疗技术的进步,自动化输液监控系统在临床中得到了广泛应用。本文设计并实现了一种基于STM32的自动输液监控系统,旨在通过液位传感器、流速检测、步进电机和蜂鸣器等硬件模块,实时监控输液状态并进行自动调节。系统使用STM32F103RCT6芯片作为主控单元,ESP8266-WIFI模块实现与APP上位机之间的无线通信。APP界面采用QT5开发,支持实时查看液位、流速信息,并进行输液流速上下限的设定
文章目录
- 一、前言
- 二、硬件选型
- 三、Qt开发入门与环境搭建
- 四、 ESP8266-WIFI模块调试过程
- 五、上位机开发
- 六、STM32代码设计
- 七、使用STM32代码的流程以及注意事项
- 开题报告
- 任务书
基于STM32的医用输液监测系统设计
https://www.bilibili.com/video/BV13bs1ztEm5
一、前言
1.1 项目介绍
【1】项目开发背景
随着医疗技术的不断进步,自动输液监控系统在临床护理中的应用越来越广泛。传统的输液过程通常需要医护人员手动监控输液速度和液位,这不仅增加了医护人员的工作负担,还可能导致监控不及时,从而引发安全隐患。为了提高输液过程的安全性和效率,基于STM32的自动输液监控系统应运而生。该系统通过集成液位传感模块、光电传感器、电机模块、按键模块、OLED显示屏和WIFI通信模块,实现了对输液过程的自动化监控和管理。
液位传感模块能够实时监测输液瓶中的液位,当液位达到预设的限定值时,系统会自动控制步进电机转动,夹紧输液管,并通过蜂鸣器进行报警提醒,确保输液过程的安全。光电传感器则通过对输液管中液体流速的检测,方便医护人员控制输液的流速快慢,确保输液速度的准确性。电机模块通过驱动步进电机,实现对输液管的夹紧和松开功能,进一步提高了系统的自动化程度。
按键模块允许医护人员设置输液流速的上下限,确保输液速度在安全范围内。OLED显示屏则实时显示输液流速和液位信息,方便医护人员随时了解输液状态。此外,系统还支持通过WIFI与APP上位机进行通信,利用TCP协议完成数据传输,实时显示液体流速、液位信息,并允许医护人员在APP上设置病人的信息和输液参数,进一步提高了系统的智能化水平。
硬件选型方面,主控芯片采用STM32F103RCT6,具有强大的处理能力和丰富的外设接口,能够满足系统的各种需求。OLED显示屏采用0.96寸SPI协议接口的显示屏,显示效果清晰,功耗低。电机采用28BYJ4-5V步进电机,具有较高的精度和稳定性。光电传感器和液位传感器模块分别采用光电测速传感器模块和ADC接口的模拟量采集输出,确保数据的准确性和实时性。蜂鸣器采用高电平触发的有源蜂鸣器,报警声音清晰响亮。供电采用USB 5V供电,方便实用。WIFI模块采用ESP8266-WIFI模块,支持AP模式+TCP服务器,能够实现与APP上位机的稳定通信。
综上所述,基于STM32的自动输液监控系统通过集成多种传感器和模块,实现了对输液过程的自动化监控和管理,不仅提高了输液过程的安全性和效率,还减轻了医护人员的工作负担,具有广泛的应用前景。

APP图:


系统框架图:

原理图:

【2】设计实现的功能
(1)液位监测与报警:通过液位传感器检测输液瓶中的液位,当液位达到设定的最低值时,STM32控制步进电机夹紧输液管,并触发蜂鸣器报警提醒。
(2)流速检测:采用光电测速传感器监测输液管内的液体流速,STM32通过检测脉冲频率计算流速。
(3)步进电机控制:STM32控制28BYJ4步进电机的旋转,实现对输液管的夹紧和松开,确保输液流速的稳定性。
(4)按键设定功能:使用独立按键模块,允许用户手动设定输液流速的上下限值,并存储到系统中。
(5)OLED显示功能:通过0.96寸SPI OLED屏实时显示液体流速、液位状态、设定的流速上下限值等关键信息。
(6)WIFI通信与远程监控:ESP8266-WIFI模块创建AP热点并作为TCP服务器,使手机APP可以连接到设备,实现数据传输。APP可实时显示输液状态,包括液体流速、液位信息,并可远程调整流速上下限值。
(7)APP功能实现:APP采用QT5(C++)开发,支持Windows与Android平台。用户可在APP上录入病人信息,查看输液情况,并进行参数设定。
(8)供电管理:系统采用USB 5V供电,为STM32、ESP8266、传感器、步进电机等模块提供稳定电源。
【3】项目硬件模块组成
(1)主控模块:STM32F103RCT6 作为核心处理单元,负责采集传感器数据、控制步进电机、驱动显示屏、与上位机通信等功能。
(2)液位检测模块:采用模拟量输出的液位传感器,通过ADC接口读取输液瓶内液位数据,并进行低液位报警控制。
(3)流速检测模块:采用光电测速传感器,通过检测脉冲信号计算输液管内的液体流速,并提供数据给主控进行调节。
(4)步进电机控制模块:使用28BYJ4-5V步进电机及驱动电路,实现对输液管的夹紧与松开,确保流速的稳定。
(5)蜂鸣器报警模块:采用高电平触发的有源蜂鸣器,在低液位或异常流速情况下进行声音报警提醒。
(6)OLED显示模块:0.96寸SPI接口OLED屏幕,实时显示流速、液位、设定的流速上下限等信息。
(7)按键输入模块:独立按键模块,用户可手动设置流速的上下限,并进行参数确认。
(8)WIFI通信模块:ESP8266-WIFI模块,创建AP模式并作为TCP服务器,实现设备与手机APP之间的无线通信。
(9)电源管理模块:使用USB 5V供电,为STM32、ESP8266、传感器、步进电机等提供稳定电源。
(10)硬件连接模块:采用洞洞板(万能板)搭建电路,使用焊接+杜邦线连接方式进行电路组装。
【4】设计意义
基于STM32的自动输液监控系统的设计具有重要的现实意义和应用价值。系统通过自动化的方式解决了传统输液过程中依赖人工监控的问题。传统输液需要医护人员频繁检查液位和流速,不仅增加了工作负担,还可能因人为疏忽导致安全隐患。而本系统通过液位传感器和光电传感器实时监测输液状态,结合步进电机和蜂鸣器的自动控制功能,能够及时预警并采取措施,显著提高了输液过程的安全性和可靠性。
医护人员可以通过按键模块设置输液流速的上下限,并通过OLED显示屏实时查看输液状态,减少了人工干预的频率。同时,系统支持WIFI通信功能,能够将输液数据实时传输至APP上位机,医护人员可以通过手机或电脑远程监控输液情况,进一步提高了护理的便捷性和灵活性。这种智能化的监控方式不仅减轻了医护人员的工作压力,还为患者提供了更加精准和安全的输液服务。
通过将STM32微控制器与多种传感器、执行器和通信模块相结合,系统实现了对输液过程的全方位监控和管理。这种集成化的设计不仅降低了系统的复杂性,还提高了设备的稳定性和可维护性。同时,系统采用模块化设计,便于后续功能扩展和升级,为未来医疗设备的智能化发展提供了技术参考。
在医疗资源相对紧张的情况下,自动输液监控系统能够有效减少医护人员的工作量,提高医疗资源的利用效率。同时,系统的高可靠性和智能化特性有助于降低医疗事故的发生率,提升患者的治疗体验和满意度。这对于改善医疗服务质量、推动医疗行业的数字化转型具有积极的促进作用。
综上所述,基于STM32的自动输液监控系统的设计不仅解决了传统输液过程中的痛点问题,还通过智能化和集成化的设计提升了医疗护理的效率和质量,具有重要的技术价值和社会意义。
【5】国内外研究现状
在国内外,自动输液监控系统的研究一直是医疗设备领域的热点之一。随着医疗技术的不断进步和智能化需求的增加,越来越多的研究机构和企业投入到这一领域,推动了输液监控技术的快速发展。
在国外,自动输液监控系统的研究起步较早,技术相对成熟。许多发达国家已经将智能化输液设备广泛应用于临床护理中。例如,美国的Baxter公司和瑞士的Fresenius Kabi公司都推出了先进的输液泵和监控系统,这些设备不仅能够精确控制输液速度和液位,还支持远程监控和数据传输功能。此外,国外的研究还注重将人工智能和大数据技术应用于输液监控系统中,通过分析患者的生理数据和输液历史,优化输液方案,提高治疗效果。例如,一些研究团队开发了基于机器学习的输液监控算法,能够根据患者的实时状态动态调整输液参数,进一步提升了系统的智能化水平。
在国内,自动输液监控系统的研究近年来也取得了显著进展。随着国家对医疗设备创新的重视和投入,许多高校、科研院所和企业纷纷开展了相关研究。例如,清华大学、浙江大学等高校在输液监控系统的传感器技术、控制算法和通信协议方面进行了深入研究,取得了一系列创新成果。同时,国内一些医疗设备企业也推出了具有自主知识产权的自动输液监控设备,这些设备在性能和功能上逐渐接近国际先进水平。例如,迈瑞医疗和鱼跃医疗等企业开发的输液泵和监控系统已经在国内多家医院得到应用,取得了良好的临床效果。
尽管国内外在自动输液监控系统的研究方面取得了显著进展,但仍存在一些挑战和不足。例如,现有系统在复杂环境下的稳定性和抗干扰能力仍需进一步提升,特别是在液位检测和流速控制方面,如何提高精度和可靠性仍然是一个重要的研究方向。此外,系统的成本控制和普及推广也是需要解决的问题,尤其是在医疗资源相对匮乏的地区,如何降低设备成本并提高其可及性是一个亟待解决的难题。
总体而言,国内外在自动输液监控系统的研究方面已经取得了丰硕的成果,技术的不断进步为临床护理提供了更加安全、高效和智能化的解决方案。然而,随着医疗需求的不断变化和技术的快速发展,未来仍需在系统性能、智能化水平和成本控制等方面进行深入研究,以推动自动输液监控技术的进一步发展和应用。
【6】摘要
随着医疗技术的进步,自动化输液监控系统在临床中得到了广泛应用。本文设计并实现了一种基于STM32的自动输液监控系统,旨在通过液位传感器、流速检测、步进电机和蜂鸣器等硬件模块,实时监控输液状态并进行自动调节。系统使用STM32F103RCT6芯片作为主控单元,ESP8266-WIFI模块实现与APP上位机之间的无线通信。APP界面采用QT5开发,支持实时查看液位、流速信息,并进行输液流速上下限的设定。系统通过OLED显示屏提供实时的输液数据反馈。该系统具有高效、精准、便捷的特点,可以有效提升医院输液管理的智能化水平,为患者提供更安全的输液环境。
关键字:
自动输液监控,STM32,液位传感器,流速检测,步进电机,蜂鸣器,WIFI通信,APP远程监控,OLED显示,医疗自动化
1.2 设计思路
基于STM32的自动输液监控系统的设计思路围绕实现输液过程的自动化、智能化和远程监控展开。系统的核心功能是通过液位传感器和光电传感器实时监测输液瓶中的液位和输液管中的液体流速。液位传感器采用ADC接口采集模拟信号,当液位低于设定阈值时,系统会触发步进电机转动,夹紧输液管,并通过蜂鸣器发出报警信号,提醒医护人员及时处理。光电传感器则通过检测输液管中液体的流速,生成脉冲信号,系统根据脉冲频率计算实时流速,并通过OLED显示屏显示,方便医护人员查看。
系统的控制逻辑以STM32微控制器为核心,通过寄存器编程方式实现对各个模块的精确控制。液位传感器和光电传感器的数据经过STM32处理后,系统会根据预设的流速上下限自动调整输液状态。例如,当流速超过上限时,系统会控制步进电机夹紧输液管,降低流速;当流速低于下限时,系统会松开输液管,增加流速。这种闭环控制方式确保了输液过程的稳定性和安全性。同时,系统还配备了按键模块,允许医护人员手动设置流速上下限,进一步提高了系统的灵活性和实用性。
在数据展示和交互方面,系统采用0.96寸SPI接口的OLED显示屏,实时显示液位、流速和报警信息,为医护人员提供直观的操作界面。此外,系统还集成了ESP8266-WIFI模块,支持AP模式+TCP服务器的通信方式。通过WIFI热点,手机APP可以连接到系统,实时获取输液数据,并远程设置输液参数。这种远程监控功能不仅提高了护理效率,还为医护人员提供了更大的操作便利性。
硬件设计方面,系统采用洞洞板(万能板)作为主板,通过焊接和杜邦线连接各个模块。这种设计方式既降低了成本,又提高了系统的可扩展性和可维护性。供电部分采用USB 5V供电,确保系统的稳定运行。同时,系统还考虑了抗干扰设计和电源管理,以提高在复杂环境下的可靠性。
软件设计方面,STM32端的代码采用C语言开发,使用Keil5作为开发工具,通过寄存器编程方式实现高效控制。APP上位机采用QT5框架开发,支持Windows和Android双平台,利用C++语言实现与硬件设备的数据交互和界面展示。通过TCP协议,APP可以实时接收和发送数据,实现远程监控和参数设置功能。
系统的设计思路以实用性、可靠性和智能化为核心,通过硬件和软件的协同设计,实现了对输液过程的全面监控和管理。这种设计不仅提高了输液过程的安全性和效率,还为医疗护理的智能化发展提供了技术支持。
1.3 系统功能总结
| 序号 | 功能模块 | 功能描述 |
|---|---|---|
| (1) | 液位监测与报警 | 使用液位传感器检测输液瓶液位,当液位低于设定值时,通过步进电机夹紧输液管并触发蜂鸣器报警。 |
| (2) | 流速检测与控制 | 通过光电测速传感器监测输液管内液体的流速,实时检测并根据设定流速调节输液速度。 |
| (3) | 步进电机控制 | 通过28BYJ4步进电机控制输液管的夹紧和松开,以确保输液流速稳定。 |
| (4) | 按键设定功能 | 提供独立按键输入,允许用户设定输液流速的上下限,并进行调节。 |
| (5) | OLED显示功能 | 通过0.96寸SPI OLED显示屏实时显示液位、流速、设定上下限等信息。 |
| (6) | WIFI通信与远程监控 | 使用ESP8266-WIFI模块通过TCP协议与APP上位机进行无线通信,传输实时数据,支持远程监控。 |
| (7) | APP远程控制与显示 | 开发的APP支持Windows和Android平台,用户可以查看流速、液位信息,并设置输液流速上下限。 |
| (8) | 电源管理 | 系统通过USB 5V供电,为所有模块提供稳定的电源供应。 |
1.4 开发工具的选择
【1】设备端开发
硬件设备端的开发主要依赖于C语言,利用该语言直接操作硬件寄存器,确保系统运行的高效性和低延迟。C语言在嵌入式开发中具有广泛的应用,它能够直接访问硬件,满足对资源消耗和响应速度的严格要求。为了编写高效、稳定的代码,开发工具选择了Keil uVision 5作为主要的开发环境。Keil是一个专业的嵌入式开发工具,广泛应用于基于ARM架构的微控制器(如STM32)开发。Keil提供了完善的调试、编译和仿真支持,能够帮助在软件开发过程中高效地进行调试、单步执行以及断点设置,确保开发的稳定性和高效性。
STM32F103RCT6是项目中使用的主控芯片,它基于ARM Cortex-M3架构,拥有强大的计算能力和丰富的外设接口。在硬件编程中,寄存器级编程是常用的方式,这要求开发者对芯片的硬件寄存器有深入的理解。在Keil环境中,通过STM32的寄存器直接控制GPIO、ADC、I2C、SPI等硬件接口,以满足各个硬件模块(如传感器、执行器、显示屏等)与主控芯片的交互。使用寄存器编程能够提供更高效、精确的控制,避免了外部库的开销,同时也能深入调控硬件特性,提升系统性能。
【2】上位机开发
本项目的上位机开发基于Qt 5框架,使用**C++**作为主要编程语言。Qt是一个跨平台的应用开发框架,广泛用于开发GUI应用程序。Qt提供了丰富的GUI组件和工具,能够高效地实现图形界面的设计与开发。C++则作为Qt的底层语言,具有高效的性能和良好的控制力,非常适合用于处理设备与系统之间的数据交互、通信协议的实现和复杂的计算任务。在项目中,Qt被用于开发Windows平台的桌面应用程序以及Android平台的手机APP。Qt框架的跨平台特性使得开发者能够使用同一套代码在不同操作系统上进行构建和部署,大大提高了开发效率。
为了方便开发和调试,上位机的开发采用了Qt Creator作为主要的集成开发环境(IDE)。Qt Creator是一款由Qt官方提供的开发工具,专为Qt应用程序开发设计,支持C++、QML和JavaScript等语言。Qt Creator提供了丰富的功能,如代码编辑、调试、构建、版本控制集成等,能够显著提升开发者的生产力。在本项目中,Qt Creator为开发者提供了自动化构建、界面设计工具(如Qt Designer)和调试工具(如QDebug和QML调试工具),使得开发过程更加高效和流畅。
上位机与硬件设备端的通信采用了基于TCP/IP协议的数据传输方式。为了实现这一功能,Qt提供了丰富的网络编程支持,尤其是QTcpSocket和QTcpServer类,使得上位机能够轻松地与硬件设备建立TCP连接,进行数据收发。上位机通过WIFI连接ESP8266-WIFI模块,ESP8266模块创建TCP服务器,上位机应用则作为客户端连接到服务器,进行实时的数据传输与控制命令的下发。
为了满足不同用户的需求,本项目需要支持Windows平台的桌面应用和Android平台的移动APP。Qt的跨平台特性使得开发人员能够在一个代码库下完成多平台应用的开发和移植。开发者仅需要编写一次应用逻辑和用户界面,就可以通过Qt的跨平台构建工具生成Windows和Android两个平台的可执行文件。此外,Qt提供了丰富的文档和社区支持,帮助开发者解决平台差异和兼容性问题,确保应用在不同平台上都能稳定运行。
总体而言,上位机开发环境采用了Qt 5框架和C++语言,结合Qt Creator集成开发环境,提供了一个高效、稳定、跨平台的开发工具链。通过Qt强大的GUI设计、网络通信、多线程支持以及数据库管理功能,开发者能够轻松实现与硬件设备的交互、控制设备、处理传感器数据,并为用户提供直观、流畅的操作体验。
1.5 参考文献
1. 广州应用科技学院.基于远程无线监控的自动输液系统设计[J].机电工程技术,2024.
2. 李水峰,袁仲鸣,陈文奕等.基于STM32智能医疗输液监控系统的设计[J].计算机测量与控制,2018.
3. 陈棵.智能输液监控系统设计[D].北华航天工业学院,2020.
4. 陈宇,王玺.基于光电技术智能输液监控系统设计[J].核电子学与探测技术,2009.
5. 汪义旺,陆军,张承成等.基于无线传感网络的智能输液监控系统设计[J].测控技术,2015.
6. 王卫鑫,卢志科,王晓雪等.可移动的智能自动输液系统设计 附视频[J].科技与创新,2024.
7. 邓健志,程小辉,杨书杰等.基于物联网的输液监控报警系统的设计[J].制造业自动化,2013.
8. 苏英,赵士伟,陈平.基于RTOS的输液监控系统的设计[J].计算机测量与控制,2006.
9. 邓成娟,严小黑.无人监守输液自动监控系统的设计[J].智能计算机与应用,2020.
10. 孙选辰,王历,俄万林等.自动输液监控系统设计[J].计算机时代,2022.
11. 周治国,林汝梁,王小军等.嵌入式智能输液控制系统设计.中国仪器仪表学会医疗仪器分会第四次全国会员代表大会暨2009年学术年会论文集,2009.
12. 侯明扬.智能输液监测控制系统的设计[D].南方医科大学,2018.
13. 贺晓蓉,吴付祥,孔若飞等.输液速度监控系统[J].医疗设备信息,2004.
14. 刘雪飞,李珊.智能点滴输液监控报警系统的设计[J].电子世界,2019.
15. 瞿犇.基于无线网络的智能输液控制系统的研制[D].南京航空航天大学,2010.
16. 张闪铭,李阳阳,沈晨等.基于蓝牙无线技术的智能医疗输液平台的设计[J].物联网技术,2017.
17. 张昱昊,朱伟康,黄磊等.基于STC89C52单片机的智能远程输液系统[J].科学技术创新,2021.
18. 果莉.点滴监控系统的研究[J].中国科技信息,2005.
19. 郭艾华.静脉输液无线监控和信息管理系统的研究与实现[D].江南大学,2009.
20. 陈文鼎.基于嵌入式系统的液滴流速监测设计与实现[D].南京理工大学,2013.
21. 史斌浩,史国川,何绵锦等.一种医用输液自动监控系统的设计[J].计算机与数字工程,2013.
22. 陈静,张建平,刘玉梅等.自动输液监控系统的设计与实现[J].软件,2006.
23. 周华明,孙崐.一款新型智能输液实验装置的设计 附视频[J].电子制作,2020.
24. 黄淮学院.远程输液监控与自动报警器的初步设计[J].无线互联科技,2014.
25. 刘伟.基于LoRa技术的智能输液监控系统研究[D].安徽理工大学,2018.
26. 王新祥,张浩鹏,范梅花.自动更换输液瓶的静脉输液监控系统[J].高师理科学刊,2020.
27. 河南理工大学电气工程与自动化学院.基于ARM的多输液器测控安全防护系统设计[J].电子测量技术,2019.
28. 韩秀莉,姜学思.智能化的液体点滴控制装置[J].大众科技,2010.
29. 张永.输液监测与控制系统设计[D].大连交通大学,2008.
30. 卢振生,付兴烨,孙勇.一种自动监控系统的输液监控器的设计[J].电子制作,2017.
1.6 系统框架图

1.7 系统原理图

1.8 实物图


1.9 模块的技术详情介绍
【1】ESP8266-WIFI模块
ESP8266-WIFI模块是一款功能强大的WiFi通信模块,广泛应用于物联网(IoT)设备中。它由Espressif Systems公司设计,并且由于其低功耗、较小的体积和较低的成本,成为了许多智能硬件项目的首选通信模块。ESP8266不仅具备WiFi无线连接功能,还具有较高的处理能力和丰富的接口资源,使其成为实现无线通信的理想选择。
ESP8266模块内置了一个完整的WiFi栈,可以直接作为WiFi客户端或AP(Access Point)工作,支持无线网络的连接、数据传输等多种功能。在设计中,ESP8266支持多种网络协议,最常见的是TCP/IP协议,允许设备与外部服务器或移动应用进行数据交换。其强大的功能使得它不仅可以连接到传统的路由器,还可以直接创建一个WiFi热点,支持设备与手机或其他WiFi设备的通信。
在硬件设计中,ESP8266模块的另一大优势是其与微控制器的高兼容性。模块通常通过串口(UART)与主控芯片进行通信,因此可以方便地与各种微控制器(如STM32、Arduino等)连接,进行数据传输。在本项目中,ESP8266模块通过串口与STM32单片机相连接,负责将本地采集的健康数据上传到Android手机APP中。数据传输采用的是TCP/IP协议,保证了通信的稳定性和可靠性。
ESP8266模块的低功耗特性也使其适用于嵌入式系统和移动设备中,尤其是在电池供电的项目中,能够有效延长设备的使用时间。通过合理的睡眠模式和待机模式,ESP8266能够在无需频繁通信时降低功耗,从而优化系统的能源使用。
总的来说,ESP8266-WIFI模块因其高集成度、低成本、强大的WiFi功能及广泛的兼容性,成为了物联网领域中一个不可或缺的通信模块。它不仅为各种嵌入式系统提供了便捷的无线网络连接方案,还极大简化了开发过程,使得开发者能够专注于核心功能的实现。本项目采用ESP8266模块,便捷地实现了STM32与Android手机APP之间的实时数据传输,为健康检测仪提供了可靠的无线通信能力。
【2】28BYJ4-5V步进电机
28BYJ4-5V步进电机是一种常见的微型步进电机,广泛应用于各种需要精确控制旋转角度和速度的场合。该电机采用5V直流供电,具有结构紧凑、成本低廉、控制简单等特点,非常适合用于小型自动化设备和嵌入式系统中。
28BYJ4-5V步进电机的内部结构采用永磁转子设计,通常包含一个四相八拍的步进机制。这意味着电机每接收一个脉冲信号,转子会旋转一个固定的角度(步距角),从而实现精确的位置控制。电机的步距角通常为5.625度,通过半步驱动方式可以将其减小至2.8125度,进一步提高控制精度。这种特性使得28BYJ4-5V步进电机非常适合用于需要精细调节的应用场景,例如自动输液监控系统中的输液管夹紧和松开操作。
该电机的驱动方式通常需要通过ULN2003驱动芯片或类似的步进电机驱动器来实现。ULN2003是一种集成了多个达林顿管的驱动芯片,能够提供足够的电流驱动步进电机的各个相位。通过STM32等微控制器向ULN2003发送脉冲信号,可以精确控制电机的旋转角度和速度。在自动输液监控系统中,这种控制方式可以确保输液管的夹紧和松开动作快速、准确,从而实现对输液流速的精确调节。
28BYJ4-5V步进电机的另一个优点是低功耗和低噪音。由于电机采用永磁转子设计,其功耗相对较低,适合用于电池供电或低功耗设备中。同时,电机的运行噪音较小,不会对医疗环境造成干扰。此外,电机的转速范围较宽,可以通过调整脉冲频率来实现不同速度的控制,满足不同应用场景的需求。
尽管28BYJ4-5V步进电机具有诸多优点,但其输出扭矩相对较小,通常适用于轻负载应用。在自动输液监控系统中,由于输液管的夹紧和松开操作所需的扭矩较小,28BYJ4-5V步进电机完全能够满足需求。然而,在需要更大扭矩的应用中,可能需要选择其他类型的步进电机或增加减速机构来提高输出扭矩。
28BYJ4-5V步进电机以其紧凑的结构、低廉的成本、精确的控制和低功耗特性,成为自动输液监控系统中电机模块的理想选择。通过合理的驱动和控制设计,该电机能够实现对输液管的精确控制,确保输液过程的安全性和可靠性。
二、硬件选型
2.1 STM32开发板
链接:https://detail.tmall.com/item.htm?id=540109077095&skuId=4456080806081&spm=a1z0d.6639537.1997196601.4.69157484Ospeps
主控CPU采用STM32F103RCT6,这颗芯片包括48 KB SRAM、256 KB Flash、2个基本定时器、4个通用定时器、2个高级定时器、51个通用IO口、5个串口、2个DMA控制器、3个SPI、2个I2C、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口,芯片属于大容量类型,配置较高,整体符合硬件选型设计。当前选择的这款开发板自带了一个1.4寸的TFT-LCD彩屏,可以显示当前传感器数据以及一些运行状态信息。

2.2 USB下载线
链接:https://detail.tmall.com/item.htm?areaId=500100&cat_id=2&id=36635861113&is_b=1&rn=b29713f11d07002439272415bce5c7e1&skuId=3762719825529&spm=a220m.1000858.1000725.31.46e677b4qLTl6B&user_id=1695056989

2.3 杜邦线(2排)
链接:https://detail.tmall.com/item.htm?ali_refid=a3_430582_1006:1104520036:N:MsF9mE9KLTC2IibWJh%20K1A==:0395c662ef512f1b59b31b906608d3&id=14466195609&skuId=3936936817454

2.4 OLED显示屏
选择7针SPI接口的0.96寸OLED显示屏。
链接:https://detail.tmall.com/item.htm?id=558395483864&ali_refid=a3_430582_1006:1104520036:N:qANI7bn9vt+gWDBhPmvEhzVt9Q0NFo+R:fa008211a33893204f641ce318dc6b3b&ali_trackid=1_fa008211a33893204f641ce318dc6b3b&spm=a230r.1.14.6&skuId=4115438843978

特点:
OLED是有机发光二极管又称为有机激光显示、OLED显示技术具有自发光的特性、采用非常薄的有机材料涂层、和玻璃基板、当有电流通过时、这些有机材料就会发光、而且OLED显示屏幕可视角大、功耗低、OLED由于同时具备自发光、不需背光源(只是供电不会亮的、驱动程序和接线正确才会点亮)对比度高、厚度薄视角广、反应速度快、可用于挠曲面板、使用温度范围广、结构及制程等优异之特性、先接触的1286屏都是LCD的、需要背光、功耗较高、而OLED的功耗低、更加适合小系统、由于两者发光材料的不同、在不同的环境中、OLED的显示效果好、模块供电可以是3.3v也可以是5V、不需要修改模块电路、OLED屏具有多个控制指令、可以控制oLED的亮度、对比度、开关升压电路等指令、操作方便、功能丰富、可显示汉字、ASCH、图案等、同时为了方便应用在产品上、预留4个M3固定孔、方便用户固在机壳上。
2.5 PCB版
链接:https://detail.tmall.com/item.htm?abbucket=9&id=525489414251&ns=1&skuId=3937268634921&spm=a230r.1.14.34.16b221829wBwAI

2.6 电源扩展接口(x2)
链接:https://item.taobao.com/item.htm?id=824064501327&pisk=fEFjn0YWOnxjbDWVdFQrdBU9b9h1Cl1F1FgT-Pd2WjhA1VEUVAdNnjks1unzgmzqM1gTYuMTbcz2o8qUJIPVnfRsifcOYM5FTE4msfI4zsVvm03sR1utXmQXpe7fYM5FTtL-1isU0CGLT03i2q3tDAQWwV3j6V3x6ai-52v9DlETyagskddtWx3Jw20j6hHtXzp–2itkmH92agi2chWRTgRh0zfrrhv3gSV8PiW6BTnlxp35dRkZrgxh5hKVYkzNqMjvY7FJFFY4PF4iYXJFf4zdlwTvgJqDJgQVvyfAIZQmVUsWo1HR0Fb57M0UeRLPAibeSHWWCUzy-HLCosXnme4Vv0-eF1nzko8oSe5S3UYYmGxyY5dRzHTUSD3ggdj9J4qgREd4KoYdVIzZBoBA1v6PvAsPD75Pdvgel6pmGJur-Hxr4YFPa9eIx3oPD75PdviH40laa_WLdf…&skuId=5538517420771&spm=pc_detail.29232929%2Fevo365560b447259.guessitem.d0

2.7 液位模块
链接:https://detail.tmall.com/item.htm?_u=o1pq7ueo0cd5&id=42779708216&spm=a1z09.2.0.0.2e7c2e8d4wdzZa

2.8 5V 28BYJ4 步进电机
链接: https://detail.tmall.com/item.htm?id=41303683115&ali_refid=a3_430582_1006:1109983619:N:2nt6mzKrI7Z4Z+4S7irb6TVt9Q0NFo+R:c6bbda7f39718df42ff324c85021cf7e&ali_trackid=1_c6bbda7f39718df42ff324c85021cf7e&spm=a230r.1.14.1

步进电机28BYJ-48名称含义:
28:表示步进电机的有效最大外径为28毫米
B: 表示步进电机“步”字汉语拼音首字母
Y: 表示永磁式“永”字汉语拼音首字母
J: 表示减速型“减”字汉语拼音首字母
BYJ: 组合即为永磁式减速步进电机
48:表示四相八拍
5V:表示额定电压为5V,且为直流电压
步进角:5.625度,就是1个脉冲信号转5.625度,64个信号转360度。
减速比:1/64,电机壳里边的电机转64圈,电机壳外边的部分转1圈。
四相:ABCD四相(电机定子上有8个齿,相对的2个齿是1相),
八拍:(A-AB-B-BC-C-CD-D-DA-A)。
一拍就是一个脉冲信号,完成一个循环用8个脉冲信号。
当通电状态的改变完成一个循环时,转子转过一个齿距。转8个齿距就是一圈,8×8=64
64拍,64个脉冲信号转一圈360度。


2.9 测速模块(模拟测量液体滴流流速)
链接:https://detail.tmall.com/item.htm?abbucket=2&id=21074372331&ns=1&priceTId=2147825617150525545825904eb644&skuId=4123992837561&spm=a21n57.1.item.8.62ad523cw1caZw

2.10 蜂鸣器模块
链接:https://detail.tmall.com/item.htm?ali_refid=a3_430582_1006:1104520036:N:X/YIdD%20/nzZWyWHIKhozj3ahdFvQYGOd:09a834d50903c653d8893f1f618eb321&ali_trackid=1_09a834d50903c653d8893f1f618eb321&id=21124132861&spm=a230r.1.14.1&skuId=4319138558993

2.11 ESP8266 WIFI
链接:https://item.taobao.com/item.htm?abbucket=2&id=669720765911&ns=1&pisk=fUroLOsKpzuWBmYmnZo5-T-emfQAwLiIPWKK9DhFujlX22ldPW039SgU20e8iXPTtvE8vk4XxRwQ2TidF0wSAD5O6GE3F8iCvRCpsuA2uAyqLLkeZ8oWUD5O6MYv341-Y7dhoLx2uAGqUvuEYtmqdAhEY2kz3tDEpQ8e4WW03jMpUeoEzqkqpAArYvkF0IknLQ8EUUoq0jMEYUlWU_lzYuEVN60eNUDcpoHorXxKiH0Qch3S_7c2Y1oIECGaUjxexb1Li_e0e_x_H0ZgsAFR03VgLRaEokAVsXZ03uzUhQXqj-4YW44caHcY2jgT4cvF4-moZVr7aMX3_-2UWqqAQGio4bzKVJpGw-quw8Z0pp8qq0UmSumNfQlLkRqnKk1Cm52UCyu0xQjPaE8aYzxIS_aMRegrhxc9E1i-MgxbsoXcnFcIzxMr6tXDRegrhxcOntYiV4kjUfC…&priceTId=2147804a17296673045032855ebf7f&skuId=4822574445585&spm=a21n57.1.item.42.656d523cJYhwBB&utparam=%7B%22aplus_abtest%22%3A%225b42f3c93ff81d4fde9ec8fd8b7d175c%22%7D&xxc=taobaoSearch

三、Qt开发入门与环境搭建
当前项目的上位机是采用Qt开发的,这一章节主要是介绍Qt开发环境的安装,以及Qt开发环境入门的使用。如果你Qt没有任何基础,建议仔细看一遍。
3.1 Qt是什么?
Qt 是一个功能强大、跨平台的应用程序开发框架,主要用于创建图形用户界面(GUI)应用程序,但它不仅仅局限于GUI编程。它由挪威的奇趣科技(TrollTech)最初于1991年开发,并在后续的发展历程中经历了多次所有权变更,包括诺基亚和Digia等公司接手,现在Qt属于The Qt Company所有。
Qt 主要特点和优势包括:
(1)跨平台:Qt 支持多种操作系统,开发者可以使用同一份源代码在不同平台上编译运行,如Windows、Linux、macOS、Android以及各种嵌入式系统(如RTOS),实现“一次编写,到处编译”。
(2)C++ 开发:Qt 的核心是基于C++编程语言构建,提供了一套丰富的类库,通过面向对象的设计方式简化了开发过程。
(3)图形用户界面:Qt 提供了完整的GUI组件集,包含窗口、按钮、标签、文本框等各种标准控件,以及布局管理器、样式表等功能,使得开发者能够高效地创建美观且功能完善的桌面应用或移动应用界面。
(4)工具链完整:Qt 包含一系列集成开发环境(IDE)和辅助工具,例如Qt Creator是一个全能的跨平台IDE,Qt Designer用于可视化拖拽设计UI界面,Qt Linguist支持国际化资源文件的翻译,还有Qt Assistant和大量文档资源方便开发者的使用。
(5)非GUI功能丰富:除了GUI功能外,Qt 还提供了众多非图形化功能模块,如网络通信、数据库访问、XML处理、多媒体处理(音频视频)、文件I/O、线程与并发处理、OpenGL和3D图形渲染等。
(6)元对象系统:Qt 使用元对象系统(Meta-Object System, MOC)实现了信号与槽机制(Signals and Slots),这是一种高级事件处理机制,允许在不同对象之间安全地进行异步通信。
(7)可扩展性与灵活性:Qt 架构高度灵活,支持插件体系结构,开发者可以根据需要自定义组件并轻松地集成到Qt应用中。
Qt 以其强大的跨平台能力和全面的功能集合成为许多企业和个人开发者选择用来开发高性能、高稳定性的应用程序的重要工具之一,被广泛应用于各类桌面软件、嵌入式设备、移动应用以及服务器端组件等领域。
3.2 Qt版本介绍
在Qt发行版本中将要涉及两个版本:Qt商业授权和Qt开源授权。
(1)Qt商业授权是设计商业软件的开发环境,这些商业软件使用了传统的商业来发布,它包含了一些更新的功能、技术上的支持和大量的解决方案,开发了使用于行业的一些特定的组件,有一些特殊的功能只在商业用户中使用。
(2)Qt开源授权是用来开发开源的软件,它提供了一些免费的支持,并遵循QPL协议。
开放源代码是免费的软件,不牵涉用户的某些权益。任何人都有使用开源软件和参与它的修改的机会,这就意味着其他的人同样可获得你开发的代码。目前 Qt 的开源授权有两种,一种是 GPL 授权,另一种是 LGPL 授权。
3.3 Qt开发环境安装
Qt的中文官网: https://www.qt.io/zh-cn/

QT5.12.6的下载地址:https://download.qt.io/archive/qt/5.12/5.12.6
如果下载不了,可以在网盘里找到安装包下载: 飞书文档记录的网盘地址:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
打开下载链接后选择下面的版本进行下载:
qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details
软件安装时断网安装,否则会提示输入账户。
安装的时候,第一个复选框里勾选一个mingw 32编译器即可,其他的不管默认就行,直接点击下一步继续安装。

选择MinGW 32-bit 编译器:

3.4 开发第一个QT程序
在QT开发过程中,可以手动编写代码也可以使用UI设计师直接拖拽控件的方式编写界面和布局,在实际的开发过程中一般是两种方式结合使用,提高开发效率。
本小节用一个简单的 “Hello QT” 程序介绍一下使用QtCreator新建工程的步骤。
(1)打开QtCreator软件,选择New Project,新建一个工程。

(2)项目模板选择QT Widgets Application

(3)设置项目名称和存放路径
注意:QT项目路径和名称不能出现中文字符。

(4)编译工具套件选择
编译工具套件可以后面自己增加,比如增加Android的。套件是指 Qt 程序从编译链接到运行环境的全部工具和 Qt 类库的集合。

(5)设置生成的类信息
在类信息设置界面选择基类,目前有三种基类:QMainWindow,QWidget,QDialog。在基类里选择QMainWindow,类名和文件名会根据基类自动修改,一般不需要修改,默认即可。

(6)项目管理
在项目管理界面可以设置作为子项目,以及加入版本控制系统。这两个功能暂时用不到,都用默认的 ,然后点击 “完成”。

(7)创建完成

(8) 编辑代码
展开main.cpp文件,添加内容如下:
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//MainWindow w;
//w.show();
QLabel *label =new QLabel("Hello Qt!");
label->setGeometry(400,100,100,20);
label->show();
return a.exec();
}
代码解析:
1) #include <QApplication>和 #include <QLabel>是QT的类声明头文件,对于每个QT类都有一个与该类同名的头文件,在这个头文件包含了对该类的定义。
2) main(int argc, char *argv[]) :main函数的标准写法。
3) QApplication a(argc, argv):创建一个QApplication对象,用于管理应用程序的资源,QApplication类的构造函数需要两个参数。
4) QLabel *label =new QLabel("Hello Qt!") :创建QLabel窗口部件,QLabel是一个Qt提供的窗口部件,可以用来显示一行文本。
5) label->setGeometry(400,100,100,20) : 设置控件显示的位置。
6) label->show():使Qlabel创建的窗口可见,就是显示设置的文本。
7) return a.exec():应用程序将控制权传递给QT,让程序进入消息循环。等待可能的菜单,工具条,鼠标等的输入,进行响应。

(9)行程序
运行程序可以点击左下角的三角形符号或者按下快捷键Ctrl+R。

3.5 调试输出
QT中使用QDebug类输出调试信息。主要用于调试代码,类似于std::cout的替代品,支持QT的数据类型。使用前需要包含头文件。
调试输出的分类
| qDebug | 调试信息提示 |
|---|---|
| qWarning | 一般的警告提示 |
| qCritical | 严重错误提示 |
| qFatal | 致命错误提示 |
示例代码:
qDebug("调试信息输出");
qWarning("一般警告信息输出");
qCritical("严重错误输出");
qFatal("致命错误输出");
qDebug输出的信息会打印到QT软件下边的输出面板。
在上节的HelloQt工程上加上调试输出代码,增加的main.cpp代码如下:
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//MainWindow w;
//w.show();
qDebug()<<"QT调试信息输出";
int data_int=8888;
qDebug()<<data_int;
float data_float=123.888;
qDebug()<<data_float;
return a.exec();
}
运行程序,观察输出的调试信息:

3.6 QT Creator常用的快捷键
掌握一些适用的快捷键,可以提高程序开发的效率。
(1)F1 键,快速切换光标选中的函数或者类的帮助信息,按一次半屏显示,按下两次全屏显示。
(2)F2 键,快速切换到光标选中的函数或者类的源码定义处。
(3)F4键,快速在源文件和头文件之间切换。
(4)Ctrl(按住)+ Tab,快速切换已打开的文件
(5)Ctrl+ I ,缩进光标选中行代码(自动与上层代码对齐)。
(6)Ctrl + / ,快速注释或者取消注释光标选中行。
(7)快速修改全局变量名
鼠标光标选中变量名,按下Ctrl+Shift+R,当变量名称出现红色框表示已经激活全局修改功能。修改一处,整个工程对应变量名称全部会修改。修改完毕之后,光标移开,再按下Ctrl+Shift+R保存修改。

(8)快速修改全局函数名
快捷方式与变量修改一样按下Ctrl+Shift+R,一处修改整个工程对应的函数名称也会跟着改。选中函数后,按下Ctrl+Shift+R后整个工程的对应的函数名会高亮,并且在软件下方弹出修改框。

3.7 QT帮助文档
Qt 帮助文档太多,难以全部翻译成中文,即使翻译了一部分,翻译花的时间太多,翻译更新的时效性也难以保证,最终还是得看英文帮助,QtCreator 集成了帮助系统,查找非常方便。
打开QtCreator,选择菜单栏的最左边的帮助选项,界面如下:

(1)查看Qlabel控件的帮助信息:

3.8 UI设计师使用
上节的Hello QT程序使用纯C++代码编写,这一节使用QT界面设计模式实现与上一节Hello QT程序一样的功能。仿照着上节新创建一个工程。双击打开mainwindow.ui文件,进入到UI设计界面。
(1)拖一个Label控件到编辑区,双击Label控件可以修改文本内容。

(2)运行程序可以点击左下角的三角形符号或者按下快捷键Ctrl+R。

(3)UI设计师界面功能介绍

3.9 按钮控件组
QT Creator UI设计师界面的按钮组截图如下:

以下是对按钮组控件的一些功能介绍:
(1)Push Button按压按钮:最普通的按钮,按(点击)按钮命令计算机执行一些动作,或者回答问题,比如windows开始菜单里的重启,注销,关机等按钮。
(2)Tool Button工具按钮:工具按钮通常是一个集合,一般集成在工具栏里。比如打开,保存,复制,粘贴,剪切等常用的操作。
(3)Radio Button单选按钮:单选按钮通常是两个以上的形式出现在一块,按钮之间有互斥关系,每次只能选中一个。比如:一个人的性别只能选择一个,不能同时是男性又是女性。
(4)Check Box复选框:复选框与单选按钮概念相反,复选框通常表示多个可以同时存在的选项,比如一个人可以同时拥有多个爱好,比如读书、看电影、爬山、游泳等。
(5)Command Link Button命令链接按钮:一般用来打开的窗口或者网页链接。
(6)Dialog Button Box标准按钮盒:标准按钮盒通常用于对话框程序;比如:常见的确认对话框有 “确定”“取消”等标准按钮,Qt 将这些典型的按钮做成标准按钮盒,并将相应的信号加以封装,方便程序员使用。
3.10 布局控件组
开发一个图形界面应用程序,界面的布局影响到界面的美观。前面的程序中都是使用UI界面拖控件,如果有多个按钮,会出现大小难调整、位置难对齐等问题。Qt 提供的“布局管理“就很好的解决了控件摆放的问题。
以下是UI设计师界面的布局相关控件组:

功能介绍:
(1)Vertical Layout:垂直布局
(2)Horizontal Layout:水平布局
(3)Grid Layout:网格布局
(4)Form Layout:窗体中布局
(5)Horizontal Spacers:水平空格,在布局中用来占位。
(6)Vertical Spacer:垂直空格,在布局中用来占位。

3.11 基本布局控件
在UI设计界面添加一个布局控件,然后将需要布局的其他控件放入布局控件中即可完成布局,布局控件可以互相嵌套使用。(本节只介绍基本布局控件的使用)
以下是4种布局控件的效果:

3.12 UI设计师的布局功能
在UI设计界面的左上角有一排快捷的布局选项,使用时选中两个以上的控件,点击其中一种布局方式就可以切换布局。
以下为布局的简单示例图:

(1)为布局的选项。
(2)控件层次图,可以看到控件的布局摆放层次。
如果想要控制某个控件的固定大小,不随着布局改变大小,可以限定最大最小尺寸。选中控件鼠标右键–>大小限定->设置大小。

水平布局与垂直布局:


水平布局将控件按照水平方式摆放,垂直布局将控件按照垂直方式摆放。鼠标拖动红色布局框上的黑色方点,可以调整布局框的大小。随着布局框的尺寸变化,包含的控件高度不会变化,宽度会随着布局框变化。选中其中一个控件然后鼠标右键>点击大小限定,可以限定控件的最大和最小尺寸。
分裂器水平布局与垂直布局:


分裂器方式布局,包含控件的高度和宽度都会随着布局框的拉伸而改变。选中其中一个控件然后鼠标右键>点击大小限定,可以限定控件的最大和最小尺寸。
窗体中布局与栅格布局:

栅格(网格)布局器的基本单元是单元格,而窗体中布局(表单)的基本单元是行。随着布局框的尺寸变化,包含的控件高度不会变化,宽度会随着布局框变化。
设置主窗体布局方式:
设置主窗体的布局方式后,包含在主窗体内的控件会随着窗体的拉伸自动调整大小。


四、 ESP8266-WIFI模块调试过程
如果是转接板,只需要接 TXD RXD VCC GND即可。
视频:https://www.bilibili.com/video/BV1ku4y1E74M
4.1 接电脑USB口调试

4.2 ESP8266的STA+TCP客户端配置
按下面的命令顺序配置,测试WIFI的链接。
//STA+TCP客户端模式
char *ESP8266_STA_Client[]=
{
"AT\r\n",
"ATE0\r\n",
"AT+CWMODE=1\r\n",
"AT+RST\r\n",
"ATE0\r\n",
"AT+CWLAP\r\n", //查询可以连接WIFI
"AT+CWJAP=\"ChinaNet-wbyw\",\"12345678\"\r\n",
"AT+CIPMUX=0\r\n",
"AT+CIPMODE=1\r\n",
"AT+CIPSTART=\"TCP\",\"117.78.5.125\",1883\r\n",
"AT+CIPSEND\r\n",
};
以下是每个指令的解释:
(1)“AT\r\n”:这是用于测试ESP8266模块是否正常工作的基本指令。发送此指令后,模块应该回复 “OK\r\n”。
(2)“ATE0\r\n”:这个指令用于关闭回显功能。当回显功能关闭时,模块不会将接收到的指令发送回串口。回复 “OK\r\n” 表示指令执行成功。
(3)“AT+CWMODE=1\r\n”:这个指令设置ESP8266模块为STA(站点)模式,即将其配置为连接到现有无线网络的客户端。回复 “OK\r\n” 表示指令执行成功。
(4)“AT+RST\r\n”:这个指令用于重启ESP8266模块。模块将重新启动并返回 “ready\r\n” 表示准备就绪。
(5)“ATE0\r\n”:同第二条指令一样,这个指令再次关闭回显功能。
(6)“AT+CWLAP\r\n”:这个指令用于查询附近可连接的无线网络。模块将返回一个列表,包含可用网络的信息。
(7)“AT+CWJAP=“ChinaNet-wbyw”,“12345678”\r\n”:这个指令用于连接到指定的无线网络。在此示例中,通过SSID为 “ChinaNet-wbyw” 的无线网络,并使用密码 “12345678” 进行连接。回复 “OK\r\n” 表示指令执行成功。
(8)“AT+CIPMUX=0\r\n”:这个指令用于禁用多连接模式。回复 “OK\r\n” 表示指令执行成功。
(9)“AT+CIPMODE=1\r\n”:这个指令用于设置传输模式为透明传输模式。在透明传输模式下,ESP8266模块将直接将串口数据发送到网络连接中。回复 “OK\r\n” 表示指令执行成功。
(10)“AT+CIPSTART=“TCP”,“117.78.5.125”,1883\r\n”:这个指令用于建立与指定TCP服务器的连接。在此示例中,将与IP地址为 “117.78.5.125”、端口号为1883的服务器建立连接。回复 “OK\r\n” 表示指令执行成功。
(11)“AT+CIPSEND\r\n”:这个指令用于发送数据到已建立的TCP连接。发送此指令后,模块将进入发送模式,并等待用户输入要发送的数据。可以通过向模块发送数据来进行通信。
五、上位机开发
为了方便查看设备上传的数据,接下来利用Qt开发一款Android手机APP 和 Windows上位机。
使用华为云平台提供的API接口获取设备上传的数据,进行可视化显示,以及远程控制设备。
5.1 Qt开发环境安装
Qt的中文官网: https://www.qt.io/zh-cn/

QT5.12.6的下载地址:https://download.qt.io/archive/qt/5.12/5.12.6
打开下载链接后选择下面的版本进行下载:

如果下载不了,可以在网盘里找到安装包下载: 飞书文档记录的网盘地址:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
软件安装时断网安装,否则会提示输入账户。
安装的时候,第一个复选框里的编译器可以全选,直接点击下一步继续安装。

选择编译器: (一定要看清楚了)

5.2 新建上位机工程
前面2讲解了需要用的API接口,接下来就使用Qt设计上位机,设计界面,完成整体上位机的逻辑设计。
【1】新建工程

【2】设置项目的名称。

【3】选择编译系统

【4】选择默认继承的类

【5】选择编译器

【6】点击完成

【7】工程创建完成

5.3 切换编译器
在左下角是可以切换编译器的。 可以选择用什么样的编译器编译程序。
目前新建工程的时候选择了2种编译器。 一种是mingw32这个编译Windows下运行的程序。 一种是Android编译器,可以生成Android手机APP。
不过要注意:Android的编译器需要配置一些环境才可以正常使用,这个大家可以网上找找教程配置一下就行了。
windows的编译器就没有这么麻烦,安装好Qt就可以编译使用。
下面我这里就选择的 mingw32这个编译器,编译Windows下运行的程序。

5.4 编译测试功能
创建完毕之后,编译测试一下功能是否OK。
点击左下角的绿色三角形按钮。

正常运行就可以看到弹出一个白色的框框。这就表示工程环境没有问题了。 接下来就可以放心的设计界面了。

5.5 设计UI界面与工程配置
【1】打开UI文件

打开默认的界面如下:

【2】开始设计界面
根据自己需求设计界面。
一共设计了2个页面。


5.6 设计代码
下面会解释本项目里上位机设计中,非常重要的几段功能实现代码。
【1】TCP客户端代码
这是上位机里,点击连接服务器按钮 之后,调用的一系列的函数。完成服务器连接。

(1)on_pushButton_connect_dev_clicked 函数
- 功能:处理“连接设备”按钮的点击事件。
- 逻辑:
- 如果按钮当前显示为“连接”,则调用
NewClinet()函数,尝试连接服务器。 - 如果按钮当前显示为“断开”,则关闭当前的TCP客户端连接(
LocalTcpClientSocket->close())。
- 如果按钮当前显示为“连接”,则调用
- 作用:根据按钮的当前状态,决定是连接服务器还是断开连接。
(2)NewClinet 函数
- 功能:创建TCP客户端并尝试连接服务器。
- 逻辑:
- 清理旧的连接:如果
LocalTcpClientSocket已存在,则关闭并删除它。 - 创建新的TCP客户端:使用
QTcpSocket创建一个新的TCP客户端。 - 设置服务器IP地址:从界面输入框
lineEdit_dev_ip中获取服务器IP地址,并转换为QHostAddress类型。 - 关闭代理:设置客户端不使用代理(
QNetworkProxy::NoProxy)。 - 连接信号槽:
connected():连接成功时触发LocalTcpClientConnectedSlot()函数。disconnected():连接断开时触发LocalTcpClientDisconnectedSlot()函数。readyRead():当有数据可读时触发LocalTcpClientReadDtatSlot()函数。
- 尝试连接服务器:从界面输入框
lineEdit_dev_port中获取端口号,并调用connectToHost()连接服务器。
- 清理旧的连接:如果
- 作用:初始化TCP客户端并尝试连接指定的服务器。
(3)LocalTcpClientConnectedSlot 函数
- 功能:处理TCP客户端连接成功后的操作。
- 逻辑:
- 将按钮文本设置为“断开”。
- 设置连接状态标志
dev_ConnectStat为1,表示连接成功。 - 更新界面上的连接状态标签
label_connect_state,显示“已连接设备”。
- 作用:在连接成功后更新界面状态和标志。
(4)SendCmd 函数
- 功能:向设备发送指令。
- 逻辑:
- 检查设备是否已连接(
dev_ConnectStat是否为1)。 - 如果已连接,则将指令
cmd转换为UTF-8格式并通过TCP客户端发送(LocalTcpClientSocket->write())。 - 如果未连接,则弹出提示框,提示用户先连接设备。
- 检查设备是否已连接(
- 作用:向已连接的设备发送指令,并在未连接时提醒用户。
(5)总结
- 这段代码的核心功能是实现TCP客户端的连接、断开以及数据发送。
- 通过按钮点击事件触发连接或断开操作。
- 连接成功后,更新界面状态并允许发送指令。
- 发送指令时,会检查连接状态,确保设备已连接后再发送数据。
【2】数据上传解析处理代码
这是上位机里,收到服务器(硬件设备端)发送过来的数据之后,按协议解析数据,然后更新UI界面显示。

这段代码的功能是处理从硬件设备端通过TCP连接发送过来的数据,解析数据后更新上位机界面的显示。
(1)数据接收
QByteArray text = LocalTcpClientSocket->readAll();- 从TCP客户端套接字中读取所有接收到的数据,并将其存储在
QByteArray类型的变量text中。
- 从TCP客户端套接字中读取所有接收到的数据,并将其存储在
QTextCodec *tc = QTextCodec::codecForName("GBK");- 创建一个GBK编码的文本编解码器,用于将接收到的字节数据转换为字符串。
QString array = tc->toUnicode(text);- 将接收到的字节数据按照GBK编码转换为
QString类型的字符串array。
- 将接收到的字节数据按照GBK编码转换为
qDebug() << "array:" << array;- 使用
qDebug()输出接收到的原始数据,便于调试。
- 使用
(2)数据协议解析
-
if(array.at(0) == "#")- 检查接收到的数据是否以
#开头,这是协议中定义的数据包起始标志。
- 检查接收到的数据是否以
-
array.remove("#");- 如果数据以
#开头,则移除#,以便后续解析数据内容。
- 如果数据以
-
数据格式说明
- 数据格式为:
#剩余药液,输液流速,输液开关,流速设置 - 示例:
#120,30,1,20,表示:- 剩余药液:120单位
- 输液流速:30单位
- 输液开关:1(开启)
- 流速设置:20单位(上限值)
- 数据格式为:
(3)数据提取
-
定义变量
int speed = 0;:实时输液流速。int angle = 20;:流速上限设置值。int water_level;:剩余药液量。int motor = 0;:输液开关状态(0表示关闭,1表示开启)。
-
提取数据
- 使用
section()方法按逗号,分割字符串,提取各个字段的值:tmp_data = array.section(',', 0, 0);- 提取第一个字段(剩余药液量),并转换为整型
water_level。
- 提取第一个字段(剩余药液量),并转换为整型
tmp_data = array.section(',', 1, 1);- 提取第二个字段(实时输液流速),并转换为整型
speed。
- 提取第二个字段(实时输液流速),并转换为整型
tmp_data = array.section(',', 2, 2);- 提取第三个字段(输液开关状态),并转换为整型
motor。
- 提取第三个字段(输液开关状态),并转换为整型
tmp_data = array.section(',', 3, 3);- 提取第四个字段(流速上限设置值),并转换为整型
angle。
- 提取第四个字段(流速上限设置值),并转换为整型
- 使用
(4)更新UI界面
-
显示实时流速
ui->label_speed->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);- 设置
label_speed标签的文本对齐方式为水平和垂直居中。
- 设置
ui->label_speed->setText(QString("%1").arg(speed));- 将实时流速
speed显示在label_speed标签中。
- 将实时流速
-
显示剩余药液量
ui->label_water_level->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);- 设置
label_water_level标签的文本对齐方式为水平和垂直居中。
- 设置
ui->label_water_level->setText(QString("%1").arg(water_level));- 将剩余药液量
water_level显示在label_water_level标签中。
- 将剩余药液量
-
更新输液开关状态
ui->pushButton_motor->setChecked(motor);- 根据
motor的值(0或1)设置pushButton_motor按钮的选中状态。
- 根据
-
更新流速上限设置值
if(sync_flag)- 检查同步标志
sync_flag是否为真。
- 检查同步标志
sync_flag = false;- 将同步标志设置为
false,表示已完成同步。
- 将同步标志设置为
ui->spinBox_speed->setValue(angle);- 将流速上限设置值
angle显示在spinBox_speed微调框中。
- 将流速上限设置值
(5)代码功能总结
- 该函数的主要功能是:
- 从TCP连接中读取硬件设备端发送的数据。
- 按照协议解析数据,提取剩余药液量、实时流速、输液开关状态和流速上限设置值。
- 将解析后的数据更新到上位机界面的对应控件中,实现实时监控和显示。
5.5 编译Windows上位机
点击软件左下角的绿色三角形按钮进行编译运行。

编译之后的效果:


5.6 配置Android环境
如果想编译Android手机APP,必须要先自己配置好自己的Android环境。(搭建环境的过程可以自行百度搜索学习)
然后才可以进行下面的步骤。
【1】选择Android编译器
选择编译器。

切换编译器。

【2】创建Android配置文件



创建完成。

【3】配置Android图标与名称

【4】编译Android上位机
Qt本身是跨平台的,直接选择Android的编译器,就可以将程序编译到Android平台。
然后点击构建。

成功之后,在目录下可以看到生成的apk文件,也就是Android手机的安装包,电脑端使用QQ发送给手机QQ,手机登录QQ接收,就能直接安装。
生成的apk的目录在哪里呢? 编译完成之后,在控制台会输出APK文件的路径。
知道目录在哪里之后,在Windows的文件资源管理器里,找到路径,具体看下图,找到生成的apk文件。

-- File: D:/QtProject/build-322_QtProject-Android_for_arm64_v8a_Clang_Qt_5_12_6_for_Android_ARM64_v8a-Release/android-build//build/outputs/apk/debug/android-build-debug.apk
安装运行效果:
5.7 设备仿真调试
通过TCP调试助手创建TCP服务器。使用上位机APP链接,进行设备联调,实现数据上传与下发测试。



上传到APP的数据格式:
#剩余药液,输液流速,输液开关,流速设置
#12,13,1,44
六、STM32代码设计
6.1 硬件连线说明
硬件连接方式:
【1】OLED显示屏(这个不用接,可以直接插到开发板本身的排母插槽里)
VCC----------3.3V
GND----------GND
D0-SCL-------PC8
D1-SDA-------PC9
RES-RST------PC10
DC-----------PB7
CS-----------PB8
【2】液位模块
VCC--->3.3V
GND--->GND
AO---->PA1
【3】5V 28BYJ4 步进电机
ULN2003控制28BYJ-48步进电机接线:
ULN2003接线:
IN-D: PB15 d
IN-C: PB14 c
IN-B: PB13 b
IN-A: PB12 a
+ : 5V
- : GND
【4】测速模块(模拟测量液体滴流流速)
VCC--->5V
GND--->GND
AO---->PB4
【5】蜂鸣器模块
VCC--->5V
GND--->GND
AO---->PC7
【6】板载按键(这个不用接,这是开发板本身的)
K0---PA0
K1---PC5
K2---PA15
【7】板载LED灯(这个不用接,这是开发板本身的)
LED1---PA8
LED2---PD2
【8】 ESP8266-WIFI模块
PA2------>ESP826的RXD
PA3------>ESP826的TXD
GND---GND 地
VCC---VCC 电源(5.0V)
6.2 硬件原理图

6.3 硬件组装过程
照着设计文档第二章买回来硬件模块。 然后照着硬件连线章节的连线说明,将模块与STM32开发板之间连接好线。
可以花费1个小时看下一下下面的视频。这两个就是演示如何自己动手复刻项目公共案例视频。
视频1:https://www.bilibili.com/video/BV1SC411G7D3
视频2:https://www.bilibili.com/video/BV1ar421x7rt
6.4 硬件实物图

6.5 KEIL工程截图

6.6 程序下载
也有视频教程:
讲解如何编译代码,下载STM32程序: https://www.bilibili.com/video/BV1Cw4m1e7Yc
打STM32的keil工程,编译代码、然后,使用USB线将开发板的左边的USB口(串口1)与电脑的USB连接,打开程序下载软件下载程序。
具体下载过程看下面图:

打开程序下载软件:[软件就在资料包里的软件工具目录下]

6.7 程序正常运行效果
设备运行过程中会通过串口打印调试信息,我们可以通过串口打印了解程序是否正常。
程序下载之后,可以打开串口调试助手查看程序运行的状态信息。[软件就在资料包里的软件工具目录下]

6.8 取模软件的使用
显示屏上会显示中文,字母,数字等数据,可以使用下面的取模软件进行取模设置。
[软件就在资料包里的软件工具目录下]

打开软件之后:

6.9 WIFI模块与服务器通信
代码在main.c的main函数里。
这段代码是STM32通过WIFI模块将组合好的设备数据以TCP协议上传到APP上位机的功能实现。

这段代码的功能是将设备的状态数据通过WIFI模块上传到手机APP:
(1)if(ESP8266_ConnectState):
- 判断WIFI模块(ESP8266)是否已经连接到手机APP。
ESP8266_ConnectState是一个标志位,表示WIFI模块的连接状态。如果为真(已连接),则执行后续的数据上传操作。
(2)sprintf(data_buff,"#%d,%d,%d,%d",water_level,speed,motor,angle);:
- 将设备的状态数据格式化为字符串,并存储到
data_buff缓冲区中。格式化字符串的格式为#剩余药液,输液流速,输液开关,流速设置,具体含义如下:water_level:当前输液瓶中的剩余液位。speed:当前输液的流速。motor:电机状态(夹紧或松开输液管)。angle:流速设置的上下限值。
(3)if(ESP8266_ConnectState):
- 再次检查WIFI模块是否连接。如果连接成功,则执行数据发送操作。
(4)ESP8266_ServerSendData(0,(u8*)data_buff,strlen(data_buff));:
- 调用
ESP8266_ServerSendData函数,将data_buff中的数据通过WIFI模块发送给手机APP。参数说明:0:表示发送到TCP服务器的第一个连接(如果有多个连接)。(u8*)data_buff:将data_buff强制转换为无符号8位整型指针,作为发送的数据。strlen(data_buff):计算data_buff中字符串的长度,作为发送数据的长度。
(5)printf("更新数据: %s\r\n",data_buff);:通过串口打印发送的数据内容,用于调试和监控。
(6)else:如果WIFI模块未连接,则通过串口打印提示信息上位机未连接,无法上传数据...,表示数据无法发送。
(7)总结
这段代码的核心功能是将设备的液位、流速、电机状态和流速设置等数据打包成字符串,并通过WIFI模块发送到手机APP。
6.10 硬件初始化
代码在main.c的main函数里。
这份代码是在设备上电的时候执行,完成硬件初始化配置。

这段代码是在STM32设备上电时进行硬件初始化配置的过程,以下是每行代码的功能含义解释:
(1)JTAG_Set(JTAG_SWD_DISABLE);
禁用JTAG调试接口的SWD功能,释放PA15引脚,让按键模块能够使用该引脚。
(2)LED_Init();
初始化板载LED,可能是用于指示设备的状态。
(3)BEEP_Init();
初始化蜂鸣器模块,设置蜂鸣器工作状态,用于报警提示。
(4)KEY_Init();
初始化板载按键,用于用户输入或操作。
(5)USART1_Init(115200);
初始化串口1,波特率设置为115200,主要用于调试输出或数据打印。
(6)hardware_init();
初始化其他硬件设备,包括与应用相关的外设。
(7)ADC_Init();
初始化ADC(模数转换器),用于液位传感器的模拟量采集。
(8)TIMER1_Init(7200, 15000);
初始化定时器1,设置定时器计数频率和重载值(用于中断)。这里设置为每1秒产生一次中断,用于重置转速。
(9)Moto_Init();
初始化步进电机控制,可能是用于控制输液管的夹紧或松开。
(10)USART2_Init(115200);
初始化串口2,波特率为115200,用于与ESP8266-WIFI模块通信,进行数据传输。
(11)TIMER2_Init(72, 20000);
初始化定时器2,用于接收ESP8266串口2的数据,超时时间为20ms。
(12)OLED_Init(0xc8, 0xa1);
初始化OLED显示屏,设置显示模式为正常显示。
(13)OLED_Clear(0);
清空OLED显示屏,设置为黑色(关闭显示)。
(14)总结
这段代码完成了设备的初始化,包括硬件设备(LED、蜂鸣器、按键、步进电机)、通信接口(串口、Wi-Fi模块)、外设(ADC、OLED显示屏)等的配置和初始化,使系统能够正常工作。
6.11 WIFI模块-初始化
代码在main.c的main函数里。
这是设备上电执行的WIFI模块初始化配置代码。

这段代码的功能是在设备上电时对ESP8266 WIFI模块进行初始化检测和配置:
(1)OLED屏幕初始化显示
OLED_Clear(0);:- 清空OLED屏幕,填充黑色(
0表示黑色)。
- 清空OLED屏幕,填充黑色(
OLED_ShowString(0,16*0,16,"init ESP8266...");:- 在OLED屏幕的第一行显示字符串
init ESP8266...,表示正在初始化ESP8266模块。
- 在OLED屏幕的第一行显示字符串
OLED_RefreshGRAM();:- 将显存中的数据刷新到OLED屏幕上,确保显示内容更新。
(2)ESP8266模块初始化检测
for(i=0;i<5;i++):- 尝试最多5次初始化ESP8266模块,如果成功则跳出循环。
if(ESP8266_Init()==0):- 调用
ESP8266_Init()函数初始化ESP8266模块。如果返回值为0,表示初始化成功。 - 初始化成功后的操作:
- 在OLED屏幕上显示
ESP8266 Init Ok。 - 延时3秒(
delay_ms(1000)),让用户有时间看清屏幕显示。 - 设置
run_state=1,表示WIFI模块初始化成功。
- 在OLED屏幕上显示
- 调用
else:- 如果初始化失败,执行以下操作:
connect_cnt++:记录初始化失败的次数。- 在OLED屏幕上显示
ESP8266 ERROR->加上失败次数(connect_cnt)。 - 设置
run_state=0,表示WIFI模块初始化失败。 - 通过串口打印
ESP8266硬件检测错误.,用于调试。
- 如果初始化失败,执行以下操作:
(3)WIFI热点创建与TCP服务器配置
if(run_state==1):- 如果WIFI模块初始化成功(
run_state==1),则继续配置WIFI热点和TCP服务器。
- 如果WIFI模块初始化成功(
- OLED屏幕显示WIFI热点信息:
- 在OLED屏幕上显示
Create WIFI....,表示正在创建WIFI热点。 - 显示WIFI热点的名称(
WIFI_NAME)和密码(WIFI_PASS)。
- 在OLED屏幕上显示
run_state=ESP8266_AP_TCP_Server_Mode(WIFI_NAME,WIFI_PASS,8888);:- 调用
ESP8266_AP_TCP_Server_Mode函数,配置ESP8266模块为AP模式,创建WIFI热点,并启动TCP服务器,端口号为8888。
- 调用
- 配置结果判断:
- 如果配置成功(
run_state==0),在OLED屏幕上显示WIFI Create OK..。 - 如果配置失败,显示
WIFI CreateERROR。
- 如果配置成功(
- 延时3秒:
- 延时3秒,方便用户查看屏幕上的显示信息。
(4)清屏与结束
OLED_Clear(0x00);:- 清空OLED屏幕,填充黑色。
OLED_RefreshGRAM();:- 刷新OLED屏幕,确保清屏操作生效。
(5)总结
这段代码的主要功能是:
- 初始化ESP8266 WIFI模块,并检测其是否正常工作。
- 配置ESP8266为AP模式,创建WIFI热点,并启动TCP服务器,等待手机APP连接。
- 通过OLED屏幕显示初始化状态和WIFI热点信息,方便用户查看设备状态。
- 通过串口打印调试信息,便于开发者监控初始化过程。
如果初始化成功,设备将进入正常运行状态;如果失败,则会提示错误信息并停止后续操作。
6.13 按键的逻辑代码
这是项目里按键的逻辑代码。

这段代码实现了设备板载按键的逻辑处理。
(1)key=KEY_Scan();
调用KEY_Scan()函数扫描按键状态,并将扫描结果存储在变量key中。key的值会根据按下的按键不同而有所不同。
(2)if(key) printf(“key=%d\r\n”, key);
如果key的值不为0(即有按键被按下),则通过串口打印当前按键的编号。
(3)if(key==1)
如果按下的是第一个按键(key == 1),执行以下操作:
- 打印“打开和关闭输液滴流开关”提示。
- 根据当前
motor(步进电机状态)来控制电机的转动:- 如果
motor的值为1,表示电机当前处于开启状态,执行电机反向旋转操作,通过Motorccw_angle(angle, 300)来使电机按照指定角度反向转动。 - 如果
motor的值为0,表示电机当前处于关闭状态,执行电机正向旋转操作,通过Motorcw_angle(angle, 300)来使电机按照指定角度正向转动。
- 如果
- 同时,电机的状态
motor会进行切换,反向或正向旋转。
(4)else if(key==2)
如果按下的是第二个按键(key == 2),则增加流速设置:
- 增加
angle的值,表示流速增大。angle是控制电机转动角度的变量,增大角度意味着加快流速。 - 限制最大流速:如果
angle超过350,则将angle设置为350。
(5)else if(key==3)
如果按下的是第三个按键(key == 3),则减少流速设置:
- 减小
angle的值,表示流速减慢。减少角度意味着降低流速。 - 限制最小流速:如果
angle小于10,则将angle设置为10。
(6)总结
这段代码实现了根据不同按键输入的功能
- 按下第一个按键控制输液滴流开关,进而控制步进电机的正向或反向旋转。
- 按下第二个和第三个按键分别增加或减少流速(通过调整
angle的值)。
6.14 项目的主循环核心代码
主循环代码里完成了数据读取,数据上传。

以下是代码功能的详细分块解释:
(1)定时任务触发
if(time_cnt>50) {
time_cnt=0;
...
}
- 功能:每隔50个计数周期执行一次核心逻辑(具体周期由定时器中断累加
time_cnt决定)。 - 细节:假设定时器中断间隔为10ms,50次即500ms(0.5秒)执行一次数据更新和显示。
(2)系统状态指示
LED1=!LED1;
LED2=!LED2;
- 功能:翻转LED1和LED2的状态,作为系统运行的“心跳指示灯”。
- 意义:通过LED闪烁提示用户设备正在正常运行。
(3)液位监测与处理
water_level=Get_AdcCHx_DATA(1);
water_level= adcToPercentage(water_level, minValue, maxValue);
if(water_level<5) {
BEEP=1; //触发蜂鸣器报警
motor=0; //关闭电机(停止输液)
Motorccw_angle(angle,300); //电机反向转动(松开输液管)
}
- 流程:
- 通过ADC读取液位传感器的原始值。
- 将原始值转换为百分比(
adcToPercentage函数)。 - 液位低于5%时触发报警,停止输液并松开输液管。
- 关键函数:
Get_AdcCHx_DATA(1):读取ADC通道1的液位传感器数据。adcToPercentage:根据传感器特性将ADC值映射为液位百分比。
(4)流速计算与显示
sprintf(data_buff,"%d",speed);
OLED_ShowString(72,16*1,16,data_buff);
- 功能:显示当前输液流速(
speed变量)。 - 隐含逻辑:
speed可能通过外部中断统计光电传感器的脉冲数计算得出(代码中未直接体现,需结合其他代码)。
(5)OLED界面更新
OLED_Clear(0x00);
//显示剩余药液、流速、开关状态、设置值
OLED_ShowChineseFont(...); //中文字符显示
OLED_RefreshGRAM();
- 显示内容:
- 第1行:剩余药液百分比(
water_level%)。 - 第2行:当前流速(
speed值)。 - 第3行:输液开关状态(“开启”或“关闭”)。
- 第4行:流速设置值(
angle)。
- 第1行:剩余药液百分比(
- 关键技术:通过预存储的中文字库(
OLED_ShowChineseFont)实现中文显示。
(6)数据上传至APP
if(ESP8266_ConnectState) {
sprintf(data_buff,"#%d,%d,%d,%d",water_level,speed,motor,angle);
ESP8266_ServerSendData(0,(u8*)data_buff,strlen(data_buff));
}
- 数据格式:
#剩余药液,输液流速,输液开关,流速设置(如#30,120,1,150)。 - 传输协议:通过TCP协议发送字符串,APP端需解析此格式。
- 依赖条件:
ESP8266_ConnectState为1(表示WIFI连接正常)。
(7)WIFI指令接收与响应
if(USART2_RX_FLAG) {
//解析接收到的数据
if(strstr((char*)USART2_RX_BUFFER,"motor:1")) motor=1; //开启输液
if(strstr((char*)USART2_RX_BUFFER,"angle:")) angle=atoi(p+6); //设置流速
//更新连接状态
if(strstr(...,"0,CLOSED")) ESP8266_ConnectState=0;
if(strstr(...,"0,CONNECT")) ESP8266_ConnectState=1;
}
- 功能:解析手机APP通过WIFI发送的指令:
- 控制输液开关:
motor:1或motor:0。 - 设置流速:
angle:150(示例值为150)。 - 更新连接状态:检测TCP连接建立(
0,CONNECT)或断开(0,CLOSED)。
- 控制输液开关:
- 关键技术:
- 字符串匹配(
strstr)解析指令。 - 数据转换(
atoi)将字符串数值转换为整数。
- 字符串匹配(
(8)异常处理与安全机制
if(water_level<5) {
BEEP=1; //报警
motor=0; //强制停止输液
Motorccw_angle(...); //松开输液管
}
- 安全逻辑:液位低于5%时自动停止输液,防止空气进入血管。
- 硬件动作:
- 蜂鸣器持续报警。
- 步进电机反转(
Motorccw_angle),松开输液管。
(9)主循环的核心流程
- 定时触发:每0.5秒执行一次数据更新。
- 数据采集:读取液位、流速等传感器数据。
- 状态显示:更新OLED界面,显示关键参数。
- 安全检测:液位过低时触发报警并停止输液。
- 数据上传:通过WIFI发送实时数据到APP。
- 指令响应:解析APP下发的控制指令并执行。
- 连接管理:监控WIFI连接状态,确保通信可靠。
七、使用STM32代码的流程以及注意事项
7.1 第1步
照着设计文档,买回来硬件模块。 然后照着前面章节的硬件连线说明,将模块与STM32开发板之间连接好线。
可以花费1个小时看下一下下面的视频。这两个就是演示如何自己动手复刻项目公共案例视频。
视频1:https://www.bilibili.com/video/BV1SC411G7D3
视频2:https://www.bilibili.com/video/BV1ar421x7rt
7.2 第2步
打STM32的keil工程,编译代码、然后,使用USB线将开发板的左边的USB口(串口1)与电脑的USB连接,打开程序下载软件下载程序。
具体下载过程看下面图:

打开程序下载软件:

7.3 第3步
打开手机APP 或者 电脑上位机,连接ESP8266-WIIF创建的热点,打开APP连接就可以通信了。
开题报告
(一)选题来源与背景
本课题来源于现代医疗护理领域对输液安全性和智能化监控需求的不断提升。输液是临床治疗中最常见的给药方式之一,但传统的输液监护主要依靠医护人员或病人家属的人工观察,存在一定的滞后性和不可靠性,容易因疏忽导致输液管内空气进入、输液速度异常、液体输尽未及时更换等问题,进而影响患者的安全。
随着物联网、嵌入式系统和无线通信技术的发展,智能化输液监控系统逐渐成为研究热点。通过自动化监测和远程报警功能,可以有效提高输液过程的安全性,减少医护人员的工作负担,并改善病人的治疗体验。本课题基于STM32F103RCT6单片机,结合液位传感器、光电测速传感器、步进电机控制、OLED显示、ESP8266无线通信等技术,设计并实现一款能够实时监测输液状态、自动调节输液速度、提供报警提醒并支持APP远程监控的智能输液系统。
本系统适用于医院病房、养老院及家庭护理场景,能够有效提高输液过程的智能化和安全性,减少人为干预的风险,同时为未来智能医疗设备的研发提供参考。
(二)研究目的
本课题的研究目的是设计并实现一款基于STM32的智能输液监控系统,以提高输液过程的安全性和智能化水平。传统的输液过程通常依赖医护人员或病人家属的人工监测,存在滞后性和不确定性,容易导致输液液位过低未及时处理、输液流速异常未被察觉等问题,进而影响患者的治疗效果甚至引发医疗事故。因此,本研究旨在利用现代嵌入式技术和无线通信技术,实现输液过程的自动化监测和智能控制,提高输液的安全性和便捷性。
本研究的核心目标是通过液位传感器检测输液瓶内的液位高度,并在液位低于设定值时触发报警,同时采用光电测速传感器实时监测输液管内的流速,确保输液速率处于设定范围内。此外,通过步进电机控制输液管的夹紧和松开,实现输液速率的调节功能,以适应不同患者的需求。系统还配备OLED显示屏,用于实时显示流速、液位状态和报警信息,方便医护人员或病人家属查看。
同时,本研究还引入了物联网技术,通过ESP8266 WiFi模块实现设备与上位机APP的无线通信,使用户能够在远程APP端实时监控输液状态,设定流速范围,并接收异常报警提醒。这一功能的实现有助于提高输液监控的智能化水平,降低医护人员的工作强度,提高医院病房、养老院及家庭护理场景下的输液管理效率。
总体而言,本研究的目的在于结合嵌入式控制、传感检测、无线通信等技术,构建一款智能化输液监控系统,使其具备实时监测、自动控制、远程报警等功能,从而提升输液过程的安全性和稳定性,减少人为失误,提高患者的治疗体验。
(三)国内外研究现状
国内外在智能输液监控领域的研究近年来呈现出多元化发展的趋势,主要体现在传感技术、控制算法和物联网应用三个层面的创新。
国内研究方面,基于嵌入式系统的输液监控方案已成为医疗电子领域的热点。许多学者采用STM32系列芯片作为主控单元,结合光电编码器或红外传感器实现液滴计数,部分研究通过PID算法优化步进电机的闭环控制精度。例如,2021年武汉大学团队设计的系统采用双光电传感器交叉验证技术,将流速检测误差降低至±2%。在无线传输方面,蓝牙与WiFi双模通信方案被广泛应用,但多数研究仍采用WiFi的STA模式连接医院局域网,采用ESP8266的AP模式直接组网的研究相对较少。此外,国内研究在低功耗设计方面取得突破,华南理工大学2022年提出的动态电源管理策略可使系统续航提升40%。
国外研究则更注重系统集成度与智能化水平。欧美医疗设备厂商已推出商用输液泵产品,采用压电式压力传感器与微型蠕动泵组合方案,通过机器学习算法实现输液异常预测,其液位检测分辨率可达0.1mL。美国麻省理工学院团队开发的无线输液系统创新性地采用NFC近场通信技术,在降低功耗的同时满足医疗电磁兼容要求。德国研究者提出的自适应流速控制模型能根据患者体征动态调整参数,相关成果已通过CE认证。值得注意的是,2023年韩国科研机构在《Sensors》期刊发表的论文提出基于UWB雷达的非接触式液位检测方法,摆脱了传统物理传感器的接触限制,代表了该领域的前沿方向。
当前研究仍存在若干技术瓶颈:传统液位传感器易受溶液透明度影响,光电式流速检测在气泡干扰下易产生误判,无线传输的实时性与稳定性难以兼顾。此外,现有系统多依赖RTOS或高级函数库实现,采用寄存器级编程的轻量化设计方案较少见诸报道。这些现状为本项目在硬件底层优化、AP模式直连架构和成本控制等方面的创新提供了研究空间。
(四)主要参考文献
1. 广州应用科技学院.基于远程无线监控的自动输液系统设计[J].机电工程技术,2024.
2. 李水峰,袁仲鸣,陈文奕等.基于STM32智能医疗输液监控系统的设计[J].计算机测量与控制,2018.
3. 陈棵.智能输液监控系统设计[D].北华航天工业学院,2020.
4. 陈宇,王玺.基于光电技术智能输液监控系统设计[J].核电子学与探测技术,2009.
5. 汪义旺,陆军,张承成等.基于无线传感网络的智能输液监控系统设计[J].测控技术,2015.
6. 邓健志,程小辉,杨书杰等.基于物联网的输液监控报警系统的设计[J].制造业自动化,2013.
7. 邓成娟,严小黑.无人监守输液自动监控系统的设计[J].智能计算机与应用,2020.
8. 苏英,赵士伟,陈平.基于RTOS的输液监控系统的设计[J].计算机测量与控制,2006.
9. 孙选辰,王历,俄万林等.自动输液监控系统设计[J].计算机时代,2022.
10. 卢振生,付兴烨,孙勇.一种自动监控系统的输液监控器的设计[J].电子制作,2017.
11. 刘雪飞,李珊.智能点滴输液监控报警系统的设计[J].电子世界,2019.
12. 瞿犇.基于无线网络的智能输液控制系统的研制[D].南京航空航天大学,2010.
13. 张闪铭,李阳阳,沈晨等.基于蓝牙无线技术的智能医疗输液平台的设计[J].物联网技术,2017.
14. 张昱昊,朱伟康,黄磊等.基于STC89C52单片机的智能远程输液系统[J].科学技术创新,2021.
15. 郭艾华.静脉输液无线监控和信息管理系统的研究与实现[D].江南大学,2009.
16. 史斌浩,史国川,何绵锦等.一种医用输液自动监控系统的设计[J].计算机与数字工程,2013.
17. 陈静,张建平,刘玉梅等.自动输液监控系统的设计与实现[J].软件,2006.
18. 黄淮学院.远程输液监控与自动报警器的初步设计[J].无线互联科技,2014.
19. 刘伟.基于LoRa技术的智能输液监控系统研究[D].安徽理工大学,2018.
20. 张永.输液监测与控制系统设计[D].大连交通大学,2008.
21. 输液自动报警器的设计.
22. 何光梅,穆倩倩,丁佳芊等.基于ZigBee的输液提醒远程监控系统设计与实现[J].无线互联科技,2021.
23. 白凤娥,常晓明,张新日.基于SOC的输液滴速监视器设计[J].计算机工程,2005.
24. 徐梅.医院输液监控系统的设计与研究[D].河北联合大学,2013.
25. 刘树伟,韩进.智能静脉输液泵控制与监测系统设计[J].电脑知识与技术,2012.
26. 西华大学电子信息与电气工程系 四川成都610039.基于VC的液体点滴实时监控系统的设计[J].计算机应用,2003.
27. 龙宇翔.基于CAN总线的医院输液监控系统的研究[D].吉林大学,2012.
28. 李宇明,廖惜春,朱慧群等.医院静脉输液自动监控系统的设计与实现[J].中国数字医学,2011.
29. 张玉.无线通讯式输液监控系统的设计 附视频[J].制造业自动化,2012.
30. 贺晓蓉,吴付祥,孔若飞等.输液速度监控系统[J].医疗设备信息,2004.
(五)研究内容
本课题主要研究基于STM32的智能输液监控系统的设计与实现,涉及嵌入式系统、传感器信号处理、无线通信、步进电机控制及上位机软件开发等多个技术领域。研究内容包括硬件设计、嵌入式软件开发、无线通信协议设计、上位机APP开发以及系统的调试与优化。
系统硬件部分包括STM32F103RCT6单片机作为主控核心,结合液位传感器、光电测速传感器、步进电机、OLED显示屏、蜂鸣器和ESP8266 WiFi模块等器件,搭建完整的智能输液监控系统。其中,液位传感器用于检测输液瓶中的剩余液量,光电测速传感器用于监测输液流速,步进电机用于夹紧或松开输液管以调节流速,蜂鸣器用于异常报警提醒,OLED显示屏用于实时显示输液状态。
在嵌入式软件部分,采用C语言在Keil5开发环境中进行编写,基于STM32的寄存器编程方式实现各功能模块的驱动及逻辑控制。单片机通过ADC接口采集液位传感器数据,并对比设定阈值,判断是否触发报警,同时利用光电测速传感器的脉冲信号计算实时流速,并根据设定值进行步进电机的控制,确保输液速率符合需求。此外,系统还具备按键设定流速上下限的功能,所有数据均可通过OLED屏幕直观显示。
在无线通信部分,采用ESP8266 WiFi模块,构建AP模式+TCP服务器,实现设备端与上位机APP之间的数据传输。设备端周期性向上位机发送液位、流速等信息,并接受APP端的指令,调整输液速率或进行报警处理。通信协议设计采用TCP协议,确保数据传输的稳定性和可靠性。
上位机APP采用QT5框架进行开发,使用C++编写,支持Windows和Android平台。APP具备实时数据监控功能,能够查看液位状态、流速信息,并设置流速的上下限,同时可存储历史数据,方便后续查询和分析。此外,APP提供异常报警提醒功能,当系统检测到输液异常情况时,能够及时在APP端弹出提示,以便医护人员或家属及时干预。
在系统调试与优化阶段,将对各模块的功能进行测试,确保液位监测、流速控制、报警提醒、无线通信及APP端数据交互等功能的稳定性和准确性。同时,优化系统功耗,确保在长时间运行中保持稳定的性能,提升系统的可靠性和实用性。
综上,本研究内容涵盖智能输液监控系统的硬件设计、嵌入式软件开发、无线通信协议设计、APP端交互开发以及系统调试优化等方面,旨在构建一款具备实时监测、智能控制和远程监控功能的智能输液监控系统,提高输液过程的安全性和自动化水平。
总结:
- 设计并实现液位检测、流速监测、步进电机控制、报警系统。
- 设计基于WIFI的通信系统,实现远程数据传输。
- 设计APP上位机,实现数据可视化、参数设定。
(六)研究思路
本课题的研究思路围绕智能输液监控系统的整体架构,从需求分析、系统设计、硬件实现、软件开发、功能调试及优化等多个方面展开,逐步完成系统的开发与实现。
针对当前输液过程中存在的安全隐患和人工监测的不足,对系统的需求进行详细分析,明确系统需要具备液位检测、流速监测、自动控制、异常报警、无线通信和远程监控等功能,并据此制定整体设计方案。在设计过程中,综合考虑系统的稳定性、实时性、功耗等因素,以确保系统能够长时间稳定运行。
在硬件选型阶段,根据系统功能需求选择合适的传感器和执行机构。选用STM32F103RCT6作为主控芯片,结合液位传感器进行液位检测,光电测速传感器用于流速监测,步进电机用于流速调节,OLED显示屏用于数据显示,蜂鸣器用于报警提示,ESP8266 WiFi模块实现远程数据传输。硬件设计时,确保各模块接口兼容性良好,同时进行合理的电路布局,以减少信号干扰,提高系统可靠性。
在软件设计方面,基于Keil5开发环境使用C语言进行STM32端程序编写,采用寄存器方式实现高效的外设驱动。液位检测采用ADC采样并与阈值进行比较,流速监测通过光电测速传感器的脉冲信号计算流速,并结合步进电机进行控制。WiFi通信模块采用AT指令配置ESP8266,建立AP模式+TCP服务器,使APP上位机能够与硬件端进行数据交互。同时,系统提供按键交互功能,用户可直接在设备端设定流速的上下限。
在上位机开发方面,采用QT5框架设计跨平台APP,支持Windows和Android设备。APP通过WiFi连接ESP8266的热点,建立TCP通信,实现数据接收、参数设定、历史记录存储等功能。用户可以通过APP远程查看液位和流速状态,调整流速参数,并接收异常报警信息,提高输液监控的便利性和安全性。
在系统调试和优化阶段,对各硬件模块进行独立测试,确保传感器数据采集准确、步进电机响应灵敏、WiFi通信稳定。随后进行整机联调,测试不同液位和流速情况下的系统响应,确保报警机制及时触发。最后,在长时间运行环境下进行稳定性测试,优化功耗管理和数据传输机制,以提升系统的实用性和可靠性。
总体而言,本课题的研究思路遵循从需求分析到系统设计,再到软硬件实现与调试优化的逐步推进方式,旨在构建一款具有高度自动化、智能化和远程监控能力的智能输液监控系统,为医疗护理提供更加安全高效的输液管理方案。
总结:
- 确定系统功能需求。
- 进行硬件电路设计与选型。
- 编写单片机控制程序。
- 设计APP上位机并调试。
- 进行系统联调与优化。
(七)研究方法
本课题采用理论研究与实验验证相结合的方法,通过系统建模、软硬件开发、数据分析及实验测试等多种手段,确保智能输液监控系统的功能完善和稳定可靠。
在理论研究方面,查阅国内外相关文献,分析现有智能输液监控系统的技术特点,研究液位检测、流速监测、步进电机控制、WiFi通信及嵌入式系统开发等关键技术。同时,结合输液过程的实际需求,设计系统架构,确定各模块的功能及交互方式,确保系统具有良好的可扩展性和实用性。
在硬件设计方面,基于STM32F103RCT6单片机进行电路设计与硬件选型。采用液位传感器进行模拟量数据采集,通过ADC接口读取液位信息;使用光电测速传感器监测流速,利用外部中断获取脉冲信号并计算流速;步进电机通过驱动电路控制输液管的夹紧与释放,调节流速;OLED显示屏用于数据显示,ESP8266 WiFi模块用于无线通信,蜂鸣器用于异常报警。整个硬件设计采用模块化方法,确保各部分功能独立且相互协调。
在软件开发方面,STM32端采用C语言开发,基于寄存器方式进行底层驱动开发,提高运行效率和可移植性。程序设计采用分层架构,包括传感器数据采集、步进电机控制、OLED显示、WiFi通信及报警管理等功能模块。WiFi通信部分使用AT指令配置ESP8266模块,搭建AP模式+TCP服务器,实现与上位机APP的双向通信。
在上位机软件开发方面,采用QT5框架进行APP设计,支持Windows和Android平台。APP通过WiFi连接ESP8266的热点,建立TCP通信,接收设备端上传的液位、流速等数据,并提供参数设定功能。APP界面设计采用图形化方式,使用户能够直观查看输液状态,并在异常情况发生时接收报警通知。
在系统调试与测试阶段,采用黑箱测试和白箱测试相结合的方法,对各功能模块进行单独测试,确保传感器采集数据准确、步进电机控制精确、WiFi通信稳定。随后进行整机联调,在不同环境和不同输液状态下进行长时间运行测试,验证系统的稳定性和可靠性,并根据测试结果优化系统的算法和参数,提高系统的智能化程度和适用性。
综上,本课题通过理论研究、硬件设计、软件开发、实验验证等多种方法,实现智能输液监控系统的功能目标,确保系统能够精准监测输液过程、实时调节流速,并提供远程监控与报警功能,提高医疗输液管理的安全性和自动化水平。
总结:
- 采用STM32单片机实现核心控制。
- 使用ADC采集液位数据,光电传感器监测流速。
- 采用步进电机控制输液管夹紧与松开。
- 通过ESP8266实现WIFI通信。
- 采用QT5开发上位机,实现数据可视化。
(八)设计的总体结构描述
本设计采用模块化架构,以STM32F103RCT6微控制器为核心处理单元,通过多传感器数据采集与执行机构控制实现输液过程的智能化监控。系统硬件部分包含传感检测模块、执行控制模块、人机交互模块和无线通信模块四大功能单元。传感检测模块由液位传感器和光电传感器组成,分别负责输液瓶剩余液量的实时监测和输液流速的精确计量。执行控制模块采用28BYJ-48步进电机配合机械夹持机构,实现对输液管路的精确控制,同时配备有源蜂鸣器用于异常状态报警。
人机交互模块采用0.96寸SPI接口OLED显示屏和独立按键组合,提供直观的流速、液位信息显示和参数设置界面。无线通信模块选用ESP8266 WiFi模块,工作在AP模式下建立TCP服务器,为上位机APP提供数据传输通道。系统采用5V USB供电,通过LDO稳压电路为各模块提供稳定工作电压。软件架构采用前后台系统设计,主程序循环处理各模块任务,中断服务程序负责实时性要求较高的传感器数据采集和电机控制。
上位机APP基于QT5框架开发,采用C++编程实现跨平台支持,包含Windows和Android双版本。APP通过TCP协议与硬件端建立连接,实现实时数据监控、历史数据记录、报警信息提示和参数设置等功能。系统设计注重可靠性和实用性,在硬件层面采用光电隔离和滤波电路提高抗干扰能力,软件层面加入数据校验和异常处理机制确保系统稳定性。通过模块化的软硬件设计,系统具有良好的可扩展性和维护性,可根据实际需求灵活调整功能配置。
(九)设计的各个功能模块描述
本设计的各个功能模块可划分为传感检测模块、控制执行模块、人机交互模块、无线通信模块和电源管理模块五大核心部分,每个模块都具有明确的功能定位和技术实现方案。
传感检测模块包含液位检测和流速检测两个子模块。液位检测采用模拟量输出的液位传感器,通过STM32的ADC接口采集电压信号,经过数字滤波和线性化处理后得到精确的液位数据。流速检测采用光电传感器模块,利用红外对管检测输液管内的液滴,输出脉冲信号通过外部中断进行计数,结合时间基准计算实时流速。两个传感器模块均设计了硬件滤波电路,提高了抗干扰能力。
控制执行模块由步进电机驱动和报警输出组成。采用ULN2003驱动芯片控制28BYJ-48步进电机,通过精确的脉冲时序控制实现输液管的夹紧和松开操作。电机控制算法采用细分驱动技术,提高了控制精度和平稳性。报警输出采用有源蜂鸣器,通过GPIO口直接驱动,设计了硬件限流保护电路。执行模块与主控芯片之间采用光耦隔离,提高了系统的可靠性。
人机交互模块包括OLED显示和按键输入两部分。0.96寸OLED显示屏通过SPI接口与主控芯片通信,采用多层菜单设计显示液位、流速、报警状态等信息。显示内容采用双缓冲机制,避免刷新时的闪烁现象。按键输入采用开发板自带的独立按键,通过中断方式检测按键动作,配合软件去抖算法实现可靠的参数设置功能。设计了友好的用户操作界面,支持流速上下限设置和系统状态查看。
无线通信模块以ESP8266为核心,工作在AP模式下建立TCP服务器。模块通过串口与STM32通信,采用AT指令集进行数据传输。设计了专用的通信协议,包含数据帧格式、校验机制和重传策略,确保数据传输的可靠性。模块支持同时连接多个客户端,为后续功能扩展预留接口。通信数据经过加密处理,保障了患者隐私安全。
电源管理模块采用5V USB供电,通过LDO稳压芯片为各模块提供稳定工作电压。设计了电源滤波电路和ESD保护电路,提高了系统的抗干扰能力。采用硬件看门狗和软件低功耗策略,确保系统稳定运行。各模块电源独立设计,通过跳线可选,方便调试和维护。系统整体功耗经过优化,可满足长时间连续工作要求。
总结:
- 液位检测模块:检测输液瓶液位,低于阈值时报警。
- 流速检测模块:监测输液流速,异常情况报警。
- 电机控制模块:控制步进电机调节流速。
- 报警模块:蜂鸣器报警提醒。
- OLED显示模块:实时显示输液状态。
- WIFI通信模块:实现远程数据传输。
- APP上位机:远程监测、参数设定。
(十)可行性分析
本项目的可行性分析可以从技术可行性、经济可行性和操作可行性三个维度进行论证。
从技术可行性来看,系统所采用的STM32F103RCT6微控制器具有丰富的外设资源和强大的处理能力,完全能够满足多任务处理需求。液位检测采用成熟的模拟量采集方案,配合数字滤波算法可确保测量精度;光电传感器结合脉冲计数技术可实现精确的流速检测;步进电机控制采用成熟的驱动方案,配合机械夹持机构可实现可靠的输液管控制。无线通信选用ESP8266模块,其AP模式组网技术成熟,TCP协议栈稳定可靠。上位机采用QT5框架开发,其跨平台特性可有效降低开发成本。整体技术方案所涉及的硬件选型和软件架构均基于成熟技术,具有较高的实现可行性。
经济可行性方面,系统核心器件均选用性价比高的通用元件:STM32F103RCT6作为主流工业级MCU,价格适中且供货稳定;ESP8266模块成本低廉且性能可靠;传感器和执行机构均选用成熟商用模块,采购渠道广泛。相比商用输液泵设备,本设计方案在保证基本功能的同时大幅降低了成本。系统采用模块化设计,便于后期维护和升级,可有效控制使用成本。此外,系统具有小型化、低功耗特点,运行成本较低,适合大规模推广应用。
操作可行性体现在系统设计充分考虑了用户使用需求。硬件端采用直观的OLED显示和简单按键操作,医护人员可快速掌握使用方法。上位机APP界面设计遵循医疗设备人机交互规范,提供清晰的数据展示和便捷的参数设置功能。系统支持实时监控和异常报警,可有效减轻医护人员工作负担。无线通信方案采用AP直连模式,无需依赖医院网络环境,部署灵活。系统整体操作流程简洁,符合医疗场景使用习惯,具有较高的用户接受度。同时,系统设计考虑了安全性和可靠性,通过多重保护机制确保使用安全,满足医疗设备的基本要求。
(十一)预期成果
本课题的预期成果是设计并实现一款基于STM32的自动输液监控系统,具备液位监测、流速检测、自动调节、异常报警及远程监控等功能,并通过实验验证系统的稳定性、准确性和实用性。
在硬件方面,预期完成基于STM32F103RCT6的完整系统硬件设计,包括液位传感器、光电测速传感器、步进电机、OLED显示屏、ESP8266 WiFi模块和蜂鸣器等模块的选型、连接及调试,确保各模块协同工作,实现精准的数据采集、控制执行和报警提示。
在嵌入式软件开发方面,完成STM32端的C语言程序编写,采用寄存器方式进行底层驱动开发,实现液位检测、流速监测、步进电机控制、WiFi通信、数据处理及OLED信息显示等功能。同时,优化代码结构,提高系统响应速度和运行效率,确保系统能够长时间稳定工作。
在上位机开发方面,完成基于QT5的APP设计,支持Windows和Android平台。APP能够通过WiFi连接设备,实时接收液位和流速数据,提供参数设定功能,并在液位过低或流速异常时进行报警提示。APP界面设计简洁直观,用户能够便捷地监控输液状态,提高使用体验。
通过实验测试,验证系统在不同输液状态下的性能,包括液位检测精度、流速监测误差、步进电机控制响应时间、WiFi通信稳定性及报警功能的可靠性。通过长时间运行测试,确保系统在实际应用环境中的稳定性,并优化算法和硬件电路,提升系统整体性能。
形成完整的软硬件系统,实现自动化、智能化的输液监控功能,并撰写毕业论文,详细阐述系统设计原理、实现过程及实验结果,为未来进一步优化和推广提供参考。通过本课题的研究和实践,预期能够提升输液过程的安全性和自动化程度,减少医护人员的监测负担,提高患者的输液安全保障,为医疗设备的智能化发展提供有价值的探索和实践经验。
总结:
- 完成系统硬件设计与制作。
- 实现液位检测、流速监测、报警功能。
- 设计APP上位机,实现远程监控。
- 进行系统调试与优化,提高系统稳定性。
任务书
1. 课题背景与目的
在现代医疗过程中,输液治疗是最常见的治疗方式之一。然而,传统的输液监控方式主要依赖护士或病人家属的人工观察,存在输液结束未及时处理、液体流速异常未察觉等问题,容易导致医疗事故。因此,设计一款智能化的输液监控系统,能够实现输液过程的实时监测、自动控制和远程报警,具有重要的实际应用价值。
本课题基于STM32F103RCT6单片机,结合液位检测、流速监测、步进电机控制、WIFI通信及APP远程监控等技术,实现自动输液监控系统,提高输液过程的安全性和智能化水平。本系统适用于医院病房、养老院及家庭护理场景,有助于减少医护人员的工作量,提高病人的安全性。
2. 设计的内容
本课题主要研究并实现基于STM32的自动输液监控系统,具体设计内容包括:
- 液位监测模块:采用ADC接口的液位传感器,实时检测输液瓶内的液位情况。
- 流速监测模块:采用光电测速传感器,检测输液管内液体的流速,并提供脉冲信号反馈。
- 电机控制模块:使用28BYJ4-5V步进电机,通过单片机控制夹紧或松开输液管,实现流速调节和紧急制动。
- 报警提示功能:当液位低于设定值或流速异常时,控制蜂鸣器发出报警信号。
- OLED显示模块:使用0.96寸SPI接口OLED显示屏,实时显示流速、液位、报警信息等。
- 按键交互模块:通过独立按键设定流速的上下限,并存储设定值。
- WIFI通信模块:采用ESP8266模块,搭建AP模式和TCP服务器,实现数据传输。
- APP上位机:采用QT5开发,支持Windows和Android平台,实现远程监控、数据查看、参数设定和病人信息管理。
3. 设计的基本要求
- 硬件设计
- 选用STM32F103RCT6作为主控单片机,编程采用寄存器方式,提高运行效率。
- 采用液位传感器和光电测速传感器,实现精准的数据采集。
- 采用ESP8266-WIFI模块,实现无线通信和远程数据传输。
- 采用步进电机和驱动电路,实现对输液管的夹紧和松开。
- 采用OLED屏幕,实现数据的本地可视化。
- 采用蜂鸣器进行异常报警提醒。
- 软件设计
- 采用C语言开发STM32端的控制程序,使用Keil5开发环境,基于寄存器方式编写。
- 设计基于QT5的APP上位机,采用C++编写,支持Windows和Android平台。
- APP能够通过WIFI与ESP8266通信,实时显示输液数据,并支持参数调整。
- 具有液位低报警、流速异常报警、流速设定、历史数据记录等功能。
- 系统功能要求
- 能够准确监测输液瓶内液位,并在低液位时触发报警。
- 能够实时检测输液管内的流速,并显示在OLED和APP上。
- 能够通过步进电机控制输液管的夹紧和松开,实现流速调节。
- 具有报警提示功能,确保输液安全。
- 具有上位机远程监控功能,APP可显示数据,并提供参数调整功能。
- 供电采用USB 5V,系统能稳定运行,具备抗干扰能力。
本设计构建一款智能化输液监控系统,提高输液过程的安全性,减少人为干预,提升医疗护理水平。
更多推荐



所有评论(0)