M5Atomで二足ロボットを作るという試みが途中になっていました。本日、サーボモータを動かすプログラムを試してみました。過去のブログ「二足歩行ロボットに挑戦してみませんか?」「プログラムの移行と動作確認」も合わせてご覧ください。
資料は、こちら → M5Atomその3
p.1 左下図のように、M 5Atomにサーボモーターを接続します。左上の写真のようになります。サーボモーターの動きを見るため、赤い矢印を貼っておきます。p.2〜4の順番で進めていきます。「int angZero[]」の中の4つの数字が、各サーボモーターの角度なので、90から変更してみたところ、赤い矢印が異なる向きに変化することを確認できました。
p.2 今回の試行の手順を示します。上述のブログも合わせてご覧ください。先ず、①Arduino IDEを起動後、コードを入力します。②ツール→ ボード→ M5Stack Arduino→ M5Stack ATOMをクリックします。③M5AtomとパソコンとUSB Type Cで接続し、④ツール→ シリアルポール→ /dev/cu.usbserial-XXXXを選びます。⑤「レ」をクリックして、コンパイル開始します。⑥「→」をクリックして→ コンパイル→ 書き込み開始、⑦書き込み終了と同時に、サーボが動作します。
p.3、4 今回のコードについて説明しておきます。 PWM(Pulse Width Modulation)制御とは、高速スイッチングにより電力を制御する方式のことです。 スイッチのONとOFFの繰り返しを行い、出力される電力を制御します。 一定電圧の入力から、パルス列のONとOFFの一定周期を作り、 ON時間幅を変化させます。 早い周期でスイッチングを行うことで、ONのパルス幅に比例した任意の電圧が得られます。 今回のサーボモーターは、50Hzの間隔つまり20msec毎にパルス信号を与えると指示した角度に動きます。角度が0〜180度の間で分解能が0~65535で角度を変えることができます。つまり180度割る65535の角度で回すことができます。 0度と180度の状態にするためのパルス波を図示しています。いずれの角度でも20msec毎にパルスを発生させますが、パルス幅が異なります。右上に計算式をまとめておきます。0度と180度のパルス幅設定値を計算して、コード内に書き込みます。 コード下3行目にある「map」関数は、各設定値を16ビットの数値に変換して変数に入れています。その下にある「ledcWrite」は、パルス発生のコマンド(本来は、PWMで段階的に明るさを変えるコマンド)を用いています。M5Atomには、標準ライブラリとしてサーボの制御がないために、このコマンドを用いているようです。今回のコードをワードに書いておきます。 → s3_4axis_Zero.ino
サーボモーターが動作する様子を動画にしてみました。