Arduinoでサーボモーターを動かす
使ったもの
・LACC200610 動作電圧: 4.2V〜6V
サーボモーターの仕組み説明
(今回使ったものはSG90と仕様はほぼ同じらしいのでSG90の資料)
サーボモーターの角度はPWMで制御します。
PMW Period: パルス信号の周期(SG90の場合1秒間に50Hz)
この周期の中でHIGHにしている時間を見てサーボモータの角度を調整しています。
Duty Cycle: 周期的な現象において、"ある期間" に占める "その期間で現象が継続される期間" の割合(SG90の場合0.5~2.4ms)
つまり周期(20ms)の中でHIGHを0.5msにしているとサーボモーターの角度が-90度になり、2.4msにすると90度、そして真ん中にする場合は1.45msにすればいいということになります。
Arduino組み込み
これで仕様とどう制御すればいいのか分かったので、回路を組みコードを書いていこうと思います。
一応PWMの制御でもできるんですが、ArduinoにはServoライブラリというものがあるのでそれを使いました。
とりあえず動くようにしたコードは下記になります。
#include <Servo.h>
Servo myservo;
const int SV_PIN = 7;
void setup() {
myservo.attach(SV_PIN, 500, 2400);
}
void loop() {
myservo.write(0); // サーボモーターを0度の位置まで動かす
delay(4000);
myservo.write(90); // サーボモーターを90度の位置まで動かす
delay(4000);
myservo.write(180); // サーボモーターを180度の位置まで動かす
delay(4000);
}
myservo.attach(pin, min, max);
ここで出力するpin番号とパルス幅を割り当てます。
(↑で書いた通り、今回使用するサーボモーターのDuty Cycleは0.5ms~2.4msなので500と2400を設定)
ちなみにmin, maxを指定しない場合はそれぞれ、544, 2400がデフォルトになるようです。
ここの値は使用するパーツのデーターシートなどを参考すればOKです。
myservo.write();
0~180の値を入れれば、その角度の位置まで動かしてくれます。
実際に組んだ回路はこんな感じです。
最後にtinkercadというブラウザ上でArduinoのシュミレートができるサイトにサンプルを置いているので、よければこちらも参考にしていただければと思います。
参考資料
アルサーガパートナーズ株式会社のエンジニアによるテックブログです。11月14(木)20時〜 エンジニア向けセミナーを開催!詳細とご応募は👉️ arsaga.jp/news/pressrelease-cheer-up-project-november-20241114/
Discussion