検索コード

ESP32チュートリアル 49/55 - Adafruit IoTを使用してインターネット経由でDCモーターを制御する | SunFounderのESP32キット

ESP32チュートリアル 49/55 - Adafruit IoTを使用してインターネット経由でDCモーターを制御する | SunFounderのESP32キット

このチュートリアルでは、ESP32とAdafruit IO MQTTサービスを使用して、インターネット経由でDCモーターを制御する方法を探索します。DCモーターの速度と方向はリモートで操作可能であり、インターネット接続があればどこからでも効率的に制御できます。このプロジェクトは、Wi-Fiを内蔵したESP32マイクロコントローラーの機能を示しており、モノのインターネット(IoT)アプリケーションに最適です。

esp32-49-DCモーター-mqtt-main

モーターを起動、停止し、Adafruit IOに接続されたウェブインターフェースを介して速度を調整できるシステムを導入します。ユーザーはモーター制御のための特定のトピックにサブスクリプションを行い、パラメータを適宜調整できます。このプロセスをより良く理解するために、このチュートリアルに付随するビデオをぜひご覧ください(ビデオの00:00にて)。

ハードウェアの解説

このプロジェクトでは、システムの中心となるESP32マイクロコントローラーを利用します。ESP32はWi-Fi通信を処理することができ、IoTアプリケーションに最適です。これはAdafruit IOプラットフォームに接続され、MQTTプロトコルを介してメッセージの送受信が可能になります。

さらに、DCモーターを制御するために不可欠なL293Dモータードライバーを使用します。L293Dは2つのDCモーターを駆動でき、パルス幅変調(PWM)を通じて方向と速度の両方を制御できます。基本的に、ESP32とモーターの間のインターフェースとして機能し、モーターが必要とする高い電流を管理する一方で、ESP32を潜在的に損傷を与えるバックEMF信号から絶縁します。

データシートの詳細

製造業者 テキサス・インスツルメンツ
部品番号 L293D
ロジック/入出力電圧 4.5 - 36 V
供給電圧 4.5 - 36 V
出力電流(チャネルごと) 600 mA
ピーク電流(チャンネルごと) 1.2 A
PWM周波数ガイダンス 10 kHz(典型)
入力論理しきい値 0.8 V (高), 2.0 V (低)
電圧降下 / RDS(オン)/飽和度 1.5 V 最大
熱的限界 150 °C
パッケージ DIP-16
ノート / バリアント 四倍高電流ハーフHドライバー

  • 連続運転のために適切なヒートシンクを確保してください。
  • PWMを使用してモーターの速度を効果的に制御します。
  • 入力電圧の制限に注意して、損傷を防いでください。
  • すべてのコンポーネント間で適切な接地接続が行われているか確認してください。
  • バックEMFに注意し、必要に応じてダイオードを使用してください。
  • 配線を再確認してください。極性がモーターの方向に影響を与える可能性があります。
  • フル運転の前に低電圧でテストしてください。
  • 長時間の使用中に過熱に注意してください。
  • 機械スイッチを使用する場合は、デバウンスすることを確認してください。
  • ESP32がモーターの電流で過負荷にならないようにしてください。

配線指示

ESP32-15_L293Dモーター回路図

電源を接続することから始めます。外部電源の正端子をL293DのVCCピン(ピン8)に、接地をGNDピン(ピン4)に接続します。必要に応じてESP32に別途電源を供給することを確認してください。通常はマイクロUSB接続を通じて行います。

次に、モーターをL293Dに接続します。モーターの一端は出力ピン3(L293Dのピン2)に接続し、もう一端は出力ピン6(L293Dのピン7)に接続する必要があります。制御信号のために、ESP32のピン13を入力ピン2(L293Dのピン1)に接続し、ピン14を入力ピン7(L293Dのピン2)に接続します。有効ピン(ピン1)はドライバーをアクティブにするために5V電源にも接続する必要があります。最後に、ESP32のグラウンドがL293Dのグラウンドに接続されていることを確認し、共通のリファレンスを作成します。

コード例とウォークスルー

提供されたコードは、必要なライブラリを初期化し、Wi-FiおよびMQTTクライアントを設定します。キー識別子には含まれますmotorSpeed,motorDirection, とmotorStartAdafruit IOから受信したコマンドに基づいてモーターの操作を管理します。

bool debug = false;
#define motor1A 13
#define motor2A 14
int motorSpeed = 0;
int motorDirection = 1;
int motorStart = 1;

この抜粋では、モーターピンが定義され、速度、方向、モーターの開始/停止状態を制御するための初期変数が示されています。変数motorSpeedAdafruit IOからの入力に基づいて調整されます。

void setup() {
  Serial.begin(115200);
  WiFi.begin(WLAN_SSID, WLAN_PASS);
  delay(2000);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}

セットアップ関数では、シリアル通信が初期化され、ESP32が指定されたWi-Fiネットワークに接続します。この接続はMQTT通信を有効にするために重要です。

void loop() {
  MQTT_connect();
  mqtt.processPackets(500);
  runMotor();
}

このループ関数はMQTT接続を確立し、最新のコマンドに基づいてモーターを制御するために受信したパケットを処理します。関数runMotor()モーターに現在の設定を適用するよう呼び出されます。

デモンストレーション / 期待すること

セッティングが完了し、コードがアップロードされると、Adafruit IO ダッシュボードを通じてモーターを制御できるようになります。スライダーを使ってモーターの速度を調整し、トグルスイッチで方向を変更できます。すべてが正しく配線されていれば、モーターはリアルタイムでこれらのコマンドに反応し、システムの低遅延を示します(動画の00:00で)。

一般的な問題には、配線が不正確なためにモーターの方向が逆になることが含まれますので、モーターが期待通りに動作しない場合は接続を再確認してください。さらに、コードに合わせてAdafruit IOでMQTTトピックが正しく設定されていることを確認してください。

動画のタイムスタンプ

  • 00:00 開始
  • 2:21 プロジェクトの紹介
  • 4:20 DCモーターの制御方法
  • 6:39 L293D モータードライバー
  • 11:42 MQTTとは何ですか?
  • 15:03 Adafruit IO セットアップ
  • 19:17 配線の説明
  • 22:42 コードの説明
  • 35:28 プロジェクトデモンストレーション

画像

ESP32-15_L293D_motor_schematic
ESP32-15_L293D_motor_schematic
esp32-49-DC-motor-mqtt-main
esp32-49-DC-motor-mqtt-main
851-ESP32 Tutorial 49/55- Arduino code using ESP32 to DC Motor using MQTT service of Adafruit
言語: C++
/*
 * これは、AdafruitのMQTTサービスを使用したESP32用のDCモーターのArduinoスケッチです。  
 * ビデオ指示を視聴するには https://youtu.be/OUgyPXNYg3g  
 * 📚⬇️ ダウンロードとリソースページ https://robojax.com/RJT673  
 * 執筆者: アハマド・シャンシリ  
 * 2024年2月18日  
 * 
 * Adafruit MQTTライブラリ ESP32 Adafruit IO SSL/TLSのサンプル  
 * 
 * /// 参考: https://www.electronicwings.com/esp32/esp32-mqtt-client
 */
bool debug = false;
#define motor1A 13
#define motor2A 14

 // PWM設定
const int freq = 500; // PWM 周波数: 500 Hz
const int resolution = 8; // PWM解像度:8ビット
const int channelA = 0; // モーター1AのPWMチャネル: 0
const int channelB = 1; // モーター2A用PWMチャネル: 1

char* dir[]={"CCW", "CW"};

int motorSpeed =0;
int motorDirection =1;
int motorStart = 1;
int dutyCycle =0;

#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/*
 * WiFiアクセスポイント *********************************/
 * 
 * #define WLAN_SSID "Book"
 * #define WLAN_PASS "88888888"
 * 
 *  /************************* Adafruit.ioセットアップ
 */

#define AIO_SERVER "io.adafruit.com"

 // MQTTSにポート8883を使用しています
#define AIO_SERVERPORT 8883

 // Adafruit IOアカウント設定
 // これらの値を取得するには、https://io.adafruit.com にアクセスし、アクティブキーをクリックしてください。
 // #define AIO_USERNAME "あなたのアダフルイト_IO_USERNAME"
 // #define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"

#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_jHpm60SEsWUdU5x472FViZjWzsY9"

/*
 * グローバルステート(これを変更する必要はありません!)******************/
 * 
 * // SSL/TLSサポート用のWiFiFlientSecure
 * WiFiClientSecure client;
 * 
 * // WiFiクライアントとMQTTサーバー、ログイン詳細を渡してMQTTクライアントクラスをセットアップします。
 * Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
 * 
 * // io.adafruit.com ルートCA
 * const char* adafruitio_root_ca = \
 *  "-----BEGIN CERTIFICATE-----\n"
 *  "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
 *  "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
 *  "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
 *  "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
 *  "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
 *  "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
 *  "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
 *  "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
 *  "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
 *  "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
 *  "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
 *  "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
 *  "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
 *  "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
 *  "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
 *  "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
 *  "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
 *  "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
 *  "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
 *  "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
 *  "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
 *  "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
 *  "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
 *  "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
 *  "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
 *  "-----END CERTIFICATE-----\n";
 * 
 * /****************************** フィード
 */

 // 'テスト'という発行用のフィードと、'テスト2'という購読用のフィードを設定します。
 // AIOのMQTTパスは次の形式に従います: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe MOTOR_SPEED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/motor.speed");
Adafruit_MQTT_Subscribe MOTOR_DIRECTION = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/motor.direction");
Adafruit_MQTT_Subscribe MOTOR_START = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/motor.start");


リソースと参考文献

まだリソースはありません。

ファイル📁

ファイルは利用できません。