ESP32 Упатство 17/55 - Контролирање на серво мотор користејќи ESP32 и потенциометар - ESP32 IoT комплет за учење
Во ова упатство, ќе научиме како да контролираме серво мотор користејќи ESP32 микроконтролер и потенциометар од ESP32 IoT Learning комплетот од SunFounder. До крајот на овој проект, ќе можете непречено да ја прилагодувате аголот на серво моторот користејќи го потенциометарот, овозможувајќи прецизна контрола. Ова е одличен начин да ги истражите можностите на ESP32 и како тој комуницира со моторите.

Како што навлегуваме во деталите, ќе ги покриеме потребните хардверски компоненти, инструкциите за поврзување и примерите на код за да сè функционира. За повизуелен приказ, задолжително погледнете го видеото поврзано со ова упатство (во видеото на 0:30).
Објаснување на хардверот
Примарните компоненти за овој проект вклучуваат ESP32 микроконтролер, серво мотор (SG90) и потенциометар. ESP32 е моќен микроконтролер кој нуди вградени Wi-Fi и Bluetooth, што го прави погоден за IoT проекти. Тој е способен да контролира различни уреди, вклучувајќи мотори, со висока прецизност.
SG90 серво моторот е широко користена компонента која може да ротира приближно 270 степени. Работи на пулсно-ширинска модулација (PWM) сигнал, каде аголот на ротација е определен од ширината на пулсот испратен до него. Потенциометарот дејствува како променлив отпорник, овозможувајќи ви да го прилагодите напонот испратен до ESP32, кој пак го контролира положбата на сервото.
Детали од податочната листа
| Производител | SG |
|---|---|
| Број на дел | SG90 |
| Логички/IO напон | 3.3 V (ESP32) |
| Напон на напојување | 5 V |
| Излезна струја (по канал) | 1.2 A |
| Врвна струја (по канал) | 2.5 A |
| Насоки за PWM фреквенција | 50 Hz |
| Прагови на влезна логика | 0.2 V (ниско), 2.5 V (високо) |
| Пад на напон / RDS(on) / заситување | 0.5 V |
| Термички граници | 85 °C макс. |
| Пакет | Пластичен |
| Белешки / варијанти | Достапен во различни типови на запченици |
- Осигурете се дека сервото е напојувано со соодветен напон (5V).
- Поврзете ја земјата на сервото со земјата на ESP32 за заедничка референца.
- Користете соодветни PWM сигнали за контрола на положбата на сервото.
- Бидете свесни за струјните барања на сервото; користете надворешно напојување ако е потребно.
- Проверете ги точните доделувања на пиновите при поврзување за да избегнете погрешни конфигурации.
Инструкции за поврзување

За да го поврзете серво моторот и потенциометарот со ESP32, започнете со поврзување на жицата за земја на сервото (обично црна или кафеава) на еден од пиновите за земја на ESP32. Потоа, поврзете ја жицата за напојување (обично црвена) на сервото на 5V пинот на ESP32. На крај, поврзете ја сигналната жица (обично портокалова или бела) од сервото на пин 25 на ESP32.
За потенциометарот, поврзете еден надворешен пин на 3.3V пинот на ESP32, а другиот надворешен пин на земја. Средниот пин на потенциометарот треба да биде поврзан на пин 34 на ESP32. Оваа поставка му овозможува на ESP32 да го чита променливиот напонски излез од потенциометарот, кој ќе се користи за контрола на положбата на сервото.
Примери на код и објаснување
Следниот фрагмент од код го иницијализира сервото и ги поставува параметрите за контрола на неговото движење:
#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); // Стандардно 50Hz серво
}
Во овој код, ја вклучуваме ESP32Servo библиотеката и создаваме инстанца на сервото со име myServo. Го дефинираме бројот на пинот за сервото и ги поставуваме минималните и максималните ширини на пулсот што одговараат на аголните граници на сервото.
Следно, да го погледнеме циклусот што континуирано го движи сервото напред-назад:
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);
}
}
Овој циклус постепено ја менува аголот од 0 до 180 степени и назад, користејќи ја функцијата map за да ја претвори аголот во соодветната ширина на пулсот за сервото. Секоја промена е проследена со кратка пауза за да му се овозможи на сервото непречено да ја достигне својата нова положба.
Демонстрација / Што да очекувате
Откако сè е поврзано и кодот е поставен, треба да видите како серво моторот се движи непречено од 0 до 180 степени и назад. Ако го прилагодите потенциометарот, сервото треба да ја одразува новата положба врз основа на напонот обезбеден од потенциометарот. Бидете внимателни со обратна поларизација при поврзување, бидејќи може да ги оштети вашите компоненти (во видеото на 3:45).
Временски ознаки на видеото
- 00:00 Почеток
- 1:56 Што е серво мотор
- 5:00 Страница со документација
- 6:33 Објаснето поврзување за серво
- 7:45 Избор на COMP порт за ESP32 во Arduino IDE
- 9:27 Објаснет Arduino код
- 14:31 Демонстрација на контрола на серво со ESP32
- 16:04 Напојување на серво со друго освен 5V
- 18:47 Контрола на серво без јамка
- 20:15 Контрола на серво со потенциометар
- 21:37 Објаснет Arduino код за серво со потенциометар
#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
Resources & references
-
DocumentationESP32 Tutorial 17/55- SunFunder Servo motor documentationdocs.sunfounder.com
Files📁
Datasheet (pdf)
-
DS5160 Servo motor datasheet
DS5160_datasheet.pdf0.33 MB
Other files
-
Download SG90 datasheet (PDF)
robojax-servo-sg90_datasheet.pdf