考试倒计时提醒备考计划的HiChatBox学习助手
考试倒计时提醒备考计划的HiChatBox学习助手:技术解析与实现方案
你有没有过这样的经历?考试只剩两周,翻开复习计划表——密密麻麻写满了“今天要背50页”,结果一天都没执行。📱闹钟响了八百遍,滑掉就算完成任务;APP里的进度条永远卡在30%,越看越焦虑。
这不是懒,是工具太“死”了。
而我们真正需要的,是一个能 主动提醒、灵活调整、还会说“加油”的学习搭子 。于是,HiChatBox 学习助手诞生了——它不像普通日历只会冷冰冰地显示“距离考研还有12天”,而是会温柔地告诉你:“小高数第4章还没搞定哦,今晚留出1.5小时吧?” 😊
这不只是一款硬件产品,更是一套融合嵌入式系统、智能调度算法和自然语言交互的 轻量化AI学习陪伴系统 。下面我们来拆解它是怎么做到“既聪明又贴心”的。
从一块ESP32开始的“智能助教”之路
HiChatBox的核心主控芯片选用了性价比极高的 ESP32-WROVER ,双核240MHz处理器 + 内置Wi-Fi/蓝牙,搭配LYRAT音频开发板,轻松支持麦克风阵列输入与扬声器输出。整机成本控制在80元以内,却实现了语音唤醒、本地决策、云端协同三大能力。
设备启动后运行的是
FreeRTOS 实时操作系统
,多个任务并行不悖:
- 语音采集线程监听“你好小Hi”
- 倒计时更新线程每分钟刷新屏幕
- 网络通信线程定时同步云数据
- OLED界面保持低频刷新以省电
最关键的是——这些任务互不阻塞。哪怕正在播放TTS语音,倒计时依然精准跳动,RTC(实时时钟)也不会丢一秒 ⏳。
// 倒计时核心逻辑:每天自动计算剩余天数
void countdown_task(void *pvParameter) {
struct tm exam_date = {0};
exam_date.tm_year = 2025 - 1900;
exam_date.tm_mon = 5; // 6月(注意从0开始)
exam_date.tm_mday = 15;
time_t exam_time = mktime(&exam_date);
char display_str[32];
while (1) {
time_t now;
time(&now);
int days_left = (exam_time - now) / (24 * 3600);
if (days_left < 0) {
sprintf(display_str, "Exam Done!");
} else {
sprintf(display_str, "%d days to go", days_left);
}
oled_display_write(display_str);
vTaskDelay(pdMS_TO_TICKS(60000)); // 每分钟刷新一次
}
}
这段代码看着简单,但藏着不少工程细节:
mktime
处理闰年、跨月没问题;时间差用秒级运算再转成天数,避免浮点误差;而且即使断网,本地缓存也能继续显示最近一次同步的结果,真正做到“离线可用”。
💡 经验之谈 :别小看这个倒计时!很多学生其实并不怕考试,怕的是“不知道还剩多少时间”。可视化的时间压迫感,反而能激发行动力。
计划总赶不上变化?那就让它自己变!
传统学习计划最大的问题是什么?——太“刚”了!
定好“每天学两小时数学”,结果朋友生日聚会耽误了一天,第二天一看积压三天任务……直接放弃。
HiChatBox 的解决思路很巧妙: 让计划具备“弹性” 。
它的调度引擎基于一个叫 加权任务分解模型(WTBM) 的算法,听起来高大上,其实原理很简单:
把所有复习内容按“重要性权重”折算成“学习单位”,然后根据剩余时间和已完成量,动态分配每日任务。
比如你有:
- 数学:30章 × 权重1.2 = 36单位
- 英语:5000词 × 权重1.0 = 50单位
- 政治:20章 × 权重0.8 = 16单位
总工作量 = 102单位。如果还剩17天,平均每天就要完成6单位。系统就会按比例分配:“今天数学做1.8章 + 英语背300词 + 政治看半章”。
更妙的是,它还能“自我调节”:
- 如果某天没完成?自动顺延,并标记“压力系数+1”
- 连续三天超额?悄悄减少后续任务量,防止 burnout 🔥
- 手动修改某科进度?其他科目自动重新平衡,不打乱整体节奏
def generate_daily_plan(total_content, weights, daily_hours, days_remaining, progress):
total_weighted_units = sum([content[k] * weights[k] for k in content])
remaining_units = total_weighted_units - sum([progress[k] * weights[k] for k in progress])
daily_load = remaining_units / max(days_remaining, 1)
plan = {}
for subject in total_content:
subject_progress = progress.get(subject, 0)
subject_remaining = total_content[subject] - subject_progress
weight = weights[subject]
allocated = int((weight / sum(weights.values())) * daily_load / weight)
plan[subject] = min(allocated, subject_remaining)
return plan
这套算法跑在云端,生成JSON格式任务清单下发到设备。前端无论是OLED屏还是手机App,都能渲染出柱状图、环形进度条等可视化内容,让用户一眼看清“我到底走了多远”。
🧠 设计洞察 :不要让用户看到“还剩90%没学”,那只会引发焦虑。我们要展示的是“今天只需完成这三个小任务”,把大目标切成可吞咽的小块。
提醒不是轰炸,是“恰到好处的打扰”
很多人设了一堆提醒,最后全关了——因为烦。
HiChatBox 的倒计时提醒系统采用的是 分级唤醒策略 ,像一位懂分寸的朋友:
| 时间节点 | 提醒方式 |
|---|---|
| T-7天起 | 每天早8点语音播报:“还有X天,请检查今日计划” 🎙️ |
| T-3天起 | 加晚上9点二次提醒 + LED呼吸灯闪烁 💡 |
| T-Day当天 | 整点播报五次,最后一次是“考试加油!”🎯 |
所有提醒事件都存在Flash里,由RTC中断触发唤醒。即使深度睡眠状态,电流仅5μA,一块CR2032电池能撑两年。
而且它很“懂事”:
- 夜间自动进入静音模式,只闪屏不发声;
- 支持多个考试并行管理(四级、期末、考研),通过语音切换关注目标;
- 开机自动NTP校时,误差小于1秒,不怕手动调错。
🔧 注意事项 :RTC电池一定要定期更换!曾经有原型机断电三个月,重启后时间回到2000年,吓得我以为穿越了😂
会听、会想、还会安慰你的“语音搭子”
最让人惊喜的,是它的语音交互模块。
想象一下这个场景:
你疲惫地靠在椅子上,随口问:“今天必须学完吗?”
设备轻声回应:“可以推迟半小时,但明天要补上哦~”
这种对话感,来自于 “本地KWS + 云端NLU” 的混合架构 :
- 本地关键词检测(KWS) :使用TensorFlow Lite Micro部署轻量级DS-CNN模型,在ESP32上实时分析MFCC特征,识别“你好小Hi”唤醒词,延迟<800ms,且无需联网。
- 云端语义理解(NLU) :唤醒后录音上传至阿里云UNIT或百度UNIT平台,解析意图如“修改数学计划”、“明天要考试吗?”
- TTS合成播放 :返回结构化响应后,调用在线或本地TTS引擎转为语音输出。
// KWS本地检测伪代码
extern const uint8_t g_model[];
TfLiteInterpreter* interpreter;
TfLiteTensor* input;
void kws_loop() {
while (true) {
float audio_buffer[160];
adc_read(audio_buffer);
mfcc_compute(audio_buffer, features_out);
memcpy(input->data.f, features_out, sizeof(features_out));
TfLiteStatus invoke_status = interpreter->Invoke();
float* output = interpreter->output(0)->data.f;
if (output[1] > 0.9) { // 唤醒词概率 > 90%
play_sound("wake_up");
start_recording_for_cloud();
}
}
}
整个过程兼顾了 响应速度与语义深度 :唤醒快、隐私安全(敏感语音才上传)、还能记住上下文(连续提问无压力)。配合CMSIS-DSP库做的降噪处理,即使在宿舍嘈杂环境也能准确识别。
💬 真实反馈 :有用户说,“有时候不想说话,但它主动提醒我‘该休息啦’,感觉像是有人在关心我。”
它不只是个闹钟,是个“行为助推器”
我们来看看 HiChatBox 是如何一步步帮用户建立正向循环的:
[用户语音输入]
↓
[麦克风 → ADC → KWS本地检测]
↓(唤醒成功)
[录音上传 → Wi-Fi → MQTT → 云NLU服务]
↓
[生成回复文本 → TTS合成 → DAC → 扬声器播放]
↑
[ESP32主控] ←→ [OLED显示 / RTC时钟 / Flash存储]
↓
[任务调度引擎] ↔ [本地数据库 SQLite 或 JSON 文件]
↓
[倒计时提醒触发] → [LED / 蜂鸣器 / 屏幕动画]
典型的一天可能是这样的:
-
早上7:00
:屏幕亮起,“距考试还有12天”,背景音乐缓缓响起 🎶
-
你说:“今天该学什么?”
→ 回应:“高等数学第4章(1.5h),四级词汇List3(0.5h)”
-
晚上9:00
:提醒完成任务,若未完成则记录并调整明日计划
-
每周日晚上
:自动生成学习报告:“本周完成率85%,建议加强政治背诵”
它解决的不仅是“忘记学”的问题,更是深层的心理障碍:
- ✅
拖延症
?固定时间提醒形成习惯锚点
- ✅
计划脱离实际
?动态调度避免积压崩溃
- ✅
信息过载焦虑
?只展示当日任务,屏蔽长期压力
- ✅
孤独感
?拟人化语音增强陪伴感
🛠️ 设计哲学 :我们刻意避免做成“强AI导师”。不推荐题海战术,不鼓吹内卷,而是用温和的 nudging(助推)机制,帮助用户找到属于自己的可持续节奏。
小设备,大未来
HiChatBox 的价值,不在炫技,而在 恰到好处的智能 。
它没有追求复杂的推荐算法,也没有堆砌传感器,而是聚焦于三个核心动作:
1.
看得见的时间
(倒计时)
2.
做得到的任务
(动态计划)
3.
听得见的陪伴
(语音交互)
而这套架构极具扩展性:
- 加个心率传感器?可以监测疲劳程度,建议休息 👩⚕️
- 接入番茄钟?专注时段自动屏蔽提醒 🍅
- 对接电子教材API?一键推送今日学习资料 📚
- 换成ePaper屏幕?续航直接拉到一个月 ⚡
未来的智能学习工具,不该是冰冷的监督者,而应是温暖的同行者。它不催你“再学一小时”,而是问你“累了吗?要不要先歇五分钟?”
当科技学会体贴,学习才真正开始变得可持续。
🔚 最后一句悄悄话:
也许有一天,我们会发现,最有效的AI,不是替我们做决定的那个,而是
记得我们说过“明天再背单词”的那个
。
更多推荐

所有评论(0)