Satura rādītājs:

Veidojiet varavīksnes interaktīvo tiltu, izmantojot Minecraft Raspberry Pi Edition: 11 soļi
Veidojiet varavīksnes interaktīvo tiltu, izmantojot Minecraft Raspberry Pi Edition: 11 soļi

Video: Veidojiet varavīksnes interaktīvo tiltu, izmantojot Minecraft Raspberry Pi Edition: 11 soļi

Video: Veidojiet varavīksnes interaktīvo tiltu, izmantojot Minecraft Raspberry Pi Edition: 11 soļi
Video: Andris Šīrants & Gunita - Tev pieskarties 2024, Novembris
Anonim
Image
Image

Vakar es redzēju savu 8 gadus veco brāļadēlu, kurš spēlēja Minecraft ar Raspberry Pi, kuru es viņam iedevu iepriekš, tad man radās ideja, kas izmanto kodu, lai izveidotu pielāgotu un aizraujošu Minecraft-pi LED bloku projektu. Minecraft Pi ir lielisks veids, kā sākt darbu ar Raspberry Pi mikrodatoru, Minecraft Pi ir īpaša pasūtījuma izgatavota Minecraft versija, kas ļauj mums mijiedarboties ar spēli, izmantojot nāvējoši vienkāršu Python API, lai pielāgotu spēles pieredzi un rekvizītus!

Ir daudz projektu, ko jūs varat paveikt Minecraft pasaulē ar Raspberry Pi, bet tieši mums ar to nepietika, mēs meklējām kaut ko izaicinošu un mirgojošu vienlaikus. Šajā projektā mēs iesaistīsimies vairākos Minecraft blokos, atklāsim bloka ID un noteiksim konkrētā bloka krāsu, uz kuras mēs uzkāpām, pamatojoties uz krāsu, kurā iedegsim savu RGB LED, lai izveidotu interaktīvu soļu spēli!

Lai sasniegtu efektu, es izmantošu divas metodes, pirmā ir piederumu izmantošana, kas var būt ļoti haotiska …; otrais izmanto CrowPi2 (mācību dators ar daudziem sensoriem, šobrīd kolektīvi finansēts Kickstarter: CrowPi2)

sāksim un redzēsim, kā arhivēt tik pārsteidzošu projektu!

Piegādes

CrowPi2 tagad ir pieejams kickstarter, projekts CrowPi2 ir savācis gandrīz 250 000 USD.

Noklikšķiniet uz saites:

1. metode Piederumu izmantošana

1. solis: materiāli

● 1 x Raspberry Pi 4 modelis B

● 1 x TF karte ar attēlu

● 1 x Raspberry Pi barošanas avots

● 1 x 10,1 collu monitors

● 1 x monitora barošanas avots

● 1 x HDMI kabelis

● 1 x tastatūra un pele

● 1 x RGB LED (kopējais katods)

● 4 x džemperi (no sievietes līdz sievietei)

2. darbība. Savienojuma shēma

Savienojuma shēma
Savienojuma shēma

Faktiski RGB krāsu gaismas diodē ir trīs gaismas, kas ir sarkanā, zaļā un zilā gaisma. Vadiet šīs trīs gaismas, lai izstarotu dažādas intensitātes gaismu, un, sajaucoties, tās var izstarot dažādu krāsu gaismu. Četras LED gaismas tapas ir attiecīgi GND, R, G un B. Izmantotā RGB gaismas diode ir parasts katods, un savienojums ar Raspberry Pi ir šāds:

RaspberryPi 4B (funkcijas nosaukumā) RGB gaismas diode

GPIO0 1 SARKANS

GPIO1 3 ZAĻA

GPIO2 4 ZILS

GND 2 GND

Otrais attēls ir aparatūras savienojums

3. darbība: konfigurējiet SPI

Konfigurējiet SPI
Konfigurējiet SPI
Konfigurējiet SPI
Konfigurējiet SPI
Konfigurējiet SPI
Konfigurējiet SPI
Konfigurējiet SPI
Konfigurējiet SPI

Tā kā mums ir jāizmanto SPI, lai kontrolētu RGB, vispirms ir jāiespējo SPI saskarne, kas pēc noklusējuma ir atspējota. Lai iespējotu SPI saskarni, varat veikt tālāk norādītās darbības.

Pirmkārt, varat izmantot darbvirsmas grafisko lietotāja saskarni, dodoties uz Pi start MenupreferencesRaspberry Pi Configuration, kā parādīts pirmajā attēlā.

Otrkārt, dodieties uz “Saskarnes” un iespējojiet SPI un noklikšķiniet uz Labi (otrais attēls).

Visbeidzot, restartējiet Pi, lai pārliecinātos, ka izmaiņas stājas spēkā. Noklikšķiniet uz Pi Izvēlne SāktPreferencesShutdown. Tā kā mums vienkārši ir jārestartē, noklikšķiniet uz pogas Pārstartēt.

4. solis: kods

Mēs sāksim rakstīt savu pitona kodu, pirmkārt, importēsim dažas bibliotēkas, kas mums būs nepieciešamas, lai integrētu mūsu kodu Minecraft pasaulē. Pēc tam mēs importēsim laika bibliotēku, īpaši funkciju, ko sauc par miegu. Miega funkcija ļaus mums gaidīt noteiktu intervālu pirms funkcijas veikšanas. Visbeidzot, mēs importējam RPi. GPIO bibliotēku, kas ļauj mums kontrolēt Raspberry Pi GPIO.

no mcpi.minecraft importēt Minecraft no laika importēšanas miega importēt RPi. GPIO kā GPIO

Un tas ir viss, mēs esam pabeiguši bibliotēku importēšanu, tagad ir pienācis laiks tās izmantot! Vispirms jāizmanto Minecraft bibliotēka, mēs vēlamies savienot savu python skriptu ar Minecraft pasauli, mēs to varam izdarīt, izsaucot MCPI bibliotēkas funkciju init () un pēc tam iestatot GPIO režīmu un atspējojot brīdinājumu.

mc = Minecraft.create () GPIO.setmode (GPIO. BCM) GPIO.setbrīdinājumi (0)

Tagad mēs definējam dažas varavīksnes krāsas heksadecimālā formā, lai mēs varētu mainīt RGB krāsas.

BALTS = 0xFFFFFF SARKANS = 0xFF0000 ORANŽS = 0xFF7F00 DZELTENS = 0xFFFF00 GREENS = 0x00FF00 CIANS = 0x00FFFF ZILS = 0x0000FF PURPLE = 0xFF00FF MAGENTA = 0xFF0000

Tālāk mums ir jānosaka daži mainīgie, lai ierakstītu vilnas bloka krāsu, kas jau ir definēta Minecraft bloku sarakstā.

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

Mēs Minecraft vilnas bloka ID ir 35. Tagad mums ir jākonfigurē RGB gaismas diodes tapa un jāiestata tiem.

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)

Pēc tam iestatiet PWM katrai tapai, ņemiet vērā, ka PWM vērtību diapazons ir 0-100. Šeit mēs vispirms iestatījām RGB krāsu līdz baltai (100, 100, 100).

sarkans = GPIO. PWM (red_pin, 100)

zaļa = GPIO. PWM (zaļa_tapa, 100) zila = GPIO. PWM (zila_tapa, 100) sarkana.starts (100) zaļš.starts (100) zils.starts (100)

Tālāk ir jāizveido divas funkcijas, kuras var izmantot, lai atšifrētu krāsu un apgaismotu RGB vadīto uz augšu! Ņemiet vērā, ka map2hundred () funkcija ir kartēt vērtības no 255 līdz 100, kā mēs teicām iepriekš, PWM vērtībai jābūt 0-100.

def map2hundred (vērtība): atgriezties int (vērtība * 100/255)

def set_color (color_code): # atšifrējiet red_value = color_code >> 16 & 0xFF green_value = color_code >> 8 & 0xFF blue_value = color_code >> 0 & 0xFF

# Kartes vērtības red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

# Iedegies! red. ChangeDutyCycle (red_value) zaļš. ChangeDutyCycle (green_value) zils. ChangeDutyCycle (blue_value)

Labi padarīts! Ir pienācis laiks sākt mūsu galveno programmu, pagaidiet, pirms galvenās programmas ir jānosaka cits mainīgais, lai ierakstītu vilnas bloka krāsu kodu:

last_data = 0 mēģinājums: 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 Bloki (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.set Bloks (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.set Bloķē (x+24, y, z, x+25, y, z+2, 35, 14), kamēr True: x, y, z = mc.player.getPos () # spēlētāja pozīcija (x, y, z) bloks = mc.getBlockWithData (x, y-1, z) # bloka ID # nospiedums (bloks), ja 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), ja block.data == W_ DZELTENS: drukāt ("Dzeltens!") Set_color (YELLOW), ja 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), ja block.data == W_MAGENTA: print (" Magenta! ") Set_color (MAGENTA) if block.data == W_WHWITE: print (" White! ") Set_color (WHITE) last_data = block.data sleep (0.05), izņemot KeyboardInterrupt: pass GPIO.cleanup ()

Tā kā galvenā programma ir parādīta iepriekš, vispirms, lai izmantotu dažas komandas, lai ģenerētu dažus krāsainus vilnas blokus, tad mums ir jānoskaidro spēlētāja pozīcija, lai mēs varētu iegūt bloku ID un tā krāsu kodu. Pēc bloka informācijas iegūšanas mēs izmantosim paziņojumu, lai noteiktu, vai bloks zem atskaņotāja ir vilnas bloks un vai tam ir krāsu kods. Ja jā, izlemiet, kādā krāsā ir vilnas bloks, un izsauciet funkciju set_color (), lai mainītu RGB vada krāsu tāpat kā vilnas klucis.

Turklāt mēs pievienojam paziņojumu try/izņemot, lai noķertu lietotāja pārtraukuma izņēmumu, kad vēlamies iziet no programmas, lai notīrītu GPIO tapu izvadi.

Pievienots pilnīgs kods.

Labi darīts, tik daudz piederumu un pārāk sarežģīti, vai ne? Neuztraucieties, apskatīsim otro metodi projekta sasniegšanai, kas ļaus jums justies elastīgākam un ērtākam, izmantojot mūsu CrowPi2!

5. solis: rezultāts

Image
Image

Atveriet spēli un palaidiet skriptu, rezultātu redzēsit iepriekš redzamajā videoklipā

Tad mēs izmantosim CrowPi2, lai tālāk izveidotu Rainbow interaktīvo tiltu

6. darbība: CrowPi2 materiālu izmantošana

● 1 x CrowPi2

7. darbība: CrowPi2 savienojuma diagrammas izmantošana

Nav vajadzības. CrowPi2 ir daudz noderīgu sensoru un komponentu (vairāk nekā 20), tas viss ir vienā aveņu pi klēpjdatorā un STEM izglītības platformā, kas ļauj mums viegli un bez sviedriem veikt vairākus projektus! Šajā gadījumā CrowPi2 izmantosim pievilcīgu un krāsainu moduli, kas ir 8x8 RGB matricas modulis, kas ļauj mums vienlaikus kontrolēt 64 RGB ledus!

8. darbība: izmantojot CrowPi2- konfigurējiet SPI

Nav vajadzības. CrowPi2 nāk ar iebūvētu attēlu ar mācību sistēmu! Viss ir sagatavots, kas nozīmē, ka jūs varat programmēt un mācīties tieši. Turklāt ar mūsu CrowPi2 tas ir vienkārši un jau ir integrēts tāfelē kā STEAM platforma, kas ir gatava darbam.

9. solis: izmantojot CrowPi2 kodu

Tagad ir pienācis laiks sākt mūsu programmu! Pirmkārt, importējiet dažas bibliotēkas, piemēram, MCPI bibliotēku, kas ir Minecraft Pi Python bibliotēka, kas ļauj mums izmantot ļoti vienkāršu API, lai integrētos Minecraft pasaulē; laika bibliotēka, kas ļauj mums miega funkcijai gaidīt noteiktu intervālu pirms funkcijas veikšanas; RPi. GPIO bibliotēka, kas ļauj mums kontrolēt Raspberry Pi GPIO tapas.

no mcpi.minecraft importēt Minecraft no laika importēšanas miega importēt RPi. GPIO kā GPIO

Visbeidzot, bibliotēkā mēs importēsim bibliotēku ar nosaukumu rpi_ws281x, kas ir RGB matricas bibliotēka. Mēs izmantosim vairākas funkcijas, piemēram, PixelStrip, lai iestatītu LED sloksnes objektu, un krāsu, lai konfigurētu RGB krāsu objektu, lai tas iedegtos. mūsu RGB gaismas diodes

no rpi_ws281x importēt PixelStrip, krāsa

Un tas ir viss, mēs esam pabeiguši bibliotēku importēšanu, tagad ir pienācis laiks tās izmantot! Tā pati pirmā lieta ir izmantot Minecraft bibliotēku, mēs vēlamies savienot savu python skriptu ar Minecraft pasauli, ko mēs varam izdarīt, izsaucot MCPI bibliotēkas init funkciju:

mc = Minecraft.create ()

Tagad katru reizi, kad vēlamies veikt darbības mineratu pasaulē, mēs varam izmantot mc objektu.

Nākamais solis būs noteikt RGB LED matricas klasi, kuru mēs izmantosim, lai kontrolētu mūsu RGB gaismas diodes, mēs inicializējam klasi ar pamata konfigurāciju, piemēram, gaismas diožu skaitu, tapām, spilgtumu utt.

mēs izveidojam funkciju ar nosaukumu tīrs, kas “iztīrīs” mazāk ar noteiktu krāsu, kā arī funkciju ar nosaukumu palaist, kas inicializēs faktisko RGB LED objektu pirmajā reizē, kad to vēlamies izmantot.

klase RGB_Matrix:

def _init _ (sevi):

# LED sloksnes konfigurācija:

self. LED_COUNT = 64 # LED pikseļu skaits.

self. LED_PIN = 12 # GPIO tapa, kas savienota ar pikseļiem (18 izmanto PWM!).

self. LED_FREQ_HZ = 800000 # LED signāla frekvence hercos (parasti 800 khz)

self. LED_DMA = 10 # DMA kanāls, ko izmantot signāla ģenerēšanai (izmēģiniet 10)

self. LED_BRIGHTNESS = 10 # Iestatiet uz 0 tumšākajam un 255 spilgtākajam

self. LED_INVERT = Nepareizs # Patiess, lai apgrieztu signālu

self. LED_CHANNEL = 0 # GPIO 13, 19, 41, 45 vai 53 iestatīts uz '1'

# Definējiet funkcijas, kas dažādos veidos animē gaismas diodes. attīrīt (pats, sloksne, krāsa):

# noslaukiet visas gaismas diodes vienlaikus

i diapazonā (strip.numPixels ()):

strip.setPixelColor (i, krāsa)

strip.show ()

def run (self):

# Izveidojiet NeoPixel objektu ar atbilstošu konfigurāciju.

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

pamēģini:

atgriešanas sloksne

izņemot tastatūruPārtraukums:

# pirms pārtraukuma notīriet matricas LED

self.clean (sloksne)

Kad esam paveikuši iepriekš minēto, ir pienācis laiks izsaukt šīs klases un izveidot objektus, kurus varam izmantot savā kodā, vispirms izveidosim RGB LED matricas objektu, ko varam izmantot, izmantojot iepriekš izveidoto klasi:

matrixObject = RGB_Matrix ()

Tagad izmantosim šo objektu, lai izveidotu aktīvu LED sloksnes objektu, ko mēs izmantosim, lai kontrolētu mūsu atsevišķās gaismas diodes RGB matricā:

sloksne = matrixObject.run ()

Visbeidzot, lai aktivizētu šo sloksni, mums būs jāizpilda pēdējā funkcija:

strip.begin ()

Minecraft API ir daudz bloku, katram Minecraft blokam ir savs ID. Mūsu piemērā mēs esam paņēmuši zināmu daudzumu Minecraft bloku un mēģinājuši uzminēt, kura krāsa viņiem ir vispiemērotākā.

RGB apzīmē sarkanu, zaļu un zilu krāsu, tāpēc mums būs nepieciešamas 3 dažādas vērtības no 0 līdz 255 katrai no tām, krāsas var būt HEX vai RGB formāts, mēs izmantojam RGB formātu.

Minecraft Pi pasaulē ir parastie bloku ID un īpašie vilnas bloku ID, īpašā vilna ir ar ID numuru 35, bet ar apakšnumuriem, kas svārstās no daudziem dažādiem ID … Mēs atrisināsim šo problēmu, izveidojot 2 atsevišķus sarakstus, vienu parastajiem blokiem un viens saraksts īpašiem vilnas blokiem:

Pirmais saraksts ir paredzēts parastajiem blokiem, piemēram, 0 attēlo gaisa bloku, mēs tam iestatīsim krāsu 0, 0, 0, kas ir tukša vai pilnīgi balta, kad spēlētājs lēks vai lidos spēlē, RGB izslēgsies, 1 ir atšķirīgs bloks ar RGB krāsu 128, 128, 128 un tā tālāk …

#Varavīksnes krāsas

varavīksnes_krāsas = {

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

}

Attiecībā uz vilnas blokiem mēs darām to pašu, taču ir svarīgi atcerēties, ka visiem blokiem ir ID 35, šajā sarakstā mēs definējam vilnas bloka bloka apakštipus. Dažādiem vilnas apakštipiem ir dažādas krāsas, taču tie visi ir vilnas bloki.

vilnas_krāsas = {

"6": krāsa (255, 105, 180), "5": krāsa (0, 255, 0), "4": krāsa (255, 255, 0), "14": krāsa (255, 0, 0), "2": krāsa (255, 0, 255)

}

Kad esam pabeiguši savas galvenās programmas, nodarbību un funkciju definēšanu, ir pienācis laiks integrēties ar mūsu CrowPi2 RGB LED borta sensoru.

Galvenā programma ņems iepriekš definētos parametrus un ietekmēs aparatūru.

Mēs izmantosim CrowPi2 RGB LED, lai tos iedegtu, pamatojoties uz soļiem, ko veicam Minecraft Pi katrā blokā, sāksim!

Pirmā lieta, ko mēs darīsim, ir ģenerēt dažus vilnas blokus ar komandām un izveidot kādu laiku cilpu, lai programma darbotos tik ilgi, kamēr mēs spēlējam spēli.

Mums būs jāiegūst daži dati no atskaņotāja. Pirmkārt, mēs izmantojam komandu player.getPos (), lai iegūtu spēlētāja pozīciju, pēc tam mēs izmantojam getBlockWithData (), lai iegūtu bloku, uz kura mēs pašlaik stāvam (y koordināta ir -1, kas nozīmē zem spēlētāja)

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)

kamēr taisnība:

x, y, z = mc.player.getPos () # spēlētāja pozīcija (x, y, z)

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

drukāt (blockType)

Tad mēs pārbaudīsim, vai bloks ir vilnas bloks, bloka ID numurs 35, ja tā ir, mēs atsaucamies uz vilnas_krāsām ar bloka krāsu, pamatojoties uz vārdnīcas ID, un attiecīgi iedegsim pareizo krāsu.

ja blockType == 35:

# pielāgotas vilnas krāsas

matrixObject.clean (sloksne, vilnas_krāsas [str (dati)])

Ja tas nav vilnas bloks, mēs pārbaudīsim, vai bloks pašlaik atrodas varavīksnes_krāsas vārdnīcā, lai izvairītos no izņēmumiem, ja tā ir, mēs turpināsim, ņemot krāsu un mainot RGB.

ja str (blockType) varavīksnes krāsās:

drukāt (varavīksnes_krāsas [str (blockType)])

matrixObject.clean (sloksne, varavīksnes_krāsas [str (blockType)])

gulēt (0,5)

Jūs vienmēr varat mēģināt pievienot varavīksnes krāsai vairāk bloku, lai pievienotu vairāk krāsu un vairāk bloku atbalsta!

Perfekti! Projektu veikšana, izmantojot piederumus, ir sarežģīta, taču, izmantojot integrēto shēmu CrowPi2, viss kļūst daudz vieglāk! Turklāt vietnē CrowPi2 ir vairāk nekā 20 sensori un komponenti, kas ļauj sasniegt ideālus projektus un pat AI projektus!

Zemāk ir pilns kods:

10. solis: CrowPi2 izmantošana-rezultāts

Atveriet spēli un palaidiet skriptu, rezultātu redzēsit iepriekš redzamajā videoklipā:

11. solis: CrowPi2 izmantošana- iet tālāk

Tagad mēs esam pabeiguši savu krāsaino projektu Minecraft spēlē ar CrowPi2. Kāpēc gan neizmēģināt CrowPi2, lai spēlētu ar spēli citus sensorus un komponentus, piemēram, kursorsviru, lai kontrolētu spēlētāja kustību, RFID, lai ģenerētu blokus, pamatojoties uz dažādām NFC kartēm, utt. vairāk neticamu projektu ar CrowPi2!

Tagad CrowPi2 ir pieejams Kickstarter, un jūs varētu arī izbaudīt pievilcīgo cenu.

Pievienojiet Kickstarter lapas saiti CrowPi2

Ieteicams: