Taula de continguts:

Construeix el pont interactiu Rainbow mitjançant Minecraft Raspberry Pi Edition: 11 passos
Construeix el pont interactiu Rainbow mitjançant Minecraft Raspberry Pi Edition: 11 passos

Vídeo: Construeix el pont interactiu Rainbow mitjançant Minecraft Raspberry Pi Edition: 11 passos

Vídeo: Construeix el pont interactiu Rainbow mitjançant Minecraft Raspberry Pi Edition: 11 passos
Vídeo: From C to Python by Ross Rheingans-Yoo 2024, De novembre
Anonim
Image
Image

Ahir vaig veure el meu nebot de vuit anys jugant a Minecraft amb el Raspberry Pi que li vaig donar abans, i em vaig fer una idea que utilitza codi per fer un projecte de blocs LED Minecraft-pi personalitzat i emocionant. Minecraft Pi és una bona manera d’iniciar-se amb el microordinador Raspberry Pi; el Minecraft Pi és una versió personalitzada de Minecraft que ens permet interactuar amb el joc mitjançant una API de Python senzilla i mortal per personalitzar l’experiència del joc i els accessoris.

Hi ha molts projectes que podeu fer al món de Minecraft amb el Raspberry Pi, però específicament per a nosaltres no n’hi havia prou, buscàvem alguna cosa desafiant i parpellejant alhora. En aquest projecte, trepitjarem diversos blocs de Minecraft, detectarem l’identificador del bloc i detectarem el color del bloc específic que vam trepitjar, en funció del color, encendrem el LED RGB per crear un joc de passos interactiu.

Utilitzaré dos mètodes per aconseguir l'efecte, el primer és utilitzar accessoris, que poden ser molt caòtics …; el segon utilitza CrowPi2 (ordinador d’aprenentatge amb molts sensors, actualment finançat a través de Kickstarter: CrowPi2)

comencem i veiem com arxivar un projecte tan increïble.

Subministraments

El CrowPi2 ara està en directe al kickstarter, el projecte CrowPi2 ha recaptat gairebé 250.000 dòlars.

Feu clic a l'enllaç:

Mètode 1 Ús d'accessoris

Pas 1: materials

● 1 x Raspberry Pi 4 model B

● 1 targeta TF amb imatge

● 1 alimentació Raspberry Pi

● Monitor d'1 x 10,1 polzades

● 1 x font d'alimentació per al monitor

● 1 x cable HDMI

● 1 x teclat i ratolí

● 1 x LED RGB (càtode comú)

● 4 x Jumpers (femení a femení)

Pas 2: diagrama de connexió

Diagrama de connexió
Diagrama de connexió

En realitat, hi ha tres llums al LED de color RGB, que són la llum vermella, la llum verda i la llum blava. Controleu aquestes tres llums per emetre llum de diferents intensitats i, quan es barregen, poden emetre llum de diversos colors. Els quatre pins de la llum LED són GND, R, G i B, respectivament. El LED RGB que he fet servir és un càtode comú i la connexió amb el Raspberry Pi és la següent:

LED RGB de RaspberryPi 4B (en nom de la funció)

GPIO0 1 VERMELL

GPIO1 3 VERD

GPIO2 4 BLAU

GND 2 GND

La segona imatge és la connexió de maquinari

Pas 3: configureu per SPI

Configureu per SPI
Configureu per SPI
Configureu per SPI
Configureu per SPI
Configureu per SPI
Configureu per SPI
Configureu per SPI
Configureu per SPI

Com que hem d’utilitzar l’SPI per controlar el RGB, primer hem d’habilitar la interfície SPI, que està desactivada per defecte. Podeu seguir els passos següents per habilitar la interfície SPI:

En primer lloc, podeu utilitzar la interfície gràfica d’escriptori dirigint-vos a la configuració de MenupreferencesRaspberry Pi per iniciar Pi, tal com es mostra a la primera imatge.

En segon lloc, aneu a "Interfícies" i activeu SPI i feu clic a D'acord (la segona imatge).

Finalment, reinicieu el Pi per assegurar-vos que els canvis entrin en vigor. Feu clic a Pi Inici Menú Preferències Apagat. Com que només hem de reiniciar, feu clic al botó Reiniciar.

Pas 4: el codi

Començarem escrivint el nostre codi python; primer, començarem per importar algunes biblioteques que necessitarem per integrar el nostre codi amb el món de Minecraft. A continuació, importarem la biblioteca de temps, concretament una funció anomenada sleep. La funció de son ens permetrà esperar un interval específic abans de realitzar una funció. Per últim, però no menys important, importem la biblioteca RPi. GPIO que ens permet controlar el GPIO a Raspberry Pi.

d'importació mcpi.minecraft Minecraft d'importació temporal importació RPi. GPIO com a GPIO

I ja està, ja hem fet la importació de les biblioteques, ara és hora d’utilitzar-les! Primer de tot, és fer servir la biblioteca Minecraft, volem connectar el nostre script python al món Minecraft, ho podem fer invocant la funció init () de la biblioteca MCPI i després establir el mode de GPIO i desactivar l’avís.

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

Ara, definim alguns colors de l'arc de Sant Martí en hexadecimal per poder canviar els colors RGB.

BLANC = 0xFFFFFF VERMELL = 0xFF0000 TARONJA = 0xFF7F00 GROC = 0xFFFF00 VERD = 0x00FF00 CIAN = 0x00FFFF BLAU = 0x0000FF PURPLE = 0xFF00FF MAGENTA = 0xFF0090

A continuació, hem de definir algunes variables per registrar el color del bloc de llana, que ja està definit a la llista de blocs de 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

La identificació del bloc de llana a Minecraft és 35. Ara, hem de configurar el pin per al LED RGB i configurar-los.

pin vermell = 17 pin verd = 18 pin blu = 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)

A continuació, configureu el PWM per a cada pin i tingueu en compte que l’interval del valor PWM és de 0 a 100. Aquí, primer establim el color del LED RGB al blanc (100, 100, 100).

vermell = GPIO. PWM (pin_ vermell, 100)

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

A continuació, es creen dues funcions que es poden utilitzar per descodificar el color i il·luminar el LED RGB. Tingueu en compte que la funció map2hundred () és assignar valors de 255 a 100, com hem dit abans, el valor PWM hauria de ser 0-100.

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

# Valors del mapa red_value = map2hundred (red_value) green_value = mapa2hundred (green_value) blue_value = map2hundred (blue_value)

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

Ben fet! És hora d’iniciar el nostre programa principal, espereu, s’hauria de definir una altra variable per gravar el codi de color del bloc de llana abans del programa principal:

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.set Blocks (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 Blocks (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 Blocks (x + 24, y, z, x + 25, y, z + 2, 35, 14) mentre és True: x, y, z = mc.player.getPos () # posició del jugador (x, y, z) block = mc.getBlockWithData (x, y-1, z) # ID de bloc #print (bloc) si 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) si block.data == W_ GROC: print ("Groc!") Set_color (GROC) si block.data == W_GREEN: print ("Verd!") Set_color (VERD) si 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) excepte KeyboardInterrupt: passa GPIO.cleanup ()

Com es mostra el programa principal, primer, per utilitzar algunes ordres per generar uns blocs de llana de colors, després hem d’esbrinar la posició del jugador per poder obtenir la identificació dels blocs i el seu codi de color. Després d’obtenir la informació del bloc, utilitzarem la declaració per determinar si el bloc situat sota el reproductor és un bloc de llana i si té el codi de color. Si és així, jutgeu de quin color és el bloc de llana i truqueu la funció set_color () per canviar el color del led RGB igual que el bloc de llana.

A més, afegim una sentència try / except per obtenir l'excepció de la interrupció de l'usuari quan volem sortir del programa per esborrar la sortida dels pins GPIO.

S'adjunta el codi complet.

Ben fet, tants accessoris i massa complicat no? No us preocupeu, vegem el segon mètode per aconseguir el projecte, que us farà sentir més flexible i còmode, que utilitza el nostre CrowPi2.

Pas 5: el resultat

Image
Image

Obriu el joc i executeu l'script, veureu el resultat al vídeo anterior

A continuació, utilitzarem CrowPi2 per construir el pont interactiu Rainbow a continuació

Pas 6: utilitzar CrowPi2-Materials

● 1 x CrowPi2

Pas 7: utilitzar CrowPi2- Diagrama de connexió

No cal. Hi ha molts sensors i components útils (més de 20) a CrowPi2, tot en un portàtil raspberry pi i una plataforma d’educació STEM que ens permet fer múltiples projectes amb facilitat i sense suor. En aquest cas, utilitzarem un mòdul atractiu i vistós a CrowPi2, que és un mòdul de matriu RGB de 8x8, que ens permet controlar 64 leds RGB al mateix temps.

Pas 8: utilitzant CrowPi2- Configureu per SPI

No cal. CrowPi2 ve amb una imatge integrada amb un sistema d'aprenentatge. Tot està preparat, cosa que significa que podeu programar i aprendre directament. A més, amb el nostre CrowPi2 és fàcil i ja està integrat al tauler com a plataforma STEAM a punt.

Pas 9: utilitzar CrowPi2- el codi

Ara és el moment de començar el nostre programa! Primer, importeu algunes biblioteques, com la biblioteca MCPI, que és la biblioteca Minecraft Pi Python que ens permet utilitzar una API molt senzilla per integrar-la amb el món Minecraft; biblioteca de temps que ens permet la funció de son per esperar un interval específic abans de realitzar una funció; Biblioteca RPi. GPIO que ens permet controlar els pins GPIO de Raspberry Pi.

d'importació mcpi.minecraft Minecraft d'importació temporal importació RPi. GPIO com a GPIO

Finalment, importarem una biblioteca anomenada rpi_ws281x, que és la biblioteca RGB Matrix, dins de la biblioteca, hi ha diverses funcions que utilitzarem, com ara PixelStrip per configurar l’objecte de tira LED i Color per configurar un objecte de color RGB que s’encengui. els nostres LED RGB

d'importació rpi_ws281x PixelStrip, Color

I ja està, ja hem fet la importació de les biblioteques, ara és hora d’utilitzar-les! De la mateixa manera, el primer és utilitzar la biblioteca Minecraft; volem connectar el nostre script Python al món Minecraft; ho podem fer invocant la funció init de la biblioteca MCPI:

mc = Minecraft.create ()

Ara, cada vegada que volem realitzar operacions al món minecrat, podem utilitzar l'objecte mc.

El següent pas serà definir la classe de matriu LED RGB que utilitzarem per controlar els nostres LED RGB, inicialitzem la classe amb una configuració bàsica com ara el nombre de leds, pins, brillantor, etc.

creem una funció anomenada neta que "netejarà" menys amb un color específic donat i també una funció anomenada execució que inicialitzarà l'objecte LED RGB real la primera vegada que el vulguem utilitzar.

classe RGB_Matrix:

def _init _ (auto):

# Configuració de tira LED:

self. LED_COUNT = 64 # Nombre de píxels LED.

self. LED_PIN = 12 # pin GPIO connectat als píxels (18 utilitza PWM!).

self. LED_FREQ_HZ = 800000 # freqüència del senyal LED en Hz (normalment 800 kHz)

self. LED_DMA = 10 # canal DMA que cal utilitzar per generar senyal (proveu 10)

self. LED_BRIGHTNESS = 10 # Estableix a 0 per a les més fosques i 255 per a les més brillants

self. LED_INVERT = False # True per invertir el senyal

self. LED_CHANNEL = 0 # definit a '1' per als GPIO 13, 19, 41, 45 o 53

# Definiu funcions que animen els LED de diverses maneres. neteja definida (auto, tira, color):

# Esborreu tots els LED alhora

per a l'interval (strip.numPixels ()):

strip.setPixelColor (i, color)

strip.show ()

def run (auto):

# Creeu un objecte NeoPixel amb la configuració adequada.

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

provar:

tira de retorn

excepte KeyboardInterrupt:

# netejar el LED de la matriu abans de la interrupció

self.clean (tira)

Després d’haver acabat amb l’anterior, és hora d’invocar aquestes classes i crear objectes que puguem utilitzar al nostre codi, primer creem un objecte de matriu LED RGB que podem utilitzar amb la classe que hem creat anteriorment:

matrixObject = RGB_Matrix ()

Ara fem servir aquest objecte per crear un objecte de tira LED actiu que utilitzarem per controlar els nostres LED individuals a la matriu RGB:

tira = matrixObject.run ()

Finalment, per activar aquesta franja, haurem d'executar una última funció:

strip.begin ()

L’API Minecraft inclou molts blocs, cada bloc Minecraft té el seu propi identificador. En el nostre exemple, hem pres una quantitat de blocs de Minecraft i hem intentat endevinar quin color és el més adequat per a ells.

RGB significa vermell, verd i blau, de manera que necessitarem 3 valors diferents que van del 0 al 255 per a cadascun, els colors poden ser de format HEX o RGB; per exemple, fem servir el format RGB.

Al món de Minecraft Pi hi ha identificadors de blocs normals i identificadors de blocs de llana especials, la llana especial té el número d’identificació 35, però amb subnombres que van de molts identificadors diferents … Resoldrem aquest problema creant 2 llistes separades, una per a blocs normals i una llista per a blocs especials de llana:

La primera llista és per a blocs normals, per exemple, 0 representa un bloc d’aire, l’establirem amb el color 0, 0, 0, que està en blanc o blanc complet, quan el jugador saltarà o volarà al joc, el RGB s’apagarà, 1 és un bloc diferent amb el color RGB 128, 128, 128, etc.

#Colors Arc de Sant Martí

colors_arc de Sant Martí = {

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

}

Als blocs de llana fem el mateix, però és important recordar que tots els blocs tenen un ID de 35, en aquesta llista definim els subtipus del bloc que és el bloc de llana. Els diferents subtipus de llana tenen colors diferents, però tots són blocs de llana.

colors_llana = {

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

}

Quan acabem de definir el nostre programa, classes i funcions principals, ha arribat el moment d’integrar-nos amb el nostre sensor de placa LED CrowPi2 RGB.

El programa principal prendrà els paràmetres que hem definit anteriorment i afectarà el maquinari.

Utilitzarem el LED RGB CrowPi2 per il·luminar-los en funció dels passos que fem dins del Minecraft Pi a cada bloc. Comencem!

El primer que farem és generar alguns blocs de llana amb ordres i crear un bucle while, per mantenir el programa en execució mentre juguem.

Haurem d’obtenir algunes dades del jugador, primer fem servir l’ordre player.getPos () per obtenir la posició del jugador i, a continuació, utilitzarem getBlockWithData () per obtenir el bloc en què estem actualment (la coordenada y és -1 que significa sota el jugador)

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)

mentre que és cert:

x, y, z = mc.player.getPos () # posició del jugador (x, y, z)

blockType, data = mc.getBlockWithData (x, y-1, z) # identificador de bloc

imprimir (blockType)

A continuació, comprovarem si el bloc és de bloc de llana, el número d’identificació del bloc número 35; si ho és, ens referirem a colors_llana amb el color del bloc en funció de la identificació del diccionari i il·luminarem el color adequat en conseqüència.

si blockType == 35:

# colors de llana personalitzats

matrixObject.clean (tira, colors_llana [str (dades)])

Si no és un bloc de llana, comprovarem si el bloc es troba actualment dins del diccionari rainbow_colors per evitar excepcions, si ho és, continuarem agafant el color i canviant el RGB.

si str (blockType) en rainbow_colors:

print (rainbow_colors [str (blockType)])

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

dormir (0,5)

Sempre podeu provar d’afegir més blocs al rainbow_color per afegir més colors i més suports.

Perfecte! Fer projectes amb accessoris és complicat, però amb el circuit integrat CrowPi2, les coses es posen molt més fàcils. A més, hi ha més de 20 sensors i components a CrowPi2, cosa que us permet assolir els vostres projectes ideals i fins i tot els projectes d’IA.

A continuació es mostra el codi complet:

Pas 10: utilitzar CrowPi2-the Result

Obriu el joc i executeu el guió, veureu el resultat al vídeo anterior:

Pas 11: Utilitzar CrowPi2- Anar més enllà

Ara hem acabat el nostre colorit projecte en el joc Minecraft amb CrowPi2. Per què no intenteu utilitzar altres sensors i components de CrowPi2 per jugar amb el joc, com ara el joystick per controlar el moviment del jugador, RFID per generar blocs basats en diferents cartes NFC i etc. Diverteix-te amb el teu joc a CrowPi2 i espero que puguis fer-ho projectes més increïbles amb CrowPi2!

Ara, CrowPi2 és a Kickstarter ara, també podeu gaudir d’un preu atractiu.

Adjunteu l'enllaç de la pàgina Kickstarter CrowPi2

Recomanat: