基于 STM32 的智能电蚊香控制系统:从光感联动到防干烧的完整方案
一、写在前面:为什么做这个系统
传统电蚊香器最大的问题不是"驱蚊效果",而是"液体干了还在加热"------既浪费电又可能烧设备。把光敏电阻和液位传感器接入 STM32,再让继电器和蜂鸣器配合 OLED 显示,整套"看得见光强、测得到液位、防得了空烧"的小系统就能把电蚊香升级成一款真正"会自己照顾自己"的设备。
本文给出基于 STM32F103C8T6 的智能型液体电蚊香控制系统完整方案:GL5528 光敏电阻实时感知环境光强、SR-01 电阻式水位传感器精准检测液体剩余量、继电器自动控制电蚊香启停、OLED12864 实时显示参数、蜂鸣器液位报警、按键实现阈值与手动控制。整套系统围绕"光感联动+液位防烧+人机交互"三条主线展开,适合家用卧室、儿童房等场景落地。
二、系统功能总览
| 功能模块 | 实现方式 | 用途 |
|---|---|---|
| 光强检测 | GL5528 光敏电阻 + ADC | 检测环境光照强度 |
| 液位检测 | SR-01 电阻式水位传感器 + ADC | 检测电蚊香液体剩余量 |
| 自动启停 | 继电器 + STM32 控制 | 光暗自动开/光强自动停 |
| 防干烧保护 | 液位阈值判断 | 液位 0 自动断电 |
| 液位提醒 | 蜂鸣器 | 三声短促报警 |
| 本地显示 | OLED12864(I2C) | 光强+液位+开关状态 |
| 阈值调节 | 按键 | 用户自定义光强/液位阈值 |
| 手动控制 | 按键 | 强制开/关电蚊香 |
三、关键器件选型
3.1 主控芯片:STM32F103C8T6
主频 72MHz,64KB Flash、20KB SRAM,多个 USART、I2C、SPI、ADC 资源,足够覆盖光强采集、液位采集、OLED 显示、按键扫描、继电器控制全部逻辑。
3.2 光敏电阻:GL5528
硫化镉光敏元件,电阻随光照强度变化;与 10kΩ 固定电阻分压,输出电压送入 STM32 ADC,可实现 0-100% 量化光强。
3.3 液位传感器:SR-01 电阻式水位传感器
电极式设计,液位升降时液体接触电极的数量变化引起电阻值变化;输出模拟电压送入 ADC,转换为液位高度值。
3.4 显示模块:OLED12864
128×64 单色 OLED,I2C 接口,SSD1306 控制器,自发光高对比度,强光下也能清晰显示光强、液位与开关状态。
3.5 继电器
5V 线圈,单刀双掷,COM/NO 接电蚊香加热器电源回路,STM32 控制信号经三极管驱动继电器线圈,触点吸合接通加热器电源。
3.6 蜂鸣器
有源蜂鸣器,STM32 输出低电平经三极管驱动发声,用于液位提醒与防干烧报警。
四、系统硬件接线总表
| 模块 | 引脚 | STM32 端 | 备注 |
|---|---|---|---|
| GL5528 | 分压输出 | PA0(ADC1_IN0) | 模拟输入 |
| SR-01 液位 | 信号/VCC/GND | PA1/5V/GND | ADC1_IN1 |
| OLED12864 | VCC/GND/SCL/SDA | 3.3V/GND/PB8/PB9 | I2C1 |
| 继电器 | IN/VCC/GND | PB0/5V/GND | NPN 驱动 |
| 蜂鸣器 | I/O | PB1 | NPN 驱动 |
| LED 状态 | I/O | PB2 | 高电平点亮 |
| 按键 K1 | I/O | PB10 | 阈值模式切换 |
| 按键 K2 | I/O | PB11 | 阈值+/手动开 |
| 按键 K3 | I/O | PB12 | 阈值-/手动关 |
五、软件设计
5.1 主程序流程
int main(void)
{
SystemInit();
GPIO_Init();
ADC1_Init();
OLED_Init();
Key_Init();
Beep_Init();
Relay_Init();
Load_Threshold_From_Flash();
while (1)
{
// 1. 数据采集
light_adc = ADC_Read_Average(ADC_Channel_0, 20);
liquid_adc = ADC_Read_Average(ADC_Channel_1, 20);
light_value = Light_ADC_To_Percent(light_adc);
liquid_value = Liquid_ADC_To_Height(liquid_adc);
// 2. OLED 显示
OLED_ShowStatus(light_value, liquid_value, relay_state);
// 3. 自动控制逻辑(手动模式优先)
if (work_mode == MANUAL)
{
// 手动模式由按键直接控制 relay_state
}
else
{
if (light_value < light_threshold && liquid_value > 0)
{
relay_state = ON;
}
else
{
relay_state = OFF;
}
}
// 4. 防干烧保护(最高优先级)
if (liquid_value <= 0)
{
relay_state = OFF;
Beep_Continuous_2S(); // 持续响 2 秒
}
else if (liquid_value < liquid_warn_threshold)
{
Beep_Three_Beep(); // 三声短促提醒
}
// 5. 执行继电器
Relay_Write(relay_state);
// 6. 按键处理
Key_Scan();
Delay_Ms(100);
}
}
5.2 光强 ADC 转换
uint8_t Light_ADC_To_Percent(uint16_t adc)
{
// 强光下光敏电阻变小 → ADC 读数变大
// 暗光下光敏电阻变大 → ADC 读数变小
if (adc >= 4000) return 100;
return (uint8_t)((uint32_t)adc * 100 / 4095);
}
5.3 液位 ADC 转换
uint8_t Liquid_ADC_To_Height(uint16_t adc)
{
// SR-01 输出与液位成正比,量程按 0-30mm
if (adc <= 100) return 0;
return (uint8_t)((uint32_t)adc * 30 / 4095);
}
5.4 蜂鸣器报警
void Beep_Three_Beep(void)
{
for (uint8_t i = 0; i < 3; i++)
{
Beep_On(); Delay_Ms(80);
Beep_Off(); Delay_Ms(80);
}
}
void Beep_Continuous_2S(void)
{
Beep_On(); Delay_Ms(2000);
Beep_Off();
}
5.5 阈值持久化
typedef struct {
uint8_t light_threshold; // 默认 30(百分比)
uint8_t liquid_warn; // 默认 5mm
uint8_t work_mode; // 0=自动 1=手动
uint8_t manual_state; // 手动模式下继电器状态
} SysConfig;
SysConfig g_cfg = { 30, 5, 0, 0 };
void Save_Config(void)
{
FLASH_Unlock();
FLASH_ErasePage(ADDR_CFG);
FLASH_ProgramWord(ADDR_CFG, *(uint32_t*)&g_cfg);
FLASH_Lock();
}
六、系统测试
6.1 光强检测测试
用手电筒在不同亮度下照射 GL5528,OLED 显示的光强百分比与照度计测量值变化趋势一致,0%-100% 全段对应关系平滑无跳变。
6.2 液位检测测试
把 SR-01 探头浸入水中,液位从 0mm 缓慢上升到 30mm,每隔 5mm 记录一次 ADC 值。测试结果显示 ADC 值与液位高度呈良好线性关系,误差 ≤1mm。
6.3 自动启停测试
把光敏电阻用遮光罩盖住(模拟夜晚),系统自动开启电蚊香;移开遮光罩后电蚊香自动关闭。切换时间 ≤1s。
6.4 防干烧测试
把 SR-01 探头露出水面,模拟液位耗尽。系统在 1s 内关闭继电器,蜂鸣器持续响 2 秒,OLED 显示"液位 0,请加液"。
6.5 液位提醒测试
液位缓慢下降到警告阈值(默认 5mm)以下,蜂鸣器发出三声短促报警,提示用户加液;液位恢复到正常阈值后报警停止。
6.6 阈值调节测试
按 K1 进入阈值设置模式,K2/K3 分别加减阈值,OLED 实时显示当前阈值;按 K1 确认后阈值保存到 Flash,重新上电后保持。
6.7 整机长时间测试
系统连续运行 72h,模拟光照与液位变化的多种组合,所有控制动作均准确触发,蜂鸣器报警与继电器联动稳定无异常。
八、总结
本文以 STM32F103C8T6 为主控,结合 GL5528 光敏电阻、SR-01 电阻式液位传感器、OLED12864 显示、继电器、蜂鸣器和按键输入,给出了一套覆盖"光感联动+液位防烧+人机交互"三条主线的智能型液体电蚊香控制系统完整方案。系统通过 GL5528 实时感知环境光强,在光线暗时自动开启电蚊香、光线强时自动关闭;通过 SR-01 精准检测液体剩余量,液位低时蜂鸣器提醒、液位 0 时自动断电防干烧;通过 OLED12864 实时显示光强、液位与开关状态,按键支持阈值调节和手动控制。整套系统在硬件选型上注重成本控制,软件结构上保持模块化和可扩展,是家用卧室、儿童房等小型蚊虫防护场景的理想方案。后续可在现有基础上接入 Wi-Fi 模块(ESP8266)实现 APP 远程监控、加入定时开关功能、扩展温湿度联动等,进一步提升产品的智能化和场景适配度。