Comments
Transcript
Arduino と XBee,SQL Server による 自動無線計測システムの実験
10 Arduino と XBee,SQL Server による 自動無線計測システムの実験 兵庫県立西宮香風高等学校主幹教諭 松本 吉生 1. Arduino とシールド ZigBee 規格のものなどがあり,物理的にはアンテ Arduino ( ア ル ド ゥ イ ー ノ )は Atmel 社 が 製 造 す ナ形状の異なるものや,電波出力の大きさの異なる る RISC ベースの 8 ビットマイクロコントローラ ものなどいくつかの種類がある。 Atmel AVR を使ったマイコンボードの一種で,ディ ZigBee は Bluetooth と同種の技術で家電向けに ジタルとアナログの I/O ピンを利用したセンサ実 策定された無線通信規格で,Bluetooth よりも低速 験を手軽に行うことができる。この Arduino の I/O だが省電力で低コストの通信が可能であり,物理層 ピン配置に適合した 「シールド」と呼ばれる様々な拡 のインタフェースには IEEE 802.15.4 が使われる。 張ボードが販売されており,これを搭載することで 前述のように XBee は ZigBee 規格のものだけで Arduino の機能を拡張することができる。一般的に はないが,Arduino などマイコンボードの無線化 基板状の電子部品に付け足す形状の小型の基盤部品 によく用いられるのは ZigBee 対応の XBee か,ま を 「ドーターボード」と呼ぶが,Arduino と「シール たは ZigBee 準拠ではないが IEEE 802.15.4 で通信 ド」 もこれと類似の関係になる。 を行う Series 1 である。この実験では Series 1 の 「シールド」には回路を自作するための「バニラ XBee を使っている。 シールド」やプロトタイプ作成用の「プロトシール XBee を利用するには,通信上の設定をするため ド」 といった部品素材に近いものから,DC モーター にアダプターを介して USB でコンピュータに接続 を制御できる 「モータードライブシールド」,SD カー する必要がある。この実験では,スイッチサイエン ドやマイクロ SD カードスロットを持つ「SD カード ス社の XBee USB アダプターを使用した。 シールド」 ,RJ45 ジャックを有してイーサネットに 接続できる 「イーサネットシールド」など完成された 3. X-CTU による XBee の設定 機能を持つものがある。 XBee の セ ッ ト ア ッ プ に は,XBee を USB ア ダ プターでコンピュータに接続し,ディジインター 2. XBee ナショナル社が提供する X-CTU というアプリケー XBee はディジインターナショナル社が開発,販 ションを利用する。X-CTU はディジインターナショ 売する無線通信モジュールで,組み込み機器の開 ナル社の Web ページからダウンロードできる。 発 な ど に 用 い ら れ る。 対 応 す る 無 線 規 格 と し て 通 信 を す る た め に 2 台 の XBee を 用 意 す る。 は,Wi-Fi や独自プロトコルの DigiMesh,そして XBee を互いに通信させるには,出荷時に決められ Fig.1 XBee Series 1 モジュール Fig.2 Xbee を Xbee USB アダプターに取り付けた 11 ら抜き差しする際には,ピンが折れないように注意 して取り扱う。 4. Arduino XBee シールド XBee を Arduino で使うにはシールドが必要とな る。XBee を使うためのシールドも様々なものがあ り,XBee シールドやワイヤレスシールドなどと呼 Fig.3 XBee の裏面に印刷された個別 ID ばれる。この実験では,スイッチサイエンス社のワ イヤレスプロトシールドを使用する。 た個別 ID を互いに登録し,ユーザーが自由に決め る共通の PAN ID を設定しなければならない。 XBee の個別 ID は X-CTU で接続するとわかるが, 本体裏側にも印刷されている。XBee をアダプター に接続すると裏側は見えなくなるので,設定の前に 手元に控えておくとよい。 XBee を USB ア ダ プ タ ー に 挿 し て USB ケ ー ブ ル で コ ン ピ ュ ー タ に 接 続 し,X-CTU を 起 動 す る と XBee の設定ができる。X-CTU の PC Settings メ ニューで接続されている XBee が確認でき,通信 Fig.5 ワイヤレスプロトシールドと XBee に使われるシリアルポートの番号がわかる。Test / 5. 通信テスト Query ボタンで XBee との通信テストができ,個別 通信テストのために簡単なスケッチを作り ID を取得することができる。 Arduino に書き込む。このテスト用スケッチは,1 次 に Modem Configuration メ ニ ュ ー で XBee の 秒ごとに数字をカウントアップし,シリアル通信で 設定値を読み出し,Networking & Security の項目 数字を送信する。 であらかじめ決めた共通の PAN ID と,相手 XBee の 個 別 ID を 登 録 す る。 自 分 の 個 別 ID は Serial Number High と Serial Number Low で 上 位 と 下 位 に分かれて表示されている。相手 XBee の個別 ID は Destination Address High と Destination Address Low に登録する。なお設定中に XBee をコネクタか Fig.4 X-CTU で XBee の設定をする int i = 0; void setup() { Serial.begin(9600); } void loop() { Serial.print(i); Serial.print("¥n"); delay(1000); i = i + 1; } Fig.6 XBee 通信テスト用のスケッチ 12 Arduino にテスト用スケッチを書き込んだらコ ンピュータから取り外し,設定できた 2 台の XBee のうち一方をワイヤレスプロトシールドに載せて Arduino に取り付ける。もう一方の XBee は XBee USB アダプターに取り付けてコンピュータに接続 する。コンピュータで X-CTU を起動して XBee と の接続を確認し,Terminal メニューを開いておく。 Arduino を 5V の USB 電源に接続するとスケッチ が起動し,XBee から無線通信で数字のデータを送 り出す。送られたデータはもう一方の XBee が受け 取り,USB アダプターからコンピュータに送信さ れ,X-CTU で受け取ることが確認できる。 Fig.9 LM35 の出力を A0 で受け取るスケッチ スケッチを書き換えたら再び XBee シールドを取 り付け,温度センサ LM35 を接続し,Arduino を外 部電源に接続して動かす。コンピュータで X-CTU を起動し,XBee で受け取るシリアルデータをモニ タする。LM35 を指でつまんで温めるなどすると, アナログ出力データが変化することがわかる。 Fig.7 通信テスト中の Arduino と XBee Fig.10 X-CTU で受け取った温度データ Fig.8 X-CTU で数字データを受け取る 6. 温度センサの値を送信するスケッチ 7. シリアルデータを SQL Server に記録する 次 に 受 け 取 っ た シ リ ア ル デ ー タ を SQL Server 通信テストが成功したら,Arduino から XBee を に記録するアプリケーションを作成する。Visual シールドごと取り外し,コンピュータに接続して Studio で C# による Windows アプリケーションを Arduino のスケッチを温度センサの値を読み取りシ 作り,シリアルポートからデータを受け取るイベン リアル通信で送信するものに書き換える。 トでデータを SQL Server に送るコードを書く。 void setup() { Serial.begin(9600); } void loop() { Serial.print(analogRead(A0),DEC); Serial.print("¥n"); delay(1000); } using System.IO.Ports; // 名前空間の追加 namespace GetArduinoData_NA_toFIX4 { public partial class Form1 : Form { SerialPort mySerialPort = new SerialPort("COM4"); System.Data.SqlClient.SqlCommand sCom; 13 public Form1() { InitializeComponent(); mySerialPort.BaudRate = 9600; mySerialPort.Open(); System.Data.SqlClient.SqlConnection scn = new System.Data.SqlClient.SqlConnection ("Data Source=OWNER-PC¥¥SQLEXPRESS; Initial Catalog=test;Integrated Security=True"); scn.Open(); Fig.12 テストビルド画面 sCom = new System.Data.SqlClient. SqlCommand("INSERT INTO LM35DATA(data) VALUES(@data)", scn); mySerialPort.DataReceived += mySerialPort_DataReceived; } void mySerialPort_DataReceived (object sender, SerialDataReceivedEventArgs e) { sCom.Parameters.Clear(); sCom.Parameters.Add("@data", SqlDbType. Int).Value = Convert.ToInt32(mySerialPort. ReadLine()); sCom.ExecuteNonQuery(); } } } Fig.13 SQL Server に記録されたデータ C# に よ る Windows ア プ リ ケ ー シ ョ ン を 起 動 から出力 10 mW で最大 750 m の屋外見通しレンジ す る と,Windows フ ォ ー ム 自 体 は 空 白 の フ ォ ー のものなどがある。Arduino で使えるセンサも温度 ム が 表 示 さ れ る だ け だ が, 受 け 取 っ た デ ー タ を センサ以外に光センサ,気圧センサ,距離センサ, SQL Server に記録している。データは SQL Server 加速度センサなど様々なものがある。XBee で無線 Management Studio で確認できる。 通信を行うことにより,離れたところの計測が可能 8. まとめ になり,SQL Server に記録すれば計測データの管 理や分析もしやすくなる。 ディジインターナショナル社の ZigBee あるいは IEEE 802.15.4 インタフェースの XBee は,無線出 力が 1 mW で最大 90 m の屋外見通しレンジのもの 参考 URL 1) 「スイッチサイエンス社 - XBee をはじめてみよう」 http://mag.switch-science.com/2012/07/20/startup_xbee_s1/ (アクセス日:2014 年 2 月 25 日) 2) 「ディジインターナショナル株式会社」 http://www.digi-intl.co.jp/index.html (アクセス日:2014 年 2 月 25 日) 3) 「IT 用語辞典 e-Words - ZigBee」 http://e-words.jp/w/ZigBee.html (アクセス日:2014 年 2 月 25 日) 4) 「IT 用語辞典 バイナリ - ZigBee」 http://www.sophia-it.com/content/ZigBee Fig.11 Visual Studio による C# プログラミング (アクセス日:2014 年 2 月 25 日)