ESP32 Tutorijal 17/55 - Upravljanje servo motorom koristeći ESP32 i potenciometar -ESP32 IoT komplet za učenje
U ovom tutorijalu naučit ćemo kako upravljati servo motorom koristeći ESP32 mikrokontroler i potenciometar iz ESP32 IoT Learning kita kompanije SunFounder. Do kraja ovog projekta moći ćete glatko podešavati ugao servo motora pomoću potenciometra, što omogućava preciznu kontrolu. Ovo je odličan način da istražite mogućnosti ESP32-a i kako on komunicira s motorima.

Kako ulazimo u detalje, pokrit ćemo potrebne hardverske komponente, upute za povezivanje i primjere koda kako bismo sve pokrenuli. Za vizualniji prikaz, svakako pogledajte video povezan s ovim tutorijalom (u videu na 0:30).
Objašnjenje hardvera
Primarne komponente za ovaj projekt uključuju ESP32 mikrokontroler, servo motor (SG90) i potenciometar. ESP32 je moćan mikrokontroler koji nudi ugrađeni Wi-Fi i Bluetooth, što ga čini pogodnim za IoT projekte. Sposoban je upravljati različitim uređajima, uključujući motore, s visokom preciznošću.
SG90 servo motor je široko korištena komponenta koja se može rotirati približno 270 stupnjeva. Radi na principu pulsno-širinske modulacije (PWM) signala, gdje je ugao rotacije određen širinom pulsa koji mu se šalje. Potenciometar djeluje kao promjenjivi otpornik, omogućavajući vam podešavanje napona koji se šalje na ESP32, što zauzvrat kontrolira poziciju serva.
Detalji iz podatkovne tablice
| Proizvođač | SG |
|---|---|
| Broj dijela | SG90 |
| Logički/IO napon | 3.3 V (ESP32) |
| Napon napajanja | 5 V |
| Izlazna struja (po kanalu) | 1.2 A |
| Vršna struja (po kanalu) | 2.5 A |
| Smjernice za PWM frekvenciju | 50 Hz |
| Ulazni logički pragovi | 0.2 V (nisko), 2.5 V (visoko) |
| Pad napona / RDS(on) / zasićenje | 0.5 V |
| Toplinska ograničenja | 85 °C maks |
| Paket | Plastični |
| Napomene / varijante | Dostupan u različitim tipovima zupčanika |
- Osigurajte da servo bude napajan odgovarajućim naponom (5V).
- Spojite uzemljenje serva na uzemljenje ESP32-a radi zajedničke reference.
- Koristite odgovarajuće PWM signale za kontrolu pozicije serva.
- Budite svjesni strujnih zahtjeva serva; koristite vanjsko napajanje ako je potrebno.
- Provjerite ispravne dodjele pinova prilikom povezivanja kako biste izbjegli pogrešne konfiguracije.
Upute za povezivanje

Da biste povezali servo motor i potenciometar na ESP32, počnite spajanjem žice za uzemljenje serva (obično crne ili smeđe) na jedan od pinova za uzemljenje na ESP32-u. Zatim spojite žicu za napajanje (obično crvenu) serva na 5V pin na ESP32-u. Na kraju, spojite signalnu žicu (obično narančastu ili bijelu) sa serva na pin 25 na ESP32-u.
Za potenciometar, spojite jedan vanjski pin na 3.3V pin na ESP32-u, a drugi vanjski pin na uzemljenje. Srednji pin potenciometra treba spojiti na pin 34 na ESP32-u. Ova postavka omogućava ESP32-u da čita promjenjivi naponski izlaz s potenciometra, koji će se koristiti za kontrolu pozicije serva.
Primjeri koda i objašnjenje
Sljedeći isječak koda inicijalizira servo i postavlja parametre za kontrolu njegovog kretanja:
#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); // Standardni 50Hz servo
}
U ovom kodu uključujemo ESP32Servo biblioteku i kreiramo instancu serva s imenom myServo. Definiramo broj pina za servo i postavljamo minimalne i maksimalne širine pulsa koje odgovaraju granicama ugla serva.
Zatim, pogledajmo petlju koja kontinuirano pomiče servo naprijed-nazad:
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);
}
}
Ova petlja postupno mijenja ugao od 0 do 180 stupnjeva i natrag, koristeći funkciju map za pretvaranje ugla u odgovarajuću širinu pulsa za servo. Svaka promjena praćena je kratkim kašnjenjem kako bi servo glatko stigao do svoje nove pozicije.
Demonstracija / Šta očekivati
Kada je sve povezano i kod je učitan, trebali biste vidjeti servo motor kako se glatko kreće od 0 do 180 stupnjeva i natrag. Ako podesite potenciometar, servo bi trebao odražavati novu poziciju na osnovu napona koji potenciometar pruža. Budite oprezni s obrnutim polaritetom prilikom povezivanja, jer može oštetiti vaše komponente (u videu na 3:45).
Vremenske oznake videa
- 00:00 Početak
- 1:56 Šta je servo motor
- 5:00 Stranica dokumentacije
- 6:33 Objašnjeno povezivanje serva
- 7:45 Odabir COMP porta za ESP32 u Arduino IDE
- 9:27 Objašnjen Arduino kod
- 14:31 Demonstracija upravljanja servom pomoću ESP32
- 16:04 Napajanje serva drugačije od 5V
- 18:47 Upravljanje servom bez petlje
- 20:15 Upravljanje servom pomoću potenciometra
- 21:37 Objašnjen Arduino kod za 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
Resursi i reference
-
DokumentacijaESP32 Tutorial 17/55 - SunFounder Servo motor documentationdocs.sunfounder.com
Datoteke📁
Tehnički list (pdf)
-
DS5160 Servo motor datasheet
DS5160_datasheet.pdf0.33 MB
Ostale datoteke
-
Download SG90 datasheet (PDF)
robojax-servo-sg90_datasheet.pdf