Kazalo:

Zgradite Rainbow interaktivni most z uporabo Minecraft Raspberry Pi Edition: 11 korakov
Zgradite Rainbow interaktivni most z uporabo Minecraft Raspberry Pi Edition: 11 korakov

Video: Zgradite Rainbow interaktivni most z uporabo Minecraft Raspberry Pi Edition: 11 korakov

Video: Zgradite Rainbow interaktivni most z uporabo Minecraft Raspberry Pi Edition: 11 korakov
Video: «Интернет вещей», Джеймс Уиттакер из Microsoft 2024, November
Anonim
Image
Image

Včeraj sem videl svojega 8-letnega nečaka, ki je igral Minecraft z Raspberry Pi, ki sem mu ga prej dal, nato pa sem dobil idejo, da z uporabo kode naredim prilagojen in razburljiv projekt LED blokov Minecraft-pi. Minecraft Pi je odličen način, da začnete z mikroračunalnikom Raspberry Pi, Minecraft Pi je posebna različica Minecrafta po meri, ki nam omogoča interakcijo z igro z uporabo smrtonosnega preprostega Python API -ja za prilagajanje igralne izkušnje in rekvizitov!

V svetu Minecraft lahko z Raspberry Pi naredite veliko projektov, vendar posebej za nas to ni bilo dovolj, iskali smo nekaj zahtevnega in hkrati utripajočega. V tem projektu bomo stopili na več blokov Minecraft, zaznali ID bloka in zaznali barvo določenega bloka, na katerega smo stopili, glede na barvo, ki jo bomo prižgali z RGB LED, da bomo ustvarili interaktivno igro s koraki!

Za dosego učinka bom uporabil dve metodi, prva je uporaba dodatkov, ki so lahko zelo kaotični; drugi je uporaba CrowPi2 (učni računalnik s številnimi senzorji, trenutno množično financiran na Kickstarterju: CrowPi2)

začnimo in poglejmo, kako arhivirati tako neverjeten projekt!

Zaloge

CrowPi2 je zdaj v živo na kickstarterju, projekt CrowPi2 je zbral skoraj 250.000 USD.

Pojdite na povezavo:

Metoda 1 Uporaba dodatne opreme

1. korak: Materiali

● 1 x Raspberry Pi 4 model B

● 1 x kartica TF s sliko

● 1 x napajalnik Raspberry Pi

● 1 x 10,1 -palčni monitor

● 1 x napajalnik za monitor

● 1 x kabel HDMI

● 1 x tipkovnica in miška

● 1 x RGB LED (skupna katoda)

● 4 x skakalci (ženski na ženski)

2. korak: diagram povezave

Shema povezave
Shema povezave

V barvni LED RGB so dejansko tri luči, in sicer rdeča, zelena in modra svetloba. Nadzorujte te tri luči, da oddajajo svetlobo različnih jakosti, pri mešanju pa lahko oddajajo svetlobo različnih barv. Štirje zatiči LED luči so GND, R, G in B. RGB LED, ki sem ga uporabil, je običajna katoda, povezava z Raspberry Pi pa je naslednja:

RaspberryPi 4B (v imenu funkcije) RGB LED

GPIO0 1 RDEČA

GPIO1 3 ZELENO

GPIO2 4 MODRA

GND 2 GND

Druga slika je povezava strojne opreme

3. korak: 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

Ker moramo za nadzor RGB uporabiti SPI, moramo najprej omogočiti vmesnik SPI, ki je privzeto onemogočen. Če želite omogočiti vmesnik SPI, sledite spodnjim korakom:

Najprej lahko uporabite namizni grafični vmesnik tako, da odprete meni Pi start MenupreferencesRaspberry Pi Configuration, kot je prikazano na prvi sliki.

Drugič, pojdite na »Vmesniki« in omogočite SPI ter kliknite V redu (druga slika).

Nazadnje znova zaženite Pi, da zagotovite, da bodo spremembe začele veljati. Kliknite na Pi Start MenuPreferencesShutdown. Ker moramo samo znova zagnati, kliknite gumb Ponovni zagon.

4. korak: Koda

Začeli bomo s pisanjem naše kode python, najprej bomo uvozili nekaj knjižnic, ki jih potrebujemo za integracijo naše kode v svet Minecraft. Nato bomo uvozili časovno knjižnico, natančneje funkcijo, imenovano spanje. Funkcija spanja nam bo omogočila, da pred izvedbo funkcije počakamo na določen interval. Nenazadnje uvozimo knjižnico RPi. GPIO, ki nam omogoča nadzor GPIO na Raspberry Pi.

od mcpi.minecraft uvoz Minecraft od časa uvoz uvoz spanja RPi. GPIO kot GPIO

In to je to, z uvozom knjižnic smo končali, zdaj je čas, da jih uporabimo! Najprej je uporaba knjižnice Minecraft, želimo povezati naš skript python s svetom Minecraft, to lahko storimo tako, da prikličemo funkcijo init () knjižnice MCPI, nato pa nastavimo način GPIO in onemogočimo opozorilo.

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

Zdaj definiramo nekatere mavrične barve v šestnajstiški številki, tako da lahko spremenimo barve RGB.

BELA = 0xFFFFFF RDEČA = 0xFF0000 ORANŽNA = 0xFF7F00 ŽUTA = 0xFFFF00 ZELENA = 0x00FF00 CYAN = 0x00FFFF MODRA = 0x0000FF LIČNA = 0xFF00FF MAGENTA = 0xFF0090

Nato moramo določiti nekatere spremenljivke za beleženje barve volnenega bloka, ki je že definirana na seznamu 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š ID volnenega bloka v Minecraftu je 35. Zdaj moramo konfigurirati pin za RGB LED in ga nastaviti.

red_pin = 17 green_pin = 18 blue_pin = 27

GPIO.setup (red_pin, GPIO. OUT, začetno = 1) GPIO.setup (green_pin, GPIO. OUT, začetno = 1) GPIO.setup (blue_pin, GPIO. OUT, začetno = 1)

Nato nastavite PWM za vsak pin, upoštevajte, da je obseg vrednosti PWM 0-100. Tukaj smo najprej nastavili barvo RGB, ki je bila bela (100, 100, 100).

rdeča = GPIO. PWM (red_pin, 100)

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

Sledi ustvarjanje dveh funkcij, ki jih lahko uporabite za dekodiranje barv in osvetlitev LED RGB gor! Upoštevajte, da funkcija map2hundred () preslika vrednosti od 255 do 100, kot smo že omenili, mora biti vrednost PWM 0-100.

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

# Vrednosti zemljevida red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

# Osvetliti! rdeča. ChangeDutyCycle (rdeča_vrednost) zelena. SpremeniDutyCycle (zelena_vrednost) modra.

Dobro opravljeno! Čas je, da zaženemo naš glavni program, počakajte, določiti je treba drugo spremenljivko, ki bo pred glavnim programom zabeležila barvno kodo volnenega bloka:

last_data = 0 poskusite: 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), medtem ko je True: x, y, z = mc.player.getPos () # položaj igralca (x, y, z) block = mc.getBlockWithData (x, y-1, z) # ID bloka # print (block) if block.id == WOOL in 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_ RUMENO: 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) če 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) razen KeyboardInterrupt: pass GPIO.cleanup ()

Ker je glavni program prikazan zgoraj, najprej uporabite nekaj ukazov za ustvarjanje barvitih volnenih blokov, nato pa moramo ugotoviti položaj igralca, da lahko dobimo ID blokov in njihovo barvno kodo. Ko dobimo podatke o bloku, bomo z izjavo ugotovili, ali je blok pod predvajalnikom volneni blok in ali ima barvno oznako. Če je odgovor pritrdilen, presodite, katere barve je volneni blok in pokličite funkcijo set_color (), da spremenite barvo svetlečega dioda RGB enako kot volneni blok.

Poleg tega dodamo stavek try/except, da ujamemo izjemo prekinitve uporabnika, ko želimo zapreti program, da počistimo izhod zatičev GPIO.

Priložena je celotna koda.

Dobro opravljeno, toliko dodatkov in preveč zapleteno, kajne? Ne skrbite, poglejmo drugo metodo za dosego projekta, zaradi katere se boste počutili bolj prilagodljivo in priročno, in sicer z uporabo našega CrowPi2!

5. korak: Rezultat

Image
Image

Odprite igro in zaženite skript, rezultat boste videli v zgornjem videu

Nato bomo uporabili CrowPi2 za izgradnjo Rainbow interaktivnega mostu

6. korak: Uporaba materialov CrowPi2

● 1 x CrowPi2

7. korak: Uporaba diagrama povezave CrowPi2

Ni potrebno. Na CrowPi2 je veliko uporabnih senzorjev in komponent (več kot 20), vse je v enem prenosnem računalniku raspberry pi in izobraževalni platformi STEM, ki nam omogoča, da z lahkoto in brez znojenja naredimo več projektov! V tem primeru bomo na CrowPi2 uporabili privlačen in barvit modul, ki je matrični modul 8x8 RGB, ki nam omogoča nadzor nad 64 LED RGB hkrati!

8. korak: Uporaba CrowPi2- Konfiguriraj za SPI

Ni potrebno. CrowPi2 ima vgrajeno sliko z učnim sistemom! Vse je pripravljeno, kar pomeni, da se lahko programirate in učite neposredno. Poleg tega je z našim CrowPi2 enostavno in že integrirano v ploščo kot STEAM platformo, pripravljeno za uporabo.

9. korak: Uporaba CrowPi2- kode

Zdaj je čas, da začnemo naš program! Najprej uvozite nekaj knjižnic, na primer knjižnico MCPI, ki je knjižnica Minecraft Pi Python, ki nam omogoča uporabo zelo preprostega API -ja za integracijo s svetom Minecraft; knjižnica časa, ki nam omogoča, da funkcijo spanja počakamo na določen interval, preden izvedemo funkcijo; Knjižnica RPi. GPIO, ki nam omogoča nadzor nad zatiči Raspberry Pi GPIO.

od mcpi.minecraft uvoz Minecraft od časa uvoz uvoz spanja RPi. GPIO kot GPIO

Nazadnje bomo uvozili knjižnico, imenovano rpi_ws281x, ki je knjižnica RGB Matrix, v knjižnici pa obstaja več funkcij, ki jih bomo uporabili, na primer PixelStrip za nastavitev predmeta LED traku in Color za nastavitev barvnega predmeta RGB za vklop naše RGB LED diode

iz rpi_ws281x uvoz PixelStrip, Barva

In to je to, z uvozom knjižnic smo končali, zdaj je čas, da jih uporabimo! Enako, prva stvar je uporaba knjižnice Minecraft, želimo povezati naš skript python s svetom Minecraft, kar lahko storimo tako, da prikličemo funkcijo init knjižnice MCPI:

mc = Minecraft.create ()

Zdaj, ko želimo izvesti operacije v svetu minecrat, lahko uporabimo objekt mc.

Naslednji korak bo opredelitev razreda matrike RGB LED, ki ga bomo uporabljali za nadzor naših LED RGB, razred inicializiramo z osnovno konfiguracijo, kot so število LED, zatiči, svetlost itd.

Ustvarimo funkcijo, imenovano clean, ki bo manj "čistila" z določeno barvo, in tudi funkcijo, imenovano run, ki bo inicializirala dejanski objekt RGB LED ob prvi uporabi.

razred RGB_Matrix:

def _init _ (samo):

# Konfiguracija LED traku:

self. LED_COUNT = 64 # Število slikovnih pik LED.

self. LED_PIN = 12 # Pin GPIO priključen na slikovne pike (18 uporablja PWM!).

self. LED_FREQ_HZ = 800000 # Frekvenca LED signala v hercih (običajno 800 kHz)

self. LED_DMA = 10 # DMA kanal za ustvarjanje signala (poskusite 10)

self. LED_BRIGHTNESS = 10 # Nastavite na 0 za najtemnejše in 255 za najsvetlejše

self. LED_INVERT = False # True za pretvorbo signala

self. LED_CHANNEL = 0 # nastavljeno na '1' za GPIO 13, 19, 41, 45 ali 53

# Določite funkcije, ki na različne načine oživijo LED. def clean (samostojno, trak, barva):

# obrišite vse LED naenkrat

za i v dosegu (strip.numPixels ()):

strip.setPixelColor (i, barvno)

strip.show ()

def run (self):

# Ustvarite objekt NeoPixel z ustrezno konfiguracijo.

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

poskusi:

povratni trak

razen KeyboardInterrupt:

# očistite matrično LED pred prekinitvijo

self.clean (trak)

Ko smo končali z zgornjim, je čas, da prikličemo te razrede in ustvarimo predmete, ki jih lahko uporabimo v svoji kodi, najprej ustvarimo objekt matrike LED RGB, ki ga lahko uporabimo z uporabo razreda, ki smo ga ustvarili prej:

matrixObject = RGB_Matrix ()

Zdaj pa uporabimo ta predmet za ustvarjanje aktivnega predmeta LED traku, ki ga bomo uporabili za nadzor posameznih LED na matriki RGB:

strip = matrixObject.run ()

Za aktiviranje tega traku bomo morali zagnati še zadnjo funkcijo:

strip.begin ()

Minecraft API vključuje veliko blokov, vsak blok Minecraft ima svoj ID. V našem primeru smo vzeli nekaj blokov Minecraft in poskušali uganiti, katera barva je za njih najbolj primerna.

RGB pomeni rdeča, zelena in modra, zato bomo za vsako potrebovali 3 različne vrednosti, od 0 do 255, barve so lahko v obliki HEX ali RGB, za primer uporabljamo format RGB.

V svetu Minecraft Pi obstajajo običajni ID -ji blokov in posebni ID -ji iz volnenih blokov, posebna volna je pod ID številko 35, vendar s podštevilkami, ki segajo do različnih ID -jev … To težavo bomo rešili z ustvarjanjem dveh ločenih seznamov, enega za običajne bloke in en seznam za posebne volnene bloke:

Prvi seznam je za običajne bloke, na primer 0 predstavlja zračni blok, nastavili bomo barvo 0, 0, 0, ki je prazna ali popolnoma bela, ko bo igralec v igri skočil ali letel, se bo RGB izklopil, 1 je drugačen blok z barvami RGB 128, 128, 128 itd.

#Mavrične barve

mavrične_barve = {

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

}

Za volnene bloke delamo enako, vendar se je treba spomniti, da imajo vsi bloki ID 35, na tem seznamu opredeljujemo podvrste bloka, ki je volneni blok. Različni podtipi volne imajo različne barve, vendar so vsi volneni bloki.

volnene_barve = {

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

}

Ko smo končali z opredelitvijo našega glavnega programa, razredov in funkcij, je čas za integracijo z našim senzorjem CrowPi2 RGB LED na krovu.

Glavni program bo vzel parametre, ki smo jih opredelili prej, in vplival na strojno opremo.

Uporabili bomo LED CrowPi2 RGB, da jih osvetlimo glede na korake, ki jih naredimo v Minecraft Pi na vsakem bloku, začnimo!

Najprej bomo ustvarili nekaj volnenih blokov z ukazi in ustvarili zanko while, da bo program deloval, dokler igramo igro.

Od igralca bomo morali dobiti nekaj podatkov, najprej uporabimo ukaz player.getPos (), da dobimo položaj igralca, nato pa uporabimo getBlockWithData (), da dobimo blok, na katerem trenutno stojimo (koordinata y je -1, kar je pomeni pod igralcem)

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)

medtem ko je res:

x, y, z = mc.player.getPos () # položaj igralca (x, y, z)

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

tiskanje (blockType)

Nato bomo preverili, ali je blok volneni blok, identifikacijska številka bloka 35, če je, se bomo nanašali na volnene barve z barvo bloka glede na ID slovarja in ustrezno osvetlili pravo barvo.

če je blockType == 35:

# barv volne po meri

matrixObject.clean (trak, volnene barve [str (podatki)])

Če ni volneni blok, bomo preverili, ali je blok trenutno v slovarju rainbow_colors, da se izognemo izjemam, če je tako, bomo nadaljevali z barvo in spreminjanjem RGB.

če str (blockType) v rainbow_colors:

tiskanje (rainbow_colors [str (blockType)])

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

spanje (0,5)

Vedno lahko poskusite dodati več blokov v rainbow_color, da dodate več barv in več podpore za bloke!

Popolno! Izvajanje projektov z uporabo dodatne opreme je zapleteno, vendar z uporabo integriranega vezja CrowPi2 stvari postanejo veliko lažje! Še več, na CrowPi2 je več kot 20 senzorjev in komponent, kar vam omogoča, da dosežete svoje idealne projekte in celo projekte AI!

Spodaj je celotna koda:

10. korak: Uporaba CrowPi2-rezultat

Odprite igro in zaženite skript, rezultat boste videli v zgornjem videu:

11. korak: Uporaba CrowPi2- Gremo še dlje

Zdaj smo zaključili naš barvit projekt v igri Minecraft s CrowPi2. Zakaj ne bi poskusili uporabiti drugih senzorjev in komponent na CrowPi2 za igranje z igro, na primer igralno palico za nadzor gibanja igralca, RFID za ustvarjanje blokov na podlagi različnih kartic NFC ipd. še bolj neverjetni projekti s CrowPi2!

Zdaj je CrowPi2 na Kickstarterju, uživali bi lahko tudi v privlačni ceni.

Priložite povezavo do strani Kickstarter CrowPi2

Priporočena: