Кнопка Секундомер доминирования (ДОМИНАТОР) представляет собой устройство - секундомер для таких видов спорта, как страйкбол, пейнтбол. В секундомере используется управляющий микроконтроллер Arduino (Arduino Uno / Nano) или отдельный чип (Atmel) AtMega328P, который контролирует всю системную логику. Секундомер включает в себя символьный ЖК-дисплей размером 16x2 (16 символов x 2 строки) или 20x4, на котором отображается время отдельных команд. В игре участвуют 2 команды - RED команда и GRE команда которые играют друг против друга и занимают воображаемую точку, которую образует это устройство - ДОМИНАТОР. В начале игры на дисплее отображается время 00 часов, 00 минут, 00 секунд для RED команда , GRE Команда .
Кнопка Секундомер доминирования использует ввод кнопки для действия по занятию точки членом команды, а также для ввода судьи и объекта ластика. Таким образом, всего используется 4 кнопки для 4 сущностей системы, кнопки переключения, подключенные в режиме INPUT_PULLUP. Нажатие кнопки подает сигнал GND на цифровой входной терминал Arduino (сигнал переключения Active-LOW). Кнопка Секундомер доминирования доступна в двух версиях: Базовая версия немедленно реагирует на нажатие кнопки занятости точки. Расширенная версия требует, чтобы вы удерживали кнопку в течение 5 секунд, чтобы успешно занять точку. Время отображается на символьном ЖК-дисплее размером 16x2 или 20x4, который связывается с управляющим микроконтроллером через шину I2C. Если член команды RED занимает точку, нажав кнопку, срабатывает зуммер, который сообщает об изменении точки коротким звуковым сигналом. Затем загорится RED светодиод команды на этой станции, и на дисплее начнется добавление времени для этой команды.
Если точка занята командой GRE и член команды нажимает соответствующую кнопку, снова звучит зуммер, загорается светодиодный индикатор команды GRE, RED командное время приостанавливается и Подсчитывается время команды GRE, какую точку он занял. Если организатор (судья) нажимает свою кнопку, оба раза приостанавливаются до тех пор, пока член одной из команд не введет данные пользователя. Таким образом, этот тип ввода подходит для начала перерыва, но также может завершить игру для оценки. Кнопка Секундомер доминирования имеет четвертую кнопку для объекта ластика, которая приостанавливает и сбрасывает оба раза до начальных значений, как после запуска секундомера Button DOMINATOR. Используется для перезапуска игры, инициализации новой игры. Проект подходит для мероприятий по страйкболу, спортивных сооружений или команд по страйкболу, которые могут собрать оборудование. Преимущество системы Button Секундомер доминирования заключается в том, что ее можно клонировать и создавать X-точки с одинаковой конфигурацией с помощью машинного кода, который может быть загружен в неограниченное количество плат и чипов Arduino и гарантирует идентичную работу приложения. Таким образом, игроки могут набрать больше очков в игре, а в конце игры время суммируется до тех пор, пока какая точка была занята какой командой.
Кнопки подключены в режиме INPUT_PULLUP, они используют внутренний резистор PULLUP 20 кОм, который удерживает логический уровень ВЫСОКИМ на цифровом входе. При нажатии кнопки сигнал LOW подается на цифровой вход. В зависимости от типа кнопки и используемой версии прошивки Arduino может проверить длительность удержания кнопки, а логика счетчика выполняется независимо. Когда условие изменения в точке выполнено, Arduino запускает гудение, применяя цифровые состояния к светодиодам. Системная логика выполняется каждые 1000 мс – процедура 1 Гц (время с помощью функции millis(), т. е. с помощью Таймера 0), независимо от состояния цифровых входов. В этой процедуре выполняется активная командная проверка, за которой следует время. Время динамически отображается на символьном ЖК-дисплее 20x4 или 16x2. Дисплей взаимодействует с Arduino через шину I2C с тактовым сигналом (SCL) 100 кГц — стандартная скорость. Таким образом, перезапись дисплея занимает примерно 15 мс, при этом перезаписывается только активная в данный момент строка данной команды. При серьезном интересе прошивку для DOMINATOR можно расширить до 3-х или 4-х команд.
Arduino Uno / Nano (ATmega328P) | Конвертер I2C для ЖК-дисплея |
GND | GND |
5V | Vcc |
A4 | SDA |
A5 | SCL |
Arduino Uno / Nano (ATmega328P) | Зуммер |
GND | GND |
5V | Vcc |
D5 | IN |
Arduino Uno / Nano (ATmega328P) | Светодиоды |
GND | GND |
D4 | IN (RED) |
D3 | IN (GREEN) | Arduino Uno / Nano (ATmega328P) | Кнопки (INPUT_PULLUP) |
GND | GND |
D6 | IN (GREEN) |
D7 | IN (ERASER) |
D8 | IN (Rozhodca) |
D9 | IN (RED) |
Условно-бесплатная версия (.hex) доступна для проекта Button Секундомер доминирования. Эта версия позволяет измерять максимум 15 секунд игры для каждой команды. Цель версии - проверить совместимость с вашим оборудованием. Машинные коды на основе адреса преобразователя I2C для ЖК-дисплея доступны в репозитории Github. Наиболее часто используемые адреса - 0x27 и 0x3F. Если вы не знаете адрес вашего конвертера, используйте встроенный пример в Arduino IDE -> I2C Scanner, который запишет адрес в интерфейс UART (Serial monitor). Машинный код может быть загружен в микроконтроллер Arduino Uno через программное обеспечение AVRDUDE - часть Arduino IDE или с графическим интерфейсом через XLoader - проще в использовании.
Название прошивки (в папке button_dominator) | Предназначен для | Скачать |
0x27.ino.hex | Символьный ЖК-дисплей размером 16x2 или 20x4 с конвертером I2C, который обменивается данными по адресу 0x27 | Скачать прошивку |
0x3F.ino.hex | Символьный ЖК-дисплей размером 16x2 или 20x4 с конвертером I2C, который обменивается данными по адресу 0x3F | Скачать прошивку |
Библиотека Wire встроена в IDE Arduino, установка не требуется. Программа может быть скомпилирована и проверена связь через шину I2C с символьным ЖК-дисплеем. Конвертер I2C должен быть подключен к Arduino к аппаратным клеммам I2C (SCL к A5, SDA к A4) перед загрузкой программы, этого достаточно даже без дисплея. Полученный адрес дисплея должен быть предоставлен для успешной сборки для Arduino вместе с UID карт RFID.
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); while (!Serial); // Leonardo: wait for serial monitor Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }