スタックタイマーの信号について


概要

初投稿です。Nyanyanと申します。私はスピードキューブ(ルービックキューブ等立体パズルの速解き)を趣味としていて、ある日、ルービックキューブのタイム計測用のタイマーを作ろうと思いたちました(これには諸事情がありますがそれはTwitterで#nyantimerのタグでも探してみてください)。
キューブ(立体パズル)の大会では計測に一貫して「スタックタイマー」というものを使い、これは信号出力ができます。この信号の内容について日本語の記事を見かけないのでここに書いておきます。なお、本記事は私のタイマー製作の経験に基づいたものであるだけで、どこかのデータシートを見たとかいう話ではないので動作は自己責任でお願いします。
ちなみにこの製作中のタイマーについて気になる方は以下をご覧ください。
https://github.com/Nyanyan/NyanTimer

英語が読めるのであれば参照すべきところ

私自身ここを大いに参考としました。
https://github.com/fw42/atmel/tree/master/stackmat

信号の概要

概要は以下です。

  • 信号はRS232C
  • 1200bps
  • 一連の信号は約9Hz(111.4ms毎)で送る(諸説あり。この数値は私が測定したもの)
  • データビットは8つ(内容はステータス、時刻、チェックサム)
  • パリティビットなし
  • 終了ビットは一つ(LF) 2つ(LFCR)(オシロスコープでじっくり調べたら何故か常識の斜め上を行くLFCRでした。嘘だろ…)

送る内容

データはASCIIで送ります。1文字ずつ解説していきます。

1: ステータスのデータ('I', 'A', 'S', 'L', 'R', 'C', ' ')
2-7: 時刻のデータ(1:23.456なら‘123456’)
8: チェックサム(ASCIIコードで64+タイムの各数字の和, 上の例ならASCII10進で64+21=85='U')
9: CR(ASCIIコード0x0D) LF(ASCIIコード0x0A)
10: LF(ASCIIコード0x0A) CR(ASCIIコード0x0D)

1番目、ステータスのデータは、

‘I’: タイマー初期化(リセットされた状態)
‘A’: タイマースタート直前(パッドを手で押さえて、離したらスタートできる状態)
‘ ’: 計測中
‘S’: タイム計測完了
‘L’: 左パッドが覆われている状態
‘R’: 右パッドが覆われている状態
‘C’: 両方のパッドが覆われている状態

ちなみに個人的には'C'はあまり意味を持った情報とは言えないと思っていて、自作のタイマーにも実装していません。

注意点

ArduinoなどUARTでシリアル通信をする機器でこの信号を実装したいときは信号のHIGHとLOWの反転が必要になります。この際、回路は以下のようにすると良いです。
なお、本家スタックタイマーでは専用ディスプレイにつないだときに信号電圧が1.1V程度まで下がる現象が確認されています。これを再現するためにプルアップ抵抗(R2)は2.2kΩが良いでしょう。

まとめ

今回は需要がなさそうですがスタックタイマーの信号について日本語で書いてみました。
この情報はタイマー本体を作る場合にも、タイマーにつなぐディスプレイを作るのにも使えると思いますので、もし機会があってお役に立てれば幸いです。