Tutoriel ESP32 49/55 - Contrôlez un moteur à courant continu via Internet en utilisant Adafruit IoT | Kit ESP32 de SunFounder
Dans ce tutoriel, nous allons explorer comment contrôler un moteur CC sur Internet en utilisant l'ESP32 et le service MQTT d'Adafruit IO. La vitesse et la direction du moteur CC peuvent être manipulées à distance, permettant un contrôle efficace depuis n'importe où avec une connexion Internet. Ce projet démontre les capacités du microcontrôleur ESP32, qui dispose du Wi-Fi intégré, le rendant idéal pour les applications de l'Internet des Objets (IoT).
Nous mettrons en place un système permettant de démarrer, d'arrêter le moteur et d'ajuster sa vitesse via une interface web connectée à Adafruit IO. Les utilisateurs peuvent s'abonner à des sujets spécifiques pour le contrôle du moteur et ajuster les paramètres en conséquence. Pour mieux comprendre le processus, n'hésitez pas à consulter la vidéo accompagnant ce tutoriel (dans la vidéo à 00:00).
Matériel expliqué
Pour ce projet, nous utiliserons le microcontrôleur ESP32, qui est le cœur de notre système. L'ESP32 est capable de gérer les communications Wi-Fi, ce qui le rend parfait pour notre application IoT. Il se connecte à la plateforme Adafruit IO, nous permettant d'envoyer et de recevoir des messages via le protocole MQTT.
De plus, nous utiliserons le pilote de moteur L293D, qui est essentiel pour contrôler le moteur à courant continu. Le L293D peut piloter deux moteurs à courant continu et permet de contrôler à la fois la direction et la vitesse grâce à la modulation de largeur d'impulsion (PWM). Il agit essentiellement comme une interface entre l'ESP32 et le moteur, gérant le courant plus élevé nécessaire au moteur tout en isolant l'ESP32 de tout signal de contre-électromotrice potentiellement dommageable.
Détails de la fiche technique
| Fabricant | Texas Instruments |
|---|---|
| Numéro de pièce | L293D |
| Tension logique/IO | 4,5 - 36 V |
| Tension d'alimentation | 4,5 - 36 V |
| Courant de sortie (par canal) | 600 mA |
| Courant de pointe (par canal) | 1,2 A |
| Guide de fréquence PWM | 10 kHz (typ.) |
| Seuils de logique d'entrée | 0,8 V (haut), 2,0 V (bas) |
| Chute de tension / RDS(on)/ saturation | 1,5 V max |
| Limites thermiques | 150 °C |
| Colis | DIP-16 |
| Remarques / variantes | Pilote demi-H à courant élevé quadruple |
- Assurez un bon dissipation thermique pour un fonctionnement continu.
- Utilisez la PWM pour contrôler efficacement la vitesse du moteur.
- Respectez les limites de tension d'entrée pour éviter d'endommager l'appareil.
- Vérifiez les connexions à la terre appropriées entre tous les composants.
- Soyez prudent avec la contre-EMF ; utilisez des diodes si nécessaire.
- Vérifiez le câblage car la polarité peut affecter la direction du moteur.
- Testez avec une tension inférieure avant le fonctionnement complet.
- Surveillez la surchauffe lors d'une utilisation prolongée.
- Assurez-vous de dé-bouncer les interrupteurs mécaniques s'ils sont utilisés.
- Assurez-vous que l'ESP32 n'est pas surchargé par le courant du moteur.
Instructions de câblage
Commencez par connecter l'alimentation. Connectez la borne positive de votre source d'alimentation externe à la broche VCC du L293D (broche 8) et la masse à la broche GND (broche 4). Assurez-vous que l'ESP32 est alimenté séparément si nécessaire, généralement par une connexion micro USB.
Ensuite, connectez le moteur au L293D. Un terminal du moteur doit être connecté à la broche de sortie 3 (broche 2 du L293D) et l'autre terminal à la broche de sortie 6 (broche 7 du L293D). Pour les signaux de contrôle, connectez la broche 13 de l'ESP32 à la broche d'entrée 2 (broche 1 du L293D) et la broche 14 à la broche d'entrée 7 (broche 2 du L293D). La broche d'activation (broche 1) doit également être connectée à l'alimentation 5V pour activer le pilote. Enfin, assurez-vous que la masse de l'ESP32 est connectée à la masse du L293D pour une référence commune.
Exemples de code et guide pas à pas
Le code fourni initialise les bibliothèques nécessaires et configure le Wi-Fi et le client MQTT. Les identifiants clés incluentmotorSpeed,motorDirection, etmotorStart, qui gèrent le fonctionnement du moteur en fonction des commandes reçues d'Adafruit IO.
bool debug = false;
#define motor1A 13
#define motor2A 14
int motorSpeed = 0;
int motorDirection = 1;
int motorStart = 1;
Dans cet extrait, les broches du moteur sont définies avec des variables initiales pour contrôler la vitesse, la direction et l'état de marche/arrêt du moteur. La variablemotorSpeedsera ajusté en fonction des données d'Adafruit IO.
void setup() {
Serial.begin(115200);
WiFi.begin(WLAN_SSID, WLAN_PASS);
delay(2000);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
Dans la fonction de configuration, la communication série est initiée et l'ESP32 se connecte au réseau Wi-Fi spécifié. Cette connexion est cruciale pour permettre la communication MQTT.
void loop() {
MQTT_connect();
mqtt.processPackets(500);
runMotor();
}
Cette fonction de boucle établit la connexion MQTT et traite les paquets entrants pour contrôler le moteur en fonction des dernières commandes reçues. La fonctionrunMotor()est appelé à appliquer les réglages actuels au moteur.
Démonstration / À Quoi S'Attendre
Lorsque la configuration est terminée et que le code est téléchargé, vous devriez être en mesure de contrôler le moteur via le tableau de bord Adafruit IO. Vous pouvez ajuster la vitesse du moteur à l'aide d'un curseur et changer sa direction avec un interrupteur à bascule. Si tout est câblé correctement, le moteur réagira à ces commandes en temps réel, montrant la faible latence du système (dans la vidéo à 00:00).
Les problèmes courants incluent une direction de moteur inversée en raison d'un câblage incorrect, donc vérifiez à nouveau les connexions si le moteur ne se comporte pas comme prévu. De plus, assurez-vous que vos sujets MQTT sont correctement configurés dans Adafruit IO pour correspondre au code.
Horodatages vidéo
- 00:00 Début
- 2:21 Introduction au projet
- 4:20 Comment le moteur à courant continu est contrôlé
- 6:39 L293D Pilote de moteur
- 11:42 Qu'est-ce que MQTT ?
- 15:03 Configuration d'Adafruit IO
- 19:17 Explication du câblage
- 22:42 Code expliqué
- 35:28 Démonstration de projet
/*
* Ceci est un croquis Arduino pour ESP32 à moteur DC utilisant le service MQTT d'Adafruit.
* Regardez l'instruction vidéo https://youtu.be/OUgyPXNYg3g
* 📚⬇️ Page de téléchargement et de ressources https://robojax.com/RJT673
* Écrit par Ahamd Shamshiri
* le 18 février 2024
*
* Bibliothèque Adafruit MQTT exemple ESP32 Adafruit IO SSL/TLS
*
* /// référence : https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
bool debug = false;
#define motor1A 13
#define motor2A 14
// Paramètres PWM
const int freq = 500; // Fréquence PWM : 500 Hz
const int resolution = 8; // Résolution PWM : 8 bits
const int channelA = 0; // Canal PWM pour moteur1A : 0
const int channelB = 1; // Canal PWM pour moteur2A : 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"
/*
* Point d'accès WiFi *********************************/
*
* #define WLAN_SSID "Book"
* #define WLAN_PASS "88888888"
*
* ************************* Configuration Adafruit.io
*/
#define AIO_SERVER "io.adafruit.com"
// Utilisation du port 8883 pour MQTTS
#define AIO_SERVERPORT 8883
// Configuration du compte Adafruit IO
// (pour obtenir ces valeurs, visitez https://io.adafruit.com et cliquez sur Clé Active)
// #define AIO_USERNAME "VOTRE_NOM_UTILISATEUR_ADAFRUIT_IO"
// #define AIO_KEY "VOTRE_CLÉ_ADAFRUIT_IO"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_jHpm60SEsWUdU5x472FViZjWzsY9"
/*
* État global (vous n'avez pas besoin de changer cela !) ******************/
*
* // WiFiFlientSecure pour le support SSL/TLS
* WiFiClientSecure client;
*
* // Configuration de la classe client MQTT en passant le client WiFi, le serveur MQTT et les informations de connexion.
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // CA racine io.adafruit.com
* 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";
*
* /****************************** Flux
*/
// Configurer un flux appelé 'test' pour la publication et 'test2' pour l'abonnement.
// Les chemins MQTT pour AIO suivent la forme : <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");
Common Course Links
Common Course Files
Ressources et références
Aucune ressource pour le moment.
Fichiers📁
Aucun fichier disponible.