STM32 智能奶茶冲泡系统

从方案选型到代码实现,手把手做一台全自动奶茶机(附硬件清单)

想喝一杯温度刚好、浓度均匀的奶茶,传统做法是烧水、控温、手动搅拌一条龙伺候------温度高了烫嘴,低了冲不开,搅拌不匀还有结块。这篇文章把我做基于 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 阈值设定与功能切换

接线三个坑:

  1. ESP-01S 供电要稳:WiFi 发射瞬间峰值电流大,3.3V 供电不稳会导致模块联网时单片机复位,建议加电容或独立 LDO。
  2. DS18B20 上拉电阻不能省:没有 4.7kΩ 上拉,单总线读出来全是 0x85(85°C 假值),这是最经典的翻车点。
  3. 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() 内部做了五件事,这个结构值得借鉴:

  1. 连接保活:检查 MQTT 连接状态,断线则重启连接流程(关定时器、清缓冲、重连服务器);
  2. 数据采集:扫描按键、读 DS18B20 温度、读 HC-SR04 距离并刷新显示;
  3. 按键处理:按键 1 进入温度阈值设定模式,按键 3/4 数值加减,按键 2 切换搅拌正反转;
  4. 闭环控制:自动模式下,温度低于阈值开加热继电器、到温关闭;液位低于阈值开水泵、到位关闭;
  5. 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、代码、元件清单)

八、资料获取方式

相关推荐
jianqiang.xue3 小时前
ESP-IDF保姆级入门17|GPIO外部中断全解与工程化设计:分层架构/防抖策略/长按双击/优先级配置,掌握工业级可靠输入处理
stm32·单片机·物联网·架构·esp32
码上上岸8 小时前
基于单片机的老人跌倒监测报警器设计与实现
stm32·嵌入式硬件·物联网·智能硬件·硬件
恒锐丰科技林技术员8 小时前
SS6209 半桥驱动器:小型半桥电源方案的优选器件
经验分享·嵌入式硬件
别催小唐敲代码11 小时前
Pixhawk 6C — Mission Planner 烧录 & 全套校准教程
stm32·单片机·嵌入式硬件
wuyk55512 小时前
从零吃透Modbus通信|第7章:终极工程整合(模块化架构、双模式主机从机、RTOS适配、量产级模板)
c语言·stm32·学习·架构
Freak嵌入式13 小时前
Pico UART 数据收发实战:硬件配置、MicroPython 编程
java·开发语言·单片机·嵌入式硬件·生活
一条破秋裤13 小时前
STM32 学习笔记:PWM 驱动 LED 呼吸灯与舵机代码
笔记·stm32·学习
Freak嵌入式14 小时前
Pico PIO 汇编语法深度详解:标识符、指令、伪指令全解析
汇编·stm32·单片机·嵌入式硬件·fpga开发·硬件架构
自小吃多15 小时前
PCB Editor软件差分对添加与设置笔记
笔记·嵌入式硬件