2022年8月30日火曜日

BALA-C(バランスカー 倒立振子)をDabble・Blynk IoTでコントロール

前回の「100円Shopの時計を使ったマーブルマシン」を考案された
n_shinichiさんのblogには、色々と興味深い作品があります。
以前から作って見たかった倒立振子・・・
さらに以前からやってみたかった、スマホでのコントロール。
真似をしてやってみたくなり、挑戦してみました。

こちらは立っている様子とDabbleでコントロールの様子です。

こちらはBlynk IoTでコントロールの様子です。

走らせるときはフエルトを下に敷いています。
板の上では滑りやすく、こけやすいです。

最初にn_shinichiさんと同じように、
M5stickc plusと360°連続回転サーボFS90Rを購入したものの、
にっちもさっちも行かず、
このキットを買ってみることにしました。
ところがこのキットは製造中止のため、
なかなか販売されてるお店が見つからず、
なんとか1店舗だけ在庫があり、購入することが出来ました。

キットの中にはM5stickc等、必要な全ての部品が入っています。
組み立ても10分程度で、
こちらのプログラムをM5stickcに書き込むだけで動くようになりました。

ただ、プログラムの中を見てもさっぱりわからず・・・(^^;
M5stickcは
3軸加速度センサと3軸ジャイロセンサの6軸センサが搭載されていて、
加速度(ax/ay/az)・角速度(角速度gx/gy/gz)の
値を読み取って、PID制御されているそうですが、
全くわかりません(-"-;

それでも、とにかくスマホでコントロールできるようにしたい!
と思って、プログラムのわかりやすいところだけ書き換えてみました。
(M5stickcにはESP32も搭載されていてWi-FiBluetoothが使えます。)

私がやったのは、
「Dabble」・「Blynk IoT」というアプリを使って
スマホとM5stickcを接続し、
スマホからコントロールできるようにした。
(「Dabble」はBluetooth接続・「Blynk IoT」はWifi接続)

顔が出てくるようにした。
だけでで、お恥ずかしい限りです(^^;

参考にさせて頂いたサイトは

顔の描画はn_shinichiさんのスケッチを参考にしながら、
四角い顔をま~るい顔にしてみました。




「Dabble」について
DabbleはBluetooth接続のみでWiFi接続は出来ないようです。
スマホの画面もいくつかパターンがあって、
自分ではカスタマイズ出来ないようです。
私が使ったのはこのjoystickの画面です。

使い方は、上で記載した、n_shinichiさんの
これを見ればわかりやすいです。

<Blynk IoTについて>
Blynkは最近、新バ-ジョンになったらしく、Wi-Fi接続しかできません。
当初、このアプリの使い方が全くわからず、
こちらのマニュアルを見ながら進めていきました。

マニュアルにもあるように
まずパソコンを使って「Quickstart」から始めるのが良さそうです。

Which hardware are you using?
のところは私はM5stickcなので「ESP32」を選択
arduinoを選択



WiFi Network Name(SSID)・Passwordを入力
ここはモバイルルーターやスマホテザリングでもうまくいきました。
2か所入力してから、同じ画面の上の方のCopy code・Download As Fileで
プログラムをarduinoに入れて、デバイス(今回私の場合はM5stick)に書き込みます。
書き込んでから右下のNextを押すと

この画面が出てきて、OKならすぐに繋がります。

この後は
Datastreamsでデータの型を設定(スマホからでも出来ます)

画面の配置を設定
(スマホのDeveloper Mode~template選択~右上の+をクリック)

最後に、配置したパーツにデータを紐付けます。

こちらが私が配置した画面です。

電圧・傾きのところはM5Stickcのデータをスマホへ送り
逆にスマホのjoystickのx,yのデータはM5Stickcへ送ってます。

実はM5stickc~Blynk IoTの接続がうまくいって数日後、
パソコントラブルが起きて、
数日かけて作ったarduinoのデータが消えてしまいました。
また1から・・・と思ってやってみましたが
プログラムをarduinoに書き込んでもうまくいかない・・・
調べてみると Blynk.begin(auth, ssid, pass);  で止まってしまってるようです。
(書き込みでエラーは出ませんでした。)
BlynkのIDを変えてもダメで、
数日後、別のネットワーク(スマホ テザリング)
で繋いだところうまくいくようになって、ほっとしました(^^♪
最初に設定していたssid, passがうまく通ってなかったのでしょうね。
登録していないssid・passやauthを使っても、途中で止まるのかしらね・・・

プログラムにはこの6行が必要みたいです。
(QuickstartでDLしたファイルに書かれているものと同じものでOKです。)
#define BLYNK_TEMPLATE_ID           "********"
#define BLYNK_DEVICE_NAME           "********"
#define BLYNK_AUTH_TOKEN            "****************"

char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "********";
char pass[] = "********";


16 件のコメント:

  1. スマホでコントロールですか。ますます、進化(レベルアップ)していきますね。
    毎回、驚かされます。

    返信削除
    返信
    1. Hyodoさん、見て下さってありがとうございます♪
      以前から一度やってみたかったんですよね~
      なんとかうまくコントロール出来て嬉しいですヽ(^-^)/

      削除
    2. すごいじゃないですか!
      ウインク、マスターしましたね♪

      Balaでパラメータの作用の感覚をいったん掴んでから
      サーボホーンタイヤなどはやってみるのがいいかもですね。

      お試しされた通り、Blynkの方が機能は多いので
      パラメータをリモートで変更できるようにして
      各々少しづつ変化させて様子みるのいいかもです。

      パラメータ変更ではブログ「倒立振子のパラメータ調整」のとこで
      先日書いた熊谷先生のサイトがわかりやすいですよ。

      削除
    3. 早速見て下さって、ありがとうございます♪
      shinichiさんのおかげで、なんとかここまで来れました。
      熊谷先生のサイト、拝見しました。
      なんとなくわかるところと、さっぱりわからないところと
      混在していますが、少しでも理解できるように、
      何度か読み直してみます。

      削除
  2. そう言えば...
    FS90Rとサーボホーンタイヤ版、 倒立うまくいかない・・・の件、
    サーボの配線は短く切ってぼくのみたいな感じで作りました?
    長いままで適当に本体に止めてると、
    もうパラメータがあわなくて立たなくなります。。。

    返信削除
  3. 小さくなるとどんどんパラメータの感度は高くなるので
    ちょっとぼくが作ったのと重心点が違うと立たなくなります。
    Balaと比べるとタイヤ径、ドライバの関係で速度は1/5くらいしか
    出ないので初期の角度垂直設定がずれてると走って
    バランス取り戻す…が難しいんです。

    返信削除
    返信
    1. shinichiさん、ありがとうございます。実は大変申し訳ない話なのですが、
      kaimanを走らせている途中でパソコンが暴走しパソコンを強制終了しました。
      でもまさかこれが原因と思わず、再度走らせたのですがやはり同じ現象・・・
      開いてたWindowのサイズが勝手に縮小され、並べられていくんです。すごく早いスピードで・・・
      さらにarduinoのファイルもいくつか無くなっていて・・・
      なんか遠隔操作されてるようで、怖くなってkalmanへの挑戦は諦めることにしました。
      それで、M5StickCPlusにBALA-Cのプログラムを入れようとしたのですが、
      if (M5.Imu.imuType=M5.Imu.IMU_MPU6886) で止まってしまいます。
      ネットで調べて#define MPU6886 IMUに変えたり、M5.MPU6886をM5.IMUに置換したりもしたのですが、
      やはりエラーが出てしまい、諦めることにしました。
      倒立振子への挑戦は私にはハードルが高すぎるので
      もう少しPID制御について学習してからにしようと思います。

      削除
  4. 確かに...なんか 怖いですね。
    Arduinoでウィルスなんて話はきいたことないし
    ぼくも使ってるのライブラリそのものなのなのでライブラリ起因ではないと思います。
    智恵さん、Windows10・・・ですよね?
      それならよほど標準のセキュリティをやってればまず問題ないと思います。
      PCのウィルスチェックをしてみた方がいいかもです。
    再度 試された時はネット接続は切って試しました?

    IMU・・・
    M5stickC の IMUは SH200Q で、
    M5stickC PlusのIMUは MPU6886 です。
    ICが違うので BalaのVerのライブラリではPlusは違って動かないんです。

    返信削除
  5. Kalmanフィルタは無理に使う必要はないです。
    理屈では相補フィルタよりもいい特性が出せる?っぽいですが
    実際にはフツーに使ってる分には差はほとんどわからないです。

    ぼくは一旦、型ができたので惰性で使ってる...感じです。
    CPUの負荷は相補フィルタより高いので
    処理負荷減らさないといけなくなったら
    相補フィルタにするかなってとこです。




    返信削除
  6. 念のためぼくの方ではWindowsDefenderで
     Kalmanフィルタライブラリと圧縮に使ってる7zipも
     ウィルスチェックしてみましたが異常なしです。

    返信削除
  7. 先の、kaimanを走らせている途中でパソコンが暴走・・・
    これってどういう状況です? ちょっと気になります。。。
    M5stickCでKalman使って動かそうとしてる時、PCと繋げてないですよね?
    Arduinoでコンパイルしてる時...? でもこの時は実行してないですしね...

    返信削除
    返信
    1. 色々と心配して下さって、ありがとうございます。
      私もWindowsDefenderでチェックしたのですが、問題ありませんでした。
      ひょっとすると熱暴走なのかなぁ~?と思ったりもするのですが、
      それにしては派手な動きだったもので、気になりました。
      再度やったときもネットは切っていないです(^^;
      その後、もう1台のパソコンを立ち上げ、
      ネットはなるべくそちらで繋ぐようにして、
      被害のあった方は様子を見ているのですが、大丈夫そうです。
      M5stickCでKalman使って動かそうとしてる時、PCと繋げてました。
      暴走が起きたのは2回ともコンパイルのときです。
      でも1回目(被害が起きる前)に書き込んだ時はコンパイル時も問題なく書き込めました。
      (確かうまくいった直後にshinichiさんのblogにその旨書いたと思います。)
      CPUの負荷が高いとのことですし、恐らく熱暴走だったと思います。

      削除
  8. そうですか。。。気になりますね。
    でも、コンパイルで暴走ってのも聞かないですね。。。
    タスクマネージャでみてるとCPU100%でメモリーも100%
    近くなったりしてますか・・・
    HDなどストレージには十分な空きはあります?

    返信削除
    返信
    1. コンパイルで暴走はないですか・・・
      トラブルが起きたときは慌てていたので、
      タスクマネジャを見る余裕はなく、すぐに強制終了しました。
      Cドライブは約50%の空き、ノートPCですがメモリも32Gにしています。

      削除
  9. Arduinoコンパイル時にバックグラウンドで
    他のソフトは動かしてはなかったんですか...?
    ウインドウが小さく整理され・・Windowsの機能にありますよね
    それが意図しないとこで動いた... 感じなんでしょうかね。

    それにしても
    メモリも32G!? すごいたっぷりですね。 
     ぼくは増やして16ですもん。

    でもって、朝、 早い・・・

    返信削除
    返信
    1. 他のソフトは動かしてなかったですね。
      ブラウザとoutlook、メモ帳、画像ソフト・・・など開いてましたが、
      処理中ではなかったと思います。
      ウィンドウが小さく整理されるのは、タスクビューですね。
      あれは一斉に小さく整理されますが、
      先日のトラブルでは1つずつ小さくなって、並べられた感じでした。
      かなり速いスピードではありましたが・・・
      1回目になったときは心臓がドキドキしたのを覚えてます(^^;
      今のところ、そのパソコンも正常に動いてるようなので
      もう少し様子を見てみます。

      削除