センサーデータをRaspberry Piに統合:実践ガイド
概要
GPSモジュールとMPU-9150 IMUをRaspberry PiのI²CとUARTインターフェースで接続・読み取り、自律ナビゲーション向けにリアルタイムで情報を処理する方法を学びます。
キーワード: I2C通信, UART通信, Adafruit Ultimate GPS Breakout, Sparkfun MPU-9150 Breakout, Raspberry Piセットアップ
はじめに
センサーデータ取得はあらゆるデジタル制御システムの基盤です。組み込みコントローラがこれらの入力を処理する際、通信インターフェースの選択が極めて重要になります。ロボティックナビゲーションプロジェクトでは、継続的なGPS位置更新と正確なコース測定が必須です。このチュートリアルでは、GPSモジュールと磁力計をRaspberry Piに配線し、データをリモートで表示し、制御ソフトウェアに統合する方法を示します。
目的
この上級チュートリアルは、Raspbianと基本的なbashコマンドに精通していることを前提としています。Piのシリアルインターフェース経由で加速度計とGPSデータを読み取り、センサーを配線し、必要なハードウェアドライバを設定する手順をガイドします。
情報
ハードウェア
- Sparkfun 9-Degrees-of-Freedom Breakout (MPU-9150)
- Adafruit Ultimate GPS Breakout
MPU-9150は、MPU-6050(3軸ジャイロスコープ & 加速度計)とAK8975デジタルコンパスを組み合わせたマルチチップモジュール。低消費電力と高性能でスマートフォンやタブレットで広く使用されています。
Adafruit Ultimate GPSはMTK3339チップベースで、10Hz更新レート、22衛星追跡、外部アンテナポートを提供。赤色LEDが信号状態を示す:探索中は1Hz点滅、フィックス取得後は15秒間隔で点滅。
通信標準
I²Cは双方向2線(SDA & SCL)でマスタ(Pi)と複数スレーブを接続、各スレーブは固有アドレスを持ちます。
UARTは、プログラマー定義のボーレートで5-8ビットフレームとして非同期にデータを送信、独立したTxDとRxDラインを必要とします。
パーツリスト
- Raspberry Pi
- 電源
- Wi-Fiドングル
- Sparkfun MPU-9150ブレークアウト
- Adafruit Ultimate GPSブレークアウト
- USB-TTLアダプタ(オプション)
- ブレッドボード
- メス-オスジャンパーワイヤ
前提条件
- インターネットアクセス可能。
- Raspbianインストール済みでデスクトップモード設定済み。
- マウス、キーボード、HDMIモニター接続済み。
手順
- PiのGPIOピンを特定:UARTはGPIO 14(Tx)& 15(Rx);I²CはGPIO 2(SDA)& 3(SCL)。
- GPS配線:GPSのTxをPiのRx、RxをPiのTxに接続、Vinに3.3Vまたは5V供給、GNDをPiのグランドに接続。
- MPU-9150配線:Vccを3.3V、GNDをグランド、SDAをGPIO 2、SCLをGPIO 3に接続。
- PiでI²Cを有効化:
sudo apt-get update && sudo apt-get install i2c-tools libi2c-devを実行。- WiringPiインストール:
git clone git://git.drogon.net/wiringPi && cd wiringPi && sudo nano /etc/modulesでsnd-bcm2835、i2c-bcm2708、i2c-devを追加。 /boot/config.txtにdtparam=i2c1=onとdtparam=i2c_arm=onを追加し、再起動。
- MPU-6050デモをインストール:
git://github.com/richardghirst/PiBits.gitをクローン、MPU6050-Pi-Demoに移動、libgtkmm-3.0-devインストール。I2Cdev.cppとsetup-i2c.shを編集し、/dev/i2c-0を/dev/i2c-1に置換。makeでコンパイル、./setup-i2c.sh実行、sudo i2cdetect -y 1で確認。./demo_raw実行で生ジャイロ・加速度データを表示。
- GPSデータ取得のセットアップ:
- AdafruitのGPSデーモンガイドを出発点とするが、カスタムハンドリングのためオープンソースlibgpsライブラリを使用。
git://github.com/wdalmut/libgps.gitをクローン、make && sudo make installでコンパイル。- 付属の
position_logger.c例でテスト:gcc -o position_logger position_logger.c -lgps -lmでコンパイルし./position_logger実行。フィックス取得時に緯度経度が10進度で出力。
結論
このチュートリアルでは、Raspberry Pi上で2つの一般的なセンサーのハードウェア配線、通信プロトコル有効化、基本ソフトウェアセットアップをカバーしました。例はデータ表示に焦点を当てていますが、同じ原則を洗練されたナビゲーションや制御アルゴリズムへのセンサー出力統合に拡張可能です。各センサーのライブラリを習得し、C/C++開発をしっかり理解することで、より複雑なリアルタイムセンサーフュージョンが可能になります。
参考文献
- Kevin Townsend. Adafruit Ultimate GPS on the Raspberry Pi, 15 July 2014.
- Walter Dal Mut. UART NMEA GPS library for Raspberry Pi, 08 Sept 2014.
- InvenSense. MPU-9150 Datasheet, 18 Sept 2013.
製造プロセス
- 複数DS18B20 1-WireセンサーをRaspberry Pi接続で精密温度監視
- Raspberry PiとDS18B20によるプロフェッショナルな温度監視
- Raspberry Piでサーバークローゼットの温度を正確に監視
- Raspberry PiでPIRモーションセンサーとLEDを制御
- Raspberry Piで低コスト土壌水分センサーを構築 - スマート灌漑に活用
- Raspberry Piでリアルタイムパン/チルト顔追跡 - 実践ガイド
- Lego Mindstorms NXT超音波センサーをRaspberry Piに直接接続する
- HC-SR04超音波センサーをRaspberry Piに接続する実践ガイド
- Raspberry Pi、DHT11、ThingSpeakで作る初めてのIoTプロジェクト
- Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
- Raspberry Pi、MCP9808、InfluxDB、Grafanaで作る家庭温度モニター