Você está na página 1de 28

UNIVERSIDAD NACIONAL DE ASUNCIÓN

FACULTAD POLITÉCNICA

PROYECTO:

POSICIONADOR DE PANEL SOLAR GUIADO


POR TRAYECTORIA

INTEGRANTES:

Carlos Waimberg.
Hector Paredes.
Oscar Zaracho.

PROFESOR:

Ing. Lucas Frutos.

2008
La energía alternativa, hoy en día, se ha convertido en una salida a la gran demanda
de derivados energéticos y como solución a la problemática de la contaminación
ambiental debido principalmente al uso de productos derivados del petróleo y otros
como plantas térmicas nucleares. Tratar de prescindir completamente de los sistemas
de generación de energía convencional resulta hasta el momento imposible, debido a
que algunos sistemas alternativos se encuentran en fase de investigación y pruebas.

Desde el punto de vista económico, las energías renovables se sitúan en una posición
adecuada al lado de las energías fósiles, para hacer frente a la demanda creciente y
sin perjuicio. Además, las energías renovables pueden en forma ascendente jugar un
papel de sustitución dado que no solo el agotamiento de los recursos fósiles sino
también problemas medio ambientales actúan en contra de este tipo de energías y a
favor de las renovables.

Dentro de las alternativas, la energía solar fotovoltaica es, hoy en día y sin lugar a
dudas, una forma limpia y fiable de producción de energía eléctrica a pequeña escala.
Podemos definirla como la tecnología utilizada para el aprovechamiento eléctrico de la
energía solar que se deriva de las células fotovoltaicas.

Las ventajas de la utilización de la Energía Solar fotovoltaica son las siguientes:


* La energía que procede del sol es limpia y renovable, no cuesta dinero.
* Disminuye costes de mantenimiento de las líneas eléctricas, sobre todo en zonas
aisladas.
* Mantenimiento y riesgo de avería muy bajo de las instalaciones fotovoltaicas,
silenciosas y sencillas.
* Tecnología de rápido desarrollo que tiende a reducir el coste y aumentar el
rendimiento.

La idea de este proyecto se basa fundamentalmente en la monitorización de la energía


solar aprovechada por un panel solar, con fines de optimización y análisis, de modo a
obtener una proyección acerca de la rentabilidad para un sistema proveedor a gran
escala de energía eléctrica, mediante un lote de paneles solares. Diseñar un sistema
prototipo capaz de realizar las mediciones y análisis de la energía solar es el
principal objetivo de este proyecto.
Panel Solar

Mediante las células fotovoltaicas (Panel Solar), la radiación se transforma


directamente en electricidad aprovechando las propiedades de los materiales
semiconductores. Las celdas fotovoltaicas conocidas también como celdas solares
están hechas de materiales semiconductores, en especial de silicio, el mismo que se
emplea en la industria de la microelectrónica. Se emplea una delgada rejilla
semiconductora para poder originar un campo eléctrico, positivo en un lado y negativo
en el otro, claro está; cuando la energía proveniente de los rayos solares llega a la
celda fotovoltaica, los electrones son golpeados por fotones y sacados de los átomos
del material semiconductor Fig.1, en ese instante los electrones son capturados en
forma de corriente eléctrica. Las celdas son aquellas que, juntas, forman un panel
fotovoltaico, pero un arreglo de varias celdas conectadas eléctricamente unas con
otras en una estructura generan un módulo fotovoltaico.

El panel cuenta con otros elementos a parte de las células solares, que hacen posible
la adecuada protección del conjunto frene a los agentes externos; asegurando una
rigidez suficiente, posibilitando la sujeción a las estructuras que lo soportan y
permitiendo la conexión eléctrica, estos elementos son los siguientes.

Cubierta exterior de cara al Sol. Es de vidrio que debe facilitar al máximo la


transmisión de la radiación solar. Se caracteriza por su resistencia mecánica, alta
transmisividad y bajo contenido en hierro.
Marco metálico. De Aluminio, que asegura una suficiente rigidez y estanqueidad al
conjunto, incorporando los elementos de sujeción a la estructura exterior del panel. La
unión entre el marco metálico y los elementos que forman el módulo está realizada
mediante distintos tipos de sistemas resistentes a las condiciones de trabajo del panel.
Encapsulante. De silicona o más frecuentemente EVA (etilen-vinil-acetato). Es
especialmente importante que no quede afectado en su transparencia por la continua
exposición al sol, buscándose además un índice de refracción similar al del vidrio
protector para no alterar las condiciones de la radiación incidente.
Cableado y bornes de conexión. Habituales en las instalaciones eléctricas,
protegidos de la intemperie por medio de cajas estancas.
Diodo de protección. Su misión es proteger contra sobre-cargas u otras alteraciones
de las condiciones de funcionamiento de panel.
Los módulos son construidos con el objetivo de brindar un determinado nivel de
voltaje, un ejemplo es un sistema de 12 voltios; la corriente que se produzca
dependerá siempre de cuanta luz el módulo capte. Los sistemas de este estilo pueden
funcionar aisladamente o conectados en red; con respecto a estos último, los mismos
interaccionan a través de una interfaz electrónica, es decir, un inversor, que transforma
la corriente directa en alterna para poder ser utilizada luego.
CARGA

Fig. 1

Trayectoria Solar

Es necesario precisar la posición del Sol en cada instante para optimizar el


rendimiento de los generadores fotovoltaicos. El sistema más apropiado para
comprender cada una de estas posiciones es el de coordenadas polares Fig. 2. En
este sistema el origen está situado en la posición del receptor (la referencia). El plano
fundamental es el horizontal, tangente a la superficie terrestre. La perpendicular a este
plano en dirección a la semiesfera celeste superior define la posición del ZENIT del
lugar o zenit local. En la dirección opuesta, a través de la Tierra, se sitúa el NADIR.
Las direcciones principales sobre el plano horizontal son la Norte-Sur, intersección con
el plano meridiano del lugar, y la perpendicular a ella Este-Oeste, intersección con el
plano denominado primer vertical.

Fig. 2

Respecto al sistema anteriormente descrito, la posición del Sol se define mediante los
siguientes parámetros:
Latitud del lugar: Es la localización angular por encima o por debajo del
ecuador que dependerá de la posición del observador o el punto de ubicación del
panel. (-90≥≤ LAT ≤ 90)

Declinación: Posición angular del sol al medio día solar respecto al plano del
ecuador. (-23,45 ≤ DEC ≤ 23,45)

Azimut: Es el ángulo que forma la proyección de la normal de la superficie


sobre un plano horizontal respecto del meridiano local. Este ángulo es cero si el plano
está orientado al Oeste, y negativo al Este. (-180 ≤ AZ ≤ 180)

Angulo horario: Indica el desplazamiento angular del Sol al Este o al Oeste del
meridiano local debido a la rotación terrestre sobre su eje, a 15/horas.

El movimiento aparente del Sol respecto de un sistema de coordenadas

cartesianas fijo de referencia tal como el de la Fig. 3 viene dado por el vector u s :

us  ux i  u y j  u z k

u x  sen cos t  cos t   sent  0,594757sen t   0,302886

u y  cos t  cos t   sen t  cos t 

u z  cos  cos t  cos t   sen t  0,698590sen t   0,257868 


Z


us

Y (este)

X (sur)
Fig. 3

Donde:
  23,44  ,   15,0410  /hora ,   0,04106866 /hora = 0,985648 
Para la mayor parte de los cálculos, es suficientemente precisa la aproximación:

u x  sen cos  cos15t h  cos sen

u y  cos sen15t h

u z  cos  cos  cos15t  sen cos 


Donde:
 360 
  arcsen sensen td 
 365 
td Día del año contado a partir del equinoccio de primavera. Para el día 21
de marzo, t d  1
th Hora solar.

Diagrama en bloques

PC

MICROCONTROLADOR
PIC

CONTROLADOR DE
MOTOR MOTOR

Como se observa en el esquema se utilizó un Microcontrolador PIC 16F877,


dos motores paso a paso para controlar el panel solar en la posición horizontal
y vertical; con sus respectivos controladores, como también una PC la cual se
comunica con el Microcontrolador PIC; es decir envía y recibe datos vía puerto
serie. Entre la PC y el Microcontrolador PIC se utiliza una interfaz en este caso
un MAX 232 para manejar los niveles de voltaje del protocolo.
El modo de operación para la comunicación en base al Microcontrolador que
utilizamos es el modo asíncrono para la recepción y transmisión, utilizando el
protocolo de comunicación RS 232.

Las principales características para utilizar el modo asíncrono son:


 No requiere una señal de reloj para control.
 Versatilidad y Rapidez.
 Puede utilizarse para transmisión y recepción al mismo tiempo.

El Software utilizado en la PC es Visual Basic 6.0 y las líneas de programación


de esta se detallan a continuación.
Dim dd, mm, aa // Declaración de variables
Dim hh, mi, ss, td As Integer
Public hourd As Single
Dim lat, hourdc, d_rec, latc, tdc, elc, azc, aux
'Public finish As Variant
Dim i, iant, vgrafant, unavez, vgraf

Private Sub Command_Posinicial_Click()


If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
'For a = 1 To 3
MSComm1.Output = "u"
'Next a
MSComm1.PortOpen = False
End Sub

'Private Sub Command_Recibir_Click()


' Do
' MSComm1.PortOpen = True
' MSComm1.Output = "a"
' Do
' d_rec = MSComm1.Input
' aux = Right(d_rec, 1)
' Loop While (aux = "P")
'azc = d_rec
'Picture_Azimut.Print azc
'MSComm1.Output = "e"
'Do
' d_rec = MSComm1.Input
' aux = Right(d_rec, 1)
'Loop While (aux = "P")
'elc = d_rec
'Picture_Elevación.Print elc
'MSComm1.Output = "g"
'vgrafant = 0
'd_rec = MSComm1.Input
'i = 0
'i = i + 20
'If i = 3000 Then
' Picture1.Cls
'Else
' vgraf = d_reg
' Picture1.Line (0, vgrafant)-(i, vgraf)
' vgrafant = vgraf
'End If

'Loop While finish <> False


'End Sub

Private Sub Label_Año_Click()


aa = InputBox("Introduzca año", "Año", "1")
Picture_Año.Print aa
End Sub

Private Sub Label_Mes_Click()


mm = InputBox("Introduzca Mes", "Mes", "3")
Picture_Mes.Print mm
End Sub

Private Sub Label_Día_Click()


dd = InputBox("Introduzca día", "Día", "21")
Picture_Día.Print dd
End Sub

Private Sub Label_Latitud_Click()


lat = InputBox("Introduzca latitud (entero)", "Latitud", "25")
Picture_Latitud.Print lat
End Sub

'Private Sub Enviar_Click()


' Call Calc_td((dd), (mm), (aa))
' hh = Text_Hora.Text
' mi = Text_Minuto.Text
' ss = Text_Segundo.Text
' Timer1.Enabled = True
' Call Calc_hora((hh), (mi), (ss))
' latc = CStr(lat) + "p"
' hourdc = CStr(hourd) + "p"
' hourdc = Replace(hourdc, ".", ",")
' tdc = CStr(td) + "p"
' tdc = Replace(tdc, ".", ",")
' MSComm1.PortOpen = True
' Do
' d_rec = MSComm1.Input
' For i = 1 To 100
' Next i
' MSComm1.Output = "b"
' Loop While d_rec <> "L"
' Do
' d_rec = MSComm1.Input
' For i = 1 To 100
' Next i
' MSComm1.Output = latc
' Loop While d_rec <> "T"
' Do
' d_rec = MSComm1.Input
' For i = 1 To 100
' Next i
' MSComm1.Output = tdc
' Loop While d_rec <> "H"
' Do
' d_rec = MSComm1.Input
' For i = 1 To 100
' Next i
' MSComm1.Output = hourdc
' Loop While d_rec <> "F"
'End Sub

Private Sub Option1_transmitir_Click()


Label_Latitud.Enabled = True
Label_Día.Enabled = True
Label_Minuto.Enabled = True
Label_Hora.Enabled = True
Label_Segundo.Enabled = True
Label_Mes.Enabled = True
Label_Año.Enabled = True
Option2_adquirir.Value = False
Picture1.Cls
If Option1_transmitir.Value = True Then
Frame3.ForeColor = &H80000012
Frame5.ForeColor = &H80000012
Label_Latitud.ForeColor = &H80000012
Label_Día.ForeColor = &H80000012
Label_Mes.ForeColor = &H80000012
Label_Año.ForeColor = &H80000012
Label_Hora.ForeColor = &H80000012
Label_Minuto.ForeColor = &H80000012
Label_Segundo.ForeColor = &H80000012
Frame4.ForeColor = &H80000011
Frame6.ForeColor = &H80000011
Label_Azimut.ForeColor = &H80000011
Label_Elevación.ForeColor = &H80000011
Option1_Trasmitir = MsgBox("Presione sobre Latitud,Fecha, hora, minuto y segundo para ir
introduciendo los valores", 0 + 0, "Transmisión")
End If

End Sub

'Private Sub Option2_adquirir_Click()

' Label_Latitud.Enabled = False


' Label_Día.Enabled = False
' Label_Minuto.Enabled = False
' Label_Hora.Enabled = False
' Label_Segundo.Enabled = False
' Label_Mes.Enabled = False
' Label_Año.Enlabled = False
' Dim i As Integer
' Dim j As Integer
' PortOpen = True
' Option1_transmitir.Value = False
' If Option2_adquirir.Value = True Then
' Frame4.ForeColor = &H80000012
' Frame6.ForeColor = &H80000012
' Label_Azimut.ForeColor = &H80000012
' Label_Elevación.ForeColor = &H80000012
' Frame3.ForeColor = &H80000011
' Frame5.ForeColor = &H80000011
' Label_Latitud.ForeColor = &H80000011
' Label_Día.ForeColor = &H80000011
' Label_Mes.ForeColor = &H80000011
' Label_Hora.ForeColor = &H80000011
' Label_Minuto.ForeColor = &H80000011
' Label_Segundo.ForeColor = &H80000011
'
'For a = 1 To 3000 Step 300
'
Picture1.Line (a, 255)-(a, 0)
' For j = 1 To 255 Step 25.5
' Picture1.Line (0, j)-(3000, j)
' Next j
' Next a
'End If
'i = 0
'End Sub

'Public Sub Calc_td(d As Integer, m As Integer, a As Integer)


' Dim daux As Integer, maux As Integer, aaux As Integer, dia As Integer
' maux = 3
' dia = 21
' td = 1
' If ((d > 0 And d < 32) And (m > 0 And m < 13) And (a > 0 And a < 100)) Then
' If m = 1 Then
' daux = 31
' ElseIf m = 2 Then
' If (m Mod 4 = 0) Then
' daux = 29
' Else
' daux = 28
' End If
' ElseIf m = 3 Then
' daux = 31
' ElseIf m = 4 Then
' daux = 30
' ElseIf m = 5 Then
' daux = 31
' ElseIf m = 6 Then
' daux = 30
' ElseIf m = 7 Then
' daux = 31
' ElseIf m = 8 Then
' daux = 31
' ElseIf m = 9 Then
' daux = 30
' ElseIf m = 10 Then
' daux = 31
' ElseIf m = 11 Then
' daux = 30
' ElseIf m = 12 Then
' daux = 31
' End If
' If (m = 3) And (d = 21) Then
' td = 1
' Else
' While (dia <> d) Or (maux <> m)
' dia = dia + 1
' td = td + 1
' If (dia = daux) Then
' maux = maux + 1
' dia = 0
' If maux = 1 Then
' daux = 31
' ElseIf maux = 2 Then
' If (maux Mod 4 = 0) Then
' daux = 29
' Else
' daux = 28
' End If
' ElseIf maux = 3 Then
' daux = 31
' ElseIf maux = 4 Then
' daux = 30
' ElseIf maux = 5 Then
' daux = 31
' ElseIf maux = 6 Then
' daux = 30
' ElseIf maux = 7 Then
' daux = 31
' ElseIf maux = 8 Then
' daux = 31
' ElseIf maux = 9 Then
' daux = 30
' ElseIf maux = 10 Then
' daux = 31
' ElseIf maux = 11 Then
' daux = 30
' ElseIf maux = 12 Then
' daux = 31
' End If

' If maux = 13 Then


' maux = 1
' daux = 31
' End If
' End If
' Wend
' End If
' End If
'End Sub

'Public Sub Calc_hora(h As Integer, mi As Integer, s As Integer)


' If (mi >= 0) And (mi <= 15) Then
' hourd = h
' ElseIf (mi > 15) And (mi <= 30) Then
' hourd = h + 0.25
' ElseIf (mi > 30) And (mi <= 45) Then
' hourd = h + 0.5
' ElseIf (mi > 45) And (mi <= 59) Then
' hourd = mi + 0.75
' End If
'End Sub

Private Sub Command_Start_Click()


If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
For a = 1 To 3
MSComm1.Output = "b"
Next a
If unavez = 0 Then
vgrafant = 255
iant = 0
unavez = 1
Else
vgrafant = vgraf
iant = i
End If
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub Command_Stop_Click()
' Parar = True
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
For a = 1 To 3
MSComm1.Output = "x"
Next a
MSComm1.PortOpen = False
' finish = False
End Sub
Private Sub Command_Continuar_Click()
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
For a = 1 To 3
MSComm1.Output = "z"
Next a
MSComm1.PortOpen = False
End Sub
'Private Sub Form_Load()
' dd = Text2.Text
' mm = Text5.Text
' aa = Text6.Text
' hh = Text7.Text
' mm = Text8.Text
' ss = Text9.Text
' MSComm1.PortOpen = False
' Label_Latitud.Enabled = False
' Label_Día.Enabled = False
' Label_Minuto.Enabled = False
' Label_Hora.Enabled = False
' Label_Segundo.Enabled = False
' Label_Mes.Enabled = False
' Label_Año.Enabled = False
'End Sub

Private Sub MSComm1_OnComm()


If MSComm1.CommEvent = comEvReceive Then
For a = 1 To 3000 Step 300
Picture1.Line (a, 255)-(a, 0)
For j = 1 To 255 Step 25.5
Picture1.Line (0, j)-(3000, j)
Next j
Next a
d_rec = MSComm1.Input
i=i+5
If i = 3000 Then
Picture1.Cls
i=0
'vgrafant = 255
iant = i
Else
vgraf = Asc(d_rec)
vgraf = 255 - vgraf
Picture1.Line (iant, vgrafant)-(i, vgraf), vbGreen
vgrafant = vgraf
iant = i
End If
End If
End Sub

'Private Sub Timer1_Timer()


' ss = ss + 1
' If ss = 60 Then
' ss = 0
' Text_Segundo.Text = ss
' mi = mi + 1
' If mi = 60 Then
' mi = 0
' Text_Minuto.Text = mi
' hh = hh + 1
' If hh = 24 Then
' hh = 0
' End If
' Text_Hora.Text = hh
' End If
' Text_Minuto.Text = mi
' End If
' Text_Segundo.Text = ss
'End Sub

El Microcontrolador PIC se programó en el lenguaje C con el software MPLAB y las


líneas de programación son las siguientes.
1: #include<pic.h>

2: #include<math.h>

3: #include"delay.h"

4: #include"delay.c"
5:

6: #define ang 0.0200 //0.0195 //0.0175 //0.0145

7: #define a 0.436332313 //latitud

8: #define b 0.2617993878 //cte

9: #define ctetd 0.01721420632 //factor de td

10: #define XTAL_FREQ 20MHZ

11: #define signo (-1)

12:

13:

14: bank2 int man,f,z,d,ban0,ban1,ban2,aux,nsec1,nsec2,ult_sec_az,ult_sec_el,i,td,hour,min,j;

15: bank1 double saveel,saveaz;

16: bank1 double hourd,alfa,ux,uy,uz,mod,daz,del,az,el;

17: bank2 char conv,


secq[16]={0b00000110,0b00000010,0b00001100,0b00010000,0b00011000,0b00110000,0b00101100,0b
00100010,0b00100110,0b00100011,0b00101101,0b00110001,0b00011001,0b00010001,0b00001101,0b
00000011};

18: bank2 float h;

19: //-----------------------var usart------------------------//

20: bank1 int contador,auxi,lat,k,azentaux,azent,cntazent,azdec,elent,elentaux,cntelent,eldec;

21: bank1 unsigned char d_rec,valdig;

22: bank1 unsigned char latc[2];

23: bank1 unsigned char tdc[3];

24: bank1 unsigned char hourdc[5];

25: bank1 unsigned char azc[]="000,00P";

26: bank2 unsigned char elc[]="00,00P";

27:

28: void ctrlsec();

29: void calpos();

30: void inisec();

31: void pos_inicial();

32: void set_var();

33: void atoda_pu();

34: void vert();

35:

36: void main(){


37: ADCON1=0x0E;

38: set_var();

39: PSPMODE=0;

40: TRISC=0x80;

41: TRISB=0b10000000;

42: TRISD=0b11000000;

43: PORTB=0x00;

44: PORTD=0X00;

45:
BRGH=1;SPBRG=129;SYNC=0;SPEN=1;TXEN=1;TXIE=0;TX9=0;RX9=0;CREN=1;FERR=0;OERR=0;

46: for (;;){

47: PORTD=0x00,PORTB=0x00;

48: while(i==0){

49: i=RCIF;

50: d_rec = RCREG;

51: }

52: if (d_rec=='u'){

53: pos_inicial();

54: }

55: i=0;

56: while(i==0){

57: i=RCIF;

58: d_rec = RCREG;

59: }

60: if (d_rec=='b'){

61: break;

62: }

63: }

64: auxi=0;

65: for(;;) {

66: d_rec = RCREG;

67: DelayMs(1);

68: man=1;

69: if(d_rec=='x'){
70: do

71: {

72:

73: ADCON0=0xC5;

74: DelayMs(1);

75: conv=ADRESH;

76: TXREG=conv; //valor de ADRESH

77: while(!TXIF);

78: d_rec = RCREG;

79: DelayMs(5);

80: if (d_rec=='z'){

81: man=0;

82: }

83: DelayMs(100);

84: }

85: while(man==1);

86:

87: }

88: // i=RB7;

89: // if(i==0){

90: ADCON0=0xC5;

91: DelayMs(1);

92: conv=ADRESH;

93: TXREG=conv; //valor de ADRESH

94: while(!TXIF);

95: if(conv>=0x9D){ // comparación con el valor del panel

96: RB6=1;

97: DelayMs(300);

98: }

99: else{

100: if(aux==1){

101: hourd=hour+0.2;

102: calpos();
103: ctrlsec();

104: saveaz=az;

105: saveel=el;

106: el=0,az=0;

107: aux=0;

108: }

109: min=min++;

110: DelayMs(250);

111: if(min==15){

112: hourd=hour+0.25;

113: calpos();

114:

115: ctrlsec();

116: saveel=el;

117: el=0,az=0;

118: }

119: if(min==30){

120: hourd=hour+0.5;

121: calpos();

122: ctrlsec();

123: saveel=el;

124: el=0,az=0;

125: }

126: if(min==45){

127: hourd=hour+0.75;

128: calpos();

129: ctrlsec();

130: saveel=el;

131: el=0,az=0;

132: }

133: if(min==60){

134: hour++;

135: min=0;

136: hourd=hour;
137: calpos();

138: ctrlsec();

139: saveaz=az;

140: saveel=el;

141: el=0,az=0;

142:

143: }

144: if(hour==17){

145: td++;

146: hour=0;

147: }

148:

149: }

150: // }

151: // else if(i==1){

152: //

153: // if(aux==1){

154: // set_var();

155: // pos_inicial();

156: // aux=0;

157: // }

158: // atoda_pu();

159: // }

160: }

161: }

162:

163: void calpos(){

164: if(aux==1){

165: alfa=ctetd*td;

166: alfa=sin(alfa);

167: alfa=(alfa*sin(a));

168: alfa=asin(alfa); // valor final de alfa

169: }
170: ux=sin(a);

171: ux=ux*cos(alfa);

172: hourd=b*hourd;

173: ux=ux*cos(hourd);

174: ux=ux-(cos(a)*sin(alfa)); //valor final de ux

175: uy=sin(hourd);

176: uy=uy*cos(alfa); //valor final de uy

177: uz=cos(a);

178: uz=uz*cos(alfa);

179: uz=uz*cos(hourd);

180: uz=uz+(sin(a)*cos(alfa)); //valor final de uz

181: mod=pow(ux,2);

182: mod=mod+pow(uy,2);

183: mod=(sqrt(mod)); //modulo de ux y uy

184: daz=(uy/mod);

185: del=(uz/mod);

186: az=acos(daz);

187: el=atan(del);

188: //ux=0,uy=0,uz=0,mod=0,daz=0,del=0;

189:

190: }

191: void ctrlsec(){

192: if(el<0){

193: nsec1=(az-saveaz)/ang;

194: for(i=0;i<nsec1;i++){

195: PORTD=secq[ult_sec_az]; //posicion azimut inicial

196: DelayMs(70);

197: ult_sec_az++;

198: inisec();

199: //if(i==0){

200: // saveaz=az;

201: // az=0;

202: //}

203: }
204: el=el*signo;

205: if(saveel>el){

206: ban1=1;

207: }

208: if(ban1==0){

209: nsec2=(el-saveel)/ang;

210: for(j=0;j<=nsec2;j++){

211: PORTB=secq[ult_sec_el]; //posicion elevación inicial

212: DelayMs(70);

213: ult_sec_el++;

214: inisec();

215: //if(j==0){

216: // saveel=el;

217: // el=0;

218: //}

219: }

220: }

221: if(ban1==1){ //cond de referencia de mov. agular de elev

222: nsec2=(saveel-el)/ang;

223: for(j=0;j<=nsec2;j++){

224: PORTB=secq[ult_sec_el]; //posicion elevación inicial

225: DelayMs(70);

226: ult_sec_el--;

227: inisec();

228: //if(j==0){

229: // saveel=el;

230: // el=0;

231: //}

232: }

233: }

234:

235: }

236: else{
237: PORTB=0x00,PORTD=0x00;

238: pos_inicial();

239: set_var();

240:

241: }

242: }

243:

244: void inisec(){

245:

246: if(ult_sec_az==15){

247: ult_sec_az=0;

248: }

249: if(ban1==0){

250: if(ult_sec_el==15){

251: ult_sec_el=0;

252: }

253: }

254: if(ban1==1){

255: if(ult_sec_el==0){

256: ult_sec_el=15;

257: }

258: }

259: }

260: void pos_inicial(){

261:

262: for(ult_sec_az=15;ult_sec_az>=0;ult_sec_az--){

263: PORTD=secq[ult_sec_az]; //posicion azimut inicial

264: if(ult_sec_az==0){

265: ult_sec_az=15;

266: }

267: DelayMs(30);

268: i=RD7;

269: if(i==1){

270: //for(i=0;i<=3;i++){
271: // PORTD=secq[i];

272: //}

273: break;

274: }

275: }

276: for(ult_sec_el=15;ult_sec_el>=0;ult_sec_el--){

277: PORTB=secq[ult_sec_el];

278: if(ult_sec_el==0){

279: ult_sec_el=15;

280: }

281: DelayMs(30);

282: i=RD6;

283: if(i==1){

284: for(;ult_sec_el<=15;ult_sec_el++){

285: PORTB=secq[ult_sec_el];

286: DelayMs(30);

287: if(ult_sec_el==15){

288: ult_sec_el=0;

289: contador++;

290: }

291: if(contador==3){

292: contador=0;

293: break;

294: }

295: }

296: break;

297: }

298:

299: }

300: }

301: void set_var(){

302: // if()

303:
304:

305:
aux=1;saveaz=0,h=0.1,saveel=0,min=0,hour=8,td=1,ban1=0,ban0=0,hourd=0,el=0,az=0,ult_sec_az=0,ult_
sec_el=0,i=0;

306:

307: }

308:

309: void atoda_pu(){

310: for(;;){

311: for(ult_sec_az=0;ult_sec_az<=15;ult_sec_az++){

312: ADCON0=0xC5;

313: DelayMs(5);

314: conv=ADRESH;

315: while (conv>=0x9D){ // comparación con el valor del panel

316: RB6=1;

317: }

318: PORTD=secq[ult_sec_az]; //posicion azimut inicial

319: if(ult_sec_az==15){

320: ult_sec_az=0;

321: }

322: DelayMs(5);

323: i=RD7;

324: if(i==1){

325: vert();

326: break;

327:

328: }

329: }

330:

331: for(ult_sec_az=0;ult_sec_az>=0;ult_sec_az--){

332: ADCON0=0xC5;

333: DelayMs(5);

334: conv=ADRESH;

335: while (conv>=0x9D){ // comparación con el valor del panel

336: RB6=1;
337: }

338: PORTD=secq[ult_sec_az]; //posicion azimut inicial

339: if(ult_sec_az==0){

340: ult_sec_az=15;

341: }

342: DelayMs(5);

343: i=RD7;

344: if(i==0){

345: vert();

346: break;

347: }

348: }

349:

350: }

351: }

352:

353: void vert(){

354: f=0;

355: do{

356: for(;ult_sec_el<=15;ult_sec_el++){

357: ADCON0=0xC5;

358: DelayMs(5);

359: conv=ADRESH;

360: while (conv>=0x9D){ // comparación con el valor del panel

361: RB6=1;

362: }

363: PORTB=secq[ult_sec_el];

364: if(ult_sec_el==15){

365: ult_sec_el=0;

366: }

367: DelayMs(5);

368: z=RD6;

369: if(z==1){
370: pos_inicial();

371: }

372:

373: }

374: f++;

375: }

376: while(f<=5);

377:

378: }

Circuito Impreso (PCB).

Diagrama Esquemático del Circuito.


Conclusión

Para iniciar este proyecto procedimos a verificar la veracidad de la ecuación de


trayectoria, para lo cual generamos una tabla de variables y fórmulas en EXCEL donde
se podía verificar la variación de los ángulos de azimut y elevación a medida que
trascurría el tiempo (8 AM – 17 AM) y se comprobó que los resultados eran bastante
aproximados y coherentes.

A la hora de la programación del PIC con lenguaje C se debía hacer correctamente la


asignación de bancos pues los cálculos extensos y complejos a veces desbordaba la
asignación por defecto que realizaba el compilador.

Por otra parte surgió otro inconveniente al configurar el USART pues el texto en inglés
del datasheet del PIC fue interpretado erróneamente en un principio, el mismo
proponía setear los pines de transmisión y recepción, es decir establecer los dos como
entrada. Pero luego se probó la otra interpretación posible, que sugería configurar el
pin de recepción como entrada y el pin de transmisión como salida con otros arreglos,
de ese modo se logró el buen funcionamiento de la comunicación serial.

De manera a adoptar un solo esquema y de la manera más sencilla, tanto en Visual


Basic como en C, con el protocolo RS 232; se prefirió trabajar exclusivamente con
caracteres de manera que un dato numérico se convertía a cadena para su posterior
envío en ambas direcciones.

Cabe destacar que en el posicionamiento inicial también se realiza una corrección


aproximada de 3 grados con respecto a la elevación del panel, debido a un efecto
conocido como aberración cromática que aparenta el sol más elevado de lo que se
encuentra cerca del horizonte, debido a la refracción de la luz en la capa atmosférica.

Todas las prestaciones del sistema están enfocadas hacia estudios meteorológicos
pues se puede mejorar el software de la PC para generar una base de datos de
manera a tener un registro del comportamiento radiaciones solares durante ciertas
épocas del año, determinar el comportamiento de trayectoria solar; así también
analizar la incidencia de radiación solar en ciertas áreas, factor importante a la hora de
determinar la factibilidad y rentabilidad de la instalación de una planta generadora de
energía eléctrica.
Por último recordamos que este sistema de seguimiento mejora el rendimiento del
panel solar, lo cual nos permite adquirir mayor cantidad de energía bajo las mismas
condiciones ambientales y en el mismo día. Pues se logra ensanchar la curva de
Gauss de adquisición de energía, comprobando que el pico máximo de energía se
obtendrá cerca del medio día.

Você também pode gostar