Tartalomjegyzék:
- 1. lépés: Alkatrészek, eszközök és erőforrások
- 2. lépés: Hardvermódosítás
- 3. lépés: A GUI frissítése
- 4. lépés: A játékkód
- 5. lépés: A kód többi része
Videó: Lego mini memóriajáték: 5 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
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
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
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é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 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 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:
Micro: bit memóriajáték: 4 lépés
Micro: bit memóriajáték: Egy egyszerű memóriajáték, ahol emlékeznie kell egy sorozatra, és válaszolnia kell, ha másodszor is, a sorozat pontosan ugyanaz volt. Minden körben egy további lépés kerül hozzáadásra a sorozathoz
Simon szerint memóriajáték: 4 lépés
Simon azt mondja Memóriajáték: Ez egy olyan játék, amelyet sokan szeretünk és emlékezünk gyerekkorunkból. Nem csak a nosztalgikus emlékeket idézzük vissza, hanem hozzáadjuk a számítógép -mérnöki világhoz! Ez a játék különböző szintekből áll, amelyekben a segéd LED -ek
Lego Lego Skull Man: 6 lépés (képekkel)
Lego Lego Skull Man: Sziasztok, ma megtanítlak benneteket, hogyan készítsetek egy hűvös kis elemekkel működő led lego koponyás embert. Ez nagyszerű lenne a hamarosan megjelenő halloweenkor. Vagy akár egy egyszerű egyszerű projekt is lenne amikor a deszkád vagy csak egy kis palást
Lego Mini Cooper App vezérelt fények: 7 lépés (képekkel)
LEGO Mini Cooper App vezérelt fények: Veszély, UXB! Álomfeladata bombázó szakértő, de habozik a haldokló rész miatt? Akkor ez a projekt az Ön számára! Hosszú órákat tölt azzal, hogy apró módosításokat végez egy rendkívül instabil eszközön, és izzadság szivárog a testvérétől
Memóriajáték érintéssel (Simon mondja) - ha ez akkor: 6 lépés (képekkel)
Memóriajáték érintéssel (Simon mondja) - Ha ez akkor az: Memóriajátékot készítettem saját készítésű érintőpadokkal és neopixelgyűrűvel egy iskolai projekthez. Ez a játék hasonló a Simon Says -hez, kivéve, hogy a játékban a bemenetek és visszajelzések sok formája (hangok és fényhatások) eltérő. Hangokat programoztam Su -tól