- PVSM.RU - https://www.pvsm.ru -

6 кнопок

6 кнопок

Постановка задачи

Сутки добрые, читатели!

Пару недель назад представитель федерации по кикбоксингу нашего региона поставил мне задачу, сделать то, что позволит сократить время проведения соревнований на 30% методом автоматизации, кибернизации, механизации и прочей «ции». Человек он простой, прямой, и сильный так, что отказать у меня не было возможности. Задача была принята.

Изучив регламент проведения боев, и вспоминая прошлые соревнования было установлено, что 20-30% от соревнований отнимают следующие пункты:

  1. сбор рефери судейских записок после трех раундов
  2. передача записок главному судье
  3. подсчет очков
  4. подведение итогов боя

В среднем около 3-5 минут

Задача встала в следующем: необходимо оперативно передавать информацию об очках главному судье, то есть «запрограммировать 6 кнопок».

Выбор решения

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

  1. Манипуляторы Мышь на каждом судейском столе и передача от них информации
  2. Некий джойстик на каждом судейском столе и передача информации главному судье

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

Второй вариант показался мне более реальным.
Центром сбора данных я возложил на контроллер ARDUINO.

Исполнение

Этап 1 Общая схема

6 кнопок

На столах боковых судей размещается судейские пульты, которые имеют 2 кнопки: красная и синяя. Информация об нажатиях этих кнопок собирается контроллером Arduino и передается программе установленной на ноутбуке.
Программа анализирует нажатия кнопок и выдает информацию по итогу боя и набранных балах бойцом.
Главный судья на основании результатов боя объявляет победителя.

Этап 2 схема подключения

6 кнопок

Со схемой все просто, каждую отдельную кнопку ставлю на отдельный вход микроконтроллера. Резисторы использовал 2.4 кОм. Я не стал использовать сдвиговый регистр так как не умею с ним работать, а под текущую задачу PIN-ов хватает с лихвой.

Изготовление

Этап 3 Изготовление пультов

Состав пульта:

  1. Коробочка
  2. Кусок монтажной платы
  3. Кнопки
  4. Кусочки проводов
  5. Красная и синяя изолента
  6. Коннектор RJ45

6 кнопок
6 кнопок
6 кнопок
6 кнопок
6 кнопок
6 кнопок

Этап 4 Изготовление контроллера

Состав контроллера:

  1. Коробочка из под отверток
  2. Arduino
  3. монтажная плата
  4. Кусочки проводов
  5. Изолента
  6. Пачкорды RJ-45
  7. USB провод

6 кнопок
6 кнопок

Программирование

Этап 5 программа для контроллера

В программе для контроллера все взято из примеров. Ждем нажатия кнопок, учитывая дребезжание контактов и шлем все COM-порт:

Скетч контроллера

#include <Bounce.h> 
#define BUTTON7 7 
#define BUTTON6 6 

#define BUTTON5 5 
#define BUTTON4 4

#define BUTTON3 3 
#define BUTTON2 2 

#define LED 13 
int state7 = 0; 
int prevstate7 = 0; 
int state6 = 0; 
int prevstate6 = 0; 

int state5 = 0; 
int prevstate5 = 0; 
int state4 = 0; 
int prevstate4 = 0; 

int state3 = 0; 
int prevstate3 = 0; 
int state2 = 0; 
int prevstate2 = 0; 

Bounce bouncer7 = Bounce( BUTTON7,5 );  
Bounce bouncer6 = Bounce( BUTTON6,5 );  

Bounce bouncer5 = Bounce( BUTTON5,5 );  
Bounce bouncer4 = Bounce( BUTTON4,5 );  

Bounce bouncer3 = Bounce( BUTTON3,5 );  
Bounce bouncer2 = Bounce( BUTTON2,5 );  


void setup() { 
  Serial.begin(115200); 
  pinMode(BUTTON7,INPUT); 
  pinMode(BUTTON6,INPUT); 
  pinMode(LED,OUTPUT); 
} 
void loop() { 
// 7 кнопка начало
  bouncer7.update ( ); 
 int value7 = bouncer7.read(); 
 if ( value7 == HIGH) { 
   digitalWrite(LED, HIGH ); 
   state7 = 1; 
 } else { 
    digitalWrite(LED, LOW ); 
    state7 = 0;   
 } 
 if(state7 != prevstate7){ 
   if(state7 == 1){ 
   Serial.println("7"); 
   } 
 } 
 prevstate7 = state7; 
// 7 кнопка конец  
// 6 кнопка начало
 bouncer6.update ( ); 
 int value6 = bouncer6.read(); 
 if ( value6 == HIGH) { 
   digitalWrite(LED, HIGH ); 
   state6 = 1; 
 } else { 
    digitalWrite(LED, LOW ); 
    state6 = 0;   
 } 
 if(state6 != prevstate6){ 
   if(state6 == 1){ 
   Serial.println("6"); 
   } 
 } 
 prevstate6 = state6; 
// 6 кнопка конец  

// 5 кнопка начало
 bouncer5.update ( ); 
 int value5 = bouncer5.read(); 
 if ( value5 == HIGH) { 
   digitalWrite(LED, HIGH ); 
   state5 = 1; 
 } else { 
    digitalWrite(LED, LOW ); 
    state5 = 0;   
 } 
 if(state5 != prevstate5){ 
   if(state5 == 1){ 
   Serial.println("5"); 
   } 
 } 
 prevstate5 = state5; 
// 5 кнопка конец  
// 4 кнопка начало
 bouncer4.update ( ); 
 int value4 = bouncer4.read(); 
 if ( value4 == HIGH) { 
   digitalWrite(LED, HIGH ); 
   state4 = 1; 
 } else { 
    digitalWrite(LED, LOW ); 
    state4 = 0;   
 } 
 if(state4 != prevstate4){ 
   if(state4 == 1){ 
   Serial.println("4"); 
   } 
 } 
 prevstate4 = state4; 
// 4 кнопка конец  


// 3 кнопка начало
 bouncer3.update ( ); 
 int value3 = bouncer3.read(); 
 if ( value3 == HIGH) { 
   digitalWrite(LED, HIGH ); 
   state3 = 1; 
 } else { 
    digitalWrite(LED, LOW ); 
    state3 = 0;   
 } 
 if(state3 != prevstate3){ 
   if(state3 == 1){ 
   Serial.println("3"); 
   } 
 } 
 prevstate3 = state3; 
// 3 кнопка конец  
// 2 кнопка начало
 bouncer2.update ( ); 
 int value2 = bouncer2.read(); 
 if ( value2 == HIGH) { 
   digitalWrite(LED, HIGH ); 
   state2 = 1; 
 } else { 
    digitalWrite(LED, LOW ); 
    state2 = 0;   
 } 
 if(state2 != prevstate2){ 
   if(state2 == 1){ 
   Serial.println("2"); 
   } 
 } 
 prevstate2 = state2; 
// 2   кнопка конец  


}

Этап 6 программа для контроля ведения боя

6 кнопок
Во первых сразу же делюсь кодом Скачать исходный код [1].
Весь код написан делфи XE3 так как учил его в школе. И небольшая описательная часть:

  1. Используя компоненту ComPort 4.11 подключаемся к com-порту и слушаем его
  2. в зависимости от настроек боя слушаем порт и результаты выводим в labelX.caption
  3. в конце боя выводим итог

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

Подготовка к соревнованиям

Прокладка кабелей от центрального блока до боковых судей
6 кнопок
6 кнопок
6 кнопок
6 кнопок
6 кнопок

Работа судьи
6 кнопок

О том как работает программа

Итоги соревнований

По итогу двух дневных соревнований был разыгран полный комплект наград проведено более 150 боев.
Благодаря сэкономленному времени спортсмены уехали по своим городам на 4 часа раньше планированного времени
6 кнопок

Выводы

  1. Оборудование отработало на ура, без единого сбоя
  2. Длина проводов от центрального блока до кнопок составляла 20 метров, при этом тестировал кнопки на 100 метровом кабеле
  3. В программе нужно переработать интерфейс, чем и занимаюсь к подготовке соревнований по боксу
  4. Программе необходимы дополнения связанные с выводом на табло и звуковыми эффектами
  5. Использование стандартного сетевого кабеля для подключения кнопок и разъемы значительно удешевило всю конструкцию в целом

Спасибо за внимание.

Автор: mtop

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/33621

Ссылки в тексте:

[1] Скачать исходный код: https://docs.google.com/file/d/0B6tCFxCR5IdOTlUxbGlRUUZfaTg/edit?usp=sharing

[2] Источник: http://habrahabr.ru/post/178633/