ESP32-DevKitC-32Dボードを使ってみただけ。
ESP32-DevKitC-32Dボードを使わないまま持ってたので以下のサイトの通りやってみただけ。
https://akizukidenshi.com/catalog/g/g113628/

ESP32-DevKitC-32Dボードの基本的な使い方 ~Arduino IDE編~
http://microtechnica.xyz/?p=271

最初、ボードを刺しても認識されず、ドライバ無いようだ。
ダウンロードしてきてドライバの更新からインストール。
https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers

そして、サンプルコピペしてコンパイル、ダウンロードしたらLEDチカチカした。
LEDは抵抗を入れて32番ピン。

その次、WEBサーバー機能でブラウザからLEDを制御をする、をやってみた。
WifiルータのSSIDとパスワードをスケッチに書き込んで、コンパイル。
シリアルポートの速度を115200にして開くと通信初めて、ホストのIPアドレスが表示される。
ブラウザでアドレス入力。
すると画面の通り出て、ブラウザからLEDが制御できた。

alt

すんなりいくと簡単。
でもこれを自分で作れと言われても無理。
2024.01.31 18:07 | pmlink.png 固定リンク | folder.png ソフト・HDL・Web
Arduinoで自作のフライトコントローラでトライコプター
自作のフライトコントローラによるQuadcopterの安定した動画を残ってなかったですが、探してみたらtricopterは自作のコントローラでそこそこ安定したものが動画で残ってたようです。

Arduinoで自作のフライトコントローラでクワッドコプター
10年くらい前に作った、自作のフライトコントローラが探したら出てきました。ArduinoのIDEでAtmega328PにUSBシリアル変換を使ってプログラムを書き込み。
受信機の信号を4チャンネル入れて、クワッド区コプター用にESCの出力を4チャンネル持ってて6DOFのIMUをI2Cで読みとって、あとはソフト頑張ってギリギリ浮くくらいまでには作りました。
数学的に弱いので移動平均と積算で簡易的なフィルタを作って姿勢を読み取って制御してたのでなかなか厳しかったです。



その時の動画はこちら。



これよりもう少し安定するところまでできたのですが、APMを購入したので乗せ換えてしまって動画は残ってませんでした。
今は、昨日試したMadgwickフィルタとか簡単に使えるライブライブラリが用意されてるのでもっと安定して飛ばせるかも。

BMP280 気圧センサ
ボッシュの高精度気圧センサを買ってみた。
以前のBMP085はあるけど、それより精度上がってるかな?と思って。
在庫を探したら、他にも気圧センサ持ってる。STマイクロエレクトロニクスのLPS331AP
これも結構精度良かった。

alt

早速ピンをハンダ付けして、Arduinoで動作確認。
I2Cで接続かと思って接続して動かそうとしても、not foundになる。
サンプルを読んだら、デジタルピンで接続するようになってる。

alt

ほか、参照したサイトは以下。

Arduinoで気圧センサー(GY-BMP280)を使い気圧を取得してみた‼
https://toccho.net/2022/05/10/gy-bmp280-arduino/

プロッタで表示。
データは少しスムージングしてる。
絶対値より相対値が欲しいので、相対値としては、0.02hPaくらい、感覚的には30㎝上下くらいの変化が取れてる。

Madgwickフィルタを使ってみよう その3
センサを探している間に、もうちょっと戻ってMadgwickフィルタを調べる。

そもそもMadgwickってなに?

Madgwick Filterを読んでみた
https://qiita.com/fumiya_sato/items/df28dff5ccc653183235
この中の記述
MadgwickフィルタのMadgwickは提唱した人の名前だそうだ。
原論文は、An efficient orientation filter for inertial and inertial/magnetic sensor arrays
”カルマンフィルタに比べて、高速で同程度以上の精度を実現したらしいフィルタです.”
”収束が遅いらしいとか・・・?”

ここまでわかって安心。
この記事の中で最初に出てくる、クォータニオンというのもいまいち理解できてないので検索。

クォータニオンとは何ぞや?:基礎線形代数講座
https://techblog.sega.jp/entry/2021/06/15/100000
この中の記述...
”クォータニオンは日本語では四元数(しげんすう)と訳されるもので、1843年にハミルトンにより発見された複素数を拡張した代数体系であり、3次元の回転の表現としても多くの利点を備えている。”

これで分かった気になって先に進む。

Sparkfunの6DOFセンサが読み出せたので、こちらの記事のMadgwickフィルタのサンプルに FreeSixIMU のライブラリとセンサの読み取り値を読み取った入れ込む。

MadgwickフィルタのライブラリをArduinoで使う
https://qiita.com/Ninagawa123/items/9520bad3c78ee40194fc

しかし、フィルタ動いてる気配がない。0付近の値がふらふらしてるだけ。
多分違うセンサを使ってるせい。そりゃそうだ。
数値の大きさとか、軸の並びとか、変化分の極性とか違う可能性はある。

なので、再度MPU-6050がどんな値を出してるのか、フィルタにどんな値を入れればいいのかを確認。

こちらのサイトをからMPU6050の値を確認。動画から、重力加速度を1として、角速度を度/秒くらいの値にしてやればいいようだ。傾きや変化の向きも確認した。

Arduinoから MPU6050の値を取得してみる
https://garchiving.com/how-to-use-mpu6050-in-arduino/

Sparkfunの6DOFは、重力加速度が220くらい、角速度が度/秒に直すと4倍くらいの値が出てたので、単純に値を割ってMadgwickフィルタに与える。

すると、Arduinoのシリアルポートからそれっぽい値が出だした。

次にProsessingを起動、サイトのコードをコピペ。動かしてもポートが読めないとのエラー。
ポートを調べて、0番に直す。

int available_serialport = 0;

すると画面上で平板が動き出した。でも回転してもヨー軸が回らない。

alt

値が上手く取り込めてないのかと、dataの読み出し部分を確認しても問題なし。
画面の表示部分を読んでみたら、そもそもサイトのコードでヨー軸を回転させてない。
なので、コードに1行追加。

rotateY(radians(data[2])); //YAW軸追加

alt

再起動すると、画面上で平板がセンサを動かした通りに動き出した。



やってみて分かったのは、初期状態を水平にしてから起動した方がいい。ひっくり返した状態から起動すると、正しい状態を得るのに時間がかかる。
レスポンスは早い。
これを使ってドローンを自作できるかも、と思った。

- CafeLog -