İçeriğe geç
Tüm Yazılar

13 Nisan 2026

Ay Duvar Lambası: Gerçek Astronomiyle Çalışan Bir ESPHome Projesi

ESPHomeESP8266WS2812BGömülü Sistem
Ay Duvar Lambası: Gerçek Astronomiyle Çalışan Bir ESPHome Projesi

Ay Duvar Lambam sıradan bir "gece lambası" değil; gerçek astronomik hesaplarla çalışan, saatin ve tarihin dakikasına göre ayın gerçek fazını ve gökyüzündeki eğimini simüle eden bir ESPHome projesi. Bu yazıda donanımı, yazılım mimarisini ve arkasındaki hesaplamaları paylaşıyorum — WiFi bilgileri, API anahtarı ve tam konum gibi kişisel/güvenlik bilgilerini çıkararak.

Donanım

  • Wemos D1 Mini V4 (ESP8266) — sistemin beyni.
  • 220 adet WS2812B (NeoPixel) LED, ay yüzeyi rölyefinin arkasına dairesel olarak yerleştirilmiş.
  • LED veri hattı, ESP8266’nın normalde seri haberleşme için ayrılan RX pinine (GPIO3) bağlanıyor; bunu mümkün kılan da ESPHome’un "esp8266_dma" sürücüsü — 220 LED’i kesintisiz ve titremeden sürebilmek için DMA (Direct Memory Access) kullanıyor.

Güç Bağlantısı ve Ortak Toprak

  • Adaptörün +5V çıkışı hem LED şeridinin VCC’sine hem de Wemos’un 5V (Vin) pinine bağlanıyor — bu sayede lamba USB kablosuna ihtiyaç duymadan çalışıyor. Adaptör seçiminde Wemos’un kendi tükettiği ~80 mA da hesaba katılmalı.
  • Wemos’un 5V pini sadece giriş olarak kullanılıyor (adaptörden Wemos’a doğru); LED şeridini Wemos üzerinden beslemeye çalışmak karta zarar verir ve şerit düzgün çalışmaz.
  • Adaptörün eksi (GND) ucu hem LED şeridine hem de Wemos’un GND pinine bağlanmak zorunda — aksi halde sinyal referansı kaybolur ve LED’ler rastgele renklerde yanar.

Yazılım Mimarisi

Firmware tamamen ESPHome (YAML tabanlı) ile yazıldı. Cihaz, Home Assistant’a şifreli API bağlantısıyla entegre, OTA (kablosuz) güncelleme desteği var ve ana WiFi ağına bağlanamadığında kendi erişim noktasını (captive portal) açarak yeniden yapılandırılabiliyor — yani evden taşınsa ya da ağ değişse bile kurtarılabilir bir tasarım.

Güneşin Doğuşu ve Batışına Göre Otomatik Çalışma

ESPHome’un "sun" bileşeni, konuma göre güneşin ufuk açısını (elevation) gerçek zamanlı hesaplıyor. Güneş ufkun 10° altına indiğinde lamba otomatik olarak açılmaya, sabah ufkun -12°’sinde kapanmaya başlıyor; tam kapanma ise resmi gün doğumu/batımı eşiği olan -0.833°’de tamamlanıyor. Açılma ve kapanma ani değil: 60 adımlık bir "fade" script’i, parlaklığı yaklaşık bir saate yayarak yumuşak bir geçiş sağlıyor.

Gerçek Ay Fazı Hesabı

Ay fazı, bilinen bir yeni ay referans zaman damgası ile ortalama sinodik ay uzunluğunu (29.53058867 gün) kullanan basit ama doğru bir modüler aritmetikle hesaplanıyor. Sonuç hem yüzde (%) olarak bir sensöre, hem de "Yeni Ay", "Büyüyen Hilal", "İlk Çeyrek", "Büyüyen Mahmuz", "Dolunay", "Küçülen Mahmuz", "Son Çeyrek", "Küçülen Hilal" gibi 8 geleneksel faz ismiyle bir metin sensörüne yazılıyor.

  • %0–3 → Yeni Ay: hiç ışık yok, LED’ler kapalı.
  • %3–22 → Büyüyen Hilal: sağda ince bir ay şekli, ~5-50 LED yanıyor.
  • %22–28 → İlk Çeyrek: sağ yarım daire, ~113 LED yanıyor.
  • %28–47 → Büyüyen Mahmuz: sağ + merkez, ~150-220 LED yanıyor.
  • %47–53 → Dolunay: tüm 220 LED yanıyor.
  • %53–72 → Küçülen Mahmuz: sol + merkez, ~150-220 LED yanıyor.
  • %72–78 → Son Çeyrek: sol yarım daire, ~113 LED yanıyor.
  • %78–97 → Küçülen Hilal: solda ince bir ay şekli, ~5-50 LED yanıyor.
  • %97–100 → Yeni Ay: hiç ışık yok, LED’ler kapalı.

Paralaktik Eğim: İşin Zor Kısmı

Lambanın en özel tarafı, LED halkasının sadece ayın fazını değil, gökyüzündeki gerçek eğimini de yansıtması. Firmware; güneşin ekliptik boylamını, ayın yaklaşık konumunu, ikisinin de dik açıklık/deklinasyonunu, yerel yıldız zamanını (LST) ve saat açısını hesaplayarak "paralaktik açı" denen değeri buluyor — yani hilalin "gülen yüz" gibi mi yoksa dik mi durduğunu belirleyen açı. Bu açı, 220 LED’in her birinin konumuna uygulanarak aydınlık/karanlık sınırı (terminatör) yumuşak bir geçişle çiziliyor.

Aynı ay fazında (İlk Çeyrek, %25) mevsime ve saate göre değişen eğim açısı — teori, kış akşamı ve yaz gecesi karşılaştırması.
Aynı ay fazında (İlk Çeyrek, %25) mevsime ve saate göre değişen eğim açısı — teori, kış akşamı ve yaz gecesi karşılaştırması.
Elektronik ve LED halkası montaj aşamasında — çalışma tezgahında.
Elektronik ve LED halkası montaj aşamasında — çalışma tezgahında.

LED Şeridi Yönü ve Hizalama

  • LED 0, halkanın en üst noktasına (saat 12 yönü) yerleştiriliyor — tüm hesaplamalar bu referansa göre yapılıyor.
  • Şerit saat yönünde döşeniyor (12 → 3 → 6 → 9 → 12) ve veri girişi (DIN) bu referans noktasından başlıyor.
  • WS2812B şeridi yalnızca işaretli noktalardan (her 3 LED’de bir) kesilebiliyor — halka çapına göre kesim noktası buna göre planlanmalı.
  • Şerit fiziksel olarak tam saat 12’den başlamıyorsa, aşağıdaki "Kişiselleştirme" bölümünde anlattığım yazılımsal hizalama (offset) ayarı bunu telafi ediyor.

Kişiselleştirme

Home Assistant üzerinden; genel parlaklık, aydınlık/karanlık taraf renkleri (RGB), her iki tarafın parlaklık oranı ve LED halkasının fiziksel montaj açısını yazılımsal olarak telafi eden bir "hizalama" ayarı canlı olarak değiştirilebiliyor — bu sayede LED şeridi tam olarak istediğiniz noktadan başlamasa bile, yazılımdan döndürerek doğru hizaya getirebiliyorsunuz.

Bonus Efektler

Gerçekçi simülasyonun yanında, keyif için eklediğim başka LED efektleri de var: sabit Yarım Ay ve Hilal görünümleri, sade bir Gece Lambası modu, parıldayan Yıldızlı Gece, turuncu titreşen Güneş Tutulması, yeşil-mavi dalgalanan Kuzey Işıkları, kıpkırmızı Kanlı Ay, halka boyunca kayan bir nokta ile ISS Geçişi simülasyonu ve hatta kişisel bir espri olarak kırmızı-sarı yanıp sönen bir "gol kutlaması" efekti.

Ay Duvar Lambası, oda ortamında — gerçek ay fazına göre aydınlanıyor.
Ay Duvar Lambası, oda ortamında — gerçek ay fazına göre aydınlanıyor.

Sonuç

Bu proje bana gösterdi ki bir mikrodenetleyici ile gerçek astronomik hesaplamaları gerçek zamanlı yapmak mümkün — hem de bulut veya harici bir API’ye ihtiyaç duymadan, tamamen cihazın kendi üzerinde. Sırada, aynı mantıkla kurduğum otomatik çiçek sulama sistemim var; onu da yakında ayrı bir yazıyla paylaşacağım.