Daftar Isi:

Bangun Jembatan Interaktif Pelangi Menggunakan Minecraft Raspberry Pi Edition: 11 Langkah
Bangun Jembatan Interaktif Pelangi Menggunakan Minecraft Raspberry Pi Edition: 11 Langkah

Video: Bangun Jembatan Interaktif Pelangi Menggunakan Minecraft Raspberry Pi Edition: 11 Langkah

Video: Bangun Jembatan Interaktif Pelangi Menggunakan Minecraft Raspberry Pi Edition: 11 Langkah
Video: Прохождение The Last of Us (Одни из нас) part 1 #2 Замес в музее 2024, November
Anonim
Image
Image

Kemarin, saya melihat keponakan saya yang berusia 8 tahun bermain Minecraft dengan Raspberry Pi yang saya berikan sebelumnya, lalu saya mendapat ide, yaitu menggunakan kode untuk membuat proyek blok LED Minecraft-pi yang disesuaikan dan menarik. Minecraft Pi adalah cara yang bagus untuk memulai dengan komputer mikro Raspberry Pi, Minecraft Pi adalah versi khusus Minecraft yang dibuat khusus yang memungkinkan kita untuk berinteraksi dengan game menggunakan API Python sederhana yang mematikan untuk menyesuaikan pengalaman game dan alat peraga!

Ada banyak proyek yang dapat Anda lakukan di dunia Minecraft dengan Raspberry Pi tetapi secara khusus bagi kami itu tidak cukup, kami mencari sesuatu yang menantang dan berkedip pada saat yang sama. Dalam proyek ini, kami akan menginjak beberapa blok Minecraft, mendeteksi ID blok dan mendeteksi warna blok tertentu yang kami injak, berdasarkan warna kami akan menyalakan LED RGB kami untuk membuat permainan langkah interaktif!

Saya akan menggunakan dua metode untuk mencapai efeknya, yang pertama adalah menggunakan aksesori, yang mungkin sangat kacau…; yang kedua menggunakan CrowPi2 (belajar komputer dengan banyak sensor, saat ini crowdfunded di Kickstarter:CrowPi2)

mari kita mulai dan lihat cara mengarsipkan proyek yang luar biasa ini!

Perlengkapan

CrowPi2 sekarang aktif di kickstarter sekarang, proyek CrowPi2 telah mengumpulkan hampir $250k.

Tekan link:

Metode1 Menggunakan aksesoris

Langkah 1: Bahan

● 1 x Raspberry Pi 4 model B

● 1 x kartu TF dengan gambar

● 1 x catu daya Raspberry Pi

● Monitor 1 x 10,1 inci

● 1 x Catu daya untuk monitor

● 1 x kabel HDMI

● 1 x Keyboard dan mouse

● 1 x LED RGB (Katoda umum)

● 4 x Jumper (Perempuan ke Perempuan)

Langkah 2: Diagram Koneksi

Diagram Koneksi
Diagram Koneksi

Sebenarnya ada tiga lampu dalam LED warna RGB, yaitu lampu merah, lampu hijau, dan lampu biru. Kontrol ketiga lampu ini untuk memancarkan cahaya dengan intensitas yang berbeda, dan ketika dicampur, mereka dapat memancarkan cahaya dengan berbagai warna. Empat pin pada lampu LED masing-masing adalah GND, R, G, dan B. LED RGB yang saya gunakan adalah katoda umum, dan koneksi ke Raspberry Pi adalah sebagai berikut:

RaspberryPi 4B (dalam nama fungsi) LED RGB

GPIO0 1 MERAH

GPIO1 3 HIJAU

GPIO2 4 BIRU

GND 2 GND

Gambar kedua adalah koneksi perangkat keras

Langkah 3: Konfigurasi untuk SPI

Konfigurasi untuk SPI
Konfigurasi untuk SPI
Konfigurasi untuk SPI
Konfigurasi untuk SPI
Konfigurasi untuk SPI
Konfigurasi untuk SPI
Konfigurasi untuk SPI
Konfigurasi untuk SPI

Karena kita perlu menggunakan SPI untuk mengontrol RGB, kita harus mengaktifkan antarmuka SPI terlebih dahulu, yang dinonaktifkan secara default. Anda dapat mengikuti langkah-langkah di bawah ini untuk mengaktifkan antarmuka SPI:

Pertama, Anda dapat menggunakan Desktop GUI dengan menuju ke Pi start MenuupreferencesRaspberry Pi Configuration, seperti yang ditunjukkan pada gambar pertama.

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

Terakhir, mulai ulang Pi Anda untuk memastikan bahwa perubahan diterapkan. Klik pada Pi Start MenuPreferencesShutdown. Karena kita hanya perlu me-restart, klik tombol Reboot.

Langkah 4: Kode

Kami akan mulai dengan menulis kode python kami, pertama, kami akan mulai dengan mengimpor beberapa perpustakaan yang kami perlukan untuk mengintegrasikan kode kami dengan dunia Minecraft. Kemudian, kami akan mengimpor perpustakaan waktu, khususnya fungsi yang disebut tidur. Fungsi tidur akan memungkinkan kita untuk menunggu interval tertentu sebelum menjalankan suatu fungsi. Last but not least, kami mengimpor perpustakaan RPi. GPIO yang memungkinkan kami untuk mengontrol GPIO di Raspberry Pi.

dari mcpi.minecraft impor Minecraft dari waktu impor tidur impor RPi. GPIO sebagai GPIO

Dan itu saja, kami telah selesai mengimpor perpustakaan, sekarang saatnya untuk menggunakannya! Hal pertama yang pertama, adalah menggunakan perpustakaan Minecraft, kami ingin menghubungkan skrip python kami ke dunia Minecraft, kami dapat melakukan ini dengan menjalankan fungsi init() dari perpustakaan MCPI dan kemudian mengatur mode GPIO dan menonaktifkan peringatan.

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

Sekarang, kita mendefinisikan 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 UNGU = 0xFF00FF MAGENTA = 0xFF0090

Selanjutnya, kita perlu mendefinisikan beberapa variabel untuk merekam warna blok wol, yang sudah ditentukan dalam daftar 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 wol di Minecraft adalah 35. Sekarang, kita perlu mengonfigurasi pin untuk LED RGB dan mengaturnya.

pin_merah = 17 pin_hijau = 18 pin_biru = 27

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

Kemudian atur PWM untuk masing-masing pin, perhatikan range nilai PWM 0-100. Disini kita atur warna led RGB menjadi putih(100, 100, 100) terlebih dahulu.

merah = GPIO. PWM(pin_merah, 100)

hijau = GPIO. PWM(pin_hijau, 100)biru = GPIO. PWM(pin_biru, 100) merah.mulai(100) hijau.mulai(100) biru.mulai(100)

Berikut ini adalah membuat dua fungsi, yang dapat digunakan untuk memecahkan kode warna dan menyalakan LED RGB! Perhatikan bahwa fungsi map2hundred() adalah untuk memetakan nilai dari 255 hingga 100, seperti yang kami katakan sebelumnya, nilai PWM harus 0-100.

def map2hundred(nilai): mengembalikan 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)

# Menyalakan! merah. ChangeDutyCycle(red_value) hijau. ChangeDutyCycle(green_value) biru. ChangeDutyCycle(blue_value)

Sudah selesai dilakukan dengan baik! Saatnya untuk memulai program utama kita, tunggu, variabel lain harus ditentukan untuk merekam kode warna blok wol sebelum program utama:

last_data = 0 coba: 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) while True: x, y, z = mc.player.getPos() # posisi pemain (x, y, z) block = mc.getBlockWithData(x, y-1, z) # block ID #print(block) if block.id == WOOL dan last_data != block.data: if block.data == W_RED: print("Red!") set_color(RED) if block.data == W_ORANGE: print("Oranye!") set_color(ORANGE) if blok.data == W_ KUNING: print("Kuning!") set_color(KUNING) jika block.data == W_GREEN: print("Green!") set_color(GREEN) jika 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) kecuali KeyboardInterrupt: pass GPIO.cleanup()

Seperti program utama yang ditunjukkan di atas, pertama-tama untuk menggunakan beberapa perintah untuk menghasilkan beberapa blok wol warna-warni, maka kita perlu mencari tahu posisi pemain sehingga kita bisa mendapatkan id blok dan kode warnanya. Setelah mendapatkan informasi blok, kami akan menggunakan pernyataan untuk menentukan apakah blok di bawah pemain adalah blok wol dan apakah memiliki kode warna. Jika ya, tentukan warna blok wol mana dan panggil fungsi set_color() untuk mengubah warna led RGB sama dengan blok wol.

Selain itu, kami menambahkan pernyataan try/except untuk menangkap pengecualian interupsi pengguna ketika kami ingin keluar dari program untuk menghapus output pin GPIO.

Terlampir adalah kode lengkapnya.

Bagus sekali, begitu banyak aksesoris dan terlalu rumit bukan? Jangan khawatir, mari kita lihat metode kedua untuk mencapai proyek, yang akan membuat Anda merasa lebih fleksibel dan nyaman, yaitu menggunakan CrowPi2 kami!

Langkah 5: Hasilnya

Image
Image

Buka gamenya dan jalankan scriptnya, kamu akan melihat hasilnya pada video diatas

Kemudian kita akan menggunakan CrowPi2 untuk membangun jembatan interaktif Rainbow selanjutnya

Langkah 6: Menggunakan CrowPi2-Materials

●1 x CrowPi2

Langkah 7: Menggunakan CrowPi2- Diagram Koneksi

Tidak dibutuhkan. Ada banyak sensor dan komponen yang berguna (lebih dari 20) di CrowPi2, semuanya dalam satu laptop raspberry pi dan platform pendidikan STEM yang memungkinkan kita melakukan banyak proyek dengan mudah dan tanpa keringat! Dalam hal ini, kita akan menggunakan modul yang menarik dan berwarna-warni pada CrowPi2, yang merupakan modul matriks 8x8 RGB, yang memungkinkan kita untuk mengontrol 64 led RGB secara bersamaan!

Langkah 8: Menggunakan CrowPi2- Konfigurasi untuk SPI

Tidak dibutuhkan. CrowPi2 hadir dengan gambar bawaan dengan sistem pembelajaran! Semuanya sudah disiapkan yang artinya Anda bisa memprogram dan belajar langsung. Selain itu, dengan CrowPi2 kami, ini mudah dan sudah terintegrasi ke dalam papan sebagai platform STEAM yang siap digunakan.

Langkah 9: Menggunakan CrowPi2- Kode

Sekarang, saatnya untuk memulai program kami! Pertama, impor beberapa library, seperti library MCPI yang merupakan library Minecraft Pi Python yang memungkinkan kita menggunakan API yang sangat sederhana untuk berintegrasi dengan dunia Minecraft; perpustakaan waktu yang memungkinkan kita untuk fungsi tidur untuk menunggu interval tertentu sebelum melakukan suatu fungsi; Pustaka RPi. GPIO yang memungkinkan kita untuk mengontrol pin GPIO Raspberry Pi.

dari mcpi.minecraft impor Minecraft dari waktu impor tidur impor RPi. GPIO sebagai GPIO

Terakhir, kita akan mengimport library bernama rpi_ws281x yang merupakan library RGB Matrix, di dalam library tersebut terdapat beberapa fungsi yang akan kita gunakan seperti PixelStrip untuk mengatur objek strip LED dan Color untuk mengkonfigurasi objek warna RGB agar menyala LED RGB kami

dari rpi_ws281x impor PixelStrip, Color

Dan itu saja, kami telah selesai mengimpor perpustakaan, sekarang saatnya untuk menggunakannya! Sama, hal pertama adalah menggunakan perpustakaan Minecraft, kami ingin menghubungkan skrip python kami ke dunia Minecraft, kami dapat melakukan ini dengan menjalankan fungsi init dari perpustakaan MCPI:

mc = Minecraft.create()

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

Langkah selanjutnya adalah menentukan kelas matriks LED RGB yang akan kita gunakan untuk mengontrol LED RGB kita, kita menginisialisasi kelas dengan konfigurasi dasar seperti jumlah led, pin, kecerahan dll …

kita membuat fungsi bernama 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 saat pertama kali kita ingin menggunakannya.

kelas RGB_Matrix:

def _init_(sendiri):

# Konfigurasi strip LED:

self. LED_COUNT = 64 # Jumlah piksel LED.

self. LED_PIN = 12 # pin GPIO terhubung ke piksel (18 menggunakan PWM!).

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

self. LED_DMA = 10 # DMA channel yang digunakan untuk menghasilkan sinyal (coba 10)

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

self. LED_INVERT = Salah # Benar untuk membalikkan sinyal

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

# Tentukan fungsi yang menghidupkan LED dengan berbagai cara. def bersih (diri, strip, warna):

# bersihkan semua LED sekaligus

untuk saya dalam jangkauan (strip.numPixels()):

strip.setPixelColor(i, warna)

strip.tampilkan()

def run (sendiri):

# Buat objek NeoPixel dengan konfigurasi yang sesuai.

strip = PikselStrip(diri. LED_COUNT, diri. LED_PIN, diri. LED_FREQ_HZ, diri. LED_DMA, diri. LED_INVERT, diri. LED_BRIGHTNESS, diri. LED_CHANNEL)

mencoba:

strip kembali

kecuali KeyboardInterrupt:

# bersihkan LED matriks sebelum gangguan

self.clean(strip)

Setelah kita selesai dengan hal di atas, saatnya untuk memanggil kelas-kelas itu dan membuat objek yang dapat kita gunakan dalam kode kita, pertama-tama mari kita 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 strip LED aktif yang akan kita gunakan untuk mengontrol masing-masing LED pada Matriks RGB:

strip = matrixObject.run()

Akhirnya untuk mengaktifkan strip ini, kita harus menjalankan satu fungsi terakhir:

strip.mulai()

API Minecraft mencakup banyak blok, setiap blok Minecraft memiliki ID sendiri. Dalam contoh kami, kami telah mengambil sejumlah blok Minecraft dan mencoba menebak warna mana yang paling cocok untuk mereka.

RGB adalah singkatan dari Red, Green dan blue jadi kita membutuhkan 3 nilai yang berbeda mulai dari 0 hingga 255 untuk masing-masing, warna dapat berupa format HEX atau RGB, kita menggunakan format RGB untuk contoh kita.

Di dunia Minecraft Pi ada ID blok normal dan ID blok wol khusus, wol khusus berada di bawah nomor ID 35 tetapi dengan nomor sub mulai dari banyak id yang berbeda … Kami akan memecahkan masalah ini dengan membuat 2 daftar terpisah, satu untuk blok normal dan satu daftar untuk blok wol khusus:

Daftar pertama untuk blok normal, misalnya 0 mewakili blok Udara, kami akan mengaturnya warna 0, 0, 0 yang kosong atau putih lengkap, ketika pemain akan melompat atau terbang dalam permainan RGB akan mati, 1 adalah blok yang berbeda dengan warna RGB 128, 128, 128 dan seterusnya …

#Warna Pelangi

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 wol kami melakukan hal yang sama tetapi penting untuk diingat bahwa semua blok memiliki ID 35, dalam daftar ini kami mendefinisikan subtipe blok yang merupakan blok wol. Subtipe wol yang berbeda memiliki warna yang berbeda tetapi semuanya adalah blok wol.

wol_warna = {

"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 mendefinisikan program, kelas, dan fungsi utama kita, saatnya untuk berintegrasi dengan sensor LED pada papan RGB CrowPi2 kita.

Program utama akan mengambil parameter yang telah kita definisikan sebelumnya dan berdampak pada perangkat keras.

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

Hal pertama yang akan kita lakukan adalah membuat beberapa blok wol dengan perintah dan membuat loop sementara, untuk menjaga program tetap berjalan selama kita memainkan game.

Kita perlu mendapatkan beberapa data dari pemain, pertama-tama kita menggunakan perintah player.getPos() untuk mendapatkan posisi pemain kemudian kita menggunakan getBlockWithData() untuk mendapatkan blok tempat kita berdiri saat ini (koordinat y adalah -1 yang mana berarti 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)

sementara Benar:

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

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

cetak (tipe blok)

Kemudian kami akan memeriksa apakah blok tersebut adalah blok wol, nomor ID blok 35, jika ya, kami akan merujuk ke wool_colors dengan warna blok berdasarkan ID kamus dan menyalakan warna yang tepat.

jika blockType == 35:

# warna wol khusus

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

Jika bukan blok wol, kami akan memeriksa apakah blok saat ini ada di dalam kamus rainbow_colors untuk menghindari pengecualian, jika ya, kami akan melanjutkan dengan mengambil warna dan mengubah RGB.

jika str(blockType) di rainbow_colors:

print(rainbow_colors[str(blockType)])

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

tidur(0.5)

Anda selalu dapat mencoba dan menambahkan lebih banyak blok ke rainbow_color untuk menambahkan lebih banyak warna dan lebih banyak dukungan blok!

Sempurna! Melakukan proyek menggunakan aksesori itu rumit tetapi menggunakan sirkuit terintegrasi CrowPi2, segalanya menjadi lebih mudah! Terlebih lagi, ada lebih dari 20 sensor dan komponen di CrowPi2, yang memungkinkan Anda mencapai proyek ideal dan bahkan proyek AI!

Di bawah ini adalah kode lengkapnya:

Langkah 10: Menggunakan CrowPi2-Hasilnya

Buka gamenya dan jalankan scriptnya, kamu akan melihat hasilnya pada video diatas:

Langkah 11: Menggunakan CrowPi2- Melangkah Lebih Jauh

Sekarang kami telah menyelesaikan proyek penuh warna kami di game Minecraft dengan CrowPi2. Mengapa tidak mencoba menggunakan sensor dan komponen lain di CrowPi2 untuk bermain dengan game, seperti joystick untuk mengontrol pergerakan pemain, RFID untuk menghasilkan blok berdasarkan kartu NFC yang berbeda, dll. Bersenang-senanglah dengan game Anda di CrowPi2 dan semoga Anda bisa melakukannya proyek yang lebih luar biasa dengan CrowPi2!

Sekarang, CrowPi2 ada di Kickstarter sekarang, Anda juga bisa menikmati harga yang menarik.

Lampirkan tautan halaman Kickstarter CrowPi2

Direkomendasikan: