はじめに
前の記事でM5stack Core2をノーコードプログラミングで動かすUiFlowの開発環境を構築しました。
今回はこの環境を使いながらサーボモーターSG90を動作させてみます。
サーボモーターSG90
サーボモーターSG90は、こちらから購入しました。
このサーボモータは、180度まで回転(0度を起点に±90度)ができPWM制御50Hz(20ms)でデューティが0.5msから2.4msまでの値をとります。
0.5ms(デューティ2.5%)の場合、-90度、1.45ms(デューティ7.25%)、2.4ms(デューティ12%)となります。
動作速度は、0.12s/60度となっています。180度回転する場合、0.36秒なので、プログラムでは400msのウエイトを入れます。
入力電圧とPWM信号は4.8V~5.0Vとなっています。PWM信号はM5stack Core2のポート出力(3.3V)でも動作しましたが、仕様上は、レベルコンバーターを入れて5Vの信号ラインをつくりました。
UiFlowでSG90を制御するプログラムを書く
実験的にー90度、0度、90度の動作をしてみます。
M5stack Core2のタッチボタン3つをそれぞれの角度に割り当てて、タッチイベントが発生したらモーターを動かすプログラムを実行するようにします。
UiFlowの中に高度なブロックというものがあります。その中にPWM出力というブロックがあるので、こちらを使います。
Setupには、初期化処理を書きます。起動時は、0度の位置にもっていくようにプログラムしました。
PWM出力ピンは、PWM0として、PWM信号を出力するポートは26番としました。ピン番号を26で設定します。周波数は50Hzで0度のデューティ7.25%、使用タイマーをタイマー0とします。
PWM0の出力を再開するというブロックでPWM出力をします。
0.12s/60度を考慮すると最大でも400msあれば動作が完了するので、各処理PWM出力後、400ms待つことにします。
400msウエイト後、出力を停止します。
出力停止後、念のためポート出力をLOWにします。これは、動作確認で波形を見たところボタンBとボタンCを押した後の信号ラインがHIGHとなったままだったので、強制的にLOWとしました。
初期化処理ができたところで、ボタンA、ボタンB、ボタンC、それぞれのボタンが押されたときに実行される処理を書いていきます。
ボタンのイベントは、左側にあるM5stack Core2のモデルのボタン部分をダブルクリックすることでブロックが自動生成されます。
ここでは、Aをー90度、Bを0度、Cを90度としてそれぞれのボタンが押された時の処理を書いていきます。
動作処理は、初期化のものと同じで、初期化処理のデューティの部分を変えます。
ここでは、画面表示用にラベルを使って現在の角度を表示するようにしているのでその部分も各イベントにあった表示に変えています。
PWMのデューティは、Aのとき2.5%、Bのとき7.25%、Cのとき12%に設定します。
これによりモーターの角度が変わります。
プログラムの実行
プログラムを実行してみます。
初期化後は、0[deg]となっています。
他の位置の状態で真ん中(Bボタン)を押すと0度の位置に戻ります。
0度の時、20ms周期の波形が400ms続きます。波形のHIGHの期間はデューティを設定した1.5msになっています。波形の1chは、レベル変換前の3.3Vライン、2chはレベル変換後の5Vラインで、モーターは5Vライン側に接続しています。
次に左側のー90度のボタン(Aボタン)を押してみます。
モーターが90度回転します。波形を見ると設定したデューティ0.5msが確認できます。
最後に右側の90度のボタン(Cボタン)を押してみます。
ー90度の位置から180度回転します。
デューティは2.4msになっていることが確認できます。
まとめ
M5Stack core2でサーボモーターSG90を動作させてみました。
プログラムはUiFlowを使ったこともあり、簡単に動作確認ができました。
サーボモーターはロボット制御などいろいろと使えるので今回の実験をもとにこれからのモノづくりに組み込んでいきたいと思います。
コメント