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

tra1.PNG

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

st01.png
st02.png

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

st3.png
st4.png
st5.png
st10.png

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

st9.png
st8.png
st55.png

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

st7.png
st6.png
st53.png
st54.png
st12.png
st56.png

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

st13.png
st14.png

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:

[Play Video]

Funcionamiento

solar.jpg
st51.jpg
st0.png
ldr.jpg
BPW34.jpg

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

st15.png
jump.PNG
st19.png
st18.png
st17.png
st20.png
st26.jpg
st25.png
st24.jpg
st23.png
st22.jpg
st21.png

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

logo arduino.jpg

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

st34.jpg
st33.jpg
st28.jpg
st27.jpg
st30.jpg
st31.jpg
st29.jpg
st35.jpg
st36.jpg
st37.jpg
st32.jpg
st38.jpg
st39.jpg
st40.jpg
st41.jpg
st42.jpg
st43.jpg
st46.jpg
st45.jpg
st44.jpg
st47.jpg
st48.jpg
st49.jpg

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!

st72.jpg
st76.jpg
st71.jpg
st75.jpg
st73.jpg
st74.jpg
st77.jpg
st78.jpg
st79.jpg
Solar tracker+ Arduino + Stepper Motors

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!

[Play Video]