注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Facebook上で、仲間と一緒にRaspberry Pi、Arduino、ESP32をさらに深く探求しましょう。

なぜ参加するのか?

  • 専門的なサポート:購入後の問題や技術的な課題をコミュニティやチームの助けを借りて解決。

  • 学びと共有:スキルを向上させるためのヒントやチュートリアルを交換。

  • 限定プレビュー:新製品発表や予告編に早期アクセス。

  • 特別割引:最新製品の特別割引を楽しむ。

  • フェスティブプロモーションとプレゼント:プレゼントやホリデープロモーションに参加。

👉 私たちと一緒に探索と創造を始める準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!

レッスン33: サーボモーター (SG90)

このレッスンでは、ESP32開発ボードを使用してサーボモーターを制御する方法を学びます。サーボモーターを0度から180度までスキャンし、戻すプロセスをカバーし、サーボの動きを管理する実践的な経験を提供します。このプロジェクトは、モーター制御とロボティクスにおけるパルス幅変調(PWM)の使用を理解したい人に最適で、汎用性の高いESP32ボードを活用します。

必要な部品

このプロジェクトには以下の部品が必要です。

すべての部品が揃ったキットを購入すると便利です。リンクはこちら:

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

以下のリンクから個別に購入することもできます。

Component Introduction

Purchase Link

ESP32 & Development Board

購入

サーボモーター (SG90)

購入

ブレッドボード

購入

配線

../_images/Lesson_33_Servo_esp32_bb.png

コード

コード解析

  1. ライブラリのインクルード

    サーボモーターの操作を管理するためにESP32Servoライブラリをインクルードします。

    #include <ESP32Servo.h>
    
  2. サーボとピンの定義

    サーボオブジェクトを作成し、サーボ制御用のピンを定義します。


    Servo myServo;
    const int servoPin = 25;
    
  3. パルス幅の制限を設定

    サーボの動作範囲を制限するために最小および最大パルス幅を定義します。


    const int minPulseWidth = 500; // 0.5 ms
    const int maxPulseWidth = 2500; // 2.5 ms
    
  4. セットアップ関数

    • サーボを定義されたピンに接続し、そのパルス幅の範囲を設定します。

    • サーボの標準PWM周波数である50Hzに設定します。


    void setup() {
      myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
      myServo.setPeriodHertz(50);
    }
    
  5. ループ関数

    • サーボの回転をループ内で制御し、0度から180度まで回転させ、再び0度に戻します。

    • writeMicroseconds() を使用して、パルス幅に基づいてサーボの位置を設定します。


    void loop() {
      // Rotate the servo from 0 to 180 degrees
      for (int angle = 0; angle <= 180; angle++) {
        int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
        myServo.writeMicroseconds(pulseWidth);
        delay(15);
      }
    
      // Rotate the servo from 180 to 0 degrees
      for (int angle = 180; angle >= 0; angle--) {
        int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
        myServo.writeMicroseconds(pulseWidth);
        delay(15);
      }
    }