Tabla de contenido:

Construye Rainbow Interactive Bridge usando Minecraft Raspberry Pi Edition: 11 pasos
Construye Rainbow Interactive Bridge usando Minecraft Raspberry Pi Edition: 11 pasos

Video: Construye Rainbow Interactive Bridge usando Minecraft Raspberry Pi Edition: 11 pasos

Video: Construye Rainbow Interactive Bridge usando Minecraft Raspberry Pi Edition: 11 pasos
Video: Minecraft Live 2020: Full Show 2024, Noviembre
Anonim
Image
Image

Ayer, vi a mi sobrino de 8 años jugando Minecraft con la Raspberry Pi que le di antes, luego se me ocurrió una idea: usar código para hacer un proyecto de bloques LED Minecraft-pi personalizado y emocionante. Minecraft Pi es una excelente manera de comenzar con la microcomputadora Raspberry Pi, Minecraft Pi es una versión especial hecha a medida de Minecraft que nos permite interactuar con el juego usando una API Python mortalmente simple para personalizar la experiencia del juego y los accesorios.

Hay muchos proyectos que puedes hacer en el mundo de Minecraft con la Raspberry Pi pero específicamente para nosotros no fue suficiente, buscábamos algo desafiante y parpadeante al mismo tiempo. En este proyecto, pisaremos varios bloques de Minecraft, detectaremos el ID del bloque y detectaremos el color del bloque específico que pisamos, según el color que iluminaremos nuestro LED RGB para crear un juego de pasos interactivo.

Usaré dos métodos para lograr el efecto, el primero es usar los accesorios, que pueden ser muy caóticos…; el segundo es usar CrowPi2 (computadora de aprendizaje con muchos sensores, actualmente financiada por crowdfunding en Kickstarter: CrowPi2)

¡Empecemos y veamos cómo archivar un proyecto tan asombroso!

Suministros

El CrowPi2 ahora está disponible en el kickstarter, el proyecto CrowPi2 ha recaudado casi $ 250k.

Pulse el enlace:

Método 1 Uso de accesorios

Paso 1: Materiales

● 1 x Raspberry Pi 4 modelo B

● 1 x tarjeta TF con imagen

● 1 x fuente de alimentación Raspberry Pi

● 1 monitor de 10,1 pulgadas

● 1 x fuente de alimentación para monitor

● 1 x cable HDMI

● 1 x teclado y mouse

● 1 x LED RGB (cátodo común)

● 4 x Jerséis (de mujer a mujer)

Paso 2: diagrama de conexión

Diagrama de conexión
Diagrama de conexión

En realidad, hay tres luces en el LED de color RGB, que son luz roja, luz verde y luz azul. Controla estas tres luces para que emitan luz de diferentes intensidades, y cuando se mezclan, pueden emitir luz de varios colores. Los cuatro pines de la luz LED son GND, R, G y B, respectivamente. El LED RGB que utilicé es un cátodo común y la conexión a la Raspberry Pi es la siguiente:

RaspberryPi 4B (en el nombre de la función) LED RGB

GPIO0 1 ROJO

GPIO1 3 VERDE

GPIO2 4 AZUL

TIERRA 2 TIERRA

La segunda imagen es la conexión de hardware.

Paso 3: configurar para SPI

Configurar para SPI
Configurar para SPI
Configurar para SPI
Configurar para SPI
Configurar para SPI
Configurar para SPI
Configurar para SPI
Configurar para SPI

Debido a que necesitamos usar el SPI para controlar el RGB, primero debemos habilitar la interfaz SPI, que está deshabilitada de manera predeterminada. Puede seguir los pasos a continuación para habilitar la interfaz SPI:

Primero, puede usar la GUI de escritorio dirigiéndose a las referencias de menú de inicio de Pi Configuración de Raspberry Pi, como se muestra en la primera imagen.

En segundo lugar, navegue hasta "Interfaces", habilite SPI y haga clic en Aceptar (la segunda imagen).

Por último, reinicie su Pi para asegurarse de que los cambios surtan efecto. Haga clic en Pi Start Menu PreferencesShutdown. Como solo necesitamos reiniciar, haga clic en el botón Reiniciar.

Paso 4: el código

Comenzaremos escribiendo nuestro código Python, primero, comenzaremos importando algunas bibliotecas que necesitaremos para integrar nuestro código con el mundo de Minecraft. Luego, importaremos la biblioteca de tiempo, específicamente una función llamada dormir. La función sleep nos permitirá esperar un intervalo específico antes de realizar una función. Por último, pero no menos importante, importamos la biblioteca RPi. GPIO que nos permite controlar el GPIO en Raspberry Pi.

desde mcpi.minecraft importar Minecraft desde el tiempo importar dormir importar RPi. GPIO como GPIO

Y eso es todo, hemos terminado con la importación de las bibliotecas, ¡ahora es el momento de usarlas! Lo primero es usar la biblioteca de Minecraft, queremos conectar nuestro script de Python al mundo de Minecraft, podemos hacerlo invocando la función init () de la biblioteca de MCPI y luego configurar el modo de GPIO y deshabilitar la advertencia.

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

Ahora, definimos algunos colores del arco iris en hexadecimal para que podamos cambiar los colores RGB.

BLANCO = 0xFFFFFF ROJO = 0xFF0000 NARANJA = 0xFF7F00 AMARILLO = 0xFFFF00 VERDE = 0x00FF00 CIAN = 0x00FFFF AZUL = 0x0000FF PÚRPURA = 0xFF00FF MAGENTA = 0xFF0090

A continuación, necesitamos definir algunas variables para registrar el color del bloque de lana, que ya está definido en la lista de bloques 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

El ID del bloque de lana en Minecraft es 35. Ahora, tenemos que configurar el pin para el LED RGB y configurarlo para ellos.

clavija_ roja = 17 clavija_verde = 18 clavija_azul = 27

GPIO.setup (red_pin, GPIO. OUT, inicial = 1) GPIO.setup (green_pin, GPIO. OUT, inicial = 1) GPIO.setup (blue_pin, GPIO. OUT, inicial = 1)

Luego, configure el PWM para cada pin, tenga en cuenta que el rango del valor de PWM es 0-100. Aquí, primero configuramos el color del LED RGB en blanco (100, 100, 100).

rojo = GPIO. PWM (pin_rojo, 100)

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

Lo siguiente es crear dos funciones, que se pueden usar para decodificar el color e iluminar el LED RGB. Tenga en cuenta que la función map2hundred () es para mapear valores de 255 a 100, como dijimos antes, el valor de PWM debe ser 0-100.

def map2hundred (valor): return int (valor * 100/255)

def set_color (código_color): # Decodificar valor_rojo = código_color >> 16 y 0xFF valor_verde = código_color >> 8 y 0xFF valor_azul = código_color >> 0 y 0xFF

# Valores del mapa red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

# ¡Encender! red. ChangeDutyCycle (valor_rojo) verde. ChangeDutyCycle (valor_verde) azul. ChangeDutyCycle (valor_azul)

¡Bien hecho! Es hora de iniciar nuestro programa principal, espere, se debe definir otra variable para registrar el código de color del bloque de lana antes del programa principal:

last_data = 0 prueba: 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) mientras que Verdadero: x, y, z = mc.player.getPos () # posición del jugador (x, y, z) bloque = mc.getBlockWithData (x, y-1, z) # ID de bloque #print (bloque) if block.id == LANA y 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_ AMARILLO: 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) 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) excepto KeyboardInterrupt: pass GPIO.cleanup ()

Como se muestra arriba en el programa principal, primero para usar algunos comandos para generar algunos bloques de lana de colores, luego necesitamos averiguar la posición del jugador para que podamos obtener la identificación de los bloques y su código de color. Después de obtener la información del bloque, usaremos la declaración para determinar si el bloque debajo del jugador es un bloque de lana y si tiene el código de color. En caso afirmativo, juzgue de qué color es el bloque de lana y llame a la función set_color () para cambiar el color del LED RGB del mismo modo que el bloque de lana.

Además, agregamos una declaración try / except para detectar la excepción de la interrupción del usuario cuando queremos salir del programa para borrar la salida de los pines GPIO.

Se adjunta el código completo.

Bien hecho, tantos complementos y demasiado complicado ¿no? ¡No te preocupes, veamos el segundo método para lograr el proyecto, que te hará sentir más flexible y conveniente, que es usar nuestro CrowPi2!

Paso 5: el resultado

Image
Image

Abra el juego y ejecute el script, verá el resultado en el video de arriba

Luego usaremos CrowPi2 para construir el puente interactivo Rainbow a continuación

Paso 6: Uso de materiales de CrowPi2

● 1 x CrowPi2

Paso 7: uso de CrowPi2: diagrama de conexión

No hay necesidad. Hay muchos sensores y componentes útiles (más de 20) en CrowPi2, todo en una computadora portátil raspberry pi y una plataforma educativa STEM que nos permite hacer múltiples proyectos con facilidad y sin sudar. En este caso, usaremos un módulo atractivo y colorido en CrowPi2, que es un módulo de matriz RGB 8x8, que nos permite controlar 64 LED RGB al mismo tiempo.

Paso 8: Uso de CrowPi2: configurar para SPI

No hay necesidad. ¡CrowPi2 viene con una imagen incorporada con un sistema de aprendizaje! Todo ha sido preparado, lo que significa que puedes programar y aprender directamente. Además, con nuestro CrowPi2 es fácil y ya está integrado en la placa como una plataforma STEAM lista para funcionar.

Paso 9: Uso de CrowPi2: el código

¡Ahora es el momento de comenzar nuestro programa! Primero, importe algunas bibliotecas, como la biblioteca MCPI que es la biblioteca Python de Minecraft Pi que nos permite usar una API muy simple para integrar con el mundo de Minecraft; biblioteca de tiempo que nos permite la función sleep para esperar un intervalo específico antes de realizar una función; Librería RPi. GPIO que nos permite controlar los pines GPIO de Raspberry Pi.

desde mcpi.minecraft importar Minecraft desde el tiempo importar dormir importar RPi. GPIO como GPIO

Finalmente, importaremos una biblioteca llamada rpi_ws281x que es la biblioteca de matriz RGB, dentro de la biblioteca, hay múltiples funciones que usaremos, como PixelStrip para configurar el objeto de tira de LED y Color para configurar un objeto de color RGB para que se encienda. nuestros LED RGB

de rpi_ws281x importar PixelStrip, Color

Y eso es todo, hemos terminado con la importación de las bibliotecas, ¡ahora es el momento de usarlas! Igualmente, lo primero es usar la biblioteca de Minecraft, queremos conectar nuestro script de Python al mundo de Minecraft, podemos hacerlo invocando la función init de la biblioteca de MCPI:

mc = Minecraft.create ()

Ahora, cada vez que queremos realizar operaciones en el mundo minecrat, podemos usar el objeto mc.

El siguiente paso será definir la clase de matriz de LED RGB que usaremos para controlar nuestros LED RGB, inicializamos la clase con configuración básica como número de leds, pines, brillo etc…

creamos una función llamada clean que "limpiará" menos con un color específico dado y también una función llamada run que inicializará el objeto LED RGB real la primera vez que queramos usarlo.

clase RGB_Matrix:

def _init _ (yo):

# Configuración de la tira de LED:

self. LED_COUNT = 64 # Número de píxeles LED.

self. LED_PIN = 12 # Pin GPIO conectado a los píxeles (¡18 usa PWM!).

self. LED_FREQ_HZ = 800000 # Frecuencia de señal LED en hercios (generalmente 800khz)

self. LED_DMA = 10 # canal DMA para usar para generar señal (intente 10)

self. LED_BRIGHTNESS = 10 # Establecer en 0 para el más oscuro y 255 para el más brillante

self. LED_INVERT = False # Verdadero para invertir la señal

self. LED_CHANNEL = 0 # establecido en '1' para GPIOs 13, 19, 41, 45 o 53

# Definir funciones que animen LED de varias formas. def clean (uno mismo, tira, color):

# limpie todos los LED a la vez

para i en el rango (strip.numPixels ()):

strip.setPixelColor (i, color)

strip.show ()

def ejecutar (auto):

# Cree un objeto NeoPixel con la configuración adecuada.

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

tratar:

tira de retorno

excepto KeyboardInterrupt:

# limpiar el LED de la matriz antes de la interrupción

self.clean (tira)

Una vez que hayamos terminado con lo anterior, es hora de invocar esas clases y crear objetos que podamos usar en nuestro código, primero creemos un objeto de matriz de LED RGB que podamos usar usando la clase que hemos creado anteriormente:

matrixObject = RGB_Matrix ()

Ahora usemos este objeto para crear un objeto de tira de LED activo que usaremos para controlar nuestros LED individuales en la matriz RGB:

tira = matrixObject.run ()

Finalmente, para activar esta tira, necesitaremos ejecutar una última función:

strip.begin ()

La API de Minecraft incluye muchos bloques, cada bloque de Minecraft tiene su propia identificación. En nuestro ejemplo, tomamos una cantidad de bloques de Minecraft e intentamos adivinar qué color es el más adecuado para ellos.

RGB significa rojo, verde y azul, por lo que necesitaremos 3 valores diferentes que van de 0 a 255 para cada uno, los colores pueden ser en formato HEX o RGB, estamos usando el formato RGB para nuestro ejemplo.

En el mundo de Minecraft Pi hay ID de bloques normales e ID de bloques de lana especiales, la lana especial tiene el número de ID 35 pero con subnúmeros que van a muchos ID diferentes … Resolveremos este problema creando 2 listas separadas, una para bloques normales y una lista para bloques especiales de lana:

La primera lista es para bloques normales, por ejemplo, 0 representa el bloque de aire, lo configuraremos en color 0, 0, 0 que está en blanco o completamente blanco, cuando el jugador salte o vuele en el juego, el RGB se apagará, 1 es un bloque diferente con color RGB 128, 128, 128 y así sucesivamente …

#Colores del arcoiris

rainbow_colors = {

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

}

Para los bloques de lana hacemos lo mismo pero es importante recordar que todos los bloques tienen un ID de 35, en esta lista definimos los subtipos del bloque que es bloque de lana. Los diferentes subtipos de lana tienen diferentes colores, pero todos son bloques de lana.

colores_de_lana = {

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

}

Ahora que hemos terminado de definir nuestro programa principal, clases y funciones, es el momento de integrarnos con nuestro sensor LED RGB CrowPi2 a bordo.

El programa principal tomará los parámetros que definimos anteriormente y pondrá el impacto en el hardware.

Vamos a utilizar el LED RGB CrowPi2 para iluminarlos según los pasos que hacemos dentro de Minecraft Pi en cada bloque, ¡comencemos!

Lo primero que haremos es generar algunos bloques de lana con comandos y crear un bucle while, para mantener el programa en ejecución mientras jugamos el juego.

Necesitaremos obtener algunos datos del jugador, primero usamos el comando player.getPos () para obtener la posición del jugador, luego usamos getBlockWithData () para obtener el bloque en el que estamos actualmente (la coordenada y es -1 que significa debajo del 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)

mientras que es cierto:

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

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

imprimir (blockType)

Luego, comprobaremos si el bloque es de lana, bloque ID número 35, si lo es, nos referiremos a wool_colors con el color del bloque basado en el ID del diccionario e iluminaremos el color correcto en consecuencia.

si blockType == 35:

# colores de lana personalizados

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

Si no es un bloque de lana, comprobaremos si el bloque se encuentra actualmente dentro del diccionario rainbow_colors para evitar excepciones, si lo es, continuaremos tomando el color y cambiando el RGB.

si str (blockType) en rainbow_colors:

imprimir (colores_arco iris [str (blockType)])

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

dormir (0.5)

¡Siempre puede intentar agregar más bloques al rainbow_color para agregar más colores y más bloques de soporte!

¡Perfecto! Hacer proyectos con accesorios es complicado, pero con el circuito integrado CrowPi2, ¡las cosas se vuelven mucho más fáciles! Además, hay más de 20 sensores y componentes en CrowPi2, lo que le permite lograr sus proyectos ideales e incluso proyectos de IA.

A continuación se muestra el código completo:

Paso 10: Uso de CrowPi2: el resultado

Abra el juego y ejecute el script, verá el resultado en el video de arriba:

Paso 11: Uso de CrowPi2: más allá

Ahora hemos terminado nuestro colorido proyecto en el juego de Minecraft con CrowPi2. ¿Por qué no intentar usar otros sensores y componentes en CrowPi2 para jugar con el juego, como un joystick para controlar el movimiento del jugador, RFID para generar bloques basados en diferentes tarjetas NFC, etc. Diviértete con tu juego en CrowPi2 y espero que puedas hacerlo? proyectos más increíbles con CrowPi2!

Ahora, CrowPi2 está en Kickstarter, también puede disfrutar del atractivo precio.

Adjunte el enlace de la página de Kickstarter CrowPi2

Recomendado: