Inhoudsopgave:

Bouw Rainbow Interactive Bridge met Minecraft Raspberry Pi Edition - Ajarnpa
Bouw Rainbow Interactive Bridge met Minecraft Raspberry Pi Edition - Ajarnpa

Video: Bouw Rainbow Interactive Bridge met Minecraft Raspberry Pi Edition - Ajarnpa

Video: Bouw Rainbow Interactive Bridge met Minecraft Raspberry Pi Edition - Ajarnpa
Video: Mikey Never Give Up Mining! - Minecraft Maizen Animation #shorts 2024, November
Anonim
Image
Image

Gisteren zag ik mijn 8-jarige neefje Minecraft spelen met de Raspberry Pi die ik hem eerder had gegeven, toen kreeg ik een idee, namelijk het gebruik van code om een aangepast en opwindend Minecraft-pi LED-blokkenproject te maken. Minecraft Pi is een geweldige manier om aan de slag te gaan met de Raspberry Pi-microcomputer, de Minecraft Pi is een speciale op maat gemaakte versie van Minecraft waarmee we met het spel kunnen communiceren met behulp van een dodelijk eenvoudige Python-API om de game-ervaring en rekwisieten aan te passen!

Er zijn veel projecten die je kunt doen in de Minecraft-wereld met de Raspberry Pi, maar specifiek voor ons was het niet genoeg, we waren op zoek naar iets uitdagends en tegelijkertijd knipperend. In dit project stappen we op meerdere Minecraft-blokken, detecteren we de ID van het blok en detecteren we de kleur van het specifieke blok waarop we zijn gestapt, op basis van de kleur die we onze RGB-LED zullen verlichten om een interactief stappenspel te maken!

Ik zal twee methoden gebruiken om het effect te bereiken, de eerste is het gebruik van de accessoires, wat erg chaotisch kan zijn …; de tweede is het gebruik van CrowPi2 (leercomputer met veel sensoren, momenteel gecrowdfund op Kickstarter:CrowPi2)

laten we beginnen en kijken hoe we zo'n geweldig project kunnen archiveren!

Benodigdheden

De CrowPi2 is nu live op de kickstarter, het CrowPi2-project heeft bijna $ 250k opgehaald.

Klik op de link:

Methode1 Accessoires gebruiken

Stap 1: Materialen

● 1 x Raspberry Pi 4 model B

● 1 x TF-kaart met afbeelding

● 1 x Raspberry Pi-voeding

● 1 x 10,1 inch-monitor

● 1 x voeding voor monitor

● 1 x HDMI-kabel

● 1 x toetsenbord en muis

● 1 x RGB led (gemeenschappelijke kathode)

● 4 x Jumpers (vrouw naar vrouw)

Stap 2: Aansluitschema

Verbindingsdiagram
Verbindingsdiagram

Er zijn eigenlijk drie lampjes in de RGB-kleuren-LED, die rood licht, groen licht en blauw licht zijn. Bedien deze drie lichten om licht met verschillende intensiteiten uit te stralen, en wanneer ze worden gemengd, kunnen ze licht van verschillende kleuren uitstralen. De vier pinnen op het LED-lampje zijn respectievelijk GND, R, G en B. De RGB-LED die ik heb gebruikt, is een gemeenschappelijke kathode en de verbinding met de Raspberry Pi is als volgt:

RaspberryPi 4B (in functienaam) RGB LED

GPIO0 1 ROOD

GPIO1 3 GROEN

GPIO2 4 BLAUW

GND 2 GND

De tweede foto is de hardware-aansluiting

Stap 3: Configureren voor SPI

Configureren voor SPI
Configureren voor SPI
Configureren voor SPI
Configureren voor SPI
Configureren voor SPI
Configureren voor SPI
Configureren voor SPI
Configureren voor SPI

Omdat we de SPI moeten gebruiken om de RGB te besturen, moeten we eerst de SPI-interface inschakelen, die standaard is uitgeschakeld. U kunt de onderstaande stappen volgen om de SPI-interface in te schakelen:

Ten eerste kunt u de Desktop-GUI gebruiken door naar de Pi start MenuvoorkeurenRaspberry Pi-configuratie te gaan, zoals weergegeven in de eerste afbeelding.

Ten tweede, navigeer naar "Interfaces" en schakel SPI in en klik op OK (de tweede afbeelding).

Als laatste, herstart je Pi om ervoor te zorgen dat de wijzigingen van kracht worden. Klik op Pi Start MenuVoorkeurenAfsluiten. Omdat we gewoon opnieuw moeten opstarten, klikt u op de knop Opnieuw opstarten.

Stap 4: De code

We beginnen met het schrijven van onze python-code, eerst beginnen we met het importeren van een paar bibliotheken die we nodig hebben om onze code te integreren met de Minecraft-wereld. Vervolgens importeren we de tijdbibliotheek, met name een functie met de naam slaap. Met de slaapfunctie kunnen we een bepaald interval wachten voordat we een functie uitvoeren. Last but not least importeren we de RPi. GPIO-bibliotheek waarmee we de GPIO op Raspberry Pi kunnen besturen.

van mcpi.minecraft import Minecraft van time import sleep import RPi. GPIO als GPIO

En dat is het, we zijn klaar met het importeren van de bibliotheken, nu is het tijd om ze te gebruiken! Allereerst is het gebruik van de Minecraft-bibliotheek, we willen ons python-script verbinden met de Minecraft-wereld, we kunnen dit doen door de functie init() van de MCPI-bibliotheek aan te roepen en vervolgens de modus van GPIO in te stellen en de waarschuwing uit te schakelen.

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

Nu definiëren we enkele regenboogkleuren in hexadecimaal, zodat we RGB-kleuren kunnen veranderen.

WIT = 0xFFFFFF ROOD = 0xFF0000 ORANJE = 0xFF7F00 GEEL = 0xFFFF00 GROEN = 0x00FF00 CYAAN = 0x00FFFF BLAUW = 0x0000FF PAARS = 0xFF00FF MAGENTA = 0xFF0090

Vervolgens moeten we enkele variabelen definiëren om de kleur van het wolblok vast te leggen, dat al is gedefinieerd in de Minecraft-bloklijst.

W_WHITE = 0 W_RED = 14 W_ORANGE = 1 W_GEEL = 4 W_GROEN = 5 W_CYAAN = 9 W_BLAUW = 11 W_PAARS = 10 W_MAGENTA = 2

We ID van het wolblok in de Minecraft is 35. Nu moeten we de pin voor RGB-led configureren en ervoor instellen.

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)

Stel vervolgens de PWM in voor elke pin, merk op dat het bereik van de PWM-waarde 0-100 is. Hier stellen we eerst de kleur van RGB led in op wit (100, 100, 100).

rood = GPIO. PWM (red_pin, 100)

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

Het volgende is om twee functies te creëren, die kunnen worden gebruikt om kleur te decoderen en de RGB-led-up te verlichten! Merk op dat de functie map2honderd() is om waarden van 255 tot 100 toe te wijzen, zoals we al eerder zeiden, de PWM-waarde moet 0-100 zijn.

def map2honderd(waarde): retourneer int(waarde * 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

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

# Oplichten! red. ChangeDutyCycle(red_value) groen. ChangeDutyCycle(green_value) blauw. ChangeDutyCycle(blue_value)

Goed gedaan! Het is tijd om ons hoofdprogramma te starten, wacht, er moet een andere variabele worden gedefinieerd om de kleurcode van het wolblok vóór het hoofdprogramma vast te leggen:

last_data = 0 probeer: 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) terwijl True: x, y, z = mc.player.getPos() # spelerpositie (x, y, z) block = mc.getBlockWithData(x, y-1, z) # block ID #print(block) if block.id == WOL en last_data != block.data: if block.data == W_RED: print("Rood!") set_color(RED) if block.data == W_ORANGE: print("Orange!") set_color(ORANGE) if block.data == W_ GEEL: print("Geel!") set_color(GEEL) if block.data == W_GREEN: print("Groen!") set_color(GROEN) if block.data == W_CYAAN: print("Cyaan!") set_color(CYAAN) if block.data == W_BLUE: print("Blauw!") set_color(BLUE) if block.data == W_PURPLE: print("Paars!") 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) behalve KeyboardInterrupt: pass GPIO.cleanup()

Zoals het hoofdprogramma hierboven wordt getoond, moeten we eerst enkele commando's gebruiken om enkele kleurrijke wollen blokken te genereren, daarna moeten we de positie van de speler achterhalen zodat we de blokken-id en de kleurcode ervan kunnen krijgen. Nadat we de blokinformatie hebben ontvangen, zullen we de verklaring gebruiken om te bepalen of het blok onder de speler een wollen blok is en of het de kleurcode heeft. Zo ja, beoordeel welke kleur het wolblok is en roep de functie set_color() aan om de kleur van RGB-led op dezelfde manier te veranderen als het wolblok.

Daarnaast voegen we een try/behalve-statement toe om de uitzondering van gebruikersonderbreking op te vangen wanneer we het programma willen afsluiten om de uitvoer van GPIO-pinnen te wissen.

Bijgevoegd is de volledige code.

Goed gedaan, zoveel accessoires en te ingewikkeld toch? Maak je geen zorgen, laten we eens kijken naar de tweede methode om het project te bereiken, waardoor je je flexibeler en handiger voelt, namelijk het gebruik van onze CrowPi2!

Stap 5: Het resultaat

Image
Image

Open het spel en voer het script uit, je zult het resultaat zien in de video hierboven

Daarna zullen we CrowPi2 gebruiken om de volgende Rainbow interactieve brug te bouwen

Stap 6: CrowPi2-materialen gebruiken

●1 x CrowPi2

Stap 7: CrowPi2-verbindingsschema gebruiken

Niet nodig. Er zijn veel handige sensoren en componenten (meer dan 20) op CrowPi2, het zit allemaal in één Raspberry Pi-laptop en STEM-educatieplatform waarmee we gemakkelijk en zonder zweet meerdere projecten kunnen doen! In dit geval gebruiken we een aantrekkelijke en kleurrijke module op CrowPi2, een 8x8 RGB-matrixmodule, waarmee we 64 RGB-leds tegelijkertijd kunnen aansturen!

Stap 8: CrowPi2 gebruiken - Configureren voor SPI

Niet nodig. CrowPi2 wordt geleverd met een ingebouwde afbeelding met een leersysteem! Alles is voorbereid waardoor je direct kunt programmeren en leren. Trouwens, met onze CrowPi2 is het eenvoudig en al geïntegreerd in het bord als een STEAM-platform dat klaar is voor gebruik.

Stap 9: CrowPi2 gebruiken - de code

Nu is het tijd om ons programma te starten! Importeer eerst een paar bibliotheken, zoals de MCPI-bibliotheek, de Minecraft Pi Python-bibliotheek waarmee we een zeer eenvoudige API kunnen gebruiken om te integreren met de Minecraft-wereld; tijdbibliotheek die ons in staat stelt om de slaapfunctie een bepaald interval te laten wachten voordat een functie wordt uitgevoerd; RPi. GPIO-bibliotheek waarmee we de Raspberry Pi GPIO-pinnen kunnen besturen.

van mcpi.minecraft import Minecraft van time import sleep import RPi. GPIO als GPIO

Ten slotte importeren we een bibliotheek met de naam rpi_ws281x, wat de RGB Matrix-bibliotheek is. In de bibliotheek zijn er meerdere functies die we zullen gebruiken, zoals PixelStrip om het LED-stripobject in te stellen en Kleur om een RGB-kleurobject te configureren om op te lichten onze RGB LED's

van rpi_ws281x importeer PixelStrip, Kleur

En dat is het, we zijn klaar met het importeren van de bibliotheken, nu is het tijd om ze te gebruiken! Evenzo, het eerste is om de Minecraft-bibliotheek te gebruiken, we willen ons python-script verbinden met de Minecraft-wereld. We kunnen dit doen door de init-functie van de MCPI-bibliotheek aan te roepen:

mc = Minecraft.create()

Elke keer dat we bewerkingen willen uitvoeren op de minecrat-wereld, kunnen we het mc-object gebruiken.

De volgende stap zal zijn om de RGB LED-matrixklasse te definiëren die we zullen gebruiken om onze RGB-LED's te besturen, we initialiseren de klasse met basisconfiguratie zoals aantal leds, pinnen, helderheid enz …

we creëren een functie met de naam clean die des te minder zal "opschonen" met een specifieke kleur en ook een functie genaamd run die het werkelijke RGB LED-object initialiseert wanneer we het voor het eerst willen gebruiken.

klasse RGB_Matrix:

def _init_(zelf):

# Ledstripconfiguratie:

self. LED_COUNT = 64 # Aantal LED-pixels.

self. LED_PIN = 12 # GPIO-pin aangesloten op de pixels (18 gebruikt PWM!).

self. LED_FREQ_HZ = 800000 # LED-signaalfrequentie in hertz (meestal 800khz)

self. LED_DMA = 10 # DMA-kanaal om te gebruiken voor het genereren van signaal (probeer 10)

self. LED_BRIGHTNESS = 10 # Stel in op 0 voor de donkerste en 255 voor de helderste

self. LED_INVERT = False # True om het signaal om te keren

self. LED_CHANNEL = 0 # ingesteld op '1' voor GPIO's 13, 19, 41, 45 of 53

# Definieer functies die LED's op verschillende manieren animeren. def schoon (zelf, strip, kleur):

# veeg alle LED's tegelijk af

voor i in bereik (strip.numPixels()):

strip.setPixelColor(i, kleur)

strip.show()

def uitvoeren (zelf):

# Maak een NeoPixel-object met de juiste configuratie.

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

proberen:

retourstrook

behalve KeyboardInterrupt:

# reinig de matrix-LED voor onderbreking

zelf.schoon(strip)

Nadat we klaar zijn met het bovenstaande, is het tijd om die klassen aan te roepen en objecten te maken die we in onze code kunnen gebruiken. Laten we eerst een RGB LED-matrixobject maken dat we kunnen gebruiken met behulp van de klasse die we eerder hebben gemaakt:

matrixObject = RGB_Matrix()

Laten we dit object nu gebruiken om een actief LED-stripobject te maken dat we zullen gebruiken om onze individuele LED's op de RGB-matrix te besturen:

strip = matrixObject.run()

Ten slotte moeten we nog een laatste functie uitvoeren om deze strip te activeren:

strip.begin()

De Minecraft API bevat veel blokken, elk Minecraft-blok heeft zijn eigen ID. In ons voorbeeld hebben we een aantal Minecraft-blokken genomen en geprobeerd te raden welke kleur het meest geschikt is voor hen.

RGB staat voor rood, groen en blauw, dus we hebben 3 verschillende waarden nodig, variërend van 0 tot 255 voor elk, kleuren kunnen in HEX- of RGB-formaat zijn, we gebruiken het RGB-formaat voor ons voorbeeld.

In de Minecraft Pi-wereld zijn er normale blokken-ID's en speciale wol-blokken-ID's, de speciale wol valt onder ID-nummer 35 maar met subnummers variërend tot veel verschillende id's … We lossen dit probleem op door 2 afzonderlijke lijsten te maken, één voor normale blokken en een lijst voor speciale wolblokken:

De eerste lijst is voor normale blokken, bijvoorbeeld 0 staat voor luchtblok, we stellen het in kleur 0, 0, 0 die leeg of volledig wit is, wanneer de speler in het spel springt of vliegt, wordt de RGB uitgeschakeld, 1 is een ander blok met RGB-kleur 128, 128, 128 enzovoort …

#Regenboogkleuren

regenboog_kleuren = {

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

}

Voor de wolblokken doen we hetzelfde, maar het is belangrijk om te onthouden dat alle blokken een ID van 35 hebben, in deze lijst definiëren we de subtypes van het blok dat een wolblok is. Verschillende wolsubtypes hebben verschillende kleuren, maar het zijn allemaal wolblokken.

wolkleuren = {

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

}

Nu we klaar zijn met het definiëren van ons hoofdprogramma, klassen en functies, is het tijd om te integreren met onze CrowPi2 RGB LED-sensor aan boord.

Het hoofdprogramma zal de parameters gebruiken die we eerder hebben gedefinieerd en de impact op de hardware hebben.

We gaan de CrowPi2 RGB LED gebruiken om ze te verlichten op basis van de stappen die we in de Minecraft Pi op elk blok doen, laten we beginnen!

Het eerste wat we zullen doen, is wat wolblokken met commando's genereren en een while-lus maken, om het programma draaiende te houden zolang we het spel spelen.

We hebben wat gegevens van de speler nodig. Eerst gebruiken we de opdracht player.getPos() om de positie van de speler te krijgen, dan gebruiken we getBlockWithData() om het blok te krijgen waar we momenteel op staan (y-coördinaat is -1 wat betekent onder de speler)

x, y, z= mc.speler.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)

terwijl waar:

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

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

print(bloktype)

Vervolgens controleren we of het blok wolblok is, blok-ID-nummer 35, als dat zo is, verwijzen we naar wool_colors met de kleur van het blok op basis van de ID van het woordenboek en lichten de juiste kleur dienovereenkomstig op.

als blokType == 35:

# aangepaste wolkleuren

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

Als het geen wolblok is, controleren we of het blok zich momenteel in het woordenboek rainbow_colors bevindt om uitzonderingen te voorkomen. Als dit het geval is, gaan we verder door de kleur te nemen en de RGB te wijzigen.

if str(blockType) in rainbow_colors:

print(rainbow_colors[str(blockType)])

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

slaap(0.5)

Je kunt altijd proberen meer blokken aan de regenboogkleur toe te voegen om meer kleuren en meer blokkenondersteuning toe te voegen!

Perfect! Projecten uitvoeren met accessoires is ingewikkeld, maar met de CrowPi2-geïntegreerde schakeling wordt het veel eenvoudiger! Bovendien zijn er meer dan 20 sensoren en componenten op CrowPi2, waarmee u uw ideale projecten en zelfs AI-projecten kunt realiseren!

Hieronder de volledige code:

Stap 10: CrowPi2 gebruiken, het resultaat

Open het spel en voer het script uit, je zult het resultaat zien in de video hierboven:

Stap 11: CrowPi2 gebruiken - Verder gaan

Nu hebben we ons kleurrijke project in het Minecraft-spel met CrowPi2 voltooid. Waarom probeert u niet andere sensoren en componenten op CrowPi2 te gebruiken om met het spel te spelen, zoals een joystick om de bewegingen van de speler te besturen, RFID om blokken te genereren op basis van verschillende NFC-kaarten en dergelijke. Veel plezier met uw spel op CrowPi2 en hoop dat u het kunt meer ongelooflijke projecten met CrowPi2!

Nu CrowPi2 nu op de Kickstarter staat, kun je ook genieten van de aantrekkelijke prijs.

Voeg de Kickstarter-paginalink toe CrowPi2

Aanbevolen: