Saya ingin memberi kejutan pada istri saya untuk Natal. Dia berambut merah, penggemar Harry Potter, dan juga seorang ibu; semua ini menginspirasi saya untuk membuat jam tangan Weasley. Saya mendapatkan ide tersebut pada bulan Februari, jadi saya memiliki waktu 10 bulan untuk mengembangkan dan membuat proyek.
Bagi orang yang tidak terbiasa dengan Harry Potter dan keluarga Weasley, saya akan menjelaskan bahwa keluarga penyihir Weasley memiliki jam ajaib yang tidak menunjukkan waktu, tetapi lokasi anggota keluarga, yang masing-masing memiliki panahnya sendiri. Berikut adalah kutipan dari Harry Potter and the Goblet of Fire (J. Rowling, 2000):
, . . , , – - . , . , , . «», «», «», « », «», «», «»; , «12», « ». «», , , «».
«, !» – , . , «» « », «» , , .
Butuh beberapa penelitian untuk mengubah jam ajaib menjadi jam nyata. Saya memiliki banyak pengalaman pemrograman, tetapi saya baru saja mulai menulis kode yang memindahkan sesuatu di dunia fisik. Pada tahun 2018, saya mulai menjalankan klub robotika FRC lokal kami dari FIRST , dan mengenal dunia motor dan pembuat enkode.
Diagram alir untuk memperbarui data pada jam tangan Weasley:
Pengguna di smartphone menjalankan aplikasi Life360 ->
Aplikasi melacak lokasi dan kecepatan pengguna ->
HA melacak pengguna dan menghitung status jam tangan. Mengirim pembaruan melalui protokol MQTT ke Raspberry Pi ->
Proses weasleyclockd khusus sedang berjalan di Raspberry Pi, yang memantau aliran MQTT dan mengontrol servo jam ->
Integrasi IoT yang cukup canggih tidak dapat dibedakan dari sihir.
Saya membagi proyek dengan jam menjadi beberapa subproyek yang sudah dapat dikerjakan, dan mulai dengan melacak lokasinya. Awalnya, saya menggunakan aplikasi seluler Find My Phone Apple, karena semua anggota keluarga dekat saya menggunakan iPhone. Tapi kemudian saya beralih ke Life360, karena API mereka ternyata lebih ramah pengguna untuk pihak ketiga, dan memungkinkan saya menambahkan kerabat istri saya yang tinggal bersama kami dan menggunakan ponsel Android. Bahkan sebelum mulai membangun dan memprogram, saya harus meyakinkan mereka semua untuk menginstal Life360 dan menggunakannya. Untungnya, semua orang setuju. Istri saya melakukannya untuk alasan keamanan, tidak pernah mengetahui rencana rahasia saya untuk membuat kejutan yang rumit untuk Natal.
Tantangan berikutnya adalah pembuatan jam tangan dengan banyak tangan. Saya dengan naif berasumsi bahwa hal-hal seperti itu ada, dan saya hanya perlu membeli sesuatu seperti itu dan memasukkan pengontrol motor saya sendiri di sana. Saya akhirnya menggunakan pipa kuningan konsentris dari toko hobi. Saya memasang roda gigi ke pipa dengan klem dari ServoCity.com.
Untuk memutar panah, saya memutuskan untuk menggunakan servo-winch dengan kemungkinan beberapa putaran. Saya membeli dari Adafruit dan menyolder papan ekspansi Raspberry Pi Servo HAT 16 saluran dan mulai membuat prototipe. Dan sekitar saat itu, saya diliputi kegembiraan ketika saya menyadari bahwa semuanya akan berhasil.
Lalu saya membutuhkan program yang mengubah data lokasi mentah menjadi status jam Weasley tertentu. Saya memutuskan untuk menjadikan sistem otomasi Home Assistant sebagai perantara antara data lokasi dari Life360 dan menghitung status jam tangan. Ini memperumit sistem secara keseluruhan, tetapi memungkinkan saya mengalihkan beban integrasi Life360 (dan potensi perubahan API di masa mendatang) ke pundak Asisten Rumah. Melacak hotspot WiFi spesifik orang memungkinkan saya menunjukkan lokasi mereka di rumah dengan lebih akurat. Misalnya, ketika ponsel seseorang terhubung ke router jalan raya, sistem mengetahui bahwa orang tersebut ada di "taman".
Panel Asisten Rumah
Setelah menulis aturan untuk Home Assistant, saya mendapatkan panel kontrol, tempat semua status jam Weasley terdaftar. Sekarang saya hanya perlu menggunakan data ini untuk menggerakkan jarum jam.
Asisten Rumah adalah proyek otomatisasi rumah open source dengan fokus pada penyimpanan dan manajemen lokal. Ini berbeda dengan kebanyakan sistem otomasi IoT yang membutuhkan koneksi internet dan menyimpan data Anda di cloud.
Mengingat bahwa status jam sudah dihitung pada Asisten Rumah itu sendiri, dan pengontrol Raspberry Pi dan servo berdiri di jam, saya perlu mencari cara untuk mentransfer data dari Asisten Rumah ke jam Weasley. Saya memilih protokol MQTTpopuler untuk penggunaan IoT dan didukung dengan baik di Home Assistant. Saya menambahkan otomatisasi ke Home Assistant untuk mengirim pesan MQTT setiap kali status jam tangan berubah. Di sisi pendengar , saya menulis daemon Python, weasleyclockd , yang mendengarkan aliran acara MQTT dan menggerakkan panah sesuai dengan itu.
Saya menambahkan beberapa informasi ke tampilan jam sehingga ada lebih banyak data daripada hanya "di rumah" atau "hilang". Di sektor "hilang" dan "dalam perjalanan", posisi panah dari nilai yang ditunjukkan sebanding dengan seberapa jauh orang tersebut dari rumah. Sekilas Anda dapat memahami apakah seseorang dekat dengan rumah, atau dia ada di toko terdekat, atau seratus kilometer jauhnya.
Untuk membuatnya lebih mudah dibaca, tanda panah diayunkan untuk menghindari kepadatan di sektor-sektor seperti "rumah". Sektor rumah dibagi menjadi dua bagian - rumah utama dan bangunan kedua, bengkel.
Dalam proyek ini, bagian penting ditempati oleh gambar dial. Saya menemukan poster jam Weasley yang indah karya Minalima . Penulis ini telah menggambar banyak gambar resmi untuk film Harry Potter.
Membuat jam tangan ini, saya mencoba membayangkan seperti apa kasus mereka seharusnya. Saya menyadari bahwa yang terbaik adalah menggunakan kembali jam antik. Atau Anda bisa membuat kasingnya sendiri, tapi saya tidak punya pengalaman bekerja sebagai pembuat lemari. Pada prinsipnya, ini mungkin, tetapi saya tahu bahwa hasil pekerjaan pertama saya tidak akan cocok untuk saya. Jam perapian yang saya lihat di toko antik lokal di Snohomish, Washington terlalu kecil untuk mekanisme jam dan dial. Dan kemudian keberuntungan tersenyum padaku.
Saya dan istri saya berkendara ke Pulau Whidbey dan berjalan-jalan ke Toko Barang Bekas yang Menghibur di Langley. Mereka menjual jam kakek, yang ukurannya, pada pandangan pertama, cocok untuk mekanisme dan dial. Namun, saya sama sekali belum siap untuk membelinya. Saya tidak membawa dimensi dial dan mesin jam. Dan bersama saya adalah istri saya, yang untuknya kejutan ini dimaksudkan. Jadi saya baru ingat saat ini, dan memutuskan bahwa saya pasti perlu membeli jam seperti itu
di Rumah, dipersenjatai dengan semua pengukuran, saya mulai menyisir eBay untuk mencari jam kakek. Ini bukanlah tugas yang mudah. Jam kerja itu mahal. Tidak ada yang mau mengirim mereka. Begitu saya menemukan jam tangan yang cocok, ternyata dijual secara self-pickup dari Florida.
Tiga bulan kemudian, saya dan istri saya memutuskan bersama seluruh keluarga untuk pergi ke Pulau Whidbey lagi. Kami makan malam di Langley lagi, dan saya segera berlari ke toko itu. Jam kakek masih ada di sana! Mereka bahkan didiskon menjadi $ 165. Kebetulan yang begitu beruntung tidak dapat diabaikan, jadi saya meminta istri saya untuk tidak bertanya, karena itu semua adalah bagian dari kejutan. Saya membeli jam tangan dan kami memasukkannya ke dalam van Honda Odyssey yang sudah penuh sesak. Sekarang dia sudah mengerti bahwa ada sesuatu yang direncanakan.
Ternyata menjadi tugas yang lebih sulit daripada kotak arloji untuk mencari cara membuat tangan. Awalnya saya ingin mencetaknya secara 3D atau memotongnya dari kuningan. Saya beruntung memiliki beberapa ahli saya sendiri tentang masalah ini di rumah. Melihat panah tercetak yang menakjubkan di Printable Props, Saya memutuskan untuk mencetak 3D. Putra kami Alex baru saja menyelesaikan kursus CAD Lanjutan sekolah menengahnya dan lulus ujian sertifikasi Solidworks dengan nilai yang sangat baik. Saya mengisinya dengan membuat panah dan hasilnya bagus. Ayah mertua saya Ron bertanggung jawab atas pencetakan 3D. Dia bekerja dengan printer 3D di tim robotika kami, dan bertindak sebagai ahli lokal kami di bidang tersebut. Untuk menyelesaikan panah, saya mengecatnya dengan cat metalik dan menambahkan hitam untuk kontras.
Perpindahan keluarga di siang hari
Jarak dari rumah
Saya benar-benar ingin membual tentang kemampuan jam tangan, tetapi di tengah isolasi diri, tidak ada yang pergi jauh dari rumah. Untuk mengatasi masalah ini, saya menulis program yang mengirimkan urutan pesan MQTT yang direkam. Saya dapat mensimulasikan kejadian dan membuat jarum jam bergerak seolah-olah orang-orang sedang mengemudi bolak-balik.
Jam yang sudah selesai
Taruh di dapur
Pada akhirnya, saya berhasil merahasiakan keseluruhan proyek. Tapi saya tidak punya waktu bersamanya untuk Natal. Oleh karena itu, selama liburan, saya harus mendemonstrasikan jam dalam keadaan statis dan tidak berfungsi. Saya berhasil membuat cat bagian luar, dan istri saya terkejut dan senang.
Dua bulan lagi dihabiskan untuk pekerjaan penyelesaian akhir - mencetak komponen pada printer 3D, menginstal mekanisme, mencetak dan mengecat panah, dan menyesuaikan perangkat lunak.
Proyek ini tampaknya telah selesai, tetapi saya ingin membuat beberapa perbaikan lagi. Saya berencana merakit jam dengan enam atau tujuh tangan dan mengotomatiskan pemukulan jam itu.
Untuk memparafrasekan Arthur Clarke: "Setiap integrasi IoT yang cukup maju tidak dapat dibedakan dari sihir."
Pada jam tangan Weasley generasi kedua, saya ingin mengubah yang berikut ini:
- Desain dan cetak roda gigi yang menempel langsung pada batang kuningan.
- Gunakan motor dengan encoder.
- Potong panah dari kuningan untuk memberi ruang bagi lebih banyak anak panah.
Tautan ke log pengembangan, foto, dan program saya:
- Proyek Jam Weasley di Github
- weasleyclockd , program kontrol.
- Proyek Jam Menyerang Weasley .
- Perakitan album foto .
- Bangun log .
- Diskusi di HackerNews .