目录
资料下载地址:基于STM32输液监测系统-源程序,LABVIEW上位机,HMI串口屏
一、硬件的选用:
主控芯片:stm32F103zet6
二、核心逻辑为:
1、等待皮重输入(因为在实际中药液的容器分为很多规格,尤其是PVC型和玻璃型容器皮重差距太大,所以在监测之前先进行皮重的输入,本次程序预设了两种皮重,并可以手动输入皮重,用来后期进行消除)
2、开始药液监测(本次使用的称重传感器量程为1kg精度为1g,所以采用了每隔一秒采集一次,计算流速、进度、倒计时数据的方法进行监测,虽采样率不高,但是应用于本设计,还是适用的)
3、数据的传输(本次采集到的流速、进度、倒计时等数据会实时体现在三个方面,第一是下位机串口屏幕上、第二是上位机的PC软件中、第三是语音识别后的播报中)
三、重点问题与解决方案:
如何通过测量药液重量来实现:流速、进度、倒计时等信息的获取?
1、手动输入或选用预设的皮重为 Z,这一步是为了消除容器的质量
2、测量初始药液重量(已去皮)为A,进入while循环,测 现一秒的重量为B,下一秒的重量为C,以此类推,从而实现每隔一秒测一次重量
3、流速 = B – C 得到一个单位为 g/s 的 流速数值
4、进度百分比 = C*100/A 得到一个单位为 % 的 进度数值
5、C / 流速 = 倒计时 得到一个单位为 s 的 倒计时数值
四、程序
void changeA(void);
void changeB(void);
while(1)
{
a=getchar();//接收第一个字符
a=getchar();//确保接收成功
b=getchar();//接收第二个字符
changeA ();//通过子程序将这个字符转换成整形数
changeB ();//通过子程序将这个字符转换成整形数
z=x*10+y; //第一个整形数为十位,第二个为个位,组成这个两位数
}
void changeA ()
{
switch(a)
{
case '0': x=0;
break;
case '1': x=1;
break;
case '2': x=2;
break;
case '3': x=3;
break;
case '4': x=4;
break;
case '5': x=5;
break;
case '6': x=6;
break;
case '7': x=7;
break;
case '8': x=8;
break;
case '9': x=9;
break;
}
}
void changeB ()
{
switch(b)
{
case '0': y=0;
break;
case '1': y=1;
break;
case '2': y=2;
break;
case '3': y=3;
break;
case '4': y=4;
break;
case '5': y=5;
break;
case '6': y=6;
break;
case '7': y=7;
break;
case '8': y=8;
break;
case '9': y=9;
break;
}
}
五、成果展示