I2Cデータのフィルタリング
I2C (Inter-Integrated Circuit)通信では,マスターデバイスは最高で128のスレーブデバイスと通信が行える.各スレーブは一意的なアドレスで識別され,データの転送はシリアルデータ(SDA)回線で行われる.もう一つの回線はシリアルクロック(SCL)回線である.I2Cは2線式インタフェース(TWI)としても知られている.
この例では,Arduino Nanoにコードを配備してMPU-6050 I2Cセンサからの加速度計とジャイロの読取り値を取得する.センサの配向角は加速度計あるいはジャイロの読みから計算することができる.前者は雑音が多く後者は定常状態でドリフトするので,これらの計算は正確ではない.そこで,2つの値をブレンドする相補フィルタも配備する. フィルタをかけていない値とかけた値がシリアルバスを介して送り返され,可視化される.
軸と 軸に沿った加速度,温度, 軸に沿った角速度が,それぞれアドレス0x3Dで始まる2バイトに保存される.以下はこれらの8バイトを得る指定である.
初期化指定.
MPU-6050のアドレスは0x68である.次はその完全な指定である.
各入力チャンネルの変換.
完全なマイクロコントローラ指定.
事前にフィルタをかけたブロックで加速度計データからの角を度を単位として計算する.また,ジャイロスコープからのデータを度/秒を単位とした角速度として計算する.
相補フィルタは事前にフィルタをかけた出力を取ってフィルタをかけた角度の値を計算する.
積分器は角速度を積分することで角度を計算する,
完全なシステムモデル.
コードを配備する.
Arduino Nanoへの接続を開く.
データを読み取るタスクを送信する.
データを解析してプロットする.
タスクを削除し,デバイスへの接続を閉じる.