Tartalomjegyzék:

Építs Rainbow interaktív hidat a Minecraft Raspberry Pi Edition használatával: 11 lépés
Építs Rainbow interaktív hidat a Minecraft Raspberry Pi Edition használatával: 11 lépés

Videó: Építs Rainbow interaktív hidat a Minecraft Raspberry Pi Edition használatával: 11 lépés

Videó: Építs Rainbow interaktív hidat a Minecraft Raspberry Pi Edition használatával: 11 lépés
Videó: Innocent swedish girl gets absolutely destroyed by small angry man 2024, November
Anonim
Image
Image

Tegnap láttam, hogy a 8 éves unokaöcsém Minecraftot játszik a Raspberry Pi-vel, amit korábban neki adtam, aztán ötletem támadt, hogy kód segítségével testreszabott és izgalmas Minecraft-pi LED blokkok projektet készítenek. A Minecraft Pi nagyszerű módja a Raspberry Pi mikroszámítógép használatának megkezdéséhez, a Minecraft Pi a Minecraft speciális, egyedi verziója, amely lehetővé teszi számunkra, hogy egy halálosan egyszerű Python API segítségével interakcióba lépjünk a játékkal a játékélmény és a kellékek testreszabásához!

A Minecraft világában sok projektet lehet csinálni a Raspberry Pi -vel, de kifejezetten nekünk ez nem volt elég, valami kihívást és villogást kerestünk egyszerre. Ebben a projektben több Minecraft blokkra lépünk, érzékeljük a blokk azonosítóját és felismerjük az adott blokk színét, amelyre léptünk, a szín alapján, amelyet meggyújtunk RGB LED -jünkkel interaktív lépésjáték létrehozásához!

Két módszert fogok használni a hatás eléréséhez, az első a kiegészítők használata, amelyek nagyon kaotikusak lehetnek…; a második a CrowPi2 -t használja (sok érzékelővel rendelkező tanuló számítógép, jelenleg a Kickstarteren: CrowPi2)

kezdjük és nézzük meg, hogyan archiválhatunk egy ilyen csodálatos projektet!

Kellékek

A CrowPi2 most élőben elérhető a kickstarteren, a CrowPi2 projekt majdnem 250 ezer dollárt gyűjtött össze.

Kattints a linkre:

1. módszer A tartozékok használata

1. lépés: Anyagok

● 1 x Raspberry Pi 4 B modell

● 1 x TF kártya képpel

● 1 x Raspberry Pi tápegység

● 1 x 10,1 hüvelykes monitor

● 1 x tápegység a monitorhoz

● 1 x HDMI kábel

● 1 x billentyűzet és egér

● 1 x RGB led (közös katód)

● 4 x jumper (nősténytől nőig)

2. lépés: Csatlakozási rajz

Csatlakozási rajz
Csatlakozási rajz

Valójában három fény van az RGB színes LED -ben, amelyek piros, zöld és kék fények. Vezérelje ezt a három lámpát, hogy különböző intenzitású fényt bocsásson ki, és keveréskor különböző színű fényt bocsásson ki. A LED -lámpa négy csapja GND, R, G és B. Az általam használt RGB LED egy általános katód, és a kapcsolat a Raspberry Pi -vel a következő:

RaspberryPi 4B (funkciónévben) RGB LED

GPIO0 1 PIROS

GPIO1 3 ZÖLD

GPIO2 4 KÉK

GND 2 GND

A második kép a hardver kapcsolat

3. lépés: Konfigurálás az SPI -hez

Konfigurálás SPI -hez
Konfigurálás SPI -hez
Konfigurálás SPI -hez
Konfigurálás SPI -hez
Konfigurálás SPI -hez
Konfigurálás SPI -hez
Konfigurálás SPI -hez
Konfigurálás SPI -hez

Mivel az SPI -t kell használnunk az RGB vezérléséhez, először engedélyeznünk kell az SPI interfészt, amely alapértelmezés szerint le van tiltva. Az SPI felület engedélyezéséhez kövesse az alábbi lépéseket:

Először is használhatja az asztali GUI -t, ha a Pi start MenupreferencesRaspberry Pi Configuration menüpontra lép, ahogy az az első képen látható.

Másodszor, lépjen az „Interfészek” ponthoz, és engedélyezze az SPI -t, majd kattintson az OK gombra (a második kép).

Végül indítsa újra a Pi -t, hogy a módosítások érvénybe lépjenek. Kattintson a Pi Start menüPreferencesShutdown elemre. Mivel csak újra kell indítanunk, kattintson az Újraindítás gombra.

4. lépés: A kód

Kezdjük a python -kódunk megírásával, először is néhány könyvtár importálásával, amelyekre szükségünk lesz, hogy integráljuk kódunkat a Minecraft világába. Ezután importáljuk az időkönyvtárat, különösen az alvó funkciót. Az alvó funkció lehetővé teszi, hogy egy bizonyos intervallumot várjunk a funkció végrehajtása előtt. Végül, de nem utolsósorban importáljuk az RPi. GPIO könyvtárat, amely lehetővé teszi a GPIO vezérlését a Raspberry Pi -n.

from mcpi.minecraft import Minecraft from time import alvó import RPi. GPIO mint GPIO

És ennyi, befejeztük a könyvtárak importálását, most itt az ideje használni őket! Először is a Minecraft könyvtár használata, szeretnénk a python szkriptünket a Minecraft világához csatlakoztatni, ezt megtehetjük az MCPI könyvtár init () függvényének meghívásával, majd beállítjuk a GPIO módját és letiltjuk a figyelmeztetést.

mc = Minecraft.create () GPIO.setmode (GPIO. BCM) GPIO.setwarnings (0)

Most definiálunk néhány szivárványszínt hexadecimális számban, hogy megváltoztassuk az RGB színeket.

FEHÉR = 0xFFFFFF RED = 0xFF0000 ORANGE = 0xFF7F00 SÁRGA = 0xFFFF00 ZÖLD = 0x00FF00 CYAN = 0x00FFFF BLUE = 0x0000FF PURPLE = 0xFF00FF MAGENTA = 0xFF0000

Ezután meg kell határoznunk néhány változót a gyapjúblokk színének rögzítéséhez, amelyet a Minecraft blokklistában már definiáltunk.

W_WHITE = 0 W_RED = 14 W_ORANGE = 1 W_YELLOW = 4 W_GREEN = 5 W_CYAN = 9 W_BLUE = 11 W_PURPLE = 10 W_MAGENTA = 2

A Minecraft gyapjú blokkjának azonosítója 35. Most be kell állítanunk a tűt az RGB ledekhez, és be kell állítanunk őket.

red_pin = 17 green_pin = 18 blue_pin = 27

GPIO.setup (red_pin, GPIO. OUT, initial = 1) GPIO.setup (green_pin, GPIO. OUT, initial = 1) GPIO.setup (blue_pin, GPIO. OUT, inicial = 1)

Ezután állítsa be a PWM-et minden csaphoz, vegye figyelembe, hogy a PWM értéktartománya 0-100. Itt először az RGB led színét állítottuk fehérre (100, 100, 100).

piros = GPIO. PWM (red_pin, 100)

zöld = GPIO. PWM (green_pin, 100) blue = GPIO. PWM (blue_pin, 100) red.start (100) green.start (100) blue.start (100)

Az alábbiakban két funkciót hozunk létre, amelyek felhasználhatók a színek dekódolására és az RGB felfelé világítására! Ne feledje, hogy a map2hundred () függvény 255 és 100 közötti értékek leképezésére szolgál, amint azt korábban említettük, a PWM értéknek 0-100-nak kell lennie.

def map2hundred (érték): return int (érték * 100 /255)

def set_color (color_code): # dekódolás red_value = color_code >> 16 & 0xFF green_value = color_code >> 8 & 0xFF blue_value = color_code >> 0 & 0xFF

# Térképértékek red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

# Világít! red. ChangeDutyCycle (piros_érték) zöld. ChangeDutyCycle (zöld_érték) kék. ChangeDutyCycle (kék_érték)

Szép munka! Itt az ideje, hogy elkezdjük a fő programunkat, várjunk, egy másik változót kell megadni a gyapjúblokk színkódjának rögzítéséhez a főprogram előtt:

last_data = 0 try: x, y, z = mc.player.getPos () mc.setBlocks (x, y, z, x+1, y, z+2, 35, 14) mc.setBlocks (x+2, y+1, z, x+3, y+1, z+2, 35, 11) mc.set Blokkok (x+4, y+2, z, x+5, y+2, z+2, 35, 2) mc.setBlocks (x+6, y+3, z, x+7, y+3, z+2, 35, 5) mc.setBlocks (x+8, y+4, z, x+9, y+4, z+2, 35, 4) mc.set Blokkok (x+10, y+5, z, x+11, y+5, z+2, 35, 10) mc.setBlocks (x+12, y+6, z, x+13, y+6, z+2, 35, 1) mc.set Blokkok (x+14, y+5, z, x+15, y+5, z+2, 35, 10) mc.setBlocks (x+16, y+4, z, x+17, y+4, z+2, 35, 4) mc.setBlocks (x+18, y+3, z, x+19, y+3, z+2, 35, 5) mc.set Blokkok (x+20, y+2, z, x+21, y+2, z+2, 35, 2) mc.setBlocks (x+22, y+1, z, x+23, y+1, z+2, 35, 11) mc.set Blokkok (x+24, y, z, x+25, y, z+2, 35, 14), míg True: x, y, z = mc.player.getPos () # játékos pozíciója (x, y, z) block = mc.getBlockWithData (x, y-1, z) # blokk azonosító #print (blokk), ha block.id == WOOL and last_data! = Block.data: if block.data == W_RED: print ("Red!") Set_color (RED) if block.data == W_ORANGE: print ("Orange!") Set_color (ORANGE), ha block.data == W_ SÁRGA: print ("Sárga!") Set_color (SÁRGA), ha block.data == W_GREEN: print ("Green!") Set_color (GREEN) if block.data == W_CYAN: print ("Cyan!") Set_color (CYAN)) if block.data == W_BLUE: print ("Blue!") set_color (BLUE) if block.data == W_PURPLE: print ("Purple!") set_color (PURPLE) if block.data == W_MAGENTA: print (" Bíbor! ") Set_color (MAGENTA) if block.data == W_WHWITE: print (" White! ") Set_color (WHITE) last_data = block.data sleep (0.05), kivéve a KeyboardInterrupt: pass GPIO.cleanup ()

Amint a főprogram fent látható, először néhány parancs használatával néhány színes gyapjúblokkot kell előállítani, majd meg kell találnunk a játékos pozícióját, hogy megkaphassuk a blokkok azonosítóját és színkódját. A blokk információ megszerzése után a nyilatkozat alapján meghatározzuk, hogy a lejátszó alatti blokk gyapjúblokk, és rendelkezik -e a színkóddal. Ha igen, döntse el, milyen színű a gyapjúblokk, és hívja meg a set_color () függvényt, hogy megváltoztassa az RGB -led színét, mint a gyapjútömb.

Ezenkívül egy try/exc utasítással egészítjük ki a felhasználói megszakítás kivételét, amikor ki akarjuk lépni a programból, hogy töröljük a GPIO -pin kimenetét.

Mellékelve a teljes kód.

Jól sikerült, sok kiegészítő és túl bonyolult, nem? Ne aggódjon, lássuk a második módszert a projekt megvalósításához, amely rugalmasabbá és kényelmesebbé fogja tenni a CrowPi2 -t!

5. lépés: Az eredmény

Image
Image

Nyissa meg a játékot, és futtassa a szkriptet, az eredményt a fenti videóban láthatja

Ezután a CrowPi2 segítségével építjük fel a Rainbow interaktív hidat

6. lépés: A CrowPi2-Materials használata

● 1 x CrowPi2

7. lépés: A CrowPi2- csatlakozási diagram használata

Nincs szükség. Sok hasznos érzékelő és alkatrész (több mint 20) található a CrowPi2 -n, mindez egy málna pi laptopban és a STEM oktatási platformban, amely lehetővé teszi számunkra, hogy könnyedén és izzadság nélkül végezzünk több projektet! Ebben az esetben egy vonzó és színes modult fogunk használni a CrowPi2 -n, amely egy 8x8 RGB mátrix modul, amely lehetővé teszi, hogy egyszerre 64 RGB ledet vezéreljünk!

8. lépés: A CrowPi2- Configure for SPI használata

Nincs szükség. A CrowPi2 beépített képpel és tanulási rendszerrel érkezik! Minden elő van készítve, ami azt jelenti, hogy közvetlenül programozhat és tanulhat. Ezenkívül a CrowPi2 -vel egyszerű, és már STEAM platformként integrálva van a táblába.

9. lépés: A CrowPi2 kód használata

Itt az ideje, hogy elkezdjük programunkat! Először importáljon néhány könyvtárat, például az MCPI könyvtárat, amely a Minecraft Pi Python könyvtár, amely lehetővé teszi számunkra, hogy egy nagyon egyszerű API -t használjunk a Minecraft világával való integrációhoz; időkönyvtár, amely lehetővé teszi számunkra, hogy az alvásfunkció egy bizonyos intervallumot várjon egy funkció végrehajtása előtt; RPi. GPIO könyvtár, amely lehetővé teszi a Raspberry Pi GPIO csapok vezérlését.

from mcpi.minecraft import Minecraft from time import alvó import RPi. GPIO mint GPIO

Végül importálunk egy rpi_ws281x nevű könyvtárat, amely az RGB mátrix könyvtár, a könyvtáron belül, számos funkciót használunk, mint például a PixelStrip a LED szalag objektum beállításához, és a Szín az RGB színes objektum világításának beállításához az RGB LED -eink

rpi_ws281x importálás PixelStrip, színes

És ennyi, befejeztük a könyvtárak importálását, most itt az ideje használni őket! Ugyanez, az első dolog a Minecraft könyvtár használata, szeretnénk összekapcsolni a python szkriptünket a Minecraft világával, ezt megtehetjük az MCPI könyvtár init függvényének meghívásával:

mc = Minecraft.create ()

Most, amikor műveleteket akarunk végezni a minecrat világon, használhatjuk az mc objektumot.

A következő lépés az RGB LED -mátrixosztály meghatározása, amelyet az RGB LED -ek vezérlésére fogunk használni, az osztályt az alapkonfigurációval inicializáljuk, mint például a LED -ek száma, csapok, fényerő stb.

létrehozzunk egy tiszta nevű függvényt, amely a megadott színnel kevesebbet „tisztít”, valamint egy futás nevű függvényt, amely inicializálja a tényleges RGB LED objektumot, amikor először akarjuk használni.

osztály RGB_Matrix:

def _init _ (saját):

# LED szalag konfiguráció:

self. LED_COUNT = 64 # LED -képpontok száma.

self. LED_PIN = 12 # GPIO pin a pixelekhez csatlakoztatva (18 PWM -et használ!).

self. LED_FREQ_HZ = 800000 # LED -jel frekvenciája hertzben (általában 800 khz)

self. LED_DMA = 10 # DMA csatorna a jel előállításához (próbálja meg a 10 -et)

self. LED_BRIGHTNESS = 10 # Állítsa 0 értékre a legsötétebb és 255 értéket a legfényesebb

self. LED_INVERT = Hamis # Igaz a jel megfordításához

self. LED_CHANNEL = 0 # beállítása "1" a 13, 19, 41, 45 vagy 53 GPIO -knál

# Határozza meg a LED -eket különböző módon animáló funkciókat. def tiszta (önálló, szalag, szín):

# törölje le az összes LED -et egyszerre

az i tartományban (strip.numPixels ()):

strip.setPixelColor (i, színes)

strip.show ()

def run (ön):

# Hozzon létre NeoPixel objektumot megfelelő konfigurációval.

csík = PixelStrip (self. LED_COUNT, self. LED_PIN, self. LED_FREQ_HZ, self. LED_DMA, self. LED_INVERT, self. LED_BRIGHTNESS, self. LED_CHANNEL)

próbáld ki:

visszatérő csík

A billentyűzet megszakítása kivételével:

# tisztítsa meg a mátrix LED -et megszakítás előtt

self.clean (csík)

Miután elvégeztük a fentieket, itt az ideje, hogy meghívjuk azokat az osztályokat, és hozzunk létre objektumokat, amelyeket felhasználhatunk a kódunkban, először hozzunk létre egy RGB LED -mátrixobjektumot, amelyet a korábban létrehozott osztály használatával használhatunk:

matrixObject = RGB_Matrix ()

Most használjuk ezt az objektumot aktív LED szalag objektum létrehozásához, amelyet az RGB mátrix egyedi LED -jeinek vezérlésére használunk:

csík = matrixObject.run ()

Végül a csík aktiválásához még egy utolsó funkciót kell futtatnunk:

strip.begin ()

A Minecraft API sok blokkot tartalmaz, minden Minecraft blokk saját azonosítóval rendelkezik. Példánkban vettünk bizonyos mennyiségű Minecraft blokkot, és megpróbáltuk kitalálni, melyik szín a legmegfelelőbb számukra.

Az RGB jelentése vörös, zöld és kék, így mindegyikre 3 különböző értékre lesz szükségünk, 0 és 255 között, a színek lehetnek HEX vagy RGB formátumúak, példánkban az RGB formátumot használjuk.

A Minecraft Pi világban vannak normál blokk -azonosítók és speciális gyapjúblokk -azonosítók, a speciális gyapjú a 35 -ös azonosítószám alá tartozik, de az alszámok sokféle azonosítóig terjednek … Ezt a problémát 2 külön lista létrehozásával oldjuk meg, egyet a normál blokkokhoz és egy lista a speciális gyapjúblokkokhoz:

Az első lista a normál blokkokra vonatkozik, például 0 a légblokkot jelenti, 0, 0, 0 színűre állítjuk, amely üres vagy teljesen fehér, amikor a játékos ugrik vagy repül a játékban, az RGB kikapcsol, 1 különböző blokk RGB színű 128, 128, 128 és így tovább …

#Szivárvány színek

szivárvány_színek = {

"0": Szín (0, 0, 0), "1": Színes (128, 128, 128), "2": Szín (0, 255, 0), "3": Színes (160, 82, 45), "4": Színes (128, 128, 128), "22": Színes (0, 0, 255)

}

A gyapjúblokkoknál is ugyanezt tesszük, de fontos megjegyezni, hogy minden blokk azonosítója 35, ebben a listában definiáljuk a gyapjúblokk blokk altípusait. A különböző gyapjú altípusok különböző színűek, de mindegyik gyapjúblokk.

gyapjú_színek = {

"6": Színes (255, 105, 180), "5": Szín (0, 255, 0), "4": Szín (255, 255, 0), "14": Szín (255, 0, 0), "2": Színes (255, 0, 255)

}

Amikor befejeztük a fő program, osztályok és funkciók meghatározását, itt az ideje, hogy integráljuk a CrowPi2 RGB LED fedélzeti érzékelőnkbe.

A főprogram figyelembe veszi a korábban definiált paramétereket, és hatással van a hardverre.

A CrowPi2 RGB LED -et fogjuk használni annak érdekében, hogy meggyújtsuk őket a Minecraft Pi -n belüli lépések alapján minden blokkon, kezdjük el!

Az első dolgunk, hogy parancsokkal generálunk néhány gyapjúblokkot, és létrehozunk egy while ciklust, hogy a program addig futhasson, amíg játszunk.

Be kell szereznünk néhány adatot a lejátszótól, először a player.getPos () parancsot használjuk a játékos pozíciójának megszerzéséhez, majd a getBlockWithData () segítségével kapjuk meg a blokkot, amelyen éppen állunk (y koordináta -1, ami a lejátszó alatt)

x, y, z = mc.player.getPos ()

mc.setBlocks (x, y, z, x+1, y, z+2, 35, 14)

mc.setBlocks (x+2, y+1, z, x+3, y+1, z+2, 35, 11)

mc.setBlocks (x+4, y+2, z, x+5, y+2, z+2, 35, 2)

mc.setBlocks (x+6, y+3, z, x+7, y+3, z+2, 35, 5)

mc.setBlocks (x+8, y+4, z, x+9, y+4, z+2, 35, 4)

mc.setBlocks (x+10, y+5, z, x+11, y+5, z+2, 35, 10)

mc.setBlocks (x+12, y+6, z, x+13, y+6, z+2, 35, 1)

mc.setBlocks (x+14, y+5, z, x+15, y+5, z+2, 35, 10)

mc.setBlocks (x+16, y+4, z, x+17, y+4, z+2, 35, 4)

mc.setBlocks (x+18, y+3, z, x+19, y+3, z+2, 35, 5)

mc.setBlocks (x+20, y+2, z, x+21, y+2, z+2, 35, 2)

mc.setBlocks (x+22, y+1, z, x+23, y+1, z+2, 35, 11)

mc.setBlocks (x+24, y, z, x+25, y, z+2, 35, 14)

míg igaz:

x, y, z = mc.player.getPos () # játékos pozíciója (x, y, z)

blockType, data = mc.getBlockWithData (x, y-1, z) # blokk-azonosító

nyomtatás (blockType)

Ezután ellenőrizzük, hogy a blokk gyapjúblokk, a 35 -ös blokk azonosítószám, ha igen, akkor a gyapjú_színekre hivatkozunk a blokk színével a szótár azonosítója alapján, és ennek megfelelően világítunk.

ha blockType == 35:

# egyedi gyapjú szín

matrixObject.clean (csík, gyapjú_színek [str (adatok)])

Ha nem gyapjúblokk, akkor a kivételek elkerülése érdekében megvizsgáljuk, hogy a blokk jelenleg a szivárvány_színek szótárban van -e.

ha str (blockType) a szivárvány_színekben:

nyomtatás (szivárvány_színek [str (blockType)])

matrixObject.clean (csík, szivárvány_színek [str (blockType)])

alvás (0,5)

Mindig megpróbálhat további blokkokat hozzáadni a rainbow_colorhoz, hogy további színeket és több blokk támogatást adjon hozzá!

Tökéletes! A tartozékokkal végzett projektek bonyolultak, de a CrowPi2 integrált áramkör használatával a dolgok sokkal könnyebbek! Sőt, a CrowPi2 -n több mint 20 érzékelő és alkatrész található, amelyek lehetővé teszik az ideális projektek és akár az AI projektek megvalósítását!

Alább a teljes kód:

10. lépés: A CrowPi2 használata-az eredmény

Nyissa meg a játékot, és futtassa a szkriptet, az eredményt a fenti videóban láthatja:

11. lépés: A CrowPi2 használata- Továbblépés

Most befejeztük színes projektünket a Minecraft játékban a CrowPi2 segítségével. Miért nem próbálja meg a CrowPi2 más érzékelőit és összetevőit használni a játékkal, például a joystickot a játékos mozgásának szabályozására, az RFID -t blokkok generálására különböző NFC kártyák alapján stb. Jó szórakozást a játékhoz a CrowPi2 -n több hihetetlen projekt a CrowPi2 segítségével!

Most a CrowPi2 a Kickstarteren van, és Ön is élvezheti a vonzó árat.

Csatolja a Kickstarter oldal linkjét CrowPi2

Ajánlott: