おおたfabさんでは電子工作初心者勉強会を定期的に開催しています。
今回はESP32でサーボモーターを動かしてみます。サーボモーターは安価なSG90を使用しました。
材料
- ブレッドボード 6穴版
- ESP32-DEVKITC
- サーボモーター SG90
- ブレッドボード用ワイヤー
- 単3×2本電池ボックス
- USBケーブル
- Arduino IDE ESP32がインストールされたPC
サーボモーターの接続
ESP32-DEVKITCとサーボモーターの回路図は以下のようにしました。IO5の信号でモーターの回転角を制御します。
これをブレッドボードで配線した例です。
実際に配線するときは以下の点に注意します。
- サーボモーターは大きな電流が流れるので電源単3電池を使います。
- サーボモーターのケーブルの先にはピンソケットがついています。これはそのまま使うことにして、ブレッドボード用ワイヤーを刺しこんで接続します。
- サーボモーターの仕様書を確認して接続を間違えないようにしてください。
- 配線は色分けして間違えないようにします。
実物ではこのような配線にしました。実際に動かすまでは単三電池は片方抜いておきます。
プログラムの書き込み
サーボモーター用のライブラリが用意されているのでこれを使います。何種類かありますが、今回はESP32Servoを使います。
まずはライブラリの読み込みを行います。左側の縦に並んでいるアイコンの上から3番目がライブラリマネージャーです。これをクリックして検索窓に「esp32 servo」と入力してください。いくつかライブラリが表示されるので「ESP32Servo by Kevin Harrington,John K.Bennett」を探してください。もしインストールされていなかったら、インストールボタンを押してください。
次にプログラムを書いていきましょう。
#include <ESP32Servo.h>
#define SERVO_PIN 5
Servo myServo;
void setup() {
myServo.attach(SERVO_PIN);
}
void loop() {
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
}
うまくESP32に書き込めれば、サーボモーターが90°ごとに動くことがわかります。
myServo.writeの関数に渡している値を変更したり、myServo.writeの関数を増やしたり、減らしたりしてどのように動きが変わるかを確認するのも良いでしょう。
サーボモータをどのように制御しているのか
サーボモーターに接続している制御信号をオシロスコープで見てみます。
動画で見ると良くわかりますが、信号の幅が変わることでモーターの位置が変化することがわかります。これをPWM制御といいます。
サーボモーターのライブラリではこのような信号を出力して、サーボモーターを制御することができます。
まとめ
サーボモーターのライブラリを使うことで簡単なプログラムでサーボモーターを制御することができました。複数のサーボモーターを制御することでロボットのようなものも制御できるでしょう。