Sadržaj:

PixelWall: 7 koraka (sa slikama)
PixelWall: 7 koraka (sa slikama)

Video: PixelWall: 7 koraka (sa slikama)

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

Poznajete li projekt Pixel-Table? Imao sam ideju da realizujem takvu piksel stvar, ali ne kao sto, već da je postavim na zid.

Tako da mogu ležati na kauču i igrati se na njemu dok se opuštam.:)

Implementirane igre su:

  • Tetris
  • Space Invaders
  • Zmija
  • Pixel Draw

dodatne funkcije su:

  • Prikaži trenutno vrijeme
  • Prikaži animacije u boji

PixelWall ima ESP8266 tako da se može povezati na moju kućnu WLAN. No, također je moguće koristiti PixelWall kao pristupnu točku i direktno se povezati s njim.

Da biste olakšali korištenje mog PixelWall -a, zid isporučuje web stranicu za kontrolu nakon povezivanja. Sve aplikacije se mogu kontrolirati/reproducirati putem web stranice. Dakle, nije potrebno instalirati softver za upotrebu.

Dodatno postoji i NES kontroler koji olakšava igranje igara.

Otvoreni izvor

Sav softverski i mehanički crtež stavio sam na github: https://github.com/C3MA/PixelWallFoto slobodno koristite za svoj vlastiti projekt.

Korak 1: Počnite s elektronikom

Počevši s elektronikom
Počevši s elektronikom
Počevši s elektronikom
Počevši s elektronikom
Počevši s elektronikom
Počevši s elektronikom

Iz drugog projekta postoji postojeća PCB sa WS2812 LED diodama. PCB ima 3 reda sa po 12 LED dioda u svakom redu.

Odlučio sam koristiti ovu PCB 6 puta. Tako sam dobio LED matricu 12x18.

Prvi korak je bio lemljenje svih 216 LED dioda, oko 100 kondenzatora i ESP8266.

Za ručno lemljenje bilo je potrebno oko 10 sati.

Nakon prvog brzog testa shvatilo se: sve radi.

Dakle, možemo prijeći na mehanički dio.

Korak 2: Stvaranje mehaničara

Stvaranje mehaničara
Stvaranje mehaničara
Stvaranje mehaničara
Stvaranje mehaničara
Stvaranje mehaničara
Stvaranje mehaničara
Stvaranje mehaničara
Stvaranje mehaničara

Prije svega, potreban nam je separator za svaki piksel. Ideja je spojiti vodoravnu i okomitu traku putem V-izreza.

Svaka traka ima debljinu od 3 mm i visinu od 17 mm. Izrezane su sa HDF ploče laserskim rezačem.

Sve skice za laserski rezač iscrtane su u FreeCadu (nazvan "Leiste" u mehaničkoj fascikli projekta github)

Mreža je data izgledom PCB -a. Ima širinu stuba 28 mm i visinu reda 31 mm.

Sljedeće pitanje je: Kako popraviti pojaseve na PCB -u? Lijepljenje nije tako dobra ideja, jer bi trebalo biti moguće rastaviti ako je nešto oštećeno. Pa sam odlučio da zeznem stvar. Ali vijak će razdvojiti tanku traku od 3 mm. Pa sam štampao 3D štampačem džep za bend (ovo je dio pod nazivom "Halter" u github projektu). Ovo je prilično dobro funkcioniralo kako bi se popravili na PCB -u.

Sljedeći korak je nabaviti okvir za to. Postoje neke internetske trgovine koje nude izrezivanje pojedinačnih okvira za slike. Naručio sam okvir veličine 343 mm x 565 mm.

Okvir ima dodatnu rupu na donjoj strani za napajanje.

Prednju ploču od pleksiglasa također sam naručio putem interneta. To je WN770 opal Milchglasoptik LD45% veličina: 567x344x2mm

Ima prozirnost od 45%.

Spajanje svih dijelova u okvir.

Na kraju će se sa stražnje strane zašrafiti neke trake, tako da je sve fiksirano i ne može ispasti.

Da bih imao mogućnost funkcioniranja pixelWall -a bez ikakve WLAN komunikacije, stvorio sam priključivu kontrolnu ploču koja se po želji može umetnuti s desne strane okvira (nazvana "Bedieneinheit" u github projektu).

Korak 3: Softver - osnove

Softver - osnove
Softver - osnove

Jedan od primjera je igranje igara na PixelWall -u.

Ali za pisanje igre piksela uvijek će biti potrebno korisno okruženje za otklanjanje grešaka. Ne znam nijedan način za uklanjanje grešaka na ESP8266 kontroleru na odgovarajući način. Zato sam odlučio simulirati cijeli kôd na svom računaru. ESP kod je napisan na Arduinu C ++, pa sam za simulaciju na računaru koristio jezik Visual Studio C ++/CLI. Postoje neke razlike između standardnog C ++ i C ++/CLI jezika. Na primjer, u C ++/CLI ne možete stvoriti objekt tipa String, zbog prikupljanja smeća nije dozvoljeno stvaranje objekta ili reference/pokazivača na takav objekt. U C ++/CLI morate koristiti ručke: String^. Ali takve ručke nisu postojale u C ++ standardu. Pa sam morao biti kreativan da spojim oba svijeta. Riješio sam to stvaranjem vlastite Arduino.h datoteke za simulaciju. Ova datoteka samo zamjenjuje u simulaciji sve nizove kroz definiranje "#define String String^". Ovo nije uobičajen način, ali funkcionira.) Osim na nekim malim prekidačima kompajlera, sav ESP kod je kompatibilan u Visual Studio C ++/CLI.

LED Matrix

Prva klasa koju sam napisao je LED-Matrix klasa. Ova klasa upravlja kontrolom i mapiranjem WS2812 LED dioda.

Ova klasa je napisana dva puta: jednom za kontroler ESP8266 (LEDMatrixArduino.cpp) i još jednom koja će kontrolirati oblike na grafičkom sučelju obrasca u simulaciji (LEDMatrixGUI.cpp).

Ova klasa pruža neke osnovne metode za postavljanje i brisanje pojedinačne LED diode prema stupcu i redu.

Osim toga, pruža funkciju setBrightness. Ova vrijednost će se uzeti u obzir ako se postavi LED. Tako se sve komande sa LED postavkama mogu izvesti s punim osvjetljenjem. Na primjer: Ako je svjetlina postavljena na 50%, a funkcija setLed () je pozvana pomoću RGBColor (255, 255, 255), LED će postaviti na 127, 127, 127.

LED Panel

Povrh LED Matrix klase stavio sam LED Panel klasu. Ova klasa pruža neke korisne funkcionalnosti za bilo koju aplikaciju. Pruža dva nezavisna sloja. Ovo može biti korisno za aplikaciju. Na primjer u igri tetris: layer0 služi za fiksirano kamenje na dnu, a layer1 za prikaz padajućeg kamena. Dakle, svaki ciklus kamen pada jedan piksel na dno, aplikacija samo može očistiti sloj1 i nacrtati kamen na njegovu novu poziciju. Nije potrebno ponovno iscrtavati sve fiksne kamenje na dnu.

Osim toga, panel pruža

printImage - za ispis nekih ikona poput smajlija ili WLAN simbolprintDigit - za štampanje jedne znamenke na određenoj pozicijiprintFormatedNumber - za ispis broja sa prefiksima zerosprintNumber - za ispis cijelog brojaprintLineH - vodoravna linija sa određenom dužinomprintLineV - vodoravna linija s određenom dužinom

Korak 4: Softver - koncept aplikacije

Softver - koncept aplikacije
Softver - koncept aplikacije

Opći koncept zida piksela je:

  • Svaka aplikacija ima svoj naziv
  • Aplikacija se pokreće pozivanjem URL -a pixelWall uključujući naziv aplikacije (na primjer: 192.168.4.1/tetris)
  • URL može imati i GET parametre koji će biti proslijeđeni aplikaciji
  • Svaka aplikacija mora isporučiti web stranicu koja je prikazana u pregledniku.
  • Ova web stranica može opcionalno otvoriti websocket vezu s aplikacijom za brzu interakciju
  • Aplikacija može koristiti ovu websocket vezu za komunikaciju natrag s internetskim sučeljem.
  • Osim web sučelja, aplikacija dodatno dobiva događaje pritiskom na gumb s upravljačke ploče i kontrolera NSZ.

Interfejs aplikacije

Kako bih olakšao razvoj novih aplikacija za PixelWall, stvorio sam sučelje za aplikacije pod nazivom "IPixelApp.h". Ovo sučelje sadrži 8 definicija:

  • virtualna praznina start () = 0;
  • virtualna praznina end () = 0;
  • virtualna void petlja () = 0;
  • virtualna praznina newWebsocketData (uint8_t * korisni teret, size_t dužina) = 0;
  • virtualni WebsiteResponse_t getWebsiteResponse (parametar niza) = 0;
  • virtual void buttonEvent () = 0;
  • virtual void timerTick () = 0;
  • virtualni niz getName () = 0;

start / end - ova funkcija se poziva ako se aplikacija pokreće / završava jer se pokreće druga aplikacija

loop - ova funkcija se poziva iz glavne petlje glavnog programa. Ovaj poziv je nepravilan i izvan prekida.

newWebsocketData - ova funkcija se poziva ako je web sučelje poslalo podatke.

getWebsiteResponse - ovo koristi glavni program za dobijanje web stranice koja bi trebala odgovoriti na zahtjev.

buttonEvent - poziva se ako je bilo koje dugme na kontrolnoj tabli pritisnuto ili otpušteno.

timerTick - ova funkcija se naziva svakih 10 ms, pokreće se prekidom timera. Može se koristiti za vremensku bazu, ali ne smije sadržavati vremenski intenzivne stvari jer je to kontekst prekida.

getName - ovo bi trebalo vratiti naziv aplikacije za URL

Korak 5: Softver - aplikacije

Softver - aplikacije
Softver - aplikacije
Softver - aplikacije
Softver - aplikacije
Softver - aplikacije
Softver - aplikacije
Softver - aplikacije
Softver - aplikacije

Sljedećih 7 aplikacija je implementirano u trenutnoj verziji:

Zadana aplikacija

Ovo je posebna aplikacija koja prikazuje trenutno stanje WLAN mreže PixelWall. Ako se zid mogao povezati s postojećom WLAN mrežom, prikazat će IP adresu koju je dobio od mreže.

Ako to nije bilo moguće (nema postavljenog ssid -a ili WLAN nije prisutan ili je lozinka pogrešna), otvorit će pristupnu točku. U ovom slučaju možete se povezati s PixelWall -om putem zadanog IP -a pristupne točke s ESP8266: 192.168.4.1

Na web sučelju ova aplikacija predstavlja 6 tipki. Pritiskom na dugme možete pokrenuti odgovarajuću aplikaciju.

Aplikacija Postavke

Ova aplikacija za postavljanje SSID -a i lozinke za WLAN. Samo umetnite vjerodajnice svoje WLAN mreže i pri sljedećem pokretanju PixelWill -a će se pokušati povezati s ovom WLAN -om.

Igre

U PixelWall -u su programirane tri klasične igre:

  • Tetris
  • Zmija
  • Space Invaders

Sve igre se mogu igrati putem web sučelja ili pomoću NES kontrolera.

Image App

Ovo je aplikacija koja prikazuje boje na PixelWall -u. Možete izabrati treba li to biti dugačka duga, blijeđenje različitih boja, prikazivanje statičke boje ili samo prikazivanje piksela u slučajnoj boji.

Pixel It

Pomoću ove aplikacije možete postaviti svaki piksel zasebno dodirom prsta po web sučelju. Pa možeš nacrtati neke luckaste slike:)

Korak 6: Upravljanje putem Twitch ekstenzije

Upravljanje putem Twitch ekstenzije
Upravljanje putem Twitch ekstenzije

Na Twitchu postoji proširenje pod nazivom GetInTouch. Ovo proširenje omogućuje integriranje Arduino projekata u vaš prijenos uživo, tako da gledatelji mogu kontrolirati vaš arduino tokom streaminga.

Arduino biblioteka za ovo je napisana za Arduinos. Ali pokazalo se da radi i na ESP8266.

Za korištenje u Streamu potrebni su sljedeći koraci:

  • Integrirajte GetInTouch biblioteku u kôd (pogledajte vodič)
  • Povežite pixelWall sa računarom putem USB/RS232 pretvarača (koji se također koristi za bljeskanje ESP -a)
  • Instalirajte aplikaciju GetInTouch sa web lokacije
  • Instalirajte GetInTouch proširenje na svoj Twitch kanal (pogledajte vodič)

Korak 7: Kontrola pomoću Nintendo NES kontrolera

Kontrola pomoću Nintendo NES kontrolera
Kontrola pomoću Nintendo NES kontrolera

Nakon što smo ga neko vrijeme koristili, pokazalo se da igranje na mobilnom telefonu na dodir nije tako jednostavno. Povremeno vam nedostaju dugmad jer nemate povratne informacije o svom prstu bez obzira jeste li prešli preko dugmeta ili ne. Dodatno, ponekad Websocket komunikacija može procuriti na kratko vrijeme.

Zbog toga sam odlučio kupiti stari Nintendo NES kontroler. Ovaj kontroler ima vrlo jednostavno sučelje. To je samo registar pomaka 4021 koji radi sa 3, 3V. Tako da se može spojiti izravno na ESP8266.

Svi događaji s gumbima na kontroleru proslijeđeni su pokrenutoj aplikaciji putem funkcije buttonEvent ().

Preporučuje se: