
問題の声明
こんにちは、Habrausers!
数週間前、私たちの地域のキックボクシングフェデレーションの代表者が、自動化、サイバー化、機械化、その他の「配給」の方法により、競争時間を30%短縮するためのタスクを設定しました。 彼はシンプルで率直な人で、私が拒否できないほど強いです。 タスクが受け入れられました。
戦闘のルールを調べ、過去の競技を思い出した後、競技の20〜30%が次の項目を採用していることがわかりました。
- 審判の3ラウンド後の審判ノートのコレクション
- ヘッドジャッジにメモを引き渡す
- 得点
- 戦いの要約
平均して約3〜5分
タスクは次のとおりです。ポイントに関する情報をヘッドジャッジにすばやく送信する必要があります。つまり、「プログラム6ボタン」です。
決定の選択
この問題を解決するために、次のハードウェアオプションが検討されました。
- マニピュレーター各レフリーのテーブルにマウスを置き、情報を転送します
- 各審判員のテーブルにある特定のジョイスティックとヘッドジャッジへの情報の転送
この問題の技術的な部分に対する最初の解決策はすぐに指摘されました。なぜなら、USBマウスがヘッドジャッジのコンピューターから15〜20メートルの距離でどのように動作するか想像するのに苦労したからです。
2番目のオプションは、私にとってより現実的なものでした。
データ収集センターをARDUINOコントローラーに割り当てました。
実行
ステージ1の一般的なスキーム

サイドジャッジのテーブルには、赤と青の2つのボタンがある審判員パネルがあります。 これらのボタンの押下に関する情報はArduinoコントローラーによって収集され、ラップトップにインストールされたプログラムに送信されます。
プログラムは、ボタンの押下を分析し、戦闘の結果と戦闘機が獲得したポイントに関する情報を提供します。
戦いの結果に基づいて主審が勝者を宣言します。
ステージ2の配線図

回路があれば、すべてが簡単です。マイクロコントローラーの個別の入力に個別のボタンを配置します。 使用した抵抗器は2.4 kOhmです。 シフトレジスタの使用方法がわからないため、シフトレジスタを使用しませんでした。現在のタスクでは、PINで十分です。
製造
ステージ3リモコンの生産
リモートコントロールの構成:
- 箱
- 回路基板ピース
- ボタン
- ワイヤー片
- 赤と青の電気テープ
- RJ45コネクタ






ステージ4コントローラーの生産
コントローラー構成:
- ドライバーボックス
- Arduino
- 回路基板
- ワイヤー片
- 電気テープ
- RJ-45パッチコード
- USBワイヤー


プログラミング
コントローラーのステージ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戦闘制御プログラム

まず、コードをすぐに共有しますソースコードをダウンロードします 。
私が学校で教えたので、すべてのコードはXE3 Delphiによって書かれています。 そして、小さな物語:
- ComPort 4.11コンポーネントを使用して、com-portに接続し、リッスンします
- バトル設定に応じて、ポートを聞いて、labelX.captionに結果を表示します
- 戦いの終わりに、結果を印刷する
プログラムは一晩で書かれたので、美しさの話はありません。
競技準備
セントラルユニットからサイドジャッジまでのケーブルの敷設





審査員の仕事

プログラムの仕組みについて
競技結果
2日間の大会の結果、一連の賞が行われ、150以上の戦いが行われました。
時間を節約したおかげで、アスリートは予定より4時間早く都市を離れました

結論
- 機器は、単一の故障なしで、バタンと作動しました
- 中央ユニットからボタンまでのワイヤの長さは20メートルでしたが、100メートルのケーブルでボタンをテストしました
- プログラムはインターフェイスを作り直す必要があります。これはボクシングコンテストの準備のためにやっていることです
- プログラムには、スコアボードの出力と効果音に関連する追加機能が必要です
- ボタンとコネクタの接続に標準のネットワークケーブルを使用すると、設計全体のコストが大幅に削減されました。
ご清聴ありがとうございました。
UPD-1:ボタンごと。
次の理由により、このようなボタンを特別に選択しました。
1.触覚フィードバック。 クリックしてください
2.ボタンにはフリープレイがありません
3.フリープレイのボタンには快適さがありません。クリックが感じられるよりも早く動作します
4.システムのユーザーは筋肉のある人で、ソフトボタンの愛好家ではありません
5.審査員の目は手ではなく指輪にあるため、LEDフィードバックは役に立たない
UPD-2:このアセンブリの予算が3,000ルーブルを超えている可能性は低い
UPD-3 githubのソースコードのリクエスト