Search Code

Mafunzo ya ESP32 17/55 - Kudhibiti Motor ya Servo kwa kutumia ESP32 na Potentiometer - Kifurushi cha Kujifunza cha ESP32 IoT

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

ESP32-17-Sevo_motor-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.

ESP32_servo_lib

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

Bilder

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32_servo_lib
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
Språk: C++
#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);
  }
}

Filer📁

Datablad (pdf)

Andra filer