Përmbajtje:

PixelWall: 7 hapa (me fotografi)
PixelWall: 7 hapa (me fotografi)

Video: PixelWall: 7 hapa (me fotografi)

Video: PixelWall: 7 hapa (me fotografi)
Video: 16 Учебное пособие по простому узлу макраме | Основной узел макраме 2024, Shtator
Anonim
PixelWall
PixelWall

A e njihni projektin Pixel-Table? Unë kisha idenë për të realizuar një gjë të tillë piksel, por jo si një tryezë, në vend që ta vendosja në mur.

Kështu që unë mund të shtrihem në divan dhe të luaj disa lojëra në të ndërsa pushoj.:)

Lojërat e zbatuara janë:

  • Tetris
  • Pushtuesit e Hapësirës
  • Gjarpër
  • Pixel Draw

funksionet shtesë janë:

  • Trego kohën aktuale
  • Shfaq animacione me ngjyra

PixelWall ka një ESP8266 kështu që mund të lidhet me shtëpinë time-WLAN. Por është gjithashtu e mundur që të përdorni PixelWall si një pikë aksesi dhe të lidheni drejtpërdrejt me të.

Për ta bërë më të lehtë përdorimin e PixelWall tim, muri jep një Uebfaqe për kontroll pas lidhjes. Të gjitha Aplikacionet janë të kontrollueshme/të luajtshme përmes faqes në internet. Pra, nuk është e nevojshme të instaloni ndonjë softuer për përdorim.

Për më tepër ekziston një kontrollues NES që e bën më të lehtë të luash lojëra.

Burim i hapur

Të gjitha vizatimet softuerike dhe mekanike i vendosa në github: https://github.com/C3MA/PixelWallFeel mos e përdorni për projektin tuaj.

Hapi 1: Fillimi me elektronikën

Duke filluar me elektronikën
Duke filluar me elektronikën
Duke filluar me elektronikën
Duke filluar me elektronikën
Duke filluar me elektronikën
Duke filluar me elektronikën

Nga një projekt tjetër ekziston një PCB ekzistuese me LED LED WS2812. PCB ka 3 rreshta me 12 LED secila rresht.

Vendosa ta përdor këtë PCB 6 herë. Kështu që unë marr një matricë LED 12x18.

Hapi i parë ishte lidhja e të gjitha 216 LED -ve, rreth 100 kondensatorëve dhe një ESP8266.

Për saldimin manual duheshin rreth 10 orë.

Pas një testi të parë të shpejtë, kuptova: gjithçka po funksionon.

Kështu që ne mund të shkojmë në pjesën mekanike.

Hapi 2: Krijimi i mekanikut

Krijimi i mekanikut
Krijimi i mekanikut
Krijimi i mekanikut
Krijimi i mekanikut
Krijimi i mekanikut
Krijimi i mekanikut
Krijimi i mekanikut
Krijimi i mekanikut

Para së gjithash ne kemi nevojë për një ndarës për secilën piksel. Ideja është që të vendosni brezin horizontal dhe vertikal përmes një prerje V së bashku.

Çdo brez ka një trashësi prej 3mm dhe një lartësi prej 17mm. Ato janë prerë nga një pllakë HDF nga një lazerprerës.

Të gjitha skicat për lazerprerës janë vizatuar në FreeCad (e quajtur "Leiste" në dosjen mekanike të projektit github)

Rrjeti jepet nga Layout i PCB. Ka një gjerësi kolone 28 mm dhe një lartësi rreshti 31 mm.

Pyetja tjetër është: Si të rregulloni brezat në PCB? Ngjitja nuk është një ide aq e mirë, sepse duhet të jetë e mundur të çmontoni nëse diçka ka defekt. Kështu që vendosa ta prish. Por një vidë do të ndajë brezin e hollë 3 mm. Kështu që unë printova me printer 3D një xhep për grupin (kjo është pjesa e quajtur "Halter" në projektin github). Kjo funksionoi mjaft mirë për t'i rregulluar ato në PCB.

Hapi tjetër është të krijoni një kornizë për të. Ka disa dyqane online që ofrojnë prerjen e kornizave individuale të fotografive. Kështu që unë porosita një kornizë me madhësinë 343mm x 565mm.

Korniza merr një vrimë shtesë në anën e poshtme për furnizimin me energji.

Pllaka e përparme pleksiglas gjithashtu e porosita në internet. Ashtë një opal WN770 Milchglasoptik LD45% madhësia: 567x344x2mm

Ka një tejdukshmëri prej 45%.

Vendosja e të gjitha pjesëve së bashku në kornizë.

Në fund do të jenë të dehur disa shirita në anën e pasme, në mënyrë që gjithçka të fiksohet dhe të mos bjerë jashtë.

Për të pasur një mundësi për funksionimin e pixelWall pa asnjë komunikim WLAN, krijova një panel kontrolli të pangopshëm i cili mund të futet opsionalisht në anën e djathtë të kornizës (i quajtur "Bedieneinheit" në projektin github).

Hapi 3: Softueri - Bazat

Softuer - Bazat
Softuer - Bazat

Një nga rastet e përdorimit është të luani lojëra në PixelWall.

Por shkrimi i një loje pixel do të ketë gjithmonë nevojë për një mjedis të dobishëm të korrigjimit. Unë nuk di ndonjë mënyrë për të korrigjuar kontrolluesin ESP8266 në një mënyrë të përshtatshme. Kështu që vendosa të simuloj të gjithë kodin në kompjuterin tim. Kodi ESP është shkruar në Arduino C ++, kështu që kam përdorur gjuhën Visual Studio C ++/CLI për simulimin në PC. Ekzistojnë disa dallime midis gjuhës standarde C ++ dhe gjuhës C ++/CLI. Për shembull në C ++/CLI nuk mund të krijoni një objekt të tipit String, për shkak të grumbullimit të mbeturinave nuk lejohet të krijohet një objekt ose referencë/tregues për një objekt të tillë. Në C ++/CLI duhet të përdorni doreza: String^. Por doreza të tilla nuk ekzistonin në standardin C ++. Kështu që unë duhej të isha krijues për t'i bashkuar të dy botët. Unë e zgjidha këtë duke krijuar një skedar Arduino.h për simulimin. Ky skedar thjesht anulon në simulim të gjitha vargjet përmes një "#define String String^". Kjo nuk është një mënyrë e zakonshme, por funksionon:) Përveç disa ndërprerësve të vegjël të përpiluesit, i gjithë kodi ESP është më i përshtatshëm se në Visual Studio C ++/CLI.

Matrica LED

Klasa e parë që kam shkruar është klasa LED-Matrix. Kjo klasë trajton kontrollin dhe hartëzimin e LED -ve WS2812.

Kjo klasë u shkrua dy herë: një herë për kontrolluesin ESP8266 (LEDMatrixArduino.cpp) dhe një tjetër që do të kontrollojë format në GUI të Formës në simulim (LEDMatrixGUI.cpp).

Kjo klasë ofron disa metoda themelore për vendosjen dhe pastrimin e një LED individual nga kolona dhe rreshti i tij.

Për më tepër ajo siguron një funksion setBrightness. Kjo vlerë do të merret parasysh nëse do të vendoset një LED. Pra, të gjitha komandat e vendosura në LED mund të bëhen me shkëlqim të plotë. Për shembull: Nëse shkëlqimi vendoset në 50% dhe funksioni setLed () thirret me RGBColor (255, 255, 255) ai do të vendosë LED në 127, 127, 127.

Paneli LED

Mbi klasën e Matricës LED vendosa një klasë të Panelit LED. Kjo klasë ofron disa funksione të dobishme për çdo aplikim. Ofron dy shtresa të pavarura. Kjo mund të jetë e dobishme për aplikimin. Për shembull në lojë tetris: layer0 është për gurët e fiksuar në fund dhe shtresa1 është për të shfaqur gurin që bie. Pra, çdo cikël guri bie një piksel në fund, aplikacioni thjesht mund të pastrojë shtresën1 dhe të tërheqë gurin në pozicionin e tij të ri. Nuk është e nevojshme të rishikosh të gjithë gurët e fiksuar në fund.

Për më tepër, paneli ofron

printImage - për të printuar disa ikona si figurinat ose simbolin WLANDigit - për të printuar një shifër në një pozicion të caktuarprintFormatedNumber - për të printuar një numër me parashtesa zerosprintNumber - për të printuar një numër të plotë numërprintLineH - vijë horizontale me gjatësi të caktuarprintLineV - vijë horizontale me gjatësi të caktuar

Hapi 4: Softueri - Koncepti i Aplikimit

Softuer - Koncepti i Aplikimit
Softuer - Koncepti i Aplikimit

Koncepti i përgjithshëm për murin pixel është:

  • Çdo aplikacion ka emrin e vet
  • Një aplikacion fillon duke thirrur pixelWall URL duke përfshirë emrin e aplikacionit (për shembull: 192.168.4.1/tetris)
  • URL -ja gjithashtu mund të ketë parametra GET të cilët do të përcillen në aplikacion
  • Çdo aplikacion duhet të ofrojë një faqe në internet e cila shfaqet në shfletuesin.
  • Ky website mund të hapë opsionalisht një lidhje websocket me aplikacionin për ndërveprime të shpejta
  • Aplikacioni mund të përdorë këtë lidhje websocket për të komunikuar përsëri në frontend të uebit.
  • Përveç ndërfaqes në internet, aplikacioni merr ngjarje shtesë të butonave nga paneli i kontrollit dhe kontrolluesi NES.

Ndërfaqja e aplikimit

Për ta bërë më të lehtë zhvillimin e aplikacioneve të reja për PixelWall, krijova një ndërfaqe për aplikacionet e quajtur "IPixelApp.h". Kjo ndërfaqe përmban 8 përkufizime:

  • fillimi i zbrazëtisë virtuale () = 0;
  • fundi i zbrazëtisë virtuale () = 0;
  • lak virtual void () = 0;
  • zbrazëti virtuale newWebsocketData (uint8_t * ngarkesa, madhësia_t gjatësi) = 0;
  • virtual WebsiteResponse_t getWebsiteResponse (parametri String) = 0;
  • virtual void buttonEvent () = 0;
  • virtual void timerTick () = 0;
  • String virtual getName () = 0;

start / end - ky funksion thirret nëse aplikacioni fillon / përfundon sepse fillon një aplikacion tjetër

lak - ky funksion thirret nga laku kryesor i programit kryesor. Kjo thirrje është e parregullt dhe jashtë ndërprerjes.

newWebsocketData - ky funksion thirret nëse faqja e internetit dërgon të dhëna.

getWebsiteResponse - kjo përdoret nga programi kryesor për të marrë faqen në internet e cila duhet t'i përgjigjet kërkesës.

buttonEvent - kjo quhet nëse ndonjë buton në panelin e kontrollit është shtypur ose lëshuar.

timerTick - ky funksion quhet secili 10ms, i shkaktuar nga një ndërprerje e kohëmatësit. Mund të përdoret për bazë kohore, por nuk duhet të përmbajë gjëra intensive në kohë, sepse është një kontekst i ndërprerë.

getName - kjo duhet të kthejë emrin e aplikacionit për URL

Hapi 5: Softuer - Aplikime

Softuer - Aplikime
Softuer - Aplikime
Softuer - Aplikime
Softuer - Aplikime
Softuer - Aplikime
Softuer - Aplikime
Softuer - Aplikime
Softuer - Aplikime

7 aplikacionet e mëposhtme janë zbatuar në versionin aktual:

Aplikacioni i parazgjedhur

Ky është një Aplikacion special që shfaq gjendjen aktuale WLAN të PixelWall. Nëse muri mund të lidhet me një WLAN të tanishëm, ai do të shfaq adresën IP të cilën e ka marrë nga Rrjeti.

Nëse nuk ishte e mundur (nuk ka ssid të konfiguruar ose WLAN nuk është i pranishëm ose fjalëkalimi është i gabuar) do të hapë një Accesspoint. Në këtë rast mund të lidheni me PixelWall përmes IP -së së paracaktuar të Accesspoint nga ESP8266: 192.168.4.1

Në Uebinterface kjo Aplikacion paraqet 6 Butona. Duke shtypur butonin mund të filloni Aplikacionin e duhur.

Aplikacioni i cilësimeve

Ky aplikacion për konfigurimin e SSL WLAN dhe fjalëkalimin. Thjesht futni kredencialet e WLAN -it tuaj dhe në fillimin tjetër të PixelWill do të përpiqet të lidhet me këtë WLAN.

Lojëra

Ekzistojnë tre lojëra klasike të programuara në PixelWall:

  • Tetris
  • Gjarpër
  • Pushtuesit e Hapësirës

Të gjitha lojërat mund të luhen përmes webinterface ose me kontrolluesin NES.

Aplikacioni i Imazhit

Ky është një aplikacion i cili shfaq ngjyrat në PixelWall. Ju mund të zgjidhni nëse duhet të jetë një ylber lëvizës, që zbehet me ngjyra të ndryshme, tregon ngjyrë statike ose thjesht shfaq pixel me ngjyra të rastit.

Pixel It

Me këtë Aplikacion mund të vendosni secilën piksel veç e veç duke trokitur me gisht në Uebinterface. Kështu që ju mund të vizatoni disa fotografi të cracisë:)

Hapi 6: Kontrollo Via Twitch Extension

Kontrolloni përmes shtrirjes së Twitch
Kontrolloni përmes shtrirjes së Twitch

Ekziston një shtesë në Twitch e quajtur GetInTouch. Kjo shtesë ju lejon të integroni projektet Arduino në transmetimin tuaj të drejtpërdrejtë, në mënyrë që shikuesit të mund të kontrollojnë arduino -n tuaj gjatë transmetimit.

Biblioteka Arduino për këtë është shkruar për Arduinos. Por doli që funksionon edhe në ESP8266 me sa duket.

Për ta përdorur atë në Stream, hapat e mëposhtëm janë të nevojshëm:

  • Integroni bibliotekën GetInTouch në kod (shikoni tutorialin)
  • Lidhni pixelWall me kompjuterin tuaj përmes konvertuesit USB/RS232 (i cili përdoret gjithashtu për ndezjen e ESP)
  • Instaloni Aplikacionin GetInTouch nga Uebfaqja
  • Instaloni shtesën GetInTouch në kanalin tuaj Twitch (shikoni tutorialin)

Hapi 7: Kontrolli nga Nintendo NES Controller

Kontrolli nga Nintendo NES Controller
Kontrolli nga Nintendo NES Controller

Pas përdorimit të tij për një kohë, rezulton se të luash në celular nuk është aq e lehtë. Herë pas here ju mungojnë butonat sepse nuk keni reagime në gisht nëse jeni mbi butonin apo jo. Përveç kësaj ndonjëherë komunikimi në websocket mund të rrjedhë për një kohë të shkurtër.

Prandaj vendosa të blija një kontrollues të vjetër Nintendo NES. Ky kontrollues ka një ndërfaqe shumë të thjeshtë. Justshtë vetëm një regjistër ndërrimi 4021 i cili funksionon me 3, 3V. Pra, mund të lidhet drejtpërdrejt me ESP8266.

Të gjitha ngjarjet e butonave në kontrollues u përcollën në aplikacionin që funksionon përmes funksionit buttonEvent ().

Recommended: