3 puan yazan GN⁺ 2025-03-30 | 1 yorum | WhatsApp'ta paylaş
  • ESP32 tabanlı fiziksel odaklanma zamanlayıcısı deposu; ePaper ekranı ve giriş aygıtı olarak döner kadranı kullanarak Pomodoro tarzı çalışma–mola akışını uygular
  • Kodda bazı varlıklar ve fontlar kaldırıldığı için doğrudan kullanılabilir durumda değildir, ancak gerekirse kendi kullanımınıza göre düzenlenebilir
  • Donanım ESP32, WaveShare 4.26 inç 800x480 e-Paper HAT, KY-040 döner enkoder, WS2812 LED, USB-C konektörü, 3D baskı kasa, dirençler ve kapasitörlerden oluşur
  • ePaper’ın arka aydınlatması olmadığı için çalışma sırasında dikkat dağıtmayı azaltır; 4.26 inç model 0,3 saniyelik kısmi yenilemeyi desteklediğinden yenileme sırasında siyah-beyaz yanıp sönmeyi önleyebilir
  • Yazılım C++ ve Arduino framework’ü, PlatformIO ve GxEPD2 kütüphanesini kullanır; ön ayar seçimi, LED bildirimi, mola istatistikleri ve uzun mola tekrarı gibi özellikler sunar

Proje özeti

  • Bu depo, ESP32 tabanlı bir odaklanma zamanlayıcısı için kod ve tasarım materyalleri içerir
  • Giriş için döner kadran kullanılır, gösterim ise ePaper ekranla yapılır
  • Depodaki kod, bazı varlıklar ve fontlar kaldırıldığı için hemen kullanılabilir durumda değildir
    • Gerekirse kodu kendi ihtiyaçlarınıza göre değiştirip kullanabilirsiniz
  • Bitmiş ürünü MakerWorld’de de görebilirsiniz

Kullanılan parçalar

  • Başlıca parça bileşimi:
    • ESP32; örnek olarak AZDelivery ESP32 NodeMCU kullanılmıştır
    • WaveShare 4.26inch e-Paper display HAT, 800x480
      • Başka ekranlar da çalışabilir, ancak arayüz bu çözünürlüğe göre tasarlanmıştır
    • KY-040 döner enkoder ve buton
    • 1 adet WS2812 LED
      • Basit bir RGB LED ile değiştirilebilir
    • USB-C konektörü
      • 2 telli USB-C konektörü kullanırsanız güç sağlamak için USB-A’dan USB-C’ye kablo gerekebilir
    • 3D baskı kasa
    • LED için direnç, anahtar için pull-up direnci, döner enkoder sinyalini yumuşatmak için 0.1uF kapasitör
    • İsteğe bağlı parçalar olarak lastik balans ağırlığı ve kauçuk ayaklar kullanılabilir

Yapım motivasyonu ve tasarım hedefleri

  • Proje, bir arkadaş için odaklanma zamanlayıcısı yapma amacıyla başladı
  • Yapımcı üretkenlik tekniklerini denemeyi seviyor ve her yıl yaklaşık bir kez, başkalarına faydası olacak bir projeye yaklaşık bir ay ayırma alışkanlığına sahip
  • BambuLab X1C 3D yazıcı aldıktan sonra bunu kullanmak istedi; elektronik çıraklığını tamamladıktan sonra yazılım mühendisliğine geçiş yapma deneyimi nedeniyle fiziksel bir cihaz yapmak istedi
  • Tasarım hedefleri üç taneydi
    • Fiziksel bir cihaz olması
    • Eğlenceli olması
    • Sezgisel şekilde kullanılabilmesi
  • Focus Dial by Salim Benbouziyane gibi mevcut projeler vardı, ancak en baştan kendisi yapmak istedi

Parça seçme nedenleri

  • ESP32

    • Uzun bir aradan sonra mikrodenetleyiciyle bir şey yapmaya yönelik ikinci denemesiydi ve ESP32’ye aşina olduğu için yeniden başlamak kolaydı
    • Ekran desteği olup olmadığını kontrol etmek için ön araştırma yaptı
  • ePaper ekran

    • Ekran kablolama kılavuzu docs/display_wiring.md içinde yer alır
    • Projenin ana hedeflerinden biri cihazın çalışma akışını bölmemesiydi; bunun için arka aydınlatması olmayan bir ekran istedi
    • Masanın üstünde dururken okunabilecek kadar büyük bir ekrana ihtiyaç vardı
    • Birkaç WaveShare ePaper ekran sipariş edip denedikten sonra 4.26 inç modeli seçti
    • Çözünürlüğü iyi
    • Boyutu uygun
    • Kısmi yenilemeyi destekler ve yenileme süresi 0,3 saniyedir
    • Yenileme sırasında rahatsız edici siyah-beyaz yanıp sönme yoktur
    • Başta siyah-beyaz-kırmızı bir ekran kullanmak istedi, ancak beğendiği modelin yenileme süresi 16 saniyeydi ve kısmi yenilemeyi desteklemediği için elendi
    • Arka aydınlatması olmadığı için masa yeterince aydınlık değilse gece ekranı okumak zordur; bunu “hata değil özellik” olarak görüyor
  • Döner enkoder

    • Giriş aygıtı olarak kadran kullanmanın en doğal seçenek olduğuna karar verdi
    • Kadran girişi menü tasarımını daha karmaşık hale getirir ve giriş debounce işleminin doğru ele alınmasını gerektirir
    • CLK ve DT pinlerine sinyali yumuşatmak için 0.1uF kapasitör eklendi
  • LED

    • İlk yineleme sürümlerinde LED planı yoktu
    • Arka aydınlatmasız ekran, odaklanma süresi bittiğinde fazla belirsiz kalabilirdi
    • Bildirim aracı olarak çeşitli alternatifler denendi
    • Buzzer kullanıcıyı irkilttiği için iyi bir deneyim değildi
    • Hoparlör, denenen yapılandırmada çok fazla gürültü ve uğultu üretti
    • WS2812 LED, NeoPixel kütüphanesiyle animasyon yapılmasına izin verir ve kullanımı kolaydı
    • WS2812 LED’in çok sayıda ek çıkış pini gerektirmemesi gibi bir avantajı vardı
    • Sonuçta LED çeşitli durumları göstermek için iyi çalıştı; kasaya LED’in daha hoş görünmesi için küçük bir siper ve difüzyon katmanı eklendi

Kasa ve fiziksel tasarım

  • Kasa taban ve kapak olmak üzere iki parçadan oluşur
  • Ekran çerçevesini tabanın bir parçası olarak tek seferde basma tasarımı nedeniyle, baskı sırasında üst köşelerin biraz eğilmesi sorunu yaşandı
  • Kadranı ön tarafa koyma tercihi pişmanlık duyulan bir noktaydı
    • Baskı parça ve elektronikler hafif olduğundan, kadran düğmesine basıldığında tüm cihaz geriye itilebiliyor
    • Altına kauçuk ayaklar ve lastik balans ağırlıkları eklenerek çözüldü

Yazılım yapısı

  • Yazılım C++ ile yazıldı ve Arduino framework’ü kullanır
  • Proje yönetimi için PlatformIO kullanılır
  • Ekran büyük ölçüde GxEPD2 kütüphanesine dayanır
  • Depodaki kod, teslim tarihine yetiştirmek için kopyala-yapıştır ve eski kodun temizlenmemiş kısımlarını içerdiğinden biraz dağınık durumdadır
  • Bazı kodlar proje teslimine yetişmek için yapay zeka ile, çoğunlukla Claude kullanılarak üretildi
  • Bir arkadaş için yapılan proje olduğu için easter egg’ler ve eğlenceli unsurlar da içerir
    • Odaklanma sırasında ekranda rastgele bilgiler gösteren bir özellik bulunur

Cihaz kullanım akışı

  • Cihaz başlatıldığında ayarlar değiştirilebilir veya ön ayar seçme moduna girilebilir
  • Üç ön ayardan biri seçilir
  • Zamanlayıcı başlar; süre bittiğinde LED yanıp söner ve ekranda bir mesaj gösterilir
  • Kullanıcı çalışmaya devam edebilir veya ardından molayı başlatabilir
  • Mola sırasında istatistikler görülebilir
  • Varsayılan değerlere göre her 4 turda bir daha uzun mola süresi verilir

Geliştirme ve özelleştirme

  • Geliştirme için gereken araçlar:
    • PlatformIO
      • VSCode eklentisi kullanılır
    • Varlıkları yeniden oluşturmak için Python 3.13 veya üzeri
  • Görselleri, ikonları ve fontları hazırlamak için generate_assets.py betiği çalıştırılmalıdır
    • Görsel boyutlandırma
    • Doğru biçime dönüştürme
    • Projeye eklenecek C++ kodunu üretme
  • Çalıştırma örneği şöyledir
uv sync

uv run scripts/generate_assets.py
  • Ön ayarlar src/main.cpp içinde tanımlıdır
  • Varsayılan ön ayar örnekleri Emails, Coding, Focus’tur
    • Emails: 15 dakika odaklanma, 5 dakika mola, 15 dakika uzun mola
    • Coding: 45 dakika odaklanma, 15 dakika mola, 30 dakika uzun mola, tekrar sayısı 2
    • Focus: 25 dakika odaklanma, 5 dakika mola, 20 dakika uzun mola

Pin eşlemesi

  • KY-040 döner enkoder:
    • CLK: 32
    • DT: 21
    • SW: 14
  • WaveShare 4.26 inç siyah-beyaz ePaper ekran:
    • BUSY: 4
    • RST: 16
    • DC: 17
    • CS: 5
    • CLK: 18
    • DIN: 23
  • WS2812 LED:
    • DIN: 25

1 yorum

 
GN⁺ 2025-03-30
Hacker News yorumları
  • Fiziksel bir Pomodoro zamanlayıcısı: <https://upload.wikimedia.org/wikipedia/commons/3/34/Il_pomod...>
    • Güzel, kendi yaptığın bir şeyi kullanmanın verdiği keyfi küçümsememek gerek. Böyle küçük keyifler eninde sonunda birikir
      En azından benim için önemli. ESP32 ve fotodirençle elektrik sayacının yanıp sönmelerini ölçen bir cihaz takıp elektrik sayacımı “akıllı” hale getirdim; kaba saba ama iyi çalışıyor. Garaja her gittiğimde küçük cihazın yanıp söndüğünü görmek hoşuma gidiyor ve bir sonraki projeye devam etmek istiyorum. Bir şeyler yapabileceğime, başarılı olabileceğime ve hayatta daha iyiye gidebileceğime dair güven veriyor
      Aptalca gelebilir ama özgün yazıdaki projeyi de böyle görüyorum
    • Doğru. Herhangi bir zamanlayıcı yeterli
      Erteleme alışkanlığını düzeltmek için eInk ekran ve mikroçip programlıyorsan, o projeyi durdurup fiziksel bir zamanlayıcı satın alarak yapman gereken işi yapman gerekir
      Çalışmaya başlamadan önce zamanlayıcı seçmek için alışverişe dalmak istiyorsan aramayı daraltayım. Bu da iyi çalışıyor: https://www.amazon.com/dp/B07TLC9SFZ Tabii herhangi bir zamanlayıcı da olur
      Git o işi yap. Buna değer
    • Elbette sorunu çözmenin daha kolay yolu bu
      Ama özgün yazıda bunun bir arkadaş için bir şey yaparken yeni araçları deneme projesi olduğu açıkça yazıyor
      Eğlenceli bir hacking projesinin gerçek bir pazar talebini karşılaması şart değil. Sadece eğlenceli olması da yeter
    • 1 yıldızlı yorumları okumak komik [0]. Sorun şu ki günümüz mekanik zamanlayıcıları o kadar kalitesiz ki güvenip kullanmak zor. Artık yüksek kaliteli mekanik zamanlayıcı yapmayı kimse bilmiyor gibi
      [0] https://www.amazon.com/product-reviews/B07H59ZL1L/ref=acr_se...
    • Tik tak sesine katlanabiliyorsan sorun yok ;)
      Şahsen bu tür disk biçimli zamanlayıcı tasarımını seviyorum: https://m.media-amazon.com/images/I/618WCXnyfXL.SL1500.jpg
  • Bu projeyi gerçekten sevdim. UI keyifli ve özenle tasarlanmış hissettiriyor. Bir hafta sonu, hatta belki birkaç haftalık bir uğraş daha bulmuş gibiyim
    Hackathon projesi arıyorsanız, E-ink ekosistemi oldukça olgun; programlaması kolay ve Claude gibi yapay zekalar da API yüzeyini iyi kavrıyor. Çoğu zaman insanlar neye baktığını bilmediği için “Kindle benzeri ekran” diye açıklamak gerekiyor ama oturma odasında arkadan aydınlatmalı ekranlara göre e-ink ekranları daha çok tercih ediyorlar gibi. Çünkü çok daha az göze batıyor
    Bu arada E-ink [0] ve Pomodoro [1], ikisi de benim epey derinlemesine ilgilendiğim konular
    [0] https://sambroner.com/posts/raspberry-pi-train
    [1] https://sambroner.com/posts/personal-analytics-2024
  • Bu tür “cihaz” projeleri her zaman ilginç. Hedef basit olsa bile genelde en zoru oluyor. Ürün tasarımı, elektronik devreler ve kodun kesiştiği nokta harika bir oyun alanı
    Ekran seçimini çok beğendim; amacın ve kullanılabilirliğin README’de iyi açıklanmış olması da hoş
    Nesnenin kendi tasarımı hakkında birkaç düşüncem var. Ben de bu kısmı çok zor buluyorum ve yinelemeli iyileştirmeye çok zaman harcıyorum. Düğmeyi cihazın üstüne geniş ve yassı şekilde koymak, ekranı ortaya alıp cihazı daha küçük yapmayı sağlayabilir; çevirirken kutunun kayma ihtimalini de azaltır. Pah kırma ve yuvarlatma, bitmişlik hissini ciddi biçimde artırıyor. Keskin köşelerle yuvarlak köşeler arasındaki fark küçük bir detay olsa da oldukça büyük hissediliyor
    Menü her zaman üç seçenekliyse, düğme yerine üstte çalar saatlerdeki “snooze” gibi üç buton koymaya ne dersin diye düşündüm. Daha az işlem gerektirir. Yarı saydam filament kullanırsan güzel “ışık kılavuzu” parçaları da yapabilirsin. Örneğin LED kutusunu tek parça yaparsan 80’ler gösterge paneli havası verebilir. Ya da ekran çerçevesini basıp o kısmı aydınlatırsan daha minimalist bir tasarım da olabilir
    Böyle şeyleri düşünmeyi seviyorum, elimde değil. Düğmeyi nasıl tasarladığını merak ediyorum. OpenSCAD miydi? Knurling güzel olmuş ve programatik olarak yapılmış gibi görünüyor
    • Güzel sorular
      Düğmeyi yeniden tasarlasam muhtemelen üste taşırdım. Bu projenin toplam takvimi 4 haftaydı; ağırlık sorunu çıktığında kasayı yeniden yapıp prototip basacak kadar kendime güvenmedim ama öyle yapsam kesinlikle daha iyi olurdu
      Neredeyse tüm kenarlara yuvarlatma/pah koydum ve son kasayı daha kaliteli hissettirsin diye fuzzy skin ile bastım
      Düğme başlangıçta zamanlayıcı süresini değiştirmek için de düşünülmüştü, bu yüzden kadran doğru gelmişti. Sonuçta öyle olmadı; mevcut menü için üç buton daha iyi bir UX olabilir. Cihaz da küçülür
      Siperlik başta ışık sızıntısını engellemek için başladı; sonra difüzör plastik filmle birlikte LED yayılımını biraz artırmak için beyaz olarak yeniden bastım. Ekran kenarına LED şerit koyma fikrini sevdim. Aklıma gelmemişti
      Genelde Blender’ı daha çok kullandığım için Onshape’te knurling yapma eğitimini takip ettim. Bu araç o kadar geometriyi pek sevmiyor, çalışırken kasıyor ama README’de bağlantısı verilen Onshape dosyasına istediğin gibi bakabilirsin
  • Sadece basit bir 25 dakikalık odak süresi değil, üç kullanım senaryosunu tam hedeflemesi ve istatistikler de sunması güzel bir ek özellik
    Yeni başlayanlar için yazıya Pomodoro’nun adını aslında döner enkoderli fiziksel bir zamanlayıcıdan aldığını eklemek iyi olurdu

https://medium.com/@thejinxes/ditch-the-tomato-timer-d8bbf01...
Bir gün hedeflediği gibi kırmızı bir e-ink ekran kullanırsa Pepe’ye eğlenceli bir alternatif olabilir gibi duruyor

  • Harika bir proje. Gömülü UI oluşturmak için kullanılan grafik kütüphanesi LVGL’ye [0] de bakmanı öneririm. Kullanımı oldukça basit ve HTML’e biraz benzer bir hissi var. Donanım iletişimini ayarlamak biraz daha zor, ama bir kez ayarladıktan sonra UI yazma ve girdi işleme akışı çok daha iyi hale geliyor
    [0] - https://github.com/lvgl/lvgl
    • Ah, çok iyi görünüyor. Başlarken araştırmaya biraz zaman harcamıştım ama bunu görmemişim
  • Çok ilginç. Fiziksel Pomodoro zamanlayıcısı ya da yalnızca bir gösterge cihazını nasıl yapacağımı düşünüyordum; kalan tam sürenin görünmediği, dairesel ekranlı bir biçimi tercih ederim. Benim için bu dikkat dağıtıcı ve kaygı uyandırıcı oluyor
    Android telefonda Visual Timer uygulamasını [0] kullanıyordum ve genel olarak harikaydı; ama telefonu ortadan kaldırabilsem elbette daha iyi olurdu
    [0] https://play.google.com/store/apps/details?id=at.cwiesner.an...
    • Ben de aynı nedenle 4 inçlik dairesel bir LCD aldım, ama sonunda e-paper ekrana geçtim. Çok dikkat dağıtıcı olmaması için yalnızca dakikaları gösteriyorum; son 1 dakikada da yalnızca 10 saniyelik aralıklarla güncellenmesini sağladım
  • Pomodoro kavramının kendisi fiziksel bir mutfak zamanlayıcısından çıktı ve şekli de tahmin edileceği gibi domatesti
    Bana göre Pomodoro tekniği için en iyi UX tam da o fiziksel mutfak zamanlayıcısında bulunuyor
    • İşlevsel olarak Focus Dial, benim yaptığımdan çok daha iyi bir “ürün” ve README’de de bağlantısını verdiğim gibi tam olarak o UX’i koruyor
      Ancak öyle bir şey yapmak için bilgi ve becerilerimin sınırlarıyla yüzleşmem gerekiyordu; bir yandan da bunu kendi yöntemimle denemek istedim. Üstelik sonunda o e-paper ekranı gerçekten çok sevdim
  • Montajın eğlencenin yarısı olduğunu biliyorum, ama ekranı ve düğmeleri olan genel amaçlı bir ESP32 cihazı gerekiyorsa M5Stack’i öneririm. Ucuz, programlanabilir ve yaygın kullanılıyor
  • Tanıdığım biri bir ara fiziksel Pomodoro zamanlayıcısı üzerinden bir iş kurmayı denemişti: https://www.indiegogo.com/projects/timechi-your-smart-produc...
    Ofiste kullananlar veya kalan süreye bakmak için ekrana bakmak istemeyenler için cihazın üstündeki LED gösterge yararlı olabilir. Güzel bir ışık çubuğu biçiminde kırmızı ya da yeşil yanar; böylece ekranı göremeyen karşı taraftaki kişi de o anda rahatsız edip edemeyeceğini anlayabilir. İstersen bunu ilerleme gösteren bir ışık çubuğu olarak da yapabilirsin
  • Gerçekten güzel. Kendi üretkenlik araçlarımı da fiziksel bir cihaza taşımak istiyorum diye düşündürüyor