Daftar Isi:

Pipboy Dibangun Dari Scrap: 26 Langkah (dengan Gambar)
Pipboy Dibangun Dari Scrap: 26 Langkah (dengan Gambar)

Video: Pipboy Dibangun Dari Scrap: 26 Langkah (dengan Gambar)

Video: Pipboy Dibangun Dari Scrap: 26 Langkah (dengan Gambar)
Video: Fallout 76 Dude where's my camp "Tips and Tricks" part 1 2024, Juli
Anonim
Image
Image
Membangun Hati Pipboy
Membangun Hati Pipboy

Ini adalah Pipboy saya yang bekerja, dibuat dari sampah acak dari garasi dan penggerebekan stok komponen elektronik saya. Saya menemukan ini sebagai bangunan yang menantang dan saya membutuhkan beberapa bulan kerja, jadi saya tidak akan mengkategorikan ini sebagai proyek pemula yang lengkap. Keterampilan yang dibutuhkan meliputi pekerjaan plastik dan kayu, elektronik dan pengkodean. Tubuh dibangun dari berbagai potongan plastik bekas dipotong dan dilas bersama-sama. Saya menggunakan Raspberry Pi 0 sebagai mikrokontroler, dengan tampilan header dipasang ke bagian dari pin GPIO. Pin yang tersisa digunakan untuk menggerakkan LED dan menghubungkan tombol/kontrol. Saya menulis antarmuka pengguna gaya "Pipboy" dengan beberapa layar demo dengan Python untuk menyelesaikan proyek.

Tujuan saya untuk proyek ini adalah:

  • Harus berfungsi - yaitu harus benar-benar memiliki tampilan yang berfungsi
  • Saya ingin memiliki "tombol" untuk memilih layar yang berbeda karena itu selalu menonjol bagi saya sebagai bagian ikonik dari UI di Fallout
  • Seluruh bangunan harus diselesaikan dengan menggunakan barang-barang yang sudah saya miliki di garasi atau di kantor saya (ini tidak sepenuhnya tercapai, tetapi saya mendekati - lebih dari 90% dari ini ditemukan barang-barang atau barang-barang yang sudah saya letakkan di sekitar)
  • Harus bisa dipakai

Satu tujuan yang tidak saya miliki adalah menjadikannya replika yang tepat dari salah satu model dalam game - saya lebih suka membuat barang "dalam gaya" sesuatu, karena memberi saya ruang untuk mengadaptasi sampah acak yang saya temukan, dan biarkan saya menjadi sedikit lebih kreatif. Akhirnya, ya, saya tahu Anda dapat membeli ini, tetapi bukan itu intinya;)

Perlengkapan

Perlengkapan

  • Pipa bor lebar (seperti sepotong pipa pembuangan)
  • Memo plastik (baik untuk membuat tubuh dan untuk tujuan dekoratif)
  • Wadah kecil
  • Keset lantai busa
  • Raspberry Pi
  • Layar 3,5"
  • Encoder Putar KY040
  • 3x LED
  • 2x Tekan tombol
  • Bank Daya
  • Pengkabelan
  • Sekrup, lem, cat, pengisi dll

Peralatan

  • Dremel
  • Multi-alat dengan pemotong dan lampiran pengamplasan
  • Mengebor
  • File
  • Solder Besi
  • Pistol lem panas
  • Pengemudi sekrup
  • Pisau tajam
  • Gergaji

Langkah 1: Membangun Hati Pipboy

Membangun Hati Pipboy
Membangun Hati Pipboy

Hal pertama yang perlu saya lakukan adalah memastikan saya bisa mendapatkan tampilan dan pengontrol mikro dalam faktor bentuk yang dapat saya gunakan. Saya kebetulan memiliki layar 3,5 yang muncul sebagai HAT ke pin GPIO dari Raspberry PI, jadi saya memutuskan untuk menggunakan ini. Saya memasangkannya dengan Raspberry Pi 0 dan memastikannya berfungsi dengan baik, ada beberapa langkah untuk membuat Linux mengenali tampilan yang harus Anda jalankan.

Seperti yang Anda lihat pada gambar kedua, saya menambahkan platform karton/busa kecil yang saya rekatkan ke kasing untuk membantu mendukung tampilan. Saya melakukan ini karena saya tahu saya akan banyak menangani bagian ini dan tidak ingin mematahkan pin atau tampilan karena kurangnya dukungan. Akhirnya ini diganti, tetapi itu adalah sedikit perlindungan tambahan yang bagus selama proses pembuatan.

Ini juga perlu diperhatikan pada titik ini, bahwa nanti dalam build saya mengalami masalah kinerja dengan pengaturan ini - terutama kecepatan refresh pada antarmuka antara Pi dan layar, saya akan membahas ini lebih lanjut nanti di build tetapi jika saya melakukan ini lagi saya mungkin mempertimbangkan perangkat keras yang berbeda di sini.

Berikut adalah beberapa tautan yang berguna untuk ini:

www.raspberrypi.org/forums/viewtopic.php?t…

www.raspberrypi.org/forums/viewtopic.php?t…

www.raspberrypi.org/forums/viewtopic.php?f…

learn.sparkfun.com/tutorials/serial-periph…

Saya juga akan memasukkan di github yang terkait dengan ini beberapa catatan untuk apa yang sebenarnya saya lakukan untuk membuatnya berfungsi (walaupun dari pembacaan topik saya ada banyak variabilitas dalam cara kerjanya untuk contoh/driver tertentu, jadi jarak tempuh Anda mungkin bervariasi).

Langkah 2: Prototipe Karton

Prototipe Karton
Prototipe Karton
Prototipe Karton
Prototipe Karton
Prototipe Karton
Prototipe Karton

Saya menemukan beberapa talang air/pipa tua yang dapat saya gunakan untuk bodi, tetapi saya perlu membuat desain untuk area layar dan panel kontrol yang sebenarnya. Untuk ini saya hanya membuat mock up kardus dan menggunakan selotip untuk menempelkannya ke pipa. Yang pertama adalah "kotak" sederhana tapi rasanya terlalu sederhana, jadi saya memodifikasinya untuk membuat area layar lebih menarik dan menambahkan area panel kontrol terpisah. Ini kurang lebih menjadi desain akhir (ada beberapa penyesuaian seperti yang akan Anda lihat, tapi sudah dekat).

Langkah 3: Dari Prototipe ke Template

Dari Prototipe ke Template
Dari Prototipe ke Template
Dari Prototipe ke Template
Dari Prototipe ke Template
Dari Prototipe ke Template
Dari Prototipe ke Template

Sekarang saya memiliki prototipe yang saya senangi, saya bisa meratakan karton dan mengubahnya menjadi template yang kemudian saya pindahkan ke bagian dari casing PC lama yang saya tendang. Plastik keras apa pun yang serupa akan berfungsi, saya hanya menggunakan sampah yang harus saya tangani. Setelah ditandai, saya kemudian bisa memotong bagian-bagiannya sehingga saya bisa mulai merakit bodi utama. Tip yang berguna di sini, untuk membuatnya lebih mudah untuk menandai dan kemudian memotong plastik, saya menutupi area yang perlu saya potong dengan selotip terlebih dahulu, ini memberi saya cara yang lebih mudah untuk menggambar templat ke plastik, dan sesuatu untuk membantu menghentikan cakram pemotong agar tidak tergelincir saat saya melakukan pemotongan pertama.

Langkah 4: Tambahkan Kasus untuk Layar & Pi

Tambahkan Kasus untuk Layar & Pi
Tambahkan Kasus untuk Layar & Pi
Tambahkan Kasus untuk Layar & Pi
Tambahkan Kasus untuk Layar & Pi

Saya ingin sudut area layar melengkung, dan saya membutuhkan sesuatu untuk benar-benar menahan Pi dan menampilkannya - solusi saya adalah menggunakan wadah plastik kecil yang saya miliki. Saya memotong lubang dari bagian atas tubuh dan menempelkan wadah melalui ini. Lalu saya merekatkan semua sisinya. Saya menggunakan lem super di sini dengan soda kue yang banyak untuk membantu memperkuat lasan. Kemudian saya mengisi dan mengarsipkan/mengamplas semuanya untuk merapikan semuanya dan memberikan kesan yang lebih "berbentuk".

Langkah 5: Ulangi untuk Panel Kontrol

Ulangi untuk Panel Kontrol
Ulangi untuk Panel Kontrol
Ulangi untuk Panel Kontrol
Ulangi untuk Panel Kontrol
Ulangi untuk Panel Kontrol
Ulangi untuk Panel Kontrol

Selanjutnya, saya melakukan transpos, pemotongan, dan perekatan template yang sama persis untuk membangun rumah panel kontrol.

Langkah 6: Potong Pipa

Potong Pipa
Potong Pipa

Seperti yang Anda lihat, wadah yang saya rencanakan untuk digunakan untuk menampung komponen elektronik utama sekarang berada di dalam plastik hitam, ini berarti saya perlu membuat lubang di pipa untuk menempatkannya. Saya menggunakan selotip lagi untuk berbaris di mana saya ingin memotong, dan memotong persegi pipa sehingga bagian-bagiannya pas.

Langkah 7: Bingkai

bingkai
bingkai
bingkai
bingkai

Satu tantangan yang secara tidak sengaja saya paksakan pada diri saya adalah mencoba membuat bezel yang akan memenuhi area di sekitar layar hingga ke tepi wadah. Sayangnya cara tampilan dibuat juga tidak ada yang berguna dalam desainnya (seperti lubang atau apa pun) untuk membantu memasangnya, jadi bezel juga harus menahan tampilan di tempatnya. Upaya pertama saya (terlihat di sini) adalah campuran plastik dan busa. Saya akhirnya mengulangi ini beberapa kali dan akhirnya menjadi salah satu bagian yang lebih menantang dari build. Diperparah oleh toleransi kecil dan sifat halus dari bezel itu sendiri dan layar.

Langkah 8: Uji Baterai

Tes Baterai
Tes Baterai
Tes Baterai
Tes Baterai
Tes Baterai
Tes Baterai

Pada titik ini, saya mengalihkan pikiran saya ke cara membuat ini berjalan secara independen dari USB yang disediakan listrik. Saya menguji berbagai baterai dan menemukan bahwa layar Raspberry Pi + tidak benar-benar menarik banyak daya dan itu sangat senang berjalan bahkan pada salah satu paket baterai saya yang lebih kecil (gratis dari pameran dagang). Ini benar-benar beruntung karena paketnya pas dengan celah di dalam build (foto nanti). Sekarang kita bisa menempelkan komponen bodi utama untuk sementara, dan menjalankan uji coba pertama kita untuk menyalakannya di lenganku!

Langkah 9: Menguji Kesesuaian

Pengujian Kesesuaian
Pengujian Kesesuaian
Pengujian Kesesuaian
Pengujian Kesesuaian
Pengujian Kesesuaian
Pengujian Kesesuaian

Di sini Anda dapat melihat di mana saya telah memodifikasi pipa inti lebih jauh untuk memungkinkan akses ke bagian bawah komponen. Anda juga dapat melihat bagaimana saya beruntung dengan baterai yang pas di rongga di satu sisi wadah Pi. Akhirnya memulai proses pembersihan ikatan, pengisian, pengamplasan dan melakukan uji lapisan primer untuk mendapatkan kesan tampilan akhir (saya tahu pada tahap ini saya akan mengampelas ini berkali-kali dan hampir semua primer itu akan pergi, tapi saya ingin merasakan bagaimana tampilannya).

Langkah 10: Tambahkan Kontrol dan Detailing

Tambahkan Kontrol dan Perincian
Tambahkan Kontrol dan Perincian
Tambahkan Kontrol dan Perincian
Tambahkan Kontrol dan Perincian
Tambahkan Kontrol dan Perincian
Tambahkan Kontrol dan Perincian

Saya ingin serangkaian LED merah/kuning/hijau untuk membentuk pengukur, serta tombol putar dan setidaknya 2 tombol tekan. Ini semua dipasang ke bagian panel kontrol - cukup dengan mengebor semua lubang yang tepat. Saya juga mulai menambahkan potongan kecil komponen plastik bekas (pada dasarnya kit bashing) untuk menambahkan detail dan lebih menarik ke bodi dan panel kontrol.

Langkah 11: Pembuatan Ulang Bezel No. 3

Pembuatan Ulang Bezel No.3
Pembuatan Ulang Bezel No.3
Pembuatan Ulang Bezel No.3
Pembuatan Ulang Bezel No.3
Pembuatan Ulang Bezel No.3
Pembuatan Ulang Bezel No.3

Seperti yang saya sebutkan sebelumnya, saya kesulitan dengan bezel untuk build ini dan membangunnya kembali beberapa kali. Ini adalah iterasi ketiga yang saya ikuti. Pendekatan saya di sini untuk menggunakan hardboard dan memotong 2 bentuk yang berbeda, satu pemikir dari yang lain dan kemudian direkatkan (dan dijepit) bersama-sama untuk membentuk gambar tengah. Bentuk-bentuk ini memungkinkan tampilan persegi untuk duduk di dalam ini dan kemudian menahan tampilan di tempatnya di dalam wadah (seperti pada gambar 3). Ini memberi saya cukup bahan untuk menggunakan 4 sekrup yang sangat kecil sebagai perlengkapan - yang saya gunakan untuk memasangnya dengan kuat di dalam casing, dan pada gilirannya akan membuat layar stabil dan aman. Dalam retrospeksi saya akan menemukan tampilan yang datang dengan beberapa opsi pemasangan yang layak (atau menggunakan printer 3D - yang tidak saya miliki saat itu).

Langkah 12: Membuat Prototipe Elektronik

Prototyping Elektronik
Prototyping Elektronik
Prototyping Elektronik
Prototyping Elektronik

Saya menggunakan papan tempat memotong roti untuk menata sirkuit sederhana saya seperti ini, dan karena saya sering melakukan bagian proyek ini di ruang yang berbeda dengan konstruksi bodi utama, saya juga memasangkannya dengan Raspberry PI yang berbeda. Di sini saya menggunakan model 3, yang memberi saya sedikit lebih banyak kekuatan untuk benar-benar terhubung langsung dan menjalankan IDE onboard. Ini hanya membuat pembuatan prototipe kode cepat sedikit lebih mudah bagi saya. Ada banyak cara lain untuk menghubungkan/kode/debug dari jarak jauh, ini hanya ingin saya lakukan di sini.

Desain di sini cukup lurus ke depan, kami memiliki;

  1. Rotary encoder - ini menggunakan ground dan banyak pin GPIO untuk menangani arah klik dan tombol tekan.
  2. Sepasang tombol tekan, ini hanya menggunakan satu pin GPIO masing-masing dan kesamaan
  3. 3 LED, masing-masing dengan resistor inline untuk menghentikannya muncul, semua menuju ke titik yang sama, tetapi dengan masing-masing pin GPIO individu sehingga masing-masing dapat ditangani secara individual.

Ini memberi saya 3 LED untuk pengukur saya, encoder putar untuk memutar melalui layar pada pipboy dan 3 tombol tekan untuk mendorong tindakan (satu di encoder putar dan 2 kabel terpisah). Hanya ini yang bisa saya muat, dan dengan tampilan yang menggunakan banyak pin, cukup banyak menghabiskan apa yang Anda miliki pada tata letak Pi GPIO standar. Namun itu baik-baik saja untuk tujuan saya.

Gambar kedua cukup banyak menunjukkan tata letak internal akhir yang saya gunakan. Saya menghabiskan beberapa waktu di sini untuk menguji cara mengemudi komponen dan memverifikasi semuanya berhasil sebelum saya mengubahnya ke dalam tubuh build. Semua kode ada di github.

Catatan tentang encoder putar. Saya memang menghabiskan banyak waktu untuk menulis mesin status Rotary Encoder saya sendiri untuk melacak perubahan tinggi/rendah GPIO dan memetakannya ke posisi putar. Saya memiliki kesuksesan yang beragam di sini, saya membuatnya bekerja untuk "sebagian besar" kasus, tetapi selalu ada kasus tepi dan (de) memantul dll untuk ditangani. Jauh, jauh lebih mudah untuk menggunakan perpustakaan yang sudah jadi dan ada yang bagus untuk ini tersedia untuk diinstal untuk Python. Saya menggunakan itu pada akhirnya karena memungkinkan saya untuk fokus pada bagian yang menyenangkan dari membangun, daripada menghabiskan waktu lama untuk men-debug masalah. Semua detail untuk itu disertakan dalam kode sumber.

Jika Anda baru mengenal Raspberry Pi, GPIO, dan elektronik, saya sangat merekomendasikan tutorial berikut yang memandu Anda melalui semua yang Anda butuhkan untuk melakukan tata letak di atas;

projects.raspberrypi.org/en/projects/physi…

thepihut.com/blogs/raspberry-pi-tutorials/…

Langkah 13: Transposisi Elektronik Ke Tubuh

Mentransposisikan Elektronik Ke Dalam Tubuh
Mentransposisikan Elektronik Ke Dalam Tubuh
Mentransposisikan Elektronik Ke Dalam Tubuh
Mentransposisikan Elektronik Ke Dalam Tubuh
Mentransposisikan Elektronik Ke Dalam Tubuh
Mentransposisikan Elektronik Ke Dalam Tubuh

Setelah saya menyelesaikan tata letak menggunakan papan tempat memotong roti, saatnya untuk mulai memikirkan cara memasangnya ke badan pipboy. Saya memutuskan untuk membuatnya sehingga saya dapat membongkar dan melepas semua komponen elektronik jika saya perlu memperbaiki atau mengubah apa pun di masa mendatang. Untuk mencapai ini, saya memutuskan untuk membuat semua sub-bagian plug-able menggunakan konektor dupont.

Untuk tombol yang saya solder pada beberapa kabel ekstensi dan menggunakan pembungkus kawat untuk mengisolasi ujungnya, ini memungkinkan saya untuk merakit dan membongkar ini dari badan (misalnya untuk pengujian, lalu pengecatan dll). Rotary Encoder sudah memiliki pin yang dapat menerima konektor dupont, jadi saya hanya perlu membuat beberapa kabel dengan panjang yang tepat.

LED membutuhkan sedikit lebih banyak pekerjaan - untuk ini, saya memutuskan untuk menggunakan sedikit plastik bekas yang saya miliki (dipotong agar pas) untuk membuat panel yang dapat dilepas untuk memasang LED. Kemudian saya menempelkannya dengan panas di tempatnya dan menyolder resistor dan kabel. Ini membuat unit pelepas yang bisa saya pasang dan lepaskan dan membuat pengecatan dan penyelesaian lebih mudah.

Perhatikan penyolderan saya buruk, jadi saya menjaga ini tetap sederhana dan menghindari sesuatu yang terlalu detail/halus. Pada gambar terakhir Anda dapat melihat saya juga memiliki beberapa papan lebar yang sangat kecil (5x5), saya menggunakan salah satu yang dipasang di dalam untuk menyediakan panel untuk menghubungkan semuanya ke/dari GPIO. Khususnya ini berguna untuk membuat rel arde umum yang dapat saya gunakan dan menghindari banyak kabel arde yang meliuk kembali ke Pi.

Saya kemudian memotong berbagai lubang ke dalam wadah untuk memasukkan kabel ke Pi dan terhubung ke GPIO. Desain ini memungkinkan saya untuk menyelesaikan semuanya jika perlu (sesuatu yang saya lakukan beberapa kali saat saya menyelesaikan pembangunan).

Langkah 14: Menyetel Kesesuaian dengan Baik

Menyesuaikan Kesesuaian
Menyesuaikan Kesesuaian
Menyesuaikan Kesesuaian
Menyesuaikan Kesesuaian

Pada titik ini saya mengalami beberapa masalah "cocok". Pertama, penggunaan konektor dupont untuk kabel berarti sulit untuk memasangkannya pada pin dengan topi layar di tempatnya karena tidak ada jarak ketinggian yang cukup. Saya memecahkan masalah ini dengan membeli (ini adalah salah satu dari sedikit barang yang saya beli untuk proyek ini) pemanjang pin GPIO kecil sehingga saya dapat membuat tampilan lebih tinggi dan menyisakan ruang untuk mengakses pin GPIO yang tersisa menggunakan konektor dupont.

Saya juga memotong beberapa potongan kecil alas lantai busa untuk membuat beberapa bantalan samping di dalam wadah, ini membantu menempatkan Pi + Display di tempat yang tepat dan menghentikannya bergerak.

Langkah 15: Menaikkan Rotary Encoder

Retro Up the Rotary Encoder
Retro Up the Rotary Encoder

Rotary encoder sering datang (seperti yang saya lakukan) dengan kenop gaya "hi fi" modern mengkilap yang bagus. Ini benar-benar di luar karakter untuk membangun, jadi saya harus membuat sesuatu yang lain. Dalam kotak suku cadang acak saya, saya menemukan roda gigi tua dari bor yang saya pecahkan sejak lama. Ini terlihat bagus, tetapi tidak sesuai dengan rotary encoder. Solusi saya di sini adalah mencoba berbagai colokan dinding sampai saya menemukan satu yang cocok dengan dial putar, dan kemudian memotongnya menjadi bentuk sehingga saya dapat menggunakannya sebagai "kerah bagian dalam" untuk memasang roda penggerak ke rotary encoder sebagai tema yang lebih sesuai kontrol.

Langkah 16: Lapisan Dalam

lapisan dalam
lapisan dalam
lapisan dalam
lapisan dalam

Lebih banyak ubin lantai busa! Kali ini, saya menggunakannya untuk membuat lapisan yang lembut agar lebih pas (tanpa terlalu longgar). Dengan membuat lubang pada busa, saya juga dapat menyerap beberapa "benjolan" yang dibuat oleh wadah untuk Pi. Secara keseluruhan ini membuatnya jauh lebih dpt dipakai. Tidak diperlihatkan dalam foto-foto ini, tetapi saya membuatnya sedikit lebih besar dari bodi utama sehingga terlihat di ujungnya, yang kemudian saya lukis dan semuanya membantu menambahkan sedikit kontras dan ketertarikan pada item yang sudah jadi.

Langkah 17: Menambahkan Detail

Menambahkan Detail
Menambahkan Detail
Menambahkan Detail
Menambahkan Detail

Saatnya mulai menambahkan beberapa dekorasi dan membuatnya lebih menarik. Pertama-tama saya menambahkan beberapa potongan plastik di sepanjang satu sisi untuk memberikan sedikit daya tarik visual. Kemudian saya menambahkan beberapa kabel palsu ke beberapa terminal dan hanya mendorongnya ke dalam lubang yang saya bor ke dalam tubuh. Ini semua kemudian dicat dengan warna yang berbeda.

Langkah 18: Melukis dan Menyelesaikan Body Build

Pengecatan dan Finishing Body Build
Pengecatan dan Finishing Body Build
Pengecatan dan Finishing Body Build
Pengecatan dan Finishing Body Build
Pengecatan dan Finishing Body Build
Pengecatan dan Finishing Body Build

Saya tidak terlalu peduli dengan hasil akhir yang murni - seperti yang seharusnya sudah tua dan digunakan dengan baik (sebenarnya saya mungkin akan kembali dan melakukan lebih banyak pelapukan di beberapa titik). Tapi saya ingin itu terlihat seperti objek yang konsisten dan lengkap yang tidak terpincang-pincang bersama dari sampah acak (walaupun itu persis seperti itu). Saya melewati banyak iterasi pengamplasan, pengisian (miliput adalah pengisi pilihan saya untuk plastik), dan ulangi. Kemudian beberapa lapis primer dan cat untuk lebih membantu menghaluskan semua sambungan. Kemudian lebih banyak pengamplasan dan lebih banyak isian, dan lebih banyak lukisan.

Setelah saya melihat dan merasakan tubuh yang saya sukai, saya mulai menambahkan beberapa detail. Saya menggunakan gosok dan buff pada panggangan pada kontrol untuk memberi mereka lebih banyak nuansa wire mesh. Saya juga menambahkan detail kecil cat di sana-sini menggunakan akrilik.

Saya menggali koleksi stiker acak saya dan menambahkan beberapa untuk menyelesaikan efeknya. Kemudian saya melakukan pencucian pelapukan dengan beberapa cat campuran untuk menambahkan beberapa kotoran dan kotoran ke area yang sulit dijangkau yang akan sulit dibersihkan. Ini mungkin agak terlalu halus saat ini, dan saya mungkin akan kembali dan menambahkan lagi nanti.

Langkah 19: Pengkodean

Pengkodean
Pengkodean

Bagian dari ambisi saya untuk proyek ini adalah membuatnya bereaksi seperti pipboy yang sebenarnya - dan bagi saya bagian paling ikonik dari dalam game itu adalah memutar tombol untuk membalik di antara layar yang berbeda. Untuk mencapai ini, saya memutuskan untuk menulis antarmuka pengguna pipboy yang dapat menampilkan serangkaian layar dan memungkinkan Anda untuk menggulir di antara mereka. Saya ingin membuat konten layar menjadi sesuatu yang dapat dengan mudah saya ubah, dan memang dapat menambah/menghapus layar.

Saya memilih untuk menulis ini dengan Python karena dukungan yang sangat baik untuk Raspberry Pi, GPIO dll. Python cukup rendah dalam daftar bahasa yang saya kenal, jadi ini adalah kurva pembelajaran yang besar bagi saya, dan sebagian besar kodenya adalah berantakan akibatnya. Saya akan memperbarui ini seiring waktu karena saya belum sepenuhnya menyelesaikan semua yang ingin saya lakukan di sini - tetapi cukup dekat untuk dibagikan sekarang karena semua konsep utama ada di sana.

Desain saya untuk kode UI cukup mudah, ada skrip Python utama yang mengatur tampilan, mengonfigurasi GPIO, memuat layar dan memasuki loop pembaruan tak terbatas, menunggu acara pengguna dan memperbarui tampilan seperlunya. Selain itu, ada berbagai skrip dukungan yang membantu menghasilkan layar UI sebelumnya.

Pustaka utama yang digunakan:

  • pygame: Saya menggunakan ini sebagai mesin untuk menjalankan UI karena memungkinkan saya menggambar grafik sewenang-wenang, memanipulasi gambar, font, layar penuh, dll.
  • pyky040: Ini memberikan penanganan untuk tombol putar dan menghemat banyak waktu saya (terima kasih banyak kepada Raphael Yancey karena telah merilis ini.
  • RPi. GPIO: Untuk mengemudi GPIO dengan baik, saya bermain-main dengan beberapa opsi di sini, tetapi ini memberi saya tingkat fleksibilitas yang saya inginkan, terutama dengan hal-hal seperti menggunakan GPIO cadangan sebagai 3.3v lain untuk menggerakkan rotary encoder dll.
  • kebisingan: Untuk menghasilkan kebisingan perlin, untuk memungkinkan saya membuat bentuk gelombang acak untuk layar radio yang terlihat lebih alami
  • antrian: Saya mengalami bug yang membuat frustrasi dengan pengaturan waktu peristiwa dari rotary encoder yang diputar dan kecepatan refresh layar LCD (sangat) lambat. Pada akhirnya cara saya menyelesaikan ini adalah dengan mengantrekan acara masuk dari rotary encoder dan mengambilnya satu per satu saat layar disegarkan.
  • os, sys, threading, waktu: semua digunakan untuk fungsi python standar

Catatan tentang desain penanganan layar. Layar didefinisikan sebagai daftar nama dalam kode. Setiap entri dalam daftar dapat memiliki file-p.webp

Isi file-file tersebut dihasilkan di tempat lain (dengan tangan atau dengan skrip lain), yang outputnya disimpan sebagai file-p.webp

Ada pengecualian aneh di mana beberapa hal dikodekan - seperti bentuk gelombang untuk layar radio acak yang dihitung secara real time dan dianimasikan.

Jika analogi membantu, pikirkan desain UI sebagai browser web yang sangat kasar dan sederhana - setiap "layar" seperti halaman web yang sangat sederhana yang hanya dapat terdiri dari satu png, satu file txt, atau kombinasi keduanya. Isinya independen dan hanya digambar oleh UI seperti browser akan menggambar halaman web.

Berikut ini tautan ke perpustakaan utama yang saya gunakan di sini:

www.pygame.org/news

pypi.org/project/pyky040/

pypi.org/project/noise/

Langkah 20: Layar Statistik

Layar Statistik
Layar Statistik

Tidak ada pipboy yang lengkap tanpa layar statistik siluet pipboy klasik. Untuk ini, seorang teman saya membuat-p.webp

Langkah 21: Layar Inventaris

Layar Inventaris
Layar Inventaris

Sesuatu yang selalu berguna dengan proyek Pi adalah memiliki cara untuk menampilkan info dasar seperti alamat IP-nya, DHCP, dll. Saya memutuskan untuk membebani layar Inventaris sebagai tampilan "persediaan" Pi - apa CPU, memori, alamat IP, dll. Saya menulis skrip Linux kecil untuk mengumpulkan info ini dan hanya mengarahkannya ke file teks (.txt) bernama tepat yang kemudian diambil dan ditampilkan oleh sistem UI. Dengan cara ini jika saya pernah berada di lokasi yang berbeda, saya dapat menjalankan skrip dan mengambil file.txt baru dengan alamat IP terbaru, dll.

Langkah 22: Layar Peta

Layar Peta
Layar Peta

Layar ini adalah salah satu layar yang lebih kompleks untuk dikerjakan. Raspberry Pi 0 tidak dilengkapi dengan modul GPS, tetapi saya ingin membuat Peta memiliki validitas ke tempat Pi berada. Solusi saya untuk ini adalah skrip terpisah yang menarik alamat IP Pi, menggunakan https://ipinfo.io untuk mencari perkiraan lokasi. Respons JSON ditangkap dan kemudian saya mengonversi koordinat sehingga saya dapat menarik ubin openstreetmap.org untuk perkiraan lokasi.

Ubin memiliki banyak warna, tetapi saya ingin gambar skala hijau cocok dengan tampilan dan nuansa Pipboy dan saya tidak dapat menemukan yang persis seperti itu, jadi saya menulis filter skala hijau dengan Python untuk memetakan kembali warnanya ubin openstreetmap dan kemudian cache gambar baru ke file png.

Selama proses di atas, file teks dibuat dengan perkiraan lokasi dan koordinat, dan petak peta dibuat sebagai png. UI pipboy menarik kedua file ini dan melapisi konten untuk membuat layar Peta yang berfungsi (dalam akurasi resolusi alamat IP ke suatu lokasi).

Langkah 23: Layar Data

Layar Data
Layar Data

Ini hanyalah kartu uji (dihasilkan oleh skrip python lain dan keluaran ke file png) yang ditampilkan untuk membantu menguji ukuran/tata letak. Saya meninggalkannya karena masih berguna untuk memverifikasi berapa banyak real estat yang harus saya mainkan saat mengejek layar.

Langkah 24: Layar Radio

Layar Radio
Layar Radio

Selain layar peta, ini adalah layar lain yang benar-benar membuat saya banyak bekerja. Ini adalah satu-satunya layar di mana saya bermain-main dengan animasi - dan sebagian besar berfungsi sebagaimana mestinya, tetapi kinerja masih menjadi masalah dengan kecepatan refresh layar LCD. Struktur layar adalah file teks yang berisi beberapa nama radio yang dipilih secara acak (ini hanya string arbitrer dan tidak melakukan apa pun selain menampilkan daftar di layar), file-p.webp

Ini adalah satu-satunya layar di mana loop pygame melakukan pekerjaan nyata karena setiap siklus, ia harus menghitung bentuk gelombang baru, menghapus bagian layar dalam kehidupan ini dan menggambar ulang.

Langkah 25: Pikiran Terakhir

Image
Image
Pikiran Akhir
Pikiran Akhir

Ini mungkin bangunan paling menantang yang pernah saya lakukan, dengan banyak konsep dan keterampilan berbeda yang dipanggil, tetapi ini juga salah satu yang paling menyenangkan dengan hal nyata yang berfungsi sebagai hasilnya. Saya masih dalam proses merapikan beberapa catatan teknis saya serta repo github untuk kodenya. Semuanya akan saya sediakan segera, jadi segera kembali lagi untuk detail dan info lebih lanjut saat saya punya waktu untuk menambahkannya ke artikel.

Jika Anda melakukan sesuatu seperti ini, saya ingin melihat hasilnya dan jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi saya dan saya akan berusaha untuk menambahkan lebih banyak info dalam setiap langkah di mana Anda ingin membantu.

Langkah 26: Buka Kode di Github

Kode Terbuka di Github
Kode Terbuka di Github

Saya akhirnya berhasil membuka kode di Github. Ini tersedia di tautan ini:

Direkomendasikan: