Obsah:

Postavte interaktívny most Rainbow pomocou edície Minecraft Raspberry Pi: 11 krokov
Postavte interaktívny most Rainbow pomocou edície Minecraft Raspberry Pi: 11 krokov
Anonim
Image
Image

Včera som videl svojho 8-ročného synovca hrať Minecraft s Raspberry Pi, ktorý som mu dal predtým. Potom som dostal nápad, že pomocou kódu vytvorím prispôsobený a vzrušujúci projekt LED blokov Minecraft-pi. Minecraft Pi je úžasný spôsob, ako začať s mikropočítačom Raspberry Pi. Minecraft Pi je špeciálna zákazková verzia Minecraftu, ktorá nám umožňuje interakciu s hrou pomocou smrtiaceho jednoduchého rozhrania Python API na prispôsobenie herného zážitku a rekvizít!

Existuje veľa projektov, ktoré môžete vo svete Minecraftu urobiť s Raspberry Pi, ale konkrétne pre nás to nestačilo, hľadali sme niečo náročné a blikajúce zároveň. V tomto projekte vykročíme do viacerých blokov Minecraftu, zistíme ID bloku a zistíme farbu konkrétneho bloku, na ktorý sme vystúpili, na základe farby, ktorú rozsvietime, našu RGB LED diódu, aby sme vytvorili interaktívnu krokovú hru!

Na dosiahnutie efektu použijem dve metódy, prvá je používanie príslušenstva, ktoré môže byť veľmi chaotické …; druhá používa CrowPi2 (učebný počítač s mnohými senzormi, v súčasnosti crowdfundovaný na Kickstarter: CrowPi2)

začnime a uvidíme, ako archivovať taký úžasný projekt!

Zásoby

CrowPi2 teraz beží na kickstarteri, projekt CrowPi2 získal takmer 250 000 dolárov.

Kliknite na odkaz:

Metóda 1 Používanie príslušenstva

Krok 1: Materiály

● 1 x Raspberry Pi 4 model B

● 1 x karta TF s obrázkom

● 1 x napájací zdroj Raspberry Pi

● 1 x 10,1 palcový monitor

● 1 x napájací zdroj pre monitor

● 1 x kábel HDMI

● 1 x klávesnica a myš

● 1 x RGB LED (spoločná katóda)

● 4 x prepojky (žena - žena)

Krok 2: Schéma pripojenia

Schéma zapojenia
Schéma zapojenia

V RGB farbe sú v skutočnosti tri svetlá, ktoré sú červené, zelené a modré. Ovládajte tieto tri svetlá tak, aby vyžarovali svetlo rôznej intenzity a keď sú zmiešané, môžu vyžarovať svetlo rôznych farieb. Štyri kolíky na LED svetle sú GND, R, G a B. RGB LED, ktorú som použil, je bežná katóda a pripojenie k Raspberry Pi je nasledujúce:

RaspberryPi 4B (v názve funkcie) RGB LED

GPIO0 1 ČERVENÁ

GPIO1 3 ZELENÁ

GPIO2 4 MODRÝ

GND 2 GND

Druhý obrázok je hardvérové pripojenie

Krok 3: Konfigurácia pre SPI

Konfigurovať pre SPI
Konfigurovať pre SPI
Konfigurovať pre SPI
Konfigurovať pre SPI
Konfigurovať pre SPI
Konfigurovať pre SPI
Konfigurovať pre SPI
Konfigurovať pre SPI

Pretože na ovládanie RGB potrebujeme používať SPI, musíme najskôr povoliť rozhranie SPI, ktoré je v predvolenom nastavení zakázané. Na povolenie rozhrania SPI môžete postupovať podľa nasledujúcich krokov:

Najprv môžete použiť GUI pre stolné počítače tak, že prejdete na Pi start MenupreferencesRaspberry Pi Configuration, ako je to znázornené na prvom obrázku.

Za druhé, prejdite na „Rozhrania“, povoľte SPI a kliknite na tlačidlo OK (druhý obrázok).

Nakoniec reštartujte Pi, aby sa zmeny prejavili. Kliknite na ponuku Štart PiPreferencesShutdown. Pretože stačí reštartovať, kliknite na tlačidlo Reštartovať.

Krok 4: Kód

Začneme napísaním nášho kódu pythonu, najskôr začneme importom niekoľkých knižníc, ktoré budeme potrebovať na integráciu nášho kódu do sveta Minecraft. Potom importujeme knižnicu času, konkrétne funkciu nazývanú spánok. Funkcia spánku nám umožní počkať určitý interval pred vykonaním funkcie. V neposlednom rade importujeme knižnicu RPi. GPIO, ktorá nám umožňuje ovládať GPIO na Raspberry Pi.

z mcpi.minecraft import Minecraft z času import spánok import RPi. GPIO ako GPIO

A to je všetko, import knižníc sme urobili, teraz je čas ich použiť! Prvá vec, ktorú musíte najskôr urobiť, je použiť knižnicu Minecraft, chceme prepojiť náš pythonový skript so svetom Minecraft. Môžeme to urobiť vyvolaním funkcie init () knižnice MCPI a potom nastavením režimu GPIO a vypnutím varovania.

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

Teraz definujeme niektoré farby dúhy v hexadecimálnom formáte, aby sme mohli meniť farby RGB.

BIELA = 0xFFFFFF ČERVENÁ = 0xFF0000 ORANŽOVÁ = 0xFF7F00 ŽLTÁ = 0xFFFF00 ZELENÁ = 0x00FF00 CYAN = 0x00FFFF MODRÁ = 0x0000FF PURPLE = 0xFF00FF MAGENTA = 0xFF0090

Ďalej musíme definovať niektoré premenné na zaznamenanie farby bloku vlny, ktorý je už definovaný v zozname blokov Minecraft.

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

Naše ID vlneného bloku v Minecrafte je 35. Teraz musíme nakonfigurovať kolík pre RGB LED a nastaviť ho.

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)

Potom nastavte PWM pre každý kolík a všimnite si, že rozsah hodnoty PWM je 0-100. Tu najskôr nastavíme farbu LED RGB na bielu (100, 100, 100).

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

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

Nasleduje vytvorenie dvoch funkcií, ktoré je možné použiť na dekódovanie farby a osvetlenie RGB diódy! Všimnite si toho, že funkcia map2hundred () má mapovať hodnoty od 255 do 100, ako sme už uviedli, hodnota PWM by mala byť 0-100.

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

defin 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)

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

Dobre! Je čas spustiť náš hlavný program, počkajte, mala by byť definovaná ďalšia premenná na zaznamenanie farebného kódu bloku vlny pred hlavným programom:

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.setBloky (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.setBloky (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) s True: x, y, z = mc.player.getPos () # pozícia hráča (x, y, z) blok = mc.getBlockWithData (x, y-1, z) # ID bloku #print (blok) ak block.id == VLNA a posledná_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_ ŽLTÉ: print ("Yellow!") Set_color (YELLOW) if 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 (" 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 ()

Ako je ukázaný vyššie, najskôr pomocou niektorých príkazov vygenerujeme niekoľko farebných vlnených blokov, potom musíme zistiť pozíciu hráča, aby sme mohli získať ID bloku a jeho farebný kód. Po získaní informácií o bloku použijeme príkaz na určenie, či je blok pod prehrávačom vlnený blok a či má kód farby. Ak áno, posúďte, akú farbu má vlnený blok, a zavolajte funkciu set_color () na zmenu farby RGB diódy rovnako ako vlnený blok.

Okrem toho pridávame príkaz try/okrem, aby sme zachytili výnimku z prerušenia používateľa, keď chceme program ukončiť, aby sa vyčistil výstup pinov GPIO.

V prílohe je kompletný kód.

Dobrá práca, toľko príslušenstva a príliš komplikované, že? Nebojte sa, pozrime sa na druhú metódu na dosiahnutie projektu, vďaka ktorej sa budete cítiť flexibilnejšie a pohodlnejšie, a to pomocou nášho CrowPi2!

Krok 5: Výsledok

Image
Image

Otvorte hru a spustite skript, výsledok uvidíte vo videu vyššie

Potom použijeme CrowPi2 na stavbu interaktívneho mosta Rainbow

Krok 6: Použitie materiálov CrowPi2

● 1 x CrowPi2

Krok 7: Použitie schémy pripojenia CrowPi2-

Netreba. Na CrowPi2 je veľa užitočných senzorov a komponentov (viac ako 20), to všetko v jednom prenosnom počítači Raspberry Pi a vzdelávacej platforme STEM, ktorá nám umožňuje vykonávať viac projektov s ľahkosťou a bez potu! V tomto prípade použijeme atraktívny a farebný modul na CrowPi2, čo je maticový modul 8x8 RGB, ktorý nám umožňuje ovládať 64 LED diód súčasne!

Krok 8: Použitie CrowPi2- Konfigurácia pre SPI

Netreba. CrowPi2 je dodávaný so vstavaným obrázkom so vzdelávacím systémom! Všetko je pripravené, čo znamená, že môžete priamo programovať a učiť sa. Navyše, s naším CrowPi2 je to jednoduché a už integrované do dosky ako STEAM platforma pripravená na použitie.

Krok 9: Použitie kódu CrowPi2- kód

Teraz je čas začať náš program! Najprv importujte niekoľko knižníc, ako je napríklad knižnica MCPI, čo je knižnica Minecraft Pi Python, ktorá nám umožňuje použiť veľmi jednoduché API na integráciu so svetom Minecraft; knižnica času, ktorá nám umožňuje funkciu spánku čakať určitý interval pred vykonaním funkcie; Knižnica RPi. GPIO, ktorá nám umožňuje ovládať piny Raspberry Pi GPIO.

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

Nakoniec importujeme knižnicu s názvom rpi_ws281x, čo je knižnica RGB Matrix, v knižnici je k dispozícii niekoľko funkcií, ktoré použijeme, napríklad PixelStrip na nastavenie objektu pásu LED a Color na konfiguráciu objektu RGB, ktorý sa má rozsvietiť. naše RGB LED diódy

z rpi_ws281x importujte PixelStrip, Color

A to je všetko, import knižníc sme urobili, teraz je čas ich použiť! Prvá vec je použiť knižnicu Minecraft, chceme prepojiť náš pythonový skript so svetom Minecraft, pričom to môžeme urobiť vyvolaním funkcie init knižnice MCPI:

mc = Minecraft.create ()

Teraz, kedykoľvek chceme vykonávať operácie vo svete minecratov, môžeme použiť objekt mc.

Ďalším krokom bude definovanie triedy matíc RGB LED, ktoré budeme používať na ovládanie našich RGB LED diód, triedu inicializujeme so základnou konfiguráciou, ako je počet LED, kolíkov, jas atď.

vytvoríme funkciu s názvom clean, ktorá „vyčistí“menej s konkrétnou danou farbou, a tiež funkciu s názvom run, ktorá inicializuje skutočný objekt RGB LED pri prvom použití.

trieda RGB_Matrix:

def _init _ (self):

# Konfigurácia LED pásika:

self. LED_COUNT = 64 # Počet pixelov LED.

self. LED_PIN = 12 # GPIO pin pripojený k pixelom (18 používa PWM!).

self. LED_FREQ_HZ = 800000 # Frekvencia signálu LED v hertzoch (zvyčajne 800 kHz)

self. LED_DMA = 10 # kanál DMA na použitie na generovanie signálu (skúste 10)

self. LED_BRIGHTNESS = 10 # Nastavené na 0 pre najtmavšie a 255 pre najjasnejšie

self. LED_INVERT = False # True, ak chcete invertovať signál

self. LED_CHANNEL = 0 # nastavený na '1' pre GPIO 13, 19, 41, 45 alebo 53

# Definujte funkcie, ktoré rôznymi spôsobmi animujú LED diódy. def clean (vlastné, pásik, farba):

# vymažte všetky diódy LED naraz

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

strip.setPixelColor (i, farba)

strip.show ()

def run (vlastné):

# Vytvorte objekt NeoPixel s príslušnou konfiguráciou.

strip = PixelStrip (self. LED_COUNT, self. LED_PIN, self. LED_FREQ_HZ, self. LED_DMA, self. LED_INVERT, self. LED_BRIGHTNESS, self. LED_CHANNEL)

skús:

spätný pás

okrem prerušenia klávesnice:

# Pred prerušením vyčistite matricu LED

self.clean (pásik)

Potom, čo sme skončili s vyššie uvedeným, je čas vyvolať tieto triedy a vytvoriť objekty, ktoré môžeme použiť v našom kóde, najskôr vytvoríme maticový objekt RGB LED, ktorý môžeme použiť pomocou triedy, ktorú sme vytvorili predtým:

matrixObject = RGB_Matrix ()

Teraz použime tento objekt na vytvorenie aktívneho objektu pásika LED, ktorý budeme používať na ovládanie našich jednotlivých diód LED na matici RGB:

strip = matrixObject.run ()

Nakoniec, aby sme tento pás aktivovali, budeme musieť spustiť jednu poslednú funkciu:

strip.begin ()

Rozhranie Minecraft API obsahuje veľa blokov, každý blok Minecraftu má svoje vlastné ID. V našom prípade sme vzali určité množstvo blokov Minecraftu a pokúsili sme sa uhádnuť, ktorá farba je pre nich najvhodnejšia.

RGB znamená červenú, zelenú a modrú, takže pre každú z nich budeme potrebovať 3 rôzne hodnoty od 0 do 255, farby môžu byť HEX alebo RGB, v našom prípade používame formát RGB.

Vo svete Minecraft Pi existujú ID bežných blokov a ID špeciálnych blokov vlny, špeciálna vlna je dodávaná pod identifikačným číslom 35, ale s podčíslami od mnohých rôznych ID … Tento problém vyriešime vytvorením 2 samostatných zoznamov, jedného pre normálne bloky. a jeden zoznam špeciálnych blokov vlny:

Prvý zoznam je pre normálne bloky, napríklad 0 predstavuje vzdušný blok, nastavíme mu farbu 0, 0, 0, ktorá je prázdna alebo úplná biela, keď hráč v hre skočí alebo letí, RGB sa vypne, 1 je iný blok s farbami RGB 128, 128, 128 a tak ďalej …

#Dúhové farby

rainbow_colors = {

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

}

Pre vlnené bloky robíme to isté, ale je dôležité si uvedomiť, že všetky bloky majú ID 35, v tomto zozname definujeme podtypy bloku, ktorý je vlneným blokom. Rôzne podtypy vlny majú rôzne farby, ale všetky sú vlnené bloky.

wool_colors = {

"6": farba (255, 105, 180), „5“: farba (0, 255, 0), "4": farba (255, 255, 0), "14": farba (255, 0, 0), "2": farba (255, 0, 255)

}

Teraz, keď dokončujeme definovanie nášho hlavného programu, tried a funkcií, je čas integrovať sa s naším integrovaným snímačom CrowPi2 RGB LED.

Hlavný program prevezme parametre, ktoré sme definovali predtým, a ovplyvní hardvér.

Použijeme CrowPi2 RGB LED na ich rozsvietenie na základe krokov, ktoré robíme vo vnútri Minecraft Pi v každom bloku, začnime!

Prvá vec, ktorú urobíme, je vygenerovať niekoľko vlnených blokov pomocou príkazov a vytvoriť krátku slučku, aby bol program spustený tak dlho, ako hru hráme.

Potrebujeme získať nejaké údaje od hráča, najskôr použijeme príkaz player.getPos () na získanie pozície hráča a potom pomocou getBlockWithData () dostaneme blok, na ktorom aktuálne stojíme (súradnica y je -1, ktorá znamená pod hráčom)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

kým je pravda:

x, y, z = mc.player.getPos () # pozícia hráča (x, y, z)

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

print (blockType)

Potom skontrolujeme, či je blok vlnovým blokom, identifikačným číslom bloku 35, ak áno, budeme odkazovať na wool_colors s farbou bloku na základe ID slovníka a podľa toho rozsvietime správnu farbu.

if blockType == 35:

# vlastných vlnených farieb

matrixObject.clean (pásik, wool_colors [str (údaje)])

Ak to nie je vlnený blok, skontrolujeme, či sa blok momentálne nachádza v slovníku rainbow_colors, aby sme sa vyhli výnimkám, ak áno, budeme pokračovať odfarbením a zmenou RGB.

if str (blockType) v rainbow_colors:

tlač (rainbow_colors [str (blockType)])

matrixObject.clean (strip, rainbow_colors [str (blockType)])

spánok (0,5)

Vždy sa môžete pokúsiť pridať ďalšie farby do súboru rainbow_color, aby ste pridali viac farieb a väčšiu podporu blokov!

Perfektné! Projektovanie pomocou príslušenstva je komplikované, ale s integrovaným obvodom CrowPi2 je všetko oveľa jednoduchšie! Na CrowPi2 je navyše viac ako 20 senzorov a komponentov, ktoré vám umožňujú dosiahnuť ideálne projekty a dokonca aj projekty AI!

Nasleduje kompletný kód:

Krok 10: Použitie CrowPi2-výsledok

Otvorte hru a spustite skript, výsledok uvidíte vo vyššie uvedenom videu:

Krok 11: Použitie CrowPi2- Ďalej

Teraz sme dokončili náš farebný projekt v hre Minecraft s CrowPi2. Prečo neskúsiť použiť na hre CrowPi2 ďalšie senzory a komponenty, ako napríklad joystick na ovládanie pohybu hráča, RFID na generovanie blokov na základe rôznych kariet NFC a podobne. Bavte sa so svojou hrou na CrowPi2 a dúfajte, že to zvládnete ďalšie neuveriteľné projekty s CrowPi2!

Teraz je CrowPi2 na Kickstarteri, môžete si tiež užiť atraktívnu cenu.

Pripojte odkaz na stránku Kickstarter CrowPi2

Odporúča: