Forum: Projekte & Code Sonnenstandberechnung mit Atmega 8


von Jörg B. (cusoe)


Angehängte Dateien:

Lesenswert?

Hallo,

vielleicht sucht jemand so etwas, evtl. für eine Solarzellennachführung. 
Das Programm berechnet die Sonnenpostion in Abhängigkeit des eigenen 
Standortes und der Uhrzeit kontinuierlich (Schaltjahre werden 
berücksichtigt). Ein- und Ausgabe der Daten erfolgt derzeit noch über 
die serielle Schnittschelle und einem Terminalprogramm, soll evtl. 
später in Verbindung mit einem LCD-Display und entsprechender Ein- und 
Ausgangsbeschaltung für die Ansteuerung / Rückmeldung der Azimut und 
Elevationsmotoren erweitert werden. Vielleicht nicht so elegant aber die 
Berechnung scheint so i.O. zu sein zumindest stimmen die berechneten 
Werte mit dem Programm "Orbitron" (http://www.stoff.pl/) überein.

Zeit, Datum und der eigene Standort können über die Tastertur während 
des Programmlaufs verändert werden:

s, S = +/- Stunden
m, M = +/- Minuten
s, S = +/- Sekunden

t, T = +/- Tage
o, O = +/- Monate
j, J = +/- Jahre

b, B = +/- eigener Breitengrad (Nord = positiv)
l, L = +/- eigener Längengrad (Ost = positiv)

cusoe

von Martin (Gast)


Lesenswert?

Wie lang ist das Programm nach dem Übersetzen?

von Jörg B. (cusoe)


Lesenswert?

Martin wrote:
> Wie lang ist das Programm nach dem Übersetzen?

Leider noch relativ gross

Size after:
AVR Memory Usage
----------------
Device: atmega8

Program:    6782 bytes (82.8% Full)
(.text + .data + .bootloader)

Data:        138 bytes (13.5% Full)
(.data + .bss + .noinit)

Der meiste Speicher wird noch für die Ausgabe "verbraucht", da sie zum
Teil mit dem Befehl "dtostrf" erfolgt. Ohne Ausgabe sind es ca. 4500
bytes.

cusoe

von Albert D. (albert32)


Lesenswert?

Jörg B. wrote:
> Martin wrote:
>> Wie lang ist das Programm nach dem Übersetzen?
>
> Creating Extended Listing: son.lss
avr-objdump -h -S son.elf > son.lss

Creating Symbol Table: son.sym
avr-nm -n son.elf > son.sym

Size after:
son.elf  :
section            size      addr
.text              5588         0
.data               116   8388704
.bss                 22   8388820
.stab               888         0
.stabstr            113         0
.debug_aranges       32         0
.debug_pubnames     284         0
.debug_info        1380         0
.debug_abbrev       571         0
.debug_line        1608         0
.debug_frame        224         0
.debug_str          339         0
.debug_loc         1016         0
Total             12181


AVR Memory Usage:
-----------------
Device: atmega8

Program:    5704 bytes (69.6% Full)
(.text + .data + .bootloader)

Data:        138 bytes (13.5% Full)
(.data + .bss + .noinit)


-------- end --------


> Process Exit Code: 0
> Time Taken: 00:05

Kommt auf die Einstellungen im Makefile an!

von Jörg B. (cusoe)


Lesenswert?

@ Albert Doe

Welche Einstellungen hast du im makefile vorgenommen, die Grösse ist ja 
deutlich geringer?

von wborck (Gast)


Lesenswert?

Hallo,

bist Du mit dem Programm weitergekommen, gibt es mittlerweile einen 
aktuelleren Stand?

MfG,
wborck

von Albert D. (albert32)


Angehängte Dateien:

Lesenswert?

Jörg B. wrote:
> @ Albert Doe
>
> Welche Einstellungen hast du im makefile vorgenommen, die Grösse ist ja
> deutlich geringer?

Entschuldigung, hatte viel um die Ohren!

mfg

albert

von Jörg B. (cusoe)


Lesenswert?

Nein hab leider noch nicht daran weiter arbeiten können, bin erst mal 
mit einem Platinen-Layout beschäftigt.

von Oliver K. (oliverk23)


Lesenswert?

Hi Jörg (Cusoe),
ich suche ungefähr sowas wie du geschrieben hast, jedoch hab ich leider 
keine Ahnung von der µc Programmierung. Wäre net wenn du dich mal bei 
mir melden könntest damit ich dir mein genaues Problem beschreiben kann, 
ist vielleicht auch schon mit deinem bestehenden Programm machbar, musst 
es auch nicht umsonst machen.

meine Email : olli@koehlerlgbg.de

gruss Olli

von Jörg B. (cusoe)


Lesenswert?

hallo oliver,

kannst mir ja mal schreiben was du vor hast, aber nur soviel, wenn´s um 
programmieren geht hab ich da auch nicht all zu viel zeit für. hab 
jedoch zwischenzeitlich wieder etwas daran erweitert, es gibt jetzt eine 
kleine platine mit lcd und einige diveres ergänzungen im programm, aber 
es ist noch lange nicht fertig.

gruss jörg

von Oliver K. (oliverk23)


Lesenswert?

Hi Jörd,
wow das ging aber flott :-)
aber es wäre mir lieber wenn wir uns mal im chat oder per email 
unterhalten könnten oder telefonieren, da wie gesagt du die sache ja net 
umsonst machen musst und ich weiss net ob des so wirklich hier ins forum 
gehört dann.
Aber das mal en groben Überblick hast was ich suche bzw brauche.
eigentlich nur einen µc der mir den aktuellen Sonnenstand berechnet 
brauche auch nur den Azimut Winkel.
Die lokalen GPS Daten am besten beim flashen des µc fest mit ins 
Programm eingeben, und wenn möglich Datum und Uhrzeit über ne DCF Uhr 
holen.
Und den Azimut Winkel dann wenn möglich als analog Signal an ne 
Steuerung übergeben.
Das mal im groben, wie gesagt müssten wir uns mal unterhalten was ich 
dafür alles benötige und was du dafür haben willst wenn du mir sowas 
machen würdest bzw das jetzige Programm umzuschreiben,bin gern bereit 
dafür einige Euros springen zu lassen, aber das will ich net unbedingt 
hier im Chat machen.

Meld dich mal bitte unter olli@koehlerlgbg.de.
Da sag ich dir dann genaueres.

Gruss olli

von Jörg B. (cusoe)


Angehängte Dateien:

Lesenswert?

Nur mal zur Info, so sieht der derzeitige Stand aus. Leider komme ich 
aus Zeitmangel nur langsam weiter, aber vielleicht nutzt es euch etwas. 
Details könnt ihr ja aus dem Schaltplan nehmen. Als µC verwende ich 
jetzt den Atmega 328P, da das Programm mittlerweile 17KB groß geworden 
ist. Dafür läßt es sich jetzt standalone über Taster bedienen und die 
Anzeige erfolgt über ein 4x20 Zeichen LCD.

von wborck (Gast)


Lesenswert?

Hallo,
bist Du mit Deinem Projekt weiter gekommen?!

Grüße,
wborck

von Thilo M. (Gast)


Angehängte Dateien:

Lesenswert?

Hi Jörg (Cusoe),

muss aus aktuellem Anlass den Thread aufwärmen. ;-)
Ich habe mir eine Photovoltaikgespeiste Notstromversogung gebaut, die 
Photovoltaik wird nachführbar.

Dafür habe ich deine Berechnung hinzugezogen, läuft prima, Lob dafür!

Ich habe den Code mit einer DCF77-Empfangsroutine und RTC (eigene 
Kreation, sehr zuverlässig) erweitert, LCD-Ausgabe (HD44780, hier aus 
dem Forum) 2x16 Zeichen und Zeitzonen- sowie Sommerzeiteinstellung ist 
auch drin. Prozessor musste ein ATmega32 (oder 644) werden, da sonst der 
Speicher nicht mehr reicht.

Eigentlich fehlt nur noch die Ansteuerung und Messung der Mechanik. 
Sobald die feststeht, werde ich mich wieder melden.
Evtl. hilft meine Erweiterung dem Einen oder Anderen ja weiter.

Gruß Thilo

P.S.: die DCF-Aktivantenne ist die von Conrad, falls es die noch gibt, 
der low-aktive Ausgang wurde benutzt.

von Thilo M. (Gast)


Angehängte Dateien:

Lesenswert?

OK, hier nochmal eie überarbeitete Version.
UART Zeiteinstellung ist vereinfacht (RX per Interrupt), PWM für 
Sanftanlauf der Motoren implementiert. Die Motorsteuerung ist für die 
Ansteuerung nacheinander (erst X, dann Y-Richtung) geplant. Die Messung 
der Stellung habe ich mit Winkelsensoren von Conrad, Nr.182865, 
realisiert. Die Messung wird gemittelt (100 Messwerte) und anschließend 
noch per SW gedämpft, um "hibbeliges" Regeln zu vermeiden.

Die direkte Ansteuerung der Motoren ist für jeden individuell, darum 
habe ich sie hier weggelassen.

Evtl. hilft's ja jemand weiter. ;-)

von Horst H. (horha)


Lesenswert?

Hallo,

ich habe mal eine prinzipielle Frage.
Wozu diese Genauigkeit mit der Sonnenposition von 0.01 Grad -> 
http://de.wikipedia.org/wiki/Sonnenstand, die so enorm viel Aufwand bei 
der Berechnung hat, dass dies mehrere Kilobyte nur für die 
transzendenten Funktionen in Anspruch nimmt.
Wenn der Winkel zwischen Sonne und Normalenvektor der sonnenbeschienene 
Fläche kleiner als arccos(0.99) = 8,1096... Grad == 32 min 26 sek ist, 
dann ist die bestrahlte Fläche eben 0.99 statt 1 also 1% kleiner.Wäre es 
nicht erheblich einfacher eine Tageskurve Höhenwinkel = f( Uhrzeit, 
aktueller Breitengrad) vom 21.März zu nehmen, die +-tagesaktuelle 
Deklination auf den Höhenwinkel aufzuaddieren ( Sinuskurve ) und die 
Zeitverschiebung des Zenitdurchganges der Sonne/Analemmnas in der 
Uhrzeit http://www.analemma.com/Pages/framesPage.html zu 
berücksichtigen.
Das sind 3 kleine Tabellen.
Wie klein kann man sich ja ausrechnen, wenn man alle 15 min == 4 Grad => 
cos(4) = 0.997 die Lage nachregelt.
Das sind 96 Einträge für einen Tag, ohne Interpolation.
Mit linearer Interpolation noch weniger.
Die Höhenwinkelverschiebung und Azimutverschiebung braucht man höchstens 
nur einmal täglich berechnen,da tut sich nicht viel.
Dies sieht man anhand der Daten dieser Tabellen Spalte T und V:
http://www.srrb.noaa.gov/highlights/sunrise/calcdetails.html

von Thilo M. (Gast)


Lesenswert?

Horst Hahn schrieb:
> Wozu diese Genauigkeit mit der Sonnenposition von 0.01 Grad ->
> http://de.wikipedia.org/wiki/Sonnenstand, die so enorm viel Aufwand bei
> der Berechnung hat, dass dies mehrere Kilobyte nur für die
> transzendenten Funktionen in Anspruch nimmt.

Du hast natürlich Recht, die Genauigkeit ist viel zu groß.
Es ist mir aber, ehrlich gesagt, egal wieviel kB die Berechnung in 
Anspruch nimmt, solange genügend Platz zur Verfügung steht. ;-)
Mein Ziel war, schnell zum Ziel zu gelangen, darum habe ich diese 
Berechnungen aufgegriffen. Die Anzahl Pins hätten beim mega8 für meine 
Anwendung sowieso nicht ausgereicht und der Preisunterschied ist 
minimal.
Ich führe auch nur alle 2..3° nach, anders ist es regeltechnisch 
ziemlich aufwändig und stromfressend, außerdem ist beim Ertrag kaum ein 
Unterschied festzustellen.

Du kannst ja mal ein Speicherplatzoptimiertes Beispiel 'reinstellen, 
würde mich auch interessieren. ;-)

von Holm T. (Gast)


Lesenswert?

hat sich in diesem Zusammenhang schon mal Jemand mit der Verwendbarkeit 
von Digital gesteuerten Satellitenschüssel-Motoren beschäftigt?
Ein Kumpel hat mir so ein "defektes" Ding mal mitgebracht, hat es 
indessen wieder mitgenommen, da das Teil nur über einen Endschalter 
gelaufen war..

Das was da an Mechanik drin war, sah recht stabil aus, Drehgeber war 
auch drin. Mit 2 solchen Motoren sollte man eigentlich Elevation und 
Azimut von PV auch einstellen können. Gesteuert werden die über DISEQ, 
Stromversorgung über das SAT Kabel. Ich habe nur nichts Detailliertes 
über das Steuerprotokoll finden können..

Gruß,

Holm

von Herbert K. (avr-herbi)


Lesenswert?


von Informant (Gast)


Lesenswert?

Solche SAT Stellmotoren kosten bei €bay etwa 50 €, sind m.E. aber nur 
einachsig.

Es gibt noch andere Threads hier im Forum, vielleicht kann man sie in 
diesem Artikel sammeln, der auf dem in diesem Thread vorgestellten Code 
basiert:

http://www.mikrocontroller.net/articles/Sonnenfolger_/_Heliostat

von Informant (Gast)


Lesenswert?

Verzeihung, das geht ja auch automatisch:  Sonnenfolger/Heliostat

von Informant (Gast)


Lesenswert?

Mit Unterstrichen um den Schrägstrich? : Sonnenfolger_/_Heliostat

von Thilo M. (Gast)


Lesenswert?

Ich wärme das Thema nochmal auf. ;-)

@ Jörg B.:
Nach längerem Betrieb habe ich festgestellt, dass die Berechnung der 
Elevation im negativen Bereich seltsame Sprünge vollzieht.

So ab -4° geht es los.

Evtl. ein kleiner Bug in der Berechnung?

von Wolfgang (Gast)


Lesenswert?

Thilo M. schrieb:
> So ab -4° geht es los.
>
> Evtl. ein kleiner Bug in der Berechnung?

Dann nenn doch mal die Parameter (Datum, Zeit, Standort), bei denen du 
den Werten nicht traust. Dann kann man sich das mal im Debugger ansehen 
und nachrechnen.

von Thilo M. (Gast)


Lesenswert?

Hi,

hier die Koordinaten:
float laenge = 8.58886, breite = 49.9409;
Zeit war der 24.03.2013, Abends eben, Elevation <0. :-)

Ich habe das Ganze per RS232 im Terminalprogramm verfolgt.
Da sieht man die Sprünge deutlich, so ab -11° hört das Ganze wieder auf 
und die Werte bleiben stabil.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.