ch_arduino2

マニュアル2に戻る。

Arduinoと通信しよう

Arduinoというデバイスを使って、LEDやセンサなど外部デバイスとの入出力をしてみよう。Arduinoを使用するためには、ローカル版のドリトルが必要である。

Arduinoの入手

Arduinoは、イタリアで開発された汎用入出力ボードである。設計がオープンソースとして公開されており、さまざまな製品が存在する。*1今回は、「Arduino UNO」という最新のボードで動作を確認した。このボードにはデジタル入出力が12ポート存在し、そのうち6ポートはアナログ出力が可能である。その他に、アナログ入力が6ポート用意されている。*2

画像

ドリトルと通信するための設定

Arduinoは標準では、Processing言語で記述されたプログラムを転送して自律的に動作する。本書ではArduinoにドリトルと通信するためのプログラムを転送し、ドリトルと通信しながら対話的に動作させる。Arduinoに格納したプログラムは電源を切っても残るため、いちど書きこんでおけばよい。以下に手順を示す。

  1. ArduinoのWebサイト(http://www.arduino.cc/)の「Download」ページから、使用しているコンピュータ(Windows, Mac OS X, Linuxなど)に合わせたソフトウェアをダウンロードし、インストールする。
  2. インストールしたプログラム(Arduino IDE)を起動し、ドリトルのパッケージに付属するarduino_dolittle.ino というファイルを開く。すると、画面に「#include <LiquidCrystal.h>」で始まるプログラムが表示される。
  3. 「Tools」メニューの「Board」から、使用するArduinoの種類を選ぶ。
  4. Arduino IDE上部の「△」のボタン(Verify)を押す。すると、画面下部に「Done Compiling」と「Binary sketch site: ...」というメッセージが表示される。
  5. USBケーブルでArduinoをパソコンに接続する*3。すると、基板上の緑色のLEDが点灯する。
  6. Arduino IDE上部の「→」のボタン(Upload)を押す。シリアルポートを選択するダイアログが開いた場合は、Arduinoが接続されたポートを選択する*4。すると、基板上のオレンジ色のLEDが点滅してプログラムが転送される。
  7. 正常に転送された場合は、Arduino IDEの画面下部に「Done uploading」と表示される。このメッセージを確認したら、Arduino IDEを終了する。

デジタル出力による動作の確認

動作を確認するには、ArduinoとUSBケーブルを接続した状態で、ドリトルに次のプログラムを入力して実行する。Arduino上の「L」と書かれたオレンジ色のLEDが1秒ごとに10回点滅すれば、ドリトルとの通信は正常に行われている。

システム!"arduino"使う。
a=arduino!作る。
a!(システム!シリアルポート選択)ひらけごま。

led=a!13 デジタル出力。
「led!0 書く。a!1 待つ。led!1 書く。a!1 待つ」!10 繰り返す。

a!とじろごま。

ドリトルからArduinoを制御するプログラムは、次の形で記述する*5。先頭の行では、Arduinoを使うプログラムを作成することを示している。2行目の「a」は、接続されたArduinoに対応するオブジェクトである。

システム!"arduino"使う。
a=arduino!作る。
a!(システム!シリアルポート選択)ひらけごま。
...
a!とじろごま。

「...」の部分には、Arduinoを制御するプログラムを書く。今回は最初に、13番ポートにデジタル出力するオブジェクトを作り「led」という名前を付けている。基板上には13番ポートに接続された発光ダイオードLED)が存在するため、外部にLEDを接続しなくても動作の確認が可能である。

led=a!13 デジタル出力。

続いて「led」に「書く」により出力を行う。デジタル出力では、「1」を書くことで出力をONにし、「0」を書くことで出力をOFFにする。このプログラムでは、0と1を1秒ごとに出力することで、LEDを点滅させている。

「led!0 書く。a!1 待つ。led!1 書く。a!1 待つ」!10 繰り返す。

Arduinoに接続したLEDを光らせる場合は、「デジタル出力」のパラメータに接続したポート番号を指定する。ブレッドボードを利用した配線の例はarduinoSample を参照されたい。

アナログ出力

Arduinoの特定のポート*6では、PWM*7によるアナログ出力が可能である。アナログ出力では、出力する値として0から255の数値を指定できる。次のプログラムでは、最初に10番ポートに接続されたLEDを「150」の明るさで点灯させた後、「255」の明るさで点灯し、最後に「0」で消灯している。

システム!"arduino"使う。
a=arduino!作る。
a!(システム!シリアルポート選択)ひらけごま。

led=a!10 アナログ出力。
led!150 書く。a!1 待つ。
led!255 書く。a!1 待つ。
led!0 書く。

a!とじろごま。

デジタル入力

デジタル入力は、特定のポートの電圧の有無を0と1の値で返すことで、スイッチ等のONとOFFを検出できる。

次のプログラムでは、12番ポートに入力があるときに画面のタートルを前進させている。(スイッチが接続されている場合は、押されているかどうかでタートルの動きが変化する)

システム!"arduino"使う。
a=arduino!作る。
a!(システム!シリアルポート選択)ひらけごま。

sw=a!12 デジタル入力。
かめた=タートル!作る。
「かめた!(sw!読む)歩く」!100 繰り返す。

a!とじろごま。

アナログ入力

アナログ入力は、特定のポートの電圧を0から255の値で返すことで、各種センサの入力を検出できる。

次のプログラムでは、アナログの0番ポートに接続された光センサCdS)の入力値によって、画面のタートルを回転させている。

システム!"arduino"使う。
a=arduino!作る。
a!(システム!シリアルポート選択)ひらけごま。

cds=a!0 アナログ入力。
かめた=タートル!作る。
「かめた!((cds!読む)×10)向き」!100 繰り返す。

a!とじろごま。

Arduinoの配線例

arduino_analog_output 節からarduino_analog_input 節の動作を確認するための回路図を示す。抵抗値はスイッチに接続したものが100KΩ、他は10KΩである。

画像

写真はブレッドボードを利用して配線したものである。配線材、LED等の部品は、スイッチサイエンス社*8の「Arduinoをはじめようキット」のものを使用した。

画像

加速度センサの応用例

加速度センサを利用すると、傾きを検出できる。次の回路図のように、3軸加速度センサを接続することが可能である。*9

画像

3軸加速度センサを利用するプログラム例を示す。ここでは1方向の傾きだけを利用して、Wiiリモコンのように画面のタートルを操作することができる。

システム!"arduino" 使う。 
a=Arduino!作る。
a!(システム!シリアルポート選択)ひらけごま。

かめた=タートル!作る。
「かめた!400 歩く 90 左回り」!4 繰り返す。
枠=かめた!図形を作る。枠!-200 -200 移動する。
判定=ラベル!作る。

xin=a!0 アナログ入力。
x値=フィールド!作る。

「 かめた!5 歩く。
 x=xin!読む。
 x値!(x)書く。
 かめた!(x-127)右回り。
 かめた:衝突=「かめた!-10 歩く 180 右回り。判定!"OUT" 書く 」。
」!1000 繰り返す。

a!とじろごま。

*1 入手方法は、ArduinoのWebサイト(http://www.arduino.cc/)の「Buy」というページから「Japan」の項目で日本での代理店を見ることができる。
*2 Arduino UNOの基板上では、アナログ出力可能なポート番号には「〜」の記号が付いている。
*3 Macでは設定が必要な場合がある。「はじめに」(p.mac_install )を参照。「新しいネットワークインターフェースが検出されました」と表示された場合は、キャンセルでダイアログを閉じて構わない。
*4 ポートが不明な場合は、Windowsであれば「COM」に続く数字の大きい順に試し、Arduinoが反応するポートを探す。Macの場合は「/dev/tty.usbで始まる名前を探す」。ポートは「Tools」メニューの「Serial Port」から選択することもできる。
*5 「(システム!シリアルポート選択)」の部分は、あらかじめわかっている場合は、「"COM1"」のようにポート名を文字列で記述することも可能である。
*6 Arduino UNOでは基板上の番号の前に「--」が付いた3, 5, 6, 9, 10, 11の6個のポートでアナログ出力が可能である。
*7 ONとOFFの比率を変えながら高速に繰り返すことで、擬似的にアナログ値を表現する方式。
*8 http://www.switch-science.com/
*9 今回は、秋月電子通商で販売されているカイオニクス社の「3軸加速度センサモジュール KXM52--1050」で動作を確認した。

Theme designed by Dining tables
Coder Mothers Day | EZwpthemes |modified by QHM Temps

powered by Quick Homepage Maker 5.0
based on PukiWiki 1.4.7 License is GPL. QHM

最新の更新 RSS  Valid XHTML 1.0 Transitional