Руководство для начинающих по макетированию Raspberry Pi с помощью Game Simon

Макетная плата позволяет создавать схемы, не прибегая к пайке. Это отличный инструмент для экспериментов с электроникой, но он может пугать. Наличие проекта для создания может помочь вам сохранить мотивацию во время обучения.

Есть несколько простых игр, которые делают отличные проекты для начинающих Raspberry Pi. Легко начать с игры Simon. Simon — это игра на память, в которой в случайном порядке вспыхивает серия огней, и игрок должен запомнить последовательность. По мере продвижения игрока длина последовательности увеличивается.

Требуемые компоненты

Для начала вам понадобятся следующие вещи:

  1. Raspberry Pi
  2. Карта microSD с установленной ОС Raspbian
  3. 4 светодиода разных цветов
  4. 4 резистора (от 220 до 1 кОм)
  5. 4 кнопки
  6. 1 макет
  7. Кабели-перемычки для подключения всего

Для этого проекта вы можете использовать любой Raspberry Pi, но модели Pi Zero не так легко подключаются к макетным платам без какой-либо пайки. Какую бы модель вы ни использовали, вам также понадобятся источник питания, монитор, клавиатура и мышь.

Если вы никогда раньше не настраивали Raspberry Pi, вы можете узнать, как подготовить все к этому руководству, в руководство для начинающих по Raspberry Pi.

Вы будете писать код Python в этом руководстве, и вы можете использовать любой текстовый редактор для его написания, но вам может быть проще редактор кода. Некоторые из них уже установлены в ОС Raspberry Pi, и Thonny разработан, чтобы быть простым для новичков. Какой бы из них вы ни использовали, вам нужно будет сохранить и запустить свой код, чтобы следовать этому руководству.

Начало работы с макетной платой

Если вы никогда раньше не использовали макетную плату, вы можете начать с чтения учебного пособия по макету. Понимание того, как работает макетная плата, поможет вам понять, как создавать схемы.

Raspberry Pi имеет два ряда контактов ввода/вывода общего назначения (GPIO). Эти контакты позволяют подключать компоненты к Raspberry Pi. Некоторые контакты отправляют информацию, другие обеспечивают питание, а некоторые заземляют вашу электронику.

Мы начнем с добавления светодиодной лампы на нашу макетную плату.. Если вы никогда раньше не работали со светодиодными лампами на макетной плате, возможно, вам стоит прочитать руководство, в котором более подробно объясняется, как это работает.

Начните с подключения вывода GPIO к вашей плате. Неважно, какой вывод, если это вывод GPIO, а не вывод питания или заземления. Выше представлена ​​диаграмма контактов GPIO, которая поможет вам определить, какой контакт использовать. В этом руководстве используется контакт № 18, который также обозначен как GPIO 24.

Этот контакт будет подавать питание на макетную плату и позволяет Raspberry Pi обмениваться данными с компонентами на плате. Затем подключите контакт номер 6 на Pi к шине заземления макета. Это заземлит плату и позволит нам создавать схемы.

Мощность, поступающая от Raspberry, слишком высока для подключения светодиод напрямую. Использование резистора снижает уровень мощности и предотвращает перегорание светодиода. Подключите одну сторону резистора к той же линии, к которой подключен вывод GPIO, а конец — к другой стороне макета. Затем поместите положительный полюс светодиода после резистора. Отрицательный конец светодиода можно подключить непосредственно к отрицательной шине. Конечный результат должен выглядеть как на диаграмме выше. Тщательно проверьте проводку и включите Pi. Светодиод должен загореться.

Итак, вы создали схему, используя свой Raspberry Pi, которой вы можете управлять с помощью кода.

Использование кода Python для управления светодиодами

В этом руководстве вы поэтапно рассмотрите код, но если вы хотите в любое время обратиться к готовому коду, он доступен на Pastebin.

Сейчас питание идет на светодиод, но мы хотим контролировать, когда он включается и выключается. Следующий код Python позволит нам общаться с доской.

  
импортировать RPi.GPIO как GPIO
GPIO.setmode (GPIO.BOARD)
GPIO.setwarnings (False)
red = 18
GPIO.setup (красный, GPIO.OUT)
GPIO.output (красный, GPIO.LOW)

Первые несколько строк все настраивают. Библиотека Raspberry Pi GPIO импортирована. как GPIO просто позволяет нам называть RPi.GPIO как GPIO , чтобы сэкономить немного времени на вводе текста. Режим вывода GPIO установлен на BOARD . Вам не обязательно использовать этот параметр, но может быть проще ссылаться на контакты по их порядку в строках GPIO.

Наконец, мы установили для предупреждений значение false. Это остановит ненужные предупреждения.

Следующие три строки управляют светодиодом. Красный светодиод прикреплен к контакту 18 GPIO. Вместо того, чтобы запоминать это, переменная red сохранит местоположение. Затем GPIO.setup сообщает нашей программе, что он отправляет информацию out на красный контакт. Наконец, мы устанавливаем GPIO. вывод на красный пин до low . Когда вы запустите эту программу, свет погаснет. Чтобы снова включить его, переключите GPIO.LOW на GPIO.HIGH и снова запустите программу.

Сохраните код и нажмите «Выполнить», чтобы увидеть его в действии. Если в редакторе кода нет кнопки запуска, сохраните ее и запустите python myfilename.py в окне терминала. Сначала вам нужно перейти в тот же каталог, что и ваш новый файл Python. Просмотрите шпаргалку по Raspberry Pi, если не знаете, как это сделать.

Добавление более одного светодиода

Для создания игры Саймона нам понадобится четыре огонька разного цвета. Те же шаги, которые вы использовали для настройки красного светодиода, можно использовать для настройки остальных трех. Схема подключения должна выглядеть, как на схеме ниже:

Ваш код должен выглядеть так:

  
импортировать RPi.GPIO как GPIO
GPIO.setmode (GPIO.BOARD)
GPIO.setwarnings (False)
red = 18
yellow = 22
green = 24
синий = 26
GPIO.setup (красный, GPIO.OUT)
GPIO.setup (желтый, GPIO.OUT)
GPIO.setup (зеленый, GPIO.OUT)
GPIO.setup (синий, GPIO.OUT)
GPIO.output (красный, GPIO.HIGH)
GPIO.output (желтый, GPIO.HIGH)
GPIO .output (зеленый, GPIO.HIGH)
GPIO.output (синий, GPIO.HIGH)

После проверки светодиодов установите GPIO.output на GPIO.LOW , чтобы снова выключить каждый из них.

Хотя цвет проводов, которые вы используете, не имеет значения, попробуйте использовать цвета, которые имеют для вас значение, чтобы облегчить чтение доски. Например, для заземления часто используются черные провода. В этой схеме вы можете сопоставить цвет провода с цветом светодиода.

Управление светодиодами с помощью кнопок

Начать добавив кнопку на свою доску. Кнопка должна быть подключена как к земле, так и к выводу GPIO. Схема должна выглядеть примерно так:

Чтобы заставить кнопку управлять светодиодом, нам нужно добавить в наш код. Настройка кнопки аналогична настройке светодиода, за исключением того, что вывод GPIO настроен как вход, а не выход. Этот код также настраивает внутренний подтягивающий резистор на Pi, который необходим для правильной работы кнопки.

 GPIO.setup (32, GPIO.IN, pull_up_down = GPIO.PUD_UP) 

Теперь нам нужен код, который проверяет посмотрите, была ли нажата кнопка.

  
game = True
во время игры:
redButtonState = GPIO.input (32)
если redButtonState == 0:
GPIO.output (красный, GPIO.HIGH)
time.sleep (1)
GPIO.output (красный, GPIO. LOW)

Мы хотим, чтобы наша программа продолжала проверять, нажата ли кнопка, поэтому мы используем цикл while . Поскольку цикл никогда не будет ложным, он продолжает работать и проверять кнопку до тех пор, пока мы не завершим программу вручную, нажав кнопку остановки или используя сочетание клавиш Ctrl + c .

Затем, чтобы упростить ссылку на ввод, который нам отправляет наш вывод GPIO кнопки, мы сохраняем эту информацию в переменная redButtonState . Если значение нашей кнопки изменится на 0, мы знаем, что кнопка была нажата.

Если кнопка нажата, загорится красный светодиод. Затем, через секунду, светодиод погаснет. Чтобы рассчитать время, мы используем функцию time.sleep (1) . Чтобы это сработало, вам нужно будет импортировать библиотеку time в верхней части вашего скрипта.

Как только одна кнопка заработает, вы можете добавить еще три, по одной для каждого светодиода. Ваш код должен выглядеть так:

  
импортировать случайное
время импорта
импортировать RPi.GPIO как GPIO
GPIO.setmode (GPIO.BOARD)
GPIO.setwarnings (False)
красный = 18
желтый = 22
зеленый = 24
синий = 26
GPIO.setup (красный, GPIO.OUT)
GPIO.setup (желтый, GPIO.OUT)
GPIO.setup (зеленый, GPIO.OUT)
GPIO.setup (синий, GPIO.OUT)
GPIO.setup (32, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup (36, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup (38, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup (40, GPIO.IN, pull_up_down = GPIO.PUD_UP)
game = True
while game:
redButtonState = GPIO.input (32)
если redButtonState == 0:
GPIO.output (красный, GPIO.HIGH )
time.sleep (1)
GPIO.output (красный, GPIO.LOW)

yellowButtonState = GPIO.input (36)
если yellowButtonState == 0:
GPIO.output (желтый, GPIO.HIGH)
time.sleep (1)
GPIO.output (желтый, GPIO.LOW)
greenButtonState = GPIO.input (38 )
если greenButtonState == 0:
GPIO.output (зеленый, GPIO.HIGH)
time.sleep (1)
GPIO.output (зеленый, GPIO .LOW)
blueButtonState = GPIO.input (40)
если blueButtonState == 0:
GPIO.output (синий, GPIO.HIGH)
time.sleep (1)
GPIO.output (синий, GPIO.LOW)

Ваша доска должна выглядеть примерно так:

Вся электроника теперь на месте. Если у вас возникли проблемы, проверьте свой код на наличие ошибок. Помните, что вы можете загрузить полный код с Pastebin, если застрянете!

Создание игры

Этот проект уже охватил все основы, которые вам нужно знать, чтобы начать использовать макетную плату. Но превращение этих навыков в игру действительно продемонстрирует, на что вы способны!

В Simon игрок видит серию мигающих огней и должен запомнить узор. Легко запускается всего с одним светом. Каждый уровень добавляет случайный свет к узору, чтобы усложнить игру.

Создание шаблона

Этот шаг довольно прост. Один массив будет содержать наш светлый узор . Второй массив будет хранить контакты GPIO для наших источников света . В каждом игровом цикле новый случайный источник света будет добавляться в конец массива pattern . Мы используем функцию random. randint () для выбора числа от 0 до 3, представляющего 4 светодиода.

  
pattern = []
lights = [red , желтый, зеленый, синий]
while game:
pattern.append (random.randint (0,3))

Далее у нас есть чтобы зажечь огни, чтобы показать узор.

  во время игры: 
pattern.append (random.randint (0,3))

для x в шаблоне:
GPIO.output (светится [x], GPIO.HIGH)
time.sleep (1)
GPIO.output (светится [x], GPIO.LOW)
time.sleep (0.5)

Важно делать паузу между двумя огнями. Так легче увидеть, используется ли один и тот же свет последовательно в узоре.

Получение информации от игрока

Затем игра должна дождаться, пока игрок угадывает порядок огней. Программа должна как проверять каждый свет в шаблоне, так и ждать, пока игрок нажмет кнопку. Для этого требуются вложенные циклы:

  
для x в шаблоне:

waitForInput = True

во время ожиданияForInput:
redButtonState = GPIO.input (32)
yellowButtonState = GPIO.input (36)
greenButtonState = GPIO.input (38)
blueButtonState = GPIO.input (40)

если redButtonState == 0:
GPIO.output (красный, GPIO.HIGH)
waitForInput = False
time.sleep (1)
GPIO.output (красный, GPIO.LOW)

если yellowButtonState == 0:
GPIO.output (желтый, GPIO .HIGH)
waitForInput = False
time.sleep (1)
GPIO.output (желтый, GPIO.LOW)

если greenButtonState = = 0:
GPIO.output (зеленый, GPIO.HIGH)
waitForInput = False
time.sleep (1)
GPIO.output (зеленый, GPIO. LOW)

if blueButtonState == 0:
GPIO.output (синий, GPIO.HIGH)
waitForInput = False
time.sleep ( 1)
GPIO.output (синий, GPIO.LOW)

Большая часть приведенного выше кода повторно использует код, который мы написали для проверки кнопок.

По теме: 6 причин, почему Python — это язык программирования будущего

Проверка ввода игрока

Отсюда это довольно легко проверить, правильно ли введен игрок. Каждый раз, когда они нажимают кнопку, игра может проверить, правильная ли это была кнопка.. Для этого добавьте еще один оператор if для каждого ввода кнопки:

  
if redButtonState == 0:
GPIO.output (красный, GPIO .HIGH)
waitForInput = False
if x! = 0:
game = False
time.sleep (1)
GPIO.output ( красный, GPIO.LOW)

Переменная x из нашего цикла for имеет номер следующего источника света. Красный светодиодный индикатор находится в первой позиции или под номером 0. Если игрок нажал красную светодиодную кнопку, когда у нас в нашем шаблоне 0, он прав! В противном случае они проигрывают. Установка для переменной game значения false остановит наш игровой цикл и завершит программу.

Поздравляю! Вы создали игру с нуля!

При создании игры в этот проект было добавлено гораздо больше кода, чем просто добавление светодиодов и кнопок. Работа над окончательным проектом, который вы можете показать своим друзьям и семье, поможет вам сохранить мотивацию.

Эта игра довольно проста. Испытайте себя, чтобы улучшить базовый дизайн. Возможно, лампочки могут мигать, если игрок проиграет. Может быть, вы хотите бросить вызов самому себе, чтобы добавить звуки в игру. Ваше воображение — единственный предел!

Хорошо, это и оборудование, которое у вас есть.

Оцените статью
oilgasindustry.ru
Добавить комментарий