Sadržaj:

Izgradite Rainbow interaktivni most koristeći Minecraft Raspberry Pi Edition: 11 koraka
Izgradite Rainbow interaktivni most koristeći Minecraft Raspberry Pi Edition: 11 koraka

Video: Izgradite Rainbow interaktivni most koristeći Minecraft Raspberry Pi Edition: 11 koraka

Video: Izgradite Rainbow interaktivni most koristeći Minecraft Raspberry Pi Edition: 11 koraka
Video: Драка с собакой-партнером🐕 - They Are Coming Zombie Shooting & Defense 🎮📱 🇷🇺 2024, Studeni
Anonim
Image
Image

Jučer sam vidio svog 8-godišnjeg nećaka kako igra Minecraft s Raspberry Pi-jem koji sam mu dao prije, a onda sam dobio ideju da koristi kod za izradu prilagođenog i uzbudljivog projekta LED blokova Minecraft-pi. Minecraft Pi odličan je način za početak rada s mikroračunalom Raspberry Pi, Minecraft Pi je posebna prilagođena verzija Minecrafta koja nam omogućuje interakciju s igrom koristeći smrtonosni jednostavan Python API za prilagodbu doživljaja igre i rekvizita!

Postoji mnogo projekata koje možete raditi u svijetu Minecrafta s Raspberry Pi -em, ali posebno za nas to nije bilo dovoljno, tražili smo nešto izazovno i trepćući u isto vrijeme. U ovom projektu koračat ćemo na više Minecraft blokova, otkriti ID bloka i otkriti boju određenog bloka na koji smo stupili, na temelju boje koju ćemo upaliti naš RGB LED kako bismo stvorili igru interaktivnih koraka!

Koristit ću dvije metode za postizanje učinka, prva je upotreba dodatne opreme, koja može biti vrlo kaotična …; drugi koristi CrowPi2 (računalo za učenje s mnogo senzora, trenutno financirano mnoštvom sredstava na Kickstarteru: CrowPi2)

počnimo i vidimo kako arhivirati tako nevjerojatan projekt!

Pribor

CrowPi2 sada je uživo na kickstarteru, projektom CrowPi2 prikupljeno je gotovo 250 tisuća dolara.

Pritisnite vezu:

Metoda1 Korištenje pribora

Korak 1: Materijali

● 1 x Raspberry Pi 4 model B

● 1 x TF kartica sa slikom

● 1 x napajanje Raspberry Pi

● 1 x 10,1 inčni monitor

● 1 x Napajanje za monitor

● 1 x HDMI kabel

● 1 x Tipkovnica i miš

● 1 x RGB LED (zajednička katoda)

● 4 x kratkospojnici (ženski na ženski)

Korak 2: Dijagram povezivanja

Dijagram povezivanja
Dijagram povezivanja

U RGB LED LED boji postoje zapravo tri svjetla, a to su crveno svjetlo, zeleno svjetlo i plavo svjetlo. Kontrolirajte ova tri svjetla da emitiraju svjetlost različitog intenziteta, a kad se pomiješaju, mogu emitirati svjetlost različitih boja. Četiri pina na LED svjetlu su GND, R, G i B. RGB LED koji sam koristio uobičajena je katoda, a veza s Raspberry Pi je sljedeća:

RaspberryPi 4B (u nazivu funkcije) RGB LED

GPIO0 1 CRVENO

GPIO1 3 ZELENO

GPIO2 4 PLAVA

GND 2 GND

Druga slika je hardverska veza

Korak 3: Konfigurirajte za SPI

Konfigurirajte za SPI
Konfigurirajte za SPI
Konfigurirajte za SPI
Konfigurirajte za SPI
Konfigurirajte za SPI
Konfigurirajte za SPI
Konfigurirajte za SPI
Konfigurirajte za SPI

Budući da za kontrolu RGB -a moramo koristiti SPI, prvo moramo omogućiti SPI sučelje, koje je prema zadanim postavkama onemogućeno. Za omogućavanje SPI sučelja možete slijediti korake u nastavku:

Najprije možete koristiti grafički sučelje radne površine tako da odete na Pi start MenupreferencesRaspberry Pi Configuration, kako je prikazano na prvoj slici.

Drugo, idite na "Sučelja" i omogućite SPI i kliknite U redu (druga slika).

Na kraju, ponovno pokrenite Pi kako biste bili sigurni da će promjene stupiti na snagu. Kliknite na Pi Start MenuPreferencesShutdown. Budući da se samo moramo ponovno pokrenuti, kliknite gumb Ponovo pokreni.

Korak 4: Kôd

Započet ćemo pisanjem našeg python koda, prvo ćemo početi uvozom nekoliko biblioteka koje će nam trebati za integraciju našeg koda sa svijetom Minecraft. Zatim ćemo uvesti knjižnicu vremena, točnije funkciju koja se zove spavanje. Funkcija mirovanja omogućit će nam da pričekamo određeni interval prije izvođenja funkcije. Na kraju, ali ne i najmanje važno, uvozimo biblioteku RPi. GPIO koja nam omogućuje kontrolu GPIO -a na Raspberry Pi.

from mcpi.minecraft import Minecraft from time import import import RPi. GPIO kao GPIO

I to je to, završili smo s uvozom knjižnica, sada je vrijeme da ih iskoristimo! Prvo, prvo je korištenje Minecraft knjižnice, želimo povezati našu python skriptu sa svijetom Minecrafta, to možemo učiniti pozivanjem funkcije init () MCPI knjižnice, a zatim postaviti način GPIO -a i onemogućiti upozorenje.

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

Sada definiramo neke dugine boje u heksadecimalnom obliku tako da možemo promijeniti RGB boje.

BIJELO = 0xFFFFFF CRVENO = 0xFF0000 NARANČASTO = 0xFF7F00 ŽUTO = 0xFFFF00 ZELENO = 0x00FF00 CYAN = 0x00FFFF PLAVO = 0x0000FF LJUBAVO = 0xFF00FF MAGENTA = 0xFF0090

Zatim moramo definirati neke varijable za snimanje boje vunenog bloka, koja je već definirana na popisu blokova 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š ID vunenog bloka u Minecraftu je 35. Sada moramo konfigurirati pin za RGB LED diode i postaviti ih za njih.

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)

Zatim postavite PWM za svaki pin, imajte na umu da je raspon vrijednosti PWM 0-100. Ovdje smo prvo postavili boju RGB -a do bijele (100, 100, 100).

crvena = GPIO. PWM (red_pin, 100)

zelena = GPIO. PWM (zelena_kosica, 100) plava = GPIO. PWM (plava_kocka, 100) crvena.pokreni (100) zelena.počni (100) plava.počni (100)

Slijedi stvaranje dvije funkcije koje se mogu koristiti za dekodiranje boje i osvjetljavanje RGB svjetla prema gore! Imajte na umu da funkcija map2hundred () služi za mapiranje vrijednosti od 255 do 100, kao što smo već spomenuli, PWM vrijednost bi trebala biti 0-100.

def map2hundred (vrijednost): return int (vrijednost * 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

# Vrijednosti karte red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

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

Dobro napravljeno! Vrijeme je za pokretanje našeg glavnog programa, pričekajte, treba definirati drugu varijablu za snimanje koda boje vunenog bloka prije glavnog programa:

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.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) dok je True: x, y, z = mc.player.getPos () # pozicija igrača (x, y, z) block = mc.getBlockWithData (x, y-1, z) # ID bloka # ispis (blok) ako je block.id == WOOL i 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 block.data == W_ ŽUTO: ispis ("Žuto!") Set_color (YELLOW) if block.data == W_GREEN: print ("Green!") Set_color (ZELENO) ako block.data == W_CYAN: print ("Cyan!") Set_color (CYAN) if block.data == W_BLUE: print ("Plavo!") 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) osim KeyboardInterrupt: prolaz GPIO.cleanup ()

Kako je glavni program prikazan gore, prvo moramo upotrijebiti neke naredbe za generiranje šarenih vunenih blokova, a zatim moramo saznati položaj igrača kako bismo mogli dobiti ID blokova i njegov kod boje. Nakon što dobijemo podatke o bloku, upotrijebit ćemo izjavu da utvrdimo je li blok ispod playera vuneni blok i ima li kod boje. Ako je odgovor da, procijenite koje je boje vuneni blok i nazovite funkciju set_color () da promijenite boju RGB LED diode kao i vuneni blok.

Osim toga, dodajemo izraz try/except za hvatanje iznimke korisničkog prekida kada želimo napustiti program radi brisanja izlaza GPIO pinova.

U privitku je cijeli kod.

Bravo, toliko pribora i previše komplicirano, zar ne? Ne brinite, pogledajmo drugu metodu za postizanje projekta, zbog koje ćete se osjećati fleksibilnije i prikladnije, a to je korištenje našeg CrowPi2!

Korak 5: Rezultat

Image
Image

Otvorite igru i pokrenite skriptu, rezultat ćete vidjeti u gornjem videu

Zatim ćemo koristiti CrowPi2 za izgradnju Rainbow interaktivnog mosta

Korak 6: Korištenje CrowPi2-materijala

● 1 x CrowPi2

Korak 7: Korištenje CrowPi2- dijagrama povezivanja

Nema potrebe. Na CrowPi2 postoji mnogo korisnih senzora i komponenti (više od 20), sve je to u jednom malinu pi prijenosnom računalu i STEM obrazovnoj platformi koja nam omogućuje da s lakoćom i bez znoja radimo više projekata! U ovom slučaju, koristit ćemo atraktivan i šaren modul na CrowPi2, koji je 8x8 RGB matrični modul, koji nam omogućuje kontrolu 64 RGB LED -a istovremeno!

Korak 8: Korištenje CrowPi2- Konfiguracija za SPI

Nema potrebe. CrowPi2 dolazi s ugrađenom slikom sa sustavom za učenje! Sve je pripremljeno, što znači da možete izravno programirati i učiti. Osim toga, s našim CrowPi2 jednostavno je i već integrirano u ploču kao STEAM platforma spremna za rad.

Korak 9: Korištenje CrowPi2- koda

Vrijeme je za početak našeg programa! Prvo, uvezite nekoliko knjižnica, poput MCPI knjižnice koja je knjižnica Minecraft Pi Python koja nam omogućuje korištenje vrlo jednostavnog API -ja za integraciju sa svijetom Minecrafta; vremenska biblioteka koja nam omogućuje funkciju mirovanja da čekamo određeni interval prije obavljanja funkcije; Knjižnica RPi. GPIO koja nam omogućuje kontrolu Raspberry Pi GPIO pinova.

from mcpi.minecraft import Minecraft from time import import import RPi. GPIO kao GPIO

Na kraju ćemo uvesti knjižnicu pod nazivom rpi_ws281x koja je biblioteka RGB Matrix, unutar biblioteke postoji više funkcija koje ćemo koristiti, poput PixelStrip za postavljanje objekta LED trake i Color za konfiguriranje RGB objekta u boji za osvjetljavanje naše RGB LED diode

iz rpi_ws281x uvesti PixelStrip, Boja

I to je to, završili smo s uvozom knjižnica, sada je vrijeme da ih iskoristimo! Isto tako, prva stvar je korištenje knjižnice Minecraft, želimo povezati našu python skriptu sa svijetom Minecrafta, a to možemo učiniti pozivanjem funkcije init biblioteke MCPI:

mc = Minecraft.create ()

Sada svaki put kad želimo izvesti operacije na svijetu minekrata, možemo koristiti objekt mc.

Sljedeći korak bit će definiranje klase RGB LED matrice koju ćemo koristiti za upravljanje našim RGB LED diodama, klasu inicijaliziramo osnovnom konfiguracijom kao što je broj LED dioda, pinovi, svjetlina itd …

stvaramo funkciju koja se zove clean koja će manje "čistiti" s određenom bojom, a također i funkciju koja se zove run koja će inicijalizirati stvarni RGB LED objekt pri prvom korištenju.

klasa RGB_Matrix:

def _init _ (samo):

# Konfiguracija LED trake:

self. LED_COUNT = 64 # Broj LED piksela.

self. LED_PIN = 12 # GPIO pin spojen na piksele (18 koristi PWM!).

self. LED_FREQ_HZ = 800000 # Frekvencija LED signala u hercima (obično 800 kHz)

self. LED_DMA = 10 # DMA kanal za generiranje signala (pokušajte 10)

self. LED_BRIGHTNESS = 10 # Postavite na 0 za najtamnije i 255 za najsvjetlije

self. LED_INVERT = Netačno # Tačno za invertiranje signala

self. LED_CHANNEL = 0 # postavljeno na '1' za GPIO -ove 13, 19, 41, 45 ili 53

# Definirajte funkcije koje animiraju LED diode na različite načine. def clean (self, strip, color):

# obrišite sve LED diode odjednom

za i u rasponu (strip.numPixels ()):

strip.setPixelColor (i, boja)

strip.show ()

def run (self):

# Napravite NeoPixel objekt odgovarajuće konfiguracije.

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

probati:

povratna traka

osim KeyboardInterrupt:

# očistite LED matricu prije prekida

self.clean (traka)

Nakon što smo završili s gore navedenim, vrijeme je da pozovemo te klase i stvorimo objekte koje možemo koristiti u svom kodu, najprije izradimo objekt RGB LED matrice koji možemo koristiti pomoću klase koju smo ranije stvorili:

matrixObject = RGB_Matrix ()

Sada upotrijebimo ovaj objekt za stvaranje aktivnog objekta LED trake koji ćemo koristiti za kontrolu naših pojedinačnih LED dioda na RGB matrici:

strip = matrixObject.run ()

Konačno, da bismo aktivirali ovu traku, morat ćemo pokrenuti posljednju funkciju:

strip.begin ()

Minecraft API uključuje mnogo blokova, svaki Minecraft blok ima svoj ID. U našem primjeru uzeli smo određenu količinu Minecraft blokova i pokušali pogoditi koja je boja za njih najprikladnija.

RGB označava crvenu, zelenu i plavu boju pa će nam trebati 3 različite vrijednosti u rasponu od 0 do 255 za svaku, boje mogu biti HEX ili RGB format, za naš primjer koristimo RGB format.

U svijetu Minecraft Pi postoje normalni ID -ovi blokova i posebni ID -ovi vunenih blokova, posebna vuna dolazi pod ID brojem 35, ali s podbrojevima u rasponu od mnogo različitih ID -ova … Riješit ćemo ovaj problem stvaranjem 2 odvojena popisa, jedan za normalne blokove i jedan popis za posebne vunene blokove:

Prvi popis je za normalne blokove, na primjer 0 predstavlja Zračni blok, mi ćemo mu postaviti boju 0, 0, 0 koja je prazna ili potpuno bijela, kada će igrač skočiti ili letjeti u igri, RGB će se isključiti, 1 je drugačiji blok s RGB bojom 128, 128, 128 i tako dalje …

#Dugin Boje

dugine_boje = {

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

}

Za vunene blokove radimo isto, ali važno je zapamtiti da svi blokovi imaju ID 35, na ovom popisu definiramo podvrste bloka koji je vuneni blok. Različite podvrste vune imaju različite boje, ali sve su to vuneni blokovi.

boje vune = {

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

}

Kad smo završili s definiranjem našeg glavnog programa, klasa i funkcija, vrijeme je za integraciju s našim CrowPi2 RGB LED senzorom na ploči.

Glavni će program uzeti parametre koje smo ranije definirali i utjecati na hardver.

Koristit ćemo CrowPi2 RGB LED kako bismo ih osvijetlili na temelju koraka koje radimo u Minecraft Pi -u u svakom bloku, počnimo!

Prvo što ćemo učiniti je generirati neke vunene blokove s naredbama i stvoriti while petlju, kako bi program radio sve dok igramo igru.

Morat ćemo dobiti neke podatke od igrača, prvo upotrijebimo naredbu player.getPos () da dobijemo poziciju igrača, a zatim koristimo getBlockWithData () da dobijemo blok na kojem trenutno stojimo (koordinata y je -1 koja znači ispod igrača)

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)

dok je istina:

x, y, z = mc.player.getPos () # pozicija igrača (x, y, z)

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

ispis (blockType)

Zatim ćemo provjeriti je li blok vuneni blok, identifikacijski broj bloka 35, ako jest, odnosit ćemo se na vunene boje s bojom bloka na temelju ID -a rječnika i prema tome osvijetliti odgovarajuću boju.

ako je blockType == 35:

# prilagođene boje vune

matrixObject.clean (traka, boje vune [str (podaci)])

Ako nije vuneni blok, provjerit ćemo je li blok trenutno unutar rječnika rainbow_colors kako bismo izbjegli iznimke, ako jest nastavit ćemo uzimanjem boje i promjenom RGB -a.

if str (blockType) u rainbow_colors:

ispis (dugine_boje [str (blockType)])

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

spavanje (0,5)

Uvijek možete pokušati dodati više blokova u rainbow_color kako biste dodali više boja i podršku blokovima!

Savršen! Raditi projekte pomoću dodatne opreme je komplicirano, ali pomoću integriranog kruga CrowPi2 stvari postaju mnogo lakše! Štoviše, na CrowPi2 postoji više od 20 senzora i komponenti, što vam omogućuje postizanje vaših idealnih projekata, pa čak i AI projekata!

Ispod je cijeli kod:

Korak 10: Korištenje CrowPi2-rezultat

Otvorite igru i pokrenite skriptu, rezultat ćete vidjeti u gornjem videu:

Korak 11: Korištenje CrowPi2- Idite dalje

Sada smo završili naš šareni projekt u igri Minecraft s CrowPi2. Zašto ne biste pokušali koristiti druge senzore i komponente na CrowPi2 za igru s igrom, poput joysticka za kontrolu kretanja igrača, RFID za generiranje blokova na temelju različitih NFC kartica itd. Zabavite se s igrom na CrowPi2 i nadam se da možete još nevjerojatnijih projekata s CrowPi2!

CrowPi2 je sada na Kickstarteru, također biste mogli uživati u atraktivnoj cijeni.

Priložite vezu stranice Kickstarter CrowPi2

Preporučeni: