ESP32 チュートリアル 17/55 - ESP32 とポテンショメーターを使用したサーボモーターの制御 - ESP32 IoT 学習キット

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-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32_servo_lib
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
言語: C++
コピーしました!

リソースと参考文献

ファイル📁

データシート(pdf)

他のファイル