STM32智能标本喷洒系统开源,给在国外的中国用户设计

这是一个真实交付到日本的嵌入式小项目:基于 STM32F103C8T6 的三通道智能标本喷洒系统。客户用来给植物/昆虫标本定时喷雾保湿,系统支持三路独立控制、OLED 菜单、按键 + 旋转编码器调节。本文把硬件方案、核心代码和 Gerber 全部开源,供大家参考复刻。

一、项目背景

这套系统最初是 2024 年底接到的海外客单,最终交付到了日本客户手中。整个 BOM 成本控制在 130 元左右,属于典型的“小而美”出海电子设计。

它的核心需求很简单:

  • 同时对 3 个标本盒 进行喷雾保湿
  • 每路可独立设置:喷雾时间、间隔时间、含水率、标本重量
  • 本地 OLED 菜单 + 按键 + 旋转编码器 调节参数
  • 一键启动/停止,状态实时显示

二、系统框图

系统框图

系统以 STM32F103C8T6 为主控,通过 GPIO 驱动三路继电器,进而控制三个 5V 喷雾泵。人机交互部分使用 0.96 寸 IIC OLED、5 个独立按键和 EC11 旋转编码器。整机由 5V/3A 适配器供电。

三、硬件清单

元器件 数量 说明
STM32F103C8T6 最小系统板 1 主控 MCU,72MHz Cortex-M3
0.96 寸 OLED 显示屏 1 IIC 接口,128×64 分辨率
EC11 旋转编码器 1 参数快速调节
独立按键 5 通道选择、模式切换、启动/停止
5V 继电器模块 1 三路低电平触发,驱动喷雾泵
5V 喷雾器模块 3 USB 微型喷雾泵,三通道独立
5V/3A 电源适配器 1 整机供电
外壳 + 亚克力支架 1 结构固定

IO 资源分配

// 按键:PA1、PA3、PA5、PA6、PA7
// 旋转编码器:PB14(A)、PB13(B)、PB12(SW)
// 继电器输出:PA0(通道1)、PA2(通道2)、PA4(通道3)
// OLED:SCL-PB1、SDA-PB0

四、软件设计

4.1 主循环

main.c 主要负责:

  1. 初始化延时、串口、GPIO、定时器、OLED
  2. 扫描按键与旋转编码器
  3. 切换页面与设置模式
  4. 进入运行状态后,由定时器中断接管喷雾逻辑
#include "stm32f10x.h"
#include "delay.h"
#include "usart1.h"
#include "timer.h"
#include "timer2.h"
#include "oled.h"
#include "show.h"
#include "key.h"
#include "sw.h"

int main(void)
{
u8 key;
Delay_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Usart1_Init(9600);

SW_Init(); // 继电器 GPIO 初始化
KEY_Init(); // 按键 GPIO 初始化
TIM1_ENABLE(); // 编码器扫描定时器
TIM2_ENABLE(); // 喷雾控制定时器

OLED_Init();
OLED_Clear();
page_one(); // 进入参数设置页面

while (1)
{
key = KEY_Scan(0);
if (key == KEY0_PRES) { /* 选择通道1 / 复位 */ }
else if (key == KEY1_PRES) { /* 选择通道2 / 复位 */ }
else if (key == KEY2_PRES) { /* 选择通道3 / 复位 */ }
else if (key == KEY3_PRES) { /* 切换速度档 / 总开关 */ }
else if (key == KEY4_PRES) { /* 进入运行页面 */ }
else if (key == SW_PRES) { /* 切换模式页 */ }
Delay_Ms(100);
}
}

4.2 喷雾控制核心逻辑

喷雾周期由 TIM2 中断实现,每 5ms 进一次中断。核心变量:

  • one_weight / two_weight / three_weight:标本重量
  • one_hanshuilv / ...:目标含水率(0~1)
  • one_penwutime / ...:喷雾时间,由公式自动换算
  • one_jiangetime / ...:间隔时间(分钟)
// 喷雾时间计算:根据重量和含水率换算
one_penwutime = one_weight / (float)(1 - one_hanshuilv) * one_hanshuilv * 200;

运行状态下的状态机:

if (one_work_time == 0) one_status = 0;
else if (one_work_time <= one_penwutime + 1 && one_kaiguan)
one_status = 1; // 正在喷雾
else if (one_work_time > one_penwutime + 1 &&
one_work_time < one_jiangetime * 60 && one_kaiguan)
one_status = 0; // 间隔等待
else if (one_work_time >= one_jiangetime * 60 && one_kaiguan)
{
one_work_time = 0;
one_status = 1; // 开始下一轮喷雾
}

// 根据 status 驱动继电器
if (one_status == 0) WATER1_OFF;
else WATER1_ON;

4.3 继电器驱动

三路继电器分别接到 PA0、PA2、PA4,低电平触发:

#define WATER1_ON  GPIO_SetBits(GPIOA, GPIO_Pin_0)
#define WATER1_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_0)
#define WATER2_ON GPIO_SetBits(GPIOA, GPIO_Pin_2)
#define WATER2_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_2)
#define WATER3_ON GPIO_SetBits(GPIOA, GPIO_Pin_4)
#define WATER3_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_4)

五、原理图与 PCB

5.1 原理图

原理图

5.2 PCB 版图

PCB图

PCB 采用单面板设计,尺寸紧凑,预留了 STM32 最小系统板、OLED、继电器、按键和编码器的接口。

六、功能特点

功能 说明
三通道独立 每路可独立设置喷雾时间、间隔、含水率、重量
自动换算 输入重量和含水率后,系统自动计算喷雾时长
本地显示 0.96 寸 OLED 菜单,运行状态一目了然
便捷操作 5 按键 + EC11 旋转编码器,参数调节效率高
一键启停 KEY3 控制总开关,KEY4 进入运行界面
成本可控 整机 BOM 约 130 元,适合小批量复制

七、项目总结

这个项目虽然硬件简单,但完整覆盖了嵌入式小产品的常见要素:

  • GPIO 控制:按键输入、继电器输出
  • 定时器中断:周期性任务调度
  • 人机交互:OLED 菜单 + 编码器
  • 电源与结构:适配器供电、外壳固定
  • 交付闭环:原理图、PCB、Gerber、源码、BOM 齐全

对于想接海外小单或者做独立硬件产品的同学来说,这类“控制器 + 执行器 + 本地交互”的模板非常实用。

资料下载

完整资料包含:

  • STM32 工程源码(Keil / HAL 风格标准库工程)
  • 原理图 PDF
  • PCB 版图 PDF
  • Gerber 压缩包
  • 硬件清单 BOM

资料链接见博客侧边栏头像下方的 资料链接(下载图标)处。

通过网盘分享的文件:Post37嵌入式-STM32智能标本喷洒系统(首次远渡重洋出国,定时喷雾)
链接: https://pan.baidu.com/s/1BwkkAZhkzo4Oa0z8CrH80g?pwd=gi4j 提取码: gi4j