Tartalomjegyzék:

Lego mini memóriajáték: 5 lépés (képekkel)
Lego mini memóriajáték: 5 lépés (képekkel)

Videó: Lego mini memóriajáték: 5 lépés (képekkel)

Videó: Lego mini memóriajáték: 5 lépés (képekkel)
Videó: LEGO kocka robottranszformátorok bemutatója - Kombinátorok transzformátormech - Super R&B 2024, December
Anonim
Image
Image
Lego mini memóriajáték
Lego mini memóriajáték

Egy évvel ezelőtt írtam egy Instructable -t arról, hogy egy csomó LED -et telepítenek egy Lego Mini Cooper -be. Az újítás az volt, hogy a LED -ek okostelefonnal (vagy bármilyen webböngészőn keresztül) vezérelhetők.

Ahogy fáradságosan leírtam abban az Instructable -ben, az akkori erőfeszítések nagy része a Mini bekötéséhez kapcsolódott anélkül, hogy az egész szétesne. Meglepetésemre a Mini ezt követően túlélte a Connecticutból Torontóba vezetett utazást, és azóta is működik, többé -kevésbé.

"Ha nem tört el, addig javította, amíg nem lesz", ez lesz a sírfeliratom, jó esetben, így amikor a Mini hazatért karácsonyra, eljött a Lego Mini 2.0 ideje. Végül is, ha a Tesla szoftverfrissítéseket tud elhelyezni autóiban, mennyire lehet nehéz?

Volt pár ötletem:

  • Javítsa a meglehetősen nehézkes felhasználói felületet
  • Tegyen hozzá kürtöt!
  • Javítsa az "automatikus világítás" funkciót; és ami a legfontosabb
  • Játékfunkció hozzáadása (még én is felismertem, hogy az újdonság, hogy a Mini lámpáit fel- és lekapcsoljuk a telefonnal, előbb -utóbb elhalványul)

A játékfunkció volt a legnagyobb feladat, nem utolsósorban azért, mert számomra nem volt azonnal nyilvánvaló, hogy milyen játék lehet ez. A Mini túl törékeny ahhoz, hogy fenntartsa azt a játékot, amellyel kezelni kell (kivéve a Jenga nyomasztó változatát). A másik akadály az volt, hogy soha életemben nem programoztam játékot.

Egy évnyi eredménytelen töprengés után rábukkantam a Hackster -re, ahol egy Arduino Uno -t használnak az 1970 -es évekből származó, Simon nevű memóriajáték utánozására. Dióhéjban a Simon készülék olyan fénysorozatot játszott le, amelyet a játékosnak emlékeznie kellett, és a gombok megnyomásával vissza kellett játszania. Minden sikeres kör után a sorozat hossza megnövekedett.

Annak ellenére, hogy a szükséges évjáratú, valójában soha nem hallottam erről a játékról, és azt kell mondanom, hogy elképesztő, ami a szórakozásban múlt időben történt. Még csodálatosabb, hogy a Simon játék még mindig kapható, és dicséretes véleményeket gyűjt az Amazon -on. Világos, hogy ennek a fő jelöltnek kellett lennie ahhoz, hogy alkalmazkodni tudjak a céljaimhoz. Végül is a Mininél már voltak lámpák, így csak annyit kellett tennem, hogy elhagyom a fizikai gombokat, és okostelefonon keresztül biztosítom a felhasználói bevitelt. A szoftveres oldalon tehát úgy tűnt, hogy ez csak nagyrészt kivágott és beilleszthető feladat lesz.

Először azonban néhány apró módosítást kellett végrehajtanom a hardveren.

1. lépés: Alkatrészek, eszközök és erőforrások

Alkatrészek, eszközök és források
Alkatrészek, eszközök és források

Ha ezt a projektet egy Lego Mini készülékkel sokszorosítja, szüksége lesz a korábbi Instructable -ban felsorolt összes anyagra. Az egyetlen extra dolog, amire szüksége lesz, egy passzív zümmögő, amelyet a kürthöz használnak, és egy csomó bosszantó hangot adnak ki a játék során (ez letiltható).

Amint a szoftver megvitatásakor kiderül, nincs szükség a Lego Mini használatára a játékhoz. Használhat egy másik Lego készletet, vagy akár egy csomó LED -et egy kenyérsütőn, amely bármilyen ESP8266 fejlesztőlapra van csatlakoztatva. Néhány relével akár az otthoni szoba világítását is használhatja. Gyerekek, de először kérdezze meg a szüleit.

Hasonlóképpen nincs szükség további eszközökre vagy erőforrásokra az eredeti projektben felsoroltakon túl.

Ha Ön azon maroknyi ember közé tartozik, akik elolvasták az eredeti projektleírást, akkor tudni fogja, hogy a Lego Minit eredetileg ajándékként vásárolták meg felnőtt lányomnak, akinek majdnem azonos "igazi" Mini-je van, vagy közel azonos meg lehet adni, hogy ez egy új Mini, nem "klasszikus". Az értelmes kiegészítő komponensek hiánya még vonzóbbá tette ezt az új projektet, mivel lehetővé tette számomra, hogy hatékonyan újra megajándékozzam a Lego Mini 2.0 új karácsonyi ajándékot anélkül, hogy egy fillérbe is kerülne. Zseni!

2. lépés: Hardvermódosítás

Hardvermódosítás
Hardvermódosítás

Az eredeti projekt egyedileg vezérelhető RGB belső LED -ekkel rendelkezett. Ezek három tűt emésztettek fel a NodeMCU -n, amelyet fejlesztőlapként használtam. A Lego Mini tulajdonosával folytatott külön konzultáció után megállapították, hogy az RGB LED -ek alulhasznált funkciók. Ez fontos intelligencia volt, mert ki kellett szabadítanom egy tűt a zümmögőhöz/kürthöz.

A fenti kapcsolási rajz az eredeti projektből származik. A projekthez csak az RGB LED-ek eltávolítása és a három felszabadult csap használata szükséges:

  • D1 a zümmögő vezérlőjelhez (amely közvetlenül az 5VDC tápellátáshoz is van kötve)
  • D7 fehér belső LED -hez
  • D8 az egyik villogó színes LED -hez, amelyet "diszkó" fénynek neveztem el

Maga a zümmögő szépen elbújik a motortér alá, így a vezetékek visszacsatolása a NodeMCU -ba pillanatok alatt történt.

3. lépés: A GUI frissítése

A GUI frissítése
A GUI frissítése
A GUI frissítése
A GUI frissítése
A GUI frissítése
A GUI frissítése

A GUI frissítésének első lépése négy különálló weboldal létrehozása volt:

  • "Splash screen", amely az okostelefon egyéni ikonján keresztül indul, és a többi oldalra mutat
  • A "Vezérlők" oldal, amely jól szabályozza a fényeket (és most természetesen a kürtöt)
  • A "Játék" oldal
  • Egy beállítási oldal, amely konfigurációs lehetőségeket tartalmaz, például:

    • A hang be- és kikapcsolása
    • Az időzóna beállítása (a Mini időt kap az internetről, így a megfelelő időben villoghat
    • Ha beállítja, hogy az "automatikus világítás" mikor kapcsolja be és ki a fényszórókat a környezeti fényviszonyok alapján
    • A High Scorer és High Scorer név visszaállítása (EEPROM -ban tárolva)

A funkciók ilyen módon történő szétválasztása sokkal alkalmazásszerűbb élményt nyújt. A projekt egyik kihívása volt, hogy a NodeMCU több oldalt szolgáljon ki. Néhány különböző megközelítés kipróbálása után találkoztam a kóddal, amelyet a fő Arduino -vázlat 232–236. Ez remekül működik - egyszerűen hozza létre az indexfájlt, majd nevezze el a következő oldalakat 1. oldal, 2. oldal stb. Megállapítottam, hogy az összes erőforrásfájlt (CSS és képek) a gyökér adatmappába kell helyeznem, de ez valójában nem jelent problémát a ezt a méretet.

Ezután dolgoznom kellett a CSS -sel és a Javascript -el, hogy elkészítsek valamit, ami úgy néz ki, mintha egy Lego Mini -hez tartozna. Mivel semmiről sem tudok egyik témáról sem, sok google-olás volt itt, mielőtt valami olyat kaptam, amivel elégedett voltam. Azzal kezdtem, hogy szégyentelenül bemásoltam ide egy CSS stílusú lego téglát a CodePen-re. Szerettem volna eltávolodni attól is, hogy a gombokat szöveggel címkézzem, és az Icons8 egyszerű grafikáit használjam, amelyek tökéletesek voltak a céljaimhoz. A többi onnan a helyére került. Az oldalak nagyon jól jelennek meg minden olyan iPhone -on, amelyen teszteltem őket. Remélhetőleg ugyanez igaz az Android telefonokra is (asztali Chrome böngészőben rendben van).

4. lépés: A játékkód

A játékkód
A játékkód

A NodeMCU szerver és az okostelefon böngészője közötti kommunikáció a Websocketen keresztül történik. Miután a felhasználó megnyomott egy gombot, a böngésző szöveges karaktert küld a NodeMCU -nak, amely megfelel a Mini egy vagy több jelzőfényének. További karaktereket küldünk a játék folyamatának szabályozására. Az Arduino kód ezután a kapott karakter alapján cselekszik. A Websocket kommunikáció csak bináris és szöveges karaktereket képes kezelni, ezért az egész számokhoz (például az időzóna) némi átalakításra van szükség.

Amint említettem, eredetileg arra számítottam, hogy a kapcsolódó Hackster projekt kódját használom az alapvető játékfunkciókhoz. Amire számítottam, az az lesz, hogy miután egy játékos megnyomott egy gombot, a megfelelő LED kigyullad, és a kód digitális olvasást végez az összes LED -en, hogy lássa, hogy a megfelelő világít -e (a Hackster projekt ellenőrzi a fizikai gombok bemenetét, de ugyanaz az ötlet). Ez valahogy működött, de számomra még mindig tisztázatlan okok miatt nem tökéletesen. Körülbelül 10% -ban a Mini azt mondaná, hogy helytelen gombot nyomtak le, amikor valójában a megfelelőt nyomták. A soros monitoron és a böngészőkonzolon látottak alapján minden rendben volt, így fogalmam sincs, miért nem működött.

Hosszas böfögés után néhány hibaellenőrzés bevezetésével lemondtam a LED állapotok olvasásának ötletéről, és létrehoztam egy "válasz" tömböt, amely ellenőrzi, hogy a kapott Websocket szöveg megfelel -e a "szekvencia" tömbben tárolt helyes tűnek. lejátszja a fénysorozatot, hogy emlékezzen. Ez 100% -ban megbízhatónak tűnik, még akkor is, ha az általam megvalósított mód kicsit bonyolult. Miután kidolgoztam ezt a módszert, rábukkantam erre, ami érdekes feltárása néhány digitális zár működésének, és analóg a játékban alkalmazott megközelítéssel.

A gombok bevitelének időzítését mostantól a böngésző oldali Javascript kezeli (nagyon nagyvonalú 10 másodpercet hagyok a gombok beírása között), és a játék menetét most már teljesen a játékos irányítja, nem pedig kódolva. A kijelző olyan ablakokat tartalmaz, amelyek a következő gombnyomásig hátralévő időt mutatják, és a bemenetek számát, mielőtt a lejátszó helyesen elküldi a sorozatot.

A magas pontszámokat az EEPROM tárolja (vagy ami megfelel az EEPROM-nak az ESP8266 világban), és ha egy játékos új magas pontszámot ér el, egy előugró ablak lehetővé teszi, hogy megadjon egy választott nevet, amely szintén az EEPROM-ban tárolódik. Ezeket az értékeket a Beállítás oldalon lehet visszaállítani (biztos vagyok benne, hogy ennek jogos okai lehetnek).

Mindezek ellenére újra felhasználtam a Hackster játékkód egy tisztességes darabját, ami nagyon felgyorsította a dolgokat.

5. lépés: A kód többi része

A kód többi része
A kód többi része

A Hackster projekt kódjához képest az Arduino vázlatom hatalmasnak tűnik, még akkor is, ha az adatfájlokban nincs HTML, CSS és Javascript. De a vázlat nagy része egy csomó olyan funkciót tartalmaz, amelyek az alapvető műveletekhez kapcsolódnak, mint például a szerver létrehozása és kezelése, az NTP idő megszerzése, az mDNS, az éteren keresztüli frissítés, a WiFi kezelés, a SPIFFS fájlkezelés és hasonlók.

A HTML fájlokban található Javascript elsősorban a Websocket (fogadott és küldött) üzenetek kezelésére és a GUI interaktivitásának növelésére szolgál.

Amint említettem, javítani akartam az "automatikus világítás" funkció funkcionalitásán, amely fényfüggő ellenállást használ a NodeMCU egyetlen analóg érintkezőjén, hogy érzékelje a környezeti fényt és bekapcsolja a Mini lámpáit egy előre beállított szinten (amikor nem játék módban van), természetesen). Bár ez nagyon komolytalan funkció egy komolytalan projektben, engem zavart, hogy az eredeti projektben keményen kódoltam a bekapcsolási küszöböt, és hogy a felhasználó nem látta, hogy az uralkodó fényszint hogyan viszonyul ehhez a küszöbhöz. Most a fényszint leolvasása öt másodpercenként elküldésre kerül a Beállítás oldalra, és ezen az oldalon megjelennek a be- és kikapcsolás aktuális küszöbértékei is (amelyeket a felhasználó konfigurálhat). Tehát a munka ezen az oldalon.

Ó, majdnem elfelejtettem. A kód itt található a GitHubon. A letöltés után tegye a teljes csomagot egy új mappába, töltse fel az Arduino vázlatot, majd az adatmappa tartalmát a SPIFFS -be.

Ajánlott: