Measurement &Control

計測・制御シリーズ

パソコンに取り込んで波形や周波数成分を分析レポート

大川 善邦 著

5004003002001000403020temperrature

1005040330200
1100humidity
hummidity
middit

CD-ROM付

第 1 章 センシングで使うArduino

具体的な作業に入る前に，イントロダクションを述べます．

■ 1.1

Arduino の誕生

Arduino は，今からおよそ 7 年前にイタリアにおいて誕生しました．
小さなボードに，Atmel 社の 8 ビットのマイクロプロセッサを搭載しています．
回路はオープン・ソースであり，全て公開されます．だれででも自由にボードを製造，販売することができます．
値段は，数千円程度です．
ソフトウェアも，同じく全て公開されています．インターネットからダウンロードして，自由に使用できます．
プロジェクトもオープン・ソースです．特定の企業が独占的に利益を得るということはありません．
みんなが知恵を出して，お互いに手を取りあって前進します．
現在，ヨーロッパを中心に多くのデベロッパがこの Arduino に集結して，アプリケーションを開発しています．
小さな雪が塊になり，それがさらに合体して大きな雪崩になるかのように，デベロッパの集団が拡大しています．
わが国においても，この流れを無視することはできません．
むしろ，積極的にこの流れに乗り込み，主導権を握る必要があります．
書店へ行くと，Arduino の書籍が山のように積みあげられています．
いずれの書籍も，センサの取り扱いにポイントを置いています．温度計，湿度計，GPS ……など，取り扱いを詳しく述べています．
Arduino において，センサの扱いが重要であることは間違いありません．
Arduino からセンサを除いたら，それこそ五感がない人，手足のないダルマになってしまいます．それではいけません．
しかし，逆に言うと，センサがすべてなのかという疑問もあります．

1.1

Arduino の誕生

7図 1.1
ビニル・ハウス

図 1.2
携帯電話

この疑問に答えたいと思います．
センサの取り扱いは，最も重要なポイントですが，それと同じように，取得したデータを必要な人に配布するということも大切です．ここが第 2 のポイントです．
情報は，必要な人に配布されてこそ意味を持ちます．
「数値」が重要なのではありません．
数値を必要とする人に配布する，ここが最も重要なポイントです．
こういう考えに基づいて，本書では Arduino とネットワークを組み合わせて，データ処理して，配布する方法について述べます．

8

第1章

センシングで使う Arduino

■ 1.2

サンプル・シーン
ことわざ「目は，口ほどにものを言う」という諺があります．
また，「百聞は一見にしかず」とも言います．
こういった諺に従って，本書において想定するシーンを図を使って説明します．
ここに，農家を経営する人，例えば A さんがいたとします．
A さんは，ビニル・ハウス（図 1.1）を持っています．
ビニル・ハウス以外にも，他の場所に農地や山地を持っています．
A さんは，たまたま山へ芝刈りに行ったとしましょう．
一生懸命に働いたので，中休みです．お茶などを飲んで喉を潤します．
ポケットから携帯電話（あるいは，タブレット）を取り出して，インターネットへ接続します．
ブラウザを使って，ビニル・ハウスに設置した Arduino ヘアクセスして，温度計のデータを閲覧します（図 1.1）．
ビニル・ハウスの温度が，少々高いようです．画面のボタンをクリックして，ビニル・ハウスの換気扇のスイッチを入れます．
…
…
…
しばらくして，再度ビニル・ハウスの温度計の値を読みます．温度は，平常値へ戻っています．画面の別のボタンをクリックします．ビニル・ハウスの換気扇は，ストップします．
A さんが使用したネットワークのスケルトンを図 1.3 に示します．
まず，Arduino があります．
Arduino のアナログ入力ポートに，温度センサを接続して，ビニル・ハウスの温度を取得します．
Arduino を例えば，小型のノート・パソコンへ接続します．OS は，仮に Windows としましょう．
ノート・パソコンは，Wi-Fi を介してインターネットへ接続します．ここに，単純なサーバを用意して，インターネットからアクセスがあると，Arduino から取得したデータを配信します．サーバの IP アド

PC

タブレットアクチュエータ

インターネット
Wi-Fi

Wi-Fi

Arduinoセンサ

図 1.3 システムのスケルトン

1.2

サンプル・シーン

9監視センタ

圧力センサ
携帯電話

Arduino図 1.4
体調のセンサ

監視センタ
携帯電話
センサ

Arduinoインターネット

図 1.5 システムのスケルトン

レスは固定とします．
携帯電話は，通常，電話回線を介してインターネットへ接続します．ブラウザを立ち上げて，ビニル・ハウスのノート・パソコンへアクセスして，Arduino のデータを取得します．
もう一つ別のシーンを考えます．図 1.4 を見てください．
B さんは，80 歳です．
最近，心臓の調子が変調です．外出の際は，常時，携帯電話を身に着けます．
携帯電話には，Arduino と心拍センサが接続しています．心臓のペースに変調が起こると，電話回線を介して病院の監視室へメールが発送されます．
図 1.5 に，ネットワークの構造を示します．
病院の監視室は，企業や学校などと同じ方式でインターネットへ接続します．通常，ケーブルで接続します．一方，サブジェクト側は携帯電話の回線を使ってインターネットへ接続します．Arduino は，10第1章センシングで使う Arduino

USB ケーブルを介して携帯電話へ接続します．これが，B さんの場合のネットワークです．
Arduino，携帯電話，タブレット，PC，これらを接続するパターンは，それこそ無限に存在します．
次から次へと新しい技術が誕生しているからです．そのすべてを 1 冊の本で述べることはできません．
てつ

すべての人から良い評価を得ようとして，ノイローゼになった人がいます．この轍を踏まないために，ここでは一つのパターンを取り上げて，それに関して徹底論議します．
サンプル・シーンとして，図 1.3 に示した構造を取り上げます．
Arduino は，USB ケーブルを介して PC へ接続します．
PC にインストールするプログラムは，Processing
C#Excelなどを使います．
遠隔地からアクセスするメディアは，Android タブレットを想定します．
これが，本書において考えるシステムの構成です．
次章以下において，具体的なプログラムを示します．

■ 1.3

システムの要件

Arduino がインターネットを介してデバイスと通信する構造は，おそらく無限に存在します．
1 冊の書籍において，そのすべてを論じることはできません．
全体を薄く，かつ浅く論じるより，一つの事例を深く掘り下げるほうが，読者にとって有効でしょう．
そういった意味で，ここでは問題設定を特定のパターンに絞り込みます．
まず，第 1 のポイントは，計測したデータは公開するのか，あるいは非公開なのか，ここが一つの分岐点です．
公開とは，計測したデータに対して，だれもが自由にアクセスできることを意味します．
非公開とは，逆に特定の人物以外のアクセスは不可とします．
計測データを公開するサイトとして，例えばパッチベイ，http://www.pachube.com
あるいは，わが国の FIAP サーバ（参考文献 1，2）などあります．
本書においては，図 1.1 あるいは図 1.4 などの状況を考えるので，計測データは原則的に，非公開とします．すなわち，特定の人が計測データにアクセスする（逆に言えば，特定の人以外はアクセスできない）とします．

1.3

システムの要件11

第 6 章 波形解析

Arduino が測定したデータを USB ケーブルを介して開発 PC へ送信し，PC において波形解析を行います．
アルゴリズムの詳細などは，参考文献（3）を参照してください．

■ 6.1

フーリエ解析

Arduino の計測データを Excel へ送信して，Excel においてフーリエ変換する方法を述べます．
フーリエ変換のアルゴリズムは，FFT（Fast Fourier Transform ：高速フーリエ変換）を使います．
FFT のプログラムは，Excel の VBA に用意されています．
使用頻度が低いためか，Excel をインストールした直後の状態では，VBA を使用することはできません（マイクロソフトの Office を標準でインストールした場合）．
まず，Excel においてフーリエ変換を使用できる状態にします．
Excel の画面を開きます．
［ファイル］タブをクリックして，［オプション］をクリックします．
画面 6.1 に示すように，［Excel のオプション］のダイアログが開きます．
左のパネルにおいて［アドイン］を選択します．
画面の最下行にある［管理］のドロップダウン・リストが，Excel アドインになっていることを確認して，設定ボタンをクリックします．画面 6.2 に示すように，アドインのダイアログが開きます．
画面に示すように，［有効なアドイン］のパネルにおいて，分析ツール − VBA

に対してチェック・マークを付けて，［OK］ボタンをクリックします．
フーリエ変換のプログラムが使用できるようになりました．動作チェックのために，サンプル・デー
タに対してフーリエ変換を適用し，結果を検証します．

6.1

フーリエ解析

105

リスト 6.2 UserForm1（コード）Private Sub CommandButton1_Click()
ArduinoD
End Sub
Private Sub CommandButton2_Click()Range("A1:A16").SelectApplication.Run "ATPVBAEN.XLAM!Fourier", ActiveSheet.Range("$A$1:$A$16"), _ActiveSheet.Range("$C$1:$C$16"), False, False
End Sub
Private Sub CommandButton3_Click()Range("G1").SelectActiveCell.FormulaR1C1 = "=IMABS(RC[− 4])"
Range("G1").SelectSelection.AutoFill Destination:=Range("G1:G16"), Type:=xlFillDefault
Range("G1:G16").SelectActiveSheet.Shapes.AddChart.SelectActiveChart.ChartType = xlLineMarkers
ActiveChart.SetSourceData Source:=Range("Sheet1!$G$1:$G$16")
End Sub
Private Sub CommandButton4_Click()
Unload Me
End Sub

FFTArduinoです．
ここで，フォームを開きます．
リスト 6.2 に，UserForm1（コード）を示します．
ここでは，各ボタンをクリックした際に実行するコードを記述します．
フーリエ変換のコードは，「マクロの記録」を使って取得しました．
コードの説明は省略します．
プロジェクトは，ArduinoFFTとして保存します．
準備が整ったので，実機を使って実験を行います．
前節と同じ結果を得ます．
皆さんは，実機を使って検証してください．

■ 6.4

ウェーブレット解析

今から，およそ 100 年ほど前に，Haar はウェーブレットに関する論文を書きました．
当時，この論文の価値を認める人は，おそらく Haar 本人も含めて，だれもいませんでした．ごみ箱124

第6章

波形解析

図 6.1
心電図の目視検査に「ポイ捨て」です．
ここ 20 年ほど，ウェーブレット解析は急激に進展しました．
ウェーブレット解析のスタート台は，Haar の論文であることがわかりました．
まるで，フランケンシュタインが墓地から立ち上がったように，Haar の論文は息を吹き返しました．
数学的に言うと，ウェーブレット解析は，フーリエ解析の拡張です．
フーリエ解析における「周波数」という概念をもっと一般的な「波」という概念に拡張します．
ウェーブレット解析の発見によって，波形解析の技術は新しい局面を迎えました．
ウェーブレットを直訳すると「小さい波」です．
一つの例として，医者が心電図を目視検査するというシーンを考えてみます（図 6.1）．
検査医師は，心電図のチャートを見て，何かを見つけると，要精密検査などの診断を下します．
では，このとき，検査医師が見るものはなんでしょうか．
医師が見るものは，チャート全体に広がる現象（例えば，波の平均値……など）ではないでしょう．
波の部分における形状です．
それではこのチャートのデータをコンピュータへ取り込んで，ウェーブレット解析を適用すると，医師と同じ結果を得ることができるでしょうか．
これが，ここで考える問題です．
コンピュータで処理するために，ウェーブレットは離散的な値でなければなりません．数式で書けば，

a 0 , a 1 , a 2 ,..., a n
6.4

ウェーブレット解析125

画面 6.37 フォーム

■ 6.5

Haar のウェーブレットを計算するプログラム

数学的な詳細は参考文献に任せるとして，とりあえず Haar のウェーブレットを計算するプログラムを作成します．
まず，フォームを作成します．作成したフォームを画面 6.37 に示します．
ラベルとテキスト・ボックスのペアを 2 組ドラッグします．画面に示すように，キャプションを付けます．
ボタンを 5 個ドラッグして，画面 6.37 に示すようにキャプションを記入します．
リスト 6.3 に，Module1 のコードを示します．
今回は，マクロ，Haarを起点にします．
Haar からフォームを立ち上げます．
マクロ，getData
は，Arduino から計測データを取得します．
リスト 6.4 に，UserForm1 のコードを示します．
リスト 6.4 の UserForm1 のコードの説明をします．
［クリア］ボタンをクリックすると，データ領域のセルをクリアして，白紙の状態に初期化します．
コード上では，セル A1 から C200 の矩形領域をクリアしています．
［データ］ボタンをクリックすると，

getDataを呼び出して，Arduino から計測データを取得します．

6.5

Haar のウェーブレットを計算するプログラム

127このPDFは，CQ出版社発売の「お部 本です．
内容・購
内容
購
法

軽マイコン・ボード Arduinoとセンサで計測&解析」の法などにつきましては以下のホームページをご覧下さい．
http://shop.cqpub.co.jp/hanbai/books/40/40961.htm
http://www.cqpub.co.jp/order.htm