کوڈ تلاش کریں

ESP32 ٹیوٹوریل 17/55 - ESP32 اور پوٹینشیومیٹر کا استعمال کرتے ہوئے سروو موٹر کو کنٹرول کرنا - ESP32 IoT لرننگ کٹ

ESP32 ٹیوٹوریل 17/55 - ESP32 اور پوٹینشیومیٹر کا استعمال کرتے ہوئے سروو موٹر کو کنٹرول کرنا - ESP32 IoT لرننگ کٹ

اس ٹیوٹوریل میں، ہم سیکھیں گے کہ ESP32 مائیکروکنٹرولر اور پوٹینشیومیٹر کا استعمال کرتے ہوئے سروو موٹر کو کیسے کنٹرول کیا جائے، جو SunFounder کے ESP32 IoT لرننگ کٹ سے ہے۔ اس پروجیکٹ کے اختتام تک، آپ پوٹینشیومیٹر کا استعمال کرتے ہوئے سروو موٹر کے زاویے کو آسانی سے ایڈجسٹ کر سکیں گے، جس سے درست کنٹرول ممکن ہو گا۔ یہ ESP32 کی صلاحیتوں اور موٹرز کے ساتھ اس کے انٹرفیس کو دریافت کرنے کا ایک بہترین طریقہ ہے۔

جب ہم تفصیلات میں جائیں گے، تو ہم ضروری ہارڈویئر اجزاء، وائرنگ کی ہدایات، اور کوڈ کی مثالیں شامل کریں گے تاکہ سب کچھ چل سکے۔ مزید بصری نمائندگی کے لیے، اس ٹیوٹوریل سے منسلک ویڈیو ضرور دیکھیں (ویڈیو میں 0:30 پر)۔

ہارڈویئر کی وضاحت

اس پروجیکٹ کے بنیادی اجزاء میں ESP32 مائیکروکنٹرولر، ایک سروو موٹر (SG90)، اور ایک پوٹینشیومیٹر شامل ہیں۔ ESP32 ایک طاقتور مائیکروکنٹرولر ہے جو بلٹ ان وائی فائی اور بلوٹوتھ پیش کرتا ہے، جو اسے IoT پروجیکٹس کے لیے موزوں بناتا ہے۔ یہ مختلف آلات، بشمول موٹرز، کو اعلیٰ درستگی کے ساتھ کنٹرول کرنے کی صلاحیت رکھتا ہے۔

SG90 سروو موٹر ایک وسیع پیمانے پر استعمال ہونے والا جزو ہے جو تقریباً 270 ڈگری گھوم سکتا ہے۔ یہ پلس-وڈتھ ماڈیولیشن (PWM) سگنل پر کام کرتا ہے، جہاں گردش کا زاویہ اسے بھیجی گئی پلس کی چوڑائی سے طے ہوتا ہے۔ پوٹینشیومیٹر ایک متغیر مزاحم کے طور پر کام کرتا ہے، جس سے آپ ESP32 کو بھیجے جانے والے وولٹیج کو ایڈجسٹ کر سکتے ہیں، جو بدلے میں سروو کی پوزیشن کو کنٹرول کرتا ہے۔

ڈیٹاشیٹ کی تفصیلات

مینوفیکچرر SG
پارٹ نمبر SG90
لاجک/آئی او وولٹیج 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 کوڈ کی وضاحت

تصاویر

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
زبان: 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);
  }
}

وسائل اور حوالہ جات

فائلیں📁

ڈیٹا شیٹ (پی ڈی ایف)

دیگر فائلیں