🚨

オンラインクイズでも早押しボタンで押したい

2024/05/07に公開

はじめに

さっそくですが皆さんオンラインクイズやりますよね?
オンラインクイズの時、なにでボタンを押してますか?
マウス?キーボード?
押し慣れたあのボタンで早押ししたくないですか?

目標

  • 長屋クイズアリーナ、Yqui、Qoxなど主要なオンラインクイズサイトで使えること
  • 押し慣れた早押し機と同じ感覚で押せること

方法

大きく二つの方法が考えられると思います

  1. PCに接続できる早押し機を作る
    早押しボタンのようなものを作って、USBケーブルでPCと直接接続します
  2. 早押し機をPCに接続できるような中継器を作る
    お手持ちの早押しボタンとPCをつなぐ中継器を作ります
    中継器はUSBケーブルでPCと接続します

多くのオンラインクイズツールではスペースキー、エンターキーのいずれかを早押しボタンとしてバインドすることが可能です。よって早押し機のボタンを押したときにスペースキーやエンターキーが押されたことにしてくれる1鍵のキーボードを作ればよさそうです。
じゃあ青軸のキーボードでも買えばいいのでは?って思った方、
冷静になってくださいならないでください。DIYの8割はロマンです。

用意するもの

PC接続早押しボタン

  • モーメンタリースイッチ
    なんでもいいですがクイズ界でよく使われているのはVAQ-4X-Kのようです(Xは色)
  • ケース
    こちらもなんでもいいですが大きさのおおまかな目安は早稲田式有線小型早稲田式有線早稲田式無線ぐらいのサイズになります。上記のVAQ-4X-Kを使う場合結構深さが必要なのでその点に注意して好きなサイズを選んでください。また、加工する道具を持っていない場合はカッターナイフで切れるようなタッパーなどを活用するのも手です
  • DIPスイッチ(トグルスイッチ)(オプション)
    プログラムを書き換えることなく「スペースキー」「エンターキー」どちらとして動作するかを選択するために使います。ケースの中に入れてしまう場合はDIPスイッチでもいいですし、ケースの外に取り付ける場合はトグルスイッチにしてもいいと思います。この機能が必要なければ不要です

中継器

  • テスター
    通電がチェックできればなんでも大丈夫(最悪、電池+LED+抵抗でも…)
  • お持ちの早押し機に刺さるこういうやつ
    テスターで端子の通電がチェックできるようになればOKなので、3.5mmのイヤホンジャックならオス-オスのケーブルでもいいですし、こういうのでも、ケースを空けても大丈夫です
  • オプション(見た目をいい感じにしたければ)
    • ケース(上のやつを参照のこと、もっと小さくてもいけるけど)
    • お持ちの早押し機と接続可能なコネクタとケーブル

共通部分

  • Arduino Micro
    ハンダ付けに自信がなければピン実装済みのものを探しましょう
    • Arduinoなら何でもよいという訳ではなく、ATmega32u4が載っているものである必要があるようです[1](FWを書き換えたり、PC側でシリアル通信を受けるようなプログラムを書けばそのほかのマイコンボードでも実装可能だと思いますが、大分めんどくなりそう)
  • ここで選んだボードとPCを接続するケーブル
  • 抵抗(プルアップ用なのでなんでもいいけど10k
  • ハンダ付けするならユニバーサル基板、したくないならいい感じのサイズのブレッドボード
  • ハンダ付けするなら線材、したくないならいい感じのジャンパー線

作り方

回路図

モーメンタリースイッチが1つ、タクトスイッチが1つ検知できれば良いので回路図は極めてシンプルです

ブロック図
図の真ん中のスイッチがモーメンタリースイッチ、右のスイッチがDIPスイッチになります

中継器の場合

まず中継器の場合、真ん中のモーメンタリースイッチの部分をお手持ちの早押し機のスイッチから引き出してきて接続する必要があります。そのためにこれとテスターを使います。

ステレオミニプラグ変換治具
多くの早押し機が接続端子に3.5mmのステレオミニプラグ(普通のイヤホンのやつ)を使っていそうな気がしますが、2.5mmミニプラグやUSB, DINプラグなどの場合もあると思いますので、それぞれに対応する同じような治具を購入するか場合によってはケースを開けて配線を取り出す必要もあるかもしれません

治具を刺せた場合、確認自体はそんなに難しくはないです
テスターを導通チェックモードにして、変換治具の端子(ねじのところ)の2か所がショートしているかをチェックし、早押し機のスイッチを押している間だけショートしている端子があるかを調べます(4C2通り試してください)
この組があれば回路図上の真ん中のモーメンタリースイッチをこの2つの端子で置き換えて、それぞれの端子にジャンパー線か何かで繋ぐだけです(極性はないです)

実際に接続した図

プログラム

起動時にDIPスイッチのHIGH, LOWを判定してスペースかエンターのキーコードを保存しておいて、早押しスイッチが押されたらキーを出力するというとてもシンプルなコードです

ソースコード

#include <Keyboard.h>
#define BUTTON_PIN PIN_A9
#define Key_Select_Pin PIN_A10
#define KEY_SPACE 0x20
char key_press = KEY_KP_ENTER;
bool reset = true;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(Key_Select_Pin, INPUT_PULLUP);
  if (digitalRead(Key_Select_Pin) == LOW) {
    key_press = KEY_SPACE;
  } else {
    key_press = KEY_KP_ENTER;
  }
  Keyboard.releaseAll();
}

void loop() {
  if ((digitalRead(BUTTON_PIN) == LOW)) {
    if (reset) {
      reset = false;
      Keyboard.write(key_press);
      Keyboard.release(key_press);
    }
  } else {
    reset = true;
  }
}

BUTTON_PINKey_Select_Pinは配線に応じて適宜修正
連打が許されるのであればボタンの押上によるresetの管理はいらないかもしれません

結果

中継器の動作の様子
https://youtu.be/3SwKpFOvNl8
動画の状態はブレッドボードがむき出しの状態ですが、中継器をケースに入れたり早押し機の中に仕込んでしまってもいいと思います。まあそこらへんはお好きなように

私は動画の中継器を小さくまとめて早押しボタンに直接入れてみました
組み込み済みのスイッチにハンダ付けして配線を取り出したり、ケースを加工する必要があるのでそれなりにリスクがあります。自己責任でお願いします

早押し機の中に基板ごといれたところ

本体との接続端子とPCとの接続端子
せっかくならLEDにも接続して動作しているかを表示してもいいなー
(受信はしていないので、解答権に応じた点灯などはできませんが)

まとめ

最近、ゆる言語学ラジオサポーターコミュニティ内のクイズ仲間とフリバをする際などにこちらを使って早押しをしています。ボタンが本格的になったからと言って押し勝てるようになるわけではないのですが、キーボードやマウスでやるよりは雰囲気が出ていいですねー

Future work

今回はDIPスイッチを内部に仕込んでスペースorエンターの切り替えをするようにしましたが、Remapのようなキーレイアウトツールに対応できるとより便利だよなーと思ってます

脚注
  1. オリジナルキーボードを作ってみる その3「マイコンボード選び編」 ↩︎

Discussion