.NET Gadgeteer モジュールのデモ:Accelerometer Module

.NET Gadgeteer のモジュール紹介シリーズ、Accelerometer モジュール加速度センサーです。

Accelerometer Module

機器の移動を検知して、何かアクションを起こしたい時に必要ですね。

できることは、なにしろモジュール自体の動きを感知するものなのですが、.NET Gadgeteer 的に整理すると以下のようになります。

  • センサーデータを取得 (要求して 1回取得)
  • 継続してセンサーデータを取得する間隔の設定
  • 継続してセンサーデータを取得
  • 閾値を超えた場合に通知する
  • 閾値の設定
  • キャリブレーション

対象のデータを別にすれば、一見 Compass モジュールと似ているように見えます。
が、閾値を超えた場合に通知する機能というのは、Accelerometer の特徴ですね。アイデアが貧困ですが「機器が落下した場合に通知する」みたいなことができますね。(すいません、他には パッとは思いつきませんでしたw)


センサーデータを取得 (要求して 1回取得)

センサーデータを取得するには RequestMeasurement メソッドを使います。引数は無し。
取得した値はイベントを介して処理します。 MeasurementCompleteEventHandler イベントハンドラーを使います。
このあたりの命名は Compass と同じですし、直感的で分かりやすいですね。

タイマーを使って繰り返しデータを取得してみます。
結果の出力は、今回は Visual Studio に Debug.Print にしておきます。

 

  1. using System;
  2. using System.Threading;
  3. using Microsoft.SPOT;
  4. using GT = Gadgeteer;
  5. using Gadgeteer.Modules.Seeed;
  6. using Gadgeteer.Modules.GHIElectronics;
  7.  
  8. namespace AccelerometerDemo
  9. {
  10.     public partial class Program
  11.     {
  12.         // This method is run when the mainboard is powered up or reset.   
  13.         void ProgramStarted()
  14.         {
  15.             accelerometer.MeasurementComplete += new Accelerometer.MeasurementCompleteEventHandler(accelerometer_MeasurementComplete);
  16.  
  17.             var timer = new GT.Timer(1000);
  18.             timer.Tick += new GT.Timer.TickEventHandler(timer_Tick);
  19.             timer.Start();
  20.  
  21.             // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
  22.             Debug.Print("Program Started");
  23.         }
  24.  
  25.         void timer_Tick(GT.Timer timer)
  26.         {
  27.             accelerometer.RequestMeasurement();
  28.         }
  29.  
  30.         void accelerometer_MeasurementComplete(Accelerometer sender, Accelerometer.Acceleration acceleration)
  31.         {
  32.             Debug.Print(acceleration.ToString());
  33.         }
  34.     }
  35. }

 

※片手にデバイス、片手にスマホで撮影したので手ぶれがひどくてすみませんw


継続してセンサーデータを取得する間隔の設定/継続してセンサーデータを取得

タイマーや Thread.Sleep を使わずに、継続してセンサーデータを取得することもできます。

ContinuousMeasurementInterval プロパティ で間隔を設定します。
データ取得の開始は StartContinuousMeasurements メソッドを呼び出します。(取得の終了は StopContinuousMeasurements メソッド)

結果が返ってくるのが MeasurementCompleteEventHandler イベント というのは先ほどと同じ。

  1. using System;
  2. using System.Threading;
  3. using Microsoft.SPOT;
  4. using GT = Gadgeteer;
  5. using Gadgeteer.Modules.Seeed;
  6. using Gadgeteer.Modules.GHIElectronics;
  7.  
  8. namespace AccelerometerDemo
  9. {
  10.     public partial class Program
  11.     {
  12.         // This method is run when the mainboard is powered up or reset.   
  13.         void ProgramStarted()
  14.         {
  15.             accelerometer.MeasurementComplete += new Accelerometer.MeasurementCompleteEventHandler(accelerometer_MeasurementComplete);
  16.  
  17.             accelerometer.ContinuousMeasurementInterval = new TimeSpan(0, 0, 1);
  18.             accelerometer.StartContinuousMeasurements();
  19.  
  20.             // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
  21.             Debug.Print("Program Started");
  22.         }
  23.  
  24.         void accelerometer_MeasurementComplete(Accelerometer sender, Accelerometer.Acceleration acceleration)
  25.         {
  26.             Debug.Print(acceleration.ToString());
  27.         }
  28.     }
  29. }

 

動画は省略でいいですね、見た目は先ほどと同じになりますから。


閾値を超えた場合に通知する/閾値の設定

あらかじめ設定した閾値を超えた場合にイベントで通知してくれる機能を持っています。
面白い機能です。使い道がいろいろありそうですね。

閾値の設定は EnableThresholdDetection メソッドを使います。引数は 7個。

第1引数・・・閾値、例えば 3G 以上で通知してほしい時は 3.0
第2引数~第4引数・・・X, Y, Z の各軸ごとに通知の要不要を指定
第5引数・・・第1引数の閾値は絶対値かどうかを指定、これを true にすると各軸ごとにどちら向きに加速度が生じても通知します
第6引数・・・自由落下の検知、これは面白いですね。自由落下の検知は閾値を超えなくても検知してくれるようです
第7引数・・・閾値の検知は一度限りでいいのか、通知後にリセットして引き続き閾値越えを通知するのかを設定

EnableThreasholdDetection の第7引数を false にした場合は、それ以降の再検知は ResetThresholdDetection メソッドを呼び出す必要があります。EnableThreasholdDetection の第7引数が true ならば何もしなくても再び閾値超えを通知してくれます。

Multicolor LED を接続してこんな構成にしてみます。

image
※なぜ Multicolor LED かというと、1秒で自動的に LED を消灯してくれるのでコード量が減らせるためw

  1. using System;
  2. using System.Threading;
  3. using Microsoft.SPOT;
  4. using GT = Gadgeteer;
  5. using Gadgeteer.Modules.Seeed;
  6. using Gadgeteer.Modules.GHIElectronics;
  7.  
  8. namespace AccelerometerDemo
  9. {
  10.     public partial class Program
  11.     {
  12.         // This method is run when the mainboard is powered up or reset.   
  13.         void ProgramStarted()
  14.         {
  15.             accelerometer.ThresholdExceeded += new Accelerometer.ThresholdExceededEventHandler(accelerometer_ThresholdExceeded);
  16.             accelerometer.EnableThresholdDetection(3.0, true, true, true, true, false, true);
  17.             accelerometer.ResetThresholdDetection
  18.  
  19.             // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
  20.             Debug.Print("Program Started");
  21.         }
  22.  
  23.         void accelerometer_ThresholdExceeded(Accelerometer sender)
  24.         {
  25.             multicolorLed.BlinkOnce(GT.Color.Red);
  26.         }
  27.     }
  28. }

 

各軸とも 3.0G を超える加速度を検知すると、LED が 1秒間だけ赤く点灯します。

 

楽しいですねw

(これでジェットコースターにでも乗れば、もっとリアルなデモができるかもしれませんが、今いるのは遊園地ではないし、あいにくジェットコースターは金をもらっても乗りたくないほど嫌いなので、こんなデモで勘弁してくださいw)


キャリブレーション

加速度データの取得の直接の機能ではないのですが、キャリブレーションのメソッドを持っているので紹介します。

文字通り Calibrate メソッドでキャリブレートします。注意点、というか呼び出す際には、「平らな場所で動かさずに」呼び出してください。・・・とIntellisence のヒントが仰っています。

「そんなこと言われても、実際の運用環境に持って行った時にキャリブレーションは不要なの?」と思うかもしれませんが、大丈夫(なようです)。
SaveCalibration メソッド、それに LoadCalibration メソッド があります。
SaveCalibration はモジュール内の不揮発メモリーに記録されます。ということで、あらかじめ一度 SaveCakubration を実行しておいて、運用環境では起動時(ProgramStarted メソッド内=電源投入時)に LoadCalibration するといいでしょう。

これについてはデモ・・・といっても効果をお見せできそうにないので動画はナシ。


 

センサーモジュールを使えるようになると、.NET Gadgeteer が俄然楽しくなってきます。
これの出力をどう見せるか、が決まれば、面白いデバイスが作れますね。それと、このブログではまだ触れていませんが、クラウドとの連携を考えると組み込み開発のこれからが見えてくるのではないでしょうか。

 

次回の技術ひろば.net の勉強会は 4月20日(土) の開催です。

組み込みってなかなか面白そうと思った方は こちらのページ からお申し込みください。
実務では組み込みはやらないという方も多いかもしれませんが、基本的な考え方を理解しておくのは大事かも。
初心者/未経験者も大歓迎!というより、そういう方にぜひ組み込み開発を体験していただきたいな、と思います。
当日お貸しできるボード、モジュールは複数用意してありますので、安心してどなたでもお気軽に参加してください。

皆で .NET Gadgeteer で楽しみましょう!!

 

PS. このところブログでは .NET Gadgeteer について書いていますが、数日浮気をしますw

広告
カテゴリー: .NET Micro Framework タグ: , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中