【开源代码】基于STM32的智能杯垫—喝水提醒系统设计与实现
Smart-Coaster-Water-Clock
基于STM32的智能杯垫项目,提供定时喝水提醒功能,通过语音播报与OLED显示实现多模态交互,为用户科学饮水提供便利。

源码分享
直接放到之前写的文章里了,免费开源,下载学习即可。
https://blog.csdn.net/weixin_52908342/article/details/155617852
项目背景
随着现代人生活节奏的加快,许多人因为忙碌常常忘记按时饮水,长期如此可能导致身体脱水、注意力下降、皮肤干燥等问题。传统的喝水提醒方式多依赖手机闹钟或手动记录,缺乏智能化和交互体验。
为了解决这一问题,本项目设计了一款智能杯垫,通过STM32单片机控制,能够自动检测杯子状态,并在设定时间到达时提供语音和视觉提醒,实现科学、便捷的饮水管理。该项目不仅注重功能实现,还关注用户交互体验,通过上位机界面和语音播报,使操作直观、自然。
硬件选型与功能模块
智能杯垫的硬件设计以STM32F103C8T6为核心,通过外设和传感器模块实现感知与交互。主要硬件如下:
STM32F103C8T6
- 核心控制单元,负责处理定时、传感器输入、语音输出以及显示逻辑。
- 提供丰富的定时器、GPIO和中断功能,满足系统多任务管理需求。
TCRT5000红外反射传感器
- 用于检测水杯是否放置在杯垫上。
- 通过检测DO引脚电平变化,实现杯子在位与否的判断,为提醒逻辑提供准确依据。
JQ8900-16P语音播报模块
- 实现语音提醒功能,支持定制语音文件,提升交互体验。
- 配合小喇叭扬声器,提供清晰的语音提示。
0.96寸OLED屏幕
- 实时显示倒计时、当前时间以及操作反馈信息。
- 配合语音播报,实现多模态提醒效果。
电源与面包板模块
- AMS1117 3.3V电源模块通过9V电源为传感器及模块提供稳定电压。
- 400孔面包板用于实验性电路搭建,方便快速迭代开发。
辅助器件
- 轻触开关用于用户设置提醒时间。
- 杜邦线及小零件辅助连接,实现模块化设计。
系统设计原理
智能杯垫的核心功能是“定时喝水提醒”,系统逻辑可分为以下几部分:
1. 定时器功能实现
系统采用STM32的 TIM定时器中断 来实现倒计时和时钟功能,每秒触发一次中断,用于更新倒计时数据。用户通过轻触开关设定提醒间隔时间,系统将设定时间存储在内部变量中,通过定时器每秒递减,直至到达提醒条件。
2. 水杯检测机制
为了确保提醒的准确性,系统通过 TCRT5000红外反射传感器 检测水杯状态:
- 当水杯放置在杯垫上时,传感器DO引脚为低电平,表示“杯子在位”。
- 当水杯离开时,DO引脚变为高电平,提醒逻辑暂停,避免无意义提醒。
通过结合定时器中断和外部中断(EXTI),系统能够在水杯状态变化时立即响应,实现实时检测。
3. 多模态提醒实现
当倒计时到达并且杯子在位时,系统触发提醒:
- 语音提醒:JQ8900语音模块播放预设的喝水提示音,告知用户需要饮水。
- 屏幕提示:OLED屏幕显示提醒信息,如“请喝水!”及倒计时图标,确保用户在噪声环境下也能察觉。
如果用户未取走杯子,系统将循环播放语音和屏幕提示,直到杯子被拿起为止。
4. 上位机交互界面
操作界面通过OLED实现,用户可通过按键调整提醒时间。每一步操作均配合语音复述,提供良好的用户体验:
- “设置提醒时间为30分钟”
- “倒计时开始”
- “水杯已放置,提醒启动”
这种交互方式既直观又减少了操作失误。
软件实现细节
1. 定时器与中断配置
// TIM2 每秒触发一次中断
void TIM2_IRQHandler(void) {
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
// 更新倒计时
countdown--;
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
2. 外部中断实现杯子检测
void EXTI0_IRQHandler(void) {
if(EXTI_GetITStatus(EXTI_Line0) != RESET) {
cup_present = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0);
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
3. 提醒逻辑
if(countdown == 0 && cup_present) {
play_voice("请喝水.wav");
display_oled("请喝水!");
}
通过定时器与传感器的协作,实现实时、多模态提醒。
系统特点与优势
- 智能化:结合传感器与定时器,实现自动检测与提醒,无需用户手动干预。
- 多模态交互:语音+屏幕提示,提升提醒有效性。
- 用户可定制化:轻触按键设定时间,界面直观。
- 可扩展性强:未来可接入Wi-Fi或蓝牙,实现手机远程控制与数据统计。
项目心得与优化思路
在开发过程中,我们遇到了一些问题:
- 传感器灵敏度调整:初期红外传感器容易误判杯子状态,通过调节电位器和程序滤波解决。
- 语音播报时延:由于模块启动需要时间,增加了初始化延迟,优化了语音播放队列,使提醒更及时。
- 界面与交互优化:通过OLED显示倒计时与语音复述结合,提高操作体验。
未来可以进一步改进:
- 引入蓝牙或Wi-Fi模块,实现手机APP远程设置与喝水记录统计。
- 增加定制化语音提醒功能,让提醒更个性化。
- 优化功耗,实现便携式低功耗智能杯垫。

总结
本项目通过STM32实现了一款智能杯垫,具备定时提醒、语音播报、OLED显示及上位机交互功能。系统不仅解决了用户日常饮水提醒问题,还体现了嵌入式开发在智能健康设备中的应用价值。通过硬件模块化设计和软件中断逻辑,实现了高效、稳定的多任务运行。
智能杯垫为日常健康管理提供了便捷解决方案,同时也展示了嵌入式系统在智能家居和物联网场景中的广阔应用前景。未来结合远程控制和数据统计功能,能够形成完整的健康饮水生态系统,为用户带来更智能、更人性化的使用体验。