Двухосевой солнечный трекер с авто/ручным управлением
Компоненты и материалы
- Arduino UNO — 1 шт.
- Потенциометры (ротационные) — 2 шт. (ручное управление)
- Светодиоды (индикаторы режимов) — 2 шт. (красный: ручной, синий: авто)
- Таковая кнопка 12мм — 1 шт. (переключение режимов)
- Сервоприводы Tower Pro MG996R — 2 шт. (азимут и угол места)
- Фоторезисторы (LDR) — 4 шт. (четыре квадранта)
- Резисторы 10 кОм — 5 шт. (делители напряжения для LDR)
- Резисторы 221 Ом — 2 шт. (для светодиодов)
Инструменты
- Паяльник
Приложения и сервисы
- Autodesk Tinkercad (проектирование и симуляция)
- Arduino IDE
О проекте
Учебный проект клуба «Young Hackers» (2017-2018). Маленькая 5В солнечная панель вращается по двум осям для максимального сбора энергии. Реализовано два режима:
- Ручной: Красный светодиод горит. Два потенциометра задают углы серво по азимуту и углу места.
- Автоматический: Синий светодиод горит. Четыре фоторезистора (верх-лево, верх-право, низ-лево, низ-право) измеряют освещённость. Панель поворачивается в сторону большего света с гистерезисом 4%.
Переключение режимов кнопкой с антидребезгом (50 мс). Программирование велось в Tinkercad. Ученики работали конвейерно: пайка, изоляция, сборка.
Код (Rotating solar panel code)
#include
int mode = 0; // 0 - manual, 1 - auto
int buttonState = 0, 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); // LDR верх-лево
pinMode(A3, INPUT); // LDR верх-право
pinMode(A4, INPUT); // LDR низ-лево
pinMode(A5, INPUT); // LDR низ-право
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 {
// Калибровка каждого LDR индивидуальна (min/max подбираются экспериментально)
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 && servo_9.read() < 180) servo_9.write(servo_9.read() + 1);
if (RightLight > LeftLight && servo_9.read() > 0) servo_9.write(servo_9.read() - 1);
}
if (abs(TopLight - BottomLight) > 4) {
if (TopLight < BottomLight && servo_10.read() < 180) servo_10.write(servo_10.read() - 1);
if (TopLight > BottomLight && servo_10.read() > 0) servo_10.write(servo_10.read() + 1);
}
}
}
Схемы
Схема монтажа (PNG).
Производственный процесс
- Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
- Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
- Солнечный трекер v2.0 — продвинутая DIY система слежения за солнцем
- IoT-солнечный трекер на Arduino: умное управление энергией с мониторингом через Cayenne
- Создание интерактивного 4x4x4 светодиодного куба на Arduino Uno и 1Sheeld
- Высокоскоростной тахометр на Arduino: новый алгоритм измерения RPM до 2 знаков после запятой
- Медное гальваническое покрытие: умная система на Arduino UNO
- Измерение солнечной радиации на Arduino UNO с Ethernet Shield
- Точная солнеследующая платформа на сервоприводах для максимальной генерации энергии
- Качество солнечных панелей: ключевые контрольные точки для оптимальной производительности