Talaan ng mga Nilalaman:

PixelWall: 7 Hakbang (na may Mga Larawan)
PixelWall: 7 Hakbang (na may Mga Larawan)

Video: PixelWall: 7 Hakbang (na may Mga Larawan)

Video: PixelWall: 7 Hakbang (na may Mga Larawan)
Video: I hatched HUNDREDS of LEGENDARY EASTER EGGS to get the HUGE EASTER CAT in Pet Simulator X! 2024, Setyembre
Anonim
PixelWall
PixelWall

Alam mo ba ang proyekto ng Pixel-Table? Mayroon akong ideya na mapagtanto ang isang bagay na pixel, ngunit hindi bilang isang mesa, sa halip na ilagay ito sa dingding.

Upang maaari akong nakahiga sa sopa at maglaro ng mga laro dito habang nagpapahinga.:)

Ang ipinatupad na mga laro ay:

  • Tetris
  • Space Invaders
  • Ahas
  • Pagguhit ng Pixel

karagdagang mga pag-andar ay:

  • Ipakita ang kasalukuyang oras
  • Ipakita ang mga animasyong kulay

Ang PixelWall ay may isang ESP8266 kaya maaari itong kumonekta sa aking home-WLAN. Ngunit posible ring gamitin ang PixelWall bilang isang access point at direktang kumonekta dito.

Upang gawing madaling gamitin ang aking PixelWall, naghahatid ang pader ng isang Website para sa kontrol pagkatapos kumonekta. Ang lahat ng Mga App ay nakokontrol / maaaring i-play sa pamamagitan ng webpage. Kaya't hindi kinakailangan na mag-install ng anumang software para magamit.

Bilang karagdagan mayroong isang NES controller na ginagawang mas madali upang i-play ang mga laro.

Buksan ang mapagkukunan

Lahat ng mga guhit ng software at mekanikal na inilagay ko sa github: https://github.com/C3MA/PixelWallFeel libre upang magamit ito para sa iyong sariling proyekto.

Hakbang 1: Simula Sa Elektronik

Simula Sa Elektronik
Simula Sa Elektronik
Simula Sa Elektronik
Simula Sa Elektronik
Simula Sa Elektronik
Simula Sa Elektronik

Mula sa isa pang proyekto mayroong isang mayroon nang PCB na may WS2812 LEDs. Ang PCB ay may 3 mga hilera na may 12 LEDs bawat hilera.

Napagpasyahan kong gamitin ang PCB na ito ng 6 beses. Kaya nakakakuha ako ng 12x18 LED matrix.

Ang unang hakbang ay ito upang maghinang ng lahat ng 216 LEDs, sa paligid ng 100 capacitor at isang ESP8266.

Ang manu-manong paghihinang na kailangan ng halos 10 oras.

Matapos ang isang unang mabilis na pagsubok nalaman: ang lahat ay gumagana.

Kaya't maaari kaming pumunta sa bahagi ng mekaniko.

Hakbang 2: Paglikha ng Mekaniko

Paglikha ng Mekaniko
Paglikha ng Mekaniko
Paglikha ng Mekaniko
Paglikha ng Mekaniko
Paglikha ng Mekaniko
Paglikha ng Mekaniko
Paglikha ng Mekaniko
Paglikha ng Mekaniko

Una sa lahat kailangan namin ng isang seperater para sa bawat pixel. Ang ideya ay ilagay ang pahalang at patayong banda sa pamamagitan ng isang V-cut na magkasama.

Ang bawat banda ay may kapal na 3mm at taas na 17mm. Ang mga ito ay pinutol mula sa isang plato ng HDF ng isang lasercutter.

Ang lahat ng mga scetches para sa lasercutter ay iginuhit sa FreeCad (pinangalanang "Leiste" sa mekaniko folder ng proyekto ng github)

Ang grid ay ibinigay ng Layout ng PCB. Mayroon itong lapad na 28mm na haligi at taas ng 31mm na hilera.

Susunod na tanong ay: Paano ayusin ang mga banda sa PCB? Ang pagdikit ay hindi isang magandang ideya, sapagkat dapat posible na mag-disassemble kung may isang depekto. Kaya't napagpasyahan kong lokohin ito. Ngunit ang isang tornilyo ay hahatiin ang 3mm manipis na banda. Kaya't nai-print ko sa 3D printer ang isang bulsa para sa banda (ito ang bahagi na pinangalanang "Halter" sa proyekto ng github). Napakaganda nito upang maayos ang mga ito sa PCB.

Susunod na hakbang ay upang makakuha ng isang frame para dito. Mayroong ilang mga online shop na nag-aalok na i-cut ang mga indibidwal na mga frame ng larawan. Kaya't nag-order ako ng isang frame na may sukat na 343mm x 565mm.

Ang frame ay nakakakuha ng isang karagdagang butas sa ibabang bahagi para sa power supply.

Ang plato sa harap ng plexiglas ay nag-order din ako online. Ito ay isang WN770 opal Milchglasoptik LD45% na laki: 567x344x2mm

Mayroon itong translucence na 45%.

Pinagsasama ang lahat ng mga bahagi sa frame.

Sa dulo magkakaroon ng screwed ilang mga piraso sa likod, upang ang lahat ay maayos at hindi makalaglag.

Upang magkaroon ng isang pagpipilian para sa pagpapatakbo ng pixelWall nang walang anumang komunikasyon sa WLAN, lumikha ako ng isang plugable control panel na maaaring ipasok nang opsyonal sa kanang bahagi ng frame (tinatawag na "Bedieneinheit" sa proyekto ng github).

Hakbang 3: Software - Mga Pangunahing Kaalaman

Software - Mga Pangunahing Kaalaman
Software - Mga Pangunahing Kaalaman

Ang isa sa mga usecase ay upang maglaro ng mga laro sa PixelWall.

Ngunit ang pagsulat ng isang laro ng pixel ay laging nangangailangan ng isang kapaki-pakinabang na kapaligiran sa pag-debug. I dont know any way to debug ESP8266 controller sa isang angkop na paraan. Kaya't nagpasya akong gayahin ang buong code sa aking PC. Ang code ng ESP ay nakasulat sa Arduino C ++, kaya ginamit ko ang wika ng Visual Studio C ++ / CLI para sa simulation sa PC. Mayroong ilang mga pagkakaiba sa pagitan ng karaniwang C ++ at ng C ++ / CLI na wika. Halimbawa sa C ++ / CLI hindi ka makakalikha ng isang object ng uri ng String, dahil sa pagkolekta ng basura hindi pinapayagan na lumikha ng isang bagay o sanggunian / pointer sa naturang bagay. Sa C ++ / CLI kailangan mong gumamit ng mga humahawak: String ^. Ngunit ang mga naturang humahawak ay hindi umiiral sa pamantayan ng C ++. Kaya't kailangan kong maging malikhain upang pagsamahin ang parehong mundo. Nalutas ko ito sa pamamagitan ng paglikha ng isang sariling Arduino.h file para sa simulation. Ang file na ito ay nag-o-override lang sa simulation ng lahat ng mga string sa pamamagitan ng isang tukuyin na "#define String String ^". Ito ay hindi isang pangkaraniwang paraan, ngunit gumagana ito:) Maliban sa ilang maliit na switch ng tagatala ang lahat ng code ng ESP ay hindi naiipon sa Visual Studio C ++ / CLI.

LED Matrix

Ang unang klase na isinulat ko ay ang klase ng LED-Matrix. Hawak ng klase na ito ang kontrol at pagmamapa ng mga WS2812 LED.

Ang klase na ito ay isinulat nang dalawang beses: isang beses para sa tagontrol ng ESP8266 (LEDMatrixArduino.cpp) at isa pa na makokontrol ang mga hugis sa Form GUI sa simulation (LEDMatrixGUI.cpp).

Nagbibigay ang klase na ito ng ilang pangunahing pamamaraan para sa pagtatakda at pag-clear ng isang indibidwal na LED sa pamamagitan ng haligi at hilera nito.

Bilang karagdagan nagbibigay ito ng isang pagpapaandar na setBightness. Isasaalang-alang ang halagang ito kung maitatakda ang isang LED. Kaya't ang lahat ng mga naka-set na utos ay maaaring gawin nang buong ilaw. Halimbawa: Kung ang ningning ay nakatakda sa 50% at ang setLed () na pagpapaandar ay tinatawag na may RGBColor (255, 255, 255) itatakda nito ang LED sa 127, 127, 127.

LED Panel

Sa tuktok ng klase ng LED Matrix inilagay ko ang isang klase ng LED Panel. Ang klase na ito ay nagbibigay ng ilang mga kapaki-pakinabang na functionallity para sa anumang aplikasyon. Nagbibigay ito ng dalawang hindi mapagbigay na mga layer. Maaari itong maging kapaki-pakinabang para sa application. Halimbawa sa tetris game: ang layer0 ay para sa mga nakapirming bato sa ilalim at ang layer1 ay upang ipakita ang nahuhulog na bato. Kaya't bawat pag-ikot ng bato ay nahuhulog ng isang pixel sa ilalim, maaari lamang i-clear ng application ang layer1 at iguhit ang bato sa bago nitong posisyon. Ito ay hindi kinakailangan upang muling gawin ang lahat ng mga nakapirming bato sa ilalim.

Bukod pa rito ay nagbibigay ang panel

printImage - upang mai-print ang ilang mga icon tulad ng mga smiley o WLAN symbolprintDigit - upang mai-print ang isang digit sa isang tukoy na positionprintFormatedNumber - upang mai-print ang isang numero na may mga awtomatikong zerosprintNumber - upang mai-print ang isang integer numberprintLineH - pahalang na linya na may tukoy na haba ng habaLineV - pahalang na linya na may tukoy na haba

Hakbang 4: Software - Konsepto ng Application

Software - Konsepto ng Application
Software - Konsepto ng Application

Ang pangkalahatang konsepto para sa pixel Wall ay:

  • Ang bawat aplikasyon ay may sariling pangalan
  • Sinimulan ang isang application sa pamamagitan ng pagtawag sa pixelWall URL kasama ang pangalan ng application (halimbawa: 192.168.4.1/tetris)
  • Ang URL ay maaari ding magkaroon ng mga parameter na GET na ipapasa sa application
  • Ang bawat aplikasyon ay kailangang maghatid ng isang website na ipinapakita sa browser.
  • Ang website na ito ay maaaring opsyonal na magbukas ng isang koneksyon sa websocket sa application para sa mabilis na pakikipag-ugnayan
  • Maaaring gamitin ng application ang koneksyon sa websocket na ito upang makipag-usap pabalik sa web frontend.
  • Sa tabi ng web interface ang application ay nakakakuha ng karagdagan itulak ang mga kaganapan sa pindutan mula sa control panel at NES controller.

Application Interface

Upang gawing madali ang pagbuo ng mga bagong application para sa PixelWall, lumikha ako ng isang interface para sa mga application na pinangalanang "IPixelApp.h". Naglalaman ang interface na ito ng 8 mga kahulugan:

  • virtual void start () = 0;
  • virtual void end () = 0;
  • virtual void loop () = 0;
  • virtual void newWebsocketData (uint8_t * payload, size_t lenght) = 0;
  • virtual WebsiteResponse_t getWebsiteResponse (String parameter) = 0;
  • virtual void buttonEvent () = 0;
  • virtual void timerTick () = 0;
  • virtual String getName () = 0;

simulan / tapusin - ang pagpapaandar na ito ay tinatawag kung ang application ay nagsisimulang / natapos dahil nagsisimula ang isa pang application

loop - ang pagpapaandar na ito ay tinatawag mula sa pangunahing loop ng pangunahing programm. Ang tawag na ito ay hindi regular at sa labas ng isang nakakagambala.

newWebsocketData - ang pagpapaandar na ito ay tinatawag kung ang web frontend ay nagpadala ng data.

getWebsiteResponse - ginagamit ito ng pangunahing programm upang makuha ang webpage na dapat ay respont sa kahilingan.

buttonEvent - tinatawag ito kung ang anumang pindutan sa control panel ay pinindot o pinakawalan.

timerTick - ang pagpapaandar na ito ay tinatawag na bawat 10ms, na na-trigger ng isang timer na nakakagambala. Maaari itong magamit para sa time base ngunit hindi dapat maglaman ng anumang mga intensive time na bagay, dahil ito ay isang nakakagambalang konteksto.

getName - dapat nitong ibalik ang pangalan ng application para sa URL

Hakbang 5: Software - Mga Aplikasyon

Software - Mga Aplikasyon
Software - Mga Aplikasyon
Software - Mga Aplikasyon
Software - Mga Aplikasyon
Software - Mga Aplikasyon
Software - Mga Aplikasyon
Software - Mga Aplikasyon
Software - Mga Aplikasyon

Ang sumusunod na 7 mga application ay ipinatupad sa kasalukuyang bersyon:

Default na App

Ito ay isang spezial App na nagpapakita ng kasalukuyang estado ng WLAN ng PixelWall. Kung ang pader ay maaaring kumonekta sa isang kasalukuyang WLAN, ipapakita nito ang IP Address na nakuha mula sa Network.

Kung hindi posible (walang naka-setup na ssid o wala ang WLAN o mali ang password) magbubukas ito ng isang Accesspoint. Sa kasong ito maaari kang kumonekta sa PixelWall sa pamamagitan ng default na Accesspoint IP mula sa ESP8266: 192.168.4.1

Sa Webinterface ang App na ito ay nagtatanghal ng 6 Buttons. Sa pamamagitan ng pagpindot sa pindutan maaari mong simulan ang naaangkop na Application.

Mga Setting App

Ang App na ito para sa pag-set up ng WLAN SSID at password. Ipasok lamang ang mga kredensyal ng iyong WLAN at sa susunod na pagsisimula ng PixelWill susubukan nitong kumonekta sa WLAN na ito.

Mga Laro

Mayroong tatlong mga klasikong laro na na-program sa PixelWall:

  • Tetris
  • Ahas
  • Space Invaders

Ang lahat ng mga laro ay maaaring i-play sa pamamagitan ng webinterface o gamit ang NES controller.

Image App

Ito ay isang App na nagpapakita ng mga kulay sa PixelWall. Maaari kang pumili kung dapat itong isang gumagalaw na bahaghari, pagkupas ng iba't ibang mga kulay, nagpapakita ng static na kulay o ipakita lamang ang mga random na may kulay na mga pixel.

Pixel Ito

Sa App na ito maaari mong itakda ang bawat pixel nang magkahiwalay sa pamamagitan ng pag-tap sa iyong daliri sa Webinterface. Kaya maaari kang gumuhit ng ilang mga larawan ng cracy:)

Hakbang 6: Kontrolin Sa pamamagitan ng Extension ng Twitch

Kontrolin Sa pamamagitan ng Extension ng Twitch
Kontrolin Sa pamamagitan ng Extension ng Twitch

Mayroong isang Extension sa Twitch na nagngangalang GetInTouch. Pinapayagan ng Extension na ito na isama ang mga proyekto ng Arduino sa iyong livestream, upang makontrol ng mga manonood ang iyong arduino habang nag-stream.

Ang Arduino library para dito ay nakasulat para sa Arduinos. Ngunit ito ay naka-out na ito ay tumatakbo din sa ESP8266 propably.

Upang magamit ito sa mga sumusunod na hakbang ay kinakailangan:

  • Isama ang GetInTouch library sa code (tingnan ang tutorial)
  • Ikonekta ang pixelWall sa iyong PC sa pamamagitan ng USB / RS232 converter (na ginagamit din para sa flashing ng ESP)
  • I-install ang GetInTouch Application mula sa Website
  • I-install ang GetInTouch Extension sa iyong Twitch channel (tingnan ang tutorial)

Hakbang 7: Kontrolin ng Nintendo NES Controller

Kontrol ng Nintendo NES Controller
Kontrol ng Nintendo NES Controller

Matapos itong gamitin nang ilang sandali, lumalabas na, ang pag-play sa touch mobile phone ay hindi ganoong kadali. Paminsan-minsan ay napalampas mo ang mga pindutan dahil wala kang feedback sa iyong daliri kung ikaw ay nasa ibabaw ng pindutan o hindi. Karagdagan kung minsan ang komunikasyon sa Websocket ay maaaring tumagas sa isang maikling panahon.

Dahil dito napagpasyahan kong bumili ng isang lumang Nintendo NES controller. Ang controller na ito ay may isang napaka-simpleng interface. Ito ay isang 4021 shift register lamang na tumatakbo sa 3, 3V. Kaya't maaari itong konektado nang direkta sa ESP8266.

Lahat ng mga kaganapan sa pindutan sa controller kung saan ipinasa sa tumatakbo na application sa pamamagitan ng pag-andar ng buttonEvent ().

Inirerekumendang: