Mafunzo ya ESP32 17/55 - Kudhibiti Motor ya Servo kwa kutumia ESP32 na Potentiometer - Kifurushi cha Kujifunza cha ESP32 IoT
Katika mafunzo haya, tutajifunza jinsi ya kudhibiti motor ya servo kwa kutumia microcontroller ya ESP32 na potentiometer kutoka kwenye kit cha kujifunza cha ESP32 IoT cha SunFounder. Kufikia mwisho wa mradi huu, utaweza kurekebisha pembe ya motor ya servo vizuri kwa kutumia potentiometer, ikiruhusu udhibiti sahihi. Hii ni njia nzuri ya kuchunguza uwezo wa ESP32 na jinsi inavyounganishwa na motors.

Tunapoingia katika maelezo, tutashughulikia vipengele muhimu vya vifaa, maagizo ya wiring, na mifano ya code ili kupata kila kitu kifanye kazi. Kwa uwakilishi wa kuona zaidi, hakikisha unaangalia video inayohusishwa na mafunzo haya (katika video saa 0:30).
Vifaa Vimeelezwa
Vipengele vikuu vya mradi huu vinajumuisha microcontroller ya ESP32, motor ya servo (SG90), na potentiometer. ESP32 ni microcontroller yenye nguvu inayotoa Wi-Fi na Bluetooth iliyojengewa ndani, na kuifanya kufaa kwa miradi ya IoT. Ina uwezo wa kudhibiti vifaa mbalimbali, ikiwa ni pamoja na motors, kwa usahihi wa hali ya juu.
Motor ya servo ya SG90 ni kipengele kinachotumika sana ambacho kinaweza kuzunguka takriban digrii 270. Inafanya kazi kwa ishara ya pulse-width modulation (PWM), ambapo pembe ya mzunguko imedhamiriwa na upana wa pulse inayotumwa kwake. Potentiometer hufanya kazi kama resistor inayobadilika, ikikuruhusu kurekebisha voltage inayotumwa kwa ESP32, ambayo kwa upande wake inadhibiti nafasi ya servo.
Maelezo ya Datasheet
| Mtengenezaji | SG |
|---|---|
| Nambari ya sehemu | SG90 |
| Logic/IO voltage | 3.3 V (ESP32) |
| Voltage ya usambazaji | 5 V |
| Current ya pato (kwa kila channel) | 1.2 A |
| Current ya kilele (kwa kila channel) | 2.5 A |
| Mwongozo wa frequency ya PWM | 50 Hz |
| Viwango vya logic ya kuingiza | 0.2 V (chini), 2.5 V (juu) |
| Kushuka kwa voltage / RDS(on) / saturation | 0.5 V |
| Mipaka ya joto | 85 °C max |
| Kifurushi | Plastiki |
| Vidokezo / lahaja | Inapatikana katika aina tofauti za gear |
- Hakikisha servo inaendeshwa kwa voltage inayofaa (5V).
- Unganisha ground ya servo kwenye ground ya ESP32 kwa rejea ya pamoja.
- Tumia ishara sahihi za PWM kudhibiti nafasi ya servo.
- Fahamu mahitaji ya current ya servo; tumia usambazaji wa nje wa nguvu ikiwa ni lazima.
- Angalia ugawaji sahihi wa pin wakati wa wiring ili kuepuka makosa ya usanidi.
Maagizo ya Wiring

Ili kuunganisha motor ya servo na potentiometer kwenye ESP32, anza kwa kuunganisha waya wa ground wa servo (kawaida nyeusi au kahawia) kwenye moja ya pin za ground kwenye ESP32. Ifuatayo, unganisha waya wa nguvu (kawaida nyekundu) wa servo kwenye pin ya 5V kwenye ESP32. Hatimaye, unganisha waya wa ishara (kawaida machungwa au nyeupe) kutoka kwenye servo hadi pin 25 kwenye ESP32.
Kwa potentiometer, unganisha pin moja ya nje kwenye pin ya 3.3V kwenye ESP32 na pin nyingine ya nje kwenye ground. Pin ya katikati ya potentiometer inapaswa kuunganishwa kwenye pin 34 kwenye ESP32. Usanidi huu unaruhusu ESP32 kusoma voltage inayobadilika kutoka kwenye potentiometer, ambayo itatumika kudhibiti nafasi ya servo.
Mifano ya Code & Maelekezo
Kipande cha code kifuatacho kinaanzisha servo na kuweka vigezo vya kudhibiti mwendo wake:
#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
}
Katika code hii, tunajumuisha maktaba ya ESP32Servo na kuunda mfano wa servo kwa jina myServo. Tunafafanua nambari ya pin kwa servo na kuweka upana wa chini na wa juu wa pulse unaolingana na mipaka ya pembe ya servo.
Ifuatayo, hebu tuangalie loop inayosonga servo mbele na nyuma kwa kuendelea:
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 hii inabadilisha pembe hatua kwa hatua kutoka digrii 0 hadi 180 na kurudi tena, kwa kutumia kazi ya map kubadilisha pembe kuwa upana wa pulse unaolingana kwa servo. Kila mabadiliko yanafuatwa na kuchelewa kwa muda mfupi ili kuruhusu servo kufikia nafasi yake mpya vizuri.
Maonyesho / Nini cha Kutarajia
Mara tu kila kitu kimeunganishwa na code imepakiwa, unapaswa kuona motor ya servo ikisonga vizuri kutoka digrii 0 hadi 180 na kurudi. Ukirekebisha potentiometer, servo inapaswa kuonyesha nafasi mpya kulingana na voltage inayotolewa na potentiometer. Kuwa makini na polarity iliyogeuzwa wakati wa wiring, kwani inaweza kuharibu vipengele vyako (katika video saa 3:45).
Vidokezo vya Muda wa Video
- 00:00 Anza
- 1:56 Servo motor ni nini
- 5:00 Ukurasa wa hati
- 6:33 Uunganishaji wa servo umeelezwa
- 7:45 Kuchagua bandari ya COMP kwa ESP32 katika Arduino IDE
- 9:27 Msimbo wa Arduino umeelezwa
- 14:31 Maonyesho ya udhibiti wa servo kwa kutumia ESP32
- 16:04 Kuwezesha servo bila 5V
- 18:47 Kudhibiti Servo bila kitanzi
- 20:15 Kudhibiti Servo kwa Potentiometer
- 21:37 Servo na msimbo wa pot Arduino umeelezwa
#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
Resurser och referenser
-
DokumentationESP32 Tutorial 17/55- SunFunder Servo motor documentationdocs.sunfounder.com
Filer📁
Datablad (pdf)
-
DS5160 Servo motor datasheet
DS5160_datasheet.pdf0.33 MB
Andra filer
-
Download SG90 datasheet (PDF)
robojax-servo-sg90_datasheet.pdf