IntelCurieによるモーションセンシティブな回路制御
コンポーネントと消耗品
> |
| × | 1 |
このプロジェクトについて
目標
- 足音が検出されると、ライトが自動的にオン(およびオフ)になります
- ライトの点滅を、検出された近くのダンス/タッピングのテンポと同期させます
- 地震イベントを検出するために、USB / Bluetoothを介して加速度計/ジャイロスコープの読み取り値を出力します
GitHubリポジトリ
https://github.com/ckuzma/arduino-101-sketches
スケッチ
TapFlashTest
#include "CurieIMU.h" void setup(){pinMode(LED_BUILTIN、OUTPUT); CurieIMU.begin(); CurieIMU.attachInterrupt(eventCallback); CurieIMU.setDetectionThreshold(CURIE_IMU_SHOCK、1050); // 1.050g =1050mg CurieIMU.setDetectionDuration(CURIE_IMU_SHOCK、75); // 75ms CurieIMU.interrupts(CURIE_IMU_SHOCK); } void loop(){//メインループに何も入れる必要はありません...} static void eventCallback(void){if(CurieIMU.getInterruptStatus(CURIE_IMU_SHOCK)){digitalWrite(LED_BUILTIN、HIGH); delay(50); digitalWrite(LED_BUILTIN、LOW); }}
- タップが検出されるとオンボードLEDが点滅します
- インパルス検出の変更を把握するために使用されます
TapBeatMatch
<図>
- オンボードLEDの点滅を、Arduino101の近くの卓上表面をタップするテンポに同期させます
- ノイズを軽減するために加重平均を実装
- 調整可能な衝撃検出しきい値
SeismicReader + Python視覚化スクリプト
<図> <図>- Arduino 101ボードは、JSON形式の加速度計とジャイロスコープの値をシリアル経由で出力します。シリアルは接続されたコンピューターによって読み取られます
- ボードからデータを読み取り、ターミナル/コマンドプロンプトの非常に単純な線にグラフ化する小さなPythonスクリプトを作成しました
- Excelで開いてグラフ化できるCSVに結果を保存します
- マルチプラットフォームPython2.x / 3.xの使用法:
VibrationLighting
<図> <図>- 元々、誰かが近くにいるときに足音の接近を検出して照明をアクティブにするように設計されていましたが、信号対雑音比が私のインストールでは十分にクリーンでなかったため、ダブルタップ検出に縮小されました。
- 玄関ミラーの下にテープで留められたLEDストリップは、ミラーが2回続けてノックオンされるとオンとオフになります
ボーナス
Bogdanとの会話により、Arduinoスケッチを変更して、ほぼすべてのArduinoデバイスに接続されたスタンドアロンの加速度計とジャイロスコープセンサーを操作し、 CurieGraph.py
を使用するのは非常に簡単であることがわかりました。 データを視覚化します。地震の測定値を収集する目的は、複雑な機器や特殊な機器を使用せずに大量のデータをクラウドソーシングできることを証明することであると考え、机の中で「ITG-MTU」/「GY-521」/「MPU-6050」を探しました。センサーボード、そしてそれのために次のスケッチを書きました。 CurieGraph.pyは数回起動に失敗する可能性がありますが、通常は3回目の試行で適切にキャッチされます。
外部ジャイロスコープ
<図> #include const int MPU_addr =0x68; // ITGのI2Cアドレス-MTUint ax、ay、az、temp、gx、gy、gz; void setup(){Serial.begin(9600); Wire.begin(); Wire.beginTransmission(MPU_addr); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); } String jsonEncodeValue(String key、float keyVal){return "\" "+ key +" \ ":" + String(keyVal)+ ""; } String assembleJson(String keysAndVals){return "{" + keysAndVals + "}"; } void loop(){Wire.beginTransmission(MPU_addr); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU_addr、14、true); ax =Wire.read()<<8 | Wire.read(); ay =Wire.read()<<8 | Wire.read(); az =Wire.read()<<8 | Wire.read(); temp =Wire.read()<<8 | Wire.read(); gx =Wire.read()<<8 | Wire.read(); gy =Wire.read()<<8 | Wire.read(); gz =Wire.read()<<8 | Wire.read(); // temp =temp / 340.00 + 36.53; //一時データを摂氏に変換します-使用されていませんStringkeyVals =jsonEncodeValue( "ax"、ax)+ "、"; keyVals + =jsonEncodeValue( "ay"、ay)+ "、"; keyVals + =jsonEncodeValue( "az"、az)+ "、"; keyVals + =jsonEncodeValue( "gx"、gx)+ "、"; keyVals + =jsonEncodeValue( "gy"、gy)+ "、"; keyVals + =jsonEncodeValue( "gz"、gz); Serial.println(assembleJson(keyVals)); delay(100); }
コード
arduino-101-スケッチ
IntelCurieの加速度計とジャイロスコープを利用してArduino101用に特別に作成されたスケッチのコレクション。https://github.com/ckuzma/arduino-101-sketches製造プロセス