Съдържание:

Изградете интерактивен мост Rainbow с помощта на Minecraft Raspberry Pi Edition: 11 стъпки
Изградете интерактивен мост Rainbow с помощта на Minecraft Raspberry Pi Edition: 11 стъпки

Видео: Изградете интерактивен мост Rainbow с помощта на Minecraft Raspberry Pi Edition: 11 стъпки

Видео: Изградете интерактивен мост Rainbow с помощта на Minecraft Raspberry Pi Edition: 11 стъпки
Видео: Веб-программирование – информатика для руководителей бизнеса 2016 2024, Може
Anonim
Image
Image

Вчера видях моя 8-годишен племенник да играе Minecraft с Raspberry Pi, който му дадох преди, тогава имам идея, че използва код, за да направя персонализиран и вълнуващ проект за LED блокове Minecraft-pi. Minecraft Pi е чудесен начин да започнете с микрокомпютъра Raspberry Pi, Minecraft Pi е специална персонализирана версия на Minecraft, която ни позволява да взаимодействаме с играта, използвайки смъртоносен прост API на Python, за да персонализираме играта и реквизита!

Има много проекти, които можете да направите в света на Minecraft с Raspberry Pi, но специално за нас това не беше достатъчно, търсехме нещо предизвикателно и мигащо едновременно. В този проект ще стъпим на няколко блока Minecraft, ще открием идентификатора на блока и ще открием цвета на конкретния блок, върху който сме стъпили, въз основа на цвета, който ще запалим нашия RGB LED, за да създадем интерактивна игра със стъпки!

Ще използвам два метода за постигане на ефекта, първият е използването на аксесоари, които може да са много хаотични …; втората използва CrowPi2 (учебен компютър с много сензори, понастоящем финансиран от Kickstarter: CrowPi2)

нека започнем и да видим как да архивираме такъв невероятен проект!

Консумативи

CrowPi2 сега е на живо в кикстарта, проектът CrowPi2 събра почти 250 000 долара.

Натиснете връзката:

Метод 1 Използване на аксесоари

Стъпка 1: Материали

● 1 x Raspberry Pi 4 модел B

● 1 x TF карта с изображение

● 1 x захранване Raspberry Pi

● 1 x 10,1 инчов монитор

● 1 x Захранване за монитора

● 1 x HDMI кабел

● 1 x Клавиатура и мишка

● 1 x RGB светодиод (общ катод)

● 4 x джъмпери (от жена към жена)

Стъпка 2: Схема на свързване

Схема на свързване
Схема на свързване

В действителност в цветния светодиод RGB има три светлини, които са червена светлина, зелена светлина и синя светлина. Управлявайте тези три светлини, за да излъчват светлина с различна интензивност, а когато се смесят, те могат да излъчват светлина с различни цветове. Четирите щифта на LED светлината са съответно GND, R, G и B. Използваният от мен RGB LED е общ катод, а връзката с Raspberry Pi е както следва:

RaspberryPi 4B (в името на функцията) RGB LED

GPIO0 1 ЧЕРВЕН

GPIO1 3 ЗЕЛЕН

GPIO2 4 СИН

GND 2 GND

Втората картина е хардуерната връзка

Стъпка 3: Конфигурирайте за SPI

Конфигуриране за SPI
Конфигуриране за SPI
Конфигуриране за SPI
Конфигуриране за SPI
Конфигуриране за SPI
Конфигуриране за SPI
Конфигуриране за SPI
Конфигуриране за SPI

Тъй като трябва да използваме SPI за контрол на RGB, първо трябва да активираме SPI интерфейса, който е деактивиран по подразбиране. Можете да изпълните стъпките по -долу, за да активирате SPI интерфейса:

Първо, можете да използвате графичния потребителски интерфейс на работния плот, като се насочите към менюто за стартиране на Pi, предпочитанията на конфигурацията на Raspberry Pi, както е показано на първата снимка.

Второ, отворете „Интерфейси“и активирайте SPI и щракнете върху OK (втората картина).

И накрая, рестартирайте своя Pi, за да сте сигурни, че промените ще влязат в сила. Щракнете върху Pi Start Menu Предпочитания Изключване. Тъй като просто трябва да рестартираме, щракнете върху бутона Рестартиране.

Стъпка 4: Кодът

Ще започнем с писането на нашия python код, първо ще започнем с импортирането на няколко библиотеки, които ще ни трябват, за да интегрираме нашия код със света на Minecraft. След това ще импортираме библиотеката с време, по -специално функция, наречена sleep. Функцията за заспиване ще ни позволи да изчакаме определен интервал, преди да изпълним функция. Не на последно място, импортираме библиотека RPi. GPIO, която ни позволява да контролираме GPIO на Raspberry Pi.

от mcpi.minecraft импортиране на Minecraft от време импортиране на импортиране на сън RPi. GPIO като GPIO

И това е всичко, свършихме с импортирането на библиотеките, сега е време да ги използваме! Първо, първо, е да използваме библиотеката на Minecraft, искаме да свържем нашия скрипт на python към света на Minecraft, можем да направим това, като извикаме функцията init () на библиотеката MCPI и след това зададем режима на GPIO и деактивираме предупреждението.

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

Сега дефинираме някои цветове на дъгата в шестнадесетичен, така че да можем да променим RGB цветовете.

БЯЛ = 0xFFFFFF ЧЕРВЕН = 0xFF0000 ОРАНЖЕВ = 0xFF7F00 ЖЪЛТ = 0xFFFF00 ЗЕЛЕН = 0x00FF00 ЦИАН = 0x00FFFF СИН = 0x0000FF ЛИЛОВО = 0xFF00FF MAGENTA = 0xFF0090

След това трябва да дефинираме някои променливи, за да запишем цвета на вълнения блок, който вече е дефиниран в списъка с блокове на 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

Идентификаторът на вълнения блок в Minecraft е 35. Сега трябва да конфигурираме щифта за RGB LED и да го настроим за тях.

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)

След това настройте ШИМ за всеки пин, имайте предвид, че диапазонът на стойността на ШИМ е 0-100. Тук първо задаваме цвета на RGB, водещ до бял (100, 100, 100).

червено = GPIO. PWM (red_pin, 100)

зелено = GPIO. PWM (green_pin, 100) blue = GPIO. PWM (blue_pin, 100) red.start (100) green.start (100) blue.start (100)

Следва създаването на две функции, които могат да се използват за декодиране на цвят и осветяване на RGB светодиода нагоре! Обърнете внимание, че функцията map2hundred () е да картографира стойности от 255 до 100, както споменахме по-горе, стойността на PWM трябва да бъде 0-100.

def map2hundred (стойност): връщане int (стойност * 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

# Стойности на картата red_value = map2hundred (red_value) green_value = map2hundred (green_value) blue_value = map2hundred (blue_value)

# Запалете! red. ChangeDutyCycle (red_value) green. ChangeDutyCycle (green_value) синьо. ChangeDutyCycle (blue_value)

Много добре! Време е да стартираме нашата основна програма, изчакайте, трябва да се определи друга променлива, за да се запише цветният код на вълнен блок преди основната програма:

last_data = 0 try: 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), докато е вярно: x, y, z = mc.player.getPos () # позиция на играча (x, y, z) блок = mc.getBlockWithData (x, y-1, z) # ID на блок # печат (блок), ако block.id == WOOL и 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_ ЖЪЛТО: печат ("Жълто!") Set_color (ЖЪЛТО), ако block.data == W_GREEN: печат ("Green!") Set_color (ЗЕЛЕН), ако block.data == W_CYAN: print ("Cyan!") Set_color (CYAN) ако 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) с изключение на KeyboardInterrupt: pass GPIO.cleanup ()

Тъй като основната програма е показана по -горе, първо да използваме някои команди за генериране на цветни вълнени блокове, след това трябва да разберем позицията на играча, за да можем да получим идентификатора на блоковете и неговия цветен код. След като получим информацията за блока, ще използваме израза, за да определим дали блокът под плейъра е вълнен блок и дали има цветовия код. Ако отговорът е да, преценете кой цвят е вълненият блок и извикайте функцията set_color (), за да промените цвета на RGB светодиода, същия като вълнения блок.

В допълнение, ние добавяме try/except израз, за да уловим изключението на потребителско прекъсване, когато искаме да излезем от програмата, за да изчистим изхода на GPIO щифтовете.

Приложен е пълният код.

Браво, толкова много аксесоари и твърде сложно нали? Не се притеснявайте, нека видим втория метод за постигане на проекта, който ще ви накара да се почувствате по -гъвкави и удобни, който използва нашия CrowPi2!

Стъпка 5: Резултатът

Image
Image

Отворете играта и стартирайте скрипта, ще видите резултата във видеото по -горе

След това ще използваме CrowPi2, за да изградим интерактивен мост Rainbow

Стъпка 6: Използване на CrowPi2-материали

● 1 x CrowPi2

Стъпка 7: Използване на CrowPi2- Диаграма на свързване

Няма нужда. В CrowPi2 има много полезни сензори и компоненти (повече от 20), всичко е в един малинов пи лаптоп и STEM образователна платформа, която ни позволява да правим множество проекти с лекота и без пот! В този случай ще използваме атрактивен и цветен модул на CrowPi2, който е 8x8 RGB матричен модул, който ни позволява да контролираме 64 RGB светодиода едновременно!

Стъпка 8: Използване на CrowPi2- Конфигуриране за SPI

Няма нужда. CrowPi2 идва с вградено изображение със система за обучение! Всичко е подготвено, което означава, че можете да програмирате и да научите директно. Освен това с нашия CrowPi2 е лесно и вече е интегрирано в платката като STEAM платформа, готова за работа.

Стъпка 9: Използване на CrowPi2- кода

Време е да стартираме нашата програма! Първо, импортирайте няколко библиотеки, като библиотека MCPI, която е библиотеката на Minecraft Pi Python, която ни позволява да използваме много прост API за интегриране със света на Minecraft; библиотека на времето, която ни позволява да използваме функцията за сън, за да изчакаме определен интервал, преди да изпълним функция; Библиотека RPi. GPIO, която ни позволява да контролираме пиновете на Raspberry Pi GPIO.

от mcpi.minecraft импортиране на Minecraft от време импортиране на импортиране на сън RPi. GPIO като GPIO

И накрая, ще импортираме библиотека, наречена rpi_ws281x, която е библиотеката на RGB Matrix, вътре в библиотеката има няколко функции, които ще използваме, като например PixelStrip за настройка на обекта с LED лента и Color за конфигуриране на RGB цветен обект, който да светне нашите RGB светодиоди

от rpi_ws281x импортиране PixelStrip, Цвят

И това е, свършихме с импортирането на библиотеките, сега е време да ги използваме! По същия начин, първото нещо е да използваме библиотеката Minecraft, искаме да свържем нашия скрипт на python към света на Minecraft, можем да направим това, като извикаме функцията init на библиотеката MCPI:

mc = Minecraft.create ()

Сега всеки път, когато искаме да извършваме операции в света на minecrat, можем да използваме mc обекта.

Следващата стъпка ще бъде да дефинираме RGB LED матричния клас, който ще използваме за управление на нашите RGB LED, ние инициализираме класа с основна конфигурация като брой светодиоди, щифтове, яркост и т.н.

създаваме функция, наречена clean, която ще „почиства“по -малко с определен цвят и също така функция, наречена run, която ще инициализира действителния RGB LED обект при първия път, когато искаме да го използваме.

клас RGB_Matrix:

def _init _ (себе си):

# Конфигурация на LED лента:

self. LED_COUNT = 64 # Брой LED пиксели.

self. LED_PIN = 12 # GPIO щифт, свързан към пикселите (18 използва PWM!).

self. LED_FREQ_HZ = 800000 # Честота на LED сигнала в херци (обикновено 800khz)

self. LED_DMA = 10 # DMA канал за генериране на сигнал (опитайте 10)

self. LED_BRIGHTNESS = 10 # Задайте 0 за най -тъмните и 255 за най -ярките

self. LED_INVERT = False # Вярно за инвертиране на сигнала

self. LED_CHANNEL = 0 # зададено на '1' за GPIO 13, 19, 41, 45 или 53

# Определете функции, които анимират светодиодите по различни начини. def clean (самостоятелно, лента, цвят):

# изтрийте всички светодиоди наведнъж

за i в обхват (strip.num Пиксели ()):

strip.setPixelColor (i, цвят)

strip.show ()

def run (самостоятелно):

# Създайте обект NeoPixel с подходяща конфигурация.

strip = PixelStrip (самостоятелно. LED_COUNT, self. LED_PIN, самостоятелно. LED_FREQ_HZ, самостоятелно. LED_DMA, самостоятелно. LED_INVERT, самостоятелно. LED_BRIGHTNESS, самостоятелно. LED_CHANNEL)

опитвам:

връщаща лента

с изключение на KeyboardInterrupt:

# почистете матричния светодиод преди прекъсване

self.clean (лента)

След като приключихме с горното, време е да извикаме тези класове и да създадем обекти, които можем да използваме в нашия код, първо нека създадем RGB LED матричен обект, който можем да използваме, като използваме класа, който сме създали по -рано:

matrixObject = RGB_Matrix ()

Сега нека използваме този обект, за да създадем активен обект на LED лента, който ще използваме за управление на нашите индивидуални светодиоди върху RGB матрицата:

strip = matrixObject.run ()

И накрая, за да активираме тази лента, ще трябва да изпълним една последна функция:

strip.begin ()

API на Minecraft включва много блокове, всеки блок на Minecraft има собствен идентификатор. В нашия пример взехме известно количество Minecraft блокове и се опитахме да отгатнем кой цвят е най -подходящ за тях.

RGB означава червено, зелено и синьо, така че ще се нуждаем от 3 различни стойности, вариращи от 0 до 255 за всяка една, цветовете могат да бъдат HEX или RGB формат, ние използваме RGB формата за нашия пример.

В света на Minecraft Pi има нормални идентификатори на блокове и специални идентификатори на вълнени блокове, специалната вълна е под идентификационен номер 35, но с подномера, вариращи до много различни идентификатори … Ще решим този проблем, като създадем 2 отделни списъка, един за нормални блокове и един списък за специални вълнени блокове:

Първият списък е за нормални блокове, например 0 представлява Air block, ние ще му зададем цвят 0, 0, 0, който е празен или напълно бял, когато играчът ще скочи или полети в играта, RGB ще се изключи, 1 е различен блок с RGB цвят 128, 128, 128 и така нататък …

#Цветове на дъгата

цветове на дъгата = {

"0": Цвят (0, 0, 0), "1": Цвят (128, 128, 128), "2": Цвят (0, 255, 0), "3": Цвят (160, 82, 45), "4": Цвят (128, 128, 128), "22": Цвят (0, 0, 255)

}

За вълнените блокове правим същото, но е важно да запомните, че всички блокове имат идентификатор 35, в този списък дефинираме подтиповете на блока, който е вълнен блок. Различните подтипове вълна имат различни цветове, но всички те са вълнени блокове.

вълнени_цветове = {

"6": Цвят (255, 105, 180), "5": Цвят (0, 255, 0), "4": Цвят (255, 255, 0), "14": Цвят (255, 0, 0), "2": Цвят (255, 0, 255)

}

Сега, когато приключваме с дефинирането на нашата основна програма, класове и функции, е време да се интегрираме с нашия CrowPi2 RGB LED сензор на борда.

Основната програма ще вземе параметрите, които дефинирахме по -рано, и ще окаже въздействие върху хардуера.

Ще използваме CrowPi2 RGB LED, за да ги осветим въз основа на стъпките, които правим в Minecraft Pi на всеки блок, нека започнем!

Първото нещо, което ще направим, е да генерираме някои вълнени блокове с команди и да създадем цикъл while, за да поддържаме програмата да работи, докато играем играта.

Ще трябва да вземем някои данни от плейъра, първо използваме командата player.getPos (), за да получим позицията на играча, след това използваме getBlockWithData (), за да получим блока, на който стоим в момента (координата y е -1, която означава под плейъра)

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)

докато е вярно:

x, y, z = mc.player.getPos () # позиция на играч (x, y, z)

blockType, data = mc.getBlockWithData (x, y-1, z) # ID на блок

печат (blockType)

След това ще проверим дали блокът е вълнен блок, идентификационен номер на блок 35, ако е такъв, ще се позовем на вълна_цветове с цвета на блока въз основа на идентификатора на речника и ще светнем съответно правилния цвят.

ако blockType == 35:

# персонализирани цветове вълна

matrixObject.clean (лента, вълнени_цветове [str (данни)])

Ако не е вълнен блок, ще проверим дали блокът в момента е в речника rainbow_colors, за да избегнем изключения, ако е така, ще продължим, като вземем цвета и сменим RGB.

ако str (blockType) в rainbow_colors:

печат (rainbow_colors [str (blockType)])

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

сън (0,5)

Винаги можете да опитате и да добавите още блокове към rainbow_color, за да добавите повече цветове и повече поддръжка на блокове!

Перфектно! Правенето на проекти с помощта на аксесоари е сложно, но с помощта на интегралната схема CrowPi2 нещата стават много по -лесни! Нещо повече, в CrowPi2 има повече от 20 сензора и компоненти, което ви позволява да постигнете идеалните си проекти и дори проектите за AI!

По -долу е пълен код:

Стъпка 10: Използване на CrowPi2-резултатът

Отворете играта и стартирайте скрипта, ще видите резултата във видеото по -горе:

Стъпка 11: Използване на CrowPi2- Продължаване

Сега завършихме нашия пъстър проект в играта Minecraft с CrowPi2. Защо не опитате да използвате други сензори и компоненти на CrowPi2, за да играете с играта, като джойстик за управление на движението на плейъра, RFID за генериране на блокове на базата на различни NFC карти и т.н. Забавлявайте се с играта си на CrowPi2 и се надявам, че можете още невероятни проекти с CrowPi2!

Сега CrowPi2 вече е на Kickstarter, вие също бихте могли да се насладите на атрактивната цена.

Прикачете връзката към страницата на Kickstarter CrowPi2

Препоръчано: