INHOUDSOPGAWE:

Bou Rainbow Interactive Bridge met behulp van Minecraft Raspberry Pi Edition: 11 stappe
Bou Rainbow Interactive Bridge met behulp van Minecraft Raspberry Pi Edition: 11 stappe

Video: Bou Rainbow Interactive Bridge met behulp van Minecraft Raspberry Pi Edition: 11 stappe

Video: Bou Rainbow Interactive Bridge met behulp van Minecraft Raspberry Pi Edition: 11 stappe
Video: Minecraft Live 2020: Full Show 2024, November
Anonim
Image
Image

Gister het ek my 8-jarige neef gesien wat Minecraft speel met die Raspberry Pi wat ek hom voorheen gegee het, en toe kry ek 'n idee, met behulp van kode om 'n aangepaste en opwindende Minecraft-pi LED-blokke-projek te maak. Minecraft Pi is 'n uitstekende manier om aan die gang te kom met die Raspberry Pi -mikrorekenaar, die Minecraft Pi is 'n spesiale weergawe van Minecraft wat op maat gemaak is, waarmee ons met die spel kan omgaan met 'n dodelike eenvoudige Python -API om die spelervaring en rekwisiete aan te pas!

Daar is baie projekte wat u in die Minecraft -wêreld met die Raspberry Pi kan doen, maar spesifiek vir ons was dit nie genoeg nie; ons was op soek na iets uitdagends en terselfdertyd knipperend. In hierdie projek gaan ons op verskeie Minecraft -blokke trap, die ID van die blok opspoor en die kleur van die spesifieke blok waarop ons getrap het, opspoor, gebaseer op die kleur waarop ons ons RGB LED sal aansteek om 'n interaktiewe stapspel te skep!

Ek sal twee metodes gebruik om die effek te bereik; die eerste is die gebruik van bykomstighede, wat baie chaoties kan wees …; die tweede gebruik CrowPi2 (leerrekenaar met baie sensors, wat tans op Kickstarter gefinansier word: CrowPi2)

laat ons begin en kyk hoe u so 'n wonderlike projek kan argiveer!

Voorrade

Die CrowPi2 is nou regstreeks op die begin, die CrowPi2 -projek het byna $ 250 000 ingesamel.

Klik op die skakel:

Metode 1 Gebruik bykomstighede

Stap 1: materiaal

● 1 x Raspberry Pi 4 model B

● 1 x TF -kaart met prentjie

● 1 x Raspberry Pi -kragtoevoer

● 1 x 10,1 duim -monitor

● 1 x Kragtoevoer vir monitor

● 1 x HDMI -kabel

● 1 x sleutelbord en muis

● 1 x RGB -led (gewone katode)

● 4 x springers (vroulik tot vroulik)

Stap 2: Verbindingsdiagram

Verbindingsdiagram
Verbindingsdiagram

Daar is eintlik drie ligte in die RGB -kleur -LED, wat rooi, groen en blou lig is. Beheer hierdie drie ligte om lig van verskillende intensiteite uit te straal, en as dit gemeng word, kan dit lig van verskillende kleure uitstraal. Die vier penne op die LED -lig is onderskeidelik GND, R, G en B. Die RGB LED wat ek gebruik het, is 'n algemene katode, en die verbinding met die Raspberry Pi is soos volg:

RaspberryPi 4B (in funksienaam) RGB LED

GPIO0 1 ROOI

GPIO1 3 GROEN

GPIO2 4 BLOU

GND 2 GND

Die tweede prentjie is die hardeware -verbinding

Stap 3: Konfigureer vir SPI

Stel op vir SPI
Stel op vir SPI
Stel op vir SPI
Stel op vir SPI
Stel op vir SPI
Stel op vir SPI
Stel op vir SPI
Stel op vir SPI

Omdat ons die SPI moet gebruik om die RGB te beheer, moet ons eers die SPI -koppelvlak aktiveer, wat standaard uitgeskakel is. U kan die onderstaande stappe volg om die SPI -koppelvlak moontlik te maak:

Eerstens kan u die lessenaar -GUI gebruik deur na die Pi -begin MenupreferencesRaspberry Pi -konfigurasie te gaan, soos in die eerste prentjie getoon word.

Navigeer tweedens na "Interfaces" en aktiveer SPI en klik op OK (die tweede prentjie).

Laastens, begin u Pi weer om te verseker dat die veranderinge in werking tree. Klik op Pi Start MenuPreferencesShutdown. Aangesien ons net weer moet begin, klik op die herlaai -knoppie.

Stap 4: Die kode

Ons begin met die skryf van ons python -kode, eers begin ons met die invoer van 'n paar biblioteke wat ons benodig om ons kode met die Minecraft -wêreld te integreer. Dan sal ons die tydbiblioteek invoer, spesifiek 'n funksie genaamd slaap. Met die slaapfunksie kan ons 'n spesifieke interval wag voordat ons 'n funksie uitvoer. Laastens, maar nie die minste nie, voer ons RPi. GPIO -biblioteek in waarmee ons die GPIO op Raspberry Pi kan beheer.

vanaf mcpi.minecraft invoer Minecraft van tyd af slaap slaap invoer RPi. GPIO as GPIO in

En dit is dit, ons het klaar met die invoer van die biblioteke, dit is nou tyd om dit te gebruik! Die eerste ding is om die Minecraft -biblioteek te gebruik; ons wil ons python -skrip aan die Minecraft -wêreld koppel; ons kan dit doen deur die init () -funksie van die MCPI -biblioteek aan te roep en dan die modus van GPIO in te stel en die waarskuwing uit te skakel.

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

Nou definieer ons 'n paar reënboogkleure in heksadesimaal, sodat ons RGB -kleure kan verander.

WIT = 0xFFFFFF ROOI = 0xFF0000 ORANJE = 0xFF7F00 GEEL = 0xFFFF00 GROEN = 0x00FF00 CYAN = 0x00FFFF BLOU = 0x0000FF PURPLE = 0xFF00FF MAGENTA = 0xFF0090

Vervolgens moet ons 'n paar veranderlikes definieer om die kleur van die wolblok op te teken, wat reeds in die Minecraft -bloklys gedefinieer is.

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

Ons ID van die wolblok in die Minecraft is 35. Nou moet ons die pen vir RGB -led instel en daarvoor instel.

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 dan die PWM vir elke pen op, let op dat die reeks PWM-waarde 0-100 is. Hier stel ons die kleur van RGB gelei na wit (100, 100, 100) eerste.

rooi = GPIO. PWM (rooi_pen, 100)

groen = GPIO. PWM (groen_speld, 100) blou = GPIO. PWM (blou_pen, 100) rooi.start (100) groen.start (100) blou.start (100)

Hierna volg om twee funksies te skep wat gebruik kan word om kleur te ontsyfer en die RGB -aanwyser aan te steek! Let daarop dat die map2hundred () -funksie die waardes van 255 tot 100 is, soos ons reeds genoem het, die PWM-waarde 0-100 moet wees.

def map2hundred (waarde): return 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

# Kaartwaardes rooi_waarde = map2honderd (rooi_waarde) groen_waarde = map2honderd (groen_waarde) blou_waarde = map2honderd (blou_waarde)

# Lig op! red. ChangeDutyCycle (rooi_waarde) groen. ChangeDutyCycle (groen_waarde) blou. ChangeDutyCycle (blou_waarde)

Wel gedaan! Dit is tyd om ons hoofprogram te begin, wag, 'n ander veranderlike moet gedefinieer word om die kleurkode van wolblok voor die hoofprogram op te neem:

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) terwyl True: x, y, z = mc.player.getPos () # spelerposisie (x, y, z) block = mc.getBlockWithData (x, y-1, z) # blok ID #print (blok) as block.id == WOOL en 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_ GEEL: druk ("Geel!") Set_color (GEEL) as 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) behalwe KeyboardInterrupt: slaag GPIO.cleanup ()

Soos die hoofprogram hierbo getoon word, moet u eers 'n paar opdragte gebruik om 'n paar kleurvolle wolblokke te genereer, en dan moet ons die speler se posisie uitvind sodat ons die blokke se ID en die kleurkode daarvan kan kry. Nadat ons die blokinligting gekry het, gebruik ons die stelling om te bepaal of die blok onder die speler 'n wolblok is en of dit die kleurkode het. Indien wel, beoordeel watter kleur die wolblok is en skakel die funksie set_color () om die kleur van die RGB -led dieselfde te verander as die wolblok.

Boonop voeg ons 'n probeer/behalwe -verklaring by om die uitsondering van gebruikersonderbreking te vind wanneer ons die program wil stop om die uitvoer van GPIO -penne te verwyder.

Aangeheg is die volledige kode.

Welgedaan, soveel bykomstighede en te ingewikkeld, nie waar nie? Moenie bekommerd wees nie, laat ons die tweede metode sien om die projek te bereik, wat u meer buigsaam en geriefliker laat voel, wat ons CrowPi2 gebruik!

Stap 5: Die resultaat

Image
Image

Maak die spel oop en voer die script uit; u sal die resultaat in die video hierbo sien

Dan sal ons CrowPi2 gebruik om die interaktiewe Rainbow -brug te bou

Stap 6: Gebruik CrowPi2-materiale

● 1 x CrowPi2

Stap 7: Gebruik CrowPi2- verbindingsdiagram

Nie nodig nie. Daar is baie nuttige sensors en komponente (meer as 20) op CrowPi2, dit is alles in een framboos Pi -skootrekenaar en STEM -opvoedingsplatform waarmee ons verskeie projekte met gemak en sonder sweet kan doen! In hierdie geval gebruik ons 'n aantreklike en kleurryke module op CrowPi2, 'n 8x8 RGB -matriksmodule, waarmee ons 64 RGB -LED's tegelyk kan beheer!

Stap 8: Gebruik CrowPi2- Konfigureer vir SPI

Nie nodig nie. CrowPi2 het 'n ingeboude beeld met 'n leerstelsel! Alles is voorberei, wat beteken dat u direk kan programmeer en leer. Boonop is dit met ons CrowPi2 maklik en reeds geïntegreer in die bord as 'n STEAM -platform wat gereed is om te gebruik.

Stap 9: Gebruik CrowPi2- die kode

Nou is dit tyd om ons program te begin! Voer eers 'n paar biblioteke in, soos die MCPI -biblioteek, die Minecraft Pi Python -biblioteek waarmee ons 'n baie eenvoudige API kan gebruik om met die Minecraft -wêreld te integreer; tydbiblioteek waarmee ons die slaapfunksie kan gebruik om 'n spesifieke interval te wag voordat ons 'n funksie uitvoer; RPi. GPIO -biblioteek waarmee ons die Raspberry Pi GPIO -penne kan beheer.

vanaf mcpi.minecraft invoer Minecraft van tyd af slaap slaap invoer RPi. GPIO as GPIO in

Laastens sal ons 'n biblioteek met die naam rpi_ws281x invoer, wat die RGB Matrix -biblioteek is, binne die biblioteek is daar verskeie funksies wat ons sal gebruik, soos PixelStrip om die LED -strookvoorwerp op te stel en Kleur om 'n RGB -kleurvoorwerp op te stel om aan te brand ons RGB LED's

vanaf rpi_ws281x, voer PixelStrip in, kleur

En dit is dit, ons het klaar met die invoer van die biblioteke, dit is nou tyd om dit te gebruik! Net so is die eerste ding om die Minecraft -biblioteek te gebruik; ons wil ons python -skrip aan die Minecraft -wêreld koppel; ons kan dit doen deur die init -funksie van die MCPI -biblioteek aan te roep:

mc = Minecraft.create ()

Elke keer as ons operasies in die mynwereld wil uitvoer, kan ons die mc -voorwerp gebruik.

Die volgende stap is om die RGB LED -matriksklas te definieer wat ons sal gebruik om ons RGB -LED's te beheer; ons initialiseer die klas met basiese konfigurasie soos aantal LED's, penne, helderheid, ens …

ons skep 'n funksie genaamd skoon, wat die minder sal 'skoonmaak' met 'n spesifieke kleur, en 'n funksie genaamd 'run' wat die werklike RGB LED -voorwerp inisieer by die eerste keer dat ons dit wil gebruik.

klas RGB_Matrix:

def _init _ (self):

# LED -strookkonfigurasie:

self. LED_COUNT = 64 # Aantal LED -pixels.

self. LED_PIN = 12 # GPIO -pen wat aan die pixels gekoppel is (18 gebruik PWM!).

self. LED_FREQ_HZ = 800000 # LED seinfrekwensie in hertz (gewoonlik 800khz)

self. LED_DMA = 10 # DMA -kanaal om te gebruik vir die opwekking van seine (probeer 10)

self. LED_BRIGHTNESS = 10 # Stel op 0 vir donkerste en 255 vir helderste

self. LED_INVERT = Onwaar # Waar om die sein om te draai

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

# Definieer funksies wat LED's op verskillende maniere animeer. def clean (self, strook, kleur):

# vee alle LED's gelyktydig af

vir i in reeks (strip.numPixels ()):

strip.setPixelColor (i, kleur)

strip.show ()

def run (self):

# Skep NeoPixel -voorwerp met die toepaslike konfigurasie.

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

probeer:

terugstrook

behalwe KeyboardInterrupt:

# maak die matriks -LED skoon voor onderbreking

self.clean (strook)

Nadat ons die bogenoemde gedoen het, is dit tyd om die klasse aan te roep en voorwerpe te skep wat ons in ons kode kan gebruik, eers 'n RGB LED -matriksvoorwerp wat ons kan gebruik met behulp van die klas wat ons vroeër geskep het:

matrixObject = RGB_Matrix ()

Laat ons nou hierdie voorwerp gebruik om 'n aktiewe LED -strookvoorwerp te skep wat ons sal gebruik om ons individuele LED's op die RGB Matrix te beheer:

strook = matrixObject.run ()

Ten slotte, om hierdie strook te aktiveer, moet ons 'n laaste funksie uitvoer:

strip.begin ()

Die Minecraft API bevat baie blokke, elke Minecraft -blok het sy eie ID. In ons voorbeeld het ons 'n paar Minecraft -blokke geneem en probeer raai watter kleur die beste by hulle pas.

RGB staan vir rooi, groen en blou, so ons benodig drie verskillende waardes wat wissel van 0 tot 255 vir elkeen; kleure kan HEX- of RGB -formaat wees; ons gebruik die RGB -formaat vir ons voorbeeld.

In die Minecraft Pi -wêreld is daar normale blokke -ID's en spesiale wolblokke -ID's, die spesiale wol val onder ID -nommer 35, maar met subnommers wat wissel tot baie verskillende ID's … Ons los hierdie probleem op deur twee aparte lyste te skep, een vir normale blokke en een lys vir spesiale wolblokke:

Die eerste lys is vir normale blokke, byvoorbeeld 0 verteenwoordig lugblok; ons stel dit in kleur 0, 0, 0 wat leeg of heeltemal wit is, as die speler in die spel spring of vlieg, sal die RGB afskakel, 1 is 'n ander blok met RGB -kleur 128, 128, 128 ensovoorts …

#Reënboogkleure

reënboogkleure = {

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

}

Vir die wolblokke doen ons dieselfde, maar dit is belangrik om te onthou dat al die blokke 'n ID van 35 het, in hierdie lys definieer ons die subtipes van die blok wat wolblok is. Verskillende wol subtipes het verskillende kleure, maar almal is wolblokke.

wolkleure = {

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

}

As ons klaar is met die definisie van ons hoofprogram, klasse en funksies, is dit tyd om te integreer met ons CrowPi2 RGB LED aan boord sensor.

Die hoofprogram neem die parameters wat ons vroeër gedefinieer het, en beïnvloed die hardeware.

Ons gaan die CrowPi2 RGB LED gebruik om hulle te verlig op grond van die stappe wat ons in die Minecraft Pi op elke blok doen, laat ons begin!

Die eerste ding wat ons sal doen, is om 'n paar wolblokke met opdragte te genereer en 'n while -lus te skep, sodat die program aan die gang bly solank ons die spel speel.

Ons moet 'n paar data van die speler af kry. Eerstens gebruik ons die player.getPos () opdrag om die speler se posisie te kry, dan gebruik ons getBlockWithData () om die blok te kry waarop ons tans staan (y koördinaat is -1 wat beteken onder die speler)

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)

terwyl dit waar is:

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

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

druk (blockType)

Dan kyk ons of die blok wolblok is, blok -ID -nommer 35, as dit die geval is, verwys ons na wol_kleure met die kleur van die blokkie gebaseer op die ID van die woordeboek en verlig die regte kleur dienooreenkomstig.

as blockType == 35:

# pasgemaakte wolkleure

matrixObject.clean (strook, wol_kleure [str (data)])

As dit nie 'n wolblok is nie, kyk ons of die blok tans in die rainbow_colors -woordeboek is om uitsonderings te vermy; as dit die geval is, gaan ons voort deur die kleur te neem en die RGB te verander.

as str (blockType) in rainbow_colors:

druk (reënboogkleure [str (blockType)])

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

slaap (0,5)

U kan altyd probeer om meer blokke by die rainbow_color te voeg om meer kleure en meer blokke -ondersteuning by te voeg!

Perfek! Dit is ingewikkeld om projekte met bykomstighede te doen, maar met die CrowPi2 -geïntegreerde stroombaan word dinge baie makliker! Boonop is daar meer as 20 sensors en komponente op CrowPi2, waarmee u u ideale projekte en selfs AI -projekte kan bereik!

Hieronder is die volledige kode:

Stap 10: Gebruik CrowPi2-die resultaat

Maak die speletjie oop en voer die script uit; u sal die resultaat in die video hierbo sien:

Stap 11: Gebruik CrowPi2- Gaan verder

Nou is ons klaar met ons kleurvolle projek in die Minecraft -speletjie met CrowPi2. Waarom nie probeer om ander sensors en komponente op CrowPi2 te gebruik om met die spel te speel nie, soos joystick om die speler se beweging te beheer, RFID om blokke te genereer op grond van verskillende NFC -kaarte, ens. Om pret te hê met u spel op CrowPi2 en hoop dat u dit kan doen meer ongelooflike projekte met CrowPi2!

Nou, CrowPi2 is nou op die Kickstarter, u kan ook die aantreklike prys geniet.

Heg die Kickstarter -bladskakel CrowPi2 aan

Aanbeveel: