平成26年度熊本高専arduino講座 第2週 xbeeを用いた遠隔放射線量計測
DESCRIPTION
熊本高等専門学校が行ったH26年度社会人講座のArduinoによる実用講座 第2週で利用されたスライド資料です。電子工作入門者向けに、XBeeという無線デバイスを用いた観測データの無線伝送をテーマとしました。講義担当はAC科の森下です。 第1週の復習を兼ねて、Ardinoの基本やC/C++の基本に関しても解説しています。足りない情報もあるかと思いますが、ご了承下さい。TRANSCRIPT
1
XBeeを用いた無線による遠隔放射線量計測
H26熊本高専社会人講座Arduinoによるマイコン実用講座 第 2回
2014-09-13Katsuhiro Morishita(森下功啓)
2
Index
• 講師紹介• テーマ説明• 電子回路の基礎• 無線通信• 放射線量の計測• 参考情報
3
講義スケジュールと諸注意• 講義時間: 9:00〜 16:50• 昼食: 11:50〜 13:00• 休憩インターバル: 50分講義 , 10分休憩
• ICTセンターでは飲食禁止です
質問は随時!!
4
講師紹介• 2006年 八代高専機械電気工学科卒• 2008年 八代高専専攻科修了• 2010年 熊本大学情報電子工学専攻修了(修士)• 2013年 熊本大学情報電子工学専攻修了(博士)– 1年間、民間経験 , 5ヶ月間、熊大で研究補助
• 専門: GPS/GNSS、いろいろ計測• 得意技:電子工作 , プログラミング• 好きなこと:登山、釣り、作ること
5
これまでの代表作品(予定含む)
• 自動走行ロボ• 全身反応測定器• 温度場計測デバイス• 野生動物追跡システム• 無線制御式 LED制御デバイス• 遠隔雨水タンク監視・排水システム• 車椅子利用者負荷量計測デバイス
6
逆自己紹介• 自慢の一品• これから何を作りますか?• 興味のあること• 今日、身につけたいこと• プログラミングの経験• 第 1回に関する質問があればどうぞ
7
本日のテーマ
8
到達目標• 無線デバイスを用いてシリアル通信ができる
• 無線でセンサデータの通知ができる
• 放射線の種類を説明できる• 放射線量の計測ができる
• 部品の資料を調べられる• 最新のライブラリを入手できる
9
観測データの処理は各自の課題• データの継続的収集• データのデータベース登録• サーバ立ち上げ• 機械学習• ノイズ除去• 処理の自動化• etc.
今日は扱いません
リクエストはなかったし・・・
10
データフレーム設計も各自の課題• 通信に慣れてくると必要性を感じるはず• 通信速度、誤り検出、パケットロス、再
送処理、データ転送形式、、、考慮すべきことは多い
今日は扱いません
11
電子工作の基礎
12
基本ワードワード 意味
AD 変換 電圧を計測して、デジタル情報とすること
シリアル通信 1本の電線で 1 bit ずつデータを伝送する通信方式
ブロードキャスト
接続された全ノードを対象としてデータを送信する行為
ユニキャスト 特定のノードに対してデータを送信する行為
13
Q:マイコンの構成
*ここは CPUとか RAM/ROMとか IOとかが含まれているということを思い出して欲しいスライド。後に続く C 言語へ繋げたい。
14
マイコンとプログラムの関係• マイコンは CPU、 RAM、 ROM、他を内蔵• ROMといっても、書き換えが可能• プログラムは ROMに書き込まれる• マイコンは起動後に ROMの先頭から実行• 命令を 1つずつ CPUに入力しながら処理• 命令は 0と 1( Lowと High)で人間には分かり辛い
15
コンパイル• 計算機の理解できる書式に変更
16
ブートローダによるプログラム書き込み
• ブートローダ–プログラム書き込み器を省略できる–マイコンに予め書き込んでおく
• ブートローダの動作–電源 ON 直後に起動– 起動後一定時間、特定の信号入力を待つ– 書き込み信号を検出するとプログラムを受信–自身とは重ならない部分に受信したコードを書き
込む*ブートローダがなくても書き込みは可能ですが、専用のハードウェアが必要です
17
Arduino IDEと Processing IDE
• 似ているのは見た目だけ• 言語は C++と java
18
Arduino IDEの入手先• http://arduino.cc/en/Main/Software
19
Arduino IDEのボタン
コンパイル&書き込み(プログラムの転送)
シリアルモニタ起動コンパイルテスト
* Mac 版のスクリーンショットです
20
Arduino IDEのメニュー
* Mac 版のスクリーンショットです
通信ポートの選択マイコンの選択
ライブラリの利用等
サンプルコード等
21
#include<stdio.h>#define IO_NUM 6int io_status = 0;
void sub(int value1, int value2){ return vaule1 - value2;}
int main(void){ int fuga = sub(100, 50); return 0;}
C 言語の基本構造#incude
グローバル変数
#define
様々な関数
main関数
22
loop関数setup関数
Arduinoのプログラム構造
*Arduinoはコンパイルの直前にタイマー処理とmain関数を自動的に貼り付けている。 main関数の中身は、 {(void)setup();while(1){(boid)loop();}}
#incude
グローバル変数#define
様々な関数
右では略
NEW
NEW
23
setup関数の役割• setup()は起動直後に 1度だけ実行• ハードウェアの基本的な設定を記述すると楽
図 Srial ポートを使って 9600 bpsでのシリアル通信を行う準備を実施するコード
24
loop関数の役割• loop()は無限に実行する内容を記述
図 無限に AD 変換値をシリアル出力するコード
25
Arduinoの開発言語は C++
• オブジェクト指向に対応• クラスを利用できます
class TimeOut{ private: long timeout_time; public: // set timeout time width void set_timeout(long timeout) { this->timeout_time = millis() + timeout; } // timeout check, true: timeout boolean is_timeout() { if(millis() > this->timeout_time) return true; else return false; } // constructer TimeOut() { this->timeout_time = 0l; }};
クラスの例
26
クラスを利用するメリット• アクセス制御–デバッグし易い–プログラム設計上、考慮項目数が減る
• コードの相互依存性を減らせる–脱スパゲッティコード!
• 複数人でのプログラム開発–役割分担の明確化
• コードの再利用性が上がる
27
コードを理解させない技• ファイル間をまたがるグローバル変数• 無関係な関数を1つのファイルに格納• 1つの関数が長い• インデントしない• 名前で中身が推察されない変数名
28
分かりやすいコード• ファイル間で変数を共有しない–データ引き渡し用の関数を用意
• データに紐付いた関数を集めてクラス化• 関数はせいぜいモニタ 1.5 画面分と短く• インデントする• 変数名でデータが推察できる
29
演算子の優先度
“*” == “/” > “+” == “-”
* 同位の演算子は左にあるものが優先** 丸括弧()で囲われた中を最優先で処理
例: int a = 100 * 20 + 40aには何が代入される?
30
Arduinoでエラーが出たら• エラーメッセージを読む• 理解不可能な場合–メッセージをコピーして、ネットで検索– ””で括るのを忘れずに
図 エラーの例
31
電波を使った無線通信
32
電波 ==電磁波
• 電磁波–電界と磁界の相互作用で伝搬する波–電気を帯びた粒子と相互作用– 周波数で伝搬特性が大きく変わる• 水中は無理
* 図はWikipediaより引用
33
通信方式と特徴
通信規格スループット
ネットワーク対応 消費電力
メーカー独自 NA NA NA
3G 製品次第 × 高Wi-Fi 大 対応製品が必要 高Wi-Sun 未知数 30 ホップ対応 未知数Bluetooth 3.x 大 × 中Bluetooth 4.x 極小 × 極小
ZigBee 小メッシュ対応ホップ数は 10 程度
小*3G, Wi-Fiはインターネットへの接続性が高い
34
ZigBee
• センサネットワークを念頭に規格化された近距離無線通信規格
• ベース規格は IEEE802.15.4
35
目的に合わせて、無線器を選択• 通信距離• 必要なスループット–通信速度– 平均通信データ量–バースト通信データ量
• 消費電力
36
この講座では、 XBeeを利用• シリーズ 1( S1)を利用
図 左: 2009年購入品 右: 2011年頃の購入品
37
XBEE
38
XBee
• Digi-International社が開発• オフィシャルサイト–日本語:
http://www.digi-intl.co.jp/products/wireless-wired-embedded-solutions/zigbee-rf-modules/zigbee-mesh-module/index.html
– 英語(より詳細):http://www.digi.com/products/wireless-wired-embedded-solutions/zigbee-rf-modules/zigbee-mesh-module/
• IEEE802.15.4 規格を利用
39
XBeeのポートマップ
40
日本で利用可能な XBeeの種類• アンテナタイプ– ウィップ、 PCB、ダイポール( DP)
通信規格 周波数( @2014-09 日本)Wi-Fi 2.4 GHz
IEEE802.15.4ベース/DigiMesh (S1)
2.4 GHzいつか 920MHZがでるらしい
ZigBee(S2)
2.4 GHzいつか 920MHZがでるらしい
*無線機は、電波を出すために国の認可を受けている必要があります。
@2014-09-12
41
XBeeとマイコン間の通信速度• 最大、 57,600 bps(単位は baudと書くことも)
• 連続でさばけるスループットは 38,400 bps
42
XBeeの電源電圧• シリーズによって異なるが、概ね 3.3 Vで動作
• 5 V 以上や、 0 V 以下を印加すると破壊する
43
API通信モードAPI通信モードでは以下を実現できる• データの到達判定• 受信時の電界強度取得• ホップ数の調整• ブロードキャスト / ユニキャストの選択• 送信者の判別
送りたいデータ check sumaddresslengthheader others
APIデータフレームのイメージ(正確にはちょっと違う)
44
API モードの使い分け• API OFF:– 有線のシリアルを無線に置き換えるだけ–バイナリデータも送れる†– 文字化けに弱い
• API通信モード( with escape モードがおススメ)– 半端に文字が化けることがほぼ無い– 受信電界強度( RSSI)や送り主が分かる
†:” +++”は送らないこと。 ATコマンドモードに入ってしまう。
45
XBeeを使うために必要なもの• XBee-PC 接続デバイス• XCTU(ソフトウェア)
46
XCTU
• XBeeの設定,モニタリング用ツール• Windows/MacOSで動作• 入手先 @2014-09-13– http://www.digi.com/products/wireless-wired-em
bedded-solutions/zigbee-rf-modules/xctu
47
最低限の XBeeに必要な設定XCTUを使って以下の項目を設定• ファームウェア†• チャンネル(周波数選択)†• PAN ID†• API モード利用の有無• 通信速度(ボーレート , baudrate, bit-rate)‡
†:設定が一致した XBee 同士で通信可能‡:有線で接続された Arduinoと同じ値に設定のこと
48
この演習での設定• ファームウェア: 802.15.4• チャンネル: D• PAN ID: 2221• API モード: OFF(透過モード)
49
課題 1
• XCTUをインストール• XCTUを使って XBeeを設定
50
課題 2
• パソコン同士で、 XBeeを使ってチャット
51
課題 3
Arduinoを使って、• 自分の名前(ローマ字)をブロードキャスト
• 演者 PC モニタに表示されたら成功
52
課題 4
• 照度を計測して、ブロードキャスト• 演者 PC モニタに表示されたら成功
53
課題 5
Arduinoを使って、• “Hi, [your name]!”に返事する– [your name]: 森下なら、” morishita”–返事文はなんでも OK
54
放射線量の計測
55
放射線とは?
?
*γ線、 β線、 α線、その他 電離作用のある粒子や電磁波
56
計測方法センサの例• 光電子増倍管• 結晶+フォトダイオード
57
今日利用するデバイス• エステー社製 エアカウンター– http://www.st-c.co.jp/air-counter/
• ガンマ線に対応
これです
58
電気的接続エアカウンターポート名
ライン色(配布した機材にのみ有
効)
接続するArduinoポート
名備考
VBAT 白 D6 3.0 – 5.0 V 印加 OKGND 黒 GND
Tx 紫 D8
Rx 灰 D9 要:抵抗による分圧SW 青 D7 2 kOhmを介すこと
図 抵抗の配置
200Ω
330Ω
330ΩArduino
UNO エアカウンター
3.3V
Rx
D9
D7SW
2kΩ
59
スケッチ• 放射線量を計測し、シリアル出力します• 入手先– https://github.com/KatsuhiroMorishita/
AirCounterControler_for_Arduino
60
課題 1
• 最新のソースコードを入手• プログラムを書き込んで、動作チェック• 実行したら何か表示されましたか?
61
課題 2
• 放射線量の計測値を無線で飛ばしましょう
• 森下のモニタに表示されれば OK• データには自身の名前を添付しましょう– 例:「morishita: 0.07 uSv」
62
参考文献
63
Googleで検索• キーワードは大事• 日本語で資料がなければ英語で検索• 英語のサイトを見つけたら、自動翻訳
64
参考サイト
• Arduino公式• Arduino日本語解説• ソフトウェア共同開発サイト GitHub• 個人ブログ
65
参考図書
• Arduinoをはじめよう• Prototyping Lab• Arduinoで計る、測る、量る
• ZigBee開発ハンドブック• 超お手軽無線モジュールXBee
• XBeeでつくるワイヤレスセンサネットワーク
66
本講義の資料など• GitHub や SlideShare へアップロード• 本講義オフィシャルサイトにまとめます
67
まとめ
68
まとめ• 無線通信デバイスを使いました• 放射線の計測も行いました
69
Fin.
作りたいものは作れそうですか?
70
本講義を手伝ってくれた村山先生、湯治先生、ティーチングアシスタントの学生諸君、本当に有難うございました。
人 ´∀` ). .☆ 。 .:*ありがとぉ
71
おまけのページ
以降のスライドは、将来的に別のスライドとしてまとめるかもしれないしまとめないかもしれないスライド達です。
Arduinoの説明
72
http://www.teu.ac.jp/press/2012.html?id=128
• マイコンボード(基板)の一種• イタリア生まれ• 芸術大学の学生用に開発• オープンソース,オープンハードウェア• 世界中の人がソースコードを提供• 様々な種類– UNO, mega, DUE, TRE, etc.
• 同じ命令体系• 様々なセンサーを簡単に接続
Arduinoとパソコンの接続とCOM ポート確認 for Windows
• 目的– Arduino へのプログラムの書き込み,通信
• 手順– ArduinoをUSBで接続
• ドライバのインストールが必要な場合は、Arduino IDEのディレクトリ中にある「 drivers」フォルダを指定してドライバをインストール
– シリアル通信のために、 COM ポートを確認• 「コンピュータ」のプロパティからデバイスマネージャ• デバイスマネージャの中に COMxはあるか?
– xはローマ数字– Arduino IDEを立ち上げて、
• マイコンボードの種類をセット• COM番号をセット• シリアルモニタを起動• 通信速度をArduinoに合わせる 73
*Arduino DUEはWindowsでのみシリアル通信可能です
74
Arduinoとパソコンの接続とCOM ポート確認 for Mac
• 目的– Arduino へのプログラムの書き込み,通信
• 手順– ArduinoをUSBで接続– シリアル通信のために、シリアル通信ポートを確認
• terminal立ち上げ• “cd /dev” を実行• “ls” を実行• 表示された中から、Arduinoっぽいのを探す• USBケーブルを切断してもう一度確認すると消えている名前がある。それがArduinoとの通信に利用しているシリアルポート
– Arduino IDEを立ち上げて、• マイコンボードの種類をセット• シリアルポートをセット• シリアルモニタを立ち上げ• 通信速度をArduinoに合わせる*Arduino DUEはWindowsでのみシリアル通信可能です
76
公開講座への要望募集以下は森下個人の感じていることです• 学校運営交付金が徐々に減少している• 地域貢献活動予算も縮小は避けられない• 社会人講座の参加料も上るかも?• どんどん、開催講座の内容を要望しよう