Cuprins:

Pipboy construit din resturi: 26 de pași (cu imagini)
Pipboy construit din resturi: 26 de pași (cu imagini)

Video: Pipboy construit din resturi: 26 de pași (cu imagini)

Video: Pipboy construit din resturi: 26 de pași (cu imagini)
Video: Make Your Own Fallout 4 Pip-Boy! - DIY Prop Shop 2024, Iulie
Anonim
Image
Image
Construind Inima Pipboy
Construind Inima Pipboy

Acesta este Pipboy-ul meu de lucru, construit din gunoi aleatoriu din garaj și un raid al stocului meu de componente electronice. Mi s-a părut o construcție dificilă și mi-a luat câteva luni de muncă, așa că nu aș clasifica acest lucru drept un proiect complet pentru începători. Abilitățile necesare includ prelucrarea plasticului și lemnului, electronică și codificare. Corpul este construit din diverse bucăți de resturi de plastic tăiate și sudate împreună. Am folosit un Raspberry Pi 0 ca microcontroler, cu un antet de afișaj montat pe o parte a pinilor GPIO. Pinii rămași sunt utilizați pentru a conduce LED-uri și pentru a conecta butoane / comenzi. Am scris o interfață de utilizator în stil "Pipboy" cu câteva ecrane demo în Python pentru a finaliza proiectul.

Obiectivele mele pentru proiect au fost:

  • Trebuia să funcționeze - adică necesar pentru a avea un afișaj care să conțină lucruri
  • Am vrut să aibă un „cadran” pentru a selecta diferitele ecrane, așa cum mi-a ieșit mereu în evidență, ca parte iconică a interfeței de utilizare din Fallout
  • Întreaga construcție trebuia finalizată folosind lucruri pe care le aveam deja în garaj sau în biroul meu (acest lucru nu a fost realizat în totalitate, dar am ajuns aproape - peste 90% din acestea au fost găsite obiecte sau lucruri pe care le aveam deja)
  • Trebuie să fie purtabil

Un scop pe care nu l-am avut a fost să fac din el o replică exactă a unuia dintre modelele din joc - prefer să construiesc lucruri „în stilul” unui lucru, întrucât îmi oferă spațiu pentru a adapta junk-urile aleatorii pe care le găsesc și îmi permite să fiu ceva mai creativ. În cele din urmă, da, știu că le puteți cumpăra, dar nici asta nu era punctul;)

Provizii

Provizii

  • Țeavă cu alezaj larg (cum ar fi o bucată de țeavă de scurgere)
  • Resturi de plastic (atât pentru crearea corpului, cât și pentru scopuri decorative)
  • Recipient mic
  • Covor de pardoseală din spumă
  • Raspberry Pi
  • Afișaj de 3,5"
  • Codificator rotativ KY040
  • 3x LED-uri
  • 2 butoane
  • Powerbank
  • Cablare
  • Șuruburi, lipici, vopsele, materiale de umplutură etc

Instrumente

  • Dremmel
  • Multi-instrument cu dispozitiv de tăiere și șlefuire
  • Burghiu
  • Dosare
  • Ciocan de lipit
  • Pistolul cu lipici fierbinte
  • Șurubelnițe
  • Cuțit ascuțit
  • A văzut

Pasul 1: Construirea inimii Pipboy

Construind Inima Pipboy
Construind Inima Pipboy

Primul lucru pe care trebuia să-l fac a fost să mă asigur că pot obține un afișaj și un microcontroler într-un factor de formă cu care aș putea lucra. Mi s-a întâmplat să am un afișaj de 3,5 care se așează ca un HAT pe pinii GPIO ai unui Raspberry PI, așa că am decis să folosesc acest lucru. L-am asociat cu un Raspberry Pi 0 și m-am asigurat că funcționează OK, există un câțiva pași pentru ca Linux să recunoască afișajul pe care trebuie să îl parcurgeți.

După cum puteți vedea în a doua imagine, am adăugat o mică platformă de carton / spumă pe care am lipit-o de carcasă pentru a ajuta la susținerea afișajului. Am făcut acest lucru, deoarece știam că voi gestiona foarte mult această parte și nu am vrut să rup pinii sau afișajul din lipsă de suport. În cele din urmă, acest lucru a fost înlocuit, dar a fost un pic bun de protecție suplimentară în timpul procesului de construire.

De asemenea, merită remarcat în acest moment, că mai târziu în construcție am întâmpinat probleme de performanță cu această configurare - predominant rata de reîmprospătare a interfeței dintre Pi și afișaj, voi intra în acest lucru mai târziu în construcție, dar dacă am a făcut acest lucru din nou, aș putea lua în considerare diferite hardware aici.

Iată câteva linkuri utile pentru aceasta:

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…

Voi include, de asemenea, în github-ul asociat cu acesta câteva note despre ceea ce am făcut de fapt pentru ca acest lucru să funcționeze (deși din citirea subiectului există o mare variabilitate în modul în care funcționează acest lucru pentru instanțe / drivere specifice, astfel încât mila dvs. poate varia).

Pasul 2: Prototip de carton

Prototip de carton
Prototip de carton
Prototip de carton
Prototip de carton
Prototip de carton
Prototip de carton

Am găsit niște jgheaburi / conducte vechi pe care le puteam folosi pentru corp, dar trebuia să vin cu un design pentru zona ecranului real și panoul de control. Pentru aceasta tocmai am făcut machete de carton și am folosit bandă de mascare pentru a le fixa la țeavă. Primul a fost o „cutie” simplă, dar s-a simțit prea simplu, așa că am modificat-o pentru a face zona ecranului mai interesantă și am adăugat o zonă separată a panoului de control. Acest lucru a devenit mai mult sau mai puțin designul final (au fost câteva modificări după cum veți vedea, dar aproape).

Pasul 3: De la prototip la șablon

De la prototip la șablon
De la prototip la șablon
De la prototip la șablon
De la prototip la șablon
De la prototip la șablon
De la prototip la șablon

Acum aveam un prototip cu care eram mulțumit, puteam aplatiza cartonul și să-l transform într-un șablon pe care l-am transpus apoi într-o parte dintr-o carcasă veche pentru PC pe care o loveam. Orice plastic asemănător ar funcționa, foloseam doar gunoi pe care trebuia să-l dau. Odată marcată, am reușit apoi să decupez bucățile, astfel încât să pot începe să asamblez corpul principal. Un sfat util aici, pentru a ușura atât marcarea, cât și tăierea ulterioară a plasticului, am acoperit zonele pe care ar trebui să le tai mai întâi cu bandă de mascare, ambele mi-au oferit o modalitate mai ușoară de a desena șablonul pe plastic, și ceva care să împiedice alunecarea discului de tăiere în timp ce făceam primele tăieturi.

Pasul 4: Adăugați carcasă pentru ecran și Pi

Adăugați carcasă pentru ecran și pi
Adăugați carcasă pentru ecran și pi
Adăugați carcasă pentru ecran și pi
Adăugați carcasă pentru ecran și pi

Am vrut ca colțurile zonei ecranului să fie curbate și am nevoie de ceva pentru a ține efectiv Pi și afișarea - soluția mea a fost să folosesc un mic recipient de plastic pe care îl aveam. Am tăiat o gaură din partea superioară a corpului și am lipit recipientul prin aceasta. Apoi am lipit toate părțile împreună. Am folosit superglue aici cu bicarbonat de sodiu copios pentru a ajuta la întărirea sudurilor. Mai târziu am umplut și am depus / șlefuit totul pentru a-l ordona și pentru a-i da o senzație mai „mulată”.

Pasul 5: Repetați pentru Panoul de control

Repetați pentru Panoul de control
Repetați pentru Panoul de control
Repetați pentru Panoul de control
Repetați pentru Panoul de control
Repetați pentru Panoul de control
Repetați pentru Panoul de control

Apoi, am făcut exact același șablon de transpunere, tăiere și lipire pentru a construi carcasa panoului de control.

Pasul 6: Decupați conducta

Decupați conducta
Decupați conducta

După cum puteți vedea containerul pe care intenționez să îl folosesc pentru a găzdui principalele componente electronice, acum stă mândru în interiorul plasticului negru, aceasta înseamnă că trebuie să fac o deschidere în țeavă pentru ca acesta să se poată amplasa. Am folosit din nou bandă de mascare pentru a mă alinia acolo unde doream să tai și am tăiat un pătrat al țevii, astfel încât să se potrivească piesele.

Pasul 7: Rama

Rama
Rama
Rama
Rama

O provocare pe care mi-am forțat-o accidental a fost să încerc să vin cu o ramă care să umple zona din jurul ecranului până la marginile containerului. Din păcate, modul în care este realizat afișajul, de asemenea, nu are nimic util în designul său (cum ar fi găuri sau orice altceva) care să ajute la montarea acestuia, astfel încât rama a trebuit să țină afișajul în poziție. Prima mea încercare (văzută aici) a fost un amestec de plastic și spumă. În cele din urmă am ajuns să repet it de mai multe ori și a ajuns să fie una dintre cele mai provocatoare părți ale construcției. Înrăutățită de toleranțele mici și natura delicată atât a cadrului în sine, cât și a afișajului.

Pasul 8: Testarea bateriei

Testarea bateriei
Testarea bateriei
Testarea bateriei
Testarea bateriei
Testarea bateriei
Testarea bateriei

În acest moment, m-am îndreptat spre cum să fac acest lucru să ruleze independent de un USB furnizat de rețea. Am testat diverse baterii și am constatat că afișajul Raspberry Pi + nu a atras de fapt atâta energie și a fost perfect fericit să rulez chiar și pe unul dintre pachetele mele de baterii mai mici (un cadou gratuit de la o expoziție comercială). Acest lucru a fost cu adevărat norocos, deoarece pachetul se potrivea perfect într-un gol din interiorul construcției (fotografii ulterioare). Acum putem lipi temporar componentele principale ale corpului împreună și vom obține prima testare a acestuia alimentată pe brațul meu!

Pasul 9: Testarea potrivirii

Testarea potrivirii
Testarea potrivirii
Testarea potrivirii
Testarea potrivirii
Testarea potrivirii
Testarea potrivirii

Aici puteți vedea unde am modificat conducta centrală în continuare pentru a permite accesul la partea inferioară a componentelor. De asemenea, puteți vedea cum am avut noroc cu bateria care se potrivește frumos într-o cavitate de o parte a containerului Pi. În cele din urmă a început procesul de curățare a legăturilor, de umplere, șlefuire și a făcut un strat de grund de testare pentru a obține o imagine a aspectului finit (știam în această etapă că voi șlefui asta de mai multe ori și aproape tot grundul respectiv va merge, dar am vrut să simt cum ar arăta).

Pasul 10: Adăugați controale și detalii

Adăugați controale și detalii
Adăugați controale și detalii
Adăugați controale și detalii
Adăugați controale și detalii
Adăugați controale și detalii
Adăugați controale și detalii

Am vrut ca o serie de LED-uri roșii / galbene / verzi să formeze un indicator, precum și un cadran rotativ și cel puțin 2 butoane. Toate acestea au fost montate pe secțiunea panoului de control - pur și simplu un caz de găurire a tuturor găurilor potrivite. De asemenea, am început să adaug mici bucăți de componente de plastic restrâns (în esență, setul de kit) pentru a adăuga detalii și mai mult interes corpului și panoului de control.

Pasul 11: Reconstruirea lunetei nr. 3

Reconstruirea lunetei nr. 3
Reconstruirea lunetei nr. 3
Reconstruirea lunetei nr. 3
Reconstruirea lunetei nr. 3
Reconstruirea lunetei nr. 3
Reconstruirea lunetei nr. 3

După cum am menționat mai devreme, m-am luptat cu rama pentru această construcție și am reconstruit-o de mai multe ori. Aceasta este a treia iterație cu care am rămas. Abordarea mea aici în ceea ce privește utilizarea panoului dur și tăierea a două forme diferite, unul gânditor decât celălalt, apoi le-am lipit (și prins) împreună pentru a forma imaginea din mijloc. Aceste forme au permis afișajul pătrat să stea în interiorul acestuia și apoi a ținut afișajul în poziție în interiorul containerului (ca în imaginea 3). Acest lucru mi-a oferit suficient material pentru a folosi 4 șuruburi foarte mici ca dispozitive - pe care le-am folosit pentru a fixa acest lucru ferm în interiorul carcasei și, la rândul său, va menține ecranul stabil și sigur. Retrospectiv, aș găsi un afișaj care vine cu câteva opțiuni decente de montare (sau aș folosi o imprimantă 3D - pe care nu o aveam în acel moment).

Pasul 12: Prototiparea electronice

Protejarea electronice
Protejarea electronice
Protejarea electronice
Protejarea electronice

Folosesc o placă de calcul pentru a-mi așeza circuitele simple astfel, și așa cum fac adesea această parte a proiectului într-un spațiu diferit de construcția corpului principal, l-am asociat și cu un Raspberry PI diferit. Aici am folosit un model 3, care mi-a dat ceva mai multă putere pentru a mă conecta direct la el și a rula un IDE la bord. Acest lucru tocmai mi-a făcut mai ușoară realizarea de prototipuri rapide de cod. Există o mulțime de alte modalități de conectare / cod / depanare de la distanță, aceasta este doar dorința pe care am preferat să o fac aici.

Designul de aici este destul de simplu, avem;

  1. Codificator rotativ - acesta utilizează o masă și o grămadă de pini GPIO pentru a face față direcției de clic și butonul de apăsare.
  2. Pereche de butoane, acestea folosesc pur și simplu un singur pin GPIO fiecare și un teren comun
  3. 3 LED-uri, fiecare cu un rezistor în linie pentru a le opri să apară, toate mergând la un teren comun, dar cu câte un pin GPIO individual, astfel încât fiecare să poată fi adresat individual.

Acest lucru mi-a dat 3 LED-uri pentru indicatorul meu, un codificator rotativ pentru a se roti prin ecranele de pe pipboy și 3 butoane pentru acțiuni (unul pe codorul rotativ și 2 cablate separat). A fost cam tot ce mi se potrivea și, cu ecranul ocupând o mulțime de pini, consumă destul de mult ceea ce aveți pe un aspect Pi GPIO standard. Cu toate acestea, a fost bine pentru scopurile mele.

A doua imagine arată destul de mult aspectul intern final cu care am mers. Am petrecut ceva timp aici testând modalități de conducere a componentelor și verificând toate lucrurile înainte de a transpune acest lucru în corpul construcției. Tot codul este în github.

O notă despre codificatoarele rotative. Mi-am petrecut o grămadă de timp scriind propria mașină de stare a codificatorului rotativ pentru a urmări modificările GPIO ridicate / mici și pentru a le mapa în poziții rotative. Am avut un succes mixt aici, am reușit să funcționeze pentru „majoritatea” cazurilor, dar există întotdeauna cazuri marginale și (de) sărituri etc. pentru a le rezolva. Este mult mai ușor de utilizat o bibliotecă gata făcută și există una excelentă pentru acestea disponibile pentru instalare pentru Python. Am folosit asta în cele din urmă, deoarece mi-a permis să mă concentrez pe partea distractivă a construirii, mai degrabă decât să petrec vârstele depanând probleme. Toate detaliile pentru aceasta sunt incluse în codul sursă.

Dacă sunteți nou în Raspberry Pi, GPIO și electronice, vă recomand cu tărie următoarele tutoriale care vă vor ajuta să parcurgeți tot ce aveți nevoie pentru a face aspectul de mai sus;

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

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

Pasul 13: Transpunerea electronicii în corp

Transpunerea electronicii în corp
Transpunerea electronicii în corp
Transpunerea electronicii în corp
Transpunerea electronicii în corp
Transpunerea electronicii în corp
Transpunerea electronicii în corp

După ce am finalizat aspectul folosind o placă de calcul, a venit timpul să mă gândesc cum să le montez în corpul pipboy-ului. Am decis că vreau să o fac astfel încât să pot demonta și scoate toate componentele electronice în cazul în care ar trebui să repar sau să schimb ceva în viitor. Pentru a realiza acest lucru, am decis să fac toate sub-părțile conectabile utilizând conectori dupont.

Pentru butoanele pe care le-am lipit pe unele fire de prelungire și am folosit folie de sârmă pentru a izola capetele, acest lucru mi-a permis să le asamblu și să le demontez de pe corp (de exemplu, pentru testare, apoi vopsire etc.). Codificatorul rotativ avea deja pini care ar putea accepta conectori dupont, așa că am avut nevoie doar să fac niște fire de lungimea potrivită.

LED-urile au lucrat puțin mai mult - pentru aceasta, am decis să folosesc un pic de resturi de plastic pe care le aveam (tăiate pentru a se potrivi) pentru a face un panou detașabil în care să monteze LED-urile. Apoi le-am lipit la cald și am lipit rezistențele și firele. Acest lucru a făcut o unitate de îndepărtare pe care am putut să o montez și să o îndepărtez și a facilitat vopsirea și finisarea.

Rețineți că lipirea mea este teribilă, așa că am păstrat acest lucru simplu și am evitat orice lucru prea detaliat / fin. În imaginea finală puteți vedea că am avut și niște tablouri late foarte mici (5x5), am folosit una dintre acestea montată în interior pentru a oferi un panou care să conecteze totul la / de la GPIO. În special, acest lucru a fost util pentru a crea o șină comună la sol pe care aș putea să o folosesc și pentru a evita să am o mulțime de fire de masă care să serpileze înapoi la Pi.

Am tăiat apoi diferite găuri în container pentru a alimenta firele prin Pi și pentru a mă conecta la GPIO. Acest design mi-a permis să completez totul dacă am nevoie (lucru pe care l-am făcut de mai multe ori în timp ce finalizam construcția).

Pasul 14: Reglarea fină a ajustării

Reglarea fină a ajustării
Reglarea fină a ajustării
Reglarea fină a ajustării
Reglarea fină a ajustării

În acest moment am întâlnit câteva probleme „potrivite”. În primul rând, utilizarea conectorilor dupont pentru cablare a însemnat că a fost greu să-i faci să se încadreze pe pinii cu pălăria afișajului, deoarece nu exista suficient spațiu de înălțime. Am rezolvat acest lucru cumpărând (acesta este unul dintre puținele lucruri pe care le-am cumpărat de fapt pentru acest proiect) un mic extensor GPIO, astfel încât să pot avea pălăria de afișare așezată mai sus și să las spațiu pentru a accesa pinii GPIO rămași folosind conectori dupont.

De asemenea, am tăiat câteva bucăți mici de covor de spumă pentru a face niște căptușeală laterală în interiorul containerului, ceea ce a ajutat la așezarea afișajului Pi + în locul potrivit și la oprirea deplasării.

Pasul 15: Faceți retro codorul rotativ

Retro Up Encoder rotativ
Retro Up Encoder rotativ

Codificatoarele rotative vin adesea (la fel ca și ale mele) cu un buton modern frumos strălucitor „hi fi”. Acest lucru a fost complet lipsit de caracter pentru construcție, așa că a trebuit să vin cu altceva. În cutia mea de piese aleatorii am dat peste o roată veche dintr-un burghiu pe care l-am rupt cu mult timp în urmă. Arăta bine, dar nu se potrivea codificatorului rotativ. Soluția mea aici a fost să încerc diverse prize de perete până când am găsit unul care se potrivește cu cadran rotativ, apoi l-am tăiat în formă, astfel încât să îl pot folosi ca „guler interior” pentru a așeza roata dințată pe codorul rotativ ca o temă mai potrivită Control.

Pasul 16: Căptușeala interioară

Căptușeală interioară
Căptușeală interioară
Căptușeală interioară
Căptușeală interioară

Mai multe gresie din spumă! De data aceasta, le-am folosit pentru a construi o căptușeală moale pentru a face o potrivire mai confortabilă (fără a fi prea slabă). Prin tăierea unei găuri din spumă am reușit să absorb și o parte din „bucățica” pe care o face recipientul pentru Pi. În general, acest lucru l-a făcut mult mai ușor de purtat. Nu este prezentat în aceste fotografii, dar l-am făcut puțin mai mare decât corpul principal, astfel încât să fie vizibil la capete, pe care l-am pictat ulterior și totul a ajutat la adăugarea unui pic de contrast și interes pentru elementul finit.

Pasul 17: Adăugarea detaliilor

Adăugarea detaliilor
Adăugarea detaliilor
Adăugarea detaliilor
Adăugarea detaliilor

E timpul să începeți să adăugați o decorare și să o faceți mai interesantă. În primul rând am adăugat câteva benzi de plastic de-a lungul unei fețe pentru a-i oferi un pic de interes vizual. Apoi am adăugat câteva fire false la unele terminale și le-am împins într-o gaură pe care am forat-o în corp. Toate acestea au fost pictate mai târziu în diferite culori.

Pasul 18: Vopsirea și finisarea corpului

Vopsirea și finisarea corpului
Vopsirea și finisarea corpului
Vopsirea și finisarea corpului
Vopsirea și finisarea corpului
Vopsirea și finisarea corpului
Vopsirea și finisarea corpului

Nu am fost prea preocupat de un finisaj curat - așa cum se presupune că este oricum vechi și bine folosit (de fapt, pot să mă întorc și să fac și mai multă rezistență la el la un moment dat). Dar mi-am dorit să arate ca un obiect consistent și complet care nu a fost împiedicat împreună de la gunoi aleatoriu (chiar dacă exact așa a fost). Am trecut prin numeroase iterații de șlefuire, umplere (miliputul este umplutura mea preferată pentru plastic) și repet. Apoi, mai multe straturi de grund și vopsea pentru a ajuta la netezirea tuturor îmbinărilor. Apoi mai mult șlefuire și mai mult umplutură și mai multă pictură.

Odată ce am arătat corpul cu care am fost fericit, am început să adaug câteva detalii. Am folosit frecare și șlefuire pe grătarele de pe comenzi pentru a le da o senzație mai mare de plasă de sârmă. Am adăugat și mici detalii de vopsea ici și colo folosind acrilice.

Am săpat în colecția mea de autocolante aleatorii și am adăugat câteva pentru a termina efectul. Apoi am făcut o spălare cu niște vopsele amestecate pentru a adăuga murdărie și murdărie în zonele greu accesibile, care ar fi greu de curățat. Poate că este un pic prea subtil în acest moment și s-ar putea să mă întorc și să mai adaug ceva mai târziu.

Pasul 19: Codificare

Codificare
Codificare

O parte din ambiția mea pentru acest proiect a fost să-l fac să reacționeze ca un pipboy propriu-zis - și pentru mine cea mai iconică parte a acestui joc este să rotesc cadranul pentru a răsuci între diferite ecrane. Pentru a realiza acest lucru, am decis să scriu o interfață de utilizator pipboy care să poată afișa o serie de ecrane și să vă permită să derulați între ele. Am vrut să fac din conținutul ecranelor ceva ce aș putea schimba cu ușurință și, într-adevăr, să pot adăuga / elimina ecrane.

Am ales să scriu acest lucru în Python datorită suportului excelent pentru Raspberry Pi, GPIO etc. dezordonat ca urmare. Voi actualiza acest lucru de-a lungul timpului, deoarece nu am terminat complet tot ce am vrut să fac aici - dar este suficient de aproape pentru a le împărtăși acum, deoarece toate conceptele principale sunt acolo.

Proiectarea mea pentru codul UI este destul de simplă, există un script Python principal care configurează afișajul, configurează GPIO, încarcă ecranele și intră într-o buclă infinită de actualizare, așteaptă evenimentele utilizatorului și actualizează afișajul după cum este necesar. În plus, există diverse scripturi de asistență care ajută la generarea ecranelor UI înainte de timp.

Principalele biblioteci utilizate:

  • pygame: îl folosesc ca motor pentru a rula interfața de utilizare, deoarece mi-a permis să desenez grafică arbitrară, să manipulez imagini, fonturi, să merg pe ecran complet etc.
  • pyky040: Acest lucru oferă manevrarea cadranului rotativ și mi-a economisit mult timp (mulțumiri lui Raphael Yancey pentru că a lansat acest lucru.
  • RPi. GPIO: Pentru o conducere bună GPIO, m-am jucat cu câteva opțiuni aici, dar acest lucru mi-a oferit nivelul corect de flexibilitate pe care mi-l doream, în special cu lucruri precum utilizarea unui GPIO de rezervă ca alt 3.3v pentru a conduce codificatorul rotativ etc.
  • zgomot: Pentru a genera zgomot perlin, pentru a-mi permite să creez o formă de undă aleatorie pentru ecranul radio care arată mai natural
  • coadă: am întâmpinat o eroare frustrantă cu sincronizarea evenimentelor de la rotirea codificatorului rotativ și rata de reîmprospătare (foarte) lentă a afișajului LCD. În cele din urmă, modul în care am rezolvat acest lucru a fost să pun în coadă evenimentele de intrare de pe codificatorul rotativ și să le aleg pe rând, pe măsură ce ecranul s-a reîmprospătat.
  • os, sys, threading, time: toate utilizate pentru funcții standard de python

O notă privind designul ecranului. Ecranele sunt definite ca o listă de nume din cod. Fiecare intrare din listă poate avea fie un fișier png, fie un fișier txt (sau ambele) asociate, codul construiește o memorie cache pentru fiecare ecran după căutarea fișierelor în structura directorului linux asociată codului.

Conținutul acestor fișiere este generat în altă parte (manual sau prin alte scripturi), a căror ieșire este salvată ca fișiere-p.webp

Există excepții ciudate în care sunt codificate câteva lucruri - cum ar fi forma de undă pentru ecranul radio aleatoriu, deoarece este calculată în timp real și animată.

Dacă o analogie vă ajută, gândiți-vă la designul UI ca la un browser web extrem de grosolan și simplu - fiecare „ecran” este ca o pagină web cu adevărat simplă care poate consta doar dintr-un png, un fișier txt sau o combinație a celor două. Conținutul acestora este independent și este doar desenat de interfața de utilizare, așa cum un browser ar desena o pagină web.

Iată linkuri către principalele biblioteci pe care le-am folosit aici:

www.pygame.org/news

pypi.org/project/pyky040/

pypi.org/project/noise/

Pasul 20: Ecran Statistici

Ecran Statistici
Ecran Statistici

Niciun pipboy nu ar fi complet fără ecranul clasic de statistici de siluetă pipboy. Pentru aceasta, un prieten de-al meu a creat un-p.webp

Pasul 21: ecran de inventar

Ecran de inventar
Ecran de inventar

Ceva care este întotdeauna util cu proiectele Pi este să ai o modalitate de a afișa informații de bază, cum ar fi adresa IP a DHCP-ului său, etc. Am scris un mic script Linux pentru a colecta aceste informații și doar pentru a le redirecționa către un fișier text numit în mod corespunzător (.txt) pe care sistemul UI îl preia și îl afișează. În acest fel, dacă mă aflu vreodată într-o altă locație, pot declanșa scriptul și pot ridica un fișier.txt proaspăt cu adresa IP actualizată etc.

Pasul 22: Ecranul hărții

Ecranul hărții
Ecranul hărții

Acest ecran a fost unul dintre cele mai complexe ecrane pe care să lucreze. Raspberry Pi 0 nu vine cu un modul GPS, dar am vrut să fac ca harta să aibă o anumită valabilitate până unde se afla Pi. Soluția mea la acest lucru este un script separat care extrage adresa IP Pi, utilizează https://ipinfo.io pentru a căuta o locație aproximativă. Răspunsul JSON este capturat și apoi convertesc coordonatele, astfel încât să pot trage în jos o placă openstreetmap.org pentru locația aproximativă.

Plăcile vin în mai multe culori, dar am vrut o imagine la scară verde care să se potrivească cu aspectul Pipboy și nu am putut găsi una exact așa, așa că am scris un filtru la scară verde în Python pentru a remapta culorile a plăcii openstreetmap și apoi cache noua imagine într-un fișier png.

În timpul procesului de mai sus, este generat un fișier text cu locația și coordonatele aproximative, iar placa de hartă este creată ca un png. UI pipboy extrage aceste două fișiere și suprapune conținutul pentru a crea un ecran de hartă care funcționează (până la precizia rezoluției adresei IP la o locație).

Pasul 23: Ecran de date

Ecran de date
Ecran de date

Acesta este doar un card de test (generat de un alt script Python și ieșire într-un fișier png) care este afișat pentru a ajuta la testarea dimensionării / aspectului. L-am lăsat înăuntru, deoarece este încă un fel de util pentru a verifica cât de mult imobil trebuie să mă joc atunci când îmi bat joc de ecrane.

Pasul 24: Ecranul radio

Ecranul radio
Ecranul radio

Împreună cu ecranul hărții, acesta este celălalt ecran care chiar mi-a cauzat multă muncă. Acesta este singurul ecran în care am jucat cu animație - și funcționează mai ales așa cum am intenționat, dar performanța este încă o problemă cu ratele de reîmprospătare a ecranului LCD. Structura ecranului este un fișier text care conține câteva nume de radio alese aleatoriu (acestea sunt doar șiruri arbitrare și nu fac altceva decât să prezinte o listă pe ecran), un fișier-p.webp

Acesta este singurul ecran în care bucla pygame face orice lucru real ca fiecare ciclu, trebuie să calculeze noua formă de undă, să șteargă partea de ecran din care trăiește și să deseneze.

Pasul 25: Gânduri finale

Image
Image
Gânduri finale
Gânduri finale

Aceasta este probabil cea mai provocatoare versiune pe care am făcut-o, cu multe concepte și abilități diferite invocate, dar este, de asemenea, una dintre cele mai plăcute, cu lucruri reale care funcționează ca rezultat. Sunt încă în curs de a ordona unele dintre notele mele mai tehnice, precum și repozitia github pentru cod. Toate acestea le voi pune la dispoziție în scurt timp, așa că reveniți în curând pentru mai multe detalii și informații, pe măsură ce am timp să le adaug la redactare.

Dacă veți încerca să faceți așa ceva, mi-ar plăcea să văd rezultatele și dacă aveți întrebări, vă rugăm să nu ezitați să ne contactați și mă voi strădui să adăug mai multe informații în orice etapă în care doriți să vă ajutați.

Pasul 26: Cod deschis pe Github

Cod deschis pe Github
Cod deschis pe Github

În cele din urmă am ajuns să deschid codul pe Github. Este disponibil la acest link:

Recomandat: