3 poin oleh GN⁺ 2025-03-30 | 1 komentar | Bagikan ke WhatsApp
  • Repositori timer fokus fisik berbasis ESP32 ini menerapkan alur kerja/istirahat gaya Pomodoro dengan menggunakan layar ePaper dan dial putar sebagai perangkat input
  • Kodenya tidak bisa langsung digunakan karena sebagian aset dan font dihapus, tetapi dapat dimodifikasi sesuai kebutuhan
  • Perangkat kerasnya terdiri dari ESP32, WaveShare 4.26 inci 800x480 e-Paper HAT, encoder putar KY-040, LED WS2812, konektor USB-C, casing cetak 3D, serta resistor dan kapasitor
  • ePaper tidak memiliki backlight sehingga mengurangi gangguan saat bekerja, dan model 4.26 inci mendukung partial refresh 0,3 detik agar terhindar dari kedipan hitam-putih saat penyegaran
  • Perangkat lunaknya menggunakan C++ dan framework Arduino, PlatformIO, serta library GxEPD2, dan menyediakan fitur seperti pemilihan preset, notifikasi LED, statistik istirahat, dan pengulangan istirahat panjang

Gambaran proyek

  • Repositori ini berisi kode dan materi desain untuk timer fokus berbasis ESP32
  • Input menggunakan dial putar, dan tampilan ditangani oleh layar ePaper
  • Kode dalam repositori ini belum siap pakai secara langsung karena sebagian aset dan font telah dihapus
    • Jika perlu, kode dapat dimodifikasi agar sesuai dengan kebutuhan sendiri
  • Hasil akhirnya juga bisa dilihat di MakerWorld

Komponen yang digunakan

  • Susunan komponen utama:
    • ESP32, contoh yang digunakan adalah AZDelivery ESP32 NodeMCU
    • WaveShare 4.26inch e-Paper display HAT, 800x480
      • Layar lain mungkin juga bisa bekerja, tetapi UI dirancang untuk resolusi ini
    • Encoder putar KY-040 dan tombol
    • 1 LED WS2812
      • Bisa diganti dengan LED RGB biasa
    • Konektor USB-C
      • Jika menggunakan konektor USB-C dua kabel, mungkin diperlukan kabel USB-A ke USB-C untuk catu daya
    • Casing cetak 3D
    • Resistor untuk LED, resistor pull-up untuk switch, dan kapasitor 0.1uF untuk meredam sinyal encoder putar
    • Sebagai komponen opsional, bisa menggunakan pemberat balancing ban dan kaki karet

Motivasi pembuatan dan tujuan desain

  • Proyek ini dimulai dengan tujuan membuat timer fokus untuk seorang teman
  • Pembuatnya suka mencoba teknik produktivitas, dan punya kebiasaan menghabiskan sekitar sebulan setiap tahun untuk proyek yang bisa membantu orang lain
  • Setelah membeli printer 3D BambuLab X1C, ia ingin memanfaatkannya, dan karena pernah menyelesaikan magang elektronika sebelum beralih ke rekayasa perangkat lunak, ia juga ingin membuat perangkat fisik
  • Ada tiga tujuan desain utama
    • Harus berupa perangkat fisik
    • Harus menyenangkan
    • Harus intuitif untuk digunakan
  • Sudah ada contoh seperti Focus Dial by Salim Benbouziyane, tetapi ia ingin membuatnya sendiri dari nol

Alasan pemilihan komponen

  • ESP32

    • Ini adalah percobaan kedua membuat sesuatu dengan mikrokontroler setelah sekian lama, dan karena sudah akrab dengan ESP32, lebih mudah untuk mulai lagi
    • Riset awal dilakukan untuk memastikan dukungan terhadap layar
  • Layar ePaper

    • Panduan pengkabelan layar ada di docs/display_wiring.md
    • Salah satu tujuan utama proyek adalah agar perangkat tidak mengganggu alur kerja, sehingga diinginkan layar tanpa backlight
    • Dibutuhkan layar yang cukup besar agar tetap terbaca saat diletakkan di meja
    • Setelah memesan dan mencoba beberapa layar ePaper WaveShare, dipilihlah model 4.26 inci
    • Resolusinya bagus
    • Ukurannya pas
    • Mendukung partial refresh, dengan waktu refresh 0,3 detik
    • Tidak ada kedipan hitam-putih yang mengganggu saat refresh
    • Awalnya ingin memakai layar hitam-putih-merah, tetapi model yang disukai memiliki waktu refresh 16 detik dan tidak mendukung partial refresh, sehingga tidak dipilih
    • Karena tidak ada backlight, layar sulit dibaca pada malam hari jika meja tidak cukup terang, dan ini dianggap sebagai “bukan bug, melainkan fitur”
  • Encoder putar

    • Diputuskan bahwa memakai dial sebagai perangkat input adalah pilihan yang paling alami
    • Input dial membuat desain menu menjadi lebih rumit, dan debouncing input harus ditangani dengan benar
    • Kapasitor 0.1uF ditambahkan pada pin CLK dan DT untuk meredam sinyal
  • LED

    • Pada versi iterasi awal belum ada rencana memakai LED
    • Layar tanpa backlight terasa terlalu halus saat waktu fokus berakhir
    • Beberapa alternatif dicoba sebagai sarana notifikasi
    • Buzzer tidak cocok karena mengejutkan pengguna dan memberi pengalaman yang kurang baik
    • Speaker menghasilkan banyak noise dan bunyi dengung pada konfigurasi yang dicoba
    • LED WS2812 mudah digunakan dan bisa dianimasikan dengan library NeoPixel
    • Keuntungan lain LED WS2812 adalah tidak memerlukan banyak pin output tambahan
    • Pada akhirnya, LED bekerja baik untuk menampilkan berbagai status, dan casing ditambah penutup kecil serta lapisan difusi agar LED terlihat lebih bagus

Casing dan desain fisik

  • Casing terdiri dari dua bagian: base dan tutup
  • Karena frame layar dirancang sebagai bagian dari base dan dicetak sekaligus, sempat muncul masalah sudut atas sedikit melengkung saat pencetakan
  • Penempatan dial di bagian depan dirasa kurang ideal
    • Karena hasil cetak dan komponen elektroniknya ringan, menekan switch pada dial bisa membuat seluruh perangkat terdorong ke belakang
    • Ini diatasi dengan menambahkan kaki karet dan pemberat balancing ban di bagian bawah

Susunan perangkat lunak

  • Perangkat lunak ditulis dalam C++ dan menggunakan framework Arduino
  • Pengelolaan proyek menggunakan PlatformIO
  • Layar sangat bergantung pada library GxEPD2
  • Kode dalam repositori ini agak kurang rapi karena masih ada copy-paste dan kode lama yang belum dibersihkan demi menyelesaikan proyek sesuai tenggat
  • Sebagian kode dibuat dengan AI, terutama Claude, agar proyek selesai tepat waktu
  • Karena ini adalah proyek untuk teman, ada juga easter egg dan elemen yang menyenangkan
    • Ada fitur yang menampilkan fakta acak di layar saat sedang fokus

Alur penggunaan perangkat

  • Saat perangkat dinyalakan, pengguna dapat mengubah pengaturan atau masuk ke mode pemilihan preset
  • Preset dipilih dari tiga opsi
  • Timer dimulai, dan saat waktunya habis LED akan berkedip serta pesan ditampilkan di layar
  • Pengguna bisa melanjutkan bekerja atau kemudian memulai waktu istirahat
  • Selama istirahat, statistik dapat dilihat
  • Secara default, setiap 4 kali putaran akan diberikan waktu istirahat yang lebih panjang

Pengembangan dan kustomisasi

  • Alat yang diperlukan untuk pengembangan:
    • PlatformIO
      • Menggunakan ekstensi VSCode
    • Python 3.13 atau lebih baru untuk regenerasi aset
  • Untuk menyiapkan gambar, ikon, dan font, perlu menjalankan skrip generate_assets.py
    • Mengubah ukuran gambar
    • Mengonversi ke format yang benar
    • Menghasilkan kode C++ untuk disertakan dalam proyek
  • Contoh eksekusinya sebagai berikut
uv sync

uv run scripts/generate_assets.py
  • Preset didefinisikan di src/main.cpp
  • Contoh preset bawaan adalah Emails, Coding, dan Focus
    • Emails: fokus 15 menit, istirahat 5 menit, istirahat panjang 15 menit
    • Coding: fokus 45 menit, istirahat 15 menit, istirahat panjang 30 menit, jumlah putaran 2
    • Focus: fokus 25 menit, istirahat 5 menit, istirahat panjang 20 menit

Pemetaan pin

  • Encoder putar KY-040:
    • CLK: 32
    • DT: 21
    • SW: 14
  • Layar ePaper hitam-putih WaveShare 4.26 inci:
    • BUSY: 4
    • RST: 16
    • DC: 17
    • CS: 5
    • CLK: 18
    • DIN: 23
  • LED WS2812:
    • DIN: 25

1 komentar

 
GN⁺ 2025-03-30
Opini Hacker News
  • Timer Pomodoro fisik: <https://upload.wikimedia.org/wikipedia/commons/3/34/Il_pomod...>
    • Jangan meremehkan kesenangan memakai benda indah yang dibuat sendiri. Kesenangan kecil seperti itu pada akhirnya menumpuk
      Setidaknya itu penting bagi saya. Saya membuat meteran listrik saya jadi “smart” dengan memasang perangkat berbasis ESP32 dan photoresistor untuk mengukur kedipan pada meteran listrik; memang kasar, tapi berfungsi dengan baik. Setiap kali ke garasi dan melihat perangkat kecil itu berkedip, rasanya menyenangkan dan membuat saya ingin terus mengerjakan proyek berikutnya. Itu memberi keyakinan bahwa saya bisa membuat sesuatu, bisa berhasil, dan bisa menjadi lebih baik dalam hidup
      Mungkin terdengar bodoh, tapi saya melihat proyek di tulisan asli juga seperti itu
    • Benar. Timer apa pun sudah cukup
      Kalau Anda memprogram display eInk dan microchip untuk memperbaiki kebiasaan menunda-nunda, sebaiknya hentikan proyek itu, beli timer fisik, lalu kerjakan hal yang harus dikerjakan
      Kalau sebelum bekerja Anda malah tergoda belanja untuk memilih timer, saya akan mengurangi pencarian Anda. Yang ini juga berfungsi baik: https://www.amazon.com/dp/B07TLC9SFZ Tentu saja timer apa pun juga oke
      Pergi dan kerjakan itu. Itu layak dilakukan
    • Tentu, itu cara yang lebih mudah untuk menyelesaikan masalah
      Tapi penulis jelas menulis bahwa ini adalah proyek untuk membuat sesuatu bagi teman sambil mencoba alat baru
      Proyek hacking yang menyenangkan tidak harus selalu memenuhi permintaan pasar nyata. Sekadar menyenangkan pun boleh
    • Membaca ulasan bintang 1 cukup lucu [0]. Masalahnya, timer mekanis zaman sekarang dibuat asal-asalan sehingga sulit dipercaya untuk dipakai. Sepertinya sekarang tidak ada lagi yang tahu cara membuat timer mekanis berkualitas tinggi
      [0] https://www.amazon.com/product-reviews/B07H59ZL1L/ref=acr_se...
    • Kalau Anda tahan dengan suara tik-taknya, tidak masalah ;)
      Secara pribadi, saya suka desain timer berbentuk cakram seperti ini: https://m.media-amazon.com/images/I/618WCXnyfXL.SL1500.jpg
  • Saya sangat suka proyek ini. UI-nya terasa menyenangkan dan dirancang dengan cermat. Sepertinya saya menemukan satu lagi aktivitas akhir pekan, atau mungkin beberapa minggu
    Kalau mencari proyek hackathon, ekosistem E-ink sudah cukup matang sehingga mudah diprogram, dan AI seperti Claude juga cukup memahami permukaan API-nya. Umumnya orang tidak tahu apa yang sedang mereka lihat, jadi perlu dijelaskan sebagai “layar seperti Kindle”, tetapi untuk ruang keluarga sepertinya mereka lebih menyukai layar e-ink daripada display dengan backlight. Karena jauh lebih tidak mengganggu
    Sebagai catatan, E-ink [0] dan Pomodoro [1] sama-sama topik yang cukup saya dalami
    [0] https://sambroner.com/posts/raspberry-pi-train
    [1] https://sambroner.com/posts/personal-analytics-2024
  • Proyek jenis “perangkat” seperti ini selalu menarik. Karena meski tujuannya sederhana, biasanya itulah yang paling sulit. Titik temu antara desain produk, rangkaian elektronik, dan kode adalah taman bermain yang luar biasa
    Saya sangat suka pilihan layarnya, dan juga bagus bahwa README menjelaskan pertimbangan tujuan dan kegunaannya dengan baik
    Saya punya beberapa pemikiran tentang desain bendanya sendiri. Saya juga merasa bagian ini sangat sulit, dan menghabiskan banyak waktu untuk iterasi perbaikan. Jika kenop dibuat lebar dan pipih di bagian atas perangkat, layar bisa ditempatkan di tengah, perangkat bisa dibuat lebih kecil, dan kemungkinan kotaknya terdorong saat diputar juga berkurang. Chamfer dan sudut membulat sangat meningkatkan kesan akhir. Perbedaan antara tepi tajam dan tepi membulat memang detail kecil, tetapi terasa cukup besar
    Jika menunya selalu tiga pilihan, bagaimana kalau mengganti kenop dengan tiga tombol di bagian atas seperti tombol “snooze” pada jam alarm? Interaksinya jadi lebih sedikit. Dengan filamen translusen, Anda juga bisa membuat komponen “light pipe” yang keren. Misalnya, jika kotak LED dibuat sebagai satu bagian utuh, tampilannya bisa terasa seperti panel instrumen era 80-an. Atau Anda bisa mencetak bingkai layar lalu menerangi bagian itu untuk desain yang lebih minimal
    Saya memang suka memikirkan hal-hal seperti ini, jadi tidak bisa menahan diri. Saya penasaran bagaimana kenopnya dirancang. Apakah dengan OpenSCAD? Knurling-nya bagus, dan terlihat seperti dibuat secara programatik
    • Pertanyaan bagus
      Kalau mendesain ulang kenopnya, sepertinya saya akan memindahkannya ke bagian atas. Jadwal keseluruhan proyek ini 4 minggu, dan saat muncul masalah bobot saya tidak cukup percaya diri untuk membuat ulang casing dan mencetak prototipe, tetapi jika dilakukan pasti hasilnya akan lebih baik
      Hampir semua tepi saya beri pembulatan/chamfer, dan casing final dicetak dengan fuzzy skin agar terasa lebih premium
      Kenop awalnya juga dipertimbangkan untuk mengubah durasi timer, jadi dial terasa tepat. Pada akhirnya tidak jadi seperti itu, sehingga untuk menu saat ini tiga tombol mungkin memberikan UX yang lebih baik. Perangkatnya juga akan lebih kecil
      Sekat awalnya dibuat untuk mencegah kebocoran cahaya, lalu kemudian saya cetak ulang dengan warna putih bersama film plastik difusi untuk sedikit meningkatkan difusi LED. Saya suka ide menaruh strip LED di tepi layar. Itu tidak terpikir oleh saya
      Biasanya saya lebih sering memakai Blender, jadi saya mengikuti tutorial membuat knurling di Onshape. Tool ini tidak terlalu suka geometri semacam itu sehingga tersendat saat dikerjakan, tetapi file Onshape yang ditautkan di README bebas untuk dilihat
  • Bagus bahwa ini tidak sekadar menargetkan sesi fokus 25 menit, melainkan tepat menyasar tiga use case, dan bahkan menyediakan statistik sebagai tambahan yang menarik
    Untuk pemula, akan bagus jika tulisan itu menyebutkan bahwa Pomodoro awalnya dinamai dari timer fisik dengan rotary encoder

https://medium.com/@thejinxes/ditch-the-tomato-timer-d8bbf01...
Sepertinya ini akan menjadi alternatif Pepe yang menarik kalau suatu hari nanti memakai layar e-ink merah seperti yang ditargetkan

  • Proyek yang keren. Saya juga menyarankan untuk melihat LVGL [0], library grafis untuk membuat UI embedded. Penggunaannya cukup sederhana dan terasa agak mirip HTML. Pengaturan komunikasi hardware memang sedikit lebih sulit, tetapi setelah selesai disiapkan, alur penulisan UI dan penanganan input jadi jauh lebih baik
    [0] - https://github.com/lvgl/lvgl
    • Oh, ini terlihat sangat keren. Saya sempat meluangkan waktu untuk riset di awal, tapi tidak melihat yang ini
  • Sangat menarik. Saya sudah lama memikirkan cara membuat timer Pomodoro fisik, atau sekadar perangkat tampilan, dan saya lebih suka bentuk layar melingkar yang tidak menampilkan sisa waktu secara persis. Bagi saya, itu mengganggu fokus dan memicu kecemasan
    Saya selama ini memakai aplikasi Visual Timer [0] di ponsel Android, dan secara umum itu bagus, tetapi tentu akan lebih baik kalau ponselnya bisa disingkirkan
    [0] https://play.google.com/store/apps/details?id=at.cwiesner.an...
    • Saya juga membeli LCD bulat 4 inci karena alasan itu, tetapi akhirnya beralih ke display e-paper. Saya membuatnya hanya menampilkan satuan menit agar tidak terlalu mengganggu, dan pada 1 menit terakhir hanya diperbarui tiap 10 detik
  • Konsep Pomodoro sendiri berasal dari timer dapur fisik, dan bentuknya, seperti yang bisa diduga, adalah tomat
    Menurut saya, UX terbaik untuk teknik Pomodoro bisa ditemukan pada timer dapur fisik itu sendiri
    • Secara fungsional, Focus Dial adalah “produk” yang jauh lebih baik daripada buatan saya, dan seperti yang saya tautkan di README, ia mempertahankan UX tersebut
      Namun untuk membuat hal seperti itu, saya harus berhadapan dengan keterbatasan pengetahuan dan keterampilan saya, dan saya juga ingin mencobanya dengan cara saya sendiri. Selain itu, pada akhirnya saya benar-benar menyukai layar e-paper itu
  • Saya tahu merakitnya adalah separuh dari kesenangannya, tetapi kalau yang dibutuhkan hanya perangkat ESP32 serbaguna dengan layar dan tombol, saya merekomendasikan M5Stack. Murah, bisa diprogram, dan banyak digunakan
  • Seseorang yang saya kenal dulu pernah mencoba menjalankan bisnis timer Pomodoro fisik: https://www.indiegogo.com/projects/timechi-your-smart-produc...
    Untuk orang yang menggunakannya di kantor, atau orang yang tidak ingin melihat layar untuk mengetahui sisa waktu, indikator LED di bagian atas perangkat sepertinya berguna. Bentuknya bisa berupa lightbar cantik yang menyala merah atau hijau, sehingga orang di seberang yang tidak bisa melihat layar pun tahu apakah boleh mengganggu sekarang. Kalau mau, itu juga bisa dibuat sebagai lightbar progres
  • Bagus sekali. Ini membuat saya ingin memindahkan alat produktivitas saya sendiri ke perangkat dunia nyata