- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Welcher Microcontroller für Solarverfolger (Solartracker)

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Anzeige

    Praxistest und DIY Projekte
    hab mal was gegoogelt und dabei folgendes Java Script gefunden:

    http://lexikon.astronomie.info/zeitg...ng/source.html

    Code:
    <!-- 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?
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    13.02.2009
    Ort
    Basel
    Alter
    30
    Beiträge
    52
    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)

  3. #13
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    30.10.2005
    Ort
    Westpool
    Alter
    94
    Beiträge
    18
    Hallo,

    Zitat Zitat von Besserwessi
    - 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ü

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen