Raspberry Pi から Arduino を制御する(Firmata編)

QR1751

QR1751

Raspberry Pi から Arduino を制御する方法にはいくつかありあますが、今回は Arduino Firmata を使った制御方法を紹介します。

Firmata とは、Arduino のようなマイクロコントローラとホストマシン間での通信のための汎用プロトコルです。
Firmata を使うと Arduino に接続したホストマシンからシリアル経由で Arduino を制御するコマンドを送って Arduino を制御することができます。

Firmata を Arduino に書き込む

Arduino で Firmata を使うために Arduino に Firmata 用のスケッチを書き込む必要があります。
ここでは Arduino IDE のサンプルプログラムの Firmata 用のスケッチ「StandardFirmata」を利用します。

以下からサンプルを開いて、スケッチを Arduino に書き込みます。

Arduino IDE -> [File] -> [Examples] -> [Firmata] -> [StandardFirmata]

Arduino IDE | Firmata - StandardFirmata

Arduino IDE | Firmata – StandardFirmata

Raspberry Pi から Arduino を制御する

Raspberry Pi から Arduino に Firmata でコマンドを送るために、arduino_firmata という Ruby のライブラリを使います。
Arduino Firmata on Ruby

arduino_firmata のインストール

pi$ gem install arduino_firmata

(注) gem を使うために Ruby のインストールが必要です。以下のように apt-get で ruby と ruby-dev をインストールしてください。

pi$ sudo apt-get install ruby
pi$ sudo apt-get install ruby-dev

arduino_firmata の使い方

デジタル値の書き込み(GROVE – LED)

Raspberry Pi と Arduino を画像のように USB で接続しました。
GROVE のシールドを使って GROVE の LED を接続しています。

Raspberry Pi と Arduino を接続(GROVE - LED)

Raspberry Pi と Arduino を接続(GROVE – LED)

13番ピンに LED を接続して以下のコマンドを実行すると、13番ピンが “H” になり LED が点灯します。

pi$ arduino_firmata “digital_write 13, true” –arduino=/dev/ttyUSB0

アナログ値の読み取り(GROVE – 温度センサ)

GROVE のシールドを使って GROVE の温度センサを接続しています。

DSC_0002

Raspberry Pi と Arduino を接続(GROVE – 温度センサ)

以下のコマンドで温度センサのアナログ値を取得できます。

pi$ arduino_firmata “analog_read 0” –arduino=/dev/ttyUSB0

arduino-firmata – analog-read の実行結果

取得した温度の値を補正するスクリプトを書いてみました。
以下のスクリプトを実行すると取得した温度のアナログ値から温度(摂氏)に変換します。
(小数の計算に bc コマンドを使っているので bc コマンドを apt-get install しておく)

#!/bin/sh

analog=`arduino_firmata “analog_read 0” –arduino=/dev/ttyUSB0`

resistance=`expr \( 1023 – $analog \) \* 10000 / $analog`
temperature=`echo 1 / \( l\( $resistance / 10000 \) / 3975 + 1 / 298.15 \) – 273.15 | bc -l`

echo $temperature

参考URL