1. 项目概述:当咖啡遇上单片机
去年工作室装修时,我用了三周时间改造了一台老式半自动咖啡机。现在每天早上,手机闹钟响起的同时,咖啡机就会自动开始研磨豆子,等我洗漱完毕刚好能喝到温度恰好的美式。这套基于STM32的全自动控制系统,实现了从豆仓管理到萃取完成的完整自动化流程,成本不到300元。
这种用单片机改造家电的项目特别适合电子爱好者练手。咖啡机作为典型的热力学系统,涉及到温度控制、流体控制、电机驱动等多个技术模块,比单纯的点灯实验更有挑战性。下面我就从硬件选型到PID调参,详细拆解整个设计过程。
2. 核心模块设计
2.1 控制系统架构
整个系统采用分层设计:
- 主控层:STM32F103C8T6最小系统板(72MHz主频够用)
- 驱动层:L298N电机驱动模块+继电器组
- 传感层:DS18B20温度传感器+流量计+压力传感器
- 人机交互:0.96寸OLED+旋转编码器
特别注意:咖啡机的水泵需要12V/2A驱动能力,普通继电器容易粘连,建议使用固态继电器(SSR)。我用的G3MB-202P能承受2A电流,实测连续工作三个月无故障。
2.2 关键电路设计
研磨电机控制电路最易出问题。咖啡豆硬度不同会导致电流波动,我的解决方案是:
c复制// 电流保护算法示例
if(motor_current > 1.5A) {
pwm_duty -= 10;
delay_ms(100);
if(motor_current > 2A) emergency_stop();
}
配合硬件上的TVS二极管和自恢复保险丝,有效防止了电机堵转烧毁的情况。
3. 温度精准控制实现
3.1 PID算法应用
锅炉温度控制采用增量式PID:
c复制float PID_Calc(float current_temp) {
static float last_error=0, integral=0;
float error = target_temp - current_temp;
integral += error;
float derivative = error - last_error;
last_error = error;
return Kp*error + Ki*integral + Kd*derivative;
}
参数整定经验:
- 先设Ki=0,增大Kp直到出现等幅振荡
- 取振荡周期T,按Ziegler-Nichols法:
- Kp=0.6*Ku
- Ki=2Kp/T
- Kd=Kp*T/8
3.2 温度曲线优化
实测发现92℃恒温萃取效果不如温度爬升方案:
- 预热阶段:快速加热至88℃(全功率)
- 预浸阶段:保持88℃ 5秒
- 萃取阶段:线性升温至92℃(20秒完成)
- 保温阶段:90-92℃波动控制
4. 流体控制系统
4.1 水泵驱动逻辑
采用PWM脉冲驱动水泵模拟专业机的预浸效果:
c复制void preinfusion() {
set_pump_pwm(30); // 30%功率预浸
delay_ms(5000);
set_pump_pwm(100); // 全功率萃取
}
4.2 流量计校准
霍尔流量计需要校准脉冲系数:
- 用量杯接取100ml水
- 记录脉冲数N
- 计算系数K=100(ml)/N
- 在代码中配置:
c复制#define FLOW_COEFFICIENT 0.25 // 每脉冲0.25ml
5. 人机交互设计
5.1 菜单系统架构
使用状态机模式实现多级菜单:
c复制typedef struct {
void (*current_menu)();
void (*up_button)();
void (*down_button)();
void (*enter_button)();
} MenuState;
MenuState main_menu = {
show_main_menu,
NULL,
NULL,
enter_settings
};
5.2 旋转编码器消抖
机械编码器需软件消抖:
c复制void EXTI_Handler() {
static uint32_t last_time=0;
if(HAL_GetTick()-last_time < 20) return;
last_time = HAL_GetTick();
// 正常处理中断
}
6. 系统集成与调试
6.1 电源管理方案
整机功率较大,采用分级供电:
- 主控板:AMS1117-3.3稳压
- 传感器:LM7805供电
- 执行机构:直接12V输入
重要:数字地和功率地单点连接,避免干扰
6.2 故障自检功能
上电时自动检测各模块:
c复制void self_test() {
if(!ds18b20_init()) error_led(1);
if(!flowmeter_read()) error_led(2);
if(!check_pump()) error_led(3);
}
7. 实测效果与优化
经过三个月使用,总结出几个关键改进点:
- 增加蒸汽温度补偿算法(环境温度变化影响大)
- 研磨粗细联动调节(不同豆子需要不同研磨度)
- 手机蓝牙控制功能(通过ESP-01模块实现)
咖啡萃取质量对比商用机:
| 参数 | 本系统 | 商用机 |
|---|---|---|
| 温度波动 | ±1.2℃ | ±0.8℃ |
| 萃取时间 | 25s | 22s |
| 压力稳定度 | ±0.3bar | ±0.1bar |
这套系统最让我满意的是可扩展性——后来我增加了自动打奶泡功能,用步进电机控制蒸汽阀开度,配合超声波传感器检测奶泡高度。下次可以专门聊聊这个模块的实现细节。
