加速度センサーを使ってみる その2(MPU6050、Node-RED MCU)
はじめに
前回はESP32と加速度センサーのMPU6050を使いました。プログラムはArduino IDEで書き込みましたが、今回はNode-RED MCUで書き込みます。Node-REDで作成したプログラムをマイコンに書き込むことができます。
▼Node-RED MCUについてはこちらをご覧ください。
▼Node-RED MCUの環境構築についてはこちら。今回もRaspberry Piで実行しています。
▼前回の記事はこちら。回路も前回と同じです。
センサーの値を取得する
Sensorノードの設定をする
Node-RED MCUのSensorノードを使って、加速度センサーの値を取得します。
▼Sensorノードを配置して、センサーの種類を選択します。
▼今回はInvenSenseのMPU6050を使います。
▼選択すると、詳しい設定をすることができます。アドレスは0x68になっていますね。
デバッグウィンドウに表示する
デバッグウィンドウに表示させてみましょう。injectノードとdebugノードを接続します。
▼ESP32側のフローはこちら
タイムスタンプと書かれたinjectノードで、定期的にSensorノードを実行しています。
▼下のほうにある繰り返しの欄を設定します。ちなみに、時間間隔が短すぎると処理できなくなることがあります。
▼debugノードでは、msgオブジェクト全体を見てみます。
▼デバッグウィンドウの表示はこんな感じ。
デバッグウィンドウの表示から、例えばX軸の加速度はmsg.payload.accelerometer.xに入っていることが分かります。データ全てを受信するだけでは使いにくいので、X軸方向の加速度のみを表示させてみましょう。
▼debugノードでmsg.payload.accelerometer.xを指定すると、X軸方向の加速度だけ取得できます。
▼また、デバッグ用のツールであるxsbugにもセンサーの値が表示されます。
Node-REDでグラフ化する
加速度センサーの値をMQTT通信で送って、Node-RED側でグラフ化します。ここではNode-RED上で起動している、Aedes MQTT brokerにデータを送信します。
▼Node-REDとのMQTT通信に関する記事はこちら
▼Node-RED側のフローはこちら。mqtt in/outノードのトピックを、ESP32側と揃えておきましょう。
デバッグウィンドウで確認したように、X軸の加速度はmsg.payload.accelerometer.xを指定すると取得できます。この数値をグラフ化するためのノードに送信します。
▼changeノードの設定はこんな感じ。他にもY軸用と、Z軸用を用意しています。
Node-REDのダッシュボードの設定を行います。ここではnode-red-dashboardのgaugeとchartを使います。
▼Groupの設定以外は基本的にデフォルトなのですが、種類や色、ラベル、単位などを変更することができます。
ダッシュボード画面を開いて、グラフを見てみましょう。
▼Node-REDの画面右側にあるダッシュボードの設定画面から開くことができます。
▼実際に表示させたグラフはこんな感じ。円形ディスプレイに表示させたくなりますね。
▼実際に動かしているときの様子はこちら
最後に
Node-RED MCUで加速度センサー用のプログラムを作成し、Node-REDでグラフ化してみました。単位が分からないのですが、重力方向で大体9.8ぐらいだったのでm/s²ではないかと思っています。
処理が早すぎるとうまくいきません。MQTTブローカーを起動しているNode-REDが動かなくなったこともありました。温度や湿度などの環境系のセンサーであれば取得頻度が遅くても使えますが、即応性が求められる場面でNode-REDと加速度センサーを使うのは向いていないかもしれません。
重力の方向が分かるので、ディスプレイを向きに応じて傾けるといった用途などには使えそうですね。
趣味的ロボット研究所をもっと見る
購読すると最新の投稿がメールで送信されます。