![]() |
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Система для игры "Брейн-ринг"
Автор: onivan ВступлениеДля проведения игр по правилам «Брейн-ринг», разработал и собрал электронную систему. До этого игры проводились с помощью рефери, которые должны были по поднятию рук определять, какая команда отвечает первой. Но вскоре стало понятно, что нужна электронная система, так как каждый раунд игры оканчивался затяжными спорами в выяснении «кто первый» и почти побитию рефери. Общее описание системыПравила игры и требования к брейн-системе были взяты здесь: https://windflower.spb.ru/ke/common/reglaments/brainlaws.html Система состоит из нескольких блоков:
Количество команд может быть от 2 до 4. Ненужные блоки кнопок просто не учитываются. Отмазка. Для сборки я вынужден был делать все из доступных мне деталей, материалов и технологий. В связи с отсутсвием микродрели все платы сделаны на основе поверхностного монтажа. При оценке кривости изготовления корпусов и плат, пожалуйста, также прошу сделать поправку на имеющиеся инструменты и возможности. Коротко о каждом блокеБлок управления («пульт»)Пульт работает на микроконтроллере Atmega8A. Он состоит из двух плат – основной и платы управления. Конструктивно пульт собран в корпусе KRADEX Z20. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
| Главная плата | ||
|
|
|
| Плата управления |
||
|
|
|
| Плата индикатора таймера | ||
|
|
|
| Плата кнопки команды | ||
Корпуса
Для пульта выбрал корпус Z20. Главную плату прикрутил винтами к основанию. Плату с кнопками – к верхней части на стойках. Кнопки для пульта взял с удлиненными толкателями.
Два ряда светодиодов установил в просверленные отверстия и посадил на клей.
Пропилил куском ножовки пазы для гнезд 6p4c.
В качестве корпуса для блока индикатора таймера был взят корпус от какого-то блока питания. Резаком, сделанным из ножовочного полотна были вырезаны окна, индикаторы прижаты пеноматериалом от их же упаковки и приклеены.
Корпуса кнопочных блоков сделаны из телефонной розетки с гнездом 6p4c. В качестве толкателя кнопки использован 10 мм светодиод.
Каждый такой блок подсоединен к пульту стандартным 4-х жильным телефонным кабелем длинной порядка 7-10 метров. При этом удобно использовать цвета жил соответственно подключаемым светодиодам. В ходе проведения игр в разных условиях не было замечено влияния их длины на работу системы.
Все соединения в устройстве сделаны из старого 40-жильного шлейфа IDE.
|
|
|
|
|
|
|
|
|
|
|
|
Программная часть (прошивка)
Прошивка системы была написана на C в IDE Code::Blocks. Так как я не имею большого опыта в программировании МК, прошу не слишком строго судить мой код. Некоторые части и идеи были подсмотрены на разных сайтах посвященных AVR.
Небольшое разъяснение кода прошивки
В блоке инициализации определяются несколько констант.
Строка 399 и далее:
const uint8_t round_time=61; – время одного раунда +1 секунда вначале для фиксации фальстарта.
prog_uint8_t Bip_notes[11][12] = {… – Масив бипов для «мелодий» (значения счетчика OCR2)
uint32_t TI_SOUNDS_period = 500; – длина «бипа» в мс.
В прошивке используются два аппаратных 8-битных таймера.
Нулевой таймер TCNT0 работает с периодом 1 мс, и на основе него сделаны несколько программных таймеров для антидребезга, индикации и проигрывания звуков.
Второй аппаратный таймер TCNT2 используется для генерирования звуков разной высоты. Период его срабатывания, кроме значений его регистра, определяется начальным состоянием его счетчика из массива Bip_notes. Таким образом создаются звуки разной высоты.
Вся программа работает в цикле while (1): сначала идет опрос регистра ввода, затем, в зависимости от ввода и текущего состояния, производятся соответствующие действия, дальше идет блок индикации и, в конце – блоки программных таймеров.
Прошивка МК и фьюзы
Так как большая точность мне не нужна была, то я обошелся без кварца и прошил МК на внутренний генератор 8МГц установив следующие fuse:
avrdude -p atmega8 -c avrisp -e -vv -P COM5 -b19200 -U lfuse:w:0xE4:m
Фьюзы брал здесь: https://www.frank-zhao.com/fusecalc/fusecalc.php?chip=atmega8a&LOW=C1&HIGH=99&EXTENDED=FF&LOCKBIT=FF
При установке кварца, нужно поменять константу F_CPU в начале main.c соответственно его частоте.
Скомпилированная прошивка 01.hex находится в папке bin/Release
МК я прошивал с помощью avrdude используя Arduino как avrisp предварительно залив в него соответствующий скетч:
avrdude -p atmega8 -c avrisp -e -vv -P COM5 -b19200 -U flash:w:binRelease01.hex
Подсмотреть, как использовать Arduino как программатор для AVR здесь:
https://arduino.cc/en/Tutorial/ArduinoISP
https://www.instructables.com/id/How-to-use-Arduino-Mega-2560-as-Arduino-isp/
https://playground.arduino.cc/Code/MegaISP
Инструкция по использованию системы
Перед началом игры выбирается удобное расположение для пульта – если им управляет ведущий, – то возле него, если помощник, – то так, чтобы не мешаться.
Индикатор таймера устанавливается, так чтобы все команды и ведущий могли хорошо его видеть. Так как индикация производится на две стороны, то это не очень сложно. Мы использовали для него нагнутый горизонтально пюпитр.
Кнопочные пульты кладутся на столы команд. Кабеля приклеиваются скотчем, чтобы не путались.
Подсоединяются все кабеля. Порядок подключения – такой же как расположение команд. Можно для удобства обозначить концы каждого кабеля изолентой своего цвета.
Включаем систему – прозвучит мелодия и все индикаторы мигнут несколько раз.
Пример игры
На пульте имеются 4 кнопки:
- «Новый раунд» (НР);
- «Ответ» (О);
- «Продолжить раунд» (ПР);
- «Пауза» (П).
Первый раунд
1. Ведущий читает вопрос потом говорит: «Время!»
2. Одновременно или через пару секунд оператор нажимает кнопку «Новый раунд». При этом гаснут все светодиоды, система может принимать нажатия кнопок команд, счетчик таймера начинает отсчитывать секунды.
Если во время первой секунды какая-то команда нажала свою кнопку, происходит событие «Фальстарт» – звучит сигнал и для этой команды загорается красный светодиод. Система приостанавливается. Команда объявляется выбывшей из текущего раунда. Снова звучит «Время!» и оператор нажимает кнопку «Продолжить раунд» – продолжается отсчет времени.
Если же кнопка командой была нажата после времени фиксации фальстарта, то для этой команды загорается зеленый светодиод, для остальных команд – красный. Система приостанавливается. Оператор должен нажать кнопку «Ответ».
При этом кнопки на столах команд снова становятся активными, светодиоды гаснут, и, если какая-то команда нажмет свою кнопку в это время, то для нее срабатывает фальстарт и она выбывает из раунда.
3. Команда отвечает на вопрос:
- ответ правильный – объявляется конец раунда, команде начисляются очки;
- ответ неверный – команда объявляется выбывшей из текущего раунда, звучит «Время!» оператор нажимает «Продолжить раунд» – продолжается отсчет времени.
При этом для команд, которые по причине фальстарта или неверного ответа выбывают из раунда, загораются красные светодиоды и кнопки на их столах не реагируют на нажатия.
Следующий раунд.
1а. Ведущий произносит новый вопрос и говорит «Время».
2а. Оператор нажимает «Новый раунд». Все повторяется.
Пауза. Во время отсчета времени можно нажать «Пауза», чтобы приостановить его.
Когда до конца отсчета остается 5 секунд, звучат звуковые сигналы.
Реальное использование
После первой игры были внесены некоторые поправки в код. После этого данная система была уже опробована несколько раз в реальных играх и показала себя пригодной для использования по назначению.
Я признаю, что многое в этой системе можно сделать по-другому и лучше, но даже в таком виде она полностью выполняет поставленные перед ней задачи.
Здесь можно посмотреть пару репортажей об одной из этих игр: https://blagodat.org.ua/index.php?option=com_content&view=article&id=1099:teen-bible-ring&catid=92&Itemid=502
Скачать файлы проекта
Если есть желающие усовершенствовать – милости просим – все исходники проекта я предоставляю свободно. Код прошивки выложен на bitbucket.org: https://bitbucket.org/onivan/brags
Там же можно скачать шаблоны печатных плат и другие файлы.
Также я создал когда-то для этого проекта страницу на code.google.com: https://code.google.com/p/brags/
Файлы:
Кнопочный блок команды
Индикатор таймера
Список деталей и материалов
Прошивка в формате HEX
Схемы в Eagle
Исходный код прошивки
Главная плата (компактная)
Все вопросы в Форум.
|
Как вам эта статья? |
Заработало ли это устройство у вас? | ||||||
|
|































