• 【单片机毕业设计】【mcuclub-jk-006】基于单片机的医院输液的设计


    最近设计了一个项目基于单片机的医院输液系统,与大家分享一下:

    一、基本介绍

    项目名:医院输液
    项目编号:mcuclub-jk-006
    单片机类型:STC89C52、STM32F103C8T6
    具体功能:
    1、通过液位检测模块检测输液瓶液位,若没有液体,且为输液状态,则声光报警
    2、通过红外对管检测液体流速,若流速大于设定最大阈值,则步进电机逆时针旋转10°,挤压输液管,若小于设定最小阈值,则步进电机顺时针旋转10°,舒张输液管
    3、通过DS18B20检测温度值,当温度值超过设置的上下限,进行加热或制冷
    4、通过颜色传感器检测是否出现回血,若出现,则声光报警
    5、通过按键可设置流速上下限阈值、温度阈值、切换输液状态等
    6、通过显示屏显示测量数据
    扩展功能:当输液瓶用尽时,通过蓝牙模块发送“输液瓶已用尽,请更换!”;若出现回血,则发送“出现回血,请速速查看”,另外,还发送当前流速、温度值

    二、51实物图

    单片机型号:STC89C52

    板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。

    供电接口:TYPE-C

     

    三、51仿真图

    仿真软件版本:proteus8.9

    电路连线方式:网络标号连线方式

    注意:部分实物元器件仿真中没有,仿真中会用其他工作原理相似的元件代替,这样可能导致实物程序和仿真程序不一样

     

     四、32实物图

    单片机型号:STM32F103C8T6

    板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。

    供电接口:TYPE-C

     

     五、原理图

    软件版本:AD2013

    电路连线方式:网络标号连线方式

    注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图

     

     六、PCB图

    由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。

    两层板,上下覆铜接地。

     

    七、系统框图

    本设计以单片机为核心控制器,加上其他模块一起组成此次设计医院输液的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由六部分组成,第一部分是水位监测模块,通过该模块监测当前输液瓶的液位;第二部分是红外对射管监测模块,通过该模块监测当前输液的流速;第三部分是颜色监测模块,通过该模块监测输液是否回血;第四部分是温度检测模块,通过该模块检测当前输液液体的温度;第五部分是按键模块,可以通过该模块设置流速上下限阈值、温度阈值、切换输液状态等;第六部分是供电模块,通过该模块可给整个系统进行供电。输出由三部分组成,第一部分是显示模块,通过该模块可以显示监测的数据以及设置的阈值;第二部分是继电器模块,通过两个继电器分别控制加热和制冷;第三部分是声光报警模块,当监测输液液体较少或者检测到回血进行声光报警提醒。除此之外还有蓝牙模块,当输液瓶用尽时,通过蓝牙模块发送“输液瓶已用尽,请更换!”;若出现回血,则发送“出现回血,请速速查看”,另外,还发送当前流速、温度值,具体系统框图如图所示。

     

     八、软件设计流程

    系统的主流程图如图所示。在主程序中:首先对各个模块进行初始化,随后进入while主循环,在主循环中,首先进入第一个函数按键函数,该函数主要分为两部分,第一部分为调用按键扫描函数获取按键键值,第二部分通过键值进行相应的处理操作,包括切换界面、设置阈值等;紧接着进入第二个函数监测函数,该函数主要通过调用相应的驱动函数获取测量值,并通过蓝牙模块将监测的数据传输到手机端;紧接着进入第三个函数显示函数,该函数显示监测值及阈值;最后进入第四个函数处理函数,如果正在输液,没有药水,声光报警,发送信息,如果流速大于最大值,步进电机逆时针旋转,如果流速小于最小值,步进电机顺时针旋转,温度大于最大值,开制冷,温度低于最小值,开加热,如果有回血或没有药水,声光报警,如果回血,发送信息,没有输液,关闭继电器、声光报警,设置界面,关闭继电器、声光报警

     

     九、部分程序展示

    软件版本:keil5

    逻辑程序和驱动程序分开,分布于main.c和其他.c文件

    1. void Manage_function(void)
    2. {
    3. if(flag_display == 0) //测量界面
    4. {
    5. if(flag_run == 1) //如果正在输液
    6. {
    7. if(flag_liquid == 0) //没有药水,声光报警,发送信息
    8. {
    9. alarm_liquid = 1;
    10. if(flag_liquid_send == 0)
    11. {
    12. flag_liquid_send = 1;
    13. printf("\r\n输液瓶已用尽,请更换!");
    14. }
    15. }
    16. else
    17. {
    18. alarm_liquid = 0;
    19. flag_liquid_send = 0;
    20. }
    21. if(flag_flowmanage == 1)
    22. {
    23. flag_flowmanage = 0;
    24. if(flow_value > flow_max) //如果流速大于最大值,步进电机逆时针旋转
    25. {
    26. flag_bujin_foreward = 0;
    27. flag_bujin_reversal = 1;
    28. }
    29. else if(flow_value < flow_min) //如果流速小于最小值,步进电机顺时针旋转
    30. {
    31. flag_bujin_foreward = 1;
    32. flag_bujin_reversal = 0;
    33. }
    34. else
    35. {
    36. flag_bujin_foreward = 0;
    37. flag_bujin_reversal = 0;
    38. }
    39. }
    40. if(temp_value > temp_max*10) //温度大于最大值,开制冷
    41. {
    42. RELAY_JR = 1;
    43. RELAY_ZL = 0;
    44. }
    45. else if(temp_value < temp_min*10) //温度低于最小值,开加热
    46. {
    47. RELAY_JR = 0;
    48. RELAY_ZL = 1;
    49. }
    50. else
    51. {
    52. RELAY_JR = 1;
    53. RELAY_ZL = 1;
    54. }
    55. if(alarm_red == 1 || alarm_liquid == 1) //如果有回血或没有药水,声光报警
    56. {
    57. if(time_num % 3 == 0)
    58. {
    59. LED = ~LED;
    60. BEEP = ~BEEP;
    61. }
    62. if(alarm_red == 1) //如果回血,发送信息
    63. {
    64. if(flag_red_send == 0)
    65. {
    66. flag_red_send = 1;
    67. printf("\r\n出现回血,请速速查看");
    68. }
    69. }
    70. }
    71. else
    72. {
    73. flag_red_send = 0;
    74. LED = 1;
    75. BEEP = 1;
    76. }
    77. }
    78. else //没有输液,关闭继电器、声光报警
    79. {
    80. alarm_liquid = 0;
    81. RELAY_JR = 1;
    82. RELAY_ZL = 1;
    83. LED = 1;
    84. BEEP = 1;
    85. flag_bujin_foreward = 0;
    86. flag_bujin_reversal = 0;
    87. flag_liquid_send = 0;
    88. flag_red_send = 0;
    89. }
    90. }
    91. else //设置界面,关闭继电器、声光报警
    92. {
    93. LED = 1;
    94. BEEP = 1;
    95. RELAY_JR = 1;
    96. RELAY_ZL = 1;
    97. }
    98. }
  • 相关阅读:
    分享几招教会你怎么给图片加边框
    高防IP是什么?如何隐藏源站IP?如何进行防护?
    车载蓝牙PIN码是什么
    第一章 绪论
    一文搞定Spring依赖注入日常使用以及底层原理
    架构师考试周报三
    从0开始python学习-27.selenium 简单登录页面脚本
    SmartSoftHelp 7.0 最专业的c#代码生成器
    《Linux驱动:块设备驱动--构建基本流程》
    【MySQL性能优化系列】select count(*)走二级索引比主键索引快几百倍,你敢信?
  • 原文地址:https://blog.csdn.net/weixin_61121477/article/details/127547675