M5Atomでとりあえずサーボ動かしてみた
- 2020/05/10
- 19:33
M5Atomでとりあえずサーボ動かしてみた
こんにちはRoboTakaoです。
前回、ゴールデンウィーク中に買ったM5Atom Matrixを動かしてみましたが
流行りロボット製作のためにはサーボ動かしたいのでサーボを動かすテストをしました。

M5AtomのI/O

サーボの制御としてはledcwriteのPWMでパルスを出力します。
ledcwriteで使えそうなポートは以下
G19 デジタル入出力
G21 デジタル入出力
G22 デジタル入出力
G23 デジタル入出力
G25 デジタル入出力、アナログ入出力、ただし内部で6軸センサーのMPU6886のためにI2CのSCLで使用
G33 デジタル入出力、アナログ入力
Groveコネクタ
G26
G32
何も考えずにledcwriteでテストしたところ、G25以外はパルスを出せました。
G25は上にも書いたように、デフォルトではMPU6886のためにI2CのSCLで使用しているので
bool IMU6886Flag = false;
と記載して使用しないようにすればledcwriteが使えます。
これでMPU6886を使わなければ合計8個のサーボが使えそうです。
動作確認
とりあえず4個で動かしてみました(4個しか持ってないため)
あえてG25にサーボの信号ラインを接続
あとはM5Atomの5Vをサーボの電源ライン
M5AtomのGNDをサーボのGNDに接続
問題なく動きました。
めでたしめでたし
スケッチ
#include "M5Atom.h"
const uint8_t Srv0 = 25;//GPIO No.
const uint8_t srv_CH0 = 0; //チャンネル
const double PWM_Hz = 50; //PWM周波数
const uint8_t PWM_level = 16; //PWM 16bit(0~65535)
bool IMU6886Flag = false;
void setup() {
M5.begin();
pinMode(Srv0, OUTPUT);
//モータのPWMのチャンネル、周波数の設定
ledcSetup(srv_CH0, PWM_Hz, PWM_level);
//モータのピンとチャンネルの設定
ledcAttachPin(Srv0, srv_CH0);
}
void loop() {
for (int i = 1640; i <= 8190; i=i+50) { //500μsec -> 2500μsec -90deg -> 90deg
ledcWrite(srv_CH0, i);
delay(10);
}
for (int i = 8190; i > 1640; i=i-50) { //2500μsec -> 500μsec 90deg -> -90deg
ledcWrite(srv_CH0, i);
delay(10);
}
}
スポンサードリンク