Indholdsfortegnelse:

PixelWall: 7 trin (med billeder)
PixelWall: 7 trin (med billeder)

Video: PixelWall: 7 trin (med billeder)

Video: PixelWall: 7 trin (med billeder)
Video: Tech Talk: How to Pick the Right Video Wall Pixel Pitch for Your Application | CHAUVET Professional 2024, September
Anonim
PixelWall
PixelWall

Kender du Pixel-Table-projektet? Jeg havde tanken om at realisere sådan en pixelting, men ikke som et bord, i stedet for at sætte det på væggen.

Så jeg kan ligge på sofaen og spille nogle spil på den, mens jeg slapper af.:)

Implementerede spil er:

  • Tetris
  • Space invaders
  • Slange
  • Pixel Draw

yderligere funktioner er:

  • Vis det aktuelle tidspunkt
  • Vis farve animationer

PixelWall har en ESP8266, så den kan oprette forbindelse til mit hjem-WLAN. Men det er også muligt at bruge PixelWall som et adgangspunkt og oprette forbindelse direkte til det.

For at gøre det let at bruge min PixelWall leverer væggen et websted til kontrol efter tilslutning. Alle apps kan kontrolleres/afspilles via websiden. Så det er ikke nødvendigt at installere software til brug.

Derudover er der en NES -controller, der gør det lettere at spille spil.

Åben kilde

Al software og mekaniske tegninger, jeg lagde på github: https://github.com/C3MA/PixelWall Føl dig fri til at bruge det til dit eget projekt.

Trin 1: Start med elektronikken

Starter med elektronikken
Starter med elektronikken
Starter med elektronikken
Starter med elektronikken
Starter med elektronikken
Starter med elektronikken

Fra et andet projekt er der et eksisterende printkort med WS2812 lysdioder. Printkortet har 3 rækker med 12 lysdioder i hver række.

Jeg besluttede at bruge denne print 6 gange. Så jeg får en 12x18 LED matrix.

Første trin var at lodde alle 216 lysdioder, omkring 100 kondensatorer og en ESP8266.

Den manuelle lodning havde brug for cirka 10 timer.

Efter en første hurtig test fandt det ud af: alt fungerer.

Så vi kan gå til mekanikerdelen.

Trin 2: Oprettelse af mekanikeren

Oprettelse af mekanikeren
Oprettelse af mekanikeren
Oprettelse af mekanikeren
Oprettelse af mekanikeren
Oprettelse af mekanikeren
Oprettelse af mekanikeren
Oprettelse af mekanikeren
Oprettelse af mekanikeren

Først og fremmest har vi brug for en separat for hver pixel. Ideen er at sætte det vandrette og lodrette bånd via et V-snit sammen.

Hvert bånd har en tykkelse på 3 mm og en højde på 17 mm. De skæres fra en HDF -plade af en laserskærer.

Alle tegninger til laserskæreren er tegnet i FreeCad (navngivet "Leiste" i den mekaniske mappe i github -projektet)

Gitteret er givet ved PCB -layoutet. Det har en 28 mm søjlebredde og 31 mm rækkehøjde.

Næste spørgsmål er: Hvordan repareres båndene på printkortet? Limning er ikke en så god idé, for det burde være muligt at skille ad, hvis noget er defekt. Så jeg besluttede at ødelægge det. Men en skrue vil dele det 3 mm tynde bånd. Så jeg printede med 3D -printer en lomme til båndet (dette er den del, der hedder "Halter" i github -projektet). Dette fungerede ret godt til at reparere dem på printkortet.

Næste trin er at få en ramme til det. Der er nogle online butikker, der tilbyder at klippe individuelle billedrammer. Så jeg bestilte en ramme med størrelsen 343 mm x 565 mm.

Rammen får et yderligere hul på undersiden til strømforsyningen.

Plexiglasfrontpladen bestilte jeg også online. Det er en WN770 opal Milchglasoptik LD45% størrelse: 567x344x2mm

Den har en gennemsigtighed på 45%.

Sætter alle dele sammen i rammen.

I slutningen vil der blive skruet nogle strimler på bagsiden, så alt er fastgjort og ikke kan falde ud.

For at have en mulighed for betjening af pixelWall uden nogen WLAN -kommunikation oprettede jeg et kontrolpanel, der kan tilsluttes, og som valgfrit kan indsættes på højre side af rammen (kaldet "Bedieneinheit" i github -projektet).

Trin 3: Software - Grundlæggende

Software - Grundlæggende
Software - Grundlæggende

En af anvendelsesmulighederne er at spille spil på PixelWall.

Men at skrive et pixel -spil vil altid have brug for et nyttigt debugging -miljø. Jeg kender ikke nogen måde at debug ESP8266 controller på en passende måde. Så jeg besluttede at simulere hele koden på min pc. ESP -koden er skrevet i Arduino C ++, så jeg brugte Visual Studio C ++/CLI -sprog til simuleringen på pc. Der er nogle forskelle mellem standard C ++ og C ++/CLI -sproget. For eksempel i C ++/CLI kan du ikke oprette et objekt af strengtype, på grund af affaldssamling er det ikke tilladt at oprette et objekt eller en reference/markør til et sådant objekt. I C ++/CLI skal du bruge håndtag: String^. Men sådanne håndtag eksisterer ikke i C ++ - standarden. Så jeg var nødt til at være kreativ for at bringe begge verdener sammen. Jeg løste dette ved at oprette en egen Arduino.h -fil til simuleringen. Denne fil tilsidesætter bare alle strenge i simuleringen gennem en definere "#define String String^". Dette er ikke en almindelig måde, men det virker:) Bortset fra nogle små kompilator -switches er alle ESP -koder end kompilerbare i Visual Studio C ++/CLI.

LED Matrix

Den første klasse, jeg skrev, er LED-Matrix-klassen. Denne klasse håndterer kontrol og kortlægning af WS2812 lysdioder.

Denne klasse blev skrevet to gange: én gang til ESP8266 -controlleren (LEDMatrixArduino.cpp) og en anden, som styrer figurer på form -GUI i simuleringen (LEDMatrixGUI.cpp).

Denne klasse giver nogle grundlæggende metoder til at indstille og rydde en individuel LED efter dens søjle og række.

Derudover har den en setBrightness -funktion. Denne værdi tages i betragtning, hvis der indstilles en LED. Så alle LED-kommandoer kan udføres med fuld lysstyrke. For eksempel: Hvis lysstyrken er indstillet til 50%, og funktionen setLed () kaldes med RGBColor (255, 255, 255), indstiller LED'en til 127, 127, 127.

LED Panel

Oven på LED Matrix -klassen satte jeg en LED -panelklasse. Denne klasse giver nogle nyttige funktionaliteter til enhver applikation. Det giver to uafhængige lag. Dette kan være nyttigt for applikationen. For eksempel på tetris -spil: lag 0 er for de faste sten på bunden og laget1 skal vise den faldende sten. Så hver cyklus falder stenen en pixel til bunden, applikationen kan bare rydde lag1 og tegne stenen på sin nye position. Det er ikke nødvendigt at tegne alle faste sten i bunden.

Derudover giver panelet

printImage - for at udskrive nogle ikoner som smileys eller WLAN -symbolprint Digital - til at udskrive et ciffer på en bestemt positionprintFormatedNumber - for at udskrive et tal med præfikser zerosprintNumber - for at udskrive et helt talnummerprintLineH - vandret linje med specifik længdeprintLineV - vandret linje med bestemt længde

Trin 4: Software - applikationskoncept

Software - applikationskoncept
Software - applikationskoncept

Det generelle koncept for pixelvæggen er:

  • Hver applikation har sit eget navn
  • En applikation startes ved at kalde pixelWall -URL'en inklusive applikationsnavnet (f.eks.: 192.168.4.1/tetris)
  • URL'en kan også have GET -parametre, som vil blive videresendt til applikationen
  • Hver applikation skal levere et websted, der vises i browseren.
  • Dette websted kan valgfrit åbne en websocket -forbindelse til applikationen for hurtige interaktioner
  • Applikationen kan bruge denne websocket -forbindelse til at kommunikere tilbage til webfronten.
  • Ved siden af webgrænsefladen får applikationen yderligere trykknaphændelser fra kontrolpanelet og NES -controlleren.

Applikationsgrænseflade

For at gøre det let at udvikle nye applikationer til PixelWall oprettede jeg en grænseflade til applikationer med navnet "IPixelApp.h". Denne grænseflade indeholder 8 definitioner:

  • virtuel tomrumsstart () = 0;
  • virtuel hulrum () = 0;
  • virtuel hulrum () = 0;
  • virtuelt tomrum newWebsocketData (uint8_t * nyttelast, størrelse_t længde) = 0;
  • virtuel WebsiteResponse_t getWebsiteResponse (String parameter) = 0;
  • virtual void buttonEvent () = 0;
  • virtuel void timerTick () = 0;
  • virtuel streng getName () = 0;

start / slut - denne funktion kaldes, hvis applikationen starter / slutter, fordi en anden applikation starter

loop - denne funktion kaldes fra hovedprogrammet til hovedprogrammet. Dette opkald er uregelmæssigt og uden for en afbrydelse.

newWebsocketData - denne funktion kaldes, hvis webfrontend sendte data.

getWebsiteResponse - dette bruges af hovedprogrammet til at hente websiden, som skal responderes til anmodningen.

buttonEvent - dette kaldes, hvis der blev trykket på eller sluppet en knap på kontrolpanelet.

timerTick - denne funktion kaldes hver 10 ms, udløst af en timerafbrydelse. Det kan bruges til tidsbase, men må ikke indeholde nogen tidskrævende ting, fordi det er en afbrydende kontekst.

getName - dette skal returnere navnet på applikationen til webadressen

Trin 5: Software - applikationer

Software - applikationer
Software - applikationer
Software - applikationer
Software - applikationer
Software - applikationer
Software - applikationer
Software - applikationer
Software - applikationer

Følgende 7 applikationer er implementeret i den aktuelle version:

Standardapp

Dette er en speciel app, der viser den aktuelle WLAN -tilstand for PixelWall. Hvis væggen kunne oprette forbindelse til et nuværende WLAN, viser den IP -adressen, som den fik fra netværket.

Hvis det ikke var muligt (ingen ssid er konfigureret, eller WLAN ikke er til stede, eller adgangskoden er forkert), åbnes et Accesspoint. I dette tilfælde kan du oprette forbindelse til PixelWall via standard Accesspoint IP fra ESP8266: 192.168.4.1

På webinterface præsenterer denne app 6 knapper. Ved at trykke på knappen kan du starte den relevante applikation.

Indstillinger App

Denne app til opsætning af WLAN SSID og adgangskode. Indsæt bare legitimationsoplysningerne for dit WLAN, og ved den næste start af PixelWill vil det forsøge at oprette forbindelse til dette WLAN.

Spil

Der er tre klassiske spil programmeret i PixelWall:

  • Tetris
  • Slange
  • Space invaders

Alle spil kan spilles via webinterface eller med NES -controlleren.

Image App

Dette er en app, der viser farver på PixelWall. Du kan vælge, om det skal være en regnbue i bevægelse, falme forskellige farver, vise statisk farve eller bare vise tilfældigt farvede pixels.

Pixel det

Med denne app kan du indstille hver pixel separat ved at trykke med din finger på webinterfacet. Så du kan tegne nogle cracy -billeder:)

Trin 6: Styr via Twitch Extension

Kontrol via Twitch Extension
Kontrol via Twitch Extension

Der er en udvidelse på Twitch ved navn GetInTouch. Denne udvidelse gør det muligt at integrere Arduino -projekter i din livestream, så seerne kan styre din arduino under streaming.

Arduino -biblioteket til dette er skrevet til Arduinos. Men det viste sig, at den også kan køre på ESP8266.

For at bruge det i Stream er følgende trin nødvendige:

  • Integrer GetInTouch -biblioteket i koden (se selvstudium)
  • Tilslut pixelWall til din pc via USB/RS232 -konverteren (som også bruges til at blinke ESP)
  • Installer GetInTouch -applikation fra webstedet
  • Installer GetInTouch Extension på din Twitch -kanal (se selvstudium)

Trin 7: Kontrol med Nintendo NES Controller

Kontrol af Nintendo NES Controller
Kontrol af Nintendo NES Controller

Efter at have brugt det et stykke tid, viser det sig, at afspilning på touch -mobiltelefon ikke er så let. Af og til savner du knapperne, fordi du ikke har nogen feedback på din finger, uanset om du er over knappen eller ej. Desuden kan Websocket -kommunikation undertiden lække i kort tid.

Derfor besluttede jeg at købe en gammel Nintendo NES -controller. Denne controller har en meget enkel grænseflade. Det er bare et 4021 skiftregister, der kører med 3, 3V. Så den kan forbindes direkte til ESP8266.

Alle knaphændelser på controlleren blev videresendt til det kørende program via funktionen buttonEvent ().

Anbefalede: