Taula de continguts:
- Subministraments
- Pas 1: materials
- Pas 2: diagrama de connexió
- Pas 3: configureu per SPI
- Pas 4: el codi
- Pas 5: el resultat
- Pas 6: utilitzar CrowPi2-Materials
- Pas 7: utilitzar CrowPi2- Diagrama de connexió
- Pas 8: utilitzant CrowPi2- Configureu per SPI
- Pas 9: utilitzar CrowPi2- el codi
- Pas 10: utilitzar CrowPi2-the Result
- Pas 11: Utilitzar CrowPi2- Anar més enllà
Vídeo: Construeix el pont interactiu Rainbow mitjançant Minecraft Raspberry Pi Edition: 11 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:11
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ó
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
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
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:
Minecraft interactiu No introduïu espasa / signe (ESP32-CAM): 15 passos (amb imatges)
Minecraft interactiu No introduïu espasa / signe (ESP32-CAM): hi ha realment diversos motius pels quals aquest projecte va sorgir: 1. Com a autor de la biblioteca multitarea cooperativa TaskScheduler, sempre vaig tenir curiositat per combinar els avantatges de la multitarea cooperativa amb els avantatges de la preferència
Tutorial d'Acceleròmetre Arduino: Control d'un pont de vaixell mitjançant un servomotor: 5 passos
Tutorial de l’acceleròmetre Arduino: controlar un pont de vaixells mitjançant un servomotor: els sensors de l’acceleròmetre es troben ara a la majoria dels nostres telèfons intel·ligents per oferir-los una gran varietat d’ús i funcions que fem servir diàriament, sense ni tan sols saber que el responsable d’aquest és l’acceleròmetre. Una d'aquestes funcions és el control
Pont IR compatible amb Alexa mitjançant un ESP8266: 3 passos
Pont IR compatible amb Alexa mitjançant un ESP8266: volia una manera de controlar el meu televisor intel·ligent mitjançant Alexa. Malauradament el meu Hi-Sense 65 " Smart TV no pot controlar-se mitjançant WiFi. Hauria estat bo que tingués algun tipus d’API que pogués utilitzar per interactuar-hi, així que vaig crear un
Com es construeix una estació meteorològica mitjançant XinaBox i Ubidots mitjançant HTTP: 7 passos
Com construir una estació meteorològica amb XinaBox i Ubidots a través d’HTTP: apreneu a fer la vostra pròpia estació meteorològica a Ubidots mitjançant XinaBox xChips (IP01, CW01 i SW01) El mòdul ESP8266 Core i Wi-Fi (xChip CW01) permet als usuaris enviar dades dels xChips modulars de XinaBox al núvol. Aquestes dades es poden controlar remotament
Construeix l'aparell Rainbow: 11 passos (amb imatges)
Construeix l’aparell de l’arc de Sant Martí: L’aparell de l’arc de Sant Martí (també conegut com el cromascopi astral) és un aparell òptic que et permet veure l’energia colorida de les coses normals. En aquest instructiu, us mostraré com construir el vostre propi per explorar les vibracions tecnicolor de les coses