Auringon korkeus horisontista asteina ajan funktiona:
h(t) = -23,44cos(180(D)/182,5) - (90 - L)cos(180(60(hh)+(mm)+(ee))/720)
jossa D on aika vuorokausina talvipäivänseisauksesta (22.12).
jossa L on leveysaste
jossa hh on kellonajan tuntiosa
jossa mm on kellonajan minuuttiosa
jossa ee on erotus minuutteina normaaliajasta, jossa aurinko saavuttaa huippunsa klo 12 ja alimman arvonsa klo 00. (esim. Espoossa talviaikaan -22 ja kesäaikaan -22 - 60 = -82 .
----------
Tuota yhtälöä ehdin käyttää jonkun aikaa kunnes pettymyksekseni huomasin, että esim. päiväntasaajalla yhtälö väittää, että aurinko pysyisi tasauspäivänä pidemmän aikaa 90 asteen tienoilla kuin mitä se oikeasti pysyy.
Päiväntasaajalla auringon kuuluisi tasauspäivänä nimittäin oikeasti edetä taivaan halki tasaisesti 1 aste / 4min. Yhtälö ei siis päde ainakaan lähellä päiväntasaajaa oleville leveyspiireille. Meidänkään leveyspiirille, 60 astetta, se ei täydellisesti päde, mutta on sentään suuntaa antava.
Olen koittanut tässä kehitellä pätevämpää yhtälöä auringon korkeudelle. Netistä en ole vastaavaa löytänyt. Onko kellään ideoita?
Ratalaskut ovat yksinkertaisimmillaankin liian työläitä selitettäväksi täällä. Käy lainaamassa kirjastosta Tähtitieteen perusteet. Sieltä löydät Maan ja muiden planeettojen rataparametrit ja ohjeet miten niistä lasketaan taivaankappaleiden sijainnit muutaman vuosikymmenen ajan muutaman kaariminuutin tarkkuudella. Laskujen ohjelmointi tietokoneelle ei ole vaikeaa.
Nasalla löytyy sitten ohjelma, joka laskee sijainnit huomoiden kaikenlaisia periodisia häiriöitä. Katso: http://ssd.jpl.nasa.gov/?horizons .
Mä tein tämmösen aurinkopaneelin kääntelyä varten. En vaan osaa lähettää noita kulmia pc:ltä aaveeärrälle, kun oon niin tumpelo.
Turha tämmösen kanssa on kyllä mitään sekunteja ja asteen osia kyttäillä...
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
#include "conio.h"
#include "math.h"
#include "ctime"
using namespace std;
int main ()
{
float pi = 3.14159265;
float latitude = 0;
float lognitude = 0;
float x_angle=0;
float y_angle=0;
printf("Latitude: ");
scanf("%f",&latitude);
printf("Lognitude: ");
scanf("%f",&lognitude);
while(1)
{
time_t now = time(0);
tm *ltm = localtime(&now);
float day;
int this_day = ltm->tm_mday; // tämä päivä
int this_month = ltm->tm_mon + 1; // tämä kuukausi
int this_hour = ltm->tm_hour; // tämä tunti
float this_min = ltm->tm_min; // tämä minuutti
float this_sec = ltm->tm_sec; // tämä sekunti
/* tunteja tänään kulunut */
float hours = this_hour + this_min / 60 + this_sec / 3600;
/* korjaus normaaliaikaan tunteina */
float fix = (30 - lognitude) * 0.06666667;
struct tm setdate;
setdate = *localtime(&now);
setdate.tm_hour = 13; // asetettu aika kevätpäivän tasaus
setdate.tm_min = 41;
setdate.tm_sec = 0;
setdate.tm_mon = 2; // maaliskuu
setdate.tm_mday = 20; // 20 pv.
double seconds = difftime(now,mktime(&setdate)); // sekunnit asetetusta ajasta
printf("%.1f %.1f ", latitude, lognitude);
printf("%2d.%2d ", this_day, this_month);
printf("%2d.%2.f ", this_hour, this_min);
day = seconds / 86400; // monesko päivä sitten asetetun ajan
printf ("day %.f ", day);
printf(" hours %.2f ", hours);
y_angle = (-cos(2*pi*(hours-fix)/24)) * ((180-2*latitude)/2) + (sin((2*pi/365)*day)*23.44);
x_angle = ((hours-fix)*15-180);
printf("y = %.1f ", y_angle);
printf("x = %.1f\n", x_angle);
Sleep(10000);
}
return 0;
}
Joo. En osaa mitään visualstudiolla tehtyä pätkää laittaa laittamaan sarjaporttiin mitään.
Anteeksi jos häiriköin tässä ketjussa, mutta kun tämä asia ei kuulu melkein uusiin telaketjuihin. Ei ainakaan mulla sodan sytyttyä ole mitään tiatsikkaa millä laskea jotain kulmia. Teen sitten aaveeärrälle koko homman. Hieman tarkka kello pitäisi vaan keksiä. Siinä olisi tosin Arduinolla toimisi noi trikonometriset funktiot suoraan, mutta perinteisesti paljaalla ei.
Se on juhlaa kun saa ydintuhon jälkeen aurinkopaneeleista virtaa juuri tarpeeksi kääntämään aurinkopaneelia aurinkoon päin...
Voipi olla melko pitkä lasku. Siskoni kehitti joskus auringin nousuun ja laskuun yhtälön, mutta se heitti muutaman minuutin, ilmeisesti kun ei ottanut huomioon ilmakehän taittamista. Netistä löytyi tällainen artikkeli tuohon korkeuteen: http://www.physics.arizona.edu/~cronin/Solar/References/Irradiance%20Models%20and%20Data/SPR07.pdf . Nyt kun kysyin, perusmalli auringon laskuun ja nousuun on johdettu osoitteessa http://www.artofproblemsolving.com/Forum/viewtopic.php?f=332&t=569192 , mutta siinä ei ole otettu kaikkia tekijöitä huomioon.