کوڈ تلاش کریں

پوٹینشیومیٹر کے ذریعے Arduino استعمال کرتے ہوئے سروو کو کنٹرول کرنا

پوٹینشیومیٹر کے ذریعے Arduino استعمال کرتے ہوئے سروو کو کنٹرول کرنا

اس ٹیوٹوریل میں، ہم سیکھیں گے کہ Arduino کے ساتھ پوٹینشیومیٹر استعمال کرکے سروو موٹر کو کیسے کنٹرول کیا جائے۔ پوٹینشیومیٹر ہمیں سروو کے زاویے کو آسانی سے ایڈجسٹ کرنے کی اجازت دیتا ہے، جس سے ہمیں اس کی پوزیشن پر ریئل ٹائم کنٹرول ملتا ہے۔ اس پروجیکٹ کے اختتام تک، آپ کے پاس ایک فعال سیٹ اپ ہوگا جو پوٹینشیومیٹر کی قدر اور متعلقہ سروو زاویہ ظاہر کرتا ہے۔

جیسے ہی پوٹینشیومیٹر گھمایا جاتا ہے، سروو موٹر کا زاویہ 0 سے 180 ڈگری تک تبدیل ہوتا ہے۔ ہم پوٹینشیومیٹر کی قدر پڑھنے کے لیے Arduino کے اینالاگ ان پٹ کا استعمال کریں گے اور پھر ایک سادہ فارمولے کا استعمال کرکے اس قدر کو سروو کی رینج میں میپ کریں گے۔ یہ پروجیکٹ یہ سمجھنے کا ایک بہترین طریقہ ہے کہ اینالاگ ان پٹ کیسے کام کرتے ہیں اور ان کے ساتھ موٹرز کو کیسے کنٹرول کیا جائے (ویڈیو میں 01:45 پر)۔

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

اس پروجیکٹ کے لیے، ہمیں ایک Arduino بورڈ، ایک سروو موٹر، اور ایک پوٹینشیومیٹر درکار ہے۔ پوٹینشیومیٹر ایک متغیر ریزسٹر کے طور پر کام کرتا ہے، جو اس کی پوزیشن کے مطابق وولٹیج آؤٹ پٹ فراہم کرتا ہے۔ یہ آؤٹ پٹ Arduino کے اینالاگ ان پٹ کے ذریعے پڑھا جاتا ہے، جس سے ہمیں یہ تعین کرنے میں مدد ملتی ہے کہ سروو کو کتنا گھمانا ہے۔

سروو موٹر ایک قسم کی موٹر ہے جسے ایک مخصوص زاویے پر رکھا جا سکتا ہے۔ یہ ایک کنٹرول سگنل وصول کرتی ہے، جو اسے مطلوبہ پوزیشن بتاتا ہے۔ سروو Arduino سے موصول ہونے والے ان پٹ کی بنیاد پر اس زاویے تک گھومے گی، جس سے یہ مختلف ایپلیکیشنز جیسے روبوٹکس اور ریموٹ کنٹرول ڈیوائسز کے لیے مفید بنتی ہے۔

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

مینوفیکچررمختلف
پارٹ نمبراسٹینڈرڈ سروو
لاجک/آئی او وولٹیج5 V
سپلائی وولٹیج4.8 – 6 V
آؤٹ پٹ کرنٹ (فی چینل)1 A تک
پیک کرنٹ (فی چینل)2 A تک
PWM فریکوئنسی رہنمائی50 Hz
ان پٹ لاجک تھریشولڈز0.8 V (کم) / 2.0 V (زیادہ)
وولٹیج ڈراپ / RDS(on) / سیچوریشن0.5 V
تھرمل حدود85 °C
پیکیجاسٹینڈرڈ سائز
نوٹس / ویریئنٹسمختلف سائز اور ٹارک ریٹنگز میں دستیاب

  • پاور سپلائی کو حدود میں رکھیں (4.8 – 6 V)۔
  • پوٹینشیومیٹر کے لیے مناسب ریزسٹر ویلیو استعمال کریں (10 kΩ تجویز کردہ)۔
  • ریورسڈ آپریشن سے بچنے کے لیے کنکشنز کی پولیرٹی چیک کریں۔
  • گرمی سے محتاط رہیں؛ یقینی بنائیں کہ سروو اوور لوڈ نہ ہو۔
  • مداخلت کم کرنے کے لیے وائرنگ مختصر رکھیں۔
  • اگر ضرورت ہو تو پاور ان پٹس پر ڈیکپلنگ کیپسیٹرز استعمال کریں۔
  • تصدیق کریں کہ پوٹینشیومیٹر اینالاگ پن A0 سے درست طریقے سے جڑا ہوا ہے۔

وائرنگ ہدایات

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot

اجزاء کو وائر کرنے کے لیے، پہلے پوٹینشیومیٹر کو جوڑیں۔ پوٹینشیومیٹر کا درمیانی پن Arduino کے اینالاگ پن A0 سے منسلک ہونا چاہیے۔ بایاں پن Arduino کے 5V پن پر جانا چاہیے، اور دایاں پن گراؤنڈ (GND) سے منسلک ہونا چاہیے۔

اگلا، سروو موٹر کو جوڑیں۔ سروو کی گراؤنڈ تار (عام طور پر سیاہ یا بھوری) Arduino کے GND سے منسلک ہونی چاہیے۔ پاور تار (عام طور پر سرخ) Arduino کے 5V پن سے منسلک ہونی چاہیے۔ آخر میں، کنٹرول تار (اکثر پیلی یا سفید) Arduino کے ڈیجیٹل پن 9 سے منسلک ہونی چاہیے۔ یہ سیٹ اپ Arduino کو پوٹینشیومیٹر کی پوزیشن کی بنیاد پر سروو کو کنٹرول کرنے کی اجازت دے گا۔

Arduino Schemtic of wiring servo motor with pot

کوڈ مثالیں اور واک تھرو

آئیے کوڈ کے اہم حصوں پر ایک نظر ڈالتے ہیں۔ پہلے، ہم Servo لائبریری شامل کرتے ہیں اور ایک سروو آبجیکٹ بناتے ہیں:

#include 
Servo myservo;  // سروو کو کنٹرول کرنے کے لیے سروو آبجیکٹ بنائیں

یہ کوڈ سروو کو انیشیالائز کرتا ہے اور اسے کنٹرول کے لیے تیار کرتا ہے۔ اگلا مرحلہ پوٹینشیومیٹر کی قدر پڑھنا شامل ہے:

int val = analogRead(potpin); // پوٹینشیومیٹر کی قدر پڑھتا ہے

یہاں، پوٹینشیومیٹر سے پڑھی گئی قدر متغیر val میں محفوظ کی جاتی ہے۔ قدر 0 اور 1023 کے درمیان ہوگی، جو پوٹینشیومیٹر کی پوزیشن کے مطابق ہوتی ہے۔ پھر ہم اس قدر کو سروو کی رینج میں میپ کرتے ہیں:

val = map(val, 0, 1023, 0, 180); // اسے سروو کے ساتھ استعمال کرنے کے لیے اسکیل کریں

یہ لائن پوٹینشیومیٹر کی قدر کو سروو موٹر کے لیے موزوں رینج میں تبدیل کرتی ہے۔ آخر میں، ہم سروو کو حساب شدہ پوزیشن پر سیٹ کرتے ہیں:

myservo.write(val); // اسکیل شدہ قدر کے مطابق سروو پوزیشن سیٹ کرتا ہے

یہ کمانڈ سروو کو پوٹینشیومیٹر کی پوزیشن کی بنیاد پر مخصوص زاویے پر منتقل ہونے کو کہتی ہے۔ آپ مضمون کے نیچے مکمل کوڈ لوڈ شدہ پا سکتے ہیں۔

ڈیمونسٹریشن / کیا توقع کریں

جب آپ پروگرام چلاتے ہیں، تو پوٹینشیومیٹر کو گھمانے سے سروو موٹر کا زاویہ آسانی سے ایڈجسٹ ہوگا۔ آپ کو نوب گھمانے کے دوران سیریل مانیٹر میں زاویے کی قدریں پرنٹ ہوتی نظر آئیں گی۔ اگر سروو غیر متوقع طور پر برتاؤ کرے تو اپنی وائرنگ چیک کریں، خاص طور پر پوٹینشیومیٹر اور سروو کے کنکشنز (ویڈیو میں 04:30 پر)۔

سروو کو پوٹینشیومیٹر کی پوزیشن میں تبدیلیوں کا فوری جواب دینا چاہیے۔ اگر آپ کو کوئی تاخیر یا جھٹکا محسوس ہو تو ردعمل بہتر بنانے کے لیے کوڈ میں تاخیر کم کرنے پر غور کریں۔

تصاویر

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot
Arduino Schemtic of wiring servo motor with pot
Arduino Schemtic of wiring servo motor with pot
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
96-Controlling a servo position using a potentiometer
زبان: C++
/*
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

 modified on 8 November 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob

 Update by Ahmad Shamshiri for Robojax.com in Ajax, Ontario, Canada
 Watch video for this code at https://youtu.be/X_drE5tLbz0
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = A0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup() {
  // Servo knob demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  // Servo knob demo by Robojax.com
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  Serial.print(val);
  Serial.print(" ");
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  // Servo knob demo by Robojax.com
  Serial.print(val);
  Serial.println();
  delay(200);                           // waits for the servo to get there
}

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

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

فائلیں📁

کوئی فائلیں دستیاب نہیں ہیں۔