سبق 86: پوٹینشیومیٹر کا استعمال کرتے ہوئے سروو موٹر کی پوزیشن کو کنٹرول کرنا
<پ>ایک سادہ نوب گھمانے کا تصور کریں اور ایک مکینیکل بازو کو آپ کی ہر حرکت کی درستی سے پیروی کرتے دیکھیں۔ یہ پوٹینشیومیٹر کو سروو موٹر کے ساتھ جوڑنے کا جادو ہے۔ یہ پروجیکٹ، جو Robojax کے Arduino Step by Step کورس کا حصہ ہے، الیکٹرانکس میں ایک بنیادی اور انتہائی مفید تصور کو ظاہر کرتا ہے: اینالاگ ان پٹ کو درست جسمانی حرکت میں تبدیل کرنا۔ آپ سیکھیں گے کہ پوٹینشیومیٹر سے متغیر وولٹیج کیسے پڑھیں، اس قدر کو زاویوں کی رینج میں کیسے تبدیل کریں، اور سروو موٹر کو اس عین پوزیشن پر گھومنے کا حکم کیسے دیں۔ یہ آپ کے لیے بدیہی اور انٹرایکٹو پروجیکٹس بنانے کا گیٹ وے ہے جہاں دستی کنٹرول آٹومیشن سے ملتا ہے۔پ>
- روبوٹک بازو کنٹرول: روبوٹک بازو کے ہر جوڑ کو دستی طور پر پوزیشن دینے کے لیے پوٹینشیومیٹر استعمال کریں تاکہ درست اٹھانے اور رکھنے کے آپریشن ہو سکیں۔
- کیمرہ پین اور ٹیلٹ سسٹم: ٹائم لیپس یا نگرانی کے لیے ریموٹ کنٹرولڈ کیمرہ ماؤنٹ بنائیں، جہاں ڈائل گھما کر آسانی سے پین اور ٹیلٹ کیا جا سکے۔
- اینالاگ گیج کی نقل: ایک فزیکل ڈیش بورڈ گیج (جیسے اسپیڈومیٹر یا درجہ حرارت کا ڈائل) بنائیں جو سینسر ڈیٹا کی بنیاد پر حرکت کرے، جس میں پوٹینشیومیٹر دستی اوور رائیڈ یا کیلیبریشن ٹول کے طور پر کام کرے۔
- انٹرایکٹو آرٹ تنصیبات: ایسے کائنیٹک مجسمے بنائیں جو دیکھنے والوں کے ان پٹ پر ردعمل دیں، جہاں ڈائل گھمانے سے حرکت پذیر حصوں کی پوزیشن بدل جائے۔
- ماڈل گاڑی کا اسٹیئرنگ: ماڈل کار یا کشتی کے اسٹیئرنگ زاویہ کو ریموٹ سے کنٹرول کریں، جو ڈیجیٹل بٹنوں کے مقابلے میں زیادہ بدیہی اور اینالاگ احساس فراہم کرے۔
ہارڈویئر اور اجزاء
<پ>اس پروجیکٹ کے ساتھ آگے بڑھنے کے لیے، آپ کو درج ذیل اجزاء کی ضرورت ہوگی:پ>- ایک Arduino بورڈ (مثلاً، Uno، Nano)
- ایک معیاری سروو موٹر (مثلاً، SG90 یا MG996R)
- ایک پوٹینشیومیٹر (متغیر مزاحمت، عام طور پر 10kΩ)
- جمپر تار
- ایک بریڈ بورڈ (اختیاری، آسان کنکشن کے لیے)
وائرنگ کو سمجھنا
<پ>اس پروجیکٹ کی وائرنگ سیدھی ہے۔ کلید یہ ہے کہ سروو اور پوٹینشیومیٹر دونوں کے لیے صحیح پاور اور سگنل کنکشن فراہم کریں۔ سروو ایک زیادہ بجلی استعمال کرنے والا آلہ ہے، اس لیے اسے براہ راست Arduino کے 5V پن سے بجلی ملتی ہے۔ پوٹینشیومیٹر وولٹیج ڈیوائیڈر کے طور پر کام کرتا ہے، اور ہم اس کی وائپر (درمیانی پن) پر وولٹیج پڑھتے ہیں تاکہ اس کی پوزیشن معلوم ہو سکے۔ (ویڈیو میں 01:05 پر)پ> <پ>اس پروجیکٹ میں استعمال ہونے والی ایک چالاک ترکیب یہ ہے کہ پوٹینشیومیٹر کو بجلی دینے کے لیے ڈیجیٹل پن پر ایک اضافی 5V ذریعہ بنایا جاتا ہے، کیونکہ کچھ Arduino بورڈز پر صرف ایک مخصوص 5V پن ہوتا ہے۔ یہ کوڈ میں ڈیجیٹل پن (پن 8) کوHIGH پر سیٹ کرکے کیا جاتا ہے، جو 5V آؤٹ پٹ کرتا ہے۔ (ویڈیو میں 00:39 پر)پ>
<پ>یہ ہے وائرنگ ڈایاگرام جو ویڈیو میں ذکر کیا گیا ہے:پ>
- سروو موٹر:
- پاور (سرخ تار) → Arduino 5V پن
- گراؤنڈ (براؤن/سیاہ تار) → Arduino GND پن
- سگنل (نارنجی/پیلا تار) → Arduino پن 3 (PWM قابل پن)
- پوٹینشیومیٹر:
- بایاں پن → Arduino GND پن
- درمیانی پن (وائپر) → Arduino اینالاگ پن A0
- دایاں پن → Arduino پن 8 (کوڈ میں VCC2 کے طور پر بیان کردہ)
کوڈ کی وضاحت
<پ>اس پروجیکٹ کا کوڈ خوبصورتی سے سادہ ہے۔ یہ پوٹینشیومیٹر کو پڑھنے اور سروو کو کنٹرول کرنے کے لیے چند اہم Arduino فنکشنز استعمال کرتا ہے۔ آئیے صارف کے قابل ترتیب حصوں پر توجہ مرکوز کریں جنہیں آپ اپنے پروجیکٹس کے لیے ایڈجسٹ کر سکتے ہیں۔ (ویڈیو میں 03:00 پر)پ> <پ>اسکیچ کے اوپری حصے میں، آپ پنوں کی وضاحت کریں گے اور سروو آبجیکٹ بنائیں گے۔ یہ بنیادی متغیرات ہیں جو آپ اپنی وائرنگ کی بنیاد پر تبدیل کریں گے:پ>#include <Servo.h>
Servo myservo; // سروو کو کنٹرول کرنے کے لیے سروو آبجیکٹ بنائیں
int potpin = A0; // اینالاگ پن جو پوٹینشیومیٹر سے منسلک ہے
int servoPin = 3; // سروو کے لیے ڈیجیٹل پن (PWM کے ساتھ) کی وضاحت کریں۔ صرف پن 3، 5، 6، 9، 10، 11 استعمال کر سکتے ہیں
int VCC2 = 8;// پوٹینشیومیٹر کے لیے اضافی VCC کی وضاحت کریں
int val; // اینالاگ پن سے قدر پڑھنے کے لیے متغیر
<پ>یہ ہے جو ہر حصہ کرتا ہے:پ>
- Servo myservo;: یہ لائن
myservoنامی ایک آبجیکٹ بناتی ہے جسے ہم اپنی مخصوص سروو موٹر کو کنٹرول کرنے کے لیے استعمال کریں گے۔ آپ اسے دوبارہ نام دے سکتے ہیں، لیکن آپ کو کوڈ میں بعد میں وہی نام استعمال کرنا ہوگا۔ - int potpin = A0;: یہ وضاحت کرتا ہے کہ پوٹینشیومیٹر کی وائپر کس اینالاگ پن سے منسلک ہے۔ اگر آپ تار کو کسی مختلف اینالاگ پن پر منتقل کرتے ہیں، تو آپ کو یہ نمبر اپ ڈیٹ کرنا ہوگا۔
- int servoPin = 3;: یہ سروو کے سگنل تار کے لیے ڈیجیٹل پن سیٹ کرتا ہے۔ PWM قابل پن (عام طور پر بورڈ پر '~' کے نشان والے) استعمال کرنا ضروری ہے۔ تبصرہ زیادہ تر Arduinos کے لیے درست پنوں کی فہرست دیتا ہے۔
- int VCC2 = 8;: یہ وہ پن ہے جسے ہم پوٹینشیومیٹر کے لیے ثانوی 5V ذریعہ کے طور پر استعمال کر رہے ہیں۔ اگر آپ کے بورڈ میں متعدد 5V پن ہیں، تو آپ اسے براہ راست جوڑ سکتے ہیں اور کوڈ کا یہ حصہ ہٹا سکتے ہیں۔
setup() فنکشن میں، کوڈ سروو کو انیشیالائز کرتا ہے اور اضافی پاور پن کو ترتیب دیتا ہے۔ myservo.attach(servoPin) فنکشن ضروری ہے کیونکہ یہ Arduino کو بتاتا ہے کہ کون سا پن سروو کی سگنل تار سے منسلک ہے۔
void setup() {
Serial.begin(9600); // سیریل سیٹ اپ کریں
myservo.attach(servoPin); // سروو آبجیکٹ کے ساتھ پن 3 پر سروو منسلک کرتا ہے
pinMode(VCC2, OUTPUT);// پن 8 کو آؤٹ پٹ کے طور پر سیٹ کریں
digitalWrite(VCC2, HIGH);// پن 8 کو HIGH سیٹ کریں تاکہ یہ 5V پن کی طرح کام کرے
}
بنیادی منطق loop() فنکشن میں ہے۔ یہ پوٹینشیومیٹر کی قدر پڑھتا ہے، اسے زاویے میں تبدیل کرتا ہے، اور سروو کو حرکت دینے کا حکم دیتا ہے۔ یہاں دو اہم فنکشنز analogRead() اور map() ہیں۔ (ویڈیو میں 04:27 پر)
void loop() {
val = analogRead(potpin); // پوٹینشیومیٹر کی قدر پڑھتا ہے (قدر 0 اور 1023 کے درمیان)
val = map(val, 0, 1023, 0, 180); // اسے سروو کے ساتھ استعمال کرنے کے لیے تبدیل کریں (قدر 0 اور 180 کے درمیان)
myservo.write(val); // تبدیل شدہ قدر کے مطابق سروو کی پوزیشن سیٹ کرتا ہے
Serial.print(val);
Serial.println();
delay(50); // سروو کے وہاں پہنچنے کا انتظار کرتا ہے
}
یہ ہے کہ یہ کیسے کام کرتا ہے:
- analogRead(potpin): یہ فنکشن پوٹینشیومیٹر کے وائپر سے وولٹیج پڑھتا ہے اور 0 (0V) اور 1023 (5V) کے درمیان ایک قدر لوٹاتا ہے۔
- map(val, 0, 1023, 0, 180): یہ پورے پروجیکٹ کی کلید ہے۔ یہ پوٹینشیومیٹر سے خام قدر (0 سے 1023) لیتا ہے اور اسے متناسب طور پر سروو زاویے (0 سے 180 ڈگری) میں تبدیل کرتا ہے۔ مثال کے طور پر، اگر پوٹینشیومیٹر 511 (تقریباً آدھا) پڑھتا ہے، تو
map()فنکشن 90 لوٹائے گا، سروو کو اس کی مرکزی پوزیشن پر لے جائے گا۔ - myservo.write(val): یہ فنکشن حساب شدہ زاویہ (اب
valمیں محفوظ) لیتا ہے اور سروو کو اس پوزیشن پر گھومنے کا حکم دیتا ہے۔ - delay(50): یہ ہر لوپ کے آخر میں ایک چھوٹا سا وقفہ شامل کرتا ہے۔ یہ اپڈیٹ کی شرح کو کنٹرول کرتا ہے۔ ایک بڑا وقفہ (جیسے 200ms) سروو کو مراحل میں حرکت دیتا ہے، جبکہ چھوٹا وقفہ (جیسے 50ms) حرکت کو بہت ہموار بناتا ہے۔ آپ ردعمل کو تبدیل کرنے کے لیے اسے ایڈجسٹ کر سکتے ہیں۔ (ویڈیو میں 07:26 پر)
لائیو پروجیکٹ ڈیموسٹریشن
ویڈیو میں، آپ پروجیکٹ کو عمل میں دیکھ سکتے ہیں۔ جیسے ہی پوٹینشیومیٹر کی نوب گھمائی جاتی ہے، سروو موٹر کا بازو متناسب طور پر اس کی پوزیشن کی پیروی کرتا ہے۔ سیریل مانیٹر موجودہ زاویہ پرنٹ کرتا ہے، اس بات کی تصدیق کرتا ہے کہ میپنگ درست طریقے سے کام کر رہی ہے۔ جب پوٹینشیومیٹر اپنی کم از کم پوزیشن پر ہوتا ہے، سروو 0 ڈگری پر ہوتا ہے۔ جیسے ہی آپ نوب کو زیادہ سے زیادہ گھماتے ہیں، سروو آسانی سے 180 ڈگری تک گھومتا ہے۔ (ویڈیو میں 06:33 پر)
یہ ریئل ٹائم فیڈ بیک لوپ ایک اینالاگ سینسر اور ڈیجیٹل ایکچیویٹر کے ہموار انضمام کو ظاہر کرتا ہے، جس سے ایک ردعمل دینے والا اور بدیہی کنٹرول سسٹم بنتا ہے۔
ابواب
- [00:00] تعارف اور پروجیکٹ کا جائزہ
- [01:05] اسکیمیٹک اور وائرنگ ڈایاگرام
- [02:07] فزیکل وائرنگ ڈیموسٹریشن
- [03:00] کوڈ کی وضاحت
- [06:33] لائیو ڈیموسٹریشن اور ٹیسٹنگ
- [07:26] سروو رسپانس اسپیڈ کو ایڈجسٹ کرنا
/*
* Lesson 88: Controlling Servo motor a with Potentiometer
* 📚⬇️ Download and resource page https://robojax.com/RJT763
watch full video tutroial: https://www.youtube.com/watch?v=ntRW77mNFFk
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
Update by Ahmad Shamshiri on Jan 01, 2019 in Ajax, Ontario, Canada
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int servoPin = 3; // define a digital pin (with PWM) for servo. Can use only pin 3, 5, 6,9, 10, 11
int VCC2 = 8;// define extra VCC for potentiometer
int val; // variable to read the value from the analog pin
void setup() {
//
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 3 to the servo object
pinMode(VCC2, OUTPUT);// set pin 8 as output
digitalWrite(VCC2, HIGH);// set pin 8 HIGH so it acts as 5V pin
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
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
Serial.print(val);
Serial.println();
delay(50); // waits for the servo to get there
}
آپ کو جن چیزوں کی ضرورت ہو سکتی ہے
-
ایمیزون
-
ایمیزون
-
ای بے
-
علی ایکسپریسPurchase SG90 Servo motor 180 or 360 from AliExpresss.click.aliexpress.com
وسائل اور حوالہ جات
فائلیں📁
دیگر فائلیں
-
SG90 سیروموٹر کی ڈیٹا شیٹ
robojax-servo-SG90_datasheet.pdf0.12 MB