Mündəricat:

PixelWall: 7 addım (şəkillərlə)
PixelWall: 7 addım (şəkillərlə)

Video: PixelWall: 7 addım (şəkillərlə)

Video: PixelWall: 7 addım (şəkillərlə)
Video: Учебное пособие по подвеске листа макраме | Как сделать жесткий лист макраме из перьев 2024, Sentyabr
Anonim
PixelWall
PixelWall

Pixel-Table layihəsini bilirsinizmi? Belə bir pikselli bir şeyi həyata keçirmək fikrim var idi, amma onu masa kimi deyil, divara qoymaq.

Divanda uzanıb rahatlayarkən onun üzərində bir az oyun oynaya bilərəm.:)

Həyata keçirilən oyunlar bunlardır:

  • Tetris
  • Kosmik İşğalçılar
  • İlan
  • Pixel Draw

əlavə funksiyalar bunlardır:

  • Cari vaxtı göstərin
  • Rəngli animasiyalar göstərin

PixelWall bir ESP8266-ya malikdir, buna görə ev-WLAN-a qoşula bilər. Ancaq PixelWall -dan bir giriş nöqtəsi olaraq istifadə etmək və birbaşa ona qoşulmaq da mümkündür.

PixelWall istifadə etməyimi asanlaşdırmaq üçün bağlandıqdan sonra divar nəzarət üçün bir veb sayt təqdim edir. Bütün tətbiqlər veb səhifəsi vasitəsilə idarə oluna/oynatıla bilər. Buna görə istifadə üçün hər hansı bir proqram quraşdırmaq lazım deyil.

Əlavə olaraq oyunları oynamağı asanlaşdıran bir NES nəzarətçisi var.

Açıq mənbə

Github -a qoyduğum bütün proqram və mexaniki rəsmlər: https://github.com/C3MA/PixelWallFeel olaraq öz layihəniz üçün istifadə edə bilərsiniz.

Addım 1: Elektronla Başlayın

Elektrondan başlayaraq
Elektrondan başlayaraq
Elektrondan başlayaraq
Elektrondan başlayaraq
Elektrondan başlayaraq
Elektrondan başlayaraq

Başqa bir layihədə WS2812 LEDləri olan mövcud bir PCB var. PCB -də hər bir satırda 12 LED olan 3 sıra var.

Bu PCB -dən 6 dəfə istifadə etmək qərarına gəldim. Beləliklə, 12x18 LED matris alıram.

İlk addım bütün 216 LED -in, təxminən 100 kondansatörün və ESP8266 -nın lehimlənməsi idi.

Əl ilə lehimləmə təxminən 10 saat çəkdi.

İlk sürətli testdən sonra məlum oldu: hər şey işləyir.

Beləliklə, mexaniki hissəyə keçə bilərik.

Addım 2: Mexanik yaradın

Mexanikin yaradılması
Mexanikin yaradılması
Mexanikin yaradılması
Mexanikin yaradılması
Mexanikin yaradılması
Mexanikin yaradılması
Mexanikin yaradılması
Mexanikin yaradılması

İlk növbədə hər bir piksel üçün bir ayırıcıya ehtiyacımız var. Fikir, şaquli və üfüqi şeridi bir V kəsiklə birləşdirməkdir.

Hər bandın qalınlığı 3 mm və hündürlüyü 17 mm -dir. Bir HDF lövhəsindən bir lazer kəsici ilə kəsilir.

Lazer kəsici üçün bütün eskizlər FreeCad -da çəkilir (github layihəsinin mexaniki qovluğunda "Leiste" adlanır)

Şəbəkə PCB Layout tərəfindən verilir. Sütun eni 28 mm və satır hündürlüyü 31 mm -dir.

Növbəti sual: PCB -də bantları necə düzəltmək olar? Yapışdırmaq o qədər də yaxşı bir fikir deyil, çünki bir şey qüsurlu olduqda sökmək mümkün olmalıdır. Buna görə də onu dağıtmağa qərar verdim. Ancaq bir vida 3 mm -lik incə bandı parçalayacaq. Beləliklə, 3D printerlə qrup üçün bir cib çap etdim (bu github layihəsində "Halter" adlanan hissədir). PCB -də onları düzəltmək üçün bu çox yaxşı iş gördü.

Növbəti addım bunun üçün bir çərçivə əldə etməkdir. Fərdi şəkil çərçivələrini kəsməyi təklif edən bəzi onlayn mağazalar var. 343mm x 565mm ölçüdə bir çərçivə sifariş etdim.

Çərçivə, alt tərəfdən enerji təchizatı üçün əlavə bir çuxur alır.

Plexiglas ön boşqabını da onlayn sifariş etdim. WN770 opal Milchglasoptik LD45% ölçüsü: 567x344x2mm

Şəffaflığı 45%-dir.

Bütün hissələri çərçivəyə yığmaq.

Sonda arxaya bir neçə zolaq vidalanacaq ki, hər şey düzəlsin və düşməsin.

PixelWall -ın heç bir WLAN əlaqəsi olmadan işləməsi üçün bir seçim etmək üçün, çərçivənin sağ tərəfinə (github layihəsində "Bedieneinheit" adlanır) əlavə edilə bilən bir idarəetmə paneli yaratdım.

Addım 3: Proqram təminatı - Əsaslar

Proqram təminatı - Əsaslar
Proqram təminatı - Əsaslar

İstifadə hallarından biri də PixelWall -da oyun oynamaqdır.

Ancaq bir piksel oyunu yazmaq üçün həmişə faydalı bir ayıklama mühitinə ehtiyacınız olacaq. ESP8266 nəzarətçisini uyğun bir şəkildə ayırmağın heç bir yolunu bilmirəm. Buna görə bütün kodu kompüterimdə simulyasiya etmək qərarına gəldim. ESP kodu Arduino C ++ dilində yazılmışdır, buna görə də PC -də simulyasiya üçün Visual Studio C ++/CLI dilindən istifadə etdim. Standart C ++ ilə C ++/CLI dili arasında bəzi fərqlər var. Məsələn, C ++/CLI -də String tipli bir obyekt yarada bilməzsiniz, zibil yığılması səbəbindən belə bir obyektə obyekt və ya istinad/göstərici yaratmağa icazə verilmir. C ++/CLI -də tutacaqlardan istifadə etməlisiniz: String^. Ancaq bu cür tutacaqlar C ++ standartında mövcud deyildi. Buna görə də hər iki dünyanı bir araya gətirmək üçün yaradıcı olmalı idim. Bunu simulyasiya üçün öz Arduino.h faylı yaradaraq həll etdim. Bu fayl simulyasiyada "#define String String^" təyin etməklə bütün sətirləri ləğv edir. Bu ümumi bir yol deyil, amma işləyir:) Bəzi kiçik kompilyator açarları istisna olmaqla, bütün ESP kodu Visual Studio C ++/CLI -də tərtib olunandan çoxdur.

LED Matrix

Yazdığım ilk sinif LED-Matrix sinifidir. Bu sinif WS2812 LED -lərinin idarə edilməsini və xəritələndirilməsini idarə edir.

Bu sinif iki dəfə yazılmışdır: bir dəfə ESP8266 nəzarətçisi üçün (LEDMatrixArduino.cpp) və digərində simulyasiyada Form GUI -də şəkilləri idarə edəcək biri (LEDMatrixGUI.cpp).

Bu sinif, fərdi LED -in sütunu və sırası ilə qurulması və təmizlənməsi üçün bir neçə əsas üsul təqdim edir.

Əlavə olaraq bir setBrightness funksiyası təmin edir. Bir LED qurulacağı təqdirdə bu dəyər nəzərə alınacaq. Beləliklə, bütün LED-əmrləri tam parlaqlıqla edilə bilər. Məsələn: Parlaqlıq 50% -ə təyin olunarsa və setLed () funksiyası RGBColor (255, 255, 255) ilə çağırılarsa, LED -i 127, 127, 127 olaraq təyin edər.

LED Panel

LED Matrix sinifinin üstünə bir LED Panel sinfi qoydum. Bu sinif hər hansı bir tətbiq üçün bəzi faydalı funksiyalar təmin edir. İki müstəqil təbəqə təmin edir. Bu tətbiq üçün faydalı ola bilər. Məsələn, tetris oyununda: qat0 altdakı sabit daşlar üçündür və qat1 düşən daşı göstərmək üçündür. Beləliklə, hər dövrdə daş bir piksel aşağıya düşür, tətbiq yalnız lay 1 -i təmizləyə və daşı yeni mövqeyinə çəkə bilər. Altdakı bütün sabit daşları yenidən çəkmək lazım deyil.

Əlavə olaraq panel təmin edir

printImage - smayllar və ya WLAN simvolu kimi bəzi nişanlar çap etmək üçün rəqəmsal rəqəm - müəyyən bir mövqedə bir rəqəm çap etmək üçün Formatlanmış Nömrə - sıfır önlükləri olan bir rəqəm çap etmək üçün Nömrə - tam ədəd çap etmək üçün çapLineH - xüsusi uzunluqlu üfüqi xəttLineV - xüsusi uzunluqlu üfüqi xətt

Addım 4: Proqram - Tətbiq Konsepsiyası

Proqram - Tətbiq Konsepsiyası
Proqram - Tətbiq Konsepsiyası

Pixel Wall üçün ümumi konsepsiya:

  • Hər bir tətbiqin öz adı var
  • Tətbiq, tətbiqi adı daxil olmaqla pixelWall URL -ə zəng etməklə başlayır (məsələn: 192.168.4.1/tetris)
  • URL, tətbiqə yönləndiriləcək GET parametrlərinə də sahib ola bilər
  • Hər bir tətbiq brauzerdə görünən bir veb saytı təqdim etməlidir.
  • Bu veb sayt, isteğe bağlı olaraq sürətli qarşılıqlı əlaqə üçün tətbiqə bir veb yuvası bağlantısı aça bilər
  • Tətbiq bu veb yuva bağlantısından istifadə edərək veb ön ucuna geri əlaqə qura bilər.
  • Veb interfeysinin yanında tətbiq, idarəetmə panelindən və NES nəzarətçisindən əlavə olaraq düymə hadisələri alır.

Tətbiq İnterfeysi

PixelWall üçün yeni tətbiqlər hazırlamağı asanlaşdırmaq üçün "IPixelApp.h" adlı tətbiqlər üçün bir interfeys yaratdım. Bu interfeys 8 tərifdən ibarətdir:

  • virtual boşluq başlanğıcı () = 0;
  • virtual boşluq sonu () = 0;
  • virtual boşluq döngəsi () = 0;
  • virtual boşluq newWebsocketData (uint8_t * yük, size_t uzunluq) = 0;
  • virtual WebsiteResponse_t getWebsiteResponse (String parametri) = 0;
  • virtual boşluq düyməsiEvent () = 0;
  • virtual boşluq timerTick () = 0;
  • virtual String getName () = 0;

start / end - başqa bir proqram başladığı üçün tətbiq işə salınsa / bitərsə bu funksiya çağırılır

loop - bu funksiya əsas proqramın əsas döngəsindən çağırılır. Bu zəng nizamsızdır və kəsilmənin xaricindədir.

newWebsocketData - web frontend məlumat göndərdiyi halda bu funksiya çağırılır.

getWebsiteResponse - bu, əsas proqram tərəfindən sorğuya cavab verilməli olan veb səhifəni əldə etmək üçün istifadə olunur.

buttonEvent - bu idarəetmə panelindəki hər hansı bir düyməyə basıldığı və ya sərbəst buraxıldığı təqdirdə deyilir.

timerTick - bu funksiya bir taymerin kəsilməsi ilə tetiklenen hər 10 ms adlanır. Vaxt bazası üçün istifadə edilə bilər, ancaq vaxt kəsən bir şey olmamalıdır, çünki kəsmə kontekstidir.

getName - bu URL üçün tətbiqin adını qaytarmalıdır

Addım 5: Proqram - Proqramlar

Proqram təminatı - Proqramlar
Proqram təminatı - Proqramlar
Proqram təminatı - Proqramlar
Proqram təminatı - Proqramlar
Proqram təminatı - Proqramlar
Proqram təminatı - Proqramlar
Proqram təminatı - Proqramlar
Proqram təminatı - Proqramlar

Aşağıdakı 7 tətbiq mövcud versiyada tətbiq olunur:

Defolt Tətbiq

Bu PixelWall -ın mövcud WLAN vəziyyətini göstərən xüsusi bir tətbiqdir. Divar indiki WLAN -a qoşula bilsəydi, Şəbəkədən aldığı IP ünvanını göstərər.

Bu mümkün olmasaydı (heç bir ssid qurulmamışdırsa və ya WLAN yoxdursa və ya parol səhvdirsə) bir Accesspoint açacaq. Bu halda PixelWall -a ESP8266 -dan standart Accesspoint IP vasitəsilə qoşula bilərsiniz: 192.168.4.1

Veb interfeysində bu tətbiq 6 düymə təqdim edir. Düyməni basaraq müvafiq tətbiqə başlaya bilərsiniz.

Ayarlar Tətbiqi

WLAN SSID və parol qurmaq üçün bu tətbiq. Yalnız WLAN -ın etimadnaməsini daxil edin və PixelWill -in növbəti başlanğıcında bu WLAN -a qoşulmağa çalışacaq.

Oyunlar

PixelWall'da proqramlaşdırılmış üç klassik oyun var:

  • Tetris
  • İlan
  • Kosmik İşğalçılar

Bütün oyunlar veb interfeysi və ya NES nəzarətçisi ilə oynana bilər.

Şəkil Tətbiqi

Bu PixelWall -da rəngləri göstərən bir tətbiqdir. Fərqli rənglərin solması, statik rəng göstərməsi və ya sadəcə təsadüfi rəngli piksellərin göstərilməsi, hərəkət edən bir göy qurşağı olub olmadığını seçə bilərsiniz.

Bu piksel

Bu Tətbiqlə barmaqla Veb interfeysinə toxunaraq hər bir pikseli ayrıca təyin edə bilərsiniz. Beləliklə, bir az kobud şəkillər çəkə bilərsiniz:)

Addım 6: Twitch Uzantısı ilə İdarə Edin

Twitch Uzantısı ilə Nəzarət
Twitch Uzantısı ilə Nəzarət

Twitch -də GetInTouch adlı bir uzantı var. Bu Uzantı, izləyicilərin axın zamanı arduino -nuzu idarə edə bilməsi üçün Arduino layihələrini canlı yayımınıza inteqrasiya etməyə imkan verir.

Bunun üçün Arduino kitabxanası Arduinos üçün yazılmışdır. Ancaq məlum oldu ki, bu da ESP8266 ilə işləyir.

Yayımda istifadə etmək üçün aşağıdakı addımlar atılmalıdır:

  • GetInTouch kitabxanasını koda inteqrasiya edin (təlimata baxın)
  • PixelWall -ı USB/RS232 çeviricisi ilə kompüterinizə qoşun (ESP -ni yandırmaq üçün də istifadə olunur)
  • GetInTouch tətbiqini veb saytdan quraşdırın
  • GetInTouch Uzantısını Twitch kanalınıza quraşdırın (təlimata baxın)

Addım 7: Nintendo NES Controller tərəfindən nəzarət

Nintendo NES Controller tərəfindən nəzarət
Nintendo NES Controller tərəfindən nəzarət

Bir müddət istifadə etdikdən sonra məlum olur ki, toxunma mobil telefonda oynamaq o qədər də asan deyil. Vaxtaşırı düymələri əldən verirsən, çünki düymənin üstündə olsan da barmağınla bağlı heç bir rəy yoxdur.

Buna görə köhnə bir Nintendo NES nəzarət cihazı almaq qərarına gəldim. Bu nəzarətçi çox sadə bir interfeysə malikdir. Yalnız 3, 3V ilə işləyən 4021 növbəli reyestrdir. Beləliklə, birbaşa ESP8266 -ya qoşula bilər.

ButtonEvent () funksiyası vasitəsi ilə işləyən tətbiqə yönləndirilən nəzarətçi üzərindəki bütün düymə hadisələri.

Tövsiyə: