这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【Let'sdo第四期-液体流量检测仪DIY】成果贴

共2条 1/1 1 跳转至

【Let'sdo第四期-液体流量检测仪DIY】成果贴

菜鸟
2025-01-25 23:51:14     打赏

课题要求:基于STM32F103RB开发板,结合流量传感器和OLED显示屏,打造了一套可设定目标水量(100ml/200ml)的智能流量控制系统,精度误差小于5%

### 硬件全家福

组件 型号 关键参数

主控模块 STM32F103RB 72MHz Cortex-M3,128KB Flash

流量传感器 YF-S401 1-30L/min,4.5mL/脉冲

OLED显示屏 SSD1305 128x64像素,I2C接口

继电器模块 DFR0017 10A/250VAC,光耦隔离

辅助组件 水管、水泵、12V电源等

连接图:

1737819546369626.png

硬件连接
PA1 - YF-S401信号输出PB8 - SSD1305 SCLPB9 - SSD1305 SDAPA5 - DFR0017控制引脚VCC - 5V电源GND - 接地

软件设计

1. 主控模块通过I2C接口与OLED显示屏通信,显示当前水量,当前瞬时流量。

2. 主控模块通过定时器中断控制流量传感器,计算当前流量。

3. 主控模块通过GPIO控制继电器模块,控制水泵的开关。

4. 主控模块通过按键输入,设置目标水量。

系统架构

框图.png

关键代码

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim == (&htim1))
    {
    	pluse_count = __HAL_TIM_GET_COUNTER(&htim2);   // read 1s liuliang
        __HAL_TIM_SET_COUNTER(&htim2,0);                        //TIM2????

		Flow_read();
      //  received =1;


    }
}


流量计数

void Flow_read(void)
{
	 // ?? Flow_Model ?????????
	

	if(pluse_count > 0)
	{

		accLiuliang += (pluse_count*1000 / pulseCntValue);   //mL  pulseCntValue = 5300
		pluse1L+=pluse_count;
		flow_inst =pluse_count / flowKValue;  //??(L/min)

//		if(pluse_count >= 1000000)      
//		{
//			pluse_count = 0;
//		}
	}
	else
	{
		flow_inst  = 0;
	}
	if(TARGET100ML)
	{
		RELAY_OFF();
	

	}
	
	else if(TARGET200ML)
		RELAY_OFF();


	received = 0;   //?????????
	pluse_count = 0;       //?????

}

点击板子上蓝色的按钮,可以切换目标水量为100ml或200ml。

调试经验分享
防抖处理:在中断服务中添加10ms软件延时,有效消除水流波动导致的误触发

校准技巧:
实测3次100ml水流得到脉冲数:4800,5200 5880次
取平均值:5300
继电器保护:在水泵电源端并联1N4007续流二极管,防止反向电动势损坏电路

继电器保护.png


成果展示:

100ml 水量


200mL水量

1737788600882.png

由于年底,时间较为冲忙,很多功能做的不是很完善,还有许多要学习的地方,这里感谢EEPW 与 Digikey
组织的活动 ,感谢论坛里面一些同学给的建议。



专家
2025-01-26 09:26:39     打赏
2楼

谢谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]