ESP32 оқулығы 17/55 - ESP32 және потенциометр көмегімен серво қозғалтқышты басқару - ESP32 IoT оқу жинағы
Бұл оқулықта біз SunFounder компаниясының ESP32 IoT Learning жинағындағы ESP32 микроконтроллері мен потенциометрді пайдаланып сервоқозғалтқышты қалай басқаруға болатынын үйренеміз. Осы жобаның соңында сіз потенциометрді пайдаланып сервоқозғалтқыштың бұрышын тегіс реттей аласыз, бұл дәл басқаруға мүмкіндік береді. Бұл ESP32 мүмкіндіктерін және оның қозғалтқыштармен қалай жұмыс істейтінін зерттеудің тамаша тәсілі.

Егжей-тегжейге үңілгенде, біз қажетті аппараттық құрамдастарды, сымдарды жалғау нұсқауларын және барлығын іске қосуға арналған код мысалдарын қарастырамыз. Көбірек көрнекі көрініс алу үшін осы оқулыққа қатысты бейнені міндетті түрде қараңыз (бейнеде 0:30).
Аппараттық құрал түсіндірмесі
Бұл жобаның негізгі құрамдастарына ESP32 микроконтроллері, сервоқозғалтқыш (SG90) және потенциометр кіреді. ESP32 - кірістірілген Wi-Fi және Bluetooth ұсынатын қуатты микроконтроллер, бұл оны IoT жобаларына қолайлы етеді. Ол қозғалтқыштарды қоса алғанда, әртүрлі құрылғыларды жоғары дәлдікпен басқара алады.
SG90 сервоқозғалтқышы шамамен 270 градусқа айнала алатын кеңінен қолданылатын құрамдас болып табылады. Ол импульс енінің модуляциясы (PWM) сигналымен жұмыс істейді, мұнда айналу бұрышы оған жіберілген импульстің енімен анықталады. Потенциометр айнымалы резистор ретінде әрекет етеді, бұл ESP32-ге жіберілетін кернеуді реттеуге мүмкіндік береді, бұл өз кезегінде сервоның орнын басқарады.
Деректер парағының мәліметтері
| Өндіруші | SG |
|---|---|
| Бөлшек нөмірі | SG90 |
| Логика/IO кернеуі | 3.3 В (ESP32) |
| Қоректендіру кернеуі | 5 В |
| Шығыс тогы (арнаға) | 1.2 А |
| Ең жоғары ток (арнаға) | 2.5 А |
| PWM жиілігі бойынша нұсқау | 50 Гц |
| Кіріс логикалық шектері | 0.2 В (төмен), 2.5 В (жоғары) |
| Кернеудің төмендеуі / RDS(on) / қанығу | 0.5 В |
| Жылулық шектер | 85 °C макс |
| Қаптама | Пластик |
| Ескертулер / нұсқалар | Әртүрлі беріліс түрлерінде қолжетімді |
- Сервоны тиісті кернеумен (5В) қоректендіруді қамтамасыз етіңіз.
- Ортақ тірек нүктесі үшін сервоның жерін ESP32 жеріне қосыңыз.
- Сервоның орнын басқару үшін тиісті PWM сигналдарын пайдаланыңыз.
- Сервоның ток талаптарын ескеріңіз; қажет болса, сыртқы қоректендіру көзін пайдаланыңыз.
- Қате конфигурацияларды болдырмау үшін сымдарды жалғағанда дұрыс түйреуіш тағайындауларын тексеріңіз.
Сымдарды жалғау нұсқаулары

Сервоқозғалтқыш пен потенциометрді ESP32-ге қосу үшін алдымен сервоның жер сымын (әдетте қара немесе қоңыр) ESP32-дегі жер түйреуіштерінің біріне қосыңыз. Әрі қарай, сервоның қуат сымын (әдетте қызыл) ESP32-дегі 5V түйреуішіне қосыңыз. Соңында, серводан келетін сигнал сымын (әдетте қызғылт сары немесе ақ) ESP32-дегі 25 түйреуішіне қосыңыз.
Потенциометр үшін бір шеткі түйреуішті ESP32-дегі 3.3V түйреуішіне, ал екінші шеткі түйреуішті жерге қосыңыз. Потенциометрдің ортаңғы түйреуіші ESP32-дегі 34 түйреуішіне қосылуы керек. Бұл орнату ESP32-ге потенциометрден шығатын өзгермелі кернеуді оқуға мүмкіндік береді, ол сервоның орнын басқару үшін пайдаланылады.
Код мысалдары және түсіндірме
Келесі код үзіндісі сервоны инициализациялайды және оның қозғалысын басқару параметрлерін орнатады:
#include
Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0.5 мс
const int maxPulseWidth = 2500; // 2.5 мс
void setup() {
myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
myServo.setPeriodHertz(50); // Стандартты 50Гц серво
}
Бұл кодта біз 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 Arduino IDE-де ESP32 үшін COMP портын таңдау
- 9:27 Arduino коды түсіндірілді
- 14:31 ESP32 көмегімен сервоны басқаруды көрсету
- 16:04 Сервоны 5В-тан басқа кернеумен қоректендіру
- 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
Ресурстар мен сілтемелер
-
ҚұжаттамаESP32 Tutorial 17/55- SunFunder Servo motor documentationdocs.sunfounder.com
Файлдар📁
Техникалық сипаттама (pdf)
-
DS5160 Servo motor datasheet
DS5160_datasheet.pdf0.33 MB
Басқа файлдар
-
Download SG90 datasheet (PDF)
robojax-servo-sg90_datasheet.pdf