- 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:
- Layar ePaper hitam-putih WaveShare 4.26 inci:
- BUSY: 4
- RST: 16
- DC: 17
- CS: 5
- CLK: 18
- DIN: 23
- LED WS2812:
1 komentar
Opini Hacker News
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
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
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
[0] https://www.amazon.com/product-reviews/B07H59ZL1L/ref=acr_se...
Secara pribadi, saya suka desain timer berbentuk cakram seperti ini: https://m.media-amazon.com/images/I/618WCXnyfXL.SL1500.jpg
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
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
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
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
[0] - https://github.com/lvgl/lvgl
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...
Menurut saya, UX terbaik untuk teknik Pomodoro bisa ditemukan pada timer dapur fisik itu sendiri
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
Pembaruan: ada di sini https://github.com/robertolupi/augmented-awareness/tree/main...
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