Tutoriel ESP32 17/55 - Contrôle du moteur servo à l'aide de l'ESP32 et du potentiomètre - Kit d'apprentissage IoT ESP32
Na boyekoli oyo, tokoyekola ndenge ya kokamba moteur ya servo na esaleli ya microcontrôleur ya ESP32 mpe potentiomètre longwa na kit ya koyekola ya IoT ya ESP32 ya SunFounder. Na suka ya projɛ oyo, okokoka kobongola ngonga ya moteur ya servo na ndenge ya pete na esaleli ya potentiomètre, mpo na kozwa kontrɔlɛ ya sikisiki. Oyo ezali nzela moko ya malamu mpo na koyekola makoki ya ESP32 mpe ndenge esalelaka na moteur.

Ntango tokotiya likebi na makambo ya minene, tokotonga biloko ya hardware oyo esengeli, mitindo ya kosangisa ba fils, mpe bandakisa ya code mpo na kosala ete nyonso esala malamu. Mpo na kotala malamu, tala video oyo ezali na boyekoli oyo (na video na 0:30).
Biloko ya Hardware
Biloko ya liboso mpo na projɛ oyo ezali microcontrôleur ya ESP32, moteur ya servo (SG90), mpe potentiomètre. ESP32 ezali microcontrôleur ya makasi oyo ezali na Wi-Fi mpe Bluetooth ya libanda, mpo na kosalela yango na ba projets ya IoT. Ezali na makoki ya kokamba biloko ndenge na ndenge, kati na yango ba moteur, na ndenge ya sikisiki.
Moteur ya servo SG90 ezali esaleli oyo eyebani mingi mpo na kobaluka pene na 270 degré. Esalaka na signal ya pulse-width modulation (PWM), epai ngonga ya kobaluka ezwamaka na monene ya pulse oyo etindamaka epai na yango. Potentiomètre ezali lokola résistance oyo ekoki kobongwana, mpo na kobongola voltage oyo etindamaka na ESP32, oyo yango mpe ekokamba esika ya servo.
Makambo ya Datasheet
| Mosali | SG |
|---|---|
| Numéro ya eteni | SG90 |
| Voltage ya logique/IO | 3.3 V (ESP32) |
| Voltage ya alimentation | 5 V |
| Courant ya libanda (na canal) | 1.2 A |
| Courant ya likolo (na canal) | 2.5 A |
| Motindo ya fréquence ya PWM | 50 Hz |
| Bokonzi ya logique ya libanda | 0.2 V (moké), 2.5 V (monene) |
| Kokita ya voltage / RDS(on) / saturation | 0.5 V |
| Bokonzi ya température | 85 °C max |
| Paquet | Plastique |
| Makambo / ba variantes | Ezali na ba types ya ba engrenages ndenge na ndenge |
- Kokanola ete servo ezali na voltage ya malamu (5V).
- Kosangisa fil ya terre ya servo na terre ya ESP32 mpo na référence commune.
- Salela ba signaux ya PWM ya malamu mpo na kokamba esika ya servo.
- Zala na likebi na makambo ya courant ya servo; salela source ya puissance ya libanda soki esengeli.
- Vérifier ba assignations ya ba pins ntango okosangisa ba fils mpo na kokima ba erreurs.
Mitindo ya kosangisa ba fils

Mpo na kosangisa moteur ya servo mpe potentiomètre na ESP32, banda na kosangisa fil ya terre ya servo (mbala mingi noire to marron) na moko ya ba pins ya terre na ESP32. Na nsima, sangisa fil ya puissance (mbala mingi motane) ya servo na pin ya 5V na ESP32. Na suka, sangisa fil ya signal (mbala mingi orange to blanc) longwa na servo na pin 25 na ESP32.
Mpo na potentiomètre, sangisa pin moko ya libanda na pin ya 3.3V na ESP32 mpe pin mosusu ya libanda na terre. Pin ya kati ya potentiomètre esengeli kosangisama na pin 34 na ESP32. Nzela oyo epesi ESP32 makoki ya kotanga voltage oyo ebongwanaka longwa na potentiomètre, oyo ekosalelama mpo na kokamba esika ya servo.
Bandakisa ya Code & Ndimbola
Code oyo elandi ebandisi servo mpe etyaka ba paramètres mpo na kokamba mobembo na yango:
#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
}
Na code oyo, tozali kosangisa bibliothèque ya ESP32Servo mpe tozali kosala exemple ya servo na kombo myServo. Tozali kopesa numéro ya pin mpo na servo mpe tozali koyika minPulseWidth mpe maxPulseWidth oyo ekokani na ba limites ya ngonga ya servo.
Na nsima, tala loop oyo ezali kotambwisa servo na liboso mpe na nsima:
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);
}
}
Loop oyo ezali kobongola ngonga mokemoke longwa na 0 kino na 180 degré mpe lisusu, na esaleli ya fonction map mpo na kobongola ngonga na pulse width oyo ekokani mpo na servo. Mbala na mbala, ezali na délai moké mpo na kopesa servo ntango ya kokoma na esika ya sika na ndenge ya pete.
Démonstration / Nini Okomona
Ntango nyonso esili kosangisama mpe code esili kotombolama, okomona moteur ya servo ezali kotambola na ndenge ya pete longwa na 0 kino na 180 degré mpe lisusu. Soki obongoli potentiomètre, servo esengeli kolakisa esika ya sika kolandana na voltage oyo potentiomètre epesi. Zala na likebi na polarité oyo ebongwanaki ntango okosangisa ba fils, mpo ete ekoki kosala ete biloko na yo ebeba (na video na 3:45).
Ba Timestamps ya Video
- 00:00 Ebandela
- 1:56 Nini moteur ya servo
- 5:00 Lokasa ya makasí
- 6:33 Ntína ya kotia singa ya servo
- 7:45 Kopona esika ya COMP mpo na ESP32 na Arduino IDE
- 9:27 Ntína ya kode ya Arduino
- 14:31 Ndimbola ya kotambwisa servo na kopesa ESP32
- 16:04 Kopesa nguya na servo longola 5V
- 18:47 Kotambwisa Servo na ngambo ya loop
- 20:15 Kotambwisa Servo na Potentiomètre
- 21:37 Servo na pot kode ya Arduino elobami
#include <ESP32Servo.h>
// Define the servo and the pin it is connected to
Servo myServo;
const int servoPin = 25;
// Define the minimum and maximum pulse widths for the servo
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms
void setup() {
// Attach the servo to the specified pin and set its pulse width range
myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
// Set the PWM frequency for the servo
myServo.setPeriodHertz(50); // Standard 50Hz servo
}
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);
}
}
Common Course Links
Common Course Files
Mokili na bisika
-
DokumentasiESP32 Tutorial 17/55- SunFunder Servo motor documentationdocs.sunfounder.com
Fichiers📁
Fiche technique (pdf)
-
DS5160 Servo motor datasheet
DS5160_datasheet.pdf0.33 MB
Mabala a mangwe
-
Download SG90 datasheet (PDF)
robojax-servo-sg90_datasheet.pdf