Mundarija:

Lego mini xotira o'yini: 5 qadam (rasmlar bilan)
Lego mini xotira o'yini: 5 qadam (rasmlar bilan)

Video: Lego mini xotira o'yini: 5 qadam (rasmlar bilan)

Video: Lego mini xotira o'yini: 5 qadam (rasmlar bilan)
Video: Ushbu video ko’zlaringiz rangini o’zgartiradi! 2024, Iyul
Anonim
Image
Image
Lego mini xotira o'yini
Lego mini xotira o'yini

Bir yil oldin, men Lego Mini Cooper -ga bir nechta LEDlarni o'rnatish haqida ko'rsatma yozdim. LED -larni smartfon yordamida boshqarish mumkin bo'lganligi (yoki har qanday veb -brauzer orqali), bu kabi yangilik bo'ldi.

Men bu yo'riqnomada tinimsiz ta'riflaganimdek, o'sha paytdagi harakatlarning aksariyati hamma narsa buzilmasdan Mini -ni ulash bilan bog'liq edi. Ajablanarlisi shundaki, Mini keyinchalik Konnektikutdan Torontoga safaridan omon qoldi va shu vaqtdan beri ozmi -ko'pmi ishladi.

"Agar u buzilmasa, u tuzatguncha tuzatgan" - bu mening epitafim bo'ladi, shuning uchun Mini Rojdestvo uchun uyga qaytganda, Lego Mini 2.0 vaqti keldi. Axir, agar Tesla o'z mashinalariga dasturiy ta'minot yangilanishlarini yuklay olsa, bu qanchalik qiyin bo'lishi mumkin?

Menda bir nechta fikrlar bor edi:

  • Juda noaniq foydalanuvchi interfeysini yaxshilang
  • Shox qo'shing!
  • "Avtomatik chiroqlar" xususiyatini yaxshilash; va, eng muhimi
  • O'yin funktsiyasini qo'shing (hatto men bilardimki, telefoningiz bilan Mini chiroqlarini yoqish va o'chirish yangiliklari ertami -kechmi pasayib ketadi)

O'yin funktsiyasi eng katta vazifa edi, chunki men uchun bu qanday o'yin bo'lishi darhol aniq emas edi. Mini uni boshqaradigan o'yinni ushlab turish uchun juda zaif (Jenganing tushkun variantidan tashqari). Yana bir to'siq shundaki, men hayotimda hech qachon o'yinni dasturlashtirmaganman.

Bir yillik samarasiz tafakkurdan so'ng, men Hackster loyihasida qoqildim, unda Arduino Uno 1970 -yillardagi Simon nomli xotira o'yinchog'ini taqlid qilish uchun ishlatiladi. Xulosa qilib aytganda, Simon qurilmasi chiroqlar ketma -ketligini o'ynadi, uni o'yinchi keyin eslab qolishi va tugmachalarni bosib o'ynashi kerak edi. Har bir muvaffaqiyatli turdan keyin ketma -ketlik uzaytirildi.

Amp vintage bo'lishiga qaramay, men bu o'yin haqida hech qachon eshitmaganman va shuni aytishim kerakki, o'sha kunlarda o'yin -kulgi uchun o'tgan narsa ajoyib. Bundan ham hayratlanarli tomoni shundaki, Simon o'yini Amazonda hali ham sotuvda va yaxshi baholarga ega. Shubhasiz, bu mening maqsadlarimga moslashish uchun asosiy nomzod bo'lishi kerak edi. Axir, Mini -da chiroqlar bor edi, shuning uchun men faqat tugmachalarni o'chirib qo'yishim va smartfon orqali foydalanuvchi ma'lumotlarini kiritishim kerak edi. Dasturiy tomondan, bu faqat kesish-yopishtirish vazifasi bo'lib tuyuldi.

Lekin, birinchi navbatda, uskunaga ozgina o'zgartirish kiritishim kerak edi.

1 -qadam: Komponentlar, asboblar va manbalar

Komponentlar, asboblar va manbalar
Komponentlar, asboblar va manbalar

Agar siz ushbu loyihani Lego Mini -da takrorlayotgan bo'lsangiz, sizga avvalgi yo'riqnomada ko'rsatilgan barcha narsalar kerak bo'ladi. Sizga kerak bo'lgan yagona narsa - bu shovqin uchun ishlatiladigan va o'yin davomida bezovta qiluvchi shovqinlarni chiqaradigan passiv signal.

Dasturiy ta'minotni muhokama qilishda ma'lum bo'lishicha, o'yin uchun Lego Mini -ni ishlatishning hojati yo'q. Siz boshqa Lego to'plamini ishlatishingiz mumkin, yoki, albatta, har qanday ESP8266 ishlab chiqarish kartasiga ulangan non panelidagi bir nechta LED. Ba'zi o'rni yordamida siz hatto uyingizning xonasini yoritishni ham ishlatishingiz mumkin. Bolalar, bu haqda birinchi navbatda ota -onangizdan so'rang.

Xuddi shunday, asl loyiha uchun sanab o'tilganlardan tashqari qo'shimcha vositalar yoki manbalarga ehtiyoj yo'q.

Agar siz loyihaning asl tavsifini o'qigan sanoqli odamlar qatorida bo'lsangiz, Lego Mini aslida mening "voyaga yetgan" qizimga sovg'a sifatida sotib olinganligini bilasiz, u deyarli bir xil "haqiqiy" Mini-ga o'xshaydi. Bu "Klassik" emas, balki Yangi Mini bo'lishi mumkin. Hech qanday mazmunli qo'shimcha komponentlarning yo'qligi bu yangi loyihani yanada jozibador qildi, chunki bu menga Lego Mini 2.0 ni yangi Rojdestvo sovg'asi sifatida deyarli bir tiyin ham sarflamasdan samarali tarzda qayta sovg'a qilish imkonini beradi. Daho!

2 -qadam: uskunani o'zgartirish

Uskuna modifikatsiyasi
Uskuna modifikatsiyasi

Asl loyihada individual boshqariladigan RGB ichki LEDlari bor edi. Ular men ishlab chiqish taxtasi sifatida foydalanadigan NodeMCU -dagi uchta pinni iste'mol qildi. Lego Mini egasi bilan alohida maslahatlashuvdan so'ng, RGB LED -lar kam ishlatilganligi aniqlandi. Bu juda muhim razvedka edi, chunki men signal/shox uchun pinni bo'shatishim kerak edi.

Yuqoridagi sxemalar asl loyihadan olingan. Ushbu loyiha uchun zarur bo'lgan yagona o'zgarish RGB LEDlarini olib tashlash va uchta bo'shashgan pinni quyidagicha ishlatish edi:

  • D1 signal signalini boshqarish uchun (u to'g'ridan -to'g'ri 5VDC quvvat manbaiga ulanadi)
  • Oq ichki LED uchun D7
  • D8 - men "diskoteka" chirog'i deb nomlangan miltillovchi rangli LEDlardan biri uchun

Zilzilaning o'zi dvigatel bo'linmasining ostiga mahkam o'rnashib qolgan, shuning uchun simlarni NodeMCU -ga qaytarish bir zumda sodir bo'ldi.

3 -qadam: GUIni yangilash

GUI yangilanmoqda
GUI yangilanmoqda
GUI yangilanmoqda
GUI yangilanmoqda
GUI yangilanmoqda
GUI yangilanmoqda

GUIni yangilashdagi birinchi qadam to'rtta alohida veb -sahifani yaratish edi:

  • Smartfonda maxsus belgi orqali ishga tushadigan va boshqa sahifalarga havola qiladigan "ochilish ekrani"
  • Chiroqlarni boshqaradigan "Boshqaruvlar" sahifasi (va hozir, albatta, shox)
  • "O'yin" sahifasi
  • Quyidagi kabi konfiguratsiya variantlarini o'z ichiga olgan sozlash sahifasi.

    • Ovozni yoqish va o'chirish
    • Vaqt zonasini o'rnatish (Mini Internetdan vaqt oladi, shuning uchun u o'z chiroqlarini kerakli vaqtda yonib turishi mumkin)
    • Qachon "avtomatik chiroqlar" faralarni yoqish va o'chirishini atrofdagi yorug'lik darajasiga qarab sozlash
    • Yuqori va yuqori to'purar nomini tiklash (EEPROM -da saqlanadi)

NodeMCU-ni bir nechta sahifalarga xizmat ko'rsatish, bu loyiha uchun qiyinchiliklardan biri edi. Bir nechta yondashuvni sinab ko'rganimdan so'ng, men Arduino -ning asosiy eskizining 232 dan 236 -chi satrlarida ko'rgan kodni uchratdim. Bu juda yaxshi ishlaydi - shunchaki indeks faylini yarating, so'ngra keyingi sahifalarga 1 -sahifa, 2 -sahifa nomini bering va hokazo. Men barcha manbali fayllarni (CSS va rasmlar) ildiz ma'lumotlar papkasiga joylashtirishim kerakligini topdim, lekin bu saytlar uchun muammo emas. bu o'lcham.

Keyin Lego Mini -ga tegishli bo'lgan narsani yaratish uchun men CSS va Javascript bilan ishlashim kerak edi. Ikkala mavzu haqida ham hech narsa bilmasligimdan, men mamnun bo'lgan narsani olishdan oldin bu erda juda ko'p Google bor edi. Men bu erda CodePen-da CSS uslubidagi lego g'ishtni uyatsiz ravishda nusxalashdan boshladim. Men, shuningdek, tugmachalarni matn bilan belgilashdan va maqsadlarim uchun juda mos bo'lgan Icons8 -dan oddiy grafikadan foydalanishni to'xtatmoqchi edim. Qolganlari o'sha erdan o'z joylariga tushdi. Sahifalar men sinab ko'rgan barcha iPhone -larda yaxshi ishlaydi. Umid qilamanki, Android telefonlari uchun ham xuddi shunday (ish stoli Chrome brauzerida yaxshi ko'rinadi).

4 -qadam: O'yin kodi

O'yin kodi
O'yin kodi

NodeMCU serveri va smartfon brauzeri o'rtasidagi aloqa Websockets orqali amalga oshiriladi. Foydalanuvchi tugmachani bosgandan so'ng, brauzer NodeMCUga bir yoki bir nechta Mini chiroqlariga mos keladigan matnli belgini yuboradi. O'yin oqimini nazorat qilish uchun qo'shimcha belgilar yuboriladi. Keyin Arduino kodi olingan belgiga qarab harakat qiladi. Veb -soket aloqasi faqat ikkilik va matnli belgilar bilan ishlay oladi, shuning uchun butun sonlar uchun (masalan, vaqt zonasi) konvertatsiya qilish kerak.

Aytganimdek, men asosiy o'yin funktsiyalari uchun bog'langan Hackster loyihasining kodidan foydalanishni kutgan edim. O'ylaymanki, o'yinchi tugmachani bosgandan so'ng, mos keladigan LED yonadi va kod barcha LED -larda raqamli o'qiladi, to'g'ri chiroq yoqilganligini tekshirish uchun (Hackster loyihasi tugmachaning jismoniy kirishini tekshiradi, lekin xuddi shu fikr). Bu ishladi, lekin men uchun aniq bo'lmagan sabablarga ko'ra, mukammal emas. Taxminan 10% Mini noto'g'ri tugma bosilganligini aytadi, aslida to'g'ri tugma bosilgan. Men ketma -ket monitorda va brauzer konsolida ko'rgan narsalarga asoslanib, hamma narsa yaxshi bo'lib tuyuldi, shuning uchun nima uchun ishlamayotganini bilmayman.

Xatolarni tekshirishga urinib ko'rganimdan so'ng, men LED holatini o'qish g'oyasidan voz kechdim va qabul qilingan veb -soket matni "ketma -ketlik" qatorida saqlangan to'g'ri pinga mos kelishini tekshiradigan "javob" qatorini yaratdim. eslash uchun yorug'lik ketma -ketligini o'ynaydi. Bu 100% ishonchli ko'rinadi, garchi men uni amalga oshirish usuli biroz murakkab bo'lsa ham. Men bu usulni o'ylab topganimdan so'ng, men bu erda bo'ldim, bu ba'zi raqamli qulflarning ishlashini qiziqarli o'rganish va o'yinda ishlatiladigan yondashuvga o'xshash.

Tugmalarni kiritish vaqti endi brauzer tomonida Javascript bilan boshqariladi (men tugmalar kiritish o'rtasida 10 soniya saxovat beraman) va o'yin oqimi endi qattiq kodlangan emas, balki o'yinchi tomonidan to'liq nazorat qilinadi. Displeyda keyingi tugmani bosish uchun qolgan vaqt va pleyer ketma -ketlikni to'g'ri topshirishdan oldin qolgan kirishlar soni ko'rsatilgan oynalar mavjud.

Yuqori ball EEPROM-da saqlanadi (yoki ESP8266 dunyosida EEPROM-ga o'tadigan narsa) va agar o'yinchi yangi yuqori ball to'plasa, pop-up qutisi ularga EEPROM-da saqlanadigan nomini kiritishga imkon beradi. Bu qiymatlarni sozlash sahifasi orqali tiklash mumkin (bunga qonuniy sabablar bo'lishi mumkinligiga aminman).

Bularning barchasini aytib, men Hackster o'yin kodining yaxshi qismini qayta ishlatdim, bu ishni tezlashtirdi.

5 -qadam: Kodning qolgan qismi

Kodning qolgan qismi
Kodning qolgan qismi

Hackster loyiha kodi bilan taqqoslaganda, mening Arduino eskizim juda katta ko'rinadi, hatto ma'lumotlar fayllarida barcha HTML, CSS va Javascript bo'lmasa ham. Eskizning asosiy qismini serverni yaratish va boshqarish, NTP vaqtini olish, mDNS olish, havodan yangilanishni ta'minlash, WiFi boshqaruvi, SPIFFS fayl boshqaruvi va boshqalar kabi asosiy operatsiyalar bilan bog'liq vazifalar to'plami tashkil qiladi.

HTML fayllaridagi Javascript asosan Websocket xabarlarini qabul qilish (qabul qilish va yuborish) va GUI interaktivligini oshirish uchun mo'ljallangan.

Aytganimdek, men "avtomatik chiroqlar" funksiyasini yaxshilashni xohlardim, u NodeMCU -ning yagona analog pinidagi yorug'likka bog'liq qarshilikni ishlatib, atrofdagi yorug'likni aniqlaydi va Mini chiroqlarini oldindan o'rnatilgan darajada yoqadi (O'yin rejimida bo'lmaganida)., albatta). Bu beparvo loyihada juda ahamiyatsiz xususiyat bo'lsa-da, bu meni bezovta qildi, men asl loyihada yoqilish chegarasini qattiq kodladim va foydalanuvchining yorug'lik chegarasi bu chegara bilan qanday bog'liqligini ko'rish imkoniga ega emas edi. Endi yorug'lik darajasini o'qish har besh soniyada O'rnatish sahifasiga yuboriladi va u sahifada yoqish va o'chirish uchun joriy chegaralar ko'rsatiladi (foydalanuvchi tomonidan sozlanishi mumkin). Shunday qilib, bu ish bajarildi.

Oh, deyarli unutdim. Kod GitHub -da bu erda. Yuklab olingandan so'ng, butun paketni yangi papkaga joylashtiring, Arduino eskizini, so'ngra ma'lumotlar papkasidagi tarkibni SPIFFS -ga yuklang.

Tavsiya: