BeetleC、なんとか操作できるようになった
サンプルコード、いろいろむずかしい
BeetleCにはサンプルプログラムが用意されていますが、かなり操作が難しいです。M5StickCがWifiアクセスポイントになって、そこに接続してコントローラーのWebUIで操作するものです。
さすがにWifiは電力消費が激しいだろう。Webでは遅延がありそう。サンプルコードは初めて見る謎のタイマーとかロックが使われていて不安。ということで、iPhoneをBLEコントローラーにできるというBlynkというアプリを使ってみました。
いろんな画面上にいろいろなパーツを自由に配置してWifiやBluetoothやWebHookなどでESP**やArduinoを操作するコントローラーをつくれます。
BLEならWifiより省電力でしょうから電池が小さなM5StickCに優しいでしょう。
Version1 : 左右スライダー
まず、素直にスライダーを2個配置。左右のタイヤそれぞれの出力を操作できるようにしました。Webよりは良いですが、パワー最大だと速すぎる。パワー小さめでゆっくり動かそうとしてもモーターが唸るが動かない。少しづつパワーを上げていくと急に動き出して速すぎて制御不能。
Version2 : 断続的に少しづつ動かす
こりゃ、ゴミ箱行きかな?とおもいましたが、「モーター 低速 制御」などでググると、http://www.kick4.net/bbs/c-board.cgi?cmd=ntr;tree=230;id= 「断続的に少しづつ動かす」という方法を発見しました。
数十HzのPWMで低速側が制御可能となりました。高速側はパワー上限を設けました。
Version3 : ジョイスティック
秒速数センチぐらいの細かい制御は見えてきたものの、左右のタイヤの出力を右手左手で別々にコントロールするのはどうにも慣れなくて難しいです。
そこで上下左右のアナログ入力ができるジョイスティックを使ってみました。上は進む、下は戻る、右は左回転多め、左は右回転多め。それっぽく動きましたが、、、。
でも、こんなコントローラ使ったことない!のでダメ。
Version4 : アクセル&ハンドル
アクセル&ハンドルのラジコンなら使えるかもしれない、ということで「上下スライダー」をアクセル、「左右スライダー」をハンドルとして、「アクセルとハンドルの値」から「左と右のタイヤ出力」を計算してあげることにしました。「右=アクセル+ハンドル、左=アクセル-ハンドル」の様な感じで適当に係数で調整します。
スライダーは手を離しても自動でゼロに戻らないので、ジョイスティックを2個配置して左手はアクセル、右手はハンドルにすると完璧です。
かなりラジコンです。操作できる感じがしてきました。
Version5 : マリオカート式
アクセルボタンを押しっぱなしにするとで徐々にアクセルが上がっていって、離すと徐々にゼロにもどる。
ハンドルも右を押し続けると徐々にハンドルがきられていって、離すと徐々にまっすぐに戻る。
中間値の入力はボタンを押したり離したりするそれこそ手動PWMの用な感じで押す時間と離している時間の長さの比で調整する。
というこれが最終的に一番良かったです。
Wiiリモコンのライブラリを作ったのでBluetoothに詳しくなれました。しかもBLEじゃなくてClassicの方。