Arduinoというデバイスを使って、LEDやセンサなど外部デバイスとの入出力をしてみよう。Arduinoを使用するためには、ローカル版のドリトルが必要である。
Arduinoは、イタリアで開発された汎用入出力ボードである。設計がオープンソースとして公開されており、さまざまな製品が存在する。1)今回は、「Arduino UNO」という最新のボードで動作を確認した。このボードにはデジタル入出力が12ポート存在し、そのうち6ポートはアナログ出力が可能である。その他に、アナログ入力が6ポート用意されている。2)
Arduinoは標準では、Processing言語で記述されたプログラムを転送して自律的に動作する。本書ではArduinoにドリトルと通信するためのプログラムを転送し、ドリトルと通信しながら対話的に動作させる。Arduinoに格納したプログラムは電源を切っても残るため、いちど書きこんでおけばよい。以下に手順を示す。
動作を確認するには、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)では、PWM7)によるアナログ出力が可能である。アナログ出力では、出力する値として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_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!とじろごま。