İçindekiler:

Minecraft Raspberry Pi Edition'ı Kullanarak Rainbow Etkileşimli Köprü Oluşturun: 11 Adım
Minecraft Raspberry Pi Edition'ı Kullanarak Rainbow Etkileşimli Köprü Oluşturun: 11 Adım

Video: Minecraft Raspberry Pi Edition'ı Kullanarak Rainbow Etkileşimli Köprü Oluşturun: 11 Adım

Video: Minecraft Raspberry Pi Edition'ı Kullanarak Rainbow Etkileşimli Köprü Oluşturun: 11 Adım
Video: Playing Minecraft on a Raspberry Pi 2024, Kasım
Anonim
Image
Image

Dün, 8 yaşındaki yeğenimi ona daha önce verdiğim Raspberry Pi ile Minecraft oynarken gördüm, sonra aklıma özel ve heyecan verici bir Minecraft-pi LED blok projesi yapmak için kod kullanan bir fikir geldi. Minecraft Pi, Raspberry Pi mikrobilgisayarını kullanmaya başlamak için harika bir yoldur, Minecraft Pi, oyun deneyimini ve donanımlarını kişiselleştirmek için son derece basit bir Python API'sini kullanarak oyunla etkileşime girmemizi sağlayan Minecraft'ın özel bir özel versiyonudur!

Raspberry Pi ile Minecraft dünyasında yapabileceğiniz pek çok proje var ama özellikle bizim için yeterli değildi, aynı anda hem zorlayıcı hem de göz kamaştırıcı bir şeyler arıyorduk. Bu projede, birden fazla Minecraft bloğuna adım atacağız, bloğun kimliğini tespit edeceğiz ve üzerine bastığımız belirli bloğun rengini tespit edeceğiz, renge göre RGB LED'imizi yakıp etkileşimli adım oyunu oluşturacağız!

Efekti elde etmek için iki yöntem kullanacağım, ilki çok kaotik olabilecek aksesuarları kullanmak…; ikincisi CrowPi2 kullanıyor (birçok sensöre sahip öğrenen bilgisayar, şu anda Kickstarter:CrowPi2'de kitle fonlaması yapılıyor)

hadi başlayalım ve böyle harika bir projeyi nasıl arşivleyeceğinizi görelim!

Gereçler

CrowPi2 şimdi kickstarter'da yayında, CrowPi2 projesi neredeyse 250 bin dolar topladı.

Bağlantıya tıklayın:

Yöntem1 Aksesuarları kullanma

Adım 1: Malzemeler

● 1 x Raspberry Pi 4 model B

● Resimli 1 x TF kartı

● 1 x Raspberry Pi güç kaynağı

● 1 x 10,1 inç monitör

● Monitör için 1 x Güç kaynağı

● 1 x HDMI kablosu

● 1 x Klavye ve fare

● 1 x RGB led(Ortak katot)

● 4 x Süveter (Kadından kadına)

Adım 2: Bağlantı Şeması

Bağlantı şeması
Bağlantı şeması

RGB renkli LED'de aslında kırmızı ışık, yeşil ışık ve mavi ışık olmak üzere üç ışık vardır. Farklı yoğunluklarda ışık yaymak için bu üç ışığı kontrol edin ve karıştırıldıklarında çeşitli renklerde ışık yayabilirler. LED ışığı üzerindeki dört pin sırasıyla GND, R, G ve B'dir. Kullandığım RGB LED ortak bir katottur ve Raspberry Pi ile bağlantısı aşağıdaki gibidir:

RaspberryPi 4B(fonksiyon adında) RGB LED

GPIO0 1 KIRMIZI

GPIO1 3 YEŞİL

GPIO2 4 MAVİ

GND 2 GND

İkinci resim donanım bağlantısıdır

3. Adım: SPI için yapılandırın

SPI için yapılandır
SPI için yapılandır
SPI için yapılandır
SPI için yapılandır
SPI için yapılandır
SPI için yapılandır
SPI için yapılandır
SPI için yapılandır

RGB'yi kontrol etmek için SPI kullanmamız gerektiğinden, varsayılan olarak devre dışı olan SPI arayüzünü önce etkinleştirmemiz gerekiyor. SPI arayüzünü etkinleştirmek için aşağıdaki adımları takip edebilirsiniz:

İlk olarak, ilk resimde gösterildiği gibi Pi start MenupreferencesRaspberry Pi Configuration'a giderek Desktop GUI'yi kullanabilirsiniz.

İkinci olarak, “Arayüzler”e gidin ve SPI'yi etkinleştirin ve Tamam'a tıklayın (ikinci resim).

Son olarak, değişikliklerin geçerli olduğundan emin olmak için Pi'nizi yeniden başlatın. Pi Başlat MenüsüTercihler Kapat'a tıklayın. Sadece yeniden başlatmamız gerektiğinden, Yeniden Başlat düğmesine tıklayın.

Adım 4: Kod

Python kodumuzu yazarak başlayacağız, önce kodumuzu Minecraft dünyası ile entegre etmek için ihtiyaç duyacağımız birkaç kütüphaneyi import ederek başlayacağız. Ardından, zaman kitaplığını, özellikle de uyku adı verilen bir işlevi içe aktaracağız. Uyku işlevi, bir işlevi gerçekleştirmeden önce belirli bir süre beklememize izin verecektir. Son olarak, Raspberry Pi üzerinde GPIO'yu kontrol etmemizi sağlayan RPi. GPIO kütüphanesini içe aktarıyoruz.

mcpi.minecraft'tan Minecraft'ı zamandan içe aktarın uykuyu içe aktarın RPi. GPIO'yu GPIO olarak içe aktarın

İşte bu kadar, kütüphaneleri import ettik, şimdi onları kullanma zamanı! Öncelikle Minecraft kütüphanesini kullanmak, python scriptimizi Minecraft dünyasına bağlamak istiyoruz, bunu MCPI kütüphanesinin init() fonksiyonunu çağırarak yapabiliriz ve ardından GPIO modunu ayarlayıp uyarıyı devre dışı bırakabiliriz.

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

Şimdi, RGB renklerini değiştirebilmemiz için bazı gökkuşağı renklerini onaltılı olarak tanımlıyoruz.

BEYAZ = 0xFFFFFF KIRMIZI = 0xFF0000 TURUNCU = 0xFF7F00 SARI = 0xFFFF00 YEŞİL = 0x00FF00 Camgöbeği = 0x00FFFF MAVİ = 0x0000FF MOR = 0xFF00FF MAGENTA = 0xFF0090

Ardından, Minecraft blok listesinde zaten tanımlanmış olan yün bloğun rengini kaydetmek için bazı değişkenler tanımlamamız gerekiyor.

W_WHITE = 0 W_KIRMIZI = 14 W_TURUNCU = 1 W_YELLOW = 4 W_GREEN = 5 W_CYAN = 9 W_BLUE = 11 W_MOR = 10 W_MAGENTA = 2

Minecraft'taki yün bloğumuzun kimliği 35'tir. Şimdi, RGB led için pini yapılandırmamız ve onlar için kurmamız gerekiyor.

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)

Ardından, her pin için PWM'yi ayarlayın, PWM değeri aralığının 0-100 olduğunu unutmayın. Burada önce RGB led rengini beyaz(100, 100, 100) olarak ayarlıyoruz.

kırmızı = GPIO. PWM(kırmızı_pin, 100)

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

Aşağıda, rengin kodunu çözmek ve RGB led'i aydınlatmak için kullanılabilecek iki işlev oluşturmaktır! map2hundred() fonksiyonunun 255'ten 100'e kadar olan değerleri haritalamak olduğunu unutmayın, daha önce de söylediğimiz gibi, PWM değeri 0-100 olmalıdır.

def map2hundred(değer): dönüş int(değer * 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

# Harita değerleri red_value = map2hundred(red_value) green_value = map2hundred(green_value) blue_value = map2hundred(blue_value)

# Işığı aç! red. ChangeDutyCycle(red_value) green. ChangeDutyCycle(green_value) blue. ChangeDutyCycle(blue_value)

Tebrikler! Ana programımıza başlama zamanı geldi, bekleyin, ana programdan önce yün bloğunun renk kodunu kaydetmek için başka bir değişken tanımlanmalıdır:

last_data = 0 dene: 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) True iken: x, y, z = mc.player.getPos() # oyuncu konumu (x, y, z) blok = mc.getBlockWithData(x, y-1, z) # blok kimliği #print(block) if block.id == YÜN ve last_data != block.data: if block.data == W_RED: print("Kırmızı!") set_color(RED) if block.data == W_TURUNCU: print("Turuncu!") set_color(TURUNCU) ise blok.veri == W_ SARI: print("Sarı!") set_color(YELLOW) if block.data == W_GREEN: print("Yeşil!") set_color(YEŞİL) if block.data == W_CYAN: print("Cyan!") set_color(CYAN) if block.data == W_BLUE: print("Mavi!") set_color(BLUE) if block.data == W_PURPLE: print("Mor!") set_color(MOR) if block.data == W_MAGENTA: print(" Macenta!") set_color(MAGENTA) if block.data == W_WHITE: print("Beyaz!") set_color(WHITE) last_data = block.data sleep(0.05) KeyboardInterrupt hariç: GPIO.cleanup() geçişi

Ana program yukarıda gösterildiği gibi, önce bazı renkli yün blokları oluşturmak için bazı komutları kullanmak için, ardından blokların kimliğini ve renk kodunu alabilmek için oyuncunun pozisyonunu bulmamız gerekiyor. Blok bilgilerini aldıktan sonra oyuncunun altındaki bloğun yün blok olup olmadığını ve renk koduna sahip olup olmadığını belirlemek için ifadeyi kullanacağız. Evet ise, yün bloğunun hangi renk olduğuna karar verin ve RGB led'in rengini yün bloğuyla aynı şekilde değiştirmek için set_color() işlevini çağırın.

Ek olarak, GPIO pinlerinin çıkışını temizlemek için programdan çıkmak istediğimizde user interrupt istisnasını yakalamak için bir try/except ifadesi ekliyoruz.

Ekli kodun tamamıdır.

Aferin, çok fazla aksesuar ve çok karmaşık değil mi? Endişelenmeyin, CrowPi2'yi kullanan, sizi daha esnek ve rahat hissettirecek projeye ulaşmak için ikinci yöntemi görelim!

Adım 5: Sonuç

Image
Image

Oyunu açın ve komut dosyasını çalıştırın, sonucu yukarıdaki videoda göreceksiniz

Daha sonra Rainbow interaktif köprüsünü inşa etmek için CrowPi2'yi kullanacağız.

Adım 6: CrowPi2-Malzemelerini Kullanma

●1 x CrowPi2

Adım 7: CrowPi2- Bağlantı Şemasını Kullanma

Gerek yok. CrowPi2'de birçok kullanışlı sensör ve bileşen (20'den fazla) vardır, hepsi tek bir ahududu pi dizüstü bilgisayarda ve birden fazla projeyi kolaylıkla ve terletmeden yapmamızı sağlayan STEM eğitim platformunda! Bu durumda 64 RGB led'i aynı anda kontrol etmemizi sağlayan 8x8 RGB matrix modülü olan CrowPi2 üzerinde çekici ve renkli bir modül kullanacağız!

Adım 8: CrowPi2'yi Kullanma- SPI için Yapılandır

Gerek yok. CrowPi2, bir öğrenme sistemine sahip yerleşik bir görüntü ile birlikte gelir! Her şey hazırlandı, bu da doğrudan programlayıp öğrenebileceğiniz anlamına geliyor. Ayrıca, CrowPi2 ile kolay ve kullanıma hazır bir STEAM platformu olarak panoya entegre edilmiştir.

Adım 9: CrowPi2- Kodu Kullanma

Şimdi programımızı başlatma zamanı! İlk olarak, Minecraft dünyasıyla entegrasyon için çok basit bir API kullanmamıza izin veren Minecraft Pi Python kitaplığı olan MCPI kitaplığı gibi birkaç kitaplığı içe aktarın; bir işlevi gerçekleştirmeden önce belirli bir süre beklememizi sağlayan uyku işlevine izin veren zaman kitaplığı; Raspberry Pi GPIO pinlerini kontrol etmemizi sağlayan RPi. GPIO kütüphanesi.

mcpi.minecraft'tan Minecraft'ı zamandan içe aktarın uykuyu içe aktarın RPi. GPIO'yu GPIO olarak içe aktarın

Son olarak, RGB Matrix kitaplığı olan rpi_ws281x adlı bir kitaplığı içe aktaracağız, kitaplığın içinde, LED şerit nesnesini ayarlamak için PixelStrip ve bir RGB renk nesnesini yanacak şekilde yapılandırmak için Renk gibi kullanacağımız birden çok işlev var. RGB LED'lerimiz

rpi_ws281x'ten PixelStrip'i içe aktar, Renkli

İşte bu kadar, kütüphaneleri import ettik, şimdi onları kullanma zamanı! Aynı şekilde, ilk şey Minecraft kitaplığını kullanmaktır, python betiğimizi Minecraft dünyasına bağlamak istiyoruz, bunu MCPI kitaplığının init işlevini çağırarak yapabiliriz:

mc = Minecraft.create()

Artık minecrat dünyası üzerinde her işlem yapmak istediğimizde mc nesnesini kullanabiliriz.

Bir sonraki adım, RGB LED'lerimizi kontrol etmek için kullanacağımız RGB LED matrix sınıfını tanımlamak olacak, sınıfı led sayısı, pin sayısı, parlaklık vb. gibi temel konfigürasyonlarla başlatıyoruz…

Belirli bir renkle daha az "temizleyecek" clean adlı bir işlev ve ayrıca gerçek RGB LED nesnesini ilk kullanmak istediğimizde başlatacak olan run adlı bir işlev oluşturuyoruz.

sınıf RGB_Matrix:

tanım _init_(kendi):

# LED şerit yapılandırması:

self. LED_COUNT = 64 # LED piksel sayısı.

self. LED_PIN = 12# GPIO pinine bağlı pikseller (18 PWM kullanır!).

self. LED_FREQ_HZ = 800000 # Hertz cinsinden LED sinyal frekansı (genellikle 800khz)

self. LED_DMA = 10 # sinyal üretmek için kullanılacak DMA kanalı (10'u deneyin)

self. LED_BRIGHTNESS = 10 # En koyu için 0 ve en parlak için 255 olarak ayarlayın

self. LED_INVERT = False # Sinyali tersine çevirmek için True

self. LED_CHANNEL = 0 # GPIO'lar 13, 19, 41, 45 veya 53 için '1' olarak ayarlandı

# LED'leri çeşitli şekillerde canlandıran işlevleri tanımlayın. def clean(self, strip, color):

# tüm LED'leri bir kerede silin

aralıktaki i için(strip.numPixels()):

strip.setPixelColor(i, renk)

şerit.göster()

def run(self):

# Uygun konfigürasyonla NeoPixel nesnesi oluşturun.

şerit = PixelStrip(self. LED_COUNT, self. LED_PIN, self. LED_FREQ_HZ, self. LED_DMA, self. LED_INVERT, self. LED_PARLAKLIK, self. LED_CHANNEL)

denemek:

dönüş şeridi

KeyboardInterrupt hariç:

# kesintiden önce matris LED'ini temizleyin

self.clean (şerit)

Yukarıdaki işlemleri yaptıktan sonra sıra o sınıfları çağırmaya ve kodumuzda kullanabileceğimiz nesneler oluşturmaya geldi, önce daha önce oluşturduğumuz sınıfı kullanarak kullanabileceğimiz bir RGB LED matrix nesnesi oluşturalım:

matrixObject = RGB_Matrix()

Şimdi bu nesneyi RGB Matrisi üzerindeki bireysel LED'lerimizi kontrol etmek için kullanacağımız aktif LED şerit nesnesi oluşturmak için kullanalım:

şerit = matrixObject.run()

Son olarak, bu şeridi etkinleştirmek için son bir işlevi çalıştırmamız gerekecek:

şerit.başla()

Minecraft API'si çok sayıda blok içerir, her Minecraft bloğunun kendi kimliği vardır. Örneğimizde bir miktar Minecraft bloğu aldık ve onlar için en uygun rengi tahmin etmeye çalıştık.

RGB, Kırmızı, Yeşil ve mavi anlamına gelir, bu nedenle her biri için 0 ile 255 arasında değişen 3 farklı değere ihtiyacımız olacak, renkler HEX veya RGB formatı olabilir, örneğimiz için RGB formatını kullanıyoruz.

Minecraft Pi dünyasında normal blok ID'leri ve özel yün blok ID'leri var, özel yün ID numarası 35'in altında ama birçok farklı kimliğe kadar değişen alt numaralara sahip… Bu sorunu biri normal bloklar için olmak üzere 2 ayrı liste oluşturarak çözeceğiz. ve özel yün blokları için bir liste:

İlk liste normal bloklar içindir, örneğin 0 Hava bloğunu temsil eder, biz onu boş veya tam beyaz olan 0, 0, 0 rengini ayarlayacağız, oyuncu oyunda zıpladığında veya uçtuğunda RGB kapanacak, 1 RGB renkli 128, 128, 128 vb. ile farklı bloktur…

#Gökkuşağı renkleri

gökkuşağı_renkleri = {

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

}

Yün bloklar için de aynısını yapıyoruz ama unutmamak gerekir ki tüm blokların ID'si 35, bu listede bloğun alt tiplerini yün blok olarak tanımlıyoruz. Farklı yün alt türlerinin farklı renkleri vardır ancak hepsi yün bloklarıdır.

yün_renkler = {

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

}

Artık ana programımızı, sınıflarımızı ve işlevlerimizi tanımlamayı bitirdiğimizde, CrowPi2 RGB LED yerleşik sensörümüzle entegrasyon zamanı geldi.

Ana program daha önce tanımladığımız parametreleri alacak ve donanıma etki yapacaktır.

Her blokta Minecraft Pi içinde yaptığımız adımlara göre onları aydınlatmak için CrowPi2 RGB LED'i kullanacağız, hadi başlayalım!

Yapacağımız ilk şey, komutlarla bazı yün blokları oluşturmak ve oyunu oynadığımız sürece programı çalışır durumda tutmak için bir while döngüsü oluşturmak.

Oyuncudan bazı veriler almamız gerekecek, önce oyuncu pozisyonunu almak için player.getPos() komutunu kullanırız, sonra üzerinde durduğumuz bloğu almak için getBlockWithData() komutunu kullanırız (y koordinatı -1'dir. oyuncunun altında anlamına gelir)

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)

Doğru iken:

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

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

yazdır(blokTürü)

Daha sonra bloğun yün blok olup olmadığını kontrol edeceğiz, blok ID numarası 35, eğer öyleyse, sözlüğün ID'sine göre bloğun rengiyle cotton_colors'a başvuracağız ve buna göre doğru rengi yakacağız.

if blockType == 35:

# özel yün renkleri

matrixObject.clean(şerit, yün_renkler[str(veri)])

Yün blok değilse, istisnalardan kaçınmak için bloğun şu anda gökkuşağı_renkleri sözlüğünde olup olmadığını kontrol edeceğiz, eğer öyleyse, rengi alıp RGB'yi değiştirerek devam edeceğiz.

gökkuşağı_renklerinde str(blockType) ise:

print(gökkuşağı_renkleri[str(blockType)])

matrixObject.clean(şerit, gökkuşağı_renkleri[str(blockType)])

uyku(0.5)

Daha fazla renk ve daha fazla blok desteği eklemek için her zaman Rainbow_color'a daha fazla blok eklemeyi deneyebilirsiniz!

Kusursuz! Aksesuarlar kullanarak proje yapmak karmaşıktır ancak CrowPi2 entegre devresini kullanarak işler çok daha kolay! Dahası, CrowPi2'de ideal projelerinizi ve hatta AI projelerinizi gerçekleştirmenizi sağlayan 20'den fazla sensör ve bileşen var!

Tam kod aşağıdadır:

Adım 10: CrowPi2-Sonuç Kullanımı

Oyunu açın ve komut dosyasını çalıştırın, sonucu yukarıdaki videoda göreceksiniz:

Adım 11: CrowPi2'yi Kullanma- Daha İleri Gitmek

Şimdi CrowPi2 ile Minecraft oyunundaki renkli projemizi bitirdik. Oyuncunun hareketini kontrol etmek için joystick, farklı NFC kartlarına dayalı bloklar oluşturmak için RFID gibi oyunla oynamak için neden CrowPi2'deki diğer sensörleri ve bileşenleri kullanmaya çalışmıyorsunuz? CrowPi2'de oyununuzda iyi eğlenceler ve umarım yapabilirsiniz. CrowPi2 ile daha inanılmaz projeler!

Şimdi, CrowPi2 şimdi Kickstarter'da, siz de cazip fiyatın tadını çıkarabilirsiniz.

Kickstarter sayfa bağlantısını ekleyin CrowPi2

Önerilen: