プログラミング言語「ドリトル」

大阪電気通信大学 兼宗研究室

ユーザ用ツール

サイト用ツール


ch_arduino

Arduinoと通信しよう

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

Arduinoの入手

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

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

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

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

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の比率を変えながら高速に繰り返すことで、擬似的にアナログ値を表現する方式。
9)
今回は、秋月電子通商で販売されているカイオニクス社の「3軸加速度センサモジュール KXM52–1050」で動作を確認した。
ch_arduino.txt · 最終更新: 2018/02/09 11:07 by klab