INHOUDSOPGAWE:

PixelWall: 7 stappe (met foto's)
PixelWall: 7 stappe (met foto's)

Video: PixelWall: 7 stappe (met foto's)

Video: PixelWall: 7 stappe (met foto's)
Video: Google Pixel 7 Pro Camera Review: Photo + Video + Night Sight 2024, September
Anonim
PixelWall
PixelWall

Ken jy die Pixel-Table-projek? Ek het die idee gehad om so 'n pixel -ding te besef, maar nie as 'n tafel nie, maar dit op die muur te sit.

Sodat ek op die bank kan lê en 'n paar speletjies kan speel terwyl ek ontspan.:)

Geïmplementeerde speletjies is:

  • Tetris
  • Space Invaders
  • Slang
  • Pixel Draw

addisionele funksies is:

  • Wys huidige tyd
  • Wys kleur animasies

Die PixelWall het 'n ESP8266 sodat dit kan aansluit by my huis-WLAN. Maar dit is ook moontlik om die PixelWall as toegangspunt te gebruik en direk daaraan te koppel.

Om dit maklik te maak om my PixelWall te gebruik, lewer die muur 'n webwerf vir beheer nadat dit gekoppel is. Alle programme is beheerbaar/speelbaar via die webblad. Dit is dus nie nodig om sagteware vir gebruik te installeer nie.

Boonop is daar 'n NES -beheerder wat dit makliker maak om die speletjies te speel.

Oop bron

Alle sagteware en meganiese tekeninge wat ek op github geplaas het: https://github.com/C3MA/PixelWall Gebruik dit gerus vir u eie projek.

Stap 1: Begin met die elektroniese

Begin met die elektroniese
Begin met die elektroniese
Begin met die elektroniese
Begin met die elektroniese
Begin met die elektroniese
Begin met die elektroniese

Van 'n ander projek is daar 'n bestaande PCB met WS2812 LED's. Die PCB het 3 rye met 12 LED's in elke ry.

Ek het besluit om hierdie PCB 6 keer te gebruik. Ek kry dus 'n 12x18 LED -matriks.

Die eerste stap was om al die 216 LED's, ongeveer 100 kapasitors en 'n ESP8266, te soldeer.

Die hand -soldeer benodig ongeveer 10 uur.

Na 'n eerste vinnige toets het dit uitgevind: alles werk.

Ons kan dus na die werktuigkundige deel gaan.

Stap 2: Skep die werktuigkundige

Skep die werktuigkundige
Skep die werktuigkundige
Skep die werktuigkundige
Skep die werktuigkundige
Skep die werktuigkundige
Skep die werktuigkundige
Skep die werktuigkundige
Skep die werktuigkundige

In die eerste plek benodig ons 'n aparte vir elke pixel. Die idee is om die horisontale en vertikale band via 'n V-snit aanmekaar te sit.

Elke band het 'n dikte van 3 mm en 'n hoogte van 17 mm. Hulle word deur 'n lasersnyer uit 'n HDF -bord gesny.

Al die sketse vir die lasersnyer word in FreeCad geteken ("Leiste" genoem in die meganiese gids van die github -projek)

Die rooster word gegee deur die uitleg van die PCB. Dit het 'n kolomwydte van 28 mm en ryhoogte van 31 mm.

Die volgende vraag is: Hoe kan ek die bande op die printplaat regmaak? Plak is nie so 'n goeie idee nie, want dit moet moontlik wees om dit uitmekaar te haal as iets fout is. Daarom het ek besluit om dit te verwoes. Maar 'n skroef sal die 3 mm dun band verdeel. Ek het dus 'n sak vir die band met 'n 3D -drukker gedruk (dit is die deel met die naam "Halter" in die github -projek). Dit het redelik goed gewerk om dit op die PCB op te los.

Die volgende stap is om 'n raam daarvoor te kry. Daar is 'n paar aanlynwinkels wat aanbied om individuele fotorame te sny. Ek bestel dus 'n raam met 'n grootte van 343 x 565 mm.

Die raam kry 'n ekstra gat aan die onderkant vir die kragtoevoer.

Die voorblad van plexiglas het ek ook aanlyn bestel. Dit is 'n WN770 opaal Milchglasoptik LD45% grootte: 567x344x2mm

Dit het 'n deurskynendheid van 45%.

Plaas alle dele saam in die raam.

Aan die einde word 'n paar stroke aan die agterkant vasgeskroef, sodat alles vas is en nie kan val nie.

Om 'n opsie te hê vir die werking van die pixelWall sonder enige WLAN -kommunikasie, het ek 'n aansluitbare bedieningspaneel geskep wat opsioneel aan die regterkant van die raam geplaas kan word ("Bedieneinheit" genoem in die github -projek).

Stap 3: sagteware - basiese beginsels

Sagteware - basiese beginsels
Sagteware - basiese beginsels

Een van die voordele is om speletjies op die PixelWall te speel.

Maar om 'n pixelspel te skryf, benodig altyd 'n nuttige ontfoutingsomgewing. Ek weet nie hoe om die ESP8266 -beheerder op 'n geskikte manier te ontfout nie. Daarom het ek besluit om die hele kode op my rekenaar na te boots. Die ESP -kode is in Arduino C ++ geskryf, so ek het Visual Studio C ++/CLI -taal gebruik vir die simulasie op 'n rekenaar. Daar is 'n paar verskille tussen standaard C ++ en die C ++/CLI -taal. Byvoorbeeld, in C ++/CLI kan u nie 'n stringvoorwerp skep nie, as gevolg van vullisverwydering is dit nie toegelaat om 'n voorwerp of verwysing/wyser na so 'n voorwerp te skep nie. In C ++/CLI moet u handvatsels gebruik: String^. Maar sulke handvatsels bestaan nie in die C ++ - standaard nie. Ek moes dus kreatief wees om albei wêrelde bymekaar te bring. Ek het dit opgelos deur 'n eie Arduino.h -lêer vir die simulasie te skep. Hierdie lêer oorheers net alle snare in die simulasie deur 'n definieer "#define String String^". Dit is nie 'n algemene manier nie, maar dit werk:) Behalwe vir 'n paar kompilatorskakelaars, is die hele ESP -kode in Visual Studio C ++/CLI opgestel.

LED Matriks

Die eerste klas wat ek geskryf het, is die LED-Matrix-klas. Hierdie klas behartig die beheer en kartering van die WS2812 LED's.

Hierdie klas is twee keer geskryf: een keer vir die ESP8266 -beheerder (LEDMatrixArduino.cpp) en nog een wat die vorms op die vorm -GUI in die simulasie (LEDMatrixGUI.cpp) sal beheer.

Hierdie klas bied 'n paar basiese metodes om 'n individuele LED volgens sy kolom en ry in te stel en skoon te maak.

Boonop bied dit 'n setBrightness -funksie. Hierdie waarde sal in ag geneem word as 'n LED opgestel word. Alle LED-opdragte kan dus met volle helderheid uitgevoer word. Byvoorbeeld: as die helderheid op 50% gestel is en die setLed () -funksie met RGBColor (255, 255, 255) genoem word, sal dit die LED op 127, 127, 127 stel.

LED paneel

Bo en behalwe die LED Matrix -klas het ek 'n LED -paneelklas geplaas. Hierdie klas bied 'n paar nuttige funksies vir enige toepassing. Dit bied twee onafhanklike lae. Dit kan nuttig wees vir die toepassing. Byvoorbeeld oor tetrispel: laag0 is vir die vaste klippe aan die onderkant en die laag1 moet die vallende klip vertoon. Dus, elke siklus val die klip een pixel na onder, die toepassing kan net laag 1 skoonmaak en die klip na sy nuwe posisie trek. Dit is nie nodig om alle vaste stene onderaan te teken nie.

Die paneel bied ook

printImage - om sommige ikone soos smileys of WLAN -simboolafdruk af te druk Digit - om een syfer op 'n spesifieke posisie te drukprintFormatedNumber - om 'n getal met voorvoegsels te druk nuldrukprint - om 'n heelgetal getalafdruk te drukLineH - horisontale lyn met spesifieke lengteafdrukLineV - horisontale lyn met spesifieke lengte

Stap 4: Sagteware - Toepassingskonsep

Sagteware - Toepassingskonsep
Sagteware - Toepassingskonsep

Die algemene konsep vir die pixel -muur is:

  • Elke toepassing het sy eie naam
  • 'N Toepassing word begin deur die pixelWall -URL, insluitend die toepassingsnaam, te bel (byvoorbeeld: 192.168.4.1/tetris)
  • Die URL kan ook GET -parameters hê wat na die aansoek gestuur sal word
  • Elke toepassing moet 'n webwerf lewer wat in die blaaier vertoon word.
  • Hierdie webwerf kan opsioneel 'n websocket -verbinding met die toepassing oopmaak vir vinnige interaksies
  • Die toepassing kan hierdie websocket -verbinding gebruik om terug te kommunikeer met die webfront.
  • Behalwe die webkoppelvlak kry die toepassing ook knoppie -gebeurtenisse vanaf die bedieningspaneel en die NES -beheerder.

Aansoek koppelvlak

Om dit maklik te maak om nuwe toepassings vir die PixelWall te ontwikkel, het ek 'n koppelvlak geskep vir toepassings met die naam "IPixelApp.h". Hierdie koppelvlak bevat 8 definisies:

  • virtuele leemte begin () = 0;
  • virtuele leemte einde () = 0;
  • virtuele leemte lus () = 0;
  • virtuele leemte newWebsocketData (uint8_t * lading, grootte_t lengte) = 0;
  • virtuele WebsiteResponse_t getWebsiteResponse (string parameter) = 0;
  • virtuele leemte buttonEvent () = 0;
  • virtuele leemte timerTick () = 0;
  • virtuele string getName () = 0;

begin / einde - hierdie funksie word genoem as die toepassing begin / eindig omdat 'n ander toepassing begin

lus - hierdie funksie word genoem vanaf die hooflus van die hoofprogram. Hierdie oproep is onreëlmatig en buite 'n onderbreking.

newWebsocketData - hierdie funksie word genoem as die webfrontend data gestuur het.

getWebsiteResponse - dit word deur die hoofprogram gebruik om die webblad te kry wat op die versoek moet reageer.

buttonEvent - dit word genoem as 'n knoppie op die bedieningspaneel ingedruk of vrygestel is.

timerTick - hierdie funksie word elke 10 ms genoem, veroorsaak deur 'n timeronderbreking. Dit kan gebruik word vir 'n tydsbasis, maar mag geen tydsintensiewe dinge bevat nie, want dit is 'n onderbrekende konteks.

getName - dit moet die naam van die aansoek vir die URL teruggee

Stap 5: Sagteware - toepassings

Sagteware - toepassings
Sagteware - toepassings
Sagteware - toepassings
Sagteware - toepassings
Sagteware - toepassings
Sagteware - toepassings
Sagteware - toepassings
Sagteware - toepassings

Die volgende 7 toepassings word in die huidige weergawe geïmplementeer:

Verstekprogram

Dit is 'n spesiale app wat die huidige WLAN -toestand van die PixelWall vertoon. As die muur kon skakel met 'n huidige WLAN, sal dit die IP -adres wat dit van die netwerk gekry het, vertoon.

As dit nie moontlik was nie (daar is geen ssid opgestel nie of die WLAN is nie teenwoordig nie of die wagwoord is verkeerd), sal dit 'n toegangspunt oopmaak. In hierdie geval kan u via die standaard Accesspoint IP vanaf ESP8266 aan die PixelWall koppel: 192.168.4.1

Op die webinterface bied hierdie app 6 knoppies. Deur op die knoppie te druk, kan u die toepaslike toepassing begin.

Instellings -app

Hierdie app om die WLAN SSID en wagwoord op te stel. Voeg net die geloofsbriewe van u WLAN in, en met die volgende aanvang van die PixelWill sal dit probeer om aan te sluit op hierdie WLAN.

Speletjies

Daar is drie klassieke speletjies wat in die PixelWall geprogrammeer word:

  • Tetris
  • Slang
  • Space Invaders

Alle speletjies kan gespeel word via die webinterface of met die NES -beheerder.

Beeld -app

Dit is 'n app wat kleure op die PixelWall vertoon. U kan kies of dit 'n bewegende reënboog moet wees, verskillende kleure vervaag, 'n statiese kleur vertoon of net willekeurige gekleurde pixels vertoon.

Pixel dit

Met hierdie app kan u elke pixel afsonderlik instel deur met u vinger op die webinterface te tik. U kan dus 'n paar krasfoto's teken:)

Stap 6: Beheer via Twitch -uitbreiding

Beheer via Twitch -uitbreiding
Beheer via Twitch -uitbreiding

Daar is 'n uitbreiding op Twitch met die naam GetInTouch. Met hierdie uitbreiding kan Arduino -projekte in u livestream geïntegreer word, sodat kykers u arduino tydens streaming kan beheer.

Die Arduino -biblioteek hiervoor is geskryf vir Arduinos. Maar dit blyk dat dit vermoedelik ook op ESP8266 werk.

Om dit in die stroom te gebruik, is die volgende stappe nodig:

  • Integreer die GetInTouch -biblioteek in die kode (sien handleiding)
  • Koppel die pixelWall met u rekenaar via die USB/RS232 -omskakelaar (wat ook gebruik word om die ESP te flits)
  • Installeer GetInTouch -toepassing vanaf die webwerf
  • Installeer GetInTouch -uitbreiding op u Twitch -kanaal (sien handleiding)

Stap 7: Beheer deur Nintendo NES -beheerder

Beheer deur Nintendo NES -beheerder
Beheer deur Nintendo NES -beheerder

Nadat dit 'n rukkie gebruik is, blyk dit dat dit nie so maklik is om met 'n selfoon te raak nie. Af en toe mis u die knoppies omdat u geen terugvoer op u vinger het nie, of u nou oor die knoppie is of nie. Boonop kan Websocket -kommunikasie soms vir 'n kort rukkie lek.

Daarom het ek besluit om 'n ou Nintendo NES -kontroleerder te koop. Hierdie kontroleerder het 'n baie eenvoudige koppelvlak. Dit is slegs 'n 4021 skofregister wat met 3, 3V werk. Dit kan dus direk aan die ESP8266 gekoppel word.

Alle knoppiegebeurtenisse op die beheerder word deur die funksie buttonEvent () na die lopende toepassing gestuur.

Aanbeveel: