从方案选型到代码实现,手把手做一台全自动奶茶机(附硬件清单)
想喝一杯温度刚好、浓度均匀的奶茶,传统做法是烧水、控温、手动搅拌一条龙伺候------温度高了烫嘴,低了冲不开,搅拌不匀还有结块。这篇文章把我做基于 STM32 的智能奶茶冲泡系统 的完整过程写出来:方案怎么定、器件怎么选、电路怎么连、程序怎么写、怎么调试,一条龙全讲透。
这套系统能做到:液位低了自动加水、温度低了自动加热、步进电机自动搅拌、奶茶快溢出自动告警,所有状态实时显示在 OLED 屏上,还能通过手机 APP 远程控制加水、加热、搅拌。做毕业设计,它有传感器采集、有闭环控制、有物联网上云,答辩内容管够;自己玩,它就是一台桌面级全自动奶茶机。
一、系统功能拆解
一句话总结:传感器实时监测 → 单片机闭环控制 → 执行机构自动动作 → 状态上云可远程干预。
| 功能 | 实现方式 | 对应硬件 |
|---|---|---|
| 液位检测 | 超声波测距换算液位 | HC-SR04 |
| 自动加水 | 液位低于阈值 → 继电器开水泵 | 继电器 + 水泵 |
| 温度检测 | 数字温度传感器 | DS18B20(单总线) |
| 自动加热 | 温度低于阈值 → 继电器开加热,到温自动停 | 继电器 + 加热模块 |
| 自动搅拌 | 步进电机正反转混合 | ULN2003 + 28BYJ-48 |
| 溢满检测 | 红外对管遮挡判断 | 红外光电开关 |
| 状态显示 | 温度/液位/制作状态实时刷新 | OLED12864(SSD1306) |
| 远程监控 | MQTT 上云,APP 控制 | ESP-01S |
| 阈值设定 | 按键进入设定模式加减 | 4 个独立按键 |
二、器件选型:每个模块都给你对比过
选型结论先放前面,每个都做过双方案对比(完整对比过程见下文):
| 器件 | 选型结果 | 淘汰方案 | 核心理由 |
|---|---|---|---|
| 主控 | STM32F103C8T6 | ATmega328P | 72MHz + 丰富外设,复杂控制扛得住 |
| 无线 | ESP-01S | WizFi250 | 便宜、社区资源多、体积小 |
| 温度 | DS18B20 | TMP36 | 数字输出抗干扰,单总线省引脚 |
| 液位 | HC-SR04 | JSN-SR04T | 便宜、精度够用(JSN-SR04T 防水但精度一般) |
| 显示 | OLED12864 | ST7735 | 自发光低功耗、对比度高、广视角 |
| 溢满检测 | 红外对管 | GP2Y0A60SZ | 近距离检测精度高、抗干扰强 |
| 电机驱动 | ULN2003 | TMC2208 | 成本低、驱动 28BYJ-48 足够 |
几个关键选型理由展开讲:
- DS18B20 vs TMP36:TMP36 是模拟输出,需要外接 ADC 还容易被电源噪声干扰;DS18B20 数字直出 ±0.5°C 精度,一根数据线就能通信(PB8 + 4.7kΩ 上拉),支持多传感器共线,扩展性好得多。
- HC-SR04 vs JSN-SR04T :JSN-SR04T 防水但体积大、精度一般;奶茶机是室内场景,防水需求不强,HC-SR04 便宜一半且开发资源最丰富。距离换算公式:距离(cm) = 回波时间(us) / 58,程序里做 5 次测量取平均,精度足够。
- ULN2003 vs TMC2208:TMC2208 的 256 细分和静音对 3D 打印有意义,但驱动 28BYJ-48 小步进电机搅拌奶茶纯属杀鸡用牛刀,ULN2003 几块钱解决战斗。
整套系统物料成本约 60~70 元(不含 PCB 打样),性价比拉满。
三、电路设计:接线表 + 关键要点
主控是 STM32F103C8T6 最小系统(复位电路 NRST + 10kΩ 上拉 + 100nF 去耦;时钟电路 8MHz 主晶振 + 32.768kHz 低速晶振,各配 20pF 负载电容)。外设接线归纳成一张表:
| 模块 | 接口方式 | 连接引脚 | 备注 |
|---|---|---|---|
| ESP-01S | UART | PA2(TX)/PA3(RX),RST→PA8 | 3.3V 供电,串口参数要匹配 |
| DS18B20 | 单总线 | PB8 | 必须 4.7kΩ 上拉到 VDD |
| HC-SR04 | GPIO | Trig→PB10,Echo→PB11 | 5V 供电 |
| OLED12864 | IIC | PB6(SCL)/PB7(SDA) | 3.3V,SSD1306 驱动 |
| 红外对管 | GPIO 输入 | OUT→PB0 | 5V 供电 |
| ULN2003 | GPIO 输出 | PA4/PA5/PA6/PA7 | 驱动步进电机四相 |
| 继电器×2 | GPIO 输出 | PA0(加热)、PA1(水泵) | 独立控制加热与加水 |
| LED×2 | GPIO 输出 | PA11/PA12 | 红/黄状态指示 |
| 按键×4 | GPIO 输入 | PB15/PB14/PB12/PB13 | 阈值设定与功能切换 |
接线三个坑:
- ESP-01S 供电要稳:WiFi 发射瞬间峰值电流大,3.3V 供电不稳会导致模块联网时单片机复位,建议加电容或独立 LDO。
- DS18B20 上拉电阻不能省:没有 4.7kΩ 上拉,单总线读出来全是 0x85(85°C 假值),这是最经典的翻车点。
- HC-SR04 用 5V 供电:3.3V 供电测距会漂,但 Echo 脚输出是 5V 电平,接到 STM32 前最好确认耐压(实测多数板子直连可用,稳妥可加分压)。
四、软件设计
4.1 主程序框架
初始化完所有模块后进入主循环,持续刷新显示并调度业务逻辑:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2位抢占 + 2位响应
delay_init(); // 延时函数初始化
TIM4_Init(300, 7200); // 定时器初始化
E18_D80_Init(); // 红外对管溢满检测 PB0
KEY_Init(); // 按键 PB15/14/12/13
DS18B20_Init(); // 温度传感器 PB8
Hcsr04_Timer2_Init(); // 超声波测距 PB10/PB11
OLED_Init(); // OLED 显示初始化
ULN2003_GPIOA_Init(); // 步进电机驱动 PA4-7
Relay_init(); // 继电器 PA0(加热)/PA1(水泵)
Led0_init(); // LED PA11/PA12
OLED_CLS(); // 清屏
OLED_ShowCN(0, 0, 4); // 显示"温度"标签
OLED_ShowCN(16, 0, 5);
OLED_ShowCN(0, 2, 6); // 显示"液位"标签
OLED_ShowCN(16, 2, 7);
ALi_ESP8266_GPIO_Init(); // ESP8266 上电使能
MQTT_Buff_Init(); // MQTT 报文缓冲初始化
AliIoT_Parameter_Init(); // 云平台参数初始化
while (1)
{
OLED_Display_Cotrol(); // 显示控制 + 业务调度主循环
}
}
4.2 主循环业务流程
OLED_Display_Cotrol() 内部做了五件事,这个结构值得借鉴:
- 连接保活:检查 MQTT 连接状态,断线则重启连接流程(关定时器、清缓冲、重连服务器);
- 数据采集:扫描按键、读 DS18B20 温度、读 HC-SR04 距离并刷新显示;
- 按键处理:按键 1 进入温度阈值设定模式,按键 3/4 数值加减,按键 2 切换搅拌正反转;
- 闭环控制:自动模式下,温度低于阈值开加热继电器、到温关闭;液位低于阈值开水泵、到位关闭;
- MQTT 收发:处理连接确认、订阅确认、心跳响应,解析 APP 下发的命令(加水/加热/搅拌)并执行。
4.3 温度采集:单总线时序
DS18B20 读温度的关键是时序:拉低数据线 750us 后释放做复位应答检测 → 发跳过 ROM 命令(0xCC)→ 发开始转换命令(0x44)→ 等待转换完成后读取暂存器 → 高低字节合成,按 0.0625°C/LSB 换算(返回值单位 0.1°C,范围 -55.0~+125.0°C)。
4.4 超声波测液位:5 次平均滤波
Trig 拉高至少 20us 触发测距,TIM2 计回波宽度,距离 = 时间/58。单次测量容易受震动和液面波纹干扰,连续测 5 次取平均再判定阈值,水泵就不会频繁启停。
4.5 ESP-01S 联网:AT 指令链
上电后按序发送:AT 复位 → AT+CWMODE=1(STA 模式)→ AT+CWJAP(连 WiFi)→ AT+CIPMUX=0(单连接)→ AT+CIPSTART(连服务器)→ 透传模式收发。之后走 MQTT 协议对接阿里云物联网平台,实现状态上报和命令下发。
4.6 搅拌控制:四相八拍
ULN2003 的四个输入脚(PA4-7)按半步/全步序列依次置高,每次状态切换间隔 moto_ms 毫秒,即可驱动 28BYJ-48 正转;反转就是反过来发序列。按键 2 按一下正转、再按反转,模拟奶茶搅拌。
五、调试验证
按模块逐一验证,再整机联调:
| 测试项 | 操作方式 | 结果 |
|---|---|---|
| 按键功能 | 按键 1 进设定模式,按键 3/4 加减阈值 | 正常,OLED 同步刷新 |
| 温度控制 | 手握 DS18B20 模拟升温 | 超过阈值自动关加热继电器,显示"加热完成" |
| 液位控制 | 手放 HC-SR04 上方模拟液位变化 | 低于阈值水泵自动启动 |
| 溢满检测 | 红外对管前遮挡 | 检测到障碍(溢满)黄灯亮,无障碍红灯亮 |
| 搅拌功能 | 按键 2 触发 | 步进电机正转/反转切换正常 |
| 上位机 | 电脑端运行上位机软件 | 温度、液位、加热状态实时显示;控制管理界面可远程切换模式、开关加热/水泵、控制搅拌 |
调试中遇到的典型问题:
- 上电不复位 → 复位电路虚焊,重焊 NRST 后正常(所以焊接后先查电源和复位再查别的);
- 温度读数异常 → 单总线上拉电阻接触不良;
- 液位数据跳变 → 加了 5 次平均滤波后稳定。
六、总结
这套系统的核心价值是完整走通了"传感采集 → 阈值闭环控制 → 双通道反馈(本地 OLED + 云端 APP)"的物联网闭环。做毕设,方案对比、硬件设计、软件设计、系统调试四大章内容齐全;做产品原型,60~70 元的 BOM 也有迭代空间。
可以继续升级的方向:加称重传感器做配方定量(茶奶比例精确到克)、加 PWM 加热做温度曲线控制(模拟分段冲泡)、接入语音模块做"语音点单"。
七、资料内容完整工程资料(原理图、PCB、代码、元件清单)
八、资料获取方式
