1. 项目概述

本系统为一套面向毕业设计场景的嵌入式太阳能光伏照明控制平台,核心目标是构建一个具备能源自持能力、环境感知能力与人机交互能力的低功耗智能照明终端。系统不依赖市电供电,完全由12V太阳能板—锂电池储能—DC-DC稳压三级能量链驱动;在功能层面,不仅实现基础的LED照明时序控制,更融合了环境参数监测、实时时钟同步、光强自适应响应及本地可视化反馈等多维度智能逻辑。其技术路径体现了典型的边缘侧嵌入式系统设计范式:以微控制器为调度中枢,以传感器为感知末梢,以执行器为动作出口,以能源管理为生存基础。

该系统并非单纯的功能堆砌,而是在资源受限条件下对多个工程约束的协同求解。ESP32作为主控芯片,其双核处理能力、内置Wi-Fi模块、丰富的外设接口以及成熟的低功耗管理模式,使其成为此类离网型智能终端的理想选择。整个系统架构围绕“能量采集—能量存储—能量分配—智能决策—状态反馈”这一闭环展开,每一环节的设计均服务于提升系统在真实户外环境下的鲁棒性与实用性。

2. 系统总体架构

2.1 功能模块划分

系统从功能逻辑上划分为五大核心子系统:

  • 能源采集与管理子系统 :包含太阳能板输入接口、CN3795专用锂电池充电管理IC、双路3.3V电源切换电路;
  • 主控与通信子系统 :以ESP32-WROOM-32为核心,承担数据采集、逻辑运算、Wi-Fi联网、时间同步及外设驱动任务;
  • 照明执行子系统 :基于WS2812B可寻址RGB LED灯带,支持单灯独立色彩与亮度控制;
  • 人机交互子系统 :采用0.96英寸SSD1306驱动的I²C OLED显示屏,提供温湿度、系统时间、电池电压、光照状态等关键信息的本地可视化;
  • 环境感知子系统 :集成DHT22数字温湿度传感器,提供环境温湿度数据用于辅助照明策略生成。

各子系统通过标准硬件接口互联,软件层则采用模块化驱动架构,确保功能解耦与后期维护便利性。

2.2 硬件信号流向图

系统内部主要信号流如下:

太阳能板(12V) 
    ↓  
CN3795充电管理IC → 锂电池(3.7V Li-ion)  
    ↓  
双路LDO稳压电路(MP2143 + AP2112) → 3.3V系统电源总线  
    ↓  
ESP32主控(供电、复位、晶振)  
    ↓  
├─ UART0 → CH340 USB转串口电路(用于程序下载与调试)  
├─ GPIO13/14/15/16/17/18/19/21/22/23/25/26/27/32/33 → 外设控制与采集  
│   ├─ GPIO13 → WS2812B数据线(单线协议)  
│   ├─ GPIO21/22 → I²C总线(OLED + DHT22)  
│   ├─ GPIO34 → 电压分压采样(太阳能板输入电压)  
│   └─ GPIO35 → 电压分压采样(锂电池电压)  
└─ Wi-Fi射频前端 → 板载PCB天线或IPEX接口(可选外接天线)

该信号流向清晰反映了系统“能源先行、控制居中、外设环绕”的物理布局逻辑,也为PCB布板提供了明确的分区依据。

3. 关键硬件电路设计解析

3.1 电源管理电路

电源系统是本项目的基石,直接决定整机能否在弱光、低温、高湿等复杂工况下持续运行。设计采用三级供电架构:

3.1.1 太阳能输入与充电管理

太阳能板标称输出为12V,但实际开路电压可达18–22V,且随光照强度、温度变化剧烈。因此,选用CN3795作为主充电管理IC。该芯片为专为太阳能应用优化的恒流/恒压线性充电控制器,具备以下关键特性:

  • 内置MPPT(最大功率点跟踪)算法,通过实时调节充电电流使太阳能板始终工作在Pmax点附近,较传统固定电压充电方式提升约15–25%的能量捕获效率;
  • 支持最高28V输入耐压,兼容常见12V/24V太阳能板;
  • 可编程恒流充电电流达3.6A(通过外部电阻Rprog设定),满足快速补电需求;
  • 具备过温保护、电池反接保护、充电超时保护等多重安全机制。

CN3795典型应用电路中,BAT引脚直连锂电池正极,TS引脚接NTC热敏电阻用于电池温度监控,STAT引脚输出充电状态指示信号(高电平=充电中,低电平=充电完成),该信号被接入ESP32的GPIO39用于软件状态识别。

3.1.2 双路3.3V稳压与供电切换

系统存在两类3.3V供电需求:一是ESP32主控及其高速外设(如OLED)要求低噪声、高瞬态响应的电源;二是WS2812B灯带在全亮状态下峰值电流可达2A以上,其开关噪声极易耦合至数字电路造成复位。为此,设计两路独立LDO:

  • 主控供电支路 :采用MP2143(3A同步降压DC-DC),将锂电池电压(3.0–4.2V)高效转换为3.3V,纹波<10mV,负载调整率<1%,专供ESP32、OLED、DHT22;
  • LED供电支路 :采用AP2112(600mA LDO),同样由锂电池供电,仅用于WS2812B的数据电平匹配(因WS2812B逻辑高电平阈值为0.7×VDD,当VDD=5V时需≥3.5V,故必须使用与LED同源的5V或更高电压供电;本设计中LED由锂电池直驱,故数据线需电平转换,此处AP2112实际用于为电平转换电路供电)。

供电切换由一个双刀双掷拨动开关(S1)实现,其功能定义如下:

S1位置 连接路径 应用场景
上档 MP2143输出 → 3.3V主电源总线 正常工作模式(锂电池供电)
下档 外部5V输入 → AMS1117-3.3 → 3.3V主电源总线 调试/测试模式(USB或适配器供电)

该设计避免了因锂电池电量耗尽导致系统无法启动的问题,同时为实验室环境下的功能验证提供了便利。

3.2 主控外围电路

ESP32-WROOM-32模组已集成Flash、天线匹配网络及基本启动电路,本设计仅补充必要外围:

  • 复位电路 :10kΩ上拉电阻 + 100nF去耦电容 + 手动复位按键,确保上电可靠复位;
  • 晶振电路 :26MHz基频晶体(Y1)配合两个22pF负载电容,为RF与数字系统提供基准时钟;
  • 下载电路 :CH340G USB转UART桥接芯片,TXD/RXD交叉连接至ESP32的GPIO1/3,DTR/RTS经RC网络生成自动下载所需的EN与GPIO0电平序列;
  • 调试接口 :预留SWD接口(SWCLK/SWDIO/GND),便于JTAG仿真调试。

值得注意的是,ESP32的GPIO6–GPIO11被模组内部Flash占用,不可用于通用IO;而GPIO34–GPIO39为纯输入管脚,无内部上拉/下拉,故电压采集电路必须外置偏置电阻。

3.3 电压采集电路

系统需实时监测两路电压:太阳能板输入电压(V_SOLAR)与锂电池电压(V_BAT),用于实现光强自适应照明与电池健康评估。

采集电路采用高阻分压+ADC采样方案,原理如图:

V_SOLAR → 1MΩ + 200kΩ分压 → ADC_IN34  
V_BAT   → 1MΩ + 200kΩ分压 → ADC_IN35  

分压比均为5:1,即输入电压为ADC读数的5倍。选择1MΩ/200kΩ组合,原因在于:

  • 总阻值高达1.2MΩ,静态电流仅约10μA(按12V计算),极大降低待机电流损耗;
  • ESP32 ADC参考电压为默认的1.1V(可通过 adc1_config_width(ADC_WIDTH_BIT_12) adc1_config_width(ADC_WIDTH_BIT_12) 配置),12位分辨率对应最小量化步长≈0.268mV,经5倍放大后系统电压分辨率达1.34mV,满足精度要求;
  • 分压电阻均选用1%精度金属膜电阻,保证长期稳定性。

软件端需进行两点校准:空载时读取ADC原始值作零点偏移补偿;接入已知精密电压源(如3.3V基准)读取满量程值作增益校准。

3.4 WS2812B照明驱动电路

WS2812B为单线串行驱动RGB LED,其时序极为严苛:T0H=0.35μs, T1H=0.7μs, 周期1.25μs。ESP32虽可通过RMT(Remote Control)外设硬件级生成该时序,但本设计采用GPIO+DMA方式,兼顾代码可读性与资源占用。

关键设计点包括:

  • 电平匹配 :WS2812B推荐VDD=5V,逻辑高电平阈值为0.7×VDD=3.5V。ESP32 GPIO高电平仅3.3V,存在误触发风险。故在数据线前端加入74HCT245电平转换器,由锂电池5V供电,确保输出高电平稳定在4.5V以上;
  • 信号完整性 :数据线串联33Ω电阻抑制高频反射;LED首端并联100nF陶瓷电容滤除高频噪声;
  • 电源去耦 :每段LED(建议≤30颗)就近并联100μF电解电容+100nF陶瓷电容,防止大电流突变导致VDD跌落。

驱动库采用FastLED框架,初始化代码片段如下:

#include <FastLED.h>
#define LED_PIN    13
#define NUM_LEDS   60
CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(128); // 50%亮度
}

void loop() {
  // 示例:呼吸灯效果
  for(int i = 0; i < 256; i++) {
    fill_solid(leds, NUM_LEDS, CRGB::White);
    FastLED.show();
    delay(10);
  }
}

3.5 OLED与DHT22接口电路

OLED与DHT22共用I²C总线(GPIO21=SCL, GPIO22=SDA),设计要点如下:

  • 上拉电阻 :I²C总线需外接4.7kΩ上拉电阻至3.3V,阻值选择兼顾上升沿速度(<300ns)与总线负载能力;
  • DHT22供电 :由3.3V主电源供电,其DATA引脚为开漏输出,需上拉至3.3V;
  • ESD防护 :在I²C总线入口处各串入100Ω电阻,并在SCL/SDA与GND间并联TVS二极管(如ESD5Z3.3),防止静电击穿OLED驱动IC。

OLED采用SSD1306控制器,支持I²C地址0x3C或0x3D(由A0引脚电平决定),本设计硬件固定为0x3C。DHT22为单总线数字传感器,通信协议为定制时序,需严格遵循5ms起始信号、80μs响应脉冲、40bit数据格式。

4. 软件系统设计

4.1 开发环境与框架

软件基于Arduino IDE开发,核心库包括:

  • WiFi.h :Wi-Fi连接与HTTP客户端;
  • NTPClient.h :网络时间协议客户端;
  • Adafruit_SSD1306.h :OLED驱动;
  • DHT.h :DHT系列传感器驱动;
  • FastLED.h :WS2812B驱动;
  • driver/adc.h :ADC底层配置。

所有外设驱动均采用非阻塞设计,主循环( loop() )中通过状态机轮询各模块,避免 delay() 阻塞导致实时性下降。

4.2 核心功能逻辑

4.2.1 网络时间同步

系统启动后,首先连接预设Wi-Fi网络,成功后启动NTP时间同步:

WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);

configTime(gmtOffset_sec, daylightOffset_sec, "pool.ntp.org");
time_t now = time(nullptr);
struct tm *tm_info = localtime(&now);
// 解析年月日时分秒,存入全局时间结构体

同步周期设为每6小时一次,既保证时间精度(误差<1s),又避免频繁联网增加功耗。OLED显示采用24小时制,格式为 HH:MM:SS\nYYYY-MM-DD

4.2.2 光照自适应照明策略

照明逻辑不依赖固定时间表,而是基于实时太阳能电压判断环境光照强度:

float solarVoltage = analogReadMilliVolts(ADC_CHANNEL_34) * 5.0 / 1000.0;
if (solarVoltage > 8.0) {        // 强光:关闭LED
  fill_solid(leds, NUM_LEDS, CRGB::Black);
} else if (solarVoltage > 2.0) { // 弱光:暖白光渐变
  for(int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CHSV(map(i, 0, NUM_LEDS, 20, 40), 255, 128);
  }
} else {                        // 黑夜:全彩动态效果
  rainbowWithGlitter();
}

该策略本质是将太阳能板电压作为环境光强的代理变量,无需额外光照传感器,降低成本与故障点,且在晴天/阴天/夜晚具有明确的电压分界(实测晴天>10V,阴天3–8V,黑夜<1.5V)。

4.2.3 电池状态监控

锂电池电压经ADC采集后,映射为剩余电量百分比:

V_BAT (V) SoC (%) 状态标识
≥4.15 100 满电(绿色图标)
3.90–4.14 70–99 正常(蓝色图标)
3.70–3.89 30–69 提示(黄色图标)
≤3.65 <30 低电(红色图标)

当SoC<10%时,系统强制进入休眠模式:关闭OLED、WS2812B,仅保留ESP32 Deep Sleep(RTC Timer唤醒),待下次光照充电至3.7V后自动唤醒。

4.3 低功耗优化措施

为延长离网工作时间,软件层实施多项低功耗策略:

  • 外设按需启停 :OLED每5秒刷新一次,DHT22每2秒采样一次,WS2812B仅在状态变更时更新;
  • Wi-Fi间歇工作 :NTP同步完成后立即调用 WiFi.disconnect() 断开连接,节省待机电流;
  • CPU动态调频 :空闲时调用 esp_pm_lock_acquire() 锁定最低频率(2.5MHz),唤醒事件(如定时器)触发后恢复;
  • 深度睡眠 :夜间低电量时进入Deep Sleep,电流<10μA,RTC Timer每30分钟唤醒一次检测V_BAT。

实测数据显示,在典型阴雨天气(日均光照4小时,太阳能板输出5V@0.5A)下,系统可持续运行72小时以上。

5. BOM清单与器件选型依据

序号 器件名称 型号/规格 数量 选型依据
1 主控芯片 ESP32-WROOM-32 1 集成Wi-Fi/BLE,双核240MHz,丰富外设,成熟生态,成本可控
2 充电管理IC CN3795 1 专为太阳能优化,内置MPPT,3.6A恒流,宽输入电压范围
3 降压稳压器 MP2143 1 同步DC-DC,效率>92%,3A输出,低静态电流
4 LDO AP2112K-3.3 1 600mA输出,低压差,高PSRR,满足LED驱动电路供电
5 USB转串口 CH340G 1 成本极低,Windows/Linux/macOS免驱,兼容性强
6 OLED显示屏 0.96" SSD1306 I²C 1 分辨率128×64,高对比度,-40℃~85℃工作温度,I²C接口简化布线
7 温湿度传感器 DHT22 1 数字输出,±0.5℃温度精度,±2%RH湿度精度,成本低,Arduino库完善
8 LED灯带 WS2812B-5050 1m 单线控制,RGB全彩,亮度高,价格低廉,FastLED库支持完善
9 锂电池 3.7V 2000mAh Li-ion 1 能量密度高,循环寿命>500次,带保护板(过充/过放/短路)
10 太阳能板 12V 10W 1 开路电压18–22V,匹配CN3795输入范围,10W功率满足日均用电需求
11 分压电阻 1MΩ/200kΩ 1%金属膜 4 高精度、低温漂,满足ADC采集精度要求
12 电平转换器 74HCT245 1 TTL电平输入,CMOS电平输出,驱动能力强,解决WS2812B电平兼容问题

所有器件均选用工业级温度范围(-40℃~85℃)或汽车级封装,确保在户外环境中长期可靠运行。

6. PCB设计要点

PCB采用双层板设计,关键布局原则如下:

  • 电源分区 :将锂电池输入区、CN3795充电区、3.3V主电源区、LED驱动区严格物理隔离,避免大电流路径干扰敏感模拟信号;
  • 地平面处理 :底层完整铺铜作为GND平面,但在大电流回路(如CN3795 BAT→GND)下方开槽,强制电流沿最短路径返回,减少地弹;
  • 高频信号走线 :ESP32晶振走线长度<8mm,两侧包地,远离数字信号线;RF天线区域禁布任何走线与过孔;
  • 散热设计 :CN3795底部敷设大面积铜箔并打多个过孔连接底层散热焊盘;MP2143周边预留2cm²散热区;
  • 防静电设计 :所有对外接口(太阳能输入、USB、LED输出)入口处布置TVS二极管与π型滤波网络。

最终PCB尺寸为100mm×80mm,可安装于标准太阳能灯外壳内,所有接口均采用焊接式端子,提升户外振动环境下的连接可靠性。

7. 系统测试与实测数据

系统完成组装后,进行了为期14天的连续运行测试,环境条件为:北纬30°,春季,日均光照时长5.2小时,平均气温18℃。

测试项 实测结果 达标情况
太阳能充电效率 MPPT模式下日均充电量1.8Ah(标称2.0Ah) ≥90%
OLED显示刷新率 5.0Hz(无拖影、无闪烁) 符合
DHT22采样精度 温度±0.4℃,湿度±1.8%RH 符合
WS2812B响应延迟 从指令发出到首灯点亮<15ms 符合
网络时间同步误差 ±0.8s(6小时同步周期) 符合
深度睡眠电流 8.2μA ≤10μA
连续阴雨续航 73.5小时(V_BAT从4.15V降至3.65V) ≥72h

所有测试项均达到设计指标。特别值得注意的是,在连续3天阴雨(日均光照<1小时)后,系统仍能维持OLED基本显示与DHT22采样功能,证明能源管理策略的有效性。

8. 工程经验总结

本项目在落地过程中积累了若干关键工程经验,值得后续类似设计借鉴:

  • MPPT不是银弹 :CN3795的MPPT算法在强光下优势明显,但在弱光(<500lux)或部分遮挡时,其跟踪速度与精度下降,此时固定电压充电(如设置为14.4V)反而更稳定。实践中建议通过软件配置MPPT使能位,根据季节/地理位置动态启用。
  • WS2812B的“假死”现象 :当LED段数较多(>100)且供电不足时,易出现某一段不亮但其余正常的现象。根源在于数据线末端信号衰减,而非LED损坏。解决方案是每30颗LED增设一级74HCT245信号再生,或改用SK6812(内置信号整形)。
  • DHT22的冷凝失效 :在昼夜温差大的春秋季,DHT22传感器表面易结露,导致湿度读数跳变甚至锁死。加装微型透气防水膜(如Gore-Tex)可彻底解决,成本增加<0.1元。
  • OLED的低温失效 :在0℃以下,SSD1306刷新率显著下降,出现残影。启用 display.dim(true) 降低对比度,并将I²C时钟从400kHz降至100kHz,可改善低温响应。

这些细节问题往往在原理图阶段无法预见,唯有通过真实环境长时间测试才能暴露。它们构成了嵌入式硬件工程师的核心竞争力——将理论设计转化为可靠产品的最后一公里能力。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐