Isi kandungan:

Bina Jambatan Interaktif Pelangi Menggunakan Minecraft Raspberry Pi Edisi: 11 Langkah
Bina Jambatan Interaktif Pelangi Menggunakan Minecraft Raspberry Pi Edisi: 11 Langkah

Video: Bina Jambatan Interaktif Pelangi Menggunakan Minecraft Raspberry Pi Edisi: 11 Langkah

Video: Bina Jambatan Interaktif Pelangi Menggunakan Minecraft Raspberry Pi Edisi: 11 Langkah
Video: HYE KAWAN JUMPA ESOK🫣 #ikhmalnour #nourror #tiktok #viral #seram 2024, November
Anonim
Image
Image

Semalam, saya melihat keponakan saya yang berusia 8 tahun bermain Minecraft dengan Raspberry Pi yang saya berikan kepadanya, kemudian saya mendapat idea, iaitu menggunakan kod untuk membuat projek blok Minecraft-pi LED yang disesuaikan dan menarik. Minecraft Pi adalah cara yang baik untuk memulakan dengan mikrokomputer Raspberry Pi, Minecraft Pi adalah versi khas Minecraft yang dibuat khas yang membolehkan kita berinteraksi dengan permainan menggunakan Python API sederhana yang mematikan untuk menyesuaikan pengalaman dan alat permainan!

Terdapat banyak projek yang boleh anda lakukan di dunia Minecraft dengan Raspberry Pi tetapi khusus untuk kami tidak cukup, kami sedang mencari sesuatu yang mencabar dan berkelip pada masa yang sama. Dalam projek ini, kami akan menginjak beberapa blok Minecraft, mengesan ID blok dan mengesan warna blok tertentu yang kami pijak, berdasarkan warna yang akan kami menyalakan LED RGB kami untuk membuat permainan langkah interaktif!

Saya akan menggunakan dua kaedah untuk mencapai kesannya, yang pertama adalah menggunakan aksesori, yang mungkin sangat kacau…; yang kedua adalah menggunakan CrowPi2 (belajar komputer dengan banyak sensor, ketika ini banyak mendapat dana di Kickstarter: CrowPi2)

mari kita mulakan dan lihat bagaimana mengarkibkan projek yang luar biasa ini!

Bekalan

The CrowPi2 sekarang disiarkan secara langsung di kickstarter sekarang, projek The CrowPi2 telah mengumpulkan hampir $ 250k.

Tekan pautan:

Kaedah1 Menggunakan aksesori

Langkah 1: Bahan

● 1 x model Raspberry Pi 4 B

● 1 x kad TF dengan gambar

● 1 x bekalan kuasa Raspberry Pi

● Monitor 1 x 10.1 inci

● 1 x Bekalan kuasa untuk monitor

● 1 x kabel HDMI

● 1 x Papan kekunci dan tetikus

● 1 x dipimpin RGB (katod biasa)

● 4 x Pelompat (Perempuan ke wanita)

Langkah 2: Diagram Sambungan

Rajah Sambungan
Rajah Sambungan

Sebenarnya ada tiga lampu dalam LED warna RGB, iaitu lampu merah, lampu hijau dan cahaya biru. Kawal ketiga lampu ini untuk memancarkan cahaya dengan intensiti yang berbeza, dan apabila dicampur, mereka dapat memancarkan cahaya dari pelbagai warna. Empat pin pada lampu LED masing-masing adalah GND, R, G, dan B. LED RGB yang saya gunakan adalah katod biasa, dan sambungan ke Raspberry Pi adalah seperti berikut:

RaspberryPi 4B (dalam nama fungsi) LED RGB

GPIO0 1 MERAH

GPIO1 3 HIJAU

GPIO2 4 BIRU

GND 2 GND

Gambar kedua ialah sambungan perkakasan

Langkah 3: Konfigurasikan untuk SPI

Konfigurasikan untuk SPI
Konfigurasikan untuk SPI
Konfigurasikan untuk SPI
Konfigurasikan untuk SPI
Konfigurasikan untuk SPI
Konfigurasikan untuk SPI
Konfigurasikan untuk SPI
Konfigurasikan untuk SPI

Kerana kita perlu menggunakan SPI untuk mengawal RGB, kita perlu mengaktifkan antara muka SPI terlebih dahulu, yang dilumpuhkan secara lalai. Anda boleh mengikuti langkah di bawah untuk mengaktifkan antara muka SPI:

Pertama, anda boleh menggunakan Desktop GUI dengan menuju ke Pi start MenupreferencesRaspberry Pi Configuration, seperti yang ditunjukkan pada gambar pertama.

Kedua, arahkan ke "Antaramuka" dan aktifkan SPI dan klik OK (gambar kedua).

Terakhir, mulakan semula Pi anda untuk memastikan bahawa perubahan akan berlaku. Klik pada Pi Start MenuPreferencesShutdown. Oleh kerana kita hanya perlu memulakan semula, klik pada butang Reboot.

Langkah 4: Kodnya

Kita akan mulakan dengan menulis kod python kita, pertama, kita akan mula dengan mengimport beberapa perpustakaan yang kita perlukan untuk mengintegrasikan kod kita dengan dunia Minecraft. Kemudian, kami akan mengimport perpustakaan waktu, khususnya fungsi yang disebut tidur. Fungsi tidur akan membolehkan kita menunggu selang waktu tertentu sebelum melakukan fungsi. Akhir sekali, kami mengimport perpustakaan RPi. GPIO yang membolehkan kami mengawal GPIO pada Raspberry Pi.

dari mcpi.minecraft import Minecraft dari time import import import RPi. GPIO sebagai GPIO

Dan itu saja, kami sudah selesai dengan mengimport perpustakaan, kini tiba masanya untuk menggunakannya! Perkara pertama yang pertama, adalah dengan menggunakan perpustakaan Minecraft, kita mahu menghubungkan skrip python kita ke dunia Minecraft, kita boleh melakukan ini dengan memanggil fungsi init () perpustakaan MCPI dan kemudian menetapkan mod GPIO dan mematikan amaran.

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

Sekarang, kita menentukan beberapa warna pelangi dalam heksadesimal sehingga kita dapat mengubah warna RGB.

PUTIH = 0xFFFFFF MERAH = 0xFF0000 ORANGE = 0xFF7F00 KUNING = 0xFFFF00 HIJAU = 0x00FF00 CYAN = 0x00FFFF BIRU = 0x0000FF PURPLE = 0xFF00FF MAGENTA = 0xFF0090

Seterusnya, kita perlu menentukan beberapa pemboleh ubah untuk mencatat warna blok bulu, yang sudah ditentukan dalam senarai blok 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

Kami ID blok bulu di Minecraft adalah 35. Sekarang, kita perlu mengkonfigurasi pin untuk RGB led dan disediakan untuknya.

red_pin = 17 green_pin = 18 blue_pin = 27

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

Kemudian, sediakan PWM untuk setiap pin, perhatikan bahawa julat nilai PWM adalah 0-100. Di sini, kami menetapkan warna RGB yang diketuai menjadi putih (100, 100, 100) terlebih dahulu.

merah = GPIO. PWM (red_pin, 100)

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

Berikut ini adalah untuk membuat dua fungsi, yang dapat digunakan untuk menyahkod warna dan menyala RGB ke atas! Perhatikan bahawa fungsi map2hundred () adalah memetakan nilai dari 255 hingga 100, seperti yang kita katakan sebelumnya, nilai PWM harus 0-100.

def map2eratus (nilai): return int (nilai * 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

# Nilai peta red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

# Menyala! merah. ChangeDutyCycle (red_value) green. ChangeDutyCycle (green_value) blue. ChangeDutyCycle (blue_value)

Bagus! Sudah tiba masanya untuk memulakan program utama kami, tunggu, pemboleh ubah lain harus ditentukan untuk merekodkan kod warna blok wol sebelum program utama:

last_data = 0 cubaan: 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 Block (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) sementara Benar: x, y, z = mc.player.getPos () # kedudukan pemain (x, y, z) blok = mc.getBlockWithData (x, y-1, z) # ID blok #cetak (blok) jika block.id == WOOL dan last_data! = Block.data: if block.data == W_RED: print ("Red!") Set_color (RED) if block.data == W_ORANGE: print ("Orange!") Set_color (ORANGE) jika blok.data == W_ KUNING: cetak ("Kuning!") Set_color (KUNING) jika blok.data == W_GREEN: cetak ("Hijau!") Set_color (HIJAU) jika blok.data == W_CYAN: cetak ("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) kecuali KeyboardInterrupt: lulus GPIO.cleanup ()

Seperti program utama yang ditunjukkan di atas, pertama menggunakan beberapa arahan untuk menghasilkan beberapa blok bulu berwarna-warni, maka kita perlu mengetahui kedudukan pemain sehingga kita dapat memperoleh id blok dan kod warnanya. Setelah mendapat maklumat blok, kami akan menggunakan pernyataan untuk menentukan sama ada blok di bawah pemain adalah blok bulu dan sama ada ia mempunyai kod warna. Jika ya, nyatakan warna blok wol dan panggil fungsi set_color () untuk menukar warna led RGB sama dengan blok bulu.

Sebagai tambahan, kami menambahkan pernyataan cuba / kecuali untuk menangkap pengecualian gangguan pengguna ketika kami ingin menghentikan program untuk membersihkan output pin GPIO.

Terlampir adalah kod lengkap.

Syabas, begitu banyak aksesori dan terlalu rumit bukan? Jangan risau, mari kita lihat kaedah kedua untuk mencapai projek ini, yang akan membuat anda merasa lebih fleksibel dan selesa, iaitu menggunakan CrowPi2 kami!

Langkah 5: Hasilnya

Image
Image

Buka permainan dan jalankan skripnya, anda akan melihat hasilnya dalam video di atas

Kemudian kita akan menggunakan CrowPi2 untuk membina jambatan interaktif Rainbow seterusnya

Langkah 6: Menggunakan Bahan CrowPi2

● 1 x CrowPi2

Langkah 7: Menggunakan Diagram Sambungan CrowPi2

Tidak perlu. Terdapat banyak sensor dan komponen berguna (lebih dari 20) di CrowPi2, semuanya ada dalam satu komputer riba pi raspberry dan platform pendidikan STEM yang membolehkan kami melakukan banyak projek dengan mudah dan tidak berpeluh! Dalam kes ini, kita akan menggunakan modul yang menarik dan berwarna-warni pada CrowPi2, yang merupakan modul matriks 8x8 RGB, yang membolehkan kita mengawal led 64 RGB pada masa yang sama!

Langkah 8: Menggunakan CrowPi2- Konfigurasi untuk SPI

Tidak perlu. CrowPi2 dilengkapi dengan imej terbina dalam dengan sistem pembelajaran! Semuanya telah disediakan yang bermaksud anda dapat memprogram dan belajar secara langsung. Selain itu, dengan CrowPi2 kami mudah dan sudah disatukan ke dalam papan sebagai platform STEAM yang siap sedia.

Langkah 9: Menggunakan CrowPi2- Kod

Sekarang, sudah tiba masanya untuk memulakan program kami! Pertama, import beberapa perpustakaan, seperti perpustakaan MCPI yang merupakan perpustakaan Minecraft Pi Python yang membolehkan kita menggunakan API yang sangat mudah untuk berintegrasi dengan dunia Minecraft; perpustakaan masa yang membolehkan kita fungsi tidur untuk menunggu selang waktu tertentu sebelum melakukan fungsi; Perpustakaan RPi. GPIO yang membolehkan kami mengawal pin Raspberry Pi GPIO.

dari mcpi.minecraft import Minecraft dari time import import import RPi. GPIO sebagai GPIO

Akhirnya, kami akan mengimport perpustakaan yang disebut rpi_ws281x yang merupakan perpustakaan RGB Matrix, di dalam perpustakaan, terdapat banyak fungsi yang akan kami gunakan seperti PixelStrip untuk menyiapkan objek jalur LED dan Warna untuk mengkonfigurasi objek warna RGB agar menyala LED RGB kami

dari rpi_ws281x import PixelStrip, Color

Dan itu saja, kami sudah selesai dengan mengimport perpustakaan, kini tiba masanya untuk menggunakannya! Begitu juga, perkara pertama adalah menggunakan perpustakaan Minecraft, kami ingin menghubungkan skrip python kami ke dunia Minecraft, kami dapat melakukan ini dengan memanggil fungsi init perpustakaan MCPI:

mc = Minecraft.create ()

Sekarang setiap kali kita mahu melakukan operasi di dunia minecrat, kita dapat menggunakan objek mc.

Langkah seterusnya adalah menentukan kelas matriks LED RGB yang akan kita gunakan untuk mengawal LED RGB kita, kita memulakan kelas dengan konfigurasi asas seperti bilangan led, pin, kecerahan dll …

kami membuat fungsi yang disebut clean yang akan "membersihkan" lebih sedikit dengan warna tertentu yang diberikan dan juga fungsi yang disebut run yang akan menginisialisasi objek LED RGB yang sebenarnya pada kali pertama kami menggunakannya.

kelas RGB_Matrix:

def _init _ (diri):

# Konfigurasi jalur LED:

self. LED_COUNT = 64 # Bilangan piksel LED.

self. LED_PIN = 12 # Pin GPIO disambungkan ke piksel (18 menggunakan PWM!).

self. LED_FREQ_HZ = 800000 # frekuensi isyarat LED dalam hertz (biasanya 800khz)

self. LED_DMA = 10 # Saluran DMA yang akan digunakan untuk menghasilkan isyarat (cuba 10)

self. LED_BRIGHTNESS = 10 # Tetapkan ke 0 untuk paling gelap dan 255 untuk yang paling terang

diri. LED_INVERT = Salah # Betul untuk membalikkan isyarat

self. LED_CHANNEL = 0 # tetapkan ke '1' untuk GPIO 13, 19, 41, 45 atau 53

# Tentukan fungsi yang menghidupkan LED dengan pelbagai cara. def clean (diri, jalur, warna):

# lap semua LED sekaligus

untuk i dalam jarak (strip.numPixels ()):

strip.setPixelColor (i, warna)

strip.show ()

def run (diri):

# Buat objek NeoPixel dengan konfigurasi yang sesuai.

jalur = PixelStrip (diri. LED_COUNT, diri. LED_PIN, diri. LED_FREQ_HZ, diri. LED_DMA, diri. LED_INVERT, diri. LED_BRIGHTNESS, diri. LED_CHANNEL)

cuba:

jalur balik

kecuali KeyboardInterrupt:

# bersihkan LED matriks sebelum gangguan

membersihkan diri (jalur)

Setelah selesai dengan perkara di atas, sudah tiba masanya untuk memanggil kelas tersebut dan membuat objek yang dapat kita gunakan dalam kod kita, pertama mari buat objek matriks LED RGB yang dapat kita gunakan menggunakan kelas yang telah kita buat sebelumnya:

matrixObject = RGB_Matrix ()

Sekarang mari kita gunakan objek ini untuk membuat objek jalur LED aktif yang akan kita gunakan untuk mengawal LED individu kita pada Matriks RGB:

jalur = matrixObject.run ()

Akhirnya untuk mengaktifkan jalur ini, kita perlu menjalankan satu fungsi terakhir:

jalur. mulakan ()

Minecraft API merangkumi banyak blok, setiap blok Minecraft mempunyai IDnya sendiri. Dalam contoh kami, kami telah mengambil sejumlah blok Minecraft dan cuba meneka warna mana yang paling sesuai untuknya.

RGB bermaksud Merah, Hijau dan biru, jadi kami memerlukan 3 nilai berbeza dari 0 hingga 255 untuk masing-masing, warna boleh berformat HEX atau RGB, kami menggunakan format RGB untuk contoh kami.

Di dunia Minecraft Pi terdapat ID blok biasa dan ID blok bulu khas, bulu khas terdapat di bawah nombor ID 35 tetapi dengan nombor sub yang terdiri daripada banyak id yang berbeza … Kami akan menyelesaikan masalah ini dengan membuat 2 senarai berasingan, satu untuk blok biasa dan satu senarai untuk blok bulu khas:

Senarai pertama adalah untuk blok biasa, misalnya 0 mewakili Blok udara, kami akan menetapkannya warna 0, 0, 0 yang kosong atau putih lengkap, apabila pemain akan melompat atau terbang dalam permainan, RGB akan dimatikan, 1 adalah blok yang berbeza dengan warna RGB 128, 128, 128 dan seterusnya…

#Rainbow Colors

warna pelangi = {

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

}

Untuk blok bulu kami melakukan perkara yang sama tetapi penting untuk diingat bahawa semua blok mempunyai ID 35, dalam senarai ini kami menentukan subtipe blok yang merupakan blok bulu. Subtipe bulu yang berbeza mempunyai warna yang berbeza tetapi semuanya adalah blok bulu.

warna_wol = {

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

}

Sekarang setelah kita selesai menentukan program, kelas dan fungsi utama kita, inilah masanya untuk berintegrasi dengan sensor papan LED CrowPi2 RGB kami.

Program utama akan mengambil parameter yang kami tetapkan sebelumnya dan memberi kesan pada perkakasan.

Kami akan menggunakan CrowPi2 RGB LED untuk menyalakannya berdasarkan langkah-langkah yang kami lakukan di dalam Minecraft Pi di setiap blok, mari kita mulakan!

Perkara pertama yang akan kami lakukan adalah menghasilkan beberapa blok wool dengan arahan dan membuat loop sementara, untuk memastikan program berjalan sepanjang kami bermain permainan.

Kita perlu mendapatkan beberapa data dari pemain, perkara pertama yang kita gunakan perintah player.getPos () untuk mendapatkan kedudukan pemain kemudian kita menggunakan getBlockWithData () untuk mendapatkan blok yang sedang kita berdiri (koordinat y adalah -1 yang bermaksud di bawah pemain)

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)

Walaupun Betul:

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

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

cetak (jenis Jenis)

Kemudian kami akan memeriksa sama ada blok itu adalah blok wol, nombor ID blok 35, jika ada, kami akan merujuk kepada warna wool_ dengan warna blok berdasarkan ID kamus dan menerangi warna yang sesuai.

jika blockType == 35:

# warna bulu khas

matrixObject.clean (jalur, warna_wol [str (data)])

Sekiranya bukan blok bulu, kami akan memeriksa sama ada blok itu ada di dalam kamus warna pelangi untuk mengelakkan pengecualian, jika ada, kami akan teruskan dengan mengambil warna dan mengubah RGB.

jika str (blockType) dalam warna pelangi:

cetak (pelangi_warna [str (blockType)])

matrixObject.clean (jalur, pelangi_ warna [str (blockType)])

tidur (0.5)

Anda sentiasa boleh mencuba dan menambahkan lebih banyak blok pada pelangi_ warna untuk menambah lebih banyak warna dan lebih banyak sokongan blok!

Sempurna! Melakukan projek menggunakan aksesori memang rumit tetapi menggunakan litar bersepadu CrowPi2, semuanya menjadi lebih mudah! Terlebih lagi, terdapat lebih daripada 20 sensor dan komponen di CrowPi2, yang membolehkan anda mencapai projek ideal anda dan juga projek AI!

Berikut adalah kod lengkap:

Langkah 10: Menggunakan CrowPi2-Hasilnya

Buka permainan dan jalankan skripnya, anda akan melihat hasilnya dalam video di atas:

Langkah 11: Menggunakan CrowPi2- Melangkah Lebih Lanjut

Sekarang kami telah menyelesaikan projek berwarna-warni kami dalam permainan Minecraft dengan CrowPi2. Mengapa tidak cuba menggunakan sensor dan komponen lain di CrowPi2 untuk bermain dengan permainan, seperti kayu bedik untuk mengawal pergerakan pemain, RFID untuk menghasilkan blok berdasarkan kad NFC yang berbeza dan lain-lain. Bersenang-senang dengan permainan anda di CrowPi2 dan harap anda dapat melakukannya projek yang lebih luar biasa dengan CrowPi2!

Sekarang, CrowPi2 ada di Kickstarter sekarang, anda juga dapat menikmati harga yang menarik.

Pasang pautan halaman Kickstarter CrowPi2

Disyorkan: