Innholdsfortegnelse:

Bygg Rainbow Interactive Bridge ved hjelp av Minecraft Raspberry Pi Edition: 11 trinn
Bygg Rainbow Interactive Bridge ved hjelp av Minecraft Raspberry Pi Edition: 11 trinn

Video: Bygg Rainbow Interactive Bridge ved hjelp av Minecraft Raspberry Pi Edition: 11 trinn

Video: Bygg Rainbow Interactive Bridge ved hjelp av Minecraft Raspberry Pi Edition: 11 trinn
Video: Minecraft Live 2020: Full Show 2024, November
Anonim
Image
Image

I går så jeg min 8 år gamle nevø spille Minecraft med Raspberry Pi jeg ga ham før, da fikk jeg en idé, som bruker kode for å lage et tilpasset og spennende Minecraft-pi LED-blokkerprosjekt. Minecraft Pi er en fin måte å komme i gang med Raspberry Pi -mikrodatamaskinen på. Minecraft Pi er en spesiell skreddersydd versjon av Minecraft som lar oss samhandle med spillet ved hjelp av et dødelig enkelt Python API for å tilpasse spillopplevelsen og rekvisitter!

Det er mange prosjekter du kan gjøre i Minecraft -verdenen med Raspberry Pi, men spesielt for oss var det ikke nok, vi lette etter noe utfordrende og blinkende på samme tid. I dette prosjektet vil vi tråkke på flere Minecraft -blokker, oppdage blokkerens ID og oppdage fargen på den spesifikke blokken vi gikk på, basert på fargen vi vil tenne RGB LED for å lage interaktivt trinnspill!

Jeg vil bruke to metoder for å oppnå effekten, den første er å bruke tilbehøret, noe som kan være veldig kaotisk …; den andre bruker CrowPi2 (læringsdatamaskin med mange sensorer, for tiden crowdfunded på Kickstarter: CrowPi2)

la oss komme i gang og se hvordan du arkiverer et så fantastisk prosjekt!

Rekvisita

CrowPi2 er nå live på kickstarter nå, CrowPi2 -prosjektet har samlet inn nesten 250 000 dollar.

Trykk på lenken:

Metode 1 Bruke tilbehør

Trinn 1: Materialer

● 1 x Raspberry Pi 4 modell B

● 1 x TF -kort med bilde

● 1 x Raspberry Pi strømforsyning

● 1 x 10,1 tommers skjerm

● 1 x strømforsyning for skjerm

● 1 x HDMI -kabel

● 1 x tastatur og mus

● 1 x RGB -led (vanlig katode)

● 4 x Gensere (Kvinne til Kvinne)

Trinn 2: Tilkoblingsdiagram

Tilkoblingsdiagram
Tilkoblingsdiagram

Det er faktisk tre lys i RGB -fargelampen, som er rødt lys, grønt lys og blått lys. Kontroller disse tre lysene for å avgi lys med forskjellige intensiteter, og når de blandes, kan de avgi lys i forskjellige farger. De fire pinnene på LED -lyset er henholdsvis GND, R, G og B. RGB -LED -en jeg brukte er en vanlig katode, og tilkoblingen til Raspberry Pi er som følger:

RaspberryPi 4B (i funksjonsnavn) RGB LED

GPIO0 1 RØD

GPIO1 3 GRØNN

GPIO2 4 BLÅ

GND 2 GND

Det andre bildet er maskinvaretilkoblingen

Trinn 3: Konfigurer for SPI

Konfigurer for SPI
Konfigurer for SPI
Konfigurer for SPI
Konfigurer for SPI
Konfigurer for SPI
Konfigurer for SPI
Konfigurer for SPI
Konfigurer for SPI

Fordi vi må bruke SPI for å kontrollere RGB, må vi først aktivere SPI -grensesnittet, som er deaktivert som standard. Du kan følge trinnene nedenfor for å aktivere SPI -grensesnitt:

Først kan du bruke Desktop GUI ved å gå til Pi start MenupreferencesRaspberry Pi Configuration, som det er vist på det første bildet.

For det andre, naviger til "Grensesnitt" og aktiver SPI og klikk OK (det andre bildet).

Sist starter du Pi på nytt for å sikre at endringene trer i kraft. Klikk på Pi Start MenuPreferencesShutdown. Siden vi bare trenger å starte på nytt, klikker du på Reboot -knappen.

Trinn 4: Koden

Vi starter med å skrive pythonkoden vår, først begynner vi med å importere noen få biblioteker som vi trenger for å integrere koden vår med Minecraft -verdenen. Deretter importerer vi tidsbiblioteket, spesielt en funksjon som kalles søvn. Søvnfunksjonen lar oss vente et bestemt intervall før vi utfører en funksjon. Sist men ikke minst importerer vi RPi. GPIO -biblioteket som lar oss kontrollere GPIO på Raspberry Pi.

fra mcpi.minecraft import Minecraft fra tid importer søvnimport RPi. GPIO som GPIO

Og det er det, vi har gjort med å importere bibliotekene, nå er det på tide å bruke dem! Det første først er å bruke Minecraft -biblioteket, vi vil koble python -skriptet vårt til Minecraft -verdenen, vi kan gjøre dette ved å påkalle init () -funksjonen til MCPI -biblioteket og deretter angi modusen for GPIO og deaktivere advarselen.

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

Nå definerer vi noen regnbuefarger i heksadesimal, slik at vi kan endre RGB -farger.

HVIT = 0xFFFFFF RØD = 0xFF0000 ORANGE = 0xFF7F00 GUL = 0xFFFF00 GRØNN = 0x00FF00 CYAN = 0x00FFFF BLÅ = 0x0000FF LILLA = 0xFF00FF MAGENTA = 0xFF0090

Deretter må vi definere noen variabler for å registrere fargen på ullblokken, som allerede er definert i Minecraft -blokkeringslisten.

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

Vi ID på ullblokken i Minecraft er 35. Nå må vi konfigurere pinnen for RGB -led og sette opp for dem.

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)

Sett deretter opp PWM for hver pin, merk at området for PWM-verdi er 0-100. Her satte vi fargen på RGB led til hvit (100, 100, 100) først.

rød = GPIO. PWM (rød_nål, 100)

grønn = GPIO. PWM (grønn_nål, 100) blå = GPIO. PWM (blå_nål, 100) rød.start (100) grønn.start (100) blå.start (100)

Følgende er å lage to funksjoner, som kan brukes til å dekode farge og lyse RGB -ledet opp! Vær oppmerksom på at map2hundred () -funksjonen er å kartlegge verdier fra 255 til 100, som vi sa nevnt tidligere, bør PWM-verdien være 0-100.

def map2hundred (verdi): retur int (verdi * 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

# Kartverdier red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

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

Bra gjort! Det er på tide å starte hovedprogrammet vårt. Vent, en annen variabel bør defineres for å registrere fargekoden for ullblokk før hovedprogrammet:

last_data = 0 prøve: 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) mens True: x, y, z = mc.player.getPos () # spillerposisjon (x, y, z) block = mc.getBlockWithData (x, y-1, z) # block ID #print (block) if block.id == WOOL og 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_ GUL: print ("Yellow!") Set_color (GUL) if block.data == W_GREEN: print ("Green!") Set_color (GREEN) if block.data == W_CYAN: print ("Cyan!") Set_color (CYAN)) hvis 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) unntatt KeyboardInterrupt: pass GPIO.cleanup ()

Som hovedprogrammet er vist ovenfor, først for å bruke noen kommandoer for å generere noen fargerike ullblokker, så må vi finne ut spillerens posisjon slik at vi kan få blokkenes ID og fargekode. Etter å ha fått blokkinformasjonen, vil vi bruke setningen til å avgjøre om blokken under spilleren er en ullblokk og om den har fargekoden. Hvis ja, døm hvilken farge ullblokken er og ring funksjonen set_color () for å endre fargen på RGB -ledningen på samme måte som ullblokken.

I tillegg legger vi til en prøve/unntak -setning for å fange unntaket for brukeravbrudd når vi vil avslutte programmet for å slette utgangen fra GPIO -pinner.

Den komplette koden er vedlagt.

Godt gjort, så mye tilbehør og for komplisert ikke sant? Ikke bekymre deg, la oss se den andre metoden for å oppnå prosjektet, som vil få deg til å føle deg mer fleksibel og praktisk, som bruker CrowPi2!

Trinn 5: Resultatet

Image
Image

Åpne spillet og kjør skriptet, du vil se resultatet i videoen ovenfor

Deretter vil vi bruke CrowPi2 til å bygge Rainbow interaktiv bro neste

Trinn 6: Bruke CrowPi2-materialer

● 1 x CrowPi2

Trinn 7: Bruke CrowPi2- tilkoblingsdiagram

Ikke nødvendig. Det er mange nyttige sensorer og komponenter (mer enn 20) på CrowPi2, alt i en bringebær pi bærbar PC og STEM utdanningsplattform som lar oss gjøre flere prosjekter enkelt og uten svette! I dette tilfellet vil vi bruke en attraktiv og fargerik modul på CrowPi2, som er en 8x8 RGB -matrisemodul, som lar oss kontrollere 64 RGB led samtidig!

Trinn 8: Bruke CrowPi2- Konfigurer for SPI

Ikke nødvendig. CrowPi2 kommer med et innebygd bilde med et læringssystem! Alt er forberedt, noe som betyr at du kan programmere og lære direkte. Dessuten, med CrowPi2 er det enkelt og allerede integrert i brettet som en STEAM -plattform klar til bruk.

Trinn 9: Bruke CrowPi2- koden

Nå er det på tide å starte programmet vårt! Først importerer du noen få biblioteker, for eksempel MCPI -bibliotek som er Minecraft Pi Python -biblioteket som lar oss bruke en veldig enkel API for å integrere med Minecraft -verden; tidsbibliotek som lar oss sovefunksjonen til å vente et bestemt intervall før vi utfører en funksjon; RPi. GPIO -bibliotek som lar oss kontrollere Raspberry Pi GPIO -pinnene.

fra mcpi.minecraft import Minecraft fra tid importer søvnimport RPi. GPIO som GPIO

Til slutt importerer vi et bibliotek kalt rpi_ws281x som er RGB Matrix -biblioteket, inne i biblioteket er det flere funksjoner som vi vil bruke, for eksempel PixelStrip for å sette opp LED -stripeobjektet og Color for å konfigurere et RGB -fargeobjekt for å lyse på våre RGB -lysdioder

fra rpi_ws281x importer PixelStrip, farge

Og det er det, vi har gjort med å importere bibliotekene, nå er det på tide å bruke dem! Som det samme er det første å bruke Minecraft -biblioteket, vi vil koble vårt python -skript til Minecraft -verdenen, vi kan gjøre dette ved å påkalle init -funksjonen til MCPI -biblioteket:

mc = Minecraft.create ()

Hver gang vi ønsker å utføre operasjoner i minekratverdenen, kan vi bruke mc -objektet.

Neste trinn vil være å definere RGB LED -matriseklassen som vi skal bruke for å kontrollere våre RGB -lysdioder, vi initialiserer klassen med grunnleggende konfigurasjon som antall lysdioder, pinner, lysstyrke osv …

vi oppretter en funksjon som kalles ren som vil "rense" det mindre med spesifikk farge gitt og også en funksjon som kalles kjøring som vil initialisere det faktiske RGB LED -objektet ved første gang vi vil bruke det.

klasse RGB_Matrix:

def _init _ (self):

# LED -stripekonfigurasjon:

self. LED_COUNT = 64 # Antall LED -piksler.

self. LED_PIN = 12 # GPIO -pinne koblet til pikslene (18 bruker PWM!).

self. LED_FREQ_HZ = 800000 # LED -signalfrekvens i hertz (vanligvis 800khz)

self. LED_DMA = 10 # DMA -kanal som skal brukes for å generere signal (prøv 10)

self. LED_BRIGHTNESS = 10 # Sett til 0 for mørkeste og 255 for lyseste

self. LED_INVERT = Falsk # Sant for å snu signalet

self. LED_CHANNEL = 0 # satt til '1' for GPIO 13, 19, 41, 45 eller 53

# Definer funksjoner som animerer lysdioder på forskjellige måter. def clean (selv, stripe, farge):

# tørk av alle LED -ene samtidig

for i i rekkevidde (strip.numPixels ()):

strip.setPixelColor (i, farge)

strip.show ()

def run (self):

# Lag NeoPixel -objekt med riktig konfigurasjon.

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

prøve:

returlist

unntatt KeyboardInterrupt:

# rengjør matrisens LED før avbrudd

self.clean (strip)

Etter at vi har gjort med det ovennevnte, er det på tide å påkalle disse klassene og lage objekter som vi kan bruke i koden vår. La oss først lage et RGB LED -matriseobjekt som vi kan bruke ved å bruke klassen vi har opprettet tidligere:

matrixObject = RGB_Matrix ()

La oss nå bruke dette objektet til å lage et aktivt LED -stripeobjekt som vi vil bruke til å kontrollere våre individuelle lysdioder på RGB -matrisen:

strip = matrixObject.run ()

Til slutt for å aktivere denne stripen, må vi kjøre en siste funksjon:

strip.begin ()

Minecraft API inneholder mange blokker, hver Minecraft -blokk har sin egen ID. I vårt eksempel har vi tatt en mengde Minecraft -blokker og prøvd å gjette hvilken farge som er best egnet for dem.

RGB står for rødt, grønt og blått, så vi trenger 3 forskjellige verdier fra 0 til 255 for hver enkelt, farger kan være HEX- eller RGB -format, vi bruker RGB -formatet for vårt eksempel.

I Minecraft Pi -verdenen er det normale blokker -ID -er og spesielle ullblokker -ID -er, den spesielle ullen kommer under ID -nummer 35, men med subnumre som varierer til mange forskjellige ID -er … Vi løser dette problemet ved å lage to separate lister, en for normale blokker og en liste for spesielle ullblokker:

Den første listen er for normale blokker, for eksempel 0 representerer luftblokk, vi setter den farge 0, 0, 0 som er blank eller fullstendig hvit, når spilleren hopper eller flyr i spillet vil RGB slå seg av, 1 er en annen blokk med RGB -farge 128, 128, 128 og så videre …

#Rainbow Colors

regnbue_farger = {

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

}

For ullblokkene gjør vi det samme, men det er viktig å huske at alle blokkene har en ID på 35, i denne listen definerer vi undertypene til blokken som er ullblokk. Ulike ullundertyper har forskjellige farger, men alle er ullblokker.

ullfarger = {

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

}

Når vi er ferdig med å definere hovedprogrammet vårt, klasser og funksjoner, er det på tide å integrere med CrowPi2 RGB LED -sensoren ombord.

Hovedprogrammet vil ta parameterne vi definerte tidligere og påvirke maskinvaren.

Vi skal bruke CrowPi2 RGB LED for å lyse dem opp basert på trinnene vi gjør inne i Minecraft Pi på hver blokk, la oss komme i gang!

Det første vi skal gjøre er å generere noen ullblokker med kommandoer og lage en while -loop, for å holde programmet i gang så lenge vi spiller spillet.

Vi må hente noen data fra spilleren, først bruker vi kommandoen player.getPos () for å få spillerposisjonen, så bruker vi getBlockWithData () for å få blokken vi for øyeblikket står på (y -koordinaten er -1 som er betyr under spilleren)

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)

mens det er sant:

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

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

print (blockType)

Deretter sjekker vi om blokken er ullblokk, blokk -ID -nummer 35, hvis det er det, vil vi referere til wool_colors med fargen på blokken basert på ID -en til ordlisten og lyse opp den riktige fargen tilsvarende.

hvis blockType == 35:

# tilpassede ullfarger

matrixObject.clean (strip, wool_colors [str (data)])

Hvis det ikke er ullblokk, sjekker vi om blokken for øyeblikket er inne i regnbue_farger -ordboken for å unngå unntak. Hvis det er det, fortsetter vi med å ta fargen og endre RGB.

if str (blockType) i rainbow_colors:

print (rainbow_colors [str (blockType)])

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

sove (0,5)

Du kan alltid prøve å legge til flere blokker i rainbow_color for å legge til flere farger og støtte for flere blokker!

Perfekt! Å gjøre prosjekter med tilbehør er komplisert, men med CrowPi2 integrerte kretser blir ting mye enklere! Dessuten er det mer enn 20 sensorer og komponenter på CrowPi2, som lar deg oppnå dine ideelle prosjekter og til og med AI -prosjekter!

Nedenfor er den komplette koden:

Trinn 10: Bruke CrowPi2-the Result

Åpne spillet og kjør skriptet, du vil se resultatet i videoen ovenfor:

Trinn 11: Bruke CrowPi2- Gå videre

Nå har vi fullført vårt fargerike prosjekt i Minecraft -spillet med CrowPi2. Hvorfor ikke prøve å bruke andre sensorer og komponenter på CrowPi2 for å leke med spillet, for eksempel joystick for å kontrollere spillerens bevegelse, RFID for å generere blokker basert på forskjellige NFC -kort osv. Ha det gøy med spillet ditt på CrowPi2 og håper du kan gjøre det flere utrolige prosjekter med CrowPi2!

Nå er CrowPi2 på Kickstarter nå, du kan også nyte den attraktive prisen.

Legg til linken til Kickstarter -siden CrowPi2

Anbefalt: