Está en la página 1de 14

Seguidor Solar 1

Resumen: En el siguiente reporte se muestra


los pasos para la construccin de un seguidor
de luz solar mediante la tarjeta Arduino Mega
2560.
Objetivo: Fabricacin de un prototipo de
s e gui dor s ol a r de pa ne l di n mi c o,
autoorientado utilizando Arduino como sistema
de control.
Introduccin: Un panel solar es un dispositivo
que es capaz de aprovechar la energa de la
radiacin solar. Para este caso se uso un panel
de engra fotovoltaica, estos paneles o celdas
transforman la luz en electricidad a base del
efecto fotovoltaico por el cual la energa
lumnica produce cargas positivas y negativas
en dos semiconductores prximos de diferente
tipo, produciendo as un campo elctrico capaz
de generar corriente. Suelen ser de silicio
cristalino o de arsenuiro de galio.
Material: Tarjeta Arduino Mega 2560,
Protoboard, Resistencias, LEDs, Cable,
Fotorresistencia, Linterna, Servomotor.
Marco Terico: Para que el panel solar fuera
capaz de realizar su funcin principal
( s egui mi ent o de l uz) f ue neces ar i o
implementar un servomotor para que generara
una trayectoria de 180. El servo funciona
como eje de desplazamiento para la celda, con
la diferencia de que este eje estar controlado
por l a l umi nosi dad que r eci ban l as
fotorresistencias.

Un servomotor es un motor elctrico que


consta con la capacidad de ser controlado tanto
en velocidad as como en precisin. Por lo
general tienen integrada un detector que
permite conocer su posicin y velocidad
comnmente llamados encoders. Existen dos
tipos de servos: analgicos y digitales, para
esta practica se uso un servomotor del tipo
analgico.

Los servos analgico se componen de un motor


DC, un reduct or de vel oci dad y un
potencimetro ubicado sobre el eje de salida
Seguidor solar
Instrumentacin
Profesor: Ing. Ricardo Yez Brambila
Angel Moiss Hernndez Ponce
Instituto Tecnolgico de Colima, Departamento de Ingeniera Mecatrnica, Avenida
Tecnolgico No. 1 C.P. 28976. Villa de lvarez, Col. Tel/Fax (01 312) 3129920
www.itcolima.edu.mx
Seguidor Solar 2
del mismo y por ultimo, la placa con el circuito
de control. En la siguiente imagen se muestra
la estructura interna de un servomotor.
Este tipo de servos funcionan mediante el
envo de pulsos de seal, tienen tres cables de
salida: cable de alimentacin, cable de seal y
cable de tierra fsica, por lo general se usan los
colores rojo,naranja y negra respectivamente.
El voltaje demandado es alrededor de 4.8 a 6 V
por lo cual es ideal para trabajar con circuitos
electrnicos.
Como se dijo anteriormente, un servo funciona
a base de seales cuadradas de 1.5 ms
(milisegundos) que se repite a una frecuencia
de 10 a 22 ms. Mientras se mantenga este
ancho, el servo estar en un posicin neutral
(0), si el ancho disminuye se mover hacia un
lado, depende del servo, y si el ancho aumenta
tendr un direccin contraria a la anterior.
Usualmente los servos que existen en el
mercado manejan rangos de 0 a 180.
Para la parte encargada del seguimiento de la
luz se usaron fotorresistencias que es un
componente electrnico cuya resistencia
disminuye cuando aumenta la intensidad de luz
incidente, est formado por una celda y dos
patilla. Su funcionamiento est basado en el
efecto fotoelctrico, si la luz incidente es de
alta frecuencia, los fotones son absorbidos por
las elasticidad del semiconductor dando a los
electrones la suficiente energa para saltar la
banda de conduccin; a pesar de que pudiera
parecer sensible a la luz, este sensor tiene
cierto retraso de aproximadamente una dcima
de segundo, se compone de un semiconductor
Seguidor Solar 3
de alta resistencia que puede ser de sulfuro de
cadmio.
Para la parte de control se opt por usar la
tarjeta Arduino Mega 2560. El Arduino Mega
es una placa microcontrolador basada
ATmeg1280. Tiene 54 entradas/salidas
digitales (de las cuales 14 proporcionan salida
PWM), 16 entradas digitales, 4 UARTS
(puertos serie por hardware), un cristal
oscilador de 16MHz, conexin USB, entrada
de corriente, conector ICSP y botn de reset.
Contiene todo lo necesario para hacer
funcionar el microcontrolador.

Desarrollo: Para ensamblar el circuito se tomo


como bosquejo el siguiente diagrama.

Se conectaron 4 LEDs a tierra (protoboard)


en serie a una resistencia de 220! y de
izquierda a derecha se conectan a la entrada
13,12,11 y 10 del puerto PWM.

Se colocan 4 fotorresistencias(una pata a


tierra) y en seria a un resistencia de 220!;
dejar un espacio libre para el siguiente paso.

Del espacio libre sacar 4 cables que irn


conectados al puerto A0,A1,A2 y A3 de la
seccin Analog In.

Conectar el cable central del servo al puerto


positivo (protoboard), el cable negativo a
tierra (protoboard) y por ultimo, el cable que
falta conectarlo a la entrada 5 del puerto
PWM.

Por ultimo, se realiza una conexin para que


e xi s t a un t i e r r a c omn e nt r e l os
componentes.
Seguidor Solar 4
Se puede apreciar que dicho esquema esta
configurado de tal modo que halla dos servos
funcionando de modo que se tendra un
seguidor solar completo (dos ejes) que
emulara el movimiento de un girasol. Para esta
practica solo interesa que el seguidor se mueva
de mana horizontal, por lo que se conecta solo
un servo.
Si la conexin se realiz con xito, cuando se
alimente el circuito con +5V, que pueden ser
tomados de la misma placa o de una fuente
externa, el servo regresar a su posicin inicial
(si se presta el caso), es decir 0, si se le acerca
una fuente de luz (linterna) a cualquier
fotorresistencia comenzar a moverse hacia el
lado en el que est orientada la fotorresistencia
y a su vez se encender un LED que indica que
se est realizando un movimiento; lo mismo
pasar para la fotorresistencia opuesta.
Conclusin: Para esta practica se obtuvieron
las siguientes conclusiones:

Un servo es un motor til para la realizacin


de trabajos que requieren mucho torque y
poca velocidad, adems de que es excelente
para este caso en particular donde se requiere
t ener una buena preci si n en cada
movimiento.

Exi s t e una gr an di f er enci a en el


comportamiento del seguidor si expone a luz
natural o a luz artificial, para el primer caso
no se notar tanto el movimiento pues las
fotorresistencias siempre estarn recibiendo
luz por lo que el panel solar siempre estar
recibiendo el mximo voltaje que pueda
recibir; para el segundo caso el movimiento
es mas notable que en el anterior puesto que
la luz se concentra en un solo punto por lo
que se ejecuta ms rpido el programa, la
desventaja en este caso es que el panel
llegar a su mximo nivel de voltaje.

Realizar un buen cableado ayudar a tener


una mejor estabilidad en el sistema.

Asegurarse de que las resistencias no reciban


interferencia de alguna otra fuente de luz
externa ya que esto ocasiona que el servo
gire solo en un sentido o que no se desplace
de su posicin inicial, para comprobar un
f u n c i o n a mi e n t o o p t i mo d e l a s
fotorresistencia se recomienda probar el
circuito con muy poca luminosidad y si no
funciona de esta manera se recomienda
revisar que en efecto estn conectadas las
fotorresistencias y los cables que van a ella.

Seguidor Solar 5
Anexos
Cdigo
#include <Servo.h>

Servo servo_Vertical; // create servo object to control a servo (Vertical)
Servo servo_Horizonal; // create servo object to control a servo (Horizontal)
int val_Vertical=90; // variable to read the value from the analog pin
int val_Horizonal=90; // variable to read the value from the analog pin

/ /
=======================================================================
========
const int referenceVolts = 5;
const float R1 = 51000.0; //Resistor #1 (51K)
const float R2 = 100000.0; //Resistor #2 (100K)
const float Ratio = (R1/R2);
const float resistorFactor = ((referenceVolts/Ratio)/1023.0); // eq 0.014471088

const int TolarencePin = A4; // Use Potentiometer for Tolarence Settings


const int solarPin = A5; // +V from Solar Panel connected to analog pin
float v = 0;
//
const int LDR_1_Left = A0; // LDR connected to Analog Pin 0 Left
const int LDR_2_Right = A1; // LDR connected to Analog Pin 1 Right
const int LDR_3_Down = A2; // LDR connected to Analog Pin 2 Down
const int LDR_4_Up = A3; // LDR connected to Analog Pin 3 Up
//
int LDR_1_Left_val = 0;
int LDR_2_Right_val = 0;
int LDR_4_Up_val = 0;
int LDR_3_Down_val = 0;
//
Seguidor Solar 6
//LEDs 10=UP; 11=Right; 12=Left; 13=Down
int ledPins[] = {10,11,12,13};
//
int dtime = 25;
int Tolarence = 0;

void setup()
{
servo_Vertical.attach(5); // attaches the servo on pin 5 (Elevation) to the servo object
servo_Horizonal.attach(6); // attaches the servo on pin 6 (Horizontal) to the servo object

//Setup LED Pins as OUTPUT
for (int x = 0; x < 4; x++){
pinMode(ledPins[x], OUTPUT);
}
Serial.begin(9600);
}

void loop()
{
reset_leds();
read_potentiometer();
read_voltage();
read_LDRs();
adjust_Servos();

display_status();
delay(dtime); // waits for the servo to move
}

/ /
=======================================================================
==
Seguidor Solar 7

// Subs....

/ /
=======================================================================
==
void reset_leds(){
for (int x = 0; x < 4; x++){
digitalWrite(ledPins[x], LOW);
}
}
/ /
=======================================================================
==
void read_potentiometer(){
// Use Potentiometer for Tolarence Settings
Tolarence = analogRead(TolarencePin)/4;
}

/ /
=======================================================================
==
void read_voltage(){
v = analogRead(solarPin);
v *= resistorFactor;
} // end read_voltage

/ /
=======================================================================
==
void read_LDRs(){
// Set the LDRs in an x config and label the LDRs from 1-4
Seguidor Solar 8
// \ 4 /
// 1 X 2
// / 3 \
///arduino LDR Pins 10=UP; 11=Right; 12=Left; 13=Down
LDR_1_Left_val = analogRead(LDR_1_Left);
LDR_2_Right_val = analogRead(LDR_2_Right);
LDR_3_Down_val = analogRead(LDR_3_Down);
LDR_4_Up_val = analogRead(LDR_4_Up);
} //end read_LDRs

/ /
=======================================================================
==
void adjust_Servos(){

int avg_Left_Top = (LDR_1_Left_val + LDR_4_Up_val) / 2; // average value Left_Top
int avg_Left_Botton = (LDR_1_Left_val + LDR_3_Down_val) / 2; // average value
Left_Botton
int avg_Right_Top = (LDR_2_Right_val + LDR_4_Up_val) / 2; // average value Right_Top
int avg_Right_Botton = (LDR_2_Right_val + LDR_3_Down_val) / 2; // average value
Right_Botton

int dvert = (avg_Left_Top + avg_Right_Top) - (avg_Left_Botton + avg_Right_Botton); // check the


diffirence of up and down
int dhoriz = (avg_Left_Top + avg_Left_Botton) - (avg_Right_Top + avg_Right_Botton);// check
the diffirence og left and rigt

// Using the tolarence value stop servo seeking


// Check Vertical
if (-1*Tolarence > dvert || dvert > Tolarence){ // check if the diffirence is in the tolerance else
change vertical angle
if ((avg_Left_Top + avg_Right_Top) > (avg_Left_Botton + avg_Right_Botton)){
//adjust Vertical Servo Down
Seguidor Solar 9
digitalWrite(ledPins[3], HIGH); //Blink the Bottom LED
val_Vertical = ++val_Vertical;
if (val_Vertical > 179){
val_Vertical = 179;
}
}
else if ((avg_Left_Top + avg_Right_Top) < (avg_Left_Botton + avg_Right_Botton)){
//adjust Vertical Servo Up
val_Vertical= --val_Vertical;
digitalWrite(ledPins[0], HIGH); //Blink the Top LED
if (val_Vertical < 1){
val_Vertical = 1;
}
}
servo_Vertical.write(val_Vertical);
}
//Check Horizonal
if (-1*Tolarence > dhoriz || dhoriz > Tolarence){ // check if the diffirence is in the tolerance else
change horizontal angle
if ((avg_Left_Top + avg_Left_Botton) > (avg_Right_Top + avg_Right_Botton)){
//adjust Horizonal Servo Left
val_Horizonal = --val_Horizonal;
digitalWrite(ledPins[1], HIGH); //Blink the Left LED
if (val_Horizonal < 1){
val_Horizonal = 1;
}
}
else if ((avg_Left_Top + avg_Left_Botton) < (avg_Right_Top + avg_Right_Botton)){
//adjust Horizonal Servo Right
val_Horizonal = ++val_Horizonal;
digitalWrite(ledPins[2], HIGH); //Blink the Right LED
if (val_Horizonal > 179){
val_Horizonal = 179;
Seguidor Solar 10
}
}
else if ((avg_Left_Top + avg_Left_Botton) == (avg_Right_Top + avg_Right_Botton)){
// nothing
}
servo_Horizonal.write(val_Horizonal);
}
} // end adjust servos

/ /
=======================================================================
=
void display_status(){
Serial.print("Solar Panel Volts: ");
Serial.print(v);

Serial.print(" Servo Horizontal: ");
Serial.print(val_Horizonal);
Serial.print(" Servo Vertical: ");
Serial.print(val_Vertical);

Serial.print(" LDR_1_L: ");
Serial.print(LDR_1_Left_val);
Serial.print(" LDR_2_R: ");
Serial.print(LDR_2_Right_val);
Serial.print(" LDR_3_D: ");
Serial.print(LDR_3_Down_val);
Serial.print(" LDR_4_U: ");
Serial.print(LDR_4_Up_val);

Serial.print(" Tolarence: ");
Serial.println(Tolarence);
} //end display status
Seguidor Solar 11
Fotografias

Seguidor Solar 12
Seguidor Solar 13

Seguidor Solar 14
Esquema

También podría gustarte