РадиоКот :: Система для игры "Брейн-ринг"
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Игрушки >

Теги статьи: Добавить тег

Система для игры "Брейн-ринг"

Автор: onivan
Опубликовано 18.09.2013
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2013!"

Вступление

Для проведения игр по правилам «Брейн-ринг», разработал и собрал электронную систему.

До этого игры проводились с помощью рефери, которые должны были по поднятию рук определять, какая команда отвечает первой. Но вскоре стало понятно, что нужна электронная система, так как каждый раунд игры оканчивался затяжными спорами в выяснении «кто первый» и почти побитию рефери.

Общее описание системы

Правила игры и требования к брейн-системе были взяты здесь: https://windflower.spb.ru/ke/common/reglaments/brainlaws.html

Система состоит из нескольких блоков:

  • блок управления («пульт»);
  • блок индикации таймера;
  • блоки кнопок команд (4 штуки);
  • соединительные кабеля;
  • блок питания от сети.

Количество команд может быть от 2 до 4. Ненужные блоки кнопок просто не учитываются.

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

Коротко о каждом блоке

Блок управления («пульт»)

Пульт работает на микроконтроллере Atmega8A.

Он состоит из двух плат – основной и платы управления.

Конструктивно пульт собран в корпусе KRADEX Z20.

 

 

Основная плата

Схема простая, состоит из самого МК с обвязкой и сдвигового регистра 74HC595 для десериализации световой индикации.

Диод 1N5819 защищает от переполюсовки питания. Транзистор BC547 усиливает звуковые сигналы, которые выводятся на 0.5Вт динамик (правда, оказалось, что звук достаточно слабый, поэтому для больших игр звук выводился на большие колонки).

Плата управления

Здесь – просто кнопки.

Световая индикация

Через регистр 74HC595 на пульт и на кнопочные блоки команд посредством красного и зеленого светодиодов выводится состояние команд во время игры. На лицевой панели пульта расположены 4 пары светодиодов, на каждом кнопочном пульте команд – по 2 светодиода.

 

Блок таймера

Состоит из платы и 4-х 1.5-дюймовых семисегментных индикаторов FYS-15011 BS-21 с общим анодом, по 2 на каждую сторону.

В схеме использовано 2 регистра 74HC595 включенных каскадом.

Блок таймера соединяется с основным блоком посредством 5-проводников старого RS232 кабеля.

 

Блоки кнопок команд

На столе каждой команды ставится блок с кнопкой и 2-мя светодиодами, красным и зеленым.

 

Блок питания

БП – обычный китайский импульсный на 5В 2А.


Коротко об изготовлении

Печатные платы

Схемы блоков разработаны в бесплатной версии Eagle CAD. Трассировку печатных плат производил в TopoR Lite 5.2. Изображения плат были «распечатаны» в PDF, затем импортированы в Inkscape, а из последнего экспортированы в зеркальном и негативном виде в формат PNG. Шаблоны печатал из программы XnView в масштабе 100% на струйном принтере на пленку для струйной печати. На текстолит наклеивал негативный пленочный фоторезист, который засвечивал УФ КЛЛ 26 Вт около 10 минут (подбирал тестовыми засветками) с расстояния 30 см. Днем мне больше понравилось экспонировать – засветка солнечным светом нужна всего около 10 секунд!

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

Шаблоны печатных плат и монтажные схемы
 
Главная плата
     
 
Плата управления
  
     
 
Плата индикатора таймера
 
 
Плата кнопки команды

 

Корпуса

Для пульта выбрал корпус 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
Исходный код прошивки
Главная плата (компактная)


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

3 0 0
1 0 0