ESP32 チュートリアル 17/55 - ESP32 とポテンショメーターを使用したサーボモーターの制御 - ESP32 IoT 学習キット
このチュートリアルでは、ESP32マイクロコントローラーとSunFounderのESP32 IoT Learningキットからのポテンショメーターを使用して、サーボモーターを制御する方法を学びます。このプロジェクトの終わりまでには、ポテンショメーターを使用してサーボモーターの角度を滑らかに調整できるようになり、精密な制御が可能になります。これはESP32の機能とモーターとのインターフェースを探求するための素晴らしい方法です。
詳細に入っていくと、必要なハードウェアコンポーネント、配線手順、およびすべてを動作させるためのコード例をカバーします。より視覚的な表現のために、このチュートリアルに関連するビデオもぜひチェックしてください(ビデオの0:30で)。
ハードウェアの解説
このプロジェクトの主なコンポーネントには、ESP32マイクロコントローラー、サーボモーター(SG90)、およびポテンショメーターが含まれます。ESP32は、Wi-FiとBluetoothを内蔵した強力なマイクロコントローラーで、IoTプロジェクトに適しています。高精度でモーターを含むさまざまなデバイスを制御することができます。
SG90サーボモーターは、約270度回転できる広く使用されているコンポーネントです。これはパルス幅変調(PWM)信号で動作し、回転角は送信されるパルスの幅によって決まります。ポテンショメーターは可変抵抗器として機能し、ESP32に送られる電圧を調整でき、その結果サーボの位置が制御されます。
データシートの詳細
| 製造業者 |
SG |
| 部品番号 |
SG90 |
| ロジック/IO電圧 |
3.3 V (ESP32) |
| 供給電圧 |
5 V |
| 出力電流(チャネルごと) |
1.2 A |
| ピーク電流(チャネルあたり) |
2.5 A |
| PWM周波数ガイダンス |
50ヘルツ |
| 入力論理しきい値 |
0.2 V (低), 2.5 V (高) |
| 電圧降下 / RDS(on)/ 飽和状態 |
0.5 V |
| 熱的制限 |
85 °C 最大 |
| パッケージ |
プラスチック |
| ノート / バリアント |
異なるギアタイプで利用可能 |
- サーボに適切な電圧(5V)が供給されていることを確認してください。
- サーボのグラウンドをESP32のグラウンドに接続して、共通の基準を作ります。
- 適切なPWM信号を使用してサーボの位置を制御します。
- サーボの電流要件に注意してください。必要に応じて外部電源を使用してください。
- 配線時に正しいピン割り当てを確認して、誤設定を避けてください。
配線指示書
ESP32-17-Sevo_motor-wiringサーボモーターとポテンショメーターをESP32に接続するには、まずサーボのグラウンド線(通常は黒または茶色)をESP32のいずれかのグラウンドピンに接続します。次に、サーボの電源線(通常は赤)をESP32の5Vピンに接続します。最後に、サーボからの信号線(通常はオレンジまたは白)をピンに接続します。25ESP32上で。
ポテンショメーターの外側のピンの一つをESP32の3.3Vピンに接続し、もう一つの外側のピンをグラウンドに接続します。ポテンショメーターの中央のピンはピンに接続されるべきです。34ESP32上。この設定により、ESP32はポテンショメータからの変動する電圧出力を読み取ることができ、これがサーボの位置を制御するために使用されます。
コード例とウォークスルー
次のコードスニペットは、サーボを初期化し、その動きを制御するためのパラメータを設定します。
#include
Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms
void setup() {
myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
myServo.setPeriodHertz(50); // Standard 50Hz servo
}
このコードでは、私たちは含めていますESP32Servoライブラリをインポートし、名前を付けたサーボのインスタンスを作成します。myServoサーボのためのピン番号を定義し、サーボの角度制限に対応する最小および最大パルス幅を設定します。
ESP32サーボライブラリ
次に、サーボを前後に継続的に移動させるループを見てみましょう。
void loop() {
for (int angle = 0; angle <= 180; angle++) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
for (int angle = 180; angle >= 0; angle--) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
}
このループは、角度を0から180度まで徐々に変え、再び戻ります。mapサーボ用の角度を対応するパルス幅に変換する関数です。各変更の後には、サーボが新しい位置にスムーズに到達するための短い遅延があります。
デモンストレーション / 期待できること
すべてが配線され、コードがアップロードされると、サーボモーターが0度から180度の範囲でスムーズに動くのが見えるはずです。ポテンショメーターを調整すると、サーボはポテンショメーターから供給される電圧に基づいて新しい位置を反映するはずです。配線時には逆極性に注意してください。そうしないと、部品が破損する可能性があります(動画の3:45で)。
動画のタイムスタンプ
- 00:00 開始
- 1:56 サーボモーターとは何ですか
- 5:00 ドキュメントページ
- 6:33 サーボの配線について説明しました
- 7:45 Arduino IDEでESP32のCOMPポートを選択しています
- 9:27 Arduinoコードの解説
- 14:31 ESP32を使用したサーボ制御のデモンストレーション
- 5V以外のサーボに給電する 16:04
- ループなしでサーボを制御する 18:47
- 20:15 ポテンショメーターでサーボを制御する
- 21:37 ポットを用いたサーボ Arduino コードの説明
画像
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
言語: C++