Sisällysluettelo:

PixelWall: 7 vaihetta (kuvilla)
PixelWall: 7 vaihetta (kuvilla)

Video: PixelWall: 7 vaihetta (kuvilla)

Video: PixelWall: 7 vaihetta (kuvilla)
Video: ЗАКРИЧАЛ – ПОТЕРЯЛ ₽200.000 / ТРЭШКЭШ: Тишина 2024, Syyskuu
Anonim
PixelWall
PixelWall

Tiedätkö Pixel-Table-projektin? Minulla oli ajatus toteuttaa tällainen pikseliasia, mutta ei pöydänä, vaan laittaa se seinälle.

Jotta voin maata sohvalla ja pelata sillä pelejä rentoutuen.:)

Toteutettuja pelejä ovat:

  • Tetris
  • Avaruuden hyökkääjät
  • Käärme
  • Pixel Draw

lisätoimintoja ovat:

  • Näytä nykyinen aika
  • Näytä väri -animaatiot

PixelWallissa on ESP8266, joten se voi muodostaa yhteyden kotini WLAN-verkkoon. Mutta on myös mahdollista käyttää PixelWallia tukiasemana ja muodostaa yhteys suoraan siihen.

PixelWallin käytön helpottamiseksi seinä toimittaa verkkosivuston hallittavaksi yhdistämisen jälkeen. Kaikki sovellukset ovat hallittavissa/toistettavissa verkkosivun kautta. Joten ei ole välttämätöntä asentaa mitään ohjelmistoja käyttöä varten.

Lisäksi on NES -ohjain, joka helpottaa pelien pelaamista.

Avoin lähdekoodi

Kaikki ohjelmistot ja mekaaniset piirustukset laitoin githubiin: https://github.com/C3MA/PixelWallFeel vapaasti käyttää sitä omaan projektiin.

Vaihe 1: Aloittaminen elektroniikalla

Elektroniikasta alkaen
Elektroniikasta alkaen
Elektroniikasta alkaen
Elektroniikasta alkaen
Elektroniikasta alkaen
Elektroniikasta alkaen

Toisesta projektista on olemassa piirilevy, jossa on WS2812 -LEDit. Piirilevyssä on 3 riviä ja 12 LEDiä jokaisella rivillä.

Päätin käyttää tätä piirilevyä 6 kertaa. Joten saan 12x18 LED -matriisin.

Ensimmäinen askel oli juottaa kaikki 216 LEDiä, noin 100 kondensaattoria ja ESP8266.

Manuaalinen juottaminen vaati noin 10 tuntia.

Ensimmäisen pikatestin jälkeen se huomasi: kaikki toimii.

Joten voimme siirtyä mekaaniseen osaan.

Vaihe 2: Luo mekaanikko

Mekaanikon luominen
Mekaanikon luominen
Mekaanikon luominen
Mekaanikon luominen
Mekaanikon luominen
Mekaanikon luominen
Mekaanikon luominen
Mekaanikon luominen

Ensinnäkin tarvitsemme jokaiselle pikselille erottimen. Ajatuksena on yhdistää vaaka- ja pystysuora nauha V-leikkauksen kautta yhteen.

Jokaisen nauhan paksuus on 3 mm ja korkeus 17 mm. Ne leikataan HDF -levyltä laserleikkurilla.

Kaikki laserleikkurin luonnokset piirretään FreeCadissa (nimeltään "Leiste" github -projektin mekaanikakansiossa)

Ruudukon antaa piirilevyn asettelu. Sen leveys on 28 mm ja rivikorkeus 31 mm.

Seuraava kysymys on: Kuinka korjata nauhat piirilevylle? Liimaaminen ei ole niin hyvä idea, koska sen pitäisi olla mahdollista purkaa, jos jokin on viallinen. Joten päätin pilata sen. Mutta ruuvi jakaa 3 mm: n ohuen nauhan. Joten tulostin 3D -tulostimella taskun bändille (tämä on osa nimeltä "Halter" github -projektissa). Tämä toimi melko hyvin niiden korjaamiseksi piirilevylle.

Seuraava askel on hankkia sille kehys. Jotkut verkkokaupat tarjoavat leikata yksittäisiä kuvakehyksiä. Joten tilasin kehyksen, jonka koko oli 343 mm x 565 mm.

Runkoon tulee lisäksi reikä alapuolelle virtalähdettä varten.

Plexiglas -etulevyn tilasin myös netistä. Se on WN770 opaali Milchglasoptik LD45% koko: 567x344x2mm

Sen läpikuultavuus on 45%.

Laita kaikki osat yhteen runkoon.

Lopuksi ruuvataan joitakin nauhoja taakse, jotta kaikki on kiinteä eikä voi pudota.

Saadakseni mahdollisuuden käyttää pixelWallia ilman WLAN -tiedonsiirtoa, loin muokattavan ohjauspaneelin, joka voidaan lisätä valinnaisesti kehyksen oikealle puolelle (nimeltään "Bedieneinheit" github -projektissa).

Vaihe 3: Ohjelmisto - perusteet

Ohjelmisto - perusasiat
Ohjelmisto - perusasiat

Yksi käyttötapauksista on pelata pelejä PixelWallilla.

Pikselipelin kirjoittaminen vaatii kuitenkin aina hyödyllisen virheenkorjausympäristön. En tiedä mitään tapaa korjata ESP8266 -ohjainta sopivalla tavalla. Joten päätin simuloida koko koodin tietokoneellani. ESP -koodi on kirjoitettu Arduino C ++: lla, joten käytin Visual Studio C ++/CLI -kieltä PC: n simuloinnissa. C ++: n ja C ++/CLI -kielen välillä on joitain eroja. Esimerkiksi C ++/CLI: ssä et voi luoda merkkijonotyyppistä objektia, koska roskien keräämisen vuoksi ei saa luoda objektia tai viitettä/osoitinta sellaiseen kohteeseen. C ++/CLI: ssä sinun on käytettävä kahvaa: String^. Mutta tällaisia kahvoja ei ollut C ++ -standardissa. Joten minun piti olla luova tuodakseni molemmat maailmat yhteen. Ratkaisin tämän luomalla oman Arduino.h -tiedoston simulaatiota varten. Tämä tiedosto vain ohittaa simulaatiossa kaikki merkkijonot määritelmän "#define String String^" kautta. Tämä ei ole yleinen tapa, mutta se toimii:) Joitakin pieniä kääntäjäkytkimiä lukuun ottamatta kaikki ESP -koodit ovat kuin käännettävissä Visual Studio C ++/CLI: ssä.

LED -matriisi

Ensimmäinen kirjoittamani luokka on LED-Matrix-luokka. Tämä luokka käsittelee WS2812 -merkkivalojen ohjausta ja kartoittamista.

Tämä luokka kirjoitettiin kaksi kertaa: kerran ESP8266 -ohjaimelle (LEDMatrixArduino.cpp) ja toiselle, joka ohjaa simulaation lomakkeen käyttöliittymän muotoja (LEDMatrixGUI.cpp).

Tämä luokka tarjoaa joitain perusmenetelmiä yksittäisen LEDin asettamiseksi ja tyhjentämiseksi sen sarakkeen ja rivin perusteella.

Lisäksi siinä on setBrightness -toiminto. Tämä arvo otetaan huomioon, jos LED asetetaan. Joten kaikki LED-komennot voidaan suorittaa täydellä kirkkaudella. Esimerkki: Jos kirkkaus on asetettu 50%: iin ja setLed () -toiminto kutsutaan RGBColorilla (255, 255, 255), se asettaa LED -valon arvoon 127, 127, 127.

LED -paneeli

LED -matriisiluokan I päälle asetin LED -paneeliluokan. Tämä luokka tarjoaa hyödyllisiä toimintoja kaikille sovelluksille. Se tarjoaa kaksi erillistä kerrosta. Tästä voi olla apua sovellukselle. Esimerkiksi tetris -pelissä: layer0 on tarkoitettu pohjassa oleville kiinteille kiville ja layer1 näyttää putoavan kiven. Joten joka sykli kivi putoaa yhden pikselin pohjaan, sovellus voi vain poistaa kerroksen1 ja vetää kiven uuteen paikkaan. Kaikkien kiinteiden kivien piirtäminen pohjassa ei ole välttämätöntä.

Lisäksi paneeli tarjoaa

printImage - joidenkin kuvakkeiden, kuten hymiöiden tai WLAN -symbolijäljen tulostaminen Digitaalinen - yhden numeron tulostaminen tiettyyn paikkaanprintFormatedNumber - numero, jonka etuliitteet ovat nollaprinttiNumero - kokonaislukun tulostusLineH - vaakasuora viiva, jolla on tietty pituusLineV - vaakasuora viiva, jolla on tietty pituus

Vaihe 4: Ohjelmisto - Sovelluskonsepti

Ohjelmisto - Sovelluskonsepti
Ohjelmisto - Sovelluskonsepti

Pikseliseinän yleinen käsite on:

  • Jokaisella sovelluksella on oma nimi
  • Sovellus käynnistetään kutsumalla pixelWall -URL -osoite, joka sisältää sovelluksen nimen (esimerkiksi: 192.168.4.1/tetris)
  • URL -osoitteessa voi olla myös GET -parametreja, jotka välitetään sovellukselle
  • Jokaisella sovelluksella on oltava verkkosivusto, joka näkyy selaimessa.
  • Tämä sivusto voi halutessaan avata Websocket -yhteyden sovellukseen nopeaa vuorovaikutusta varten
  • Sovellus voi käyttää tätä websocket -yhteyttä kommunikoidakseen takaisin web -käyttöliittymään.
  • Web -käyttöliittymän lisäksi sovellus saa lisäksi painiketapahtumia ohjauspaneelista ja NES -ohjaimesta.

Sovellusliittymä

Jotta uusien sovellusten kehittäminen PixelWallille olisi helppoa, loin käyttöliittymän sovelluksille nimeltä "IPixelApp.h". Tämä käyttöliittymä sisältää 8 määritelmää:

  • virtuaalinen mitätön alku () = 0;
  • virtuaalinen tyhjä pää () = 0;
  • virtuaalinen tyhjä silmukka () = 0;
  • virtual void newWebsocketData (uint8_t * hyötykuorma, koko_t pituus) = 0;
  • virtuaalinen WebsiteResponse_t getWebsiteResponse (merkkijonoparametri) = 0;
  • virtual void buttonEvent () = 0;
  • virtuaalinen mitätön ajastinTick () = 0;
  • virtuaalinen merkkijono getName () = 0;

alku / loppu - tätä toimintoa kutsutaan, jos sovellus käynnistyy / päättyy, koska toinen sovellus käynnistyy

silmukka - tätä toimintoa kutsutaan pääohjelman pääsilmukasta. Tämä puhelu on epäsäännöllinen ja keskeytyksen ulkopuolella.

newWebsocketData - tätä toimintoa kutsutaan, jos web -käyttöliittymä lähettää tietoja.

getWebsiteResponse - pääohjelma käyttää tätä saadakseen verkkosivun, jonka pitäisi vastata pyyntöön.

buttonEvent - tätä kutsutaan, jos jokin ohjauspaneelin painike painettiin tai vapautettiin.

timerTick - tätä toimintoa kutsutaan kukin 10 ms, jonka laukaisee ajastinkeskeytys. Sitä voidaan käyttää aikapohjana, mutta se ei saa sisältää aikaa vieviä asioita, koska se on keskeyttävä konteksti.

getName - tämän pitäisi palauttaa URL -osoitteen sovelluksen nimi

Vaihe 5: Ohjelmisto - Sovellukset

Ohjelmisto - Sovellukset
Ohjelmisto - Sovellukset
Ohjelmisto - Sovellukset
Ohjelmisto - Sovellukset
Ohjelmisto - Sovellukset
Ohjelmisto - Sovellukset
Ohjelmisto - Sovellukset
Ohjelmisto - Sovellukset

Seuraavat 7 sovellusta on otettu käyttöön nykyisessä versiossa:

Oletussovellus

Tämä on erikoissovellus, joka näyttää PixelWallin nykyisen WLAN -tilan. Jos seinä voi muodostaa yhteyden nykyiseen WLAN -verkkoon, se näyttää IP -osoitteen, jonka se on saanut verkosta.

Jos se ei ollut mahdollista (ssid -asetusta ei ole määritetty tai WLAN -verkkoa ei ole tai salasana on väärä), se avaa tukiaseman. Tässä tapauksessa voit muodostaa yhteyden PixelWalliin oletuspisteen IP -osoitteella ESP8266: 192.168.4.1

Web -käyttöliittymässä tämä sovellus sisältää 6 painiketta. Painamalla painiketta voit käynnistää sopivan sovelluksen.

Asetukset -sovellus

Tämä sovellus WLAN SSID: n ja salasanan määrittämiseen. Lisää vain WLAN -verkkotunnuksesi ja PixelWill yrittää seuraavan kerran muodostaa yhteyden tähän WLAN -verkkoon.

Pelit

PixelWallissa on ohjelmoitu kolme klassista peliä:

  • Tetris
  • Käärme
  • Avaruuden hyökkääjät

Kaikki pelit voidaan pelata web -käyttöliittymän kautta tai NES -ohjaimella.

Kuva -sovellus

Tämä on sovellus, joka näyttää värit PixelWallissa. Voit valita, onko sen liikkuva sateenkaari, haalistava eri värejä, näyttävä staattinen väri vai näytettäväkö vain satunnaisia värillisiä pikseleitä.

Pixel It

Tämän sovelluksen avulla voit asettaa jokaisen pikselin erikseen napauttamalla sormella Web -käyttöliittymää. Joten voit piirtää hulluja kuvia:)

Vaihe 6: Ohjaa Twitch -laajennuksen avulla

Ohjaus Twitch Extensionin kautta
Ohjaus Twitch Extensionin kautta

Twitchissä on laajennus nimeltä GetInTouch. Tämä laajennus mahdollistaa Arduino -projektien integroinnin livestriimiisi, jotta katsojat voivat hallita arduinoasi suoratoiston aikana.

Arduinon kirjasto tätä varten on kirjoitettu Arduinolle. Mutta kävi ilmi, että se toimii myös ESP8266: lla.

Sen käyttäminen Streamissa edellyttää seuraavia vaiheita:

  • Integroi GetInTouch -kirjasto koodiin (katso opetusohjelma)
  • Liitä pixelWall tietokoneeseen USB/RS232 -muuntimen kautta (jota käytetään myös ESP: n vilkkumiseen)
  • Asenna GetInTouch -sovellus verkkosivustolta
  • Asenna GetInTouch -laajennus Twitch -kanavallesi (katso opetusohjelma)

Vaihe 7: Nintendo NES -ohjaimen ohjaus

Nintendo NES -ohjaimen ohjaus
Nintendo NES -ohjaimen ohjaus

Hetken käytön jälkeen käy ilmi, että kosketuspuhelimella pelaaminen ei ole niin helppoa. Ajoittain kaipaat painikkeita, koska et saa palautetta sormestasi, oletko painikkeen päällä vai et. Lisäksi joskus Websocket -viestintä voi vuotaa lyhyeksi ajaksi.

Siksi päätin ostaa vanhan Nintendo NES -ohjaimen. Tällä ohjaimella on hyvin yksinkertainen käyttöliittymä. Se on vain 4021 -vuororekisteri, joka toimii 3, 3V: lla. Joten se voidaan liittää suoraan ESP8266 -laitteeseen.

Kaikki ohjaimen painiketapahtumat siirrettiin käynnissä olevaan sovellukseen buttonEvent () -toiminnon kautta.

Suositeltava: