Построение контроллеров на Raspberry Pi #6: интерактивные графические контроллеры
Raspberry Pi является универсальным одноплатным компьютером, который позволяет создавать различные встраиваемые контроллеры. Проекты, рассмотренные в данной практической серии, это небольшие примеры электронных устройств и гаджетов, которые могут быть построены на основе Raspberry Pi.
В шестой части серии «Построение контроллеров на Raspberry Pi» вы узнаете, как реализовать графическое отображение прыгающего мяча с помощью нескольких дополнительных электронных компонентов и физических вычислений.
Рисунок 1 показывает основные блоки компонентов, необходимых для создания интерактивного графического контроллера.
Список компонентов, необходимых для сборки проекта, показан ниже.
Список компонентов
- Raspberry Pi (модель A+, B, B+, Pi2, Pi Zero или Pi3)
- резистор 1 кОм (коричневый, черный, коричневый, золотой), 0,25 Вт, 5%
- резистор 10 кОм (коричневый, черный, оранжевый, золотой), 0,25 Вт, 5%
- фотоэлемент
- HDMI кабель
- HDMI монитор
- кнопка
- переходник для GPIO выводов Raspberry Pi
- беспаечная макетная плата
- перемычки (папа-папа)
- перемычки (мама-папа)
Pygame и Raspberry Pi
Одним из ключевых элементов интерактивного графического контроллера является Python библиотека Pygame. Python библиотека Pygame делает простым добавление графики в анимационные приложения на Raspberry Pi. Библиотека Pygame позволяет создавать игры и интерактивные объекты без преодоления трудностей разработки специального кода и алгоритмов.
Интерактивный графический контроллер, который мы создадим, использует библиотеку Pygame для добавления изображения прыгающего мяча в окно, которое называется холст. Рисунок 2 показывает холст, построенный с помощью Pygame для изображения мяча.
Размеры холста заданы с помощью Python инструкции под названием size
. Инструкция size
определяет ширину (width
) и высоту (height
) холста, как показано ниже.
size = width, height = 500, 500
Таким образом, библиотека Pygame предоставляет следующие улучшения программирования для Python:
- созданная графика не будет мерцать;
- графические элементы могут управляться с соответствующей скоростью движения с помощью Raspberry Pi;
- графические элементы могут управляться с помощью клавиатуры, мыши или внешних датчиков.
В дополнение к добавлению графики, как показано на блок-схеме на рисунке 1, с помощью библиотеки Pygame цифровой датчик будет управлять изображением интерактивного контроллера. Чтобы перемещать мяч на холсте, мы соберем цифровой датчик с использованием кнопки или фотоэлемента.
Теперь давайте обсудим функциональное взаимодействие между прыгающим мячом и цифровым датчиком с помощью физических вычислений.
Физические вычисления и Raspberry Pi
Вторым элементом для работы интерактивного графического контроллера является способность реагировать на физическое движение. Физическим взаимодействием для нашего проекта будет движение руки, имитирующее удары по мячу, как показано на рисунке 3. Этот метод реализации отклика на воздействие на датчик, использующий код и электронику, называется физическим вычислением.
Окружающей средой для датчика является беспаечная макетная плата и вспомогательная схема с подтягивающим резистором. При прохождении руки над датчиком генерируется электрический сигнал. Этот электрический сигнал затем обрабатывается компьютером Raspberry Pi посредством Python кода, находящегося в памяти микроконтроллера. Библиотека Pygame создаст холст с мячиком, позволяющий графическому элементу двигаться в соответствии с параметрами движения в Python коде. Параметром движения для этой интерактивной анимации является диагональное направление движения мяча по холсту.
Мы будем использовать фотоэлемент (в качестве датчика движения руки), а также Python код и библиотеку Pygame для создания интерактивного графического контроллера на основе физических вычислений. Теперь, ознакомившись с физическими вычислениями и библиотекой Pygame, мы готовы собрать наш интерактивный графический контроллер.
Методы разводки электрической схемы
Для сборки электронной схемы фотоэлементного датчика мы будем использовать беспаечную макетную плату и перемычки. Как показано на рисунке 3, выход электронной схемы фотоэлементного датчика будет подключен к GPIO (вход/выход общего назначения) выводу Raspberry Pi. Мы подключим выход схемы непосредственно к GPIO выводу 25 Raspberry Pi.
Перед сборкой контроллера, соберем тестовую схему с кнопкой для проверки интерфейса электрической схемы цифрового коммутатора. Подтягивающий резистор 1 кОм обеспечит цифровые сигналы с напряжениями 0 и 3,3 вольта на GPIO выводе 25 Raspberry Pi, когда кнопка нажата или отпущена. Рисунок 4 показывает схему соединений тестовой электрической схемы с кнопкой.
К сожалению, на печатной плате не приводится маркировка GPIO выводов 40-пинового разъема Raspberry Pi. Для помощи в подключении тестовой схемы на рисунке 5 приведена распиновка разъема GPIO выводов Raspberry Pi.
Другой способ подключения электронной схемы фотоэлементного датчика к Raspberry Pi заключается в использовании Т-образного переходника для разъема GPIO выводов на макетную плату, который показан на рисунке 6.
Переходник для разъема GPIO выводов Raspberry Pi вставляется в стандартную макетную плату и подключается плоским шлейфом к Raspberry Pi. Рисунок 7 показывает подключение тестовой схемы с кнопкой к Raspberry Pi с помощью переходника.
Теперь, собрав тестовую схему, мы готовы проверить работу интерактивного графического контроллера с помощью python кода, показанного в листинге 1 ButtonBouncingBall.py.
# Подключаем библиотеки Python
import sys, pygame
import time
import RPi.GPIO as io
io.setmode(io.BCM)
# Выполняем назначение выводов
button_pin = 25
# Настроить button_pin на вход
io.setup(button_pin, io.IN)
pygame.init( )
# Установить параметры холста
size = width, height = 500, 500
speed = [100, 100]
white = 255,255,255
# Показать заголовок холста
pygame.display.set_caption("Bouncing Ball")
screen = pygame.display.set_mode(size)
ball = pygame.image.load("beachball2.png")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
if io.input(button_pin): # Если кнопка нажата, то перемещать мяч
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width: # Перемещать мяч вверх
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height: # Перемещать мяч вниз
speed[1] = -speed[1]
screen.fill(white) # Установить фон холста
screen.blit(ball, ballrect)
pygame.display.flip()
time.sleep(0.1) # Ждать 100мс до следующего нажатия кнопки
Тестирование интерактивного графического контроллера
Чтобы можно было протестировать интерактивный графический контроллер, вам необходимо скачать (ссылка выше) и распаковать архив ButtonBouncingBall_materials.zip в какой-либо каталог на Raspberry Pi. В архиве находятся файлы beachball2.png и ButtonBouncingBall.py.
Теперь запустите LXTerminal и перейдите в каталог, в котором расположен скрипт ButtonBouncingBall.py. Основные моменты в скрипте прокомментированы. Перед запуском скрипта просмотрите эти комментарии, чтобы понимать, как работает код.
Наберите в LXTerminal команду sudo python ButtonBouncingBall.py
, как показано на рисунке 8, чтобы запустить приложение.
Как только код будет запущен, на экране HDMI монитора появится холст с мячом, как показано на рисунке 9.
Нажмите на кнопку несколько раз, чтобы увидеть, как мяч прыгает по диагонали холста. Поздравляю с созданием собственного интерактивного графического контроллера! Окончательная сборка проекта заключается в добавлении функции детектирования ведения мяча рукой с помощью электронной схемы фотоэлементного датчика.
Функция детектирования ведения мяча рукой
Чтобы мяч прыгал при ведении рукой, необходимо заменить кнопку электронной схемой фотоэлементного датчика. Схема фотоэлементного датчика подключается как цифровой коммутатор. Размещение руки над фотоэлементом обеспечит управляющий сигнал логической единицы (3,3В), который будет считан Raspberry Pi. Raspberry Pi обработает этот цифровой управляющий сигнал и заставит мяч двигаться вниз или отскочить вверх.
Убирание руки от фотоэлемента обеспечивает цифровой управляющий сигнал логического нуля (0В). Мяч, управляемый Raspberry Pi, перестанет прыгать. Схема подключения схемы детектирования ведения мяча рукой показана на рисунке 10.
Ниже, на рисунке 11, приведена фотография собранного устройства.
Ниже приведено видео, демонстрирующее работу проекта.
И снова поздравляю с успешным добавлением функции детектирования ведения мяча рукой в ваш интерактивный графический контроллер! Надеюсь, статья оказалась полезной. Оставляйте комментарии!