Kazalo:

PixelWall: 7 korakov (s slikami)
PixelWall: 7 korakov (s slikami)

Video: PixelWall: 7 korakov (s slikami)

Video: PixelWall: 7 korakov (s slikami)
Video: СУПЕР СМЕШНАЯ КОМЕДИЯ! "Как Извести Любовницу За 7 Дней" РУССКИЕ КОМЕДИИ НОВИНКИ, ФИЛЬМЫ HD, КИНО 2024, September
Anonim
PixelWall
PixelWall

Ali poznate projekt Pixel-Table? Imel sem idejo, da bi uresničil takšno slikovno piko, vendar ne kot mizo, namesto da bi jo postavil na steno.

Tako, da lahko ležim na kavču in se med sproščanjem igram na njem.:)

Izvedene igre so:

  • Tetris
  • Vesoljski napadalci
  • Kača
  • Pixel Draw

dodatne funkcije so:

  • Pokaži trenutni čas
  • Pokaži barvne animacije

PixelWall ima ESP8266, tako da se lahko poveže z mojim domačim brezžičnim omrežjem. Možno pa je tudi, da PixelWall uporabite kot dostopno točko in se neposredno povežete z njo.

Da bi olajšali uporabo mojega PixelWall -a, stena po povezavi ponuja spletno mesto za nadzor. Vse aplikacije je mogoče upravljati/predvajati prek spletne strani. Zato za uporabo ni treba namestiti programske opreme.

Poleg tega je na voljo krmilnik NES, ki olajša igranje iger.

Odprtokodno

Vso programsko opremo in mehanske risbe, ki sem jih dal na github: https://github.com/C3MA/PixelWallSvobodno jih uporabite za svoj projekt.

1. korak: Začnite z elektroniko

Začenši z elektroniko
Začenši z elektroniko
Začenši z elektroniko
Začenši z elektroniko
Začenši z elektroniko
Začenši z elektroniko

Iz drugega projekta obstaja obstoječe tiskano vezje z LED WS2812. PCB ima 3 vrstice z 12 LED v vsaki vrstici.

Odločil sem se, da bom to PCB uporabil 6 -krat. Tako dobim LED matriko 12x18.

Prvi korak je bil spajkanje vseh 216 LED, približno 100 kondenzatorjev in ESP8266.

Ročno spajkanje je trajalo približno 10 ur.

Po prvem hitrem preizkusu je ugotovilo: vse deluje.

Tako lahko preidemo na mehanični del.

2. korak: Ustvarjanje mehanika

Ustvarjanje mehanika
Ustvarjanje mehanika
Ustvarjanje mehanika
Ustvarjanje mehanika
Ustvarjanje mehanika
Ustvarjanje mehanika
Ustvarjanje mehanika
Ustvarjanje mehanika

Najprej potrebujemo ločilo za vsako slikovno piko. Zamisel je, da vodoravni in navpični trak združimo prek V-izreza.

Vsak pas ima debelino 3 mm in višino 17 mm. Laserski rezalnik jih izreže iz plošče HDF.

Vse risbe za laserski rezalnik so narisane v FreeCadu (imenovan "Leiste" v mehanični mapi projekta github)

Mreža je podana s postavitvijo tiskanega vezja. Širina stolpca je 28 mm, višina vrstice pa 31 mm.

Naslednje vprašanje je: Kako pritrditi pasove na tiskano vezje? Lepljenje ni tako dobra ideja, ker bi moralo biti mogoče razstaviti, če je kaj narobe. Zato sem se odločil, da bom zajebal. Toda vijak bo razcepil 3 mm tanek trak. Tako sem s 3D tiskalnikom natisnil žep za skupino (to je del z imenom "Halter" v projektu github). To je delovalo zelo dobro, da jih popravimo na tiskanem vezju.

Naslednji korak je, da zanj dobite okvir. Nekatere spletne trgovine ponujajo izrezovanje posameznih okvirjev za slike. Tako sem naročil okvir velikosti 343 mm x 565 mm.

Okvir ima na spodnji strani dodatno luknjo za napajanje.

Sprednjo ploščo iz pleksi stekla sem tudi naročil na spletu. To je WN770 opal Milchglasoptik LD45% velikost: 567x344x2mm

Ima prosojnost 45%.

Združevanje vseh delov v okvir.

Na koncu bo na zadnjo stran privit nekaj trakov, tako da je vse pritrjeno in ne more izpasti.

Da bi imeli možnost delovanja pixelWall brez kakršne koli komunikacije WLAN, sem ustvaril priključno nadzorno ploščo, ki jo lahko po želji vstavimo na desni strani okvirja (v projektu github imenovano "Bedieneinheit").

3. korak: programska oprema - osnove

Programska oprema - osnove
Programska oprema - osnove

Eden od primerov uporabe je igranje iger na PixelWall.

Toda za pisanje igre s piksli bo vedno potrebno uporabno okolje za odpravljanje napak. Ne poznam načina za odpravljanje napak krmilnika ESP8266 na primeren način. Zato sem se odločil simulirati celotno kodo na svojem računalniku. Koda ESP je napisana v Arduinu C ++, zato sem za simulacijo v računalniku uporabil jezik Visual Studio C ++/CLI. Med standardnim jezikom C ++ in jezikom C ++/CLI je nekaj razlik. Na primer v C ++/CLI ne morete ustvariti predmeta vrste String, zaradi zbiranja smeti ni dovoljeno ustvariti predmeta ali sklica/kazalca na tak predmet. V C ++/CLI morate uporabiti ročaje: String^. Toda takšni ročaji v standardu C ++ niso obstajali. Zato sem moral biti ustvarjalen, da sem združil oba sveta. To sem rešil z ustvarjanjem lastne datoteke Arduino.h za simulacijo. Ta datoteka v simulaciji samo preglasi vse nize skozi definirano "#define String String^". To ni običajen način, vendar deluje:) Razen pri nekaterih majhnih preklopnikih stikal je vsa koda ESP kot ta, ki je na voljo v Visual Studio C ++/CLI.

LED matrika

Prvi razred, ki sem ga napisal, je razred LED-Matrix. Ta razred upravlja krmiljenje in preslikavo LED WS2812.

Ta razred je bil zapisan dvakrat: enkrat za krmilnik ESP8266 (LEDMatrixArduino.cpp) in drugega, ki bo v simulaciji (LEDMatrixGUI.cpp) nadziral oblike na grafičnem vmesniku obrazca.

Ta razred ponuja nekaj osnovnih metod za nastavitev in brisanje posamezne LED glede na njen stolpec in vrstico.

Poleg tega ponuja funkcijo setBrightness. Ta vrednost bo upoštevana, če bo nastavljena LED. Tako je mogoče vse ukaze, nastavljene z LED, izvajati s polno svetlostjo. Na primer: Če je svetlost nastavljena na 50% in je funkcija setLed () poklicana z RGBColor (255, 255, 255), bo LED nastavila na 127, 127, 127.

LED plošča

Na vrh razreda LED Matrix sem postavil razred LED plošče. Ta razred ponuja nekaj uporabnih funkcij za vsako aplikacijo. Zagotavlja dve neodvisni plasti. To je lahko v pomoč za aplikacijo. Na primer pri igri tetris: layer0 je namenjen fiksnim kamnom na dnu, layer1 pa prikazuje padajoči kamen. Tako vsak cikel kamen pade za eno slikovno piko na dno, aplikacija lahko samo počisti plast1 in kamen nariše na novo mesto. Ni potrebno ponovno risati vseh fiksnih kamnov na dnu.

Poleg tega plošča ponuja

printImage - za tiskanje nekaterih ikon, kot so smeški ali simbol WLANprintDigit - za tiskanje ene številke na določenem mestuprintFormatedNumber - za tiskanje številke s predponami zerosprintNumber - za tiskanje celega številaprintLineH - vodoravna vrstica s posebno dolžinoprintLineV - vodoravna vrstica s posebno dolžino

4. korak: Programska oprema - aplikacijski koncept

Programska oprema - aplikacijski koncept
Programska oprema - aplikacijski koncept

Splošni koncept stene pikslov je:

  • Vsaka aplikacija ima svoje ime
  • Aplikacijo zaženete tako, da pokličete URL pixelWall, vključno z imenom aplikacije (na primer: 192.168.4.1/tetris)
  • URL ima lahko tudi parametre GET, ki bodo posredovani aplikaciji
  • Vsaka aplikacija mora dostaviti spletno mesto, ki je prikazano v brskalniku.
  • To spletno mesto lahko po želji odpre povezavo spletnega vtičnice do aplikacije za hitre interakcije
  • Aplikacija lahko uporabi to povezavo websocket za komunikacijo nazaj na spletno stran.
  • Poleg spletnega vmesnika aplikacija dodatno pridobi dogodke s tipkami na nadzorni plošči in krmilniku NES.

Aplikacijski vmesnik

Za lažji razvoj novih aplikacij za PixelWall sem ustvaril vmesnik za aplikacije z imenom "IPixelApp.h". Ta vmesnik vsebuje 8 definicij:

  • virtualna praznina start () = 0;
  • virtualna praznina end () = 0;
  • navidezna praznina zanke () = 0;
  • virtualna praznina newWebsocketData (uint8_t * koristna obremenitev, size_t dolžina) = 0;
  • virtualni WebsiteResponse_t getWebsiteResponse (parameter niza) = 0;
  • virtualna void buttonEvent () = 0;
  • virtualni void timerTick () = 0;
  • virtualni niz getName () = 0;

start / end - ta funkcija se pokliče, če se aplikacija zažene / konča, ker se zažene druga aplikacija

zanka - ta funkcija se pokliče iz glavne zanke glavnega programa. Ta klic je nepravilen in zunaj prekinitve.

newWebsocketData - ta funkcija se pokliče, če je spletna stran poslala podatke.

getWebsiteResponse - to uporablja glavni program za pridobivanje spletne strani, ki bi se morala odzvati na zahtevo.

buttonEvent - pokliče se, če pritisnete ali spustite kateri koli gumb na nadzorni plošči.

timerTick - ta funkcija se kliče vsakih 10 ms, sproži jo prekinitev časovnika. Lahko se uporablja za časovno osnovo, vendar ne sme vsebovati časovno intenzivnih stvari, ker je kontekst prekinitve.

getName - to bi moralo vrniti ime aplikacije za URL

5. korak: Programska oprema - aplikacije

Programska oprema - aplikacije
Programska oprema - aplikacije
Programska oprema - aplikacije
Programska oprema - aplikacije
Programska oprema - aplikacije
Programska oprema - aplikacije
Programska oprema - aplikacije
Programska oprema - aplikacije

V trenutni različici je implementiranih naslednjih 7 aplikacij:

Privzeta aplikacija

To je posebna aplikacija, ki prikazuje trenutno stanje brezžičnega omrežja PixelWall. Če se zid lahko poveže s sedanjim brezžičnim omrežjem, bo na njem prikazan naslov IP, ki ga je dobil od omrežja.

Če to ni bilo mogoče (ni nastavljen ssid ali ni omrežja WLAN ali je geslo napačno), se odpre dostopna točka. V tem primeru se lahko povežete s PixelWall prek privzetega IP -ja dostopne točke iz ESP8266: 192.168.4.1

Na spletnem vmesniku ta aplikacija predstavlja 6 gumbov. S pritiskom na gumb lahko zaženete ustrezno aplikacijo.

Nastavitvena aplikacija

Ta aplikacija za nastavitev SSID in gesla WLAN. Samo vnesite poverilnice svojega WLAN in ob naslednjem zagonu PixelWill se bo poskušal povezati s tem WLAN.

Igre

V PixelWall so programirane tri klasične igre:

  • Tetris
  • Kača
  • Vesoljski napadalci

Vse igre se lahko igrajo prek spletnega vmesnika ali s krmilnikom NES.

Slikovna aplikacija

To je aplikacija, ki prikazuje barve na steni PixelWall. Izberete lahko, ali naj bo gibljiva mavrica, bledenje različnih barv, prikaz statične barve ali samo prikaz naključnih barvnih pik.

Pixel It

S to aplikacijo lahko vsak piksel ločeno nastavite tako, da se s prstom dotaknete spletnega vmesnika. Tako da lahko narišete nekaj cracy slik:)

Korak 6: Nadzor prek razširitve Twitch

Upravljanje prek razširitve Twitch
Upravljanje prek razširitve Twitch

Na Twitchu je razširitev z imenom GetInTouch. Ta razširitev omogoča vključitev projektov Arduino v vaš prenos v živo, tako da lahko gledalci nadzirajo vaš arduino med pretakanjem.

Knjižnica Arduino za to je napisana za Arduinos. Izkazalo pa se je, da deluje tudi na ESP8266.

Če ga želite uporabiti v toku, so potrebni naslednji koraki:

  • Knjižnico GetInTouch integrirajte v kodo (glejte vadnico)
  • Povežite pixelWall z računalnikom prek pretvornika USB/RS232 (ki se uporablja tudi za utripanje ESP)
  • Namestite aplikacijo GetInTouch s spletnega mesta
  • Namestite razširitev GetInTouch na svoj kanal Twitch (glejte vadnico)

Korak 7: Nadzor z Nintendo NES Controller

Nadzor z Nintendo NES Controller
Nadzor z Nintendo NES Controller

Po nekaj časa uporabe se je izkazalo, da igranje na mobilnem telefonu na dotik ni tako enostavno. Občasno pogrešate gumbe, ker na prstu nimate povratnih informacij, ali ste nad gumbom ali ne. Poleg tega lahko včasih komunikacija Websocket za kratek čas pušča.

Zato sem se odločil za nakup starega Nintendo NES krmilnika. Ta krmilnik ima zelo preprost vmesnik. To je le registrski premik 4021, ki deluje s 3, 3V. Tako ga je mogoče priključiti neposredno na ESP8266.

Vsi dogodki gumbov na krmilniku so bili posredovani delujoči aplikaciji s funkcijo buttonEvent ().

Priporočena: