記事一覧

M5Atomでとりあえずサーボ動かしてみた

M5Atomでとりあえずサーボ動かしてみた



こんにちはRoboTakaoです。

前回、ゴールデンウィーク中に買ったM5Atom Matrixを動かしてみました
流行りロボット製作のためにはサーボ動かしたいのでサーボを動かすテストをしました。

M5atom10.jpg

M5AtomのI/O

M5atom03.jpeg

サーボの制御としては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);
}
}

コメント

コメントの投稿

非公開コメント

プロフィール

RoboTakao

Author:RoboTakao
みなさんご訪問ありがとうございます。ロボット作りたいけどお小遣いそんなにないし、簡単でローコストでロボットを作るための私のプロジェクトを紹介します。

ウェブサイトもありますのでそちらもよろしくお願いします。
http://robotakao.jp/