双轴太阳能跟踪器:自动/手动模式切换,高效光伏追踪系统
组件与物料清单
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | 主控 |
| 旋转电位器 | 2 | 手动模式控制方位/俯仰 |
| LED指示灯 | 2 | 红=手动,蓝=自动 |
| 12mm轻触开关 | 1 | 模式切换按钮 |
| MG996R 金属齿轮舵机 | 2 | 驱动面板两轴旋转 |
| 光敏电阻 | 4 | 四角布置,自动模式感光 |
| 10kΩ 电阻 | 5 | 光敏分压+按钮上拉 |
| 221Ω 电阻 | 2 | LED限流 |
所需工具
- 电烙铁
设计工具
- Autodesk Tinkercad - 电路仿真与代码编写
- Arduino IDE
项目简介
这是2017-2018年"Young Hackers"社团小学生项目,改编自OpenSourceClassroom双轴跟踪器。核心是一块5V小太阳能板,双轴旋转实现最大功率点跟踪。小学生以流水线分工完成焊接、绝缘、组装,极具教育意义。





双模式设计
- 手动模式:红灯亮,两个电位器分别控制水平/垂直舵机角度(0-180°映射)
- 自动模式:蓝灯亮,四个光敏电阻检测光强差异,驱动舵机向光源转动
- 按钮切换:短按切换模式,状态掉电不保持(可加EEPROM改进)
核心算法:四分法光敏跟踪
四个光敏电阻布置于面板四角(左上、右上、左下、右下);读取模拟值并映射至0-100光强值(每个传感器需单独标定高低阈值);
- 水平比较:左侧平均 vs 右侧平均,差值>4%则水平舵机逐步转向亮侧
- 垂直比较:上侧平均 vs 下侧平均,差值>4%则垂直舵机逐步转向亮侧
- 死区阈值4%防止抖动,步进1°平滑跟踪
完整代码
#include <Servo.h>
int mode = 0; // 0=手动, 1=自动
int buttonState = 0;
int prevButtonState = 0;
int topLeftLight, topRightLight, bottomLeftLight, bottomRightLight;
int LeftLight, RightLight, TopLight, BottomLight;
Servo servo_9; // 水平舵机
Servo servo_10; // 垂直舵机
void setup() {
pinMode(7, INPUT); // 模式按钮
pinMode(12, OUTPUT); // 红LED-手动
pinMode(11, OUTPUT); // 蓝LED-自动
pinMode(A0, INPUT); // 电位器-水平
pinMode(A1, INPUT); // 电位器-垂直
pinMode(A2, INPUT); // 光敏-左上
pinMode(A3, INPUT); // 光敏-右上
pinMode(A4, INPUT); // 光敏-左下
pinMode(A5, INPUT); // 光敏-右下
servo_9.attach(9); // 水平
servo_10.attach(10); // 垂直
}
void loop() {
// 按钮检测与模式切换(边沿触发)
buttonState = digitalRead(7);
if (buttonState != prevButtonState) {
if (buttonState == HIGH) {
if (mode == 1) { mode = 0; digitalWrite(12, HIGH); digitalWrite(11, LOW); }
else { mode = 1; digitalWrite(11, HIGH); digitalWrite(12, LOW); }
}
}
prevButtonState = buttonState;
delay(50); // 消抖
if (mode == 0) {
// 手动模式:电位器直接映射舵机角度
servo_9.write(map(analogRead(A0), 0, 1023, 0, 180));
servo_10.write(map(analogRead(A1), 0, 1023, 0, 180));
} else {
// 自动模式:光敏跟踪
// 映射并标定每个光敏范围(需实测调整)
topLeftLight = map(analogRead(A2), 50, 980, 0, 100);
topRightLight = map(analogRead(A3), 200, 990, 0, 100);
bottomLeftLight = map(analogRead(A4), 170, 970, 0, 100);
bottomRightLight = map(analogRead(A5), 250, 1000, 0, 100);
// 计算四象限平均光强
TopLight = (topRightLight + topLeftLight) / 2;
BottomLight = (bottomRightLight + bottomLeftLight) / 2;
LeftLight = (topLeftLight + bottomLeftLight) / 2;
RightLight = (topRightLight + bottomRightLight) / 2;
// 水平跟踪
if (abs(RightLight - LeftLight) > 4) {
if (RightLight < LeftLight) { if (servo_9.read() < 180) servo_9.write(servo_9.read() + 1); }
else { if (servo_9.read() > 0) servo_9.write(servo_9.read() - 1); }
}
// 垂直跟踪
if (abs(TopLight - BottomLight) > 4) {
if (TopLight < BottomLight) { if (servo_10.read() < 180) servo_10.write(servo_10.read() - 1); }
else { if (servo_10.read() > 0) servo_10.write(servo_10.read() + 1); }
}
}
}
接线原理图

教学价值与改进方向
- STEM教育典范:小学生分工协作完成硬软结合项目
- Tinkercad仿真先行:零硬件风险验证逻辑
- 改进点:加入MPPT算法、太阳能充电管理、数据记录SD卡、LoRa远程监控
- 结构升级:3D打印支架、滑环解决缠线、防水户外化
制造工艺
- DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- 太阳能跟踪器 V2.0:进阶 DIY 光伏自动追日系统
- 物联网双轴太阳能跟踪器:基于 Arduino 与 Cayenne 的智能能源管理
- 用 Arduino Uno 和 1Sheeld 构建 4x4x4 LED 立方体 - 互动音乐可视化项目
- Arduino 高速转速计 - 单次检测算法实测 6.5MHz 级响应,红外 + 红激光方案
- 铜电镀智能系统:基于 Arduino UNO 的可控电解装置
- Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)
- 数字逻辑实验板套件:元件清单、原理图与 Arduino Mega 双核协同教学指南
- 自制 AI LCD 陪伴机器人:你的互动小伙伴
- 高精度伺服驱动太阳能跟踪平台:最大化光能捕获
- 光伏组件质量管控三大支柱:电池片/封装工艺/运维体系的关键控制点