Mundarija:

PixelWall: 7 qadam (rasmlar bilan)
PixelWall: 7 qadam (rasmlar bilan)

Video: PixelWall: 7 qadam (rasmlar bilan)

Video: PixelWall: 7 qadam (rasmlar bilan)
Video: Узбекистон Буйук Давлат #запал #uzbekistan #zapallar #tiktok #gmavto #chingiz #uzb #xabarlaruz #r 2024, Sentyabr
Anonim
PixelWall
PixelWall

Pixel-Table loyihasini bilasizmi? Menda bunday pikselli narsani amalga oshirish fikri bor edi, lekin uni stol sifatida emas, balki devorga qo'yish.

Shunday qilib, men divanda yotib, dam olayotganimda uning ustida o'yin o'ynay olaman.:)

Amalga oshiriladigan o'yinlar:

  • Tetris
  • Kosmik bosqinchilar
  • Ilon
  • Pixel Draw

qo'shimcha funktsiyalar:

  • Joriy vaqtni ko'rsatish
  • Rangli animatsiyalarni ko'rsatish

PixelWall-da ESP8266 bor, shuning uchun u mening uyim-WLAN-ga ulanishi mumkin. Ammo, shuningdek, PixelWall -ni kirish nuqtasi sifatida ishlatish va unga to'g'ridan -to'g'ri ulanish mumkin.

PixelWall -dan foydalanishni osonlashtirish uchun devor ulanganidan keyin nazorat qilish uchun veb -saytni taqdim etadi. Barcha ilovalar veb -sahifa orqali boshqarilishi/ijro etilishi mumkin. Shuning uchun foydalanish uchun hech qanday dasturiy ta'minotni o'rnatish shart emas.

Bundan tashqari, o'yinlarni o'ynashni osonlashtiradigan NES boshqaruvchisi mavjud.

Ochiq manba

Men github -ga qo'ygan barcha dasturiy ta'minot va mexanik chizmalar: https://github.com/C3MA/PixelWallFeel, o'z loyihangiz uchun ishlatishdan xursand bo'ling.

1 -qadam: Elektrondan boshlash

Elektrondan boshlash
Elektrondan boshlash
Elektrondan boshlash
Elektrondan boshlash
Elektrondan boshlash
Elektrondan boshlash

Boshqa loyihada WS2812 LEDli mavjud PCB mavjud. PCB 3 qatordan iborat bo'lib, har bir satrda 12 ta LED mavjud.

Men bu tenglikni 6 marta ishlatishga qaror qildim. Shunday qilib, men 12x18 LED matritsasini olaman.

Birinchi qadam barcha 216 LEDni, 100 ga yaqin kondansatörni va ESP8266 ni lehimlash edi.

Qo'lda lehimlash uchun taxminan 10 soat kerak bo'ladi.

Birinchi tezkor sinovdan so'ng, hamma narsa aniq ekanligini aniqladi.

Shunday qilib, biz mexanik qismga o'tishimiz mumkin.

2 -qadam: mexanikni yaratish

Mexanikni yaratish
Mexanikni yaratish
Mexanikani yaratish
Mexanikani yaratish
Mexanikni yaratish
Mexanikni yaratish
Mexanikani yaratish
Mexanikani yaratish

Birinchidan, har bir piksel uchun alohida ajratgich kerak. Fikr gorizontal va vertikal chiziqni V-kesma orqali birlashtirish.

Har bir bantning qalinligi 3 mm va balandligi 17 mm. Ular HDF plastinkasidan lazer yordamida kesiladi.

Lazer kesgichning barcha sketchlari FreeCad -da chizilgan (github loyihasining mexanik papkasida "Leiste" nomi berilgan)

Tarmoq PCB tartibi bilan berilgan. Ustun kengligi 28 mm va qator balandligi 31 mm.

Keyingi savol: PCB tasmalarini qanday tuzatish kerak? Yelimlash unchalik yaxshi emas, chunki agar biror narsa nuqsonli bo'lsa, demontaj qilish mumkin. Shuning uchun men uni buzishga qaror qildim. Ammo vida 3 mm yupqa tasmani ajratib qo'yadi. Shunday qilib, men 3D printer bilan guruh uchun cho'ntak chop etdim (bu github loyihasida "Halter" deb nomlangan qism). Bu ularni PCBda tuzatish uchun juda yaxshi ishladi.

Keyingi qadam - buning uchun ramka olish. Ba'zi onlayn -do'konlar individual rasm ramkalarini kesishni taklif qilishadi. Shunday qilib, men 343 mm x 565 mm o'lchamdagi ramka buyurtma qildim.

Ramka pastki qismida quvvat manbai uchun qo'shimcha teshik oladi.

Men pleksiglas old plastinkasini ham onlayn buyurtma qildim. Bu WN770 opal Milchglasoptik LD45% hajmi: 567x344x2mm

Shaffofligi 45%ni tashkil qiladi.

Barcha qismlarni ramkaga birlashtirish.

Oxirida, orqa tomondan bir nechta chiziqlar vidalanadi, shunda hamma narsa tuzatiladi va tushmaydi.

PixelWall -ni hech qanday WLAN aloqasi bo'lmagan holda ishlash imkoniyatiga ega bo'lish uchun men ixtiyoriy ravishda ramkaning o'ng tomoniga o'rnatiladigan (github loyihasida "Bedieneinheit" deb nomlanadigan) ulanadigan boshqaruv panelini yaratdim.

3 -qadam: Dasturiy ta'minot - asoslari

Dasturiy ta'minot - asoslari
Dasturiy ta'minot - asoslari

Qulay vaziyatlardan biri bu PixelWall -da o'yin o'ynash.

Ammo pikselli o'yin yozish uchun har doim foydali disk raskadrovka muhiti kerak bo'ladi. Men ESP8266 tekshirgichini mos ravishda disk raskadrovka qilishni bilmayman. Shunday qilib, men butun kompyuterni simulyatsiya qilishga qaror qildim. ESP kodi Arduino C ++ da yozilgan, shuning uchun men kompyuterda simulyatsiya qilish uchun Visual Studio C ++/CLI tilidan foydalanardim. Standart C ++ va C ++/CLI tili o'rtasida ba'zi farqlar mavjud. Masalan, C ++/CLI -da siz String tipidagi ob'ektni yarata olmaysiz, axlat yig'ish tufayli bunday ob'ektga ob'ekt yoki mos yozuvlar/ko'rsatgich yaratishga ruxsat berilmaydi. C ++/CLI -da siz tutqichlardan foydalanishingiz kerak: String^. Ammo bunday tutqichlar C ++ standartida mavjud emas edi. Shunday qilib, men ikkala dunyoni birlashtirish uchun ijodkor bo'lishim kerak edi. Men buni simulyatsiya uchun o'z Arduino.h faylini yaratish orqali hal qildim. Bu fayl simulyatsiyada "#define String String^" ta'rifi orqali barcha satrlarni bekor qiladi. Bu keng tarqalgan usul emas, lekin u ishlaydi:) Ba'zi kichik kompilyatorlardan tashqari, barcha ESP kodlari Visual Studio C ++/CLIda kompilyatsiya qilinganidan ko'ra.

LED matritsasi

Men yozgan birinchi sinf-LED-matritsa klassi. Bu sinf WS2812 LEDlarini boshqarish va xaritalash bilan shug'ullanadi.

Bu sinf ikki marta yozilgan: bir marta ESP8266 tekshirgichi (LEDMatrixArduino.cpp) uchun, ikkinchisi esa simulyatsiyada GUI formasidagi shakllarni boshqaradi (LEDMatrixGUI.cpp).

Bu sinf alohida LEDni ustun va satr orqali sozlash va tozalashning ba'zi asosiy usullarini taqdim etadi.

Bundan tashqari, u setBrightness funktsiyasini ta'minlaydi. Agar LED o'rnatilgan bo'lsa, bu qiymat hisobga olinadi. Shunday qilib, barcha LED-buyruqlar to'liq nashrida bajarilishi mumkin. Masalan: Agar nashrida 50% ga o'rnatilsa va setLed () funktsiyasi RGBColor (255, 255, 255) bilan chaqirilsa, u LEDni 127, 127, 127 ga o'rnatadi.

LED paneli

LED Matrix sinfining yuqori qismiga men LED panelli sinf qo'ydim. Bu sinf har qanday dastur uchun foydali funktsiyalarni taqdim etadi. U ikkita mustaqil qatlamni ta'minlaydi. Bu dastur uchun foydali bo'lishi mumkin. Masalan, tetris o'yinida: 0 -qavat pastki qismidagi toshlar uchun, 1 -qavat esa tushayotgan toshni ko'rsatish uchun. Shunday qilib, toshning har bir tsikli pastga bir piksel pastga tushadi, dastur faqat 1 -qatlamni tozalab, toshni yangi joyiga chizishi mumkin. Pastki qismidagi barcha toshlarni qayta chizish shart emas.

Bundan tashqari, panel taqdim etadi

printImage - tabassumlar yoki WLAN belgisi kabi ba'zi belgilarni chop etish uchun raqamli raqamli raqam - ma'lum bir pozitsiyada bitta raqamni chop etish uchun Formatlangan raqam - zerosprint sonli prefiksli raqamni chop etish uchun - tamsayı sonini chop etish uchun chiziqli chiziq - ma'lum uzunlikdagi gorizontal chiziqLineV - ma'lum uzunlikdagi gorizontal chiziq.

4 -qadam: dasturiy ta'minot - dastur tushunchasi

Dasturiy ta'minot - dastur tushunchasi
Dasturiy ta'minot - dastur tushunchasi

Pixel Wall uchun umumiy tushuncha:

  • Har bir dastur o'z nomiga ega
  • Ilova pixelWall URL manzilini, shu jumladan dastur nomini chaqirish orqali boshlanadi (masalan: 192.168.4.1/tetris)
  • Shuningdek, URLda GET parametrlari bo'lishi mumkin, ular ilovaga yuboriladi
  • Har bir dastur brauzerda ko'rsatiladigan veb -saytni taqdim etishi kerak.
  • Ushbu veb -sayt ixtiyoriy ravishda tezkor o'zaro ta'sir qilish uchun ilovaga veb -ulanishni ochishi mumkin
  • Ilova ushbu veb -tarmoq ulanishidan veb -frontendga qayta bog'lanish uchun foydalanishi mumkin.
  • Veb -interfeysdan tashqari, dastur qo'shimcha ravishda boshqaruv paneli va NES kontrolleridan tugmachali hodisalarni oladi.

Dastur interfeysi

PixelWall uchun yangi ilovalarni ishlab chiqishni osonlashtirish uchun men "IPixelApp.h" nomli ilovalar uchun interfeys yaratdim. Ushbu interfeys 8 ta ta'rifni o'z ichiga oladi:

  • virtual bo'shliqni boshlash () = 0;
  • virtual bo'shliq oxiri () = 0;
  • virtual bo'shliq pastadir () = 0;
  • newWebsocketData virtual bo'shliq (uint8_t * yuk, hajmi_t uzunligi) = 0;
  • virtual WebsiteResponse_t getWebsiteResponse (String parametri) = 0;
  • virtual bo'sh tugmaEvent () = 0;
  • virtual bo'shliq timerTick () = 0;
  • virtual String getName () = 0;

start / end - bu funksiya, agar dastur ishga tushsa / tugasa, boshqa dastur ishga tushgani uchun chaqiriladi

pastadir - bu funksiya asosiy dasturning asosiy tsiklidan chaqiriladi. Bu qo'ng'iroq tartibsiz va uzilishdan tashqarida.

newWebsocketData - agar veb -frontend ma'lumot yuborgan bo'lsa, bu funksiya chaqiriladi.

getWebsiteResponse - bu asosiy dastur tomonidan so'rovga javob beradigan veb -sahifani olish uchun ishlatiladi.

buttonEvent - bu boshqaruv panelidagi biron bir tugma bosilgan yoki qo'yib yuborilgan bo'lsa chaqiriladi.

timerTick - bu funksiya har 10ms deb ataladi, bu taymerning uzilishidan kelib chiqadi. U vaqt bazasi uchun ishlatilishi mumkin, lekin vaqtni talab qiladigan narsalarni o'z ichiga olmaydi, chunki bu uzilishli kontekst.

getName - bu URL uchun dastur nomini qaytarishi kerak

5 -qadam: dasturiy ta'minot - ilovalar

Dasturiy ta'minot - ilovalar
Dasturiy ta'minot - ilovalar
Dasturiy ta'minot - ilovalar
Dasturiy ta'minot - ilovalar
Dasturiy ta'minot - ilovalar
Dasturiy ta'minot - ilovalar
Dasturiy ta'minot - ilovalar
Dasturiy ta'minot - ilovalar

Quyidagi 7 ta ilova joriy versiyada amalga oshiriladi:

Standart ilova

Bu PixelWall -ning hozirgi WLAN holatini ko'rsatadigan maxsus dastur. Agar devor hozirgi WLAN -ga ulana oladigan bo'lsa, u tarmoqdan olgan IP -manzilini ko'rsatadi.

Agar buning iloji bo'lmasa (ssid sozlanmagan yoki WLAN mavjud bo'lmasa yoki parol noto'g'ri bo'lsa), u kirish nuqtasini ochadi. Bunday holda siz PixelWall -ga ESP8266 standart kirish nuqtasi IP orqali ulanishingiz mumkin: 192.168.4.1

Veb -interfeysda ushbu ilova 6 ta tugmachani taqdim etadi. Tugmani bosish bilan siz tegishli ilovani ishga tushirishingiz mumkin.

Sozlamalar ilovasi

Bu ilova WLAN SSID va parolni sozlash uchun. Faqat WLAN ma'lumotlarini kiriting va PixelWill -ning keyingi boshlanishida u ushbu WLAN -ga ulanishga harakat qiladi.

O'yinlar

PixelWall -da uchta klassik o'yinlar dasturlashtirilgan:

  • Tetris
  • Ilon
  • Kosmik bosqinchilar

Barcha o'yinlarni veb -interfeys orqali yoki NES boshqaruvchisi bilan o'ynash mumkin.

Rasm ilovasi

Bu PixelWall -da ranglarni ko'rsatadigan dastur. Siz tanlashingiz mumkin, bu kamalakning harakatlanishi, turli xil ranglarning so'nishi, statik rangni ko'rsatish yoki tasodifiy rangli piksellarni ko'rsatish.

Bu piksel

Ushbu ilova yordamida barmog'ingiz bilan veb -interfeysga tegib, har bir pikselni alohida belgilashingiz mumkin. Shunday qilib, siz chiroyli rasmlarni chizishingiz mumkin:)

6 -qadam: Twitch kengaytmasi orqali boshqarish

Twitch kengaytmasi orqali boshqarish
Twitch kengaytmasi orqali boshqarish

Twitch -da GetInTouch nomli kengaytma mavjud. Bu kengaytma tomoshabinlar sizning arduino -ni oqim paytida boshqarishi uchun Arduino loyihalarini sizning jonli translyatsiyangizga qo'shishga imkon beradi.

Buning uchun Arduino kutubxonasi Arduinos uchun yozilgan. Ma'lum bo'lishicha, u ESP8266 da ishlaydi.

Uni oqimda ishlatish uchun quyidagi amallarni bajarish kerak:

  • GetInTouch kutubxonasini kodga birlashtirish (qo'llanmani ko'ring)
  • PixelWall -ni kompyuteringizga USB/RS232 konvertori orqali ulang (bu ESP -ni o'chirish uchun ham ishlatiladi)
  • GetInTouch ilovasini saytdan o'rnating
  • GetInTouch kengaytmasini Twitch kanalingizga o'rnating (qo'llanmani ko'ring)

7 -qadam: Nintendo NES Controller tomonidan nazorat

Nintendo NES Controller tomonidan nazorat
Nintendo NES Controller tomonidan nazorat

Bir muncha vaqt ishlatilgandan so'ng, sensorli mobil telefonda o'ynash unchalik oson emasligi ma'lum bo'ldi. Vaqti -vaqti bilan tugmachalarni o'tkazib yuborasiz, chunki siz tugmani bosib turasizmi yoki yo'qmi, barmog'ingiz haqida hech qanday fikr bildirmaysiz.

Shuning uchun men eski Nintendo NES boshqaruvini sotib olishga qaror qildim. Bu boshqaruvchi juda oddiy interfeysga ega. Bu 3, 3V bilan ishlaydigan 4021 smenali registr. Shunday qilib, uni to'g'ridan -to'g'ri ESP8266 ga ulash mumkin.

Butun voqealar tugmachasi () funktsiyasi orqali ishlaydigan ilovaga yuboriladigan tekshirgichdagi tugmalar.

Tavsiya: