Elektrotekno.com Ana Sayfa || Devre ve proje istekleriniz


Güneş'in Doğma ve Batma Zamanı Hesabı

Açıklama:
Elektrik, Elektronik, Haberleşme ve Otomasyon konularının ağırlıklı olarak konuşulduğu, tartışıldığı ve bilgi paylaşımı yapıldığı forumumuza hoşgeldiniz.
Şu an Tamamlanmış Elektronik Devreler, Projeler kategorisi içerisindeki Devre ve proje istekleriniz forumunda bulunuyorsunuz.
Bu sayfada üyelerimizin "Güneş'in Doğma ve Batma Zamanı Hesabı" konusundaki problem, görüş ve önerileri okuyabilir ayrıca konu hakkındaki doküman, resim, proje, devre ve programlara ücretsiz olarak ulaşabilirsiniz. Üye olduktan sonra sizler de konu hakkında sorular sorabilir ya da yorum ve paylaşım yaparak birikimlerinizi aktarabilirsiniz.
Forumdan tam olarak yararlanabilmek için üye olmayı unutmayınız!
Kayıt: 07 Eyl 2006
Mesajlar: 18
Konum: İstanbul
Offline
SYavuz
Tarih: 25 09 2006 02:50

Bir proje için güneş'in, enlem ve boylamlara göre doğma ve batma zamanını hesaplamam gerek, fakat internetten yaptığım kaynak araştırmalarında;

f : gözlem yerinin derece biriminde enlemi,
b : gözlem yerinin derece biriminde boylamı,
a , d : Güneşin ekvatoral koordinatları
q : yerel yıldız zamanı
q0 : Greenwich yıldız zamanı

olmak üzere bir gök cisminin, atmosferik kırılma etkisini de dikkate alınarak , doğma-batma

anındaki saat açısı H0 aşağıdaki formülden hesaplanabilir ;

cos H0 = (( sin( 50’ ) - sinj * sind ) / cos j*cos d )

böylece hesaplanan H0 değeri, (-180°< H0 <0°) aralığı içinde doğma (0°< H0 <180°)aralığı içinde batmayı temsil edecek şekilde seçilir. Bu her iki saat açısı değeri

q = H0 + a veya q = q0 + b + a

bağıntısı kullanılarak doğma ve batma anlarındaki Yerel yıldız zamanı elde edilebilir.

bu kadar bilgiye ulaşabildim...bu formülün açılımlarını bilen veya farklı bir hesaplama yöntemini bilen arkadaşlar var ise ve bu bilgilerini bizimle paylaşırlarsa çok sevinirim.


EKLEME:
İnternette araştırmalarım sonucu aşağıda Linkini verdiğim "C" ile yazılmış bir dökümana ulaştım fakat bana sadece gün doğumu ve batımı süreleri gerektiği için konuyu ayrıştırmak bir hayli zor gibi gözüküyor..Dökümanda "prayer time" yani "ibadet zamanı" süreleri hesaplanıyor...Konu hakkında bilgisi olan arkadaşlar var ise sadece formül benin işimi görecektir.

http://www.hemenpaylas.com/download/166...mer.c.html
Kayıt: 28 Ksm 2006
Mesajlar: 271

Offline
ta2mc
Tarih: 11 08 2008 18:32

Tam da buna benzer bir konu açıyordum. (Önce arama yapmanın faydası)


İnternette bulunabilen dokümanlar fazlasıyla teori ağırlıklı.

Konuyu açtığınız tarihe bakılırsa, epey ilerlemiş olmalısınız ve umarım paylaşırsınız..

Yoksa, Amerika'yı bir kez daha keşfetmeye devam. Smile


Selâmlar.
Başa dön
Kayıt: 04 Oca 2007
Mesajlar: 199
Konum: İzmir
Offline
fuzzy
Tarih: 11 08 2008 23:19

Bu çalışmalar astronomik röle için mi,merak ettimde.....
Başa dön
Kayıt: 28 Ksm 2006
Mesajlar: 271

Offline
ta2mc
Tarih: 13 08 2008 19:49

tesadüfen bir forumda, aşağıdaki kodu buldum.

henüz deneme fırsatım olmadı. umarım işe yarar.



Alıntı:
1-2 dk hassasiyetle çalışan güneş doğuş-batış algoritması mevcuttur. ilgilenen arkadaşların işine yaraması ümidi ile...

struct ctime { //güneş doğuş batış süreleri bu değişkenlerde tutulacaktır.
int sunraise_hour;
int sunraise_minute;
int sunset_hour;
int sunset_minute;
};

struct ctime rtime;
//***************************************************************************************************
bool ısleapyear(int32 nyear ) { // dört yılda bir şubat ayı 29 gün olur biliyorsunuz işte burada artık yılı hesaplıyoruz..
if (((nyear % 4 == 0) && (nyear % 100 != 0)) || (nyear % 400 == 0))
return (true);
else
return (false);
}
//***************************************************************************************************
float radtodeg(float anglerad) { // radyanı dereceye çeviriyoruz
return (180 * anglerad / 3.1415926535);
}
//***************************************************************************************************
float degtorad(float angledeg) { // dereceyi radyana çeviriyoruz
return (3.1415926535 * angledeg / 180);
}
//***************************************************************************************************
int32 calcdayofyear(int32 nmn, int32 ndy, bool bleapyear) { // yılın hangi günündeyiz bunu hesaplıyoruz

return ((int16)((275 * nmn) / 9) - (bleapyear ? 1 : 2) * (int16)((nmn + 9) / 12) + ndy - 30);
}
//***************************************************************************************************
int32 calcjulianday(int32 nmonth, int32 nday, bool bleapyear) { //referans olarak aldığımız yıla göre hangi gündeyiz bunu hesaplıyoruz.
//julian takviminin hesaplama mantığı bilinen bir yıl,ay,gün ve saatinde
//güneşin bilinen açısını hesaplıyoruz daha sonra bunu gelecek gün,ay ve yıllara göre ilerletiyoruz.
int i;
int32 njulianday=0;

ıf (bleapyear) {
for (i=0;i<(nmonth-1);i++) {
njulianday = njulianday + m_monthleap[i];
}
}
else {
for (i=0;i<(nmonth-1);i++) {
njulianday = njulianday + m_monthlist[i];
}
}

njulianday += nday;

return (njulianday);
}
//***************************************************************************************************
int dayofweek(int d, int m, int y) { //haftanın gününü hesaplıyoruz.
static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
int result;
y -= m < 3;
result = ( y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
result++;
return (result);
}
//***************************************************************************************************
//=========================================================================
#define radeg 180 / pı
#define degrad pı / 180
//=========================================================================

float x_atan2(float ys, float xs){
float theta;
if(xs != 0) {
theta = atan(ys / xs);
ıf(xs < 0){
theta = theta + pı;
}
}
else {
ıf(ys < 0) {
theta = 3 * pı / 2; //90
}
else {
theta = pı / 2; //270
}
}
return(theta);
}
//**********************************************************************************************************
float x_sqrt(float x){
//if(x > 0)
return(sqrt(x));
//else
// return(0);
}
//**********************************************************************************************************
float x_acos(float x) {
return (atan(-x / x_sqrt(-x * x + 1)) + 2 * atan(1));
}
//**********************************************************************************************************
float sind(float qqq) {
return(sin(qqq * degrad));
}
//**********************************************************************************************************
float cosd(float qqq) {
return(cos((qqq) * degrad));
}
//**********************************************************************************************************
float tand(float qqq){
return(tan((qqq) * degrad));
}
//**********************************************************************************************************
float atand(float qqq) {
return(radeg * atan(qqq));
}
//**********************************************************************************************************
float asind(float qqq) {
return(radeg * asin(qqq));
}
//**********************************************************************************************************
float acosd(float qqq) {
return(radeg * x_acos(qqq));
}
//**********************************************************************************************************
float atan2d(float qqq, float qqq1) {
return(radeg * x_atan2(qqq, qqq1));
}
//**********************************************************************************************************
float rev(float qqq){
float x;
x = (qqq - (int16)(qqq / 360.0) * 360.0);
ıf(x <= 0){ x += 360; }
return x;
}
//**********************************************************************************************************
void calcsuntimes(float stryear, float strmonth, float strday, float longitude, float latitude, float tz) {
// örnek olarak fonksiyonu şu şekilde çağıracaksınız;
// calcsuntimes(<yıl>,<ay>,<gün>,<ilgili yerin boylamı>,<ilgili yerin enlemi>,<yerel saat farkı>)
// calcsuntimes(2008,08,06,29,41,2) türkiye için istanbul'un koordinatlarını girdim.yerel saat farkı türkiye için +2 'dir.

float d, n, i, w, m, l, e, e1, a, xv, yv, v, xs, ys, xe, ecl, lonsun, ye, ze, ra, dec, h,r;
float gmst0, ut_sun_in_south, lha, hour_rise, hour_set, min_rise, min_set;
int32 njulianday=0;

njulianday = calcjulianday((int32)strmonth, (int32)strday, ısleapyear((int32)stryear));
dayofyear = njulianday;

// 1 ocak 2000 yılını referans alarak julian hesaplamasını yapıyoruz.
d = (367 * (stryear) - (int16)((7 * ((stryear) + (((strmonth) + 9) / 12))) / 4) + (int16)((275 * (strmonth)) / 9) + (strday) - 730530);

//güneşin orbital elementlerinin bulunduğu bölgeyi hesaplyoruz.
//(orbital-> elektronların bulunma olasılığının en fazla olduğu hacimsel bölgedir. güneşten gelen ışık yığınlarının hesabı için burada kullanılmıştır)
n = 0.0;
i = 0.0;
w = 282.9404 + 0.0000470935 * d;

a = 1.0;
e = 0.016709 - 0.000000001151 * d;

m = 356.047 + 0.9856002585 * d;
m = rev(m);

ecl = 23.4393 - 0.0000003563 * d;
l = w + m;
if((l < 0) || (l > 360)) {
l = rev(l);
}

//güneşin pozisyonunu hesaplıyoruz.
e1 = m + e * (180 / pı) * sind(m) * (1.0 + e * cosd(m));
xv = cosd(e1) - e;
yv = x_sqrt(1.0 - e * e) * sind(e1);
v = atan2d(yv, xv);
r = x_sqrt(xv * xv + yv * yv);
lonsun = v + w;
ıf((lonsun < 0) || (lonsun > 360)) {
lonsun = rev(lonsun);
}
xs = r * cosd(lonsun);
ys = r * sind(lonsun);
xe = xs;
ye = ys * cosd(ecl);
ze = ys * sind(ecl);
ra = atan2d(ye, xe);
dec = atan2d(ze, (x_sqrt((xe * xe) + (ye * ye))));
h = -0.833;

gmst0 = l + 180;
if((gmst0 < 0) || (gmst0 > 360)) {
gmst0 = rev(gmst0);
}

ut_sun_in_south = (ra - gmst0 - longitude) / 15.0;
ıf (ut_sun_in_south < 0) {
ut_sun_in_south = ut_sun_in_south + 24;
}

lha = sind(h) - (sind(latitude) * sind(dec)) / (cosd(latitude) * cosd(dec));
ıf ((lha > -1) && (lha < 1)) {
lha = acosd(lha) / 15;
}
else {
return;
}

hour_rise = (ut_sun_in_south - lha);
hour_set = (ut_sun_in_south + lha);

min_rise = (int)((hour_rise - (int)(hour_rise)) * 60);
min_set = (int)((hour_set - (int)(hour_set)) * 60);

hour_rise = ((int)(hour_rise) + tz);
hour_set = ((int)(hour_set) + tz);

rtime.sunraise_hour = hour_rise;
rtime.sunraise_minute = min_rise;
rtime.sunset_hour = hour_set;
rtime.sunset_minute = min_set;
}

Başa dön



Güneş'in Doğma ve Batma Zamanı Hesabı


Benzer Konular

- Orta gerilim ENH (600mt.), tek hat şeması, gerilim düşümü, akım hesabı, sehim

- Komple 3 katlı bir evin projesi(aydınlatma hesabı,klon şeması,gerilim düşümü hsb
- Yüksek Gerilimde Kısa Devre ve Kısa Devrelerin Üniter Hesabı
- Basit ortalama güç hesabı
- Alternatif akımda güç hesabı yapmak istiyorum.
- Trafo - generatör - iletim hattı hesabı
- A.G. E.N.H. İmar Planı Üzerindeki Güzergah Planı ve ŞebekeGerilim Düşümü Hesabı
- Direkt Olarak Yol verilebilecek En Büyük Motor Güçlerinin Hesabı
- güç-kablo hesabı

- Alışveriş Merkezi Paratoner Projesi ve Paratorner Hesabı

- Topraklama Direnci Hesabı- Basit Formatta

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Türkiye | Ads by Google Adsense | Design by Crazy Bat based
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72