Seguidor Solar Con Motores a Paso + Arduino
by hectorhhg in Circuits > Arduino
79691 Views, 88 Favorites, 0 Comments
Seguidor Solar Con Motores a Paso + Arduino
Con el enorme gusto de que algunas personas les haya agradado mi primer instructable: Deshidratador solar + Arduino les comparto un nuevo proyecto que realice, se trata de un seguidor solar, no sin antes mencionar que mi inspiración fueron los dispositivos de geo bruce y aplavins, con la diferencia que en mi caso utilice motores a pasos, los cuales permiten reducir el precio de los motores y aumentar la capacidad tanto de carga como de movimiento ;) .
Todos sabemos que los seguidores solares tienen la ventaja de incrementar la eficiencia de captación de la energía solar, mientras la Tierra sigue su noble movimiento, el proyecto refleja la importancia de este fenómeno y procura el diseño de un sistema de seguimiento sencillo para que pueda facilitar la instalación del mismo. Espero que pueda ser lo mas explicito posible y tratar de erradicar todas las dudas.
Materiales
- Placa de aluminio
- Barra de aluminio
- Angulo de aluminio
- Cilindro de acero inoxidable 316
- Placa de acero inoxidable 316
- Barra de Nylon 6.6
- Tornillo 1/2” x 21/2”
- Pijas 1” de largo
- Tornillo 7/16” x 21/2”
- Tuerca 7/16”
- Rondana de presión 7/16”
- Rodamiento R10RS
- Chumacera UCF 3/4”
- Poleas
- Correas dentadas
- Sistema tornillo sin fin-piñón
- Fotorresistenciass
- Interruptores fin de carrera
- Conectores tipo SLIM
- Resistencias (10K, 1K, 100Ω, 800Ω)
- Par de motores a pasos
- ULN2803
- L298N
- LM324N
- Fotodiodo BPW34
- Diodos Schottky
- Transistor BC547C
- Capacitor (220pf, 1nf)
- Arduino UNO R3
- Cable
- Madera
- Pintura
- Seguro truack p/exterior 5/8”
Diseño De La Estructura
El diseño propuesto consiste de un sistema biaxial con giro azimutal y cenital con una base cilíndrica, la cual permita realizar el seguimiento del Sol de forma eficiente, además de ser compacta para evitar la mayor área posible de espacio.
En principio, vamos a simular el prototipo, es una forma que he adoptado para evitar el menor número de errores, (aunque muchas veces se cuelan :) ), intenten utilizar otro tipo de materiales si lo creen conveniente, siempre y cuando permitan ejecutar los movimientos acordes.
Base Del Panel Solar
Para la sujeción del panel solar se empleará una base formada por perfiles en L, más conocido en el mercado como ángulo, en la cual descansará el módulo fotovoltaico. Esta base estará soportada por un par de barras cuadradas a los extremos de este, de forma que el peso pueda equilibrarse en todo el sistema y a su vez estas estarán sometidas a un eje que permitirá realizar el movimiento azimutal. Es importante señalar nuevamente que todo el conjunto descrito será muy ligero para evitar el uso de motores con grandes dimensiones, ya que aumentaría el costo y la complejidad del sistema.
El par de rodamientos facilitara su funcionamiento, los cuales estarán en la parte superior del cilindro. Para esto se emplearan un par de chumaceras que se mantendrán fijas a la base. El uso de las chumaceras permite asentar los rodamientos de bolas y que el eje gire y descanse a la vez.
Movimiento Azimutal
Para poder asentar las chumaceras, se emplean unos pedazos de acero inoxidable que tienen el mismo diámetro externo que tiene la base cilíndrica, de esta forma, las chumaceras pueden descansar sobre las pequeñas superficies, es importante notar los cortes realizados en la base, unos permitirán que cruce el eje, mientras los otros son únicamente para disminuir el peso del dispositivo (también lo hice por estética ;) ).
Con estos elementos podemos lograr el giro azimutal, solo falta disponer de un mecanismo de transmisión circular, ya sea mediante un sistema de engranes o de poleas con correa. Por su sencillez y suavidad, se precisa utilizar el segundo sistema, es decir, podemos sujetar al eje que sostiene a la base del panel solar por en medio, mediante una polea conductora. Para evitar el patinaje que provocan las correas se empleará una polea dentada y una correa con la misma característica.
Movimiento Cenital
El siguiente paso será ejecutar el otro movimiento (cenital), este por su parte no muestra gran problema y puede ser realizado con distintos elementos mecánicos. Se ha optado por utilizar un mecanismo de transmisión circular mediante un sistema de tornillo sin fin-piñón en la parte inferior de la estructura. Se utiliza este conjunto cuando se desea transmitir grandes esfuerzos y aumentar la potencia de transmisión. Generalmente trabaja en ejes que se cruzan a 90⁰.
Existen múltiples dificultades cuando se utiliza un sistema de engranes, pero la problemática más común es cuando se trabajan con variación entre sus centros de operación, por lo que debe de ensamblarse de manera precisa para garantizar un buen funcionamiento.
El sistema de tornillo sin fin-piñón permitirá girar al dispositivo, gracias a que se acoplara al disco de polímero, es decir, el eje de la corona se acopla como macho, mientras que disco de polímero encaja como hembra (ojala que se pueda apreciar en las imágenes :( ) Dado que el diámetro del disco es semejante al diámetro interno del cilindro y este es muy grande, el disco de polímero deberá reducirse de forma que se pueda asentar a un rodamiento con un diámetro menor.
En realidad la chumacera UCF sujeta al disco mediante un prisionero, mientras que el cilindro es sostenido por este último a través de prisioneros. Básicamente, con ayuda de estos dos sistemas podemos proporcionar los movimientos requeridos en el proyecto.
Prototipo
Finalmente se puede notar el ensamble del dispositivo, en la primer figura pongo los materiales de forma transparente para que puedan apreciarse el ensamble de los elementos mecánicos, en cuanto a la segunda figura, es una simulación del prototipo.
Para que puedan apreciar más vistas del prototipo, le dejo el siguiente video:
Funcionamiento
Los LDR (fotorresistencias) ayudan a determinar en que lugar existe más luminosidad durante el día, estas se colocaron en los vértices del panel, agrupados de tal manera que se puede observar en la figura anterior, es decir, un par en la parte superior y un par en la parte inferior. Para lograr una mayor exactitud en cuanto a la medición de la luminosidad se deben cubrir las fotorresistencias alrededor para evitar la captación de la radiación solar difusa, en otras palabras, la propagación de las luz (ondas electromagnéticas) que se encuentran esparcidas y reflejadas en la atmósfera.
La agrupación de los sensores permite determinar y ejecutar los dos movimientos, por ejemplo, los grupos de LDR llamados izquierda y derecha, son comparadas y si existe una diferencia mayor o menor al rango de sensibilidad determinado, entonces habrá de ejecutarse un movimiento correspondiente, de igual forma para los grupos de sensores arriba y abajo, solo que estos determinaran el movimiento del otro eje.
También determino el promedio de radiación entre los cuatro sensores, ¿esto para que?, la idea es que al final del día, digamos que cuando la proyección solar es nula, la base del panel gire en sentido opuesto, en la alborada, esperando que al día siguiente,salga nuevamente el astro solar.
OPCIONAL
También hago uso de un fotodiodo, se trata del BPW34, aunque también se ocupa en el control, si desean, puede omitir este sensor, ya que la aplicación principal por el cual lo utilice fue para medir el espectro solar y registrar las cantidades de radiación solar a las que está sometido el módulo fotovoltaico. Recuerden modificar el código si es que no lo utilizan.
Diseño Electrónico
En este paso les muestro los circuitos que se emplearon para el desarrollo del prototipo, los interruptores simulan los fines de carrera, no olviden revisar los datasheets de los drivers, esto para que determinen si son capaces de mover los motores que vayan a ocupar.
Código
Les dejo el código de control, espero no haber omitido nada, ya que el editor me revolvió todo jaja XD.
//Stepper Motor Solar Tracker by HHG
#include //Integración de la librería Stepper.h para manejar motores a pasos
#include //Integración de la librería math.h para diseño de operaciones matemáticas básicas
//Declaración de constantes
#define motorStephor 200 //Número de pasos del motor horizontal
#define motorStepver 200 //Número de pasos del motor vertical
//Uso de las entradas digitales de Arduino
#define motor1hor 6
#define motor2hor 7
#define motor1ver 8
#define motor2ver 9
//Declaración de variables
int prom; //Promedio de los cuatroLDR
int pyr; //Valor del fotodiodo
int h=60; //Pasos ejecutados por el motor horizontal
int v=5; //Pasos ejecutados por el motor vertical
int ltsensor; //Valor del LDR superior izquierdo
int rtsensor; //Valor del LDR superior derecho
int rdsensor; //Valor del LDR inferior izquierdo
int ldsensor; //Valor del LDR inferior derecho
int sen=50; //Sensibilidad
int dil; //Promedio del conjunto de LDR izquierdo
int dit; //Promedio del conjunto de LDR arriba
int dir; //Promedio del conjunto de LDR derecho
int did; //Promedio del conjunto de LDR abajo
int diff; //Diferencia entre los LDR de arriba con los abajo
int diff2; //Diferencia entre los LDR de la izquierda con los de la derecha
int pup; //Interruptor superior
int pdown; //Interruptor inferior
Stepper horStep (motorStephor, motor1hor, motor2hor); //Inicia la librería Stepper
Stepper verStep (motorStepver, motor1ver, motor2ver);
//Inicialización del programa
void setup ()
{
horStep.setSpeed (30); //RPM del motor horizontal
verStep.setSpeed (10); //RPM del motor vertical
//Inicialización del puerto Serial COM
Serial.begin(9600);
//Configuración de pines como entradas
pinMode (pyr, INPUT);
pinMode(ltsensor, INPUT);
pinMode(rtsensor, INPUT);
pinMode(ldsensor, INPUT);
pinMode(rdsensor, INPUT);
pinMode(pup, INPUT);
pinMode(pdown, INPUT);
}
//Inicialización del bucle
void loop ()
{
do //Comienza la estructura de control repetitiva do-while
{
pyr = analogRead(0); //Lectura de las entradas analógicas
ltsensor = analogRead(1)*1.022; //(La constante es para calibrar las fotorresistencias)
rtsensor = analogRead(2)*1.007;
ldsensor = analogRead(3);
rdsensor= analogRead(4)*1.013;
pup = digitalRead (3); //Lectura de los interruptores
pdown = digitalRead(4);
prom= (ltsensor + ldsensor + rtsensor + rdsensor)/4; //Promedio de los cuatro sensores
dit = (ltsensor + rtsensor)/2; //Promedio de los sensores de arriba
did = (ldsensor + rdsensor)/2; //Promedio de los sensores de abajo
diff =(dit - did); //Diferencia entre el nivel de radiación
delay (50);
if ((pyr==0)&&(pup==HIGH)&&(prom<=8)|| (pyr==0)&&(pdown==HIGH)&&(prom<=8))
//Si el valor de pyr es cero y el promedio de los sensores es igual o menor a 8 y los interruptores tengan el rango
mov(); //Ejecutar la función “mov”
}
while ( (pyr==0)&&(pup==HIGH)&&(prom<=8)|| (pyr==0)&&(pdown==HIGH)&&(prom<=8));
//Mientras el valor de pyr sea cero y el promedio de los sensores sea igual o menor a 8 y los interruptores tengan el rango, sigue ejecutándose el bucle
if (-1*sen > diff || diff > sen) //Si la diferencia medida entre el conjunto de sensores es mayor o menor al valor de la sensibilidad
{
if(dit < did) //Si el valor medio de los sensores de arriba es más pequeña que la de los sensores de abajo
{
if (pdown==HIGH) //Si pdown se activa
{
verStep.step (0); //Parar el motor en el sentido vertical
delay (10);
}
else if (pdown==LOW) //Si pdown esta inactivo
{
verStep.step (v); //Gira el motor hacia arriba
delay (50);
}
}
else if(dit > did)
//Si el valor medio de los sensores de abajo es más pequeña que la de los sensores de arriba
{
if (pup==HIGH) //Si pup se activa
{
verStep.step (0); //Para el motor en el sentido vertical
delay (10);
}
else if (pup==LOW) //Si pup esta inactivo
{
verStep.step (-v); //Gira el motor hacia abajo
delay (50);
}
}
else //Para cualquier otro caso
{
verStep.step (0); //Parar el motor en el sentido vertical
delay (10);
}
}
delay (10);
pyr = analogRead (0); //Lectura de los sensores nuevamente por posible cambio
ltsensor = analogRead(1)*1.022;
rtsensor = analogRead(2)*1.007;
ldsensor = analogRead(3);
rdsensor= analogRead(4)*1.013;
dil = (ltsensor + ldsensor)/2; //Promedio de los sensores de la izquierda
dir = (rtsensor + rdsensor)/2; //Promedio de los sensores de la derecha
diff2 = (dil - dir); //Diferencia entre el nivel de radiación
delay (50);
if (-1*sen > diff2 || diff2 > sen) //Si la diferencia medida entre el conjunto de sensores es mayor o menor al valor de la sensibilidad
{
if(dil < dir) //Si el valor medio de los sensores de la izquierda es más pequeña que la de los sensores de la derecha
{
horStep.step (h); //Girar motor hacia la derecha
delay (10);
}
else if(dil > dir)
//Si el valor medio de los sensores de la izquierda es más grande que la de los sensores de la derecha
{
horStep.step (-h); //Girar el motor hacia la izquierda
delay (10);
}
else //Para cualquier otro caso
{
horStep.step (0); //Parar el motor en el sentido horizontal
delay (10);
}
}
delay(10);
}
//Función “mov”
void mov ()
{
if (pup==HIGH) //Si pup está activo
{
verStep.step (72); //Gira 72 pasos hacia arriba
delay (50);
}
else if (pdown==HIGH) //Si pdown está activo
{
verStep.step (-72); //Gira 72 pasos hacia abajo
delay (50);
}
delay (10);
}
Proceso Y Ensamblado De Las Piezas Mecánicas
Bueno, llego la hora de pasar las ideas a la realidad ;) . No hace falta hacer hincapié al acoplamiento de los elementos mecánicos (espero que se haya entendido en la simulación), solo les muestro algunos de los procesos de maquinado que emplee para crear las piezas. Y les puedo asegurar que trabajar con acero inoxidable es muy difícil :( , pero el acabado es genial, además de ser un material que soporta las inclemencias extremadamente.
Olvide este detalle, les comparto los archivos de diseño:
Downloads
Pruebas Finales!
Finalmente, cuando se tenga la parte mecánica, es hora de colocar cada uno de los sensores y la parte electrónica. Por el momento no tengo un panel solar :( , pero hice uso de una placa de unicel :) que finalmente pinte, quedo excelente, ¿no creen? XD. Les sugiero que las resistencias que tienen la configuración de pull ups para los LDR y los interruptores, los coloquen lo más cercanos a estos, me di cuenta que generaban datos errados cuando los puse a una distancia más larga.
¿Para que sirven los interruptores de final de carrera?, son para evitar que el panel se desplace hacia abajo y este pueda colisionar con la base del prototipo, es por eso que se colocó un pedazo de rondana concéntrico al eje y mientras este gira, llega el punto en que presiona a los interruptores que se encuentran sujetos a la chumacera, de forma que limitan el desplazamiento del panel solar.
Guarden todos los componentes electrónicos en un estuche, sigan haciendo magia quienes tengan impresoras 3D o laser cutters y eviten utilizar una cajita de chocolate como yo ;( jaja.
Para cerrar con broche de oro, les dejo un vídeo donde realizo unas pruebas del seguidor :). Hasta pronto!