今回は番外編としてArduino Microを紹介します。今日はものづくりの部品というよりは、実験室でのお助けツールとして紹介するので番外編扱いです。Arduino Microは、第31回でも紹介しましたがArduino Leonardoという製品の小型版です。Arduino UnoやPro Miniなど典型的なArduinoはATmega328Pというマイコンを使い、スケッチ書き込み用のシリアル-USB変換チップとしてATmega16u2あるいはCH340などを使用しています。これら2つのチップを統合した機能を持つATmega32u4を使っているのが MicroおよびLeonardoの特徴です。チップの統合により廉価となった、と紹介しているサイトもありますが、実際のところUno / Pro MiniとLeonardo / Microの価格の違いはほとんどありません。
価格よりも大きな違いとして、ATmega32u4はPCに接続したときにHID(Human Interface Device)として認識されるという特徴があります。HIDとはマウスやキーボードなどといった装置を指します。つまり、MicroやLeonardoをPCにつなぐと、これらからの信号によりPCを容易に操作できます。例えば、20秒に1度左クリックをするようなスケッチを書き込んだMicroをPCにつなぐと、マウスを20秒に1度左クリックしているのと同じ現象が起こります。クリック以外にもマウス移動、タイプ(文字入力)などを実行可能です。
この機能を使えば、自身で書き変えることのできない既存の実験制御ソフトウェアをある程度自動制御することができます。たとえば、夜の21:00に実験「開始」ボタンをクリックしたいが、それだけのために居残りたくない、という場合(リモートデスクトップでも使えれば話は別ですが)、21:00に画面のある場所を左クリックするスケッチを書いた MicroをPCのUSB端子に接続しておけば、それだけで実施してくれます。もちろん、複数の動作を書き込むことも可能なので、左クリックした後にファイル名を書き込んでreturnを押して、画面の別の場所をもう一度クリック、など実行することもできます(ファミコンで使えたなら、スターソルジャーやグラディウスといったシューティングゲームで最強の連打補助装置をつくることができるでしょう)。このようなこと(マウスを動かすのと等価なアクションを起こすこと)はWindowsのAPIでもできるのですが、ArduinoをUSBにつなげるだけである特定の作用をPCに対して起こすことができるというのは便利な面があります(一度つくれば、どのPCにでも突き刺すだけなので)。
ここでは簡単な作例として、先ほどの例のように、21:00に左クリックを行う装置とスケッチを用意します。21:00という時間を指定するために以下の2つの方法が考えられます。
① Microのマイコン内部のクロックを使う方法
この方法では、内部クロックは電源が切れるたびにリセットされるので、「~時間~分後」という設定しかできません。つまり、3時間後にクリックせよというスケッチを書いて18:00に接続するといった方法しかありません。一方で、外部クロック(RTC:第7回参照)が不要という利点もあります。この場合のスケッチ(例として3時間後に動作)は以下の通りです。Mouse.hというライブラリはArduino IDEに標準インストールされています。
この場合、Micro単体をPCに接続するだけです。接続して3時間後に左クリックが起こります。
② 外部RTCを使う方法
ここでは外部RTCとしてDS3231を使います。RTCやDS3231については第7回を参照してください。第7回に従って、接続は以下の通り(DS3231をMicroにI2C接続)です。MicroのI2Cは、D2 – SDA、D3 – SCLで、UnoやPro Miniとは異なるので気を付けて下さい(これらではD4 – SDA、D5 – SCL)。
スケッチは以下の通りです。なお、DS3231の時間は第7回にしたがってあらかじめ設定しておきます。
もし日付けまで指定したければ、スケッチの赤字の部分にいろいろ条件を加えます。例えば:
if(((hour()==21)$$(day()==12))&&(flg==1))
とすると、毎月12日の21時に動作します。
マウスポインタをソフトウェアのボタンの上に置いておき、Pro MicroをUSB端子に接続すれば終わりです。22:00に左クリックが起こります。
このようにつないで・・・
マウスを右側のタスクバーの「電卓」上に置いておくと・・・(スクリーンショットなのでカーソルが消えてしまっていますが)
21:00になるとクリックが起こり、「電卓」が立ち上がる。ここで21:00は当然、Windowsの時間ではなくRTCの設定時間で21:00です。
ただし、いずれの方法にしてもWindowsではなにかしらのポップアップが出て、想定していたソフトウェアのウィンドウのアクティベーションが外れたりすることもあり、そうなると話は別であることには注意してください。
Mouse.hライブラリでできることは、左クリック(Mouse.click())の他に例えば
Mouse.move():x, yを引数としてマウスカーソルを移動
Mouse.press():マウスボタンのプレス(クリックして戻さない)を実行
Mouse.release():プレスを解放する
Mouse.isPressed():マウスボタンのプレス状態を返す
Keyboard.hライブラリでできることとして、マウスと同様にKeyboard.press()やKeyboard.release()などがありますが、一番シンプルな例はKeyboard.write()で、例えばKeyboard.write(‘n’)とするとメモ帳などにnと現れます。