Оглавление:
- Запасы
- Шаг 1: материалы
- Шаг 2: Схема подключения
- Шаг 3. Настройте SPI
- Шаг 4: Код
- Шаг 5: результат
- Шаг 6: Использование CrowPi2-материалов
- Шаг 7: Использование CrowPi2 - Схема подключения
- Шаг 8: Использование CrowPi2 - настройка для SPI
- Шаг 9: Использование CrowPi2 - Код
- Шаг 10: Использование CrowPi2 - результат
- Шаг 11: Использование CrowPi2 - дальше
Видео: Создайте интерактивный мост Rainbow с помощью Minecraft Raspberry Pi Edition: 11 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:48
Вчера я увидел, как мой 8-летний племянник играет в Minecraft с помощью Raspberry Pi, который я дал ему раньше, и тогда у меня появилась идея, которая использует код для создания индивидуального и захватывающего проекта светодиодных блоков Minecraft-pi. Minecraft Pi - отличный способ начать работу с микрокомпьютером Raspberry Pi, Minecraft Pi - это специальная версия Minecraft, которая позволяет нам взаимодействовать с игрой, используя смертельно простой API Python для настройки игрового процесса и реквизита!
Есть много проектов, которые вы можете реализовать в мире Minecraft с помощью Raspberry Pi, но специально для нас этого было недостаточно, мы искали что-то сложное и одновременно интересное. В этом проекте мы встанем на несколько блоков Minecraft, определим идентификатор блока и определим цвет конкретного блока, на который мы наступили, на основе цвета, который мы зажжем нашим светодиодом RGB, чтобы создать интерактивную пошаговую игру!
Я буду использовать два метода для достижения эффекта, первый - использовать аксессуары, которые могут быть очень хаотичными…; второй - с использованием CrowPi2 (обучающийся компьютер со множеством датчиков, в настоящее время финансируемый на Kickstarter: CrowPi2)
Давайте начнем и посмотрим, как заархивировать такой замечательный проект!
Запасы
CrowPi2 уже запущен на кикстартере, проект CrowPi2 собрал почти 250 тысяч долларов.
Перейдите по ссылке:
Метод 1 Использование аксессуаров
Шаг 1: материалы
● 1 x Raspberry Pi 4, модель B
● 1 карта TF с изображением
● 1 блок питания Raspberry Pi
● Монитор 1 x 10,1 дюйма
● 1 блок питания для монитора
● 1 кабель HDMI
● 1 клавиатура и мышь
● 1 светодиод RGB (общий катод)
● 4 джемпера (от женщины к женщине)
Шаг 2: Схема подключения
На самом деле в цветном светодиоде RGB есть три источника света: красный, зеленый и синий. Управляйте этими тремя огнями, чтобы излучать свет разной интенсивности, и при смешивании они могут излучать свет разных цветов. Четыре контакта на светодиодном индикаторе - GND, R, G и B соответственно. Используемый мной светодиод RGB представляет собой обычный катод, а подключение к Raspberry Pi выглядит следующим образом:
RaspberryPi 4B (в названии функции) RGB LED
GPIO0 1 КРАСНЫЙ
GPIO1 3 ЗЕЛЕНЫЙ
GPIO2 4 СИНИЙ
GND 2 GND
Вторая картинка - это аппаратное подключение
Шаг 3. Настройте SPI
Поскольку нам нужно использовать SPI для управления RGB, нам нужно сначала включить интерфейс SPI, который по умолчанию отключен. Вы можете выполнить следующие шаги, чтобы включить интерфейс SPI:
Во-первых, вы можете использовать графический интерфейс рабочего стола, перейдя в меню запуска Pi, настройки Raspberry Pi, как показано на первом рисунке.
Во-вторых, перейдите в «Интерфейсы», включите SPI и нажмите «ОК» (второе изображение).
Наконец, перезапустите Pi, чтобы изменения вступили в силу. Нажмите на Pi Пуск, Меню, Настройки, Отключение. Поскольку нам просто нужно перезагрузить компьютер, нажмите кнопку «Перезагрузить».
Шаг 4: Код
Мы начнем с написания нашего кода на Python. Сначала мы начнем с импорта нескольких библиотек, которые нам понадобятся для интеграции нашего кода с миром Minecraft. Затем мы импортируем библиотеку времени, в частности функцию под названием sleep. Функция сна позволит нам подождать определенный интервал перед выполнением функции. И последнее, но не менее важное: мы импортируем библиотеку RPi. GPIO, которая позволяет нам управлять GPIO на Raspberry Pi.
из mcpi.minecraft импортировать Minecraft из time import sleep import RPi. GPIO as 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 ПУРПУРНЫЙ = 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 и настроить их.
красный_контакт = 17 зеленый_контакт = 18 синий_контакт = 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 (красный_контакт, 100)
зеленый = GPIO. PWM (green_pin, 100) синий = 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): # Декодировать 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) blue. ChangeDutyCycle (blue_value)
Отличная работа! Пришло время запустить нашу основную программу, подождите, еще одна переменная должна быть определена для записи цветового кода блока шерсти перед основной программой:
last_data = 0 попробуйте: 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: x, y, z = mc.player.getPos () # позиция игрока (x, y, z) block = mc.getBlockWithData (x, y-1, z) # ID блока #print (block) if block.id == WOOL и last_data! = Block.data: if block.data == W_RED: print ("Красный!") Set_color (RED) if block.data == W_ORANGE: print ("Orange!") Set_color (ORANGE) если block.data == W_ ЖЕЛТЫЙ: print («Желтый!») Set_color (ЖЕЛТЫЙ), если block.data == W_GREEN: print («Зеленый!») Set_color (ЗЕЛЕНЫЙ), если block.data == W_CYAN: print («Голубой!») Set_color (CYAN) if block.data == W_BLUE: print ("Синий!") set_color (BLUE), если block.data == W_PURPLE: print ("Purple!") set_color (PURPLE) if block.data == W_MAGENTA: print (" Пурпурный! ") Set_color (MAGENTA) if block.data == W_WHITE: print (" Белый! ") Set_color (WHITE) last_data = block.data sleep (0,05) за исключением KeyboardInterrupt: передать GPIO.cleanup ()
Поскольку основная программа показана выше, сначала нужно использовать некоторые команды для создания нескольких красочных блоков шерсти, затем нам нужно узнать позицию игрока, чтобы мы могли получить идентификатор блоков и его цветовой код. После получения информации о блоке мы будем использовать оператор, чтобы определить, является ли блок под игроком шерстяным блоком и имеет ли он цветовой код. Если да, оцените, какого цвета блок шерсти, и вызовите функцию set_color (), чтобы изменить цвет светодиода RGB так же, как у блока шерсти.
Кроме того, мы добавляем оператор try / except, чтобы перехватить исключение пользовательского прерывания, когда мы хотим выйти из программы, чтобы очистить вывод контактов GPIO.
Прилагается полный код.
Молодец, столько аксессуаров и слишком сложно, не так ли? Не волнуйтесь, давайте посмотрим на второй способ реализации проекта, который заставит вас чувствовать себя более гибким и удобным, - это использование нашего CrowPi2!
Шаг 5: результат
Откройте игру и запустите скрипт, результат вы увидите на видео выше
Затем мы будем использовать CrowPi2 для построения интерактивного моста Rainbow.
Шаг 6: Использование CrowPi2-материалов
● 1 х CrowPi2
Шаг 7: Использование CrowPi2 - Схема подключения
Нет надобности. В CrowPi2 есть много полезных датчиков и компонентов (более 20), все это в одном ноутбуке raspberry pi и образовательной платформе 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 из time import sleep import RPi. GPIO as GPIO
Наконец, мы импортируем библиотеку под названием rpi_ws281x, которая является библиотекой RGB-матрицы, внутри библиотеки есть несколько функций, которые мы будем использовать, такие как PixelStrip для настройки объекта светодиодной ленты и Color для настройки цветового объекта RGB для включения наши светодиоды RGB
from rpi_ws281x импортировать PixelStrip, Color
Вот и все, мы закончили с импортом библиотек, теперь пора их использовать! Точно так же, первое, что нужно сделать, это использовать библиотеку Minecraft, мы хотим подключить наш скрипт python к миру Minecraft, мы можем сделать это, вызвав функцию init библиотеки MCPI:
mc = Minecraft.create ()
Теперь каждый раз, когда мы хотим выполнить операции с миром minecrat, мы можем использовать объект mc.
Следующим шагом будет определение класса матрицы светодиодов RGB, который мы будем использовать для управления нашими светодиодами RGB, мы инициализируем класс базовой конфигурацией, такой как количество светодиодов, контактов, яркости и т. Д.
мы создаем функцию с именем clean, которая будет «очищать» меньшее количество с заданным определенным цветом, а также функцию с именем run, которая инициализирует фактический объект светодиода RGB в первый раз, когда мы захотим его использовать.
класс RGB_Matrix:
def _init _ (сам):
# Конфигурация светодиодной ленты:
self. LED_COUNT = 64 # Количество светодиодных пикселей.
self. LED_PIN = 12 # Вывод GPIO, подключенный к пикселям (18 использует ШИМ!).
self. LED_FREQ_HZ = 800000 # Частота сигнала светодиода в герцах (обычно 800 кГц)
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 (self, strip, color):
# протереть сразу все светодиоды
для i в диапазоне (strip.numPixels ()):
strip.setPixelColor (я, цвет)
strip.show ()
def run (self):
# Создать объект NeoPixel с соответствующей конфигурацией.
полоса = PixelStrip (self. LED_COUNT, self. LED_PIN, self. LED_FREQ_HZ, self. LED_DMA, self. LED_INVERT, self. LED_BRIGHTNESS, self. LED_CHANNEL)
пытаться:
возвратная полоса
кроме KeyboardInterrupt:
# очистить светодиод матрицы перед прерыванием
self.clean (полоса)
После того, как мы закончили с описанным выше, пришло время вызывать эти классы и создавать объекты, которые мы можем использовать в нашем коде. Сначала давайте создадим объект матрицы светодиодов RGB, который мы можем использовать с помощью класса, который мы создали ранее:
matrixObject = RGB_Matrix ()
Теперь давайте используем этот объект для создания объекта активной светодиодной ленты, который мы будем использовать для управления нашими отдельными светодиодами на матрице RGB:
полоса = matrixObject.run ()
Наконец, чтобы активировать эту полосу, нам нужно запустить последнюю функцию:
strip.begin ()
Minecraft API включает в себя множество блоков, каждый блок Minecraft имеет собственный идентификатор. В нашем примере мы взяли некоторое количество блоков Minecraft и попытались угадать, какой цвет им больше всего подходит.
RGB означает красный, зеленый и синий, поэтому нам понадобится 3 разных значения в диапазоне от 0 до 255 для каждого, цвета могут быть в формате HEX или RGB, в нашем примере мы используем формат RGB.
В мире Minecraft Pi есть идентификаторы нормальных блоков и идентификаторы специальных блоков шерсти, специальная шерсть имеет ID номер 35, но с дополнительными номерами в диапазоне от множества различных идентификаторов … Мы решим эту проблему, создав 2 отдельных списка, один для обычных блоков. и один список для специальных блоков шерсти:
Первый список предназначен для обычных блоков, например 0 представляет блок воздуха, мы установим ему цвет 0, 0, 0, который будет пустым или полностью белым, когда игрок будет прыгать или летать в игре, RGB отключится, 1 это другой блок с цветом RGB 128, 128, 128 и так далее…
# Цвета радуги
rainbow_colors = {
«0»: цвет (0, 0, 0), «1»: Цвет (128, 128, 128), «2»: цвет (0, 255, 0), «3»: цвет (160, 82, 45), «4»: Цвет (128, 128, 128), «22»: цвет (0, 0, 255)
}
Для блоков шерсти мы делаем то же самое, но важно помнить, что все блоки имеют ID 35, в этом списке мы определяем подтипы блока, который является блоком шерсти. Разные подтипы шерсти имеют разные цвета, но все они представляют собой блоки из шерсти.
шерсть_colors = {
«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, чтобы зажечь их в соответствии с шагами, которые мы делаем внутри 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)
в то время как True:
x, y, z = mc.player.getPos () # позиция игрока (x, y, z)
blockType, data = mc.getBlockWithData (x, y-1, z) # идентификатор блока
печать (тип блока)
Затем мы проверим, является ли блок шерстяным блоком с идентификатором 35, если это так, мы будем ссылаться на шерсть_colors с цветом блока на основе идентификатора словаря и соответственно подсветить нужный цвет.
если blockType == 35:
# нестандартный цвет шерсти
matrixObject.clean (полоса, цвет_шерсти [str (данные)])
Если это не шерстяной блок, мы проверим, находится ли этот блок в настоящее время в словаре rainbow_colors, чтобы избежать исключений, если это не так, мы продолжим, взяв цвет и изменив RGB.
если str (blockType) в rainbow_colors:
печать (rainbow_colors [str (blockType)])
matrixObject.clean (полоса, 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
Рекомендуемые:
Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi: 15 шагов (с изображениями)
Создайте своего управляемого через Интернет робота для потоковой передачи видео с помощью Arduino и Raspberry Pi: Я @RedPhantom (он же LiquidCrystalDisplay / Itay), 14-летний студент из Израиля, обучающийся в средней школе Макса Шейна для продвинутых естественных наук и математики. Я делаю этот проект, чтобы каждый мог учиться у него и делиться им! Вы можете
Создайте собственное окружающее освещение с помощью Raspberry Pi Zero: 5 шагов (с изображениями)
Создайте свое собственное окружающее освещение с помощью Raspberry Pi Zero: в этом проекте я покажу вам, как объединить Raspberry Pi Zero с парой дополнительных деталей, чтобы добавить эффект окружающего освещения на ваш телевизор, улучшающий впечатления от просмотра. Давайте начнем
Создайте игровую консоль с помощью Raspberry Pi!: 6 шагов
Создайте игровую консоль с помощью Raspberry Pi !: Вы хотите играть в ретро-игры, не платя за дорогие старые консоли? Вы можете сделать это с Raspberry Pi. Raspberry Pi - это компьютер «размером с кредитную карту»; способный на много крутых вещей. Есть много разных типов
Интерактивный Minecraft «Не вводить меч / знак» (ESP32-CAM): 15 шагов (с изображениями)
Interactive Minecraft Do Not Enter Sword / Sign (ESP32-CAM): На самом деле существует несколько причин, по которым этот проект появился: 1. Как автору совместной многозадачной библиотеки TaskScheduler мне всегда было любопытно, как совместить преимущества совместной многозадачности с преимуществами упреждающей
Создайте гигрометр дома с помощью Raspberry Pi и SI7021: 6 шагов
Создайте дома гигрометр, используя Raspberry Pi и SI7021: влажно ли сегодня? Мне кажется немного влажным. Иногда для нас высокая влажность оказывается не только вредной, но и неприятной. Для домовладельцев это также может нанести потенциальный ущерб. Для дома высокая влажность разрушает деревянные полы и мебель