2026 贸泽电子M-Design创意设计大赛(第二季)双轴太阳能自动跟随模型
该项目使用了ESP32-S3 单片机、2 个 MG995 舵机、4 路光敏电阻及 2.0 寸 OLED 屏,实现了双轴太阳能自动跟随系统的设计,它的主要功能为:通过光敏电阻检测光源方向,自动控制舵机旋转俯仰,使太阳能板始终对准光源,并实时显示光照数据。
标签
嵌入式系统
开发板
舵机
云台
董董德
更新2026-06-09
4

双轴太阳能自动跟随模型 项目总结报告

参赛方向方向四:绿色能源 太阳能能量采集


主控:ESP32-S3
执行机构:2 个 MG995 舵机(旋转 + 俯仰)
检测:4 路光敏电阻
显示:2.0 寸 OLED 屏


一、项目介绍与创意介绍

1.1 项目介绍

本项目为双轴太阳能自动跟随模型,基于 ESP32-S3 单片机实现光源智能追踪。系统通过4 个光敏电阻检测光照强度差异,自动控制旋转、俯仰双路 MG995 舵机运动,使太阳能板始终对准最亮光源,提高光照接收效率。系统配备 2.0 寸 OLED 屏幕实时显示光敏电阻数值与运行状态,整体结构简洁、控制稳定、响应迅速,是新能源自动追踪领域的典型教学与演示模型。

1.2 创意与创新点

  1. 双轴自动追踪:水平旋转 + 垂直俯仰,实现全方位光源跟随,追踪精度高。
  2. 四象限光敏检测:采用 4 路光敏电阻组成光照检测阵列,判断光源方向更准确。
  3. 自适应差值算法:通过光敏电阻差值判断运动方向,无需复杂标定,响应快、抗干扰强。
  4. 屏幕实时显示:2.0 寸屏实时显示四路 ADC 数据,便于观察与调试。
  5. 舵机角度保护:软件自带角度限制逻辑,防止舵机堵转、结构卡死。

二、项目硬件整体介绍

  1. 主控单元:ESP32-S3 单片机,负责 ADC 采集、舵机控制、屏幕显示、算法运算。
  2. 执行单元:2 个 MG995 金属舵机,分别控制水平旋转、垂直俯仰。
  3. 检测单元:4 个光敏电阻,构成四方向光照检测模块。
  4. 显示单元:2.0 寸 OLED 显示屏,实时显示 ADC 数值。
  5. 供电单元:5V 外接电源,为 ESP32-S3 与舵机提供稳定供电。

image.png


三、整体方案框图与项目设计思路

3.1 方案框图

image.png

3.2 设计思路

系统通过 4 个光敏电阻获取左、右、上、下四个方向的光照强度,ESP32-S3 读取 ADC 值后计算差值,判断光源偏移方向。

  • 左右光敏差值 → 控制水平旋转舵机
  • 上下光敏差值 → 控制垂直俯仰舵机

程序设置死区阈值,避免微小抖动造成舵机频繁动作,保证跟随平稳可靠。


四、原理图与 PCB 说明

本项目采用模块化搭建结构,无专属 PCB 电路板,通过杜邦线完成各模块连接。
光敏电阻模块直接接入 ESP32-S3 的 ADC 接口,2 个 MG995 舵机接入 PWM 控制口,OLED 屏通过 spi 通信。所有接线规范、布局清晰,信号与电源分离,有效减少干扰,满足项目功能实现与竞赛展示要求。

image.png


五、软件流程图与关键代码说明

5.1 软件流程图

image.png

5.2 关键代码说明

1)系统初始化 my_app_main_init ()

完成 OLED 屏幕、ADC 采集、双路 MG995 舵机、按键与定时器的初始化,是系统正常运行的基础。

void my_app_main_init(void)
{
    OLED_init();
    if (adc_init() != 0)
    {
        printf("ADC initialization failed!\n");
        return;
    }
    mg995_init_all();
    key_gpio_init();
    key_timer_init();
}

2)ADC 光敏采集模块

通过 ESP32-S3 的 ADC1 读取 4 路光敏电阻模拟量,分别存入raw_adc0、raw_adc1、raw_adc2、raw_adc3,为方向判断提供数据。

// 读取原始值
int adc_read_raw(int gpio_num, int *raw_value) {
    if (adc_handle == NULL) {
        printf("ADC not initialized, call adc_init first\n");
        return -1;
    }
    adc_channel_t ch;
    if (!get_adc_channel(gpio_num, &ch)) {
        printf("Invalid GPIO %d (supported: 16,17,18,19)\n", gpio_num);
        return -1;
    }
    int raw = 0;
    esp_err_t ret = adc_oneshot_read(adc_handle, ch, &raw);
    if (ret != ESP_OK) {
        printf("ADC read failed on GPIO%d: %s\n", gpio_num, esp_err_to_name(ret));
        return -1;
    }
    *raw_value = raw;
    return 0;
}


// ===================== 修改:读取 16/17/18/19 引脚 =====================
void adc_print_all(void) {
    int raw = 0;
   
    adc_read_raw(16, &raw);
    printf("GPIO16: raw = %4d\n", raw);
    raw_adc0=raw;
   
    adc_read_raw(17, &raw);
    printf("GPIO17: raw = %4d\n", raw);
    raw_adc1=raw;
   
    adc_read_raw(18, &raw);
    printf("GPIO18: raw = %4d\n", raw);
    raw_adc2=raw;
   
    adc_read_raw(19, &raw);
    printf("GPIO19: raw = %4d\n", raw);
    raw_adc3=raw;
}

3)核心跟随算法 my_adc_num ()

  • 读取 4 路光敏 ADC 值
  • 计算左右差值控制旋转舵机
  • 计算上下差值控制俯仰舵机
  • 设置死区(100/200),防止抖动
  • 角度通过/20平滑处理,运动柔和不抖动
  • 调用mg995_single输出 PWM 控制舵机角度
void my_adc_num(void)
{
    static uint16_t motor_A1=600;
    static uint16_t motor_A2=600;
    int16_t nums=0;
    adc_print_all();
    sprintf(shuzhu,"%d,%d   ",raw_adc0,raw_adc1);
    OLED_ShowString(1,60,shuzhu,BLUE,WHITE);
    sprintf(shuzhu,"%d,%d   ",raw_adc2,raw_adc3);
    OLED_ShowString(1,90,shuzhu,BLUE,WHITE);
    nums=raw_adc1-raw_adc0;
    if(nums>100||nums<-100)
    {
        motor_A1-=nums/20;
        mg995_single(3,motor_A1);
    }
    nums=raw_adc3-raw_adc2;
    if(nums>200||nums<-200)
    {
        motor_A2+=nums/20;
        mg995_single(2,motor_A2);
    }
}

4)屏幕显示

OLED 实时显示四路光敏电阻数值,方便观察光源位置与系统运行状态。


六、项目功能展示与说明

  1. 双轴自动跟随:水平 180° 旋转、垂直俯仰,精准追踪光源位置。
  2. 四光敏检测:4 路光敏电阻实现高精度方向判断。
  3. 自适应算法:根据光照强度差自动调整姿态。
  4. 防抖设计:设置死区与平滑系数,运动稳定不抖。
  5. 实时屏幕显示:直观展示四路光敏 ADC 数值。
  6. 结构保护:软件角度限制,避免机械卡死。

image.pngimage.png

image.png



七、设计过程遇到的难题与解决方法

  1. 问题:光敏电阻受环境光干扰,跟随抖动
    解决:设置差值死区,只有光照差超过阈值才动作,大幅提升稳定性。
  2. 问题:舵机运动过快、动作生硬
    解决:将控制量除以 20 进行平滑处理,运动柔和、定位精准。
  3. 问题:光敏电阻一致性差
    解决:采用差值算法,不依赖绝对数值,只判断相对强弱,提高兼容性。
  4. 问题:屏幕刷屏过快导致闪烁
    解决:搭配 10ms 系统延时,保证刷新稳定。

八、竞赛心得体会与建议

通过本次双轴太阳能自动跟随项目,我熟练掌握了 ESP32-S3 的 ADC 采集、舵机 PWM 控制、屏幕显示与闭环控制算法。项目从硬件搭建到软件编程,完整实现了自动追踪、闭环控制、实时显示三大核心功能,让我对工业控制与新能源追踪系统有了更深入的理解。
本项目结构简单、控制逻辑清晰、实用性强,非常适合作为自动化控制类竞赛作品。未来可增加 WiFi 数据上传、太阳能电压采集、大风保护等功能,进一步提升项目完整性。

附件下载
太阳能跟随.zip
代码以及pcb
团队介绍
我们是专注嵌入式开发的团队,擅长ESP32‑S3 无线与高性能应用开发、51 单片机基础系统开发以及硬件电路设计。具备嵌入式软件与硬件的全链路开发能力。
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号