カテゴリー別アーカイブ: ロボット・電子工作・マイコン

コップの水がこぼれない台 MPU6050 + Raspberry Pi Pico(Arduino)

前回の記事「MPU6050 + Raspberry Pi Pico(Arduino) -> PCで3Dのキューブを回転表示」の続きです。

前回はジャイロ・加速度センサー(MPU6050)の値を読み込んでPC上で3Dのキューブを回転表示しましたが、
今回はサーボ2つを使用して、「常に水平になる台」を作成してみました。

サーボ2台を直交させて接続しますが、お手軽にラズパイカメラ用2軸マウント(A838)を使用しました。

このカメラマウントは、サーボに定番の小型サーボSG-90を使用するようになっています。
(今回はSG-90の互換サーボを使用しました)

ラズパイカメラ用2軸マウント(A838)の組み立て方法は以下を参考にさせていただきました。
https://python-academia.com/raspberrypi-camera-mount/

上の写真のように接続しました。

  Pico               MPU6050
  Pin6 GP4        -> SDA
  Pin7 GP5        -> SCL
  Pin36 3V3(OUT)  -> VCC
  Pin3 GND        -> GND

  Pin4 GP2        -> サーボ1
  Pin5 GP3        -> サーボ2

プログラムはMadgwickAHRSで推定した角度でサーボを動かしています。

Raspberry Pi Pico側はArduino開発環境を使用しました。
Arduino開発環境にはearlephilhower版を使用しました。

以下のライブラリを使用しています。
GitHubからZIP形式でダウンロードして、Arduino IDEの「スケッチ」->「ライブラリをインクルード」->「zip形式のライブラリをインクルード」でインストールします。

〇角速度・加速度から角度を推定 -> MadgwickAHRSフィルタ
https://github.com/arduino-libraries/MadgwickAHRS

〇タイマー割込み
https://github.com/khoih-prog/RPI_PICO_TimerInterrupt

ソース(Arduino開発環境用)はこちらに置いています。
https://github.com/ponta1/HorizontalTable

ソース(Arduino開発環境用)はこちらに置いています。
https://github.com/ponta1/HorizontalTable

コップの水がこぼれない様子
※サーボが小型のためパワーがなくてダイソーのおちょこぐらいしかのせられませんでした


MPU6050 + Raspberry Pi Pico(Arduino) -> PCで3Dのキューブを回転表示

前回の記事「Madgwickライブラリの収束を速くする 【Arduino/MPU6050】」の続きです。

角速度(ジャイロ)・加速度センサーMPU6050の角度をPC上で表示するプログラムを作ってみました。

Raspberry Pi Pico(Arduino開発環境)でMPU6050から読み取った角速度・加速度からMadgwickで角度を推定しPCへ送り、PC上で受け取った角度で3Dのキューブを回転させ表示します。
今回はRaspberry Pi Picoを使用しましたが、Arduino UNOなどでも接続ピンが変わるのとタイマーのところを変更すれば行けると思います。

プログラムはGitHubで公開しています。

■Raspberry Pi Pico側
PicoとMPU6050は上の写真のように接続しました。

  Pico               MPU6050
  Pin6 GP4        -> SDA
  Pin7 GP5        -> SCL
  Pin36 3V3(OUT)  -> VCC
  Pin3 GND        -> GND

Raspberry Pi Pico側はArduino開発環境を使用しました。
Arduino開発環境にはearlephilhower版を使用しました。

Raspberry Pi Pico側のプログラム(Arduino)
MPU6050/MPU6050.ino

以下のライブラリを使用しています。
GitHubからZIP形式でダウンロードして、Arduino IDEの「スケッチ」->「ライブラリをインクルード」->「zip形式のライブラリをインクルード」でインストールします。

〇角速度・加速度から角度を推定 -> MadgwickAHRSフィルタ
https://github.com/arduino-libraries/MadgwickAHRS

〇タイマー割込み
https://github.com/khoih-prog/RPI_PICO_TimerInterrupt

■PC側
MPU6050.py

Pythonで作成しています。
COM_PORT変数は適切なポートに書き換えてください。

以下のライブラリを使用しています。
〇pyserial
PCとPicoのシリアル通信のためにpyserialを使用しています。
以下のコマンドでインストールしてください。

pip install pyserial

〇Panda3D
3D表示のためにPanda3Dを使用しています。
以下のコマンドでインストールしてください。

pip install Panda3D


Madgwickライブラリの収束を速くする 【Arduino/MPU6050】

ArduinoでMPU6050などのジャイロを使うとき、Madgwickライブラリを使うと簡単に角度の推定ができますが、デフォルトの状態だと収束に少し時間がかかるようです。
多少ノイズが大きくなっても速く追従させたかったので、収束速度=ゲインを調整できるようにしてみました。

Madgwickライブラリ: https://github.com/arduino-libraries/MadgwickAHRS

Madgwickライブラリの使い方はここでは述べませんので以下を参照してください。

ArduinoのMadgwickライブラリの使い方
https://garchiving.com/how-to-madgwick-library-of-arduino/

【Arduino 】MPU-6050を使って姿勢角を算出 (MadgwickFilterを使用)
https://shizenkarasuzon.hatenablog.com/entry/2019/02/16/181342

Madgwickライブラリは1.2.0 (2022/12/3時点の最新版)を対象とします。

Madgwickライブラリのゲイン変更

Madgwickライブラリではゲインが0.1で固定されていますので、これを変更できるようにメソッドを追加してみます。

Madgwickライブラリをインストールすると、手元の環境では以下のディレクトリにインストールされていました。
C:\Users\xxxx\Documents\Arduino\libraries\MadgwickAHRS-master\src
(※xxxxはユーザー名)

MadgwickAHRS.h にsetGain()メソッドを追加します。 (begin()メソッドの下の行)

....
public:
    Madgwick(void);
    void begin(float sampleFrequency) { invSampleFreq = 1.0f / sampleFrequency; }
    void setGain(float gain) { beta = gain; }	// <- この行を追加
    void update(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz);
....

begin()を呼んだ後に、以下のようにsetGain(1.0)すると、ゲインを設定できます。

  MadgwickFilter.begin(100); // 100Hz
  MadgwickFilter.setGain(1.0);

デフォルトは0.1です。
1.0にすると、収束が速くなります。ただし、ノイズが大きくなりますので、用途に合わせて調整してください。


コロナウイルスに立ち向かうRaspberry Piのアイディア

コロナウイルス(COVID-19)の感染拡大により、世界中が苦境に立たされている昨今。感染したトランプ大統領はどうにか無事退院したようですが、欧州や香港ではバーやレストランの営業制限を設定したり、制限を検討したりと、まだまだ影響は続きそうです。そんな中、海外メディアでは、Raspberry Pi(ラズベリー パイ)を手に、コロナウイルスに立ち向かおうというアイディアが紹介されているようです。

続きを読む


IoTの例:高齢者向け見守りシステム 【みまもり~な】の内部構成を公開!

世の中、IoT(Internet of Things)が注目されていますが、今回は構成例として当サイトで提供させていただいている、高齢者向け見守りシステム「みまもり~な」の内部構成をご紹介します。

IoTについては以下のサイトがとても詳しく書かれていてわかりやすいです。
IoTとは何か。活用事例をまとめてみた
日本のIoT活用事例20個:農業や自動車などに導入中

高齢者向け見守りシステム「みまもり~な」は人感センサーの反応回数と温度を24時間監視し、定期的にメール送信するシステムです。
私も一人暮らしの親がおり本システムを使用しているのですが、今年の夏は猛暑なのでクーラーを付けているか確認できて便利です。
「みまもり~な」について、詳しくはこちらを御覧ください

概要図

【みまもり~な】の概要図

今回は「みまもり~な」センサー本体の内部を公開してしまいます!

【メインボード】
「みまもり~な」のメインボードはRaspberry Pi A+を使用しています。
Raspberry Pi A+は小型・低消費電力で、今回の用途にぴったりです。
Raspberry Pi 3 Model B+と比べるとCPU・メモリやI/Fが非力ですが、今回はCPUやメモリをガシガシ使う用途ではないので問題ありません。
また、今回は温度センサーで温度を計測を使用していますが、A+は発熱が少ないのでCPUの発熱の影響を少しでも減らせます。
写真には写っていませんが、USBにWifiアダプタを接続して、モバイルルーター経由でサーバと通信します。
RSコンポーネンツ:ラズベリーパイはいつもこちらで購入しています

【センサー】
センサーには以下を使用しています。

  • 人感センサー
    人感センサーには人を感知するとONになるタイプのセンサーを使用しています。
    ON/OFFが切り替わるとRaspberry Piにて割り込みが発生してカウントします。
    1時間あたりのON/OFF回数をカウントしています。
  • 温度センサー
    温度センサーにはI2C接続タイプのセンサーを使用しています。
    本体ケース内にセンサーを設置しているため、CPUの発熱の影響のため正確な温度は測定できないですが、測定値から一定温度を+ーできるようになっていて、クーラーをつけているかの判断はできます。
  • プッシュボタン
    緊急ボタンとして、プッシュボタンを設置しています。Raspberry Pi側でプルアップ設定したGPIOに直接接続しています。
    押されるとRaspberry Piにて割り込みが発生してサーバへ送信するようにしています。

【ソフトウェア】
センサー本体のRaspberry Pi側で動作するソフトウェアは大きく以下の2本になります。(サーバ側は省略します)

  • センサー監視プログラム
    Pythonで作成したプログラムでセンサー類を監視し、ユーザが設定した頻度でサーバへ送信します。
  • 設定画面
    WEB画面で設定を行える用になっており、PHPで作成したWEB画面で、設定した設定値を設定ファイルに記録します。

簡単ですが、「みまもり~な」の内部構成は以上のようになっています。上記の写真の配線を見てシンプルなことに驚かれた方もいるのではないでしょうか?
「みまもり~な」はRaspberry Piがなければ実現できなかった製品です。
Raspberry Piを使った今回の構成で他にもいろいろなIoTが創れそうだと考えています。