Seguidor Solar de Doble Eje con Arduino UNO – Alineación DIY de Panel Solar
Componentes y Suministros
| Componente | Cantidad |
|---|---|
| Arduino UNO | 1 |
| Micro-servomotor SG90 | 2 |
| LDR (Fotorresistencia) 5 Mohm | 4 |
| Resistencia 330 ohm | 4 |
| Potenciómetro rotativo (genérico) | 1 |
| Pulsador (pushbutton) | 2 |
| Mini Panel Solar | 1 |
Herramientas y Máquinas Necesarias
- Arduino IDE
- Parallax PLX-DAQ (para adquisición de datos en Excel)
Sobre este Proyecto
Este proyecto presenta un banco de pruebas de hardware/software abierto para un seguidor solar. El prototipo se basa en un seguidor solar de doble eje controlado con Arduino Uno, una plataforma de prototipado de código abierto. El seguidor puede controlarse automáticamente mediante sensores LDR (fotorresistencias) o manualmente usando un potenciómetro. Además, proporciona instrumentación virtual basada en Excel para registrar y presentar datos del seguidor solar.
El hardware elegido es económico, compacto y versátil. El banco de pruebas está diseñado para ayudar a estudiantes a desarrollar su comprensión de la teoría de control y su aplicación.
Diseño Mecánico
El modelo CAD 3D del seguidor solar fue diseñado en CATIA. Está compuesto por el panel fotovoltaico, los servomotores izquierda-derecha y arriba-abajo, y cuatro sensores LDR. Para el eje horizontal, un rodamiento está fijo en paralelo con el servomotor arriba-abajo para mayor flexibilidad. El seguidor tiene dos grados de libertad: este-oeste (servomotor izquierda-derecha) y sur-norte (servomotor arriba-abajo).
Los sensores LDR se colocan en las cuatro esquinas del panel PV dentro de tubos oscuros con un pequeño orificio superior para detectar la iluminación solar. Estos tubos actúan como concentradores de radiación y aumentan la robustez del seguidor.
Sistema Hardware
El circuito electrónico incluye:
- Modo automático: El microcontrolador convierte valores analógicos de 4 LDRs (pines A0-A3) en digitales y controla dos servomotores mediante señales PWM (pines 5 y 6) para seguir el sol. Los movimientos ocurren en dos ejes: acimut (este-oeste) según el camino diario del sol y elevación (sur-norte) según el camino estacional.
- Modo manual: Un potenciómetro (pin A4) controla el movimiento de los dos servomotores. Un pulsador (pin 11) conecta el potenciómetro al servomotor arriba-abajo o izquierda-derecha. Otro pulsador (pin 12) cambia entre modos automático y manual.
- Medición PV: El voltaje del panel se mide en pin analógico A5, la corriente se calcula al conocer la resistencia de carga, y se envían voltaje, corriente, potencia y modo actual al PC para visualización en tiempo real en MS Excel.
El circuito del sensor LDR es un divisor de tensión. La variación de intensidad lumínica es proporcional a la variación del voltaje de salida del divisor. Se usan resistencias de 330 Ω en los divisores.
Se utilizan dos servomotores de 180°: un MG996R para el eje vertical (izquierda-derecha) y un SG90 para el eje horizontal (arriba-abajo). La ventaja del servomotor es que se controla su parada, marcha, dirección y velocidad con un solo cable de baja corriente conectado directamente al microcontrolador.
Diseño del Software Embebido
El software cubre los siguientes requisitos:
- Dos modos: manual y automático. Pulsador en pin 12 para cambiar.
- En modo manual, el potenciómetro controla servomotores. Pulsador en pin 11 cambia entre motores.
- En modo automático, el algoritmo compara promedios de LDRs superior/inferior e izquierda/derecha. Si la diferencia supera un umbral (10), mueve el servomotor correspondiente hasta que la diferencia esté en rango [-10, 10]. Si la radiación promedio es muy baja (valor 8), indica noche y el seguidor retorna a posición de salida del sol (0° izquierda-derecha, 30° arriba-abajo).
- El voltaje PV (pin A5) se procesa para calcular corriente y potencia. Todos los datos y el modo actual se envían por USB al PC para presentación en MS Excel mediante la macro PLX-DAQ.
Instrumentación Virtual con PLX-DAQ
La macro PLX-DAQ para Excel permite adquisición de datos del Arduino a hoja de cálculo. Tras instalar, se abre la hoja "PLX-DAQ Spreadsheet", se configuran baud rate y puerto, y al hacer clic en "Connect" los datos se muestran en tiempo real.
Prototipo
La estructura completa se fabricó con placas de madera. El banco de pruebas incluye el seguidor solar con modos manual/automático, instrumentación virtual y una lámpara artificial para pruebas. El sistema es pequeño, flexible y fácil de usar, permitiendo a estudiantes, investigadores e ingenieros probar algoritmos antes de implementar dispositivos de seguimiento solar a gran escala.
Código
Software Embebido del Banco de Pruebas del Seguidor Solar
#include
// Variables
int mode = 0; // 0=Manual, 1=Automático
int axe = 0; // 0=Izq-Der, 1=Arriba-Abajo
int buttonState1 = 0, buttonState2 = 0;
int prevButtonState1 = 0, prevButtonState2 = 0;
// Pines LDR
int ldrtopr = 0; // Superior derecha - A0
int ldrtopl = 1; // Superior izquierda - A1
int ldrbotr = 2; // Inferior derecha - A2
int ldrbotl = 3; // Inferior izquierda - A3
int topl = 0, topr = 0, botl = 0, botr = 0;
Servo servo_updown;
Servo servo_rightleft;
int threshold_value = 10;
void setup() {
Serial.begin(9600);
Serial.println("CLEARDATA");
Serial.println("LABEL,t,voltaje,corriente,potencia,Modo");
pinMode(12, INPUT); // Botón cambio modo
pinMode(11, INPUT); // Botón cambio eje
pinMode(A4, INPUT); // Potenciómetro
servo_updown.attach(5); // Servo arriba-abajo
servo_rightleft.attach(6); // Servo izquierda-derecha
}
void loop() {
// Medición PV
float volt = analogRead(A5) * 5.0 / 1023;
float voltage = 2 * volt; // Divisor de tensión R1=R2=10Ω
float current = voltage / 20; // I = V/(R1+R2)
float power = voltage * current;
Serial.print("DATA,TIME,");
Serial.print(voltage); Serial.print(",");
Serial.print(current); Serial.print(",");
Serial.print(power); Serial.print(",");
// Leer botón modo
buttonState1 = digitalRead(12);
if (buttonState1 != prevButtonState1) {
if (buttonState1 == HIGH) {
mode = (mode == 1) ? 0 : 1;
}
}
prevButtonState1 = buttonState1;
delay(50);
char Mode;
if (mode == 0) {
Mode = 'M';
Serial.println(Mode);
manualsolartracker();
} else {
Mode = 'A';
Serial.println(Mode);
automaticsolartracker();
}
}
void automaticsolartracker() {
// Leer LDRs
topr = analogRead(ldrtopr);
topl = analogRead(ldrtopl);
botr = analogRead(ldrbotr);
botl = analogRead(ldrbotl);
// Promedios
int avgtop = (topr + topl) / 2;
int avgbot = (botr + botl) / 2;
int avgleft = (topl + botl) / 2;
int avgright = (topr + botr) / 2;
int diffelev = avgtop - avgbot;
int diffazi = avgright - avgleft;
// Movimiento izquierda-derecha (acimut)
if (abs(diffazi) >= threshold_value) {
if (diffazi > 0) {
if (servo_rightleft.read() < 180)
servo_rightleft.write(servo_rightleft.read() + 2);
} else {
if (servo_rightleft.read() > 0)
servo_rightleft.write(servo_rightleft.read() - 2);
}
}
// Movimiento arriba-abajo (elevación)
if (abs(diffelev) >= threshold_value) {
if (diffelev > 0) {
if (servo_updown.read() < 180)
servo_updown.write(servo_updown.read() - 2);
} else {
if (servo_updown.read() > 0)
servo_updown.write(servo_updown.read() + 2);
}
}
}
void manualsolartracker() {
buttonState2 = digitalRead(11); // Nota: pin 11 en código original, 13 en comentario
if (buttonState2 != prevButtonState2) {
if (buttonState2 == HIGH) {
axe = (axe == 1) ? 0 : 1;
}
}
prevButtonState2 = buttonState2;
delay(50);
if (axe == 0) {
// Control izquierda-derecha
servo_rightleft.write(map(analogRead(A4), 0, 1023, 0, 180));
} else {
// Control arriba-abajo
servo_updown.write(map(analogRead(A4), 0, 1023, 0, 180));
}
}
Esquemáticos
Diagrama de conexiones completo disponible en el proyecto original (archivo ZIP descargable).
Proceso de manufactura
- Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
- Mando USB para juegos DIY con Arduino – Construye tu propio gamepad de alto rendimiento
- Rastreador Solar V2.0 – Sistema Avanzado DIY de Seguimiento Solar
- Pixel Chaser: Juego LED Interactivo de Un Toque con Arduino Nano
- Seguidor Solar IoT: Gestión Inteligente de Energía con Arduino
- Levitación magnética repulsiva con Arduino: Circuito simple y guía DIY
- Controlador doméstico Arduino con Alexa: Automatización inteligente simplificada
- Pong Neón en Matriz NeoPixel con Arduino Nano
- Medición Precisa de Radiación Solar con Arduino UNO y Shield Ethernet
- Juego Ruleta LED DIY: Crea un Arcade para Una Persona con Arduino Nano
- Sistema Solar de Seguimiento Solar (Dual Axis) con Arduino UNO – Hazlo Tú Mismo