M5StickCでサーボを4つ動かしてみた
- 2020/04/25
- 22:11
M5StickCでサーボを4つ動かしてみた
こんにちはRoboTakaoです。
今回はM5StickCで同時に4個サーボを動かしてみたいと思います。

今回のサーボはFEETECのFS90を秋月で1個360円で購入

FS90のスペック
・電源電圧:DC4.8~6V
・応答速度:0.12秒/60°(4.8V) 0.10秒/60°(6V)
・ピークストールトルク:1.3kg・cm(4.8V) 1.5kg・cm(6V)
・ストール電流:700mA(4.8V) 800mA(6V)
・使用温度範囲:-15~70℃
パルス幅は500〜2500μsecで-90〜90動きます。
M5StickCではG0, G26, G32, FG33でパルスを出力させます。
結線

動作確認
無事回りました。
スケッチ
今回はパルスはledcwriteで出力させました。
#include <M5StickC.h>
const uint8_t Srv0 = 0, Srv1 = 26, Srv2 = 32, Srv3 = 33; //GPIO No.
const uint8_t srv_CH0 = 0, srv_CH1 = 1, srv_CH2 = 2, srv_CH3 = 3; //チャンネル
const double PWM_Hz = 50; //PWM周波数
const uint8_t PWM_level = 16; //PWM 16bit(0~65535)
void setup() {
m5.begin();
pinMode(Srv0, OUTPUT);
pinMode(Srv1, OUTPUT);
pinMode(Srv2, OUTPUT);
pinMode(Srv3, OUTPUT);
//モータのPWMのチャンネル、周波数の設定
ledcSetup(srv_CH0, PWM_Hz, PWM_level);
ledcSetup(srv_CH1, PWM_Hz, PWM_level);
ledcSetup(srv_CH2, PWM_Hz, PWM_level);
ledcSetup(srv_CH3, PWM_Hz, PWM_level);
//モータのピンとチャンネルの設定
ledcAttachPin(Srv0, srv_CH0);
ledcAttachPin(Srv1, srv_CH1);
ledcAttachPin(Srv2, srv_CH2);
ledcAttachPin(Srv3, srv_CH3);
}
void loop() {
for (int i = 1640; i <= 8190; i=i+50) { //500μsec -> 2500μsec -90deg -> 90deg
ledcWrite(srv_CH0, i);
ledcWrite(srv_CH1, i);
ledcWrite(srv_CH2, i);
ledcWrite(srv_CH3, i);
delay(10);
}
for (int i = 8190; i > 1640; i=i-50) { //2500μsec -> 500μsec 90deg -> -90deg
ledcWrite(srv_CH0, i);
ledcWrite(srv_CH1, i);
ledcWrite(srv_CH2, i);
ledcWrite(srv_CH3, i);
delay(10);
}
}
スポンサードリンク