PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Welcher Microcontroller für Solarverfolger (Solartracker)



lolrene
08.07.2009, 16:14
Hallo zusammen,

ich wollte für meine solaranlage einen Solaverfolger auch Solartracker genannt bauen, nur wollte ich es nicht analog machen sondern mit einem Microcontroller.

Wichitg wäre nur das er 2 analoge ausgänge hat für die y udn x Achse (Schrittmotoren ) und natürlich einen eingang für die Lichtsensor.

Habe schon gesucht und gesucht und finde einfach nichts.
Oder ist es Unsinn so einen Solartracker via Microcontroller zu realisieren ?

Vielen Dank im Vorraus für euer Angagement

Gruss

wkrug
08.07.2009, 16:28
Ich meine ein ATMEL ATMEGA 8 sollte dafür geeignet sein.
Der hat 6...8 A/D Wandlereingänge für deine Helligkeitssensoren und auch mehrere PWM Ausgänge um damit analoge Spannungen zu erzeugen.

Wobei Schrittmotoren üblicherweise mit Impulsen angesteuert werden !???


Oder ist es Unsinn so einen Solartracker via Microcontroller zu realisieren ?
Würde ich nicht sagen, weil man damit die Arbeitsparameter ( Hysterese, Wartezeiten, Startstellung, usw. ) einstellen kann, ohne Bauteile umzulöten.

lolrene
08.07.2009, 16:31
Stimmt, Schrittmotor,... Gleichstrommotor meine ich ;)

lolrene
08.07.2009, 16:37
hmm gibt es dazu auch schon passende platinen sodass das anschliessen erleichtert wird (z.B. mit ISP Schnittstelle)

wkrug
08.07.2009, 16:47
Stimmt, Schrittmotor,... Gleichstrommotor meine ich
Da würde sich PWM ohnehin anbieten.
Du brauchst allerdings noch eine Motor Umpolung, da der ( die ) Gleichstrommotor auch mal rückwärts laufen muß.

Entweder du nimmst Dazu eine H-Brücke, oder polst den Motor mittels Relais um.

Da das Relais durch den Controller quasi immer ohne Strom auf den Kontakten geschaltet werden kann dürfte es auch sehr lange halten.

Für die PWM Steuerung der Motoren kannst Du einen MOS Fet Transistor verwenden, der bei PWM Betrieb auch nur relativ wenig Verluste verursacht.

In den Ruhephasen würde ich das Relais abschalten und den Controller in einen Sleep Modus bringen um die wertvolle Solarenergie ( ich denk mal um sowas geht es hier ) nicht sinnlos zu verschenken.

Ein Timer kann dann alle 10 sekunden den Controller aufwecken und schauen ob was nachzuregeln ist.

Mach diese Funktionen mal mit einer analogen Schaltung ;-)

Besserwessi
08.07.2009, 17:28
Wenn die Achse richtig liegt, kriegt man schon mit einer Achse eine recht gute Nachstellung der Richtung. Zumindestens für ein Stationäre Anlage.

Als µC lieber einen Mega88 statt Mega8: ist deutlich sparsamer.

wkrug
08.07.2009, 19:05
hmm gibt es dazu auch schon passende platinen sodass das anschliessen erleichtert wird (z.B. mit ISP Schnittstelle)
Da es hier ja nur um wenige Bauteile geht, sollte das auf einem Streifenraster noch gut realisierbar sein.

MEGA 88 ist natürlich auch OK - Ich kenn den MEGA 8 halt besser.
Der ATMEGA 8 steht bei ATMEL auch schon auf der Abkündigungsliste.
Nachfolger dürfte der ATMEGA 8 A sein, soweit ich das kapiert habe.

Vitis
09.07.2009, 00:13
anmessen des Sonnenstandes ist doch ätzend ... gabs hier schon
x mal ... warum macht sich keiner die Arbeit einfach mal
Rektaszension, Deklination, Inklination, Azimut der Sonne zu berechnen
und führt einfach mit Timecode DCF77 und Schrittmotor das Ding nach?
Ist doch ätzend, es zieht mal ne schwarze Wolke kurz vor die
Sonnenscheibe und das Ding fängt an verrückt zu spielen ...
Die Bahn der Sonne ist doch bekannt

lolrene
09.07.2009, 01:09
Hört sich gut an, hast du ein paar starthilfe tips zum verwirklichen ?
habe sowas von der Programmierung schon alleine noch nicht gemacht.

wkrug
09.07.2009, 08:40
Rektaszension, Deklination, Inklination, Azimut der Sonne zu berechnen
und führt einfach mit Timecode DCF77 und Schrittmotor das Ding nach?
... und liegt dann immer daneben, weil die Mechanik 10° neben dem berechneten Sonnenstand liegt... ;-).

Eine Kombination der beiden Methoden wäre aber gut denkbar.

Vitis
09.07.2009, 09:38
hab mal was gegoogelt und dabei folgendes Java Script gefunden:

http://lexikon.astronomie.info/zeitgleichung/source.html



<!-- KOMMENTAR ZUM SCRIPT
Wir freuen uns selbstverstaendlich wenn Sie sich
fuer die Details unseres kleinen Skripts interessieren.
Es bringt jedoch nichts, wenn Sie dieses Script auf Ihre Seite kopieren.
Ein einfacher Link beweist genau so gut, dass Sie das Script gefunden haben.
Kopieren Sie deshalb diese Script nicht auf Ihre 'private' Hompage.
Roland Brodbeck/Arnold Barmettler, Verein astroinfo, www.astronomie.info, Version 2008
-->
<SCRIPT LANGUAGE="JavaScript">
pi = 3.1415926536;
RAD = pi/180.0; // Umrechnungsfaktor von Grad nach Radians
h = -(50.0/60.0)*RAD; // Höhe des Sonnenmittelpunkts bei Aufgang: Radius+Refraktion


function sqr(x)
{
// Quadrat von x
return x*x;
}

function sonnendeklination(T)
{
// Deklination der Sonne in Radians
// Formula 2008 by Arnold(at)Barmettler.com, fit to 20 years of average declinations (2008-2017)
return 0.409526325277017*Math.sin(0.0169060504029192*(T-80.0856919827619));
}

function zeitdifferenz(Deklination)
{
// Dauer des halben Tagbogens in Stunden: Zeit von Sonnenaufgang (Höhe h) bis zum höchsten Stand im Süden
return 12.0*Math.acos((Math.sin(h) - Math.sin(B)*Math.sin(Deklination)) / (Math.cos(B)*Math.cos(Deklination)))/pi;
}

function zeitgleichung(T)
{
// Differenz zwischen wahrer und mittlerer Sonnenzeit
// formula 2008 by Arnold(at)Barmettler.com, fit to 20 years of average equation of time (2008-2017)
return -0.170869921174742*Math.sin(0.0336997028793971 * T + 0.465419984181394) - 0.129890681040717*Math.sin(0.0178674832556871*T - 0.167936777524864);
}

function aufgang(T)
{
DK = sonnendeklination(T);
return 12 - zeitdifferenz(DK) - zeitgleichung(T);
}

function untergang(T)
{
DK = sonnendeklination(T);
return 12 + zeitdifferenz(DK) - zeitgleichung(T);
}



// Berechnung von Azimut und Höhe des Sonnenmittelpunkts über Horizont

function AzimutHoehe(B, T, ZeitSeitMittag)
{
// Azimut und Höhe der Sonne (ohne Refraktion)
DK = sonnendeklination(T);
cosdec = Math.cos(DK);
sindec = Math.sin(DK);
lha = ZeitSeitMittag*(1.0027379-1./365.25)*15*RAD; // Stundenwinkel seit wahrem Mittag in Radians
// 1.0027379: Faktor für Sternzeitkorrektur, 1./365.25: Fortschreiten der Rektaszension der Sonne in einem Tag in Grad
coslha = Math.cos(lha);
sinlha = Math.sin(lha);
coslat = Math.cos(B);
sinlat = Math.sin(B);
N = -cosdec * sinlha;
D = sindec * coslat - cosdec * coslha * sinlat;
var coor = new Object();
coor.azimut = Math.atan2(N, D); if (coor.azimut<0) coor.azimut += 2*pi; // Azimut. Norden=0, Osten=pi/2, Westen=3/4pi
coor.hoehe = Math.asin( sindec * sinlat + cosdec * coslha * coslat ); // Höhe des Sonnenmittelpunkts
return coor;
}

function Refraktion(hoehe)
{
// Näherungslösung für die Refraktion für ein Objekt bei Höhe hoehe über mathematischem Horizont
// Refraktion beträgt bei Sonnenaufgang 34 Bogenminuten = 0.56667°
// Falls die Höhe der Sonne nicht genauer als auf 0.5° gewünscht ist, kann diese Funktion ignoriert werden
P=1013.25; // Luftdruck der Standard-Atmosphäre in hPa (=mbar)
T=15; // Temperatur der Standard-Atmosphäre in °C
R = 0;
if (hoehe>=15*RAD) R = 0.00452*RAD*P/Math.tan(hoehe)/(273+T); // über 15° - einfachere Formel
else if (hoehe>-1*RAD) R = RAD*P*(0.1594+0.0196*hoehe+0.00002*sqr(hoehe))/((273+T)*(1+0.505*hoehe+0.0845*sqr(hoehe)));
return R; // Refraktion in Radians
}


function compute(form)
{
Laenge = eval(form.Laenge.value.replace(/,/,'.'));
Breite = eval(form.Breite.value.replace(/,/,'.'));
Zone = eval(form.Zone.value.replace(/,/,'.'));
T = eval(form.T.value.replace(/,/,'.'));
B = Breite*RAD; // geogr. Breite in Radians

// Berechnung von Sonnenauf- und -Untergang
Aufgang = aufgang(T); // Sonnenaufgang bei 0° Länge
Untergang = untergang(T);// Sonnenuntergang bei 0° Länge

Aufgang = Aufgang - Laenge /15.0 + Zone; // Sonnenaufgang bei gesuchter Länge und Zeitzone in Stunden
Untergang = Untergang - Laenge /15.0 + Zone; // Sonnenuntergang bei gesuchter Länge und Zeitzone in Stunden

form.Aufgang.value = Aufgang;
form.Untergang.value = Untergang;
form.Zeitgleichung.value = 60.0*zeitgleichung(T);
form.Deklination.value = sonnendeklination(T)/RAD;


// Ab hier Berechnung von Azimut und Höhe zu gegebener Zeit
Zeit = eval(form.Zeit.value); // Zeit in Stunden (Dezimal-Minuten!); nur für die Berechnung von Azimut und Höhe

ZeitSeitMittag = Zeit+Laenge/15.0-Zone -12 +zeitgleichung(T); // Zeit in Stunden seit Sonne im Süden
coor = AzimutHoehe(B, T, ZeitSeitMittag); // Azimut/Höhe über mathematischem Horizont des Sonnenmittelpunkts

form.Azimut.value = coor.azimut/RAD; // Azimut in Grad: 0°-Norden, 90°-Osten, 180°-Süden, 270°-Westen
form.Hoehe.value = (coor.hoehe+Refraktion(coor.hoehe))/RAD; // Höhe mit Refraktionskorrektur in Grad
}

function init(form)
{
// Startwerte
form.Laenge.value = "10.0";
form.Breite.value = "50.0";
form.Zone.value ="1";
form.T.value ="1";

form.Zeit.value ="8"; // Zeit nur für die Berechnung von Aziumt und Höhe verwendet

// Ausgabewerte zurücksetzen
form.Aufgang.value ="0";
form.Untergang.value ="0";
form.Zeitgleichung.value = "0";
form.Deklination.value ="0";

form.Azimut.value ="0";
form.Hoehe.value ="0";
}



müsste man dann nur noch in Deine gewünschte Programmiersprache
adaptieren und gut ist.
10° wären aber ne Menge Holz ... es sollte sich doch schon mal ein
Kompas finden lassen um das Ding gescheit einzunorden.
Was bei der Sensorvariante auch noch ist; was machste wenn sich
n Vogel auf das Ding hockt oder ggf noch drauf kackt?

CPU_Heizer
09.07.2009, 09:50
Naja, die Berechnung der Sonnenposition mit einem uC scheint mir grad ein wenig kompliziert.
Aber ob es bewölkt ist, kann man ja feststellen, indem man misst, ob grosse Unterschiede an den Fotowiederständen anliegen.
Denn wenn die Sonne scheint, dann werden 1 oder 2 Fotowiederstände deutlich stärker beschienen als der/die andere(n)

Besserwessi
09.07.2009, 18:20
Die Berechnung ist doch nicht kompliezert, es sein denn man will es in ASM machen. Aber so schnell bewegt sich die Sonne ja nicht, das man da irgendwie rücksicht auf die Rechenzeit nehmen müsste. Da sollte selbst ein 32 kHz Takt noch reichen.

Die Regelung wird vermutlich kompliezierter zu programmieren sein, wenn man auf alle eventuellitäten achten will. Z.B.:
- Schatten eine Vogels
-Teilweise bewölkter Himmel, wo das meiste Licht tatsächlich mal aus einer anderen Richtign kommt
- Temperaturänderungen am Fotowiderstand
- Blitze
- Nebel

loetman
06.10.2009, 21:50
Hallo,



- Schatten eine Vogels
-Teilweise bewölkter Himmel, wo das meiste Licht tatsächlich mal aus einer anderen Richtign kommt
- Temperaturänderungen am Fotowiderstand
- Blitze
- Nebel

naja, das meiste kann man einfach "erschlagen" indem man mehrere Messungen macht und das nimmt wovon es die meisten gleichen Meßergebnisse gibt -so eine Art Trägheit (Blitz, vorbei fliegender Vogel, Autoscheinwerfer...).
Nebel würde beide Sensoren gleichermaßen abschwächen, ebenso Temperatur - es ist ja nur interessant an welcher Seite mehr Licht kommt.

Die Idee mit dem Sonnenauf- und -untergang ist schon interessanter- so das das Ding nur Tagsüber arbeitet - wobei man das auch mit dem Messen der Spannung am Panel selber ohne Uhr machen kann (geht dann auch bei ner Sonnenfinsternis ;) ).

Es würde also alles ohne komplizierte Berechnungen gehen in dem man die richtigen Eingangswerte (2x(4x*)Fotosensor, Pannelspannung, evtl. Anschlag) nimmt und dazu verifiziert. (*hoch runter?)

salü