İçindekiler:

Hurdadan İnşa Edilen Pipboy: 26 Adım (Resimlerle)
Hurdadan İnşa Edilen Pipboy: 26 Adım (Resimlerle)

Video: Hurdadan İnşa Edilen Pipboy: 26 Adım (Resimlerle)

Video: Hurdadan İnşa Edilen Pipboy: 26 Adım (Resimlerle)
Video: Suudi Arabistan neden çizgi şeklinde bir şehir inşa ediyor? 2024, Temmuz
Anonim
Image
Image
Pipboy'un Kalbini İnşa Etmek
Pipboy'un Kalbini İnşa Etmek

Bu benim çalışan Pipboy'um, garajdan aldığım rastgele çöplerden ve elektronik parça stoğumun baskınından yapılmış. Bunu zorlu bir yapı buldum ve birkaç ay çalışmamı aldı, bu yüzden bunu tam bir başlangıç projesi olarak kategorize etmem. Gerekli beceriler arasında plastik ve ahşap işleri, elektronik ve kodlama yer alır. Gövde, birlikte kesilip kaynaklanmış çeşitli hurda plastik parçalarından yapılmıştır. GPIO pinlerinin bir kısmına monte edilmiş bir ekran başlığı ile mikro denetleyici olarak bir Raspberry Pi 0 kullandım. Kalan pinler, LED'leri sürmek ve düğmeleri/kontrolleri bağlamak için kullanılır. Projeyi tamamlamak için Python'da bazı demo ekranlarla birlikte "Pipboy" tarzı bir kullanıcı arayüzü yazdım.

Proje için hedeflerim şunlardı:

  • Çalışıyor olmalıydı - yani aslında bir şeyler yapan bir ekrana sahip olması gerekiyordu
  • Fallout'ta kullanıcı arayüzünün ikonik bir parçası olarak benim için her zaman göze çarpan farklı ekranları seçmek için bir "kadran" olmasını istedim.
  • Tüm yapı, zaten garajda veya ofisimde bulunan malzemeler kullanılarak tamamlanmak zorundaydı (bu tam olarak başarılmadı, ancak yaklaştım - bunun %90'ından fazlası zaten ortalıkta bulunan eşyalar veya eşyalardı)
  • Giyilebilir olması gerekiyordu

Sahip olmadığım bir amaç, onu oyun içi modellerden birinin tam bir kopyası yapmaktı - Bir şeyin "tarzında" bir şeyler inşa etmeyi tercih ediyorum, çünkü bana bulduğum rastgele önemsiz şeyleri uyarlamam için yer veriyor ve biraz daha yaratıcı olmama izin ver. Son olarak, evet, bunları satın alabileceğinizi biliyorum ama mesele bu değildi;)

Gereçler

Gereçler

  • Geniş çaplı boru (bir parça tahliye borusu gibi)
  • Hurda plastikler (hem gövde oluşturmak hem de dekoratif amaçlı)
  • Küçük konteyner
  • Köpük paspas
  • Ahududu Pi
  • 3.5" ekran
  • KY040 Döner Enkoder
  • 3x LED'ler
  • 2x Basmalı düğmeler
  • Taşınabilir şarj aleti
  • kablolama
  • Vidalar, yapıştırıcılar, boyalar, dolgu maddeleri vb.

Aletler

  • Dremmel
  • Kesici ve zımpara ataşmanlarına sahip çok amaçlı alet
  • Delmek
  • Dosyalar
  • Havya
  • Sıcak yapıştırıcı tabancası
  • Tornavida(lar)
  • Keskin bıçak
  • Testere

Adım 1: Pipboy'un Kalbini İnşa Etmek

Pipboy'un Kalbini İnşa Etmek
Pipboy'un Kalbini İnşa Etmek

Yapmam gereken ilk şey, birlikte çalışabileceğim bir form faktöründe bir ekran ve mikro denetleyici alabileceğimden emin olmaktı. Raspberry PI'nin GPIO pinlerinin üzerine HAT olarak oturan 3.5 bir ekrana sahiptim, bu yüzden bunu kullanmaya karar verdim. Bir Raspberry Pi 0 ile eşleştirdim ve düzgün çalıştığından emin oldum, bir Linux'un üzerinden geçmeniz gereken ekranı tanımasını sağlamak için birkaç adım.

İkinci resimde görebileceğiniz gibi, ekranı desteklemek için kasaya yapıştırdığım küçük bir karton/köpük platform ekledim. Bunu, bu kısmı çok fazla idare edeceğimi bildiğim için yaptım ve destek eksikliği nedeniyle pimleri veya ekranı kırmak istemedim. Sonunda bu değiştirildi, ancak oluşturma işlemi sırasında iyi bir ek koruma oldu.

Bu noktada şunu da belirtmekte fayda var, daha sonra derlemede bu kurulumla ilgili performans sorunlarıyla karşılaştım - ağırlıklı olarak Pi ve ekran arasındaki arayüz üzerindeki yenileme hızı, buna derlemede daha sonra gireceğim ama eğer Bunu tekrar yaptım, burada farklı donanımları düşünebilirim.

İşte bunun için bazı yararlı bağlantılar:

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…

Ayrıca, bununla ilişkili github'a, bu çalışmayı elde etmek için gerçekte ne yaptığımla ilgili bazı notlar ekleyeceğim (konuyu okuduğumdan, bunun belirli örnekler/sürücüler için nasıl çalıştığı konusunda çok fazla değişkenlik olmasına rağmen, bu nedenle, değirmeniniz değişebilir)).

2. Adım: Karton Prototip

karton prototip
karton prototip
karton prototip
karton prototip
karton prototip
karton prototip

Gövde için kullanabileceğim eski bir oluk/boru buldum, ancak gerçek ekran alanı ve kontrol paneli için bir tasarım bulmam gerekiyordu. Bunun için kartondan maketler yaptım ve bunları boruya sabitlemek için maskeleme bandı kullandım. İlki basit bir "kutu"ydu ama çok basit geldi, bu yüzden ekran alanını daha ilginç hale getirmek için değiştirdim ve ayrı bir kontrol paneli alanı ekledim. Bu az çok nihai tasarım oldu (göreceğiniz gibi birkaç ince ayar yapıldı, ancak yakın).

Adım 3: Prototipten Şablona

Prototipten Şablona
Prototipten Şablona
Prototipten Şablona
Prototipten Şablona
Prototipten Şablona
Prototipten Şablona

Artık mutlu olduğum bir prototipim vardı, kartonu düzleştirebilir ve daha sonra tekme attığım eski bir PC kasasının parçasına aktardığım bir şablona dönüştürebilirdim. Herhangi bir benzer sert plastik işe yarardı, sadece elimdeki çöpleri kullanıyordum. İşaretlendikten sonra, ana gövdeyi birleştirmeye başlayabilmem için parçaları kesebildim. Burada faydalı bir ipucu, plastiği hem işaretlemeyi hem de daha sonra kesmeyi kolaylaştırmak için önce kesmem gereken alanları maskeleme bandıyla kapattım, bu ikisi de şablonu plastiğin üzerine çizmem için daha kolay bir yol sağladı, ve ilk kesimleri yaparken kesme diskinin kaymasını önlemeye yardımcı olacak bir şey.

4. Adım: Ekran ve Pi için Vaka Ekle

Ekran ve Pi için Kılıf Ekle
Ekran ve Pi için Kılıf Ekle
Ekran ve Pi için Kılıf Ekle
Ekran ve Pi için Kılıf Ekle

Ekran alanının köşelerinin kavisli olmasını istedim ve Pi'yi gerçekten tutacak ve içinde gösterecek bir şeye ihtiyacım vardı - benim çözümüm, sahip olduğum küçük bir plastik kap kullanmaktı. Gövdenin üstünden bir delik açtım ve kabı bunun içinden yapıştırdım. Sonra her tarafını yapıştırdım. Kaynakları güçlendirmek için burada bol kabartma tozu ile süper yapıştırıcı kullandım. Daha sonra hepsini toplamak ve daha "kalıplanmış" bir his vermek için her şeyi doldurdum ve dosyaladım/zımparaladım.

Adım 5: Kontrol Paneli için tekrarlayın

Kontrol Paneli için tekrarlayın
Kontrol Paneli için tekrarlayın
Kontrol Paneli için tekrarlayın
Kontrol Paneli için tekrarlayın
Kontrol Paneli için tekrarlayın
Kontrol Paneli için tekrarlayın

Ardından, kontrol paneli muhafazasını oluşturmak için tam olarak aynı şablonun yer değiştirmesini, kesmesini ve yapıştırmasını yaptım.

Adım 6: Boruyu Kesin

Boruyu Kes
Boruyu Kes

Gördüğünüz gibi, ana elektronik bileşenleri barındırmak için kullanmayı planladığım kap şimdi siyah plastik çerçevenin içinde gururlu bir şekilde oturuyor, bu da borunun içine oturması için bir delik açmam gerektiği anlamına geliyor. Kesmek istediğim yeri hizalamak için tekrar maskeleme bandı kullandım ve parçaların sığması için borudan bir kare kestim.

Adım 7: Çerçeve

çerçeve
çerçeve
çerçeve
çerçeve

Yanlışlıkla kendime zorladığım şeylerden biri, ekranın etrafındaki alanı kabın kenarlarına kadar dolduracak bir çerçeve bulmaya çalışmaktı. Ne yazık ki ekranın üretilme şekli, tasarımında onu monte etmeye yardımcı olacak (delikler veya herhangi bir şey gibi) yararlı hiçbir şeye sahip değil, bu nedenle çerçevenin de ekranı yerinde tutması gerekiyordu. İlk denemem (burada görülen) plastik ve köpük karışımıydı. Sonunda bunu birkaç kez yineledim ve sonunda yapının daha zorlu kısımlarından biri oldu. Hem çerçevenin hem de ekranın küçük toleransları ve hassas yapısı nedeniyle daha da kötüleşti.

Adım 8: Pil Testi

Pil Testi
Pil Testi
Pil Testi
Pil Testi
Pil Testi
Pil Testi

Bu noktada, ana şebekeden beslenen bir USB'den bağımsız olarak bunun nasıl çalıştırılacağına karar verdim. Çeşitli pilleri test ettim ve Raspberry Pi + ekranının aslında o kadar fazla güç çekmediğini ve daha küçük pil takımlarımdan biriyle (ticaret fuarından ücretsiz bir hediye) bile çalışmaktan son derece mutlu olduğunu gördüm. Paket, yapının içindeki bir boşluğa mükemmel bir şekilde oturduğu için bu gerçekten şanslıydı (fotoğraflar daha sonra). Şimdi ana gövde bileşenlerini geçici olarak bantlayabilir ve kolumda ilk test çalıştırmamızı çalıştırabiliriz!

9. Adım: Uyumun Test Edilmesi

Uygunluğu Test Etme
Uygunluğu Test Etme
Uygunluğu Test Etme
Uygunluğu Test Etme
Uygunluğu Test Etme
Uygunluğu Test Etme

Burada, bileşenlerin alt tarafına erişime izin vermek için çekirdek boruyu nerede değiştirdiğimi görebilirsiniz. Pilin Pi kabının bir tarafındaki boşluğa güzelce oturmasıyla nasıl şanslı olduğumu da görebilirsiniz. Sonunda bağları temizleme, doldurma, zımparalama işlemine başladım ve bitmiş görünümü anlamak için bir test katı astarı yaptım (Bu aşamada biliyordum ki bu kadar çok daha fazla zımpara yapacağım ve bu astarın neredeyse tamamı gidecekti., ama nasıl görüneceğine dair bir fikir edinmek istedim).

Adım 10: Kontroller ve Detaylandırma Ekleyin

Kontroller ve Detaylandırma Ekle
Kontroller ve Detaylandırma Ekle
Kontroller ve Detaylandırma Ekle
Kontroller ve Detaylandırma Ekle
Kontroller ve Detaylandırma Ekle
Kontroller ve Detaylandırma Ekle

Bir gösterge oluşturmak için bir dizi kırmızı/sarı/yeşil LED'in yanı sıra bir döner kadran ve en az 2 buton istedim. Bunların hepsi kontrol paneli bölümüne takıldı - sadece tüm doğru deliklerin delinmesi durumu. Ayrıca gövdeye ve kontrol paneline ayrıntılar ve daha fazla ilgi eklemek için küçük parçalar halinde hurda plastik bileşenler (temelde kit vurma) eklemeye başladım.

Adım 11: Çerçeve Yeniden Yapılandırma No. 3

Çerçeve Yeniden Yapılanması No. 3
Çerçeve Yeniden Yapılanması No. 3
Çerçeve Yeniden Yapılandırma No. 3
Çerçeve Yeniden Yapılandırma No. 3
Çerçeve Yeniden Yapılanması No. 3
Çerçeve Yeniden Yapılanması No. 3

Daha önce de bahsettiğim gibi, bu yapı için çerçeveyle uğraştım ve birkaç kez yeniden inşa ettim. Bu, sıkışıp kaldığım üçüncü yineleme. Buradaki yaklaşımım, sunta kullanmak ve biri diğerinden farklı 2 farklı şekil kesmek ve ardından orta resmi oluşturmak için bunları birbirine yapıştırmak (ve kenetlemek). Bu şekiller, kare ekranın bunun içine oturmasını sağladı ve ardından ekranı kabın içinde yerinde tuttu (resim 3'teki gibi). Bu bana armatür olarak 4 çok küçük vidayı kullanmaya yetecek kadar malzeme verdi - bunu kasanın içine sıkıca sabitlerdim ve sırayla ekranı sabit ve güvenli tutardı. Geriye dönüp baktığımda, bazı uygun montaj seçenekleriyle gelen bir ekran bulurdum (veya o sırada sahip olmadığım bir 3D yazıcı kullanırdım).

Adım 12: Elektroniği Prototipleme

Elektronik Prototipleme
Elektronik Prototipleme
Elektronik Prototipleme
Elektronik Prototipleme

Basit devrelerimi bu şekilde düzenlemek için bir devre tahtası kullanıyorum ve projenin bu bölümünü ana gövde yapısından farklı bir alanda sık sık yaptığım için, onu farklı bir Raspberry PI ile de eşleştirdim. Burada, doğrudan ona bağlanmak ve yerleşik bir IDE çalıştırmak için bana biraz daha fazla güç veren bir model 3 kullandım. Bu, hızlı kod prototiplemeyi benim için biraz daha kolaylaştırdı. Uzaktan bağlanmanın/kodlamanın/hata ayıklamanın birçok başka yolu var, bu sadece burada yapmayı tercih ettiğim şey.

Buradaki tasarım oldukça yalındır, bizde;

  1. Döner kodlayıcı - bu, tıklama yönü ve basma düğmesi ile ilgilenmek için bir topraklama ve bir grup GPIO pini kullanır.
  2. Bir çift basma düğmesi, bunlar her biri tek bir GPIO pini ve ortak bir zemin kullanır
  3. 3 LED'in her biri, patlamalarını önlemek için sıralı bir rezistansa sahiptir, hepsi ortak bir zemine gider, ancak her biri ayrı ayrı ele alınabilmesi için her biri ayrı bir GPIO pinine sahiptir.

Bu bana göstergem için 3 LED, pipboy üzerindeki ekranlar arasında döndürmek için bir döner kodlayıcı ve eylemleri yürütmek için 3 basma düğmesi (biri döner kodlayıcıda ve 2'si ayrı kablolu) verdi. Bu, sığdırabildiğim her şeydi ve ekran bir sürü pin kaplarken, standart bir Pi GPIO düzeninde sahip olduğunuz şeyi hemen hemen tüketiyor. Ancak benim amaçlarım için iyiydi.

İkinci resim, birlikte gittiğim son iç düzeni hemen hemen gösteriyor. Bunu yapının gövdesine aktarmadan önce, bileşenleri sürmenin yollarını test etmek ve her şeyin işe yaradığını doğrulamak için burada biraz zaman harcadım. Tüm kodlar github'da.

Döner kodlayıcılar hakkında bir not. GPIO yüksek/düşük değişikliklerini izlemek ve bunları döner konumlara eşlemek için kendi Döner Kodlayıcı durum makinemi yazmak için çok zaman harcadım. Burada karışık bir başarı elde ettim, "çoğu" vaka için çalışmasını sağladım, ancak başa çıkmak için her zaman uç vakalar ve (de)zıplama vb. Hazır bir kitaplığı kullanmak çok, çok daha kolay ve bunlar için Python için kurulabilecek harika bir kitaplık var. Sonunda, hata ayıklama sorunları için uzun zaman harcamak yerine binanın eğlenceli kısmına odaklanmama izin verdiği için bunu kullandım. Bunun için tüm detaylar kaynak kodunda yer almaktadır.

Raspberry Pi, GPIO ve elektronikte yeniyseniz, yukarıdaki düzeni yapmak için ihtiyacınız olan her şeyde size yol gösteren aşağıdaki öğreticileri şiddetle tavsiye ederim;

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

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

Adım 13: Elektroniği Gövdeye Aktarma

Elektroniği Vücuda Aktarma
Elektroniği Vücuda Aktarma
Elektroniği Vücuda Aktarma
Elektroniği Vücuda Aktarma
Elektroniği Vücuda Aktarma
Elektroniği Vücuda Aktarma

Bir breadboard kullanarak yerleşimi tamamladıktan sonra, bunları pipboy'un gövdesine nasıl monte edeceğimi düşünmeye başlamanın zamanı gelmişti. Gelecekte herhangi bir şeyi tamir etmem veya değiştirmem gerektiğinde tüm elektronik bileşenleri söküp çıkarabilmem için bunu yapmak istediğime karar verdim. Bunu başarmak için tüm alt parçaları dupont konektörler kullanarak takılabilir hale getirmeye karar verdim.

Bazı uzatma kablolarına lehimlediğim ve uçlarını yalıtmak için tel sargı kullandığım düğmeler için bu, bunları gövdeden söküp takmamı sağladı (örn. test için, sonra boyama vb. için). Döner Kodlayıcı zaten çift konektörleri kabul edebilecek pimlere sahipti, bu yüzden bazı kabloları doğru uzunlukta yapmam gerekiyordu.

LED'ler biraz daha fazla iş aldı - bunun için, LED'leri monte etmek için çıkarılabilir bir panel yapmak için (sığdırmak için kesilmiş) biraz hurda plastik kullanmaya karar verdim. Sonra onları sıcak yapıştırdım ve dirençleri ve telleri lehimledim. Bu, takıp çıkarabileceğim bir sökme ünitesi yaptı ve boyama ile bitirmeyi kolaylaştırdı.

Lehimlememin korkunç olduğuna dikkat edin, bu yüzden bunu basit tuttum ve çok ayrıntılı/ince bir şeyden kaçındım. Son resimde de görebileceğiniz gibi çok küçük geniş tahtalarım (5x5) vardı, bunlardan birini içine monte edilmiş olarak GPIO'ya/GPIO'dan her şeyi bağlamak için bir panel sağlamak için kullandım. Özellikle bu, kullanabileceğim ve çok sayıda topraklama kablosunun Pi'ye geri dönmesini önleyebileceğim ortak bir topraklama rayı oluşturmak için faydalı oldu.

Daha sonra kabloları Pi'ye beslemek ve GPIO'ya bağlamak için kabın içine çeşitli delikler açtım. Bu tasarım, gerekirse her şeyi çıkarmamı sağladı (yapıyı tamamlarken birkaç kez yaptığım bir şey).

Adım 14: Sığdırmanın İnce Ayarı

Uyumun İnce Ayarlanması
Uyumun İnce Ayarlanması
Uyumun İnce Ayarlanması
Uyumun İnce Ayarlanması

Bu noktada bazı "uyum" sorunlarıyla karşılaştım. İlk olarak, kablolama için dupont konektörlerin kullanılması, yeterli yükseklik boşluğu olmadığı için, ekran şapkası yerindeyken pimlere takmalarının zor olduğu anlamına geliyordu. Bunu (bu proje için gerçekten satın aldığım birkaç şeyden biri) küçük bir GPIO pin genişletici satın alarak çözdüm, böylece ekran şapkasını daha yükseğe oturtabilir ve dupont konektörlerini kullanarak kalan GPIO pinlerine erişmek için yer bırakabilirdim.

Ayrıca kabın içinde bir miktar yan dolgu yapmak için bazı küçük köpük paspas parçaları kestim, bu Pi + Ekranın doğru yere oturmasına ve hareket etmesini engellemeye yardımcı oldu.

Adım 15: Döner Kodlayıcıyı Geriye Döndürme

Döner Kodlayıcıyı Geriye Döndür
Döner Kodlayıcıyı Geriye Döndür

Döner kodlayıcılar genellikle (benimki gibi) güzel, parlak, modern bir "hi fi" tarzı düğmeyle gelir. Bu, yapı için tamamen karakter dışıydı, bu yüzden başka bir şey bulmam gerekiyordu. Rastgele parça kutumda uzun zaman önce kırdığım bir matkaptan eski bir dişliye rastladım. Bu iyi görünüyordu, ancak döner kodlayıcıya uymuyordu. Buradaki çözümüm, döner kadrana uyan bir tane bulana kadar çeşitli dübelleri denemek ve daha sonra, matkap dişlisini döner kodlayıcıya daha uygun bir tema olarak yerleştirmek için bir "iç bilezik" olarak kullanabilmem için şekle sokmaktı. kontrol.

Adım 16: İç Astar

Astar
Astar
Astar
Astar

Daha fazla köpük yer karosu! Bu sefer, daha rahat oturması için (çok gevşek olmadan) yumuşak bir astar oluşturmak için onları kullandım. Köpükten bir delik açarak Pi kabının yaptığı "topakların" bir kısmını da emebildim. Genel olarak bu, onu çok daha giyilebilir hale getirdi. Bu fotoğraflarda gösterilmedi, ancak ana gövdeden biraz daha büyük yaptım, böylece daha sonra boyadığım uçlarda görünür oldu ve hepsi bitmiş ürüne biraz kontrast ve ilgi katmaya yardımcı oldu.

Adım 17: Ayrıntı Ekleme

Detay Ekleme
Detay Ekleme
Detay Ekleme
Detay Ekleme

Biraz dekorasyon eklemeye başlamanın ve daha ilginç hale getirmenin zamanı geldi. Her şeyden önce, biraz görsel ilgi uyandırmak için bir yüz boyunca bazı hurda plastik şeritler ekledim. Sonra bazı terminallere bazı sahte kablolar ekledim ve onları gövdede açtığım bir deliğe ittim. Bunların hepsi daha sonra farklı renklere boyandı.

Adım 18: Vücut Yapısını Boyama ve Bitirme

Gövde Yapısını Boyama ve Bitirme
Gövde Yapısını Boyama ve Bitirme
Gövde Yapısını Boyama ve Bitirme
Gövde Yapısını Boyama ve Bitirme
Gövde Yapısını Boyama ve Bitirme
Gövde Yapısını Boyama ve Bitirme

Eski ve iyi kullanılmış olması gerektiği gibi, bozulmamış bir yüzeyle pek ilgilenmedim (aslında bir noktada geri gelebilir ve üzerinde daha da fazla hava koşullarına maruz kalabilirim). Ama rastgele çöplerden topallanmayan tutarlı ve eksiksiz bir nesne gibi görünmesini istedim (tam olarak böyle olmasına rağmen). Çok sayıda zımparalama, doldurma yinelemesinden geçtim (miliput, plastik için tercih ettiğim dolgu maddesidir) ve tekrarladım. Ardından, tüm bağlantıların düzeltilmesine yardımcı olmak için birkaç kat astar ve boya. Sonra daha fazla zımpara, daha fazla dolgu ve daha fazla boyama.

Memnun olduğum vücuda bir bakış ve his edindikten sonra, biraz detay eklemeye başladım. Onlara daha fazla tel örgü hissi vermek için kontrollerdeki ızgaralarda ovma ve cila kullandım. Ayrıca akrilik kullanarak küçük boya detayları da ekledim.

Rastgele çıkartma koleksiyonuma baktım ve efekti tamamlamak için birkaç tane ekledim. Daha sonra, temizlenmesi zor olan ulaşılması zor alanlara biraz kir ve kir eklemek için bazı karışık boyalarla hava aşındırıcı bir yıkama yaptım. Bu, şu anda biraz fazla incelikli olabilir ve daha sonra geri gelip biraz daha ekleyebilirim.

Adım 19: Kodlama

kodlama
kodlama

Bu projeye yönelik tutkumun bir kısmı, gerçek bir pipboy gibi tepki vermesini sağlamaktı - ve benim için bu oyunun en ikonik kısmı, kadranı farklı ekranlar arasında çevirmek için çevirmek. Bunu başarmak için, bir dizi ekranı görüntüleyebilecek ve aralarında gezinmenizi sağlayacak bir pipboy kullanıcı arayüzü yazmaya karar verdim. Ekranların içeriğini kolayca değiştirebileceğim ve gerçekten de ekran ekleyebileceğim/kaldırabileceğim bir şey yapmak istedim.

Raspberry Pi, GPIO vb. için mükemmel destek nedeniyle bunu Python'da yazmayı seçiyorum. Python, aşina olduğum diller listemde oldukça düşük, bu yüzden bu benim için büyük bir öğrenme eğrisiydi ve kodun çoğu sonuç olarak dağınık. Burada yapmak istediğim her şeyi tamamen bitirmediğim için zaman içinde bunu güncelleyeceğim - ancak tüm ana kavramlar orada olduğu için şimdi paylaşmak için yeterince yakın.

UI kodu için tasarımım oldukça basit, ekranı ayarlayan, GPIO'yu yapılandıran, ekranları yükleyen ve sonsuz bir güncelleme döngüsüne giren, kullanıcı olaylarını bekleyen ve ekranı gerektiği gibi güncelleyen bir ana Python betiği var. Ayrıca, UI ekranlarını önceden oluşturmaya yardımcı olan çeşitli destek komut dosyaları vardır.

Kullanılan ana kütüphaneler:

  • pygame: Bunu, keyfi grafikler çizmeme, görüntüleri, yazı tiplerini değiştirmeme, tam ekrana geçmeme vb. izin verdiği için kullanıcı arayüzünü çalıştırmak için motor olarak kullanıyorum.
  • pyky040: Bu, döner kadranın kullanımını sağlıyor ve bana çok zaman kazandırdı (bunu serbest bıraktığı için Raphael Yancey'e çok teşekkürler.
  • RPi. GPIO: İyi bir GPIO sürüşü için burada birkaç seçenekle oynadım, ancak bu bana özellikle döner kodlayıcıyı sürmek için başka bir 3.3v olarak yedek bir GPIO kullanmak gibi şeylerde istediğim doğru esneklik seviyesini verdi.
  • gürültü: Perlin gürültüsü oluşturmak için, radyo ekranı için daha doğal görünen rastgele bir dalga formu oluşturmama izin vermek için
  • sıra: Dönen kodlayıcıdan olayların zamanlaması ve LCD ekranın (çok) yavaş yenileme hızı ile ilgili sinir bozucu bir hatayla karşılaştım. Sonunda bunu çözmenin yolu, döner kodlayıcıdan gelen olayları sıraya almak ve ekran yenilenirken bunları birer birer almaktı.
  • os, sys, threading, time: tümü standart python işlevleri için kullanılır

Ekran işleme tasarımı hakkında bir not. Ekranlar, kod içindeki adların listesi olarak tanımlanır. Listedeki her giriş, kendisiyle ilişkilendirilmiş bir-p.webp

Bu dosyaların içeriği başka bir yerde (elle veya diğer komut dosyaları tarafından) oluşturulur; bunların çıktısı-p.webp

Birkaç şeyin kodlandığı tuhaf istisnalar vardır - örneğin, gerçek zamanlı olarak hesaplanan ve canlandırılan rastgele radyo ekranının dalga biçimi gibi.

Bir benzetme yardımcı olursa, kullanıcı arayüzü tasarımını son derece kaba ve basit bir web tarayıcısı olarak düşünün - her "ekran", yalnızca bir png, bir txt dosyası veya ikisinin birleşiminden oluşabilen gerçekten basit bir web sayfası gibidir. Bunların içeriği bağımsızdır ve bir tarayıcının bir web sayfası çizeceği gibi UI tarafından sadece çizilir.

Burada kullandığım ana kütüphanelere bağlantılar:

www.pygame.org/news

pypi.org/project/pyky040/

pypi.org/project/noise/

Adım 20: İstatistikler Ekranı

İstatistikler Ekranı
İstatistikler Ekranı

Klasik pipboy siluet istatistik ekranı olmadan hiçbir pipboy tamamlanmış sayılmaz. Bunun için bir arkadaşım, sadece yer tutucu olarak gösterdiğim statik bir-p.webp

Adım 21: Envanter Ekranı

Envanter Ekranı
Envanter Ekranı

Pi projelerinde her zaman yararlı olan bir şey, DHCP'li IP adresi gibi temel bilgileri görüntülemenin bir yolunun olmasıdır. Envanter ekranını Pi "envanterinin" bir görüntüsü olarak aşırı yüklemeye karar verdim - hangi CPU, bellek, IP adresi vb. Bu bilgiyi toplamak için küçük bir Linux betiği yazdım ve bunu sadece uygun şekilde adlandırılmış bir metin (.txt) dosyasına yeniden yönlendirdim ve UI sisteminin ardından alıp görüntüledim. Bu şekilde, eğer farklı bir konumda olursam, komut dosyasını çalıştırabilir ve güncel IP adresi vb. ile yeni bir.txt dosyası alabilirim.

Adım 22: Harita Ekranı

Harita Ekranı
Harita Ekranı

Bu ekran, üzerinde çalışılması gereken daha karmaşık ekranlardan biriydi. Raspberry Pi 0 bir GPS modülü ile gelmiyor, ancak Harita'nın Pi'nin bulunduğu yerde bir geçerliliği olmasını istedim. Buna benim çözümüm, Pi IP adresini çeken, yaklaşık bir konum aramak için https://ipinfo.io kullanan ayrı bir komut dosyasıdır. JSON yanıtı yakalanır ve ardından yaklaşık konum için bir openstreetmap.org döşemesi çekebilmek için koordinatları dönüştürürüm.

Fayanslar birden fazla renkte çıkıyor, ancak Pipboy'un görünümüne ve hissine uyması için yeşil ölçekli bir görüntü istedim ve tam olarak buna benzer bir tane bulamadım, bu yüzden renkleri yeniden eşlemek için Python'da yeşil ölçekli bir filtre yazdım openstreetmap döşemesinin ve ardından yeni görüntüyü bir-p.webp

Yukarıdaki işlem sırasında yaklaşık konum ve koordinatlarla bir metin dosyası oluşturulur ve harita döşemesi-p.webp

Adım 23: Veri Ekranı

Veri Ekranı
Veri Ekranı

Bu, boyutlandırmayı/düzeni test etmeye yardımcı olmak için görüntülenen yalnızca bir test kartıdır (başka bir python betiği tarafından oluşturulur ve bir-p.webp

Adım 24: Radyo Ekranı

Radyo Ekranı
Radyo Ekranı

Harita ekranının yanı sıra gerçekten çok işime yarayan diğer ekran bu. Bu, animasyonla oynadığım tek ekran - ve çoğunlukla amaçlandığı gibi çalışıyor, ancak performans hala LCD ekran yenileme hızlarıyla ilgili bir sorun. Ekranın yapısı, rastgele seçilmiş bazı radyo adlarını içeren bir metin dosyasıdır (bunlar yalnızca keyfi dizelerdir ve ekranda bir liste sunmaktan başka bir şey yapmazlar), grafik alanının eksenini içeren bir-p.webp

Bu, pygame döngüsünün her döngüde gerçek bir iş yaptığı tek ekrandır, yeni dalga biçimini hesaplamak, ekranın bu bölümdeki bölümünü silmek ve yeniden çizmek zorundadır.

Adım 25: Son Düşünceler

Image
Image
Son düşünceler
Son düşünceler

Bu, muhtemelen birçok farklı konsept ve beceri gerektiren, yaptığım en zorlu yapıdır, ancak sonuç olarak işe yarayan gerçek şeyle birlikte en zevkli olanlardan biridir. Hala daha teknik notlarımdan bazılarını ve kodun github deposunu toplama sürecindeyim. Bunların hepsini kısa süre içinde kullanıma sunacağım, bu yüzden onları yazıya eklemek için zamanım olduğunda daha fazla ayrıntı ve bilgi için yakında tekrar gelin.

Böyle bir şey yapmaya başlarsanız, sonuçları görmeyi çok isterim ve herhangi bir sorunuz varsa lütfen bizimle iletişime geçmekten çekinmeyin; yardım etmek istediğiniz herhangi bir adımda daha fazla bilgi eklemeye çalışacağım.

Adım 26: Github'da Kod Açma

Github'da Kod Açma
Github'da Kod Açma

Sonunda kodu Github'da açmaya karar verdim. Bu bağlantıda mevcut:

Önerilen: