前回、ESP32でモーターを動かしてみたので、今度はサーボモーターに挑戦してみたいと思います。
ESP32とサーボモーターの接続
ESP32とサーボモーターを接続していきます。
準備するもの
今回使用するものは、以下になります。
- ESP32
- ブレッドボード
- ジャンパーワイヤー
- サーボモーター
サーボモーター
サーボモータは、秋月電子通商様から「マイクロサーボ SG92」を購入しました。
主な仕様は以下になります。
- PWMサイクル:20mS
- 制御角:±約90°(180°)
- 配線:茶=GND、赤=電源[+]、橙=制御信号 [JRタイプ]
- トルク:2.5kgf・cm
- 動作速度:0.1秒/60度
- 動作電圧:4.8V
- 温度範囲:0℃~55℃
- 外形寸法:23×12.2x27mm
- 重量:9g
SG-90というサーボモーターもありましたが、ちょっとだけトルクが弱く「1.8kgf・cm」になっているようです。その他の仕様は、ほぼ変わらないようでした。
角度が「-90度」~「90度」までの180度の動作になるので、回転させるといった用途では使用できません。
最初からサーボモーターに配線がされているので、接続を間違えないように注意してください。
接続
サーボモーターとESP32を以下のように接続します。
プログラム作成
サーボモーターの動作を確認するためのプログラムを作成していきます。
ライブラリの追加
サーボモーターを動作させるためのライブラリをインストールします。
Arduino IDEを起動して、メニューの「ツール」→「ライブラリを管理」を選択します。
表示した「ライブラリマネージャ」のテキストボックスに「ESP32Servo」を入力します。
検索して表示された「ESP32Servo」をインストールします。
プログラム
#include <ESP32Servo.h>
const int SERVO = 12; // サーボモーターピン
Servo servo; // サーボクラス
void setup() {
servo.attach(SERVO); // サーボモーターの制御ピン設定
}
void loop() {
int angle = 0;
servo.write(angle); // 0度にする
delay(2000);
for(int i = 1; i <= 18; i++){
angle = i * 10;
servo.write(angle); // 角度設定
delay(1000);
}
}
プログラムについて簡単に説明していきます。
1行目で、インストールしたライブラリのヘッダファイルをインクルードします。
5行目で、サーボクラスを使用する変数の宣言をします。
8行目で、サーボモーターを制御するピン番号を設定しています。
13、15行目の「servo.write()」で、サーボモーターが動作する角度を指定しています。
動作としては、まず角度を0度にしてから、1秒おきに10度ずつ角度を動かしていくようになっています。これの繰り返しになります。
動作確認
実際に動作を確認してみます。
動作としては、現在の位置から指定した角度ぶん動くのではなく、角度が0度の位置に動く、90度の位置に動く、といった決まった位置に動く感じになります。
最初は、今現在の位置から指定した角度ぶん動くのかと思っていたので、ちょっと焦りました。
この動きだと起動時に初期角度を指定すると、起動直後に予期せぬ動作をする可能性があるので注意が必要かもしれません。電源をいきなり切った場合の角度がわからないので、ちゃんと起動時の動作を考えておかないと失敗しそうです。
まとめ
ESP32でサーボモーターを動作させてみました。
といっても、ライブラリをインストールして角度指定しているだけなので、とても簡単でした。
サーボモーターの動作の仕方が、0度の位置に移動、90度の位置に移動など、決まった場所に動くので、ちょっとびっくりしました。
電源切断時に180度の位置だった場合、初期化で0度にすると電源投入時にいきなり動くといった、ちょっとびっくりすることになりそうです。
実際使用する場合には、気を付けなければいけないと思いました。
簡単に指定した角度に動作するので、参考にした本のプログラムでは、ラジコンの前輪のかじ取りに使用されていました。
前回モーターを動かすことを行ったので、今回のサーボモーターの制御とあわせて、ラジコン制作にチャレンジしてみたいと思います。
【参考図書】