لومړی ۸۶: د پوټینشیومیټر په کارولو سره د سروو موټور موقعیت کنټرول کول
یو ساده کنټرول وګرځوئ او وګورئ چې یو میخانیکي بازو ستاسو هر حرکت په دقیق ډول تعقیبوي. دا د پوټینشیومیټر او سروو موټور سره یوځای کولو جادو ده. دا پروژه، د Robojax لخوا د Arduino ګام په ګام کورس برخه ده، په الکترونیک کې یو بنسټیز او خورا ګټور مفهوم ښیي: د انلاګ انپټ ژباړه په دقیق فزیکي حرکت کې. تاسو به زده کړئ چې څنګه د پوټینشیومیټر څخه متغیر ولټاژ ولولئ، هغه ارزښت د زاویو په لړ کې نقشه کړئ، او سروو موټور ته امر وکړئ چې دقیق هغه موقعیت ته وګرځي. دا ستاسو د هوښیار او متقابل پروژو جوړولو دروازه ده چیرې چې لاسي کنټرول له اتوماتیک سره یوځای کیږي.

د دې مهارت لپاره غوښتنلیکونه پراخه او عملي دي. دلته یو څو نظرونه دي چې تاسو الهام کړئ:
- د روبوټیک بازو کنټرول: د روبوټیک بازو د هر بند د لاسي موقعیت لپاره پوټینشیومیټر وکاروئ د دقیق پورته کولو او ځای پر ځای کولو عملیاتو لپاره.
- د کیمرې پین او ټیلټ سیسټم: د وخت تیریدو یا څارنې لپاره د لیرې کنټرول شوي کیمرې ماونټ جوړ کړئ، په نرمۍ سره د ډایل په ګرځولو سره پین او ټیلټ کول.
- د انلاګ ګیج نقل: فزیکي ډشبورډ ګیج جوړ کړئ (لکه سپیډومیټر یا د تودوخې ډایل) چې د سینسر معلوماتو پر بنسټ حرکت کوي، د پوټینشیومیټر سره د لاسي بای پاس یا کیلیبریشن وسیلې په توګه.
- متقابل هنري نصبونه: کاینټیک مجسمې جوړې کړئ چې د لیدونکو انپټ ته ځواب ووایی، چیرې چې د ډایل ګرځول د حرکت کونکو برخو موقعیت بدلوي.
- د ماډل موټر سټیرینګ: د ماډل موټر یا کښتۍ د سټیرینګ زاویه له لیرې کنټرول کړئ، د ډیجیټل تڼیو په پرتله ډیر هوښیار او انلاګ احساس چمتو کوي.
دا لارښود د Robojax لخوا د ویډیو ټیوټوریل درس 86: د پوټینشیومیټر په کارولو سره د سروو موټور موقعیت کنټرول پر بنسټ دی (په ویډیو کې په 00:00). دا تاسو ته ټوله پروسه ښیي، د وایرینګ له پوهیدو څخه تر هغه کوډ تشریح کولو پورې چې دا ټول کار کوي. راځئ چې پیل وکړو.
هارډویر او اجزاوې
د دې پروژې تعقیب لپاره، تاسو به لاندې اجزاوو ته اړتیا ولرئ:
- د 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) فنکشن اړین دی ځکه چې دا آردوینو ته وایي چې کوم پن د سروو د سیګنال تار سره وصل دی.
void setup() {
Serial.begin(9600); // سیریل تنظیم کړئ
myservo.attach(servoPin); // سروو په پن 3 باندې د سروو آبجیکٹ سره وصل کړئ
pinMode(VCC2, OUTPUT);// پن 8 د آوټ پوت په توګه تنظیم کړئ
digitalWrite(VCC2, HIGH);// پن 8 لوړ کړئ ترڅو دا د 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 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB