この記事は、富士通ソーシアルサイエンスラボラトリ Advent Calendar 2018の 1 日目の記事です。
はじめに
@GORO_Neko です。ご存知の方ご無沙汰してます。初めての方お初にお目にかかります。
えーっと、先にお断りをば一言。
自分、仕事では一切マイコンボードを利用した業務に携わったことがございません。
以下は、自分が所属する会社の意向を反映したものでもスタンスを示すものでもなく、単なる一個人の趣味の活動から産まれた記述です。
PC に電子部品を接続したい & PC 上の Ruby で制御したい
そう、なるべくお手軽な方法で PC にセンサー等電子部品を接続したいのです。
Raspberry PI とかみたいに GPIO 等を持っている、特殊な PC ではなくて、所謂デスクトップ PC だのノート PC だのよくある PC に。
PC 等から Arduino の GPIO を制御する技術として Firmata と言う技術があります。
Firmata を利用することで、PC側から Arduino のようなマイコンに対し、マイコンやマイコンに接続したセンサ等電子部品から汎用入出力の値の取得・書き込みその他の操作を行うことが可能になります。
特に Arduino のマイコンボードには、公式からマイコンボードを Firmata 対応にするためのライブラリ等が提供されています。
Java や node.js 等には、非公式ながら Firmata プロトコルを利用するためのライブラリが存在します。
Ruby では @shokai 氏が Java 版のものを移植して作成した、Arduino Firmata on Ruby を公開してくださっています。
でなわけで、今回は Arduino Uno ( *1 )を中継器に、手元のノート PC と 電子部品をつないでみます。
*1: と言いつつバチモン中国製の互換品( *2 )ですが …
*2: Arduino は Open source hardware なので、無料公開されている EAGLE ファイルに従って誰でも互換品を作ることが出来ます。
Arduino Uno を Firmata 対応にする
やり方は簡単です。
Arduino の公式開発環境である ArduinoIDE を使って、公式が提供する Firmata アプリケーションをビルドして、Arduino Uno に書き込むだけ。
そう、
使ってみる(初回・L チカ編)
何か新しい言語を使ってプログラミングを行う時、自分はついつい "Hello World" と標準出力させる派です。
マイコンボードを使って何かをやる時も、ついつい初回は L チカさせちゃう派だったりします。
と言うわけで、以下のように "Digital 11 Pin → LED → GND" とハードウェアを結線して、
PC 上の Ruby で LED をチカチカさせてみることにします。
※ "Digital 11 Pin" 側に LED の長い側の足を、"GND" 側に LED の短い側の足を、それぞれ「エイヤつ!」っと突っ込みます。
Arduino Firmata on Ruby の使い方がネット上に公開されているので、これを参考に以下のようなスクリプトを組みます。
※ スクリプト 2 行目の "/dev/tty.usb-device-name" の "usb-device-name" の部分は各自の環境に合わせて書き換える必要があります。自分の環境では "ttyUSB0" でした。
[firmata-test-001.rb]
require "arduino_firmata"
arduino = ArduinoFirmata.connect "/dev/tty.usb-device-name"
loop do
arduino.digital_write 11, true
sleep 1
arduino.digital_write 11, false
sleep 1
end
はい、上記のスクリプトを実行すると、1 秒間隔で無事 LED がチカチカ点減しました。
次回は、温度センサ( LM61CIZ )と PC をつないで、センサから温度情報を取り出し、PC を簡易温度計にしてみようと思います。
では、また。