Obsah:

Postavte Rainbow Interactive Bridge pomocí Minecraft Raspberry Pi Edition: 11 kroků
Postavte Rainbow Interactive Bridge pomocí Minecraft Raspberry Pi Edition: 11 kroků

Video: Postavte Rainbow Interactive Bridge pomocí Minecraft Raspberry Pi Edition: 11 kroků

Video: Postavte Rainbow Interactive Bridge pomocí Minecraft Raspberry Pi Edition: 11 kroků
Video: Frozen ❄️ | A Cosmic Kids Yoga Adventure! Frozen Videos for Kids 2024, Prosinec
Anonim
Image
Image

Včera jsem viděl svého 8letého synovce hrát Minecraft s Raspberry Pi, který jsem mu dal předtím, pak jsem dostal nápad, pomocí kódu vytvořit přizpůsobený a vzrušující projekt LED bloků Minecraft-pi. Minecraft Pi je skvělý způsob, jak začít s mikropočítačem Raspberry Pi. Minecraft Pi je speciální zakázková verze Minecraftu, která nám umožňuje interakci se hrou pomocí smrtícího jednoduchého rozhraní Python API pro přizpůsobení herního zážitku a rekvizit!

Ve světě Minecraftu můžete s Raspberry Pi dělat mnoho projektů, ale konkrétně pro nás to nestačilo, hledali jsme něco náročného a blikajícího zároveň. V tomto projektu stoupneme na více bloků Minecraftu, zjistíme ID bloku a zjistíme barvu konkrétního bloku, na který jsme šlápli, na základě barvy, kterou rozsvítíme naši RGB LED, abychom vytvořili interaktivní krokovou hru!

K dosažení efektu použiji dvě metody, první je použití příslušenství, které může být velmi chaotické …; druhá používá CrowPi2 (učební počítač s mnoha senzory, v současnosti crowdfundovaný na Kickstarter: CrowPi2)

pojďme začít a uvidíme, jak archivovat tak úžasný projekt!

Zásoby

CrowPi2 nyní žije na kickstarteru, projekt CrowPi2 získal téměř 250 tisíc dolarů.

Klikněte na odkaz:

Metoda 1 Použití příslušenství

Krok 1: Materiály

● 1 x Raspberry Pi 4 model B

● 1 x karta TF s obrázkem

● 1 x napájecí zdroj Raspberry Pi

● 1 x 10,1 palcový monitor

● 1 x napájecí zdroj pro monitor

● 1 x kabel HDMI

● 1 x klávesnice a myš

● 1 x RGB LED (společná katoda)

● 4 x svetry (ženy na ženy)

Krok 2: Schéma připojení

Schéma připojení
Schéma připojení

V barevných LED diodách RGB jsou ve skutečnosti tři světla, která jsou červená, zelená a modrá. Ovládejte tato tři světla tak, aby vyzařovala světlo různé intenzity, a když jsou smíchána, mohou vyzařovat světlo různých barev. Čtyři piny na LED osvětlení jsou GND, R, G a B, v daném pořadí. RGB LED, kterou jsem použil, je běžná katoda a připojení k Raspberry Pi je následující:

RaspberryPi 4B (v názvu funkce) RGB LED

GPIO0 1 ČERVENÁ

GPIO1 3 ZELENÁ

GPIO2 4 MODRÁ

GND 2 GND

Druhý obrázek je hardwarové připojení

Krok 3: Konfigurace pro SPI

Konfigurace pro SPI
Konfigurace pro SPI
Konfigurace pro SPI
Konfigurace pro SPI
Konfigurace pro SPI
Konfigurace pro SPI
Konfigurace pro SPI
Konfigurace pro SPI

Protože k ovládání RGB potřebujeme použít SPI, musíme nejprve povolit rozhraní SPI, které je ve výchozím nastavení zakázáno. Chcete -li povolit rozhraní SPI, můžete provést následující kroky:

Nejprve můžete použít Desktop GUI tak, že přejdete na Pi start MenupreferencesRaspberry Pi Configuration, jak ukazuje první obrázek.

Za druhé, přejděte na „Rozhraní“, povolte SPI a klikněte na OK (druhý obrázek).

Nakonec restartujte Pi, aby se změny projevily. Klikněte na nabídku Pi Start Předvolby Vypnutí. Protože stačí restartovat, klikněte na tlačítko Reboot.

Krok 4: Kód

Začneme napsáním našeho kódu pythonu, nejprve začneme importem několika knihoven, které budeme potřebovat k integraci našeho kódu do světa Minecraftu. Poté importujeme knihovnu času, konkrétně funkci s názvem spánek. Funkce spánku nám umožní počkat určitý interval před provedením funkce. V neposlední řadě importujeme knihovnu RPi. GPIO, která nám umožňuje ovládat GPIO na Raspberry Pi.

z mcpi.minecraft import Minecraft z času import spánku import RPi. GPIO jako GPIO

A to je vše, import knihoven jsme dokončili, nyní je čas je použít! Nejprve je třeba použít knihovnu Minecraft, chceme propojit náš python skript se světem Minecraftu, můžeme to provést vyvoláním funkce init () knihovny MCPI a poté nastavit režim GPIO a vypnout varování.

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

Nyní definujeme některé duhové barvy v šestnáctkové soustavě, abychom mohli měnit barvy RGB.

BÍLÁ = 0xFFFFFF ČERVENÁ = 0xFF0000 ORANŽOVÁ = 0xFF7F00 ŽLUTÁ = 0xFFFF00 ZELENÁ = 0x00FF00 CYAN = 0x00FFFF MODRÁ = 0x0000FF PURPLE = 0xFF00FF MAGENTA = 0xFF0090

Dále musíme definovat některé proměnné, abychom zaznamenali barvu vlněného bloku, který je již definován v seznamu bloků Minecraftu.

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

My ID vlnového bloku v Minecraftu je 35. Nyní musíme nakonfigurovat pin pro RGB LED a nastavit pro ně.

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, initial = 1)

Poté nastavte PWM pro každý pin, mějte na paměti, že rozsah hodnoty PWM je 0-100. Zde nejprve nastavíme barvu RGB LED na bílou (100, 100, 100).

červená = GPIO. PWM (red_pin, 100)

zelená = GPIO. PWM (green_pin, 100) blue = GPIO. PWM (blue_pin, 100) red.start (100) green.start (100) blue.start (100)

Následuje vytvoření dvou funkcí, které lze použít k dekódování barev a osvětlení RGB diod! Všimněte si toho, že funkce map2hundred () má mapovat hodnoty od 255 do 100, jak jsme řekli dříve, hodnota PWM by měla být 0-100.

def map2hundred (hodnota): return int (hodnota * 100/255)

def set_color (color_code): # Decode red_value = color_code >> 16 & 0xFF green_value = color_code >> 8 & 0xFF blue_value = color_code >> 0 & 0xFF

# Hodnoty mapy red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

# Rozsviť! red. ChangeDutyCycle (red_value) green. ChangeDutyCycle (green_value) blue. ChangeDutyCycle (blue_value)

Výborně! Je na čase spustit náš hlavní program, počkat, měla by být definována další proměnná pro záznam barevného kódu vlněného bloku před hlavním programem:

last_data = 0 pokus: 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 Bloky (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 Bloky (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 Bloky (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 Bloky (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 Bloky (x+24, y, z, x+25, y, z+2, 35, 14) zatímco True: x, y, z = mc.player.getPos () # pozice hráče (x, y, z) block = mc.getBlockWithData (x, y-1, z) # ID bloku #print (block) if block.id == WOOL a last_data! = Block.data: if block.data == W_RED: print ("Red!") Set_color (RED) if block.data == W_ORANGE: print ("Orange!") Set_color (ORANGE) if if block.data == W_ ŽLUTÁ: tisk ("Žlutá!") Set_color (ŽLUTÁ) pokud block.data == W_GREEN: tisk ("Zelená!") Set_color (ZELENÁ) pokud block.data == W_CYAN: print ("Azurová!") 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 (" Magenta! ") Set_color (MAGENTA) if block.data == W_WHITE: print (" White! ") Set_color (WHITE) last_data = block.data sleep (0,05) okrem KeyboardInterrupt: pass GPIO.cleanup ()

Jak je hlavní program ukázán výše, nejprve pomocí některých příkazů vygenerujte nějaké barevné vlněné bloky, pak musíme zjistit pozici hráče, abychom mohli získat ID bloků a jeho barevný kód. Po získání informací o bloku použijeme příkaz k určení, zda je blok pod přehrávačem vlněný blok a zda má barevný kód. Pokud ano, posuďte, jakou barvu má vlněný blok, a zavolejte funkci set_color (), aby se barva RGB vedla stejně jako vlněný blok.

Kromě toho přidáme příkaz try/kromě, abychom zachytili výjimku přerušení uživatele, když chceme program ukončit, abychom vymazali výstup pinů GPIO.

V příloze je kompletní kód.

Dobrá práce, tolik příslušenství a příliš komplikované, že? Nebojte se, podívejme se na druhou metodu k dosažení projektu, díky které se budete cítit flexibilnější a pohodlnější, což je použití našeho CrowPi2!

Krok 5: Výsledek

Image
Image

Otevřete hru a spusťte skript, výsledek uvidíte ve videu výše

Poté použijeme CrowPi2 k vybudování interaktivního mostu Rainbow

Krok 6: Použití materiálů CrowPi2

● 1 x CrowPi2

Krok 7: Použití schématu připojení CrowPi2-

Není třeba. Na CrowPi2 je mnoho užitečných senzorů a komponent (více než 20), to vše v jednom malinovém notebooku a vzdělávací platformě STEM, která nám umožňuje provádět více projektů snadno a bez potu! V tomto případě použijeme atraktivní a barevný modul na CrowPi2, což je maticový modul 8x8 RGB, který nám umožňuje ovládat 64 RGB LED současně!

Krok 8: Použití CrowPi2- Konfigurace pro SPI

Není třeba. CrowPi2 přichází s vestavěným obrazem s výukovým systémem! Všechno bylo připraveno, což znamená, že můžete přímo programovat a učit se. Kromě toho je to s naším CrowPi2 snadné a již integrované do desky jako STEAM platforma připravená k provozu.

Krok 9: Použití CrowPi2- kódu

Nyní je čas spustit náš program! Nejprve importujte několik knihoven, například knihovnu MCPI, což je knihovna Minecraft Pi Python, která nám umožňuje použít velmi jednoduché API pro integraci se světem Minecraftu; časová knihovna, která nám umožňuje funkci spánku čekat určitý interval před provedením funkce; Knihovna RPi. GPIO, která nám umožňuje ovládat piny GPIO Raspberry Pi.

z mcpi.minecraft import Minecraft z času import spánku import RPi. GPIO jako GPIO

Nakonec importujeme knihovnu s názvem rpi_ws281x, což je knihovna RGB Matrix, v knihovně je několik funkcí, které použijeme, například PixelStrip pro nastavení objektu LED pásku a Color pro konfiguraci barevného objektu RGB, který má svítit naše RGB LED

z rpi_ws281x importujte PixelStrip, Color

A to je vše, import knihoven jsme dokončili, nyní je čas je použít! Stejně tak první věcí je použít knihovnu Minecraft, chceme propojit náš python skript se světem Minecraftu, můžeme to udělat vyvoláním funkce init knihovny MCPI:

mc = Minecraft.create ()

Nyní pokaždé, když chceme provádět operace ve světě minecratů, můžeme použít objekt mc.

Dalším krokem bude definování maticové třídy RGB LED, kterou budeme používat k ovládání našich RGB LED diod, třídu inicializujeme základní konfigurací, jako je počet LED diod, pinů, jas atd …

vytvoříme funkci nazvanou clean, která „vyčistí“méně se specifickou danou barvou, a také funkci nazvanou run, která inicializuje skutečný objekt RGB LED při prvním použití.

třída RGB_Matrix:

def _init _ (self):

# Konfigurace LED pásku:

self. LED_COUNT = 64 # Počet pixelů LED.

self. LED_PIN = 12 # GPIO pin připojený k pixelům (18 používá PWM!).

self. LED_FREQ_HZ = 800000 # frekvence signálu LED v hertzech (obvykle 800 kHz)

self. LED_DMA = 10 # kanál DMA k použití pro generování signálu (zkuste 10)

self. LED_BRIGHTNESS = 10 # Nastaveno na 0 pro nejtmavší a 255 pro nejjasnější

self. LED_INVERT = False # True pro invertování signálu

self. LED_CHANNEL = 0 # nastaveno na '1' pro GPIO 13, 19, 41, 45 nebo 53

# Definujte funkce, které různými způsoby animují LED diody. def clean (vlastní, proužek, barva):

# setřete všechny LED diody najednou

pro i v dosahu (strip.numPixels ()):

strip.setPixelColor (i, barva)

strip.show ()

def run (vlastní):

# Vytvořte objekt NeoPixel s příslušnou konfigurací.

proužek = PixelStrip (self. LED_COUNT, self. LED_PIN, self. LED_FREQ_HZ, self. LED_DMA, self. LED_INVERT, self. LED_BRIGHTNESS, self. LED_CHANNEL)

Snaž se:

zpětný proužek

kromě KeyboardInterrupt:

# vyčistěte matici LED před přerušením

self.clean (proužek)

Poté, co jsme provedli výše uvedené, je čas vyvolat tyto třídy a vytvořit objekty, které můžeme použít v našem kódu, nejprve vytvořme objekt matice RGB LED, který můžeme použít pomocí třídy, kterou jsme vytvořili dříve:

matrixObject = RGB_Matrix ()

Nyní použijme tento objekt k vytvoření aktivního objektu LED pásku, který budeme používat k ovládání našich jednotlivých LED diod na matici RGB:

strip = matrixObject.run ()

Nakonec, abychom tento pruh aktivovali, budeme muset spustit jednu poslední funkci:

strip.begin ()

Rozhraní Minecraft API obsahuje spoustu bloků, každý blok Minecraftu má své vlastní ID. V našem příkladu jsme vzali určité množství bloků Minecraftu a pokusili jsme se odhadnout, která barva je pro ně nejvhodnější.

RGB znamená červenou, zelenou a modrou, takže pro každou budeme potřebovat 3 různé hodnoty od 0 do 255, barvy mohou být ve formátu HEX nebo RGB, v našem příkladu používáme formát RGB.

Ve světě Minecraft Pi existují ID běžných bloků a ID speciálních vlněných bloků, speciální vlna spadá pod ID číslo 35, ale s podčísly v rozsahu mnoha různých ID … Tento problém vyřešíme vytvořením 2 samostatných seznamů, jednoho pro normální bloky a jeden seznam speciálních vlněných bloků:

První seznam je pro normální bloky, například 0 představuje vzdušný blok, nastavíme mu barvu 0, 0, 0, která je prázdná nebo úplná bílá, když hráč ve hře skočí nebo letí, RGB se vypne, 1 je jiný blok s barvou RGB 128, 128, 128 atd.…

#Déšťové barvy

rainbow_colors = {

"0": Barva (0, 0, 0), "1": Barva (128, 128, 128), "2": Barva (0, 255, 0), "3": Barva (160, 82, 45), "4": Barva (128, 128, 128), "22": Barva (0, 0, 255)

}

U vlněných bloků děláme totéž, ale je důležité si uvědomit, že všechny bloky mají ID 35, v tomto seznamu definujeme podtypy bloku, který je vlněným blokem. Různé podtypy vlny mají různé barvy, ale všechny jsou vlněné bloky.

wool_colors = {

"6": Barva (255, 105, 180), "5": Barva (0, 255, 0), "4": Barva (255, 255, 0), "14": Barva (255, 0, 0), "2": Barva (255, 0, 255)

}

Nyní, když dokončujeme definování našeho hlavního programu, tříd a funkcí, je čas integrovat se s naším integrovaným snímačem CrowPi2 RGB LED.

Hlavní program převezme parametry, které jsme definovali dříve, a ovlivní hardware.

Použijeme CrowPi2 RGB LED, abychom je rozsvítili na základě kroků, které děláme uvnitř Minecraft Pi na každém bloku, pojďme začít!

První věcí, kterou uděláme, je vygenerování několika bloků vlny pomocí příkazů a vytvoření smyčky while, aby byl program spuštěný tak dlouho, dokud hru hrajeme.

Potřebujeme získat nějaká data z přehrávače, nejprve použijeme příkaz player.getPos () k získání pozice hráče, poté pomocí getBlockWithData () získáme blok, na kterém právě stojíme (souřadnice y je -1, což je znamená pod hráčem)

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)

zatímco pravda:

x, y, z = mc.player.getPos () # pozice hráče (x, y, z)

blockType, data = mc.getBlockWithData (x, y-1, z) # ID bloku

tisk (blockType)

Poté zkontrolujeme, zda je blok vlněný blok, číslo bloku 35, pokud ano, odkazujeme na wool_colors s barvou bloku na základě ID slovníku a podle toho rozsvítíme správnou barvu.

if blockType == 35:

# vlastní vlněné barvy

matrixObject.clean (proužek, wool_colors [str (data)])

Pokud to není vlněný blok, zkontrolujeme, zda je blok aktuálně uvnitř slovníku rainbow_colors, abychom se vyhnuli výjimkám, pokud ano, budeme pokračovat tím, že vezmeme barvu a změníme RGB.

if str (blockType) v rainbow_colors:

tisk (rainbow_colors [str (blockType)])

matrixObject.clean (proužek, rainbow_colors [str (blockType)])

spánek (0,5)

Vždy se můžete pokusit přidat do rainbow_color další bloky, abyste přidali více barev a více bloků!

Perfektní! Provádění projektů pomocí příslušenství je komplikované, ale s integrovaným obvodem CrowPi2 je vše mnohem jednodušší! A co víc, na CrowPi2 je více než 20 senzorů a komponent, což vám umožňuje dosáhnout ideálních projektů a dokonce i projektů AI!

Níže je kompletní kód:

Krok 10: Použití CrowPi2-výsledek

Otevřete hru a spusťte skript, výsledek uvidíte ve videu výše:

Krok 11: Použití CrowPi2- přechod dále

Nyní jsme dokončili náš barevný projekt ve hře Minecraft s CrowPi2. Proč nezkusit použít na hře CrowPi2 další senzory a komponenty, jako je joystick pro ovládání pohybu hráče, RFID pro generování bloků na základě různých karet NFC atd. Bavte se s hrou na CrowPi2 a doufejte, že to zvládnete další neuvěřitelné projekty s CrowPi2!

Nyní je CrowPi2 na Kickstarteru, můžete si také užít atraktivní cenu.

Připojte odkaz na stránku Kickstarter CrowPi2

Doporučuje: