Агуулгын хүснэгт:

Lego Mini санах ойн тоглоом: 5 алхам (зурагтай)
Lego Mini санах ойн тоглоом: 5 алхам (зурагтай)

Видео: Lego Mini санах ойн тоглоом: 5 алхам (зурагтай)

Видео: Lego Mini санах ойн тоглоом: 5 алхам (зурагтай)
Видео: ЗАКРИЧАЛ – ПОТЕРЯЛ ₽200.000 / ТРЭШКЭШ: Тишина 2024, Долдугаар сарын
Anonim
Image
Image
Lego Mini санах ойн тоглоом
Lego Mini санах ойн тоглоом

Жилийн өмнө би Lego Mini Cooper -д олон тооны LED суурилуулах талаар зааварчилгаа бичсэн. Шинэлэг зүйл бол LED -ийг ухаалаг гар утсаар (эсвэл ямар ч вэб хөтөчөөр дамжуулан) удирдах боломжтой байв.

Тэр зааварчилгаанд миний шаргуу тайлбарласны дагуу тэр үеийн ихэнх хүчин чармайлт нь бүх зүйл нурахгүйгээр Мини утсыг холбохтой холбоотой байв. Миний гайхсан зүйл бол Мини дараа нь Коннектикутаас Торонто руу аялахдаа амьд үлдэж, түүнээс хойш их бага хэмжээгээр ажилласан.

"Хэрэв энэ нь эвдэрч чадаагүй бол тэр үүнийг засах хүртэл нь зассан" нь миний хамгийн сайн эпитаф байх болно, тиймээс Мини Христийн Мэндэлсний Баяраар гэртээ эргэж ирэхэд Lego Mini 2.0 хийх цаг болжээ. Эцсийн эцэст хэрэв Тесла програм хангамжийн шинэчлэлтийг машиндаа оруулах боломжтой бол энэ нь хичнээн хэцүү байж болох вэ?

Надад хэдэн санаа байсан:

  • Нэлээд эвгүй хэрэглэгчийн интерфэйсийг сайжруулах
  • Эвэр нэмнэ үү!
  • "Автомашины гэрэл" функцийг сайжруулах; ба, хамгийн чухал нь
  • Тоглоомын функцийг нэмж оруулаарай (утсаараа Mini -ийн гэрлийг асаах, унтраах шинэлэг зүйл эрт орой хэзээ нэгэн цагт буурах болно гэдгийг би мэдэж байсан)

Тоглоомын функц нь хамгийн том ажил байсан бөгөөд энэ нь ямар тоглоом байх нь надад шууд ойлгогдоогүй юм. Мини нь тоглоомыг удирдахад дэндүү эмзэг байдаг (Женгагийн сэтгэл гутралтай хувилбараас бусад). Өөр нэг бэрхшээл бол би амьдралдаа тоглоом тоглож байгаагүй.

Бүтэн жил үр дүнгүй тунгаан бодсоны эцэст би 1970 -аад оны үеийн Симон нэртэй санах ойн тоглоомыг дуурайхад зориулагдсан Arduino Uno -ийг ашигладаг Хакстер дээрх төсөл дээр бүдэрлээ. Товчхондоо, Саймон төхөөрөмж нь тоглогчийн санаж, товчлууруудыг дарж тоглуулах ёстой гэрлийн дарааллыг тоглосон. Амжилттай тойрог бүрийн дараа дарааллыг уртасгасан.

Шаардлагатай хувцасны чимэг байсан ч би энэ тоглоомын талаар хэзээ ч сонсож байгаагүй бөгөөд тэр үед зугаа цэнгэлийн төлөө юу болсон нь гайхалтай байсан гэж хэлэх ёстой. Илүү гайхалтай зүйл бол Саймон тоглоом Амазон дээр худалдаалагдаж байгаа бөгөөд сайшаалтай сэтгэгдлийг цуглуулж байна. Энэ нь миний зорилгод дасан зохицох гол нэр дэвшигч байх ёстой нь тодорхой байна. Эцсийн эцэст, Мини аль хэдийн гэрэлтэй байсан тул миний хийх ёстой зүйл бол физик товчлууруудыг хааж, хэрэглэгчийн оролтыг ухаалаг гар утсаар хангах явдал юм. Програм хангамжийн хувьд энэ нь зөвхөн огтлох, буулгах ажил байх шиг санагдсан.

Гэхдээ эхлээд би техник хангамжид бага зэрэг өөрчлөлт оруулах шаардлагатай болсон.

Алхам 1: Бүрэлдэхүүн хэсэг, багаж хэрэгсэл, нөөц

Бүрэлдэхүүн хэсэг, багаж хэрэгсэл, нөөц
Бүрэлдэхүүн хэсэг, багаж хэрэгсэл, нөөц

Хэрэв та энэ төслийг Lego Mini -ээр хуулбарлаж байгаа бол миний өмнөх зааварт заасан бүх зүйл танд хэрэгтэй болно. Танд хэрэгтэй цорын ганц нэмэлт зүйл бол дуут дохиог ашиглах, тоглоомын үеэр эвгүй чимээ гаргах (идэвхгүй болгох боломжтой) юм.

Програм хангамжийн талаар хэлэлцэх үед тодорхой болно, тоглоомонд Lego Mini ашиглах бодит шаардлага байхгүй. Та өөр Lego иж бүрдэл, эсвэл ямар ч ESP8266 хөгжлийн самбарт залгагдсан талхны самбар дээрх олон тооны LED ашиглаж болно. Зарим релейгээр та гэрийнхээ өрөөний гэрэлтүүлгийг ч ашиглаж болно. Хүүхдүүд ээ, энэ талаар эхлээд эцэг эхээсээ асуугаарай.

Үүний нэгэн адил анхны төслийн жагсаалтаас гадна нэмэлт хэрэгсэл, нөөц шаардлагагүй болно.

Хэрэв та төслийн анхны тайлбарыг уншсан цөөн хэдэн хүмүүсийн дунд байгаа бол Lego Mini-ийг анх бараг л ижил "жинхэнэ" Минитэй, эсвэл бараг адилхан миний том болсон охинд бэлэг болгон худалдаж авсан гэдгийг мэдэх болно. Үүнийг "Сонгодог" биш харин шинэ Мини гэж өгч болно. Утга учиртай нэмэлт бүрэлдэхүүн хэсгүүдийн дутмаг байдал нь энэхүү шинэ төслийг улам бүр сэтгэл татам болгож өгсөн бөгөөд энэ нь надад Lego Mini 2.0-ийг зул сарын баярын шинэ бэлэг болгон үр дүнтэй дахин бэлэглэх боломжийг олгож, бараг нэг зоос ч зарцуулахгүй байв. Суут ухаантан!

Алхам 2: Тоног төхөөрөмжийн өөрчлөлт

Тоног төхөөрөмжийн өөрчлөлт
Тоног төхөөрөмжийн өөрчлөлт

Анхны төсөл нь тус тусад нь хянадаг RGB дотоод LED -тэй байв. Эдгээр нь миний хөгжүүлэх самбар болгон ашиглаж байсан NodeMCU дээрх гурван зүүг ашигласан. Lego Mini -ийн эзэнтэй биечлэн зөвлөлдсөний дараа RGB LED нь дутуу ашиглагддаг онцлог шинж чанартай болохыг тогтоожээ. Энэ бол чухал дохио байсан, учир нь би дуут дохио/эвэрний зүүг суллах хэрэгтэй болсон.

Дээрх хэлхээний диаграмыг анхны төслөөс авсан болно. Энэхүү төсөлд шаардлагатай цорын ганц өөрчлөлт бол RGB LED-ийг салгаж, чөлөөлөгдсөн гурван тээглүүрийг дараах байдлаар ашиглах явдал байв.

  • Дууны дохионы хяналтын дохионы D1 (5VDC цахилгаан тэжээлд шууд холбогддог)
  • Цагаан интерьер LED D7
  • Би "диско" гэрэл гэж нэрлэсэн анивчдаг өнгийн LED -ийн нэгэнд зориулсан D8

Дуу чимээ нь хөдөлгүүрийн тасалгааны доор нямбай наалддаг тул утаснуудаа NodeMCU руу буцааж холбох нь гэнэтийн зүйл болжээ.

Алхам 3: GUI -ийг шинэчлэх

GUI -ийг шинэчилж байна
GUI -ийг шинэчилж байна
GUI -ийг шинэчилж байна
GUI -ийг шинэчилж байна
GUI -ийг шинэчилж байна
GUI -ийг шинэчилж байна

GUI -ийг шинэчлэх эхний алхам бол дөрвөн тусдаа вэб хуудас үүсгэх явдал байв.

  • Ухаалаг гар утсан дээрх захиалгат дүрс ашиглан нээгдэж, бусад хуудсуудыг холбосон "дэлгэц"
  • Гэрлийг хянадаг "Хяналтууд" хуудас (одоо мэдээж эвэр)
  • "Тоглоом" хуудас
  • Тохиргооны сонголтуудыг агуулсан тохиргооны хуудас:

    • Дууг асаах, унтраах
    • Цагийн бүсийг тохируулах (Мини интернетээс цаг авдаг тул гэрлээ зохих цагт нь гэрэлтүүлж чаддаг)
    • "Автомашины гэрэл" -ийг тохируулах нь орчны гэрлийн түвшинг харгалзан гэрэл асаах, унтраах болно
    • Өндөр болон өндөр оноо авсан нэрийг дахин тохируулах (EEPROM -д хадгалагдсан)

NodeMCU-ийг олон хуудастай болгох нь энэхүү төслийн хувьд бэрхшээлтэй асуудлуудын нэг юм. Хэд хэдэн өөр аргыг туршиж үзсэний дараа Arduino -ийн үндсэн зургийн 232 -оос 236 -р мөрөнд харсан кодыг олж харлаа. Энэ нь маш сайн ажилладаг - зүгээр л өөрийн индекс файлыг үүсгээд дараачийн хуудсуудыг page1, page2 гэх мэтээр нэрлээрэй. Би бүх нөөцийн файлуудыг (CSS ба зураг) эх өгөгдлийн хавтсанд оруулах ёстой байсан, гэхдээ энэ нь сайтуудын хувьд асуудал биш юм. энэ хэмжээ.

Дараа нь би CSS болон Javascript -тэй ажиллах хэрэгтэй болж Lego Mini -ийнх юм шиг харагдаж байсан. Аль ч сэдвийн талаар би бараг юу ч мэдэхгүй болохоор миний сэтгэл хангалуун байсан зүйлийг олж авахаасаа өмнө энд маш олон Google-ийн ажил байсан. Би CodePen дээр CSS маягийн лего тоосгыг ичгүүргүйгээр хуулж эхлэв. Би товчлууруудыг текстээр шошголохоос татгалзаж, зорилгодоо нийцсэн Icons8 -ийн энгийн графикийг ашиглан дуусгахыг хүссэн. Үлдсэн хэсэг нь тэндээс унав. Миний туршиж үзсэн бүх iPhone дээр хуудсууд маш сайн ажилладаг. Андройд утсанд ч мөн адил хамаарна гэж найдаж байна (ширээний Chrome хөтөч дээр зүгээр харагдаж байна).

Алхам 4: Тоглоомын код

Тоглоомын код
Тоглоомын код

NodeMCU сервер болон ухаалаг гар утасны хөтчийн хоорондох холбоо нь Websockets -ээр дамждаг. Хэрэглэгч товчлуур дарсны дараа хөтөч NodeMCU руу нэг буюу хэд хэдэн Mini гэрэлтэй тохирох текстийг илгээдэг. Тоглоомын урсгалыг хянахын тулд нэмэлт тэмдэгтүүдийг илгээдэг. Дараа нь Arduino код нь хүлээн авсан тэмдэгт дээр үндэслэн үйлдэл хийдэг. Вэбсокет харилцаа холбоо нь зөвхөн хоёртын болон текстийн тэмдэгтүүдийг зохицуулж чаддаг тул бүхэл тоонуудын хувьд хөрвүүлэх шаардлагатай байдаг (жишээлбэл, цагийн бүс).

Өмнө дурьдсанчлан, би тоглоомын үндсэн функцүүдэд холбогдсон Hackster төслийн кодыг ашиглахыг анх хүлээж байсан. Тоглогч товчлуур дарсны дараа харгалзах LED асах бөгөөд код нь бүх LED дээр дижитал уншиж, зөв гэрэл ассан эсэхийг харах болно гэж би бодож байсан (Hackster төсөл нь товчлуурын физик оролтыг шалгадаг боловч энэ нь ижил санаа юм). Энэ нь үр дүнтэй болсон, гэхдээ надад тодорхойгүй байгаа шалтгааны улмаас тийм ч сайн биш байсан. Мини ихэнх тохиолдолд зөв товчлуурыг дарсан байхад буруу товчлуур дарагдсан гэж хэлдэг. Цуваа дэлгэц болон хөтчийн консол дээр харсан зүйл дээр үндэслэн бүх зүйл зүгээр юм шиг санагдсан тул яагаад ажиллахгүй байгааг би мэдэхгүй байна.

Алдаа шалгах шалгалтыг нэвтрүүлэх гэж маш их зовсоны дараа би LED төлөвийг унших санаагаа бүрэн орхиж, хүлээн авсан Websocket текст нь "дараалал" массивт хадгалагдсан зөв зүүтэй нийцэж байгаа эсэхийг шалгадаг "хариулт" массивыг үүсгэв. санаж байхын тулд гэрлийн дарааллыг тоглодог. Миний хэрэгжүүлсэн арга арай л төвөгтэй байсан ч энэ нь 100% найдвартай юм шиг байна. Энэ аргыг гаргаж ирсний дараа би үүнийг хийсэн бөгөөд энэ нь зарим дижитал түгжээний ажиллах арга замыг сонирхолтой судалж, тоглоомонд ашигласан арга барилтай ижил төстэй юм.

Товчлуурын оролтын цагийг одоо хөтчийн талд Javascript-ээр зохицуулдаг (товчлуурын оролт хооронд 10 секундын өгөөмөр өгөөч өгдөг) бөгөөд тоглоомын урсгалыг тоглогч өөрөө хатуу кодлохоос илүү бүрэн хянадаг. Дэлгэц нь дараагийн товчлуурыг дарахад үлдсэн хугацаа, тоглогч дарааллыг зөв оруулахаас өмнө үлдсэн оролтын тоог харуулсан цонхыг агуулдаг.

Өндөр оноо нь EEPROM-д хадгалагддаг (эсвэл ESP8266 ертөнцөд EEPROM-ийг дамжуулдаг), хэрэв тоглогч шинэ өндөр оноо авбал попап цонх нь хүссэн нэрээ оруулах боломжийг олгодог бөгөөд үүнийг EEPROM-д хадгалдаг. Эдгээр утгыг тохируулах хуудсаар дамжуулан дахин тохируулах боломжтой (үүнд хууль ёсны шалтгаан байж магадгүй гэдэгт итгэлтэй байна).

Энэ бүхнийг хэлэхэд би Хакстер тоглоомын кодын зохих хэсгийг дахин ашигласан бөгөөд энэ нь ажлыг ихээхэн хурдасгасан юм.

Алхам 5: Кодын үлдсэн хэсэг

Кодын үлдсэн хэсэг
Кодын үлдсэн хэсэг

Хакстерын төслийн кодтой харьцуулахад миний Arduino ноорог нь өгөгдлийн файлд бүх HTML, CSS, Javascript байхгүй байсан ч асар том харагдаж байна. Ноорог зургийн ихэнх хэсгийг сервер үүсгэх, удирдах, NTP цаг авах, mDNS авах, агаараар шинэчлэх, WiFi менежмент, SPIFFS файлын менежмент гэх мэт үндсэн үйл ажиллагаатай холбоотой олон функцууд багтдаг.

HTML файлууд дахь Javascript нь үндсэндээ Websocket мессежийг хүлээн авах (хүлээн авах, илгээх), GUI -ийн харилцан үйлчлэлийг нэмэгдүүлэхэд зориулагдсан болно.

Би дээр дурдсанчлан NodeMCU -ийн цорын ганц аналог зүү дээрх гэрлээс хамааралтай резистор ашиглан орчны гэрлийг илрүүлж, Mini гэрлийг урьдчилан тохируулсан түвшинд асаах "Тоглоомын горимд байхгүй үед" функцийг сайжруулахыг хүссэн юм., мэдээж). Хэдийгээр энэ нь хайхрамжгүй төслүүдийн хувьд маш энгийн шинж чанар боловч анхны төсөлд би асаах босгыг хатуу кодлосон байсан бөгөөд хэрэглэгч давамгайлж буй гэрлийн түвшин энэ босготой хэрхэн холбогдож байгааг харах аргагүй байсан нь надад төвөг учруулсан юм. Одоо гэрлийн түвшний уншилтыг 5 секунд тутамд Тохируулах хуудас руу илгээдэг бөгөөд энэ хуудсыг асаах, унтраах одоогийн босгыг харуулдаг (үүнийг хэрэглэгч тохируулж болно). Тиймээс энэ тал дээр ажил хийлээ.

Өө бараг мартчихаж. Код нь GitHub дээр байна. Татаж авсны дараа бүх багцыг шинэ хавтсанд хийж, Arduino ноорог, дараа нь өгөгдлийн хавтасны агуулгыг SPIFFS руу оруулна уу.

Зөвлөмж болгож буй: