Výukový program ESP32 17/55 - Ovládanie servomotora pomocou ESP32 a potenciometra - ESP32 IoT výuková súprava
V tomto návode sa naučíme, ako ovládať servomotor pomocou mikrokontroléra ESP32 a potenciometra zo súpravy ESP32 IoT Learning kit od SunFounder. Na konci tohto projektu budete schopní plynule nastavovať uhol servomotora pomocou potenciometra, čo umožní presné ovládanie. Je to skvelý spôsob, ako preskúmať možnosti ESP32 a to, ako komunikuje s motormi.

Keď sa ponoríme do detailov, prejdeme si potrebné hardvérové komponenty, pokyny na zapojenie a príklady kódu, aby všetko fungovalo. Pre vizuálnejšie znázornenie si určite pozrite video spojené s týmto návodom (vo videu o 0:30).
Vysvetlenie hardvéru
Hlavné komponenty pre tento projekt zahŕňajú mikrokontrolér ESP32, servomotor (SG90) a potenciometer. ESP32 je výkonný mikrokontrolér, ktorý ponúka vstavané Wi-Fi a Bluetooth, vďaka čomu je vhodný pre IoT projekty. Je schopný ovládať rôzne zariadenia, vrátane motorov, s vysokou presnosťou.
Servomotor SG90 je široko používaný komponent, ktorý sa môže otáčať približne o 270 stupňov. Funguje na princípe pulzno-šírkovej modulácie (PWM), kde je uhol otočenia určený šírkou pulzu, ktorý je mu zaslaný. Potenciometer funguje ako premenný odpor, ktorý vám umožňuje nastaviť napätie odoslané do ESP32, čo následne riadi polohu serva.
Detaily z datasheetu
| Výrobca | SG |
|---|---|
| Označenie dielu | SG90 |
| Logické/IO napätie | 3,3 V (ESP32) |
| Napájacie napätie | 5 V |
| Výstupný prúd (na kanál) | 1,2 A |
| Špičkový prúd (na kanál) | 2,5 A |
| Odporúčaná frekvencia PWM | 50 Hz |
| Vstupné logické prahy | 0,2 V (nízka), 2,5 V (vysoká) |
| Pokles napätia / RDS(on) / saturácia | 0,5 V |
| Tepelné limity | max. 85 °C |
| Puzdro | Plastové |
| Poznámky / varianty | Dostupné s rôznymi typmi prevodov |
- Uistite sa, že je servo napájané vhodným napätím (5V).
- Pripojte uzemnenie serva k uzemneniu ESP32 pre spoločnú referenciu.
- Na ovládanie polohy serva používajte vhodné PWM signály.
- Buďte si vedomí prúdových požiadaviek serva; v prípade potreby použite externý zdroj napájania.
- Pri zapájaní skontrolujte správne priradenie pinov, aby ste predišli chybnej konfigurácii.
Pokyny na zapojenie

Na zapojenie servomotora a potenciometra k ESP32 začnite pripojením uzemňovacieho vodiča serva (zvyčajne čierny alebo hnedý) k jednému z uzemňovacích pinov na ESP32. Ďalej pripojte napájací vodič serva (zvyčajne červený) na 5V pin na ESP32. Nakoniec pripojte signálny vodič serva (zvyčajne oranžový alebo biely) na pin 25 na ESP32.
Pre potenciometer pripojte jeden krajný pin na 3,3V pin na ESP32 a druhý krajný pin na uzemnenie. Stredný pin potenciometra by mal byť pripojený na pin 34 na ESP32. Toto zapojenie umožňuje ESP32 čítať meniace sa výstupné napätie z potenciometra, ktoré sa použije na ovládanie polohy serva.
Príklady kódu a vysvetlenie
Nasledujúci úryvok kódu inicializuje servo a nastaví parametre na riadenie jeho pohybu:
#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); // Štandardné 50Hz servo
}
V tomto kóde zahrnieme knižnicu ESP32Servo a vytvoríme inštanciu serva s názvom myServo. Definujeme číslo pinu pre servo a nastavíme minimálnu a maximálnu šírku pulzu, ktoré zodpovedajú limitom uhla serva.
Ďalej sa pozrime na slučku, ktorá nepretržite pohybuje servom tam a späť:
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);
}
}
Táto slučka postupne mení uhol z 0 na 180 stupňov a späť, pričom na prevod uhla na zodpovedajúcu šírku pulzu pre servo používa funkciu map. Po každej zmene nasleduje krátke oneskorenie, aby sa servo mohlo plynulo dostať do novej polohy.
Demonštrácia / Čo očakávať
Keď bude všetko zapojené a kód nahraný, mali by ste vidieť, ako sa servomotor plynulo pohybuje z 0 na 180 stupňov a späť. Ak nastavíte potenciometer, servo by malo odrážať novú polohu na základe napätia poskytnutého potenciometrom. Buďte opatrní pri zapájaní s obrátenou polaritou, pretože by to mohlo poškodiť vaše komponenty (vo videu o 3:45).
Časové značky videa
- 00:00 Začiatok
- 1:56 Čo je servomotor
- 5:00 Stránka dokumentácie
- 6:33 Zapojenie serva vysvetlené
- 7:45 Výber COMP portu pre ESP32 v Arduino IDE
- 9:27 Vysvetlenie kódu Arduino
- 14:31 Ukážka ovládania serva pomocou ESP32
- 16:04 Napájanie serva iným ako 5V
- 18:47 Ovládanie serva bez slučky
- 20:15 Ovládanie serva potenciometrom
- 21:37 Vysvetlenie kódu Arduino pre servo s potenciometrom
#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
Zdroje a referencie
-
DokumentáciaESP32 Tutorial 17/55 - SunFounder Servo motor documentationdocs.sunfounder.com
Súbory📁
Datasheet (pdf)
-
DS5160 Servo motor datasheet
DS5160_datasheet.pdf0.33 MB
Iné súbory
-
Download SG90 datasheet (PDF)
robojax-servo-sg90_datasheet.pdf