Мазмұны:

Lego Mini жады ойыны: 5 қадам (суреттермен)
Lego Mini жады ойыны: 5 қадам (суреттермен)

Бейне: Lego Mini жады ойыны: 5 қадам (суреттермен)

Бейне: Lego Mini жады ойыны: 5 қадам (суреттермен)
Бейне: Титаниктің құпиясы: олар айсбергті қалай байқамады?! Ең егжей-тегжейлі оқиға! 2024, Шілде
Anonim
Image
Image
Lego Mini жады ойыны
Lego Mini жады ойыны

Бір жыл бұрын мен Lego Mini Cooper -ге жарықдиодты шамдарды орнату туралы нұсқаулық жаздым. Светодиодты смартфонмен (немесе кез келген веб -браузер арқылы) басқаруға болатындығы сияқты жаңалық болды.

Мен бұл нұсқаулықта қажырлы түрде сипаттағанымдай, сол кездегі күш -жігердің бәрі мини -кабельді бөлшектеместен қосумен байланысты болды. Мини мені таңқалдырды, кейіннен Коннектикуттан Торонтоға сапарынан аман қалды және содан бері азды -көпті жұмыс жасады.

«Егер ол сынбаса, ол оны түзеткенше» менің эпитафым болады, сондықтан Mini үйге Рождествоға оралғанда, Lego Mini 2.0 уақыты келді. Ақыр соңында, егер Tesla өз машиналарына бағдарламалық жасақтаманы жаңарта алса, бұл қаншалықты қиын болуы мүмкін?

Менде бірнеше идея болды:

  • Қолайсыз интерфейсті жақсарту
  • Мүйізді қосыңыз!
  • «Автоматты шамдар» мүмкіндігін жақсарту; және, ең бастысы
  • Ойын функциясын қосыңыз (тіпті мен телефонның көмегімен Mini шамдарын қосу мен өшірудің жаңалығы ерте ме, кеш пе өзгеретінін түсіндім)

Ойын функциясы ең үлкен міндет болды, себебі бұл маған қандай ойын екені бірден түсініксіз болды. Мини ойынды басқаруға тым нәзік (мүмкін, Дженга депрессиялық нұсқасынан басқа). Тағы бір кедергі - мен өмірімде ойын бағдарламаламадым.

Бір жыл нәтижесіз ойланғаннан кейін мен Хакстердегі жобаны кездестірдім, онда Arduino Uno 1970 жылдардағы Саймон деп аталатын есте сақтау ойыншықтарын эмуляциялау үшін қолданылады. Қысқаша айтқанда, Simon құрылғысы шамдар тізбегін ойнады, содан кейін ойыншы батырмаларды басу арқылы есте сақтап, ойнатуға мәжбүр болды. Әр сәтті раундтан кейін тізбектің ұзындығы ұлғайтылды.

Қажетті винтаж болғанына қарамастан, мен бұл ойын туралы ешқашан естімегенмін, және айтуға тура келеді, сол кездегі ойын -сауық үшін бұл керемет болды. Бұдан да таңқаларлық нәрсе, Саймон ойынының Amazon -да әлі де сатылымда және жақсы пікірлер жинауында. Әрине, бұл менің мақсатыма бейімделу үшін басты үміткер болуы керек еді. Ақыр соңында, Mini -де шамдар бар еді, сондықтан мен тек физикалық түймелерді өшіріп, смартфон арқылы пайдаланушының кіруін қамтамасыз етуім керек еді. Бағдарламалық қамтамасыз ету жағынан, бұл көбінесе қысқартылатын жұмыс болып көрінетін.

Бірақ алдымен мен аппараттық құралға кішкене өзгерістер енгізуім керек болды.

1 -қадам: Компоненттер, құралдар мен ресурстар

Құралдар, құралдар мен ресурстар
Құралдар, құралдар мен ресурстар

Егер сіз бұл жобаны Lego Mini -мен қайталайтын болсаңыз, сізге менің бұрынғы нұсқаулығымда көрсетілген барлық материалдар қажет болады. Сізге қажет жалғыз нәрсе - бұл мүйіз үшін қолданылатын және ойын кезінде тітіркендіргіш дыбыстар шығаратын пассивті дыбыстық сигнал (оны өшіруге болады).

Бағдарламалық жасақтаманы талқылау кезінде белгілі болғандай, ойын үшін Lego Mini қолданудың қажеті жоқ. Сіз басқа Lego жиынтығын немесе кез келген ESP8266 әзірлеу тақтасына қосылған тақтадағы жарықдиодты шамдарды пайдалана аласыз. Кейбір реле көмегімен сіз тіпті үйдегі бөлменің жарықтандыруын қолдана аласыз. Балалар, бұл туралы алдымен ата -аналарыңыздан сұраңыз.

Сол сияқты, түпнұсқалық жобада көрсетілгендерден басқа қосымша құралдар мен ресурстар қажет емес.

Егер сіз жобаның бастапқы сипаттамасын оқитын санаулы адамдардың қатарында болсаңыз, онда Lego Mini-нің менің үлкен қызыма сыйлық ретінде сатып алынғанын білетін боласыз, ол шамамен бірдей «нағыз» Мини бар немесе ұқсас. оған «Классика» емес, Жаңа Мини берілуі мүмкін. Маңызды қосымша компоненттердің болмауы бұл жаңа жобаны одан да тартымды етті, себебі бұл Lego Mini 2.0-ді жаңа жылдық сыйлық ретінде бір тиынға да тиімді қайтаруға мүмкіндік береді. Данышпан!

2 -қадам: аппараттық құралдарды өзгерту

Аппараттық құралдарды өзгерту
Аппараттық құралдарды өзгерту

Бастапқы жобада жеке басқарылатын RGB интерьерлік жарық диодтары болды. Олар мен әзірлеу тақтасы ретінде пайдаланатын NodeMCU -дегі үш түйреуішті тұтынды. Lego Mini иесімен жеке кеңескеннен кейін, RGB светодиодтары толық пайдаланылмайтыны анықталды. Бұл маңызды интеллект болды, өйткені маған дыбыстық сигнал/мүйіз үшін түйреуіш босату керек болды.

Жоғарыдағы схема бастапқы жобадан алынған. Бұл жобаға қажет жалғыз өзгеріс RGB светодиодтарын алып тастау және үш босатылған түйреуішті келесідей пайдалану болды:

  • Дабыл сигналын басқару сигналы үшін (ол тікелей 5VDC қуат көзіне қосылады)
  • Ақ түсті жарықдиодты D7
  • D8 - мен «дискотека» деп атаған түрлі -түсті жарық диодтарының бірі

Сигналдың өзі қозғалтқыш бөлімінің астына ұқыпты жиналады, сондықтан сымдарды NodeMCU -ге қайтару тез болды.

3 -қадам: GUI жаңарту

GUI жаңартылуда
GUI жаңартылуда
GUI жаңартылуда
GUI жаңартылуда
GUI жаңартылуда
GUI жаңартылуда

GUI жаңартудағы бірінші қадам төрт бөлек веб -бетті құру болды:

  • Смартфондағы реттелетін белгіше арқылы іске қосылатын және басқа беттерге сілтеме жасайтын «экран»
  • Жарықты басқаратын «Басқару» беті (және, әрине, мүйіз)
  • «Ойын» беті
  • Конфигурация опциялары бар орнату парағы:

    • Дыбысты қосу және өшіру
    • Уақыт белдеуін орнату (Mini интернеттен уақыт алады, сондықтан ол өз шамдарын тиісті уақытта жыпылықтай алады)
    • «Автоматты шамдар» шамы қоршаған жарық деңгейіне байланысты фараларды қосатын және өшіретін уақытты реттеу
    • Жоғарғы және жоғары балл атауын қалпына келтіру (EEPROM -де сақталған)

NodeMCU бірнеше беттерге қызмет көрсетуді алу осы жобаның қиындықтарының бірі болды. Бірнеше түрлі әдістерді қолданғаннан кейін мен Arduino -ның негізгі эскизінің 232 -ден 236 -шы жолдарындағы кодты кездестірдім. Бұл өте жақсы жұмыс істейді - жай ғана индекс файлын жасаңыз, содан кейін келесі беттерге бет1, бет2 және т.б. атаңыз. Мен барлық ресурстық файлдарды (CSS және суреттер) түбірлік деректер қалтасына қою керек деп таптым, бірақ бұл сайттар үшін мәселе емес. бұл өлшем.

Содан кейін маған Lego Mini -ге тиесілі нәрсе жасау үшін CSS және Javascript -пен жұмыс істеу керек болды. Мен екі тақырып туралы да ештеңе білмейтіндіктен, мен риза болған нәрсеге қол жеткізгенге дейін мұнда көп Google болды. Мен CodePen-ге CSS үлгісіндегі лего кірпішті ұялмай көшіруді бастадым. Мен сонымен қатар батырмаларды мәтінмен таңбалаудан бас тартқым келді және Icons8 -дің қарапайым графикасын қолдануды аяқтадым, олар менің мақсатыма сәйкес келді. Қалғандары сол жерден өз орнына келді. Беттер мен сынап көрген барлық iPhone -да жақсы көрінеді. Android телефондары үшін де солай болады деп үміттенемін (жұмыс үстеліндегі Chrome браузерінде жақсы көрінеді).

4 -қадам: Ойын коды

Ойын коды
Ойын коды

NodeMCU сервері мен смартфон шолушысы арасындағы байланыс Websockets арқылы жүзеге асады. Пайдаланушы түймені басқаннан кейін браузер NodeMCU -ге бір немесе бірнеше Mini шамдарына сәйкес келетін мәтіндік таңбаны жібереді. Ойын ағымын бақылау үшін қосымша таңбалар жіберіледі. Содан кейін Arduino коды алынған таңбаға байланысты әрекет етеді. Веб -сокет байланысы тек екілік және мәтіндік таңбаларды өңдей алады, сондықтан бүтін сандар үшін кейбір түрлендіру қажет (мысалы, уақыт белдеуі).

Мен айтып өткендей, мен бастапқыда ойынның негізгі функциялары үшін байланысқан Hackster жобасының кодын қолдануды күткен едім. Менің ойымша, ойнатқыш түймені басқаннан кейін, тиісті жарық диоды жанады және барлық сандық диодтарда дұрыс жарықтандырылғанын тексеру үшін кодты қосады (Hackster жобасы түйменің физикалық кірісін тексереді, бірақ бұл бірдей идея). Бұл жұмыс істеді, бірақ мен әлі күнге дейін түсініксіз себептермен жақсы емес. Шамамен 10% Mini дұрыс емес батырманың басылғанын айтады. Мен сериялық мониторда және шолғыш консолінде көрген нәрсеге сүйене отырып, бәрі жақсы болып көрінді, сондықтан мен неге жұмыс істемегенін білмеймін.

Қатені тексеруді енгізуге тырысқаннан кейін, мен жарық диодты күйлерді оқу идеясынан бас тарттым және алынған Websocket мәтінінің «реттілік» массивінде сақталған дұрыс түйреуге сәйкес келетінін тексеретін «жауап» жиынын құрдым. есте сақтау үшін жарық тізбегін ойнайды. Бұл 100% сенімді болып көрінеді, тіпті егер мен оны іске асыру әдісі сәл қиын болса. Бұл әдісті ойлап тапқаннан кейін мен бұл ойға келдім, бұл кейбір цифрлық құлыптардың жұмысының қызықты зерттеуі және ойында қолданылатын әдіске ұқсас.

Түймешіктерді енгізу уақыты енді браузер жағында Javascript арқылы өңделеді (мен түйме енгізулері арасында 10 секундқа дейін жомарттық беремін) және ойынның ағымы енді қатаң кодталғаннан гөрі ойыншының бақылауында. Дисплейде келесі түймешікті басу үшін қалған уақыт пен ойыншы реттілікті дұрыс жібермес бұрын қалған кіріс санын көрсететін терезелер бар.

Жоғары балл EEPROM-де сақталады (немесе ESP8266 әлемінде EEPROM үшін не қажет) және егер ойыншы жаңа жоғары ұпай жинаса, қалқымалы терезе оларға EEPROM-де сақталатын атауды енгізуге мүмкіндік береді. Бұл мәндерді орнату беті арқылы қалпына келтіруге болады (бұның заңды себептері болуы мүмкін екеніне сенімдімін).

Осының бәрін айта отырып, мен Hackster ойын кодының лайықты бөлігін қайта қолдандым, бұл тездетеді.

5 -қадам: Кодтың қалған бөлігі

Кодекстің қалған бөлігі
Кодекстің қалған бөлігі

Hackster жобасының кодымен салыстырғанда, менің Arduino эскизім өте үлкен көрінеді, тіпті деректер файлдарында барлық HTML, CSS және Javascript жоқ. Эскиздің негізгі бөлігін серверді құру және басқару, NTP уақытын алу, mDNS алу, эфирде жаңартуды қамтамасыз ету, WiFi менеджменті, SPIFFS файлдарды басқару және т.

HTML файлдарындағы Javascript негізінен Websocket хабарламаларын өңдеуге (қабылданған және жіберілген) және GUI интерактивтілігін арттыруға арналған.

Мен айтқанымдай, мен NodeMCU -дің жалғыз аналогтық түйреуішіндегі жарыққа тәуелді резисторды пайдаланып, қоршаған ортаның жарығын анықтап, Mini шамдарын алдын ала орнатылған деңгейде қосатын «Автоматты шамдар» функциясын жақсартқым келді (ойын режимінде болмаған кезде)., Әрине). Бұл маңызды емес жобадағы жеңілдік болса да, бұл мені бастапқы жобада қосылу табалдырығын қатаң кодтағанымды және пайдаланушыда жарық деңгейінің осы табалдырықпен қалай байланысты екенін көре алмайтыны мені алаңдатты. Енді жарық деңгейінің көрсеткіші әрбір бес секунд сайын Орнату бетіне жіберіледі, сонымен қатар бұл бетте қосу мен өшірудің ағымдағы шектері көрсетіледі (оны пайдаланушы конфигурациялай алады). Сонымен, бұл бойынша жұмыс жасалды.

О, ұмытып кете жаздадым. Код GitHub -да осында. Жүктеп алғаннан кейін бүкіл пакетті жаңа қалтаға салыңыз, Arduino эскизін жүктеңіз, содан кейін деректер қалтасының мазмұнын SPIFFS -ке салыңыз.

Ұсынылған: