Search Code

ESP32 ટ્યુટોરિયલ 17/55 - ESP32 અને પોટેન્શિયોમીટરનો ઉપયોગ કરીને સર્વો મોટરને નિયંત્રિત કરવી - ESP32 IoT લર્નિંગ કિટ

ESP32 ટ્યુટોરિયલ 17/55 - ESP32 અને પોટેન્શિયોમીટરનો ઉપયોગ કરીને સર્વો મોટરને નિયંત્રિત કરવી - ESP32 IoT લર્નિંગ કિટ

આ ટ્યુટોરિયલમાં, આપણે શીખીશું કે કેવી રીતે ESP32 માઇક્રોકંટ્રોલર અને SunFounder દ્વારા ESP32 IoT લર્નિંગ કિટમાંથી પોટેન્શિયોમીટરનો ઉપયોગ કરીને સર્વો મોટરને નિયંત્રિત કરવી. આ પ્રોજેક્ટના અંત સુધીમાં, તમે પોટેન્શિયોમીટરનો ઉપયોગ કરીને સર્વો મોટરના ખૂણાને સરળતાથી સમાયોજિત કરી શકશો, જે ચોક્કસ નિયંત્રણ માટે પરવાનગી આપે છે. આ 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-17-Sevo_motor-wiring

સર્વો મોટર અને પોટેન્શિયોમીટરને 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 ms
const int maxPulseWidth = 2500; // 2.5 ms

void setup() {
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
  myServo.setPeriodHertz(50); // સ્ટાન્ડર્ડ 50Hz સર્વો
}

આ કોડમાં, આપણે ESP32Servo લાઇબ્રેરીનો સમાવેશ કરીએ છીએ અને myServo નામ સાથે સર્વોનું ઉદાહરણ બનાવીએ છીએ. આપણે સર્વો માટે પિન નંબર વ્યાખ્યાયિત કરીએ છીએ અને લઘુત્તમ અને મહત્તમ પલ્સ પહોળાઈ સેટ કરીએ છીએ જે સર્વોની ખૂણાની મર્યાદાઓને અનુરૂપ છે.

ESP32_servo_lib

આગળ, ચાલો તે લૂપ પર એક નજર કરીએ જે સર્વોને સતત આગળ અને પાછળ ખસેડે છે:

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 5V સિવાય સર્વોને પાવર આપવો
  • 18:47 લૂપ વિના સર્વો નિયંત્રિત કરવું
  • 20:15 પોટેન્શિયોમીટર વડે સર્વો નિયંત્રિત કરવું
  • 21:37 પોટ સાથે સર્વો Arduino કોડ સમજાવ્યો

Images

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
Language: 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);
  }
}

Files📁

Datasheet (pdf)

Other files