Superb Garbages 2

千野純一(chinorin)のはてなダイアリーの続きです。

最近やっていること―ArduinoとHIDの実験

  • まず「Arduino UNO R3」と「Arduino Leonardo」を買ってみて色々実験したり情報を漁ったりしているうち、ATmega32U4(マイコンチップの名前)を搭載したLeonardo互換な小型マイコンボード「Pro Micro」の存在を知ってそれも買った(すべて純正品ではなく互換品)。ちっちゃい。
  • 主目的は自分好みのHID―USB接続のヒューマンインターフェース、足用デバイスや左手用デバイスみたいなものを作ることなのだが、それならATmega32U4よりもっと小型のATTiny85でも最低限のことができると知り、「Digispark」ってのも2個買った(これも純正品ではなく互換品)。安いし(300円くらい)、すげえちっちゃい。
  • Pro MicroならマイコンからI/Oピンが全部出てるので色々やりようがあるんだが、Leonardoはそれよりも若干少なくて、ひとつのデジタル入力にボタンを1個つなぐくらいじゃ自分の作りたいHIDとしては心許ない。さらにDigisparkだと自由になるI/Oピンは2本しかない(とりあえずデフォルトでは)。(1)これの拡張について。
  • くるくる回すインターフェースが欲しいので、とりあえずロータリーエンコーダ(インクリメンタル型)を買ってきて試した。回転したこと自体はもちろん検知できるんだけど、順方向/逆方向のどちらに回ったのかをソフトで検知するのはなかなかめんどくさいのと、それからチャタリングが激しくてそれをソフトで検知しないようにするのもなかなかめんどくさい。(2)これの対策について。
  • この(1)と(2)をハードウェアで解決しようと画策している、というのが最近の活動。電子回路、特にアナログ回路っていうのは今まで全くやってこなかったので基礎から勉強の日々なんだけども、昔から「コンデンサって電気が溜まるのはわかったけど実際何に使うのよ」みたいなのはわりと興味があったのでわりと楽しくやっている。
  • (1)は、1つのアナログ入力に「ボタンと抵抗を並列につないだやつ」を直列にたくさん繋ぎ、全体の電圧の変化を見てどのボタンが押されたか検知する、という実験をしてうまくいったのだが、そんな感じのことを簡単に実現するICがあるみたいなのでそれを取り寄せ中。ちなみにキーマトリクスも検討したし実験もしたけどDigisparkではそれすらできない(2ピンのキーマトリクスは1接点である)ので却下。
  • (2)は、コンデンサとシュミットトリガインバータ(シュミットトリガっていう特殊な方法でHIGH/LOW判別をする論理NOT)でチャタリング対策、それからDフリップフロップ(NANDを2個組み合わせるだけでできる1ビット記憶回路)で回転方向の検知ができて、ソフト側は最終的に出てくる2つの入力を見ればOKという構造までもっていけるらしい。こちらも2種類のICを取り寄せ中。
  • なお、シュミットトリガNANDを2個使うだけでなんかうまいことできないのか? と思って計算とかせずにとりあえずそのICも注文してみた。届いたら試行錯誤して、不可能ならなぜできないのかを理解したいと思う
  • しかしこういう単純なロジックICって安いよね…。高くて50円とかだもんな。