کوډ ولټوئ

لومړی ۸۶: د پوټینشیومیټر په کارولو سره د سروو موټور موقعیت کنټرول کول

لومړی ۸۶: د پوټینشیومیټر په کارولو سره د سروو موټور موقعیت کنټرول کول

یو ساده کنټرول وګرځوئ او وګورئ چې یو میخانیکي بازو ستاسو هر حرکت په دقیق ډول تعقیبوي. دا د پوټینشیومیټر او سروو موټور سره یوځای کولو جادو ده. دا پروژه، د 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 وایرینګ یا پوټ
د سروو موټور سره د Arduino وایرینګ یا پوټ

راځئ چې اړیکې مات کړو:

  • سروو موټور:
    • بریښنا (سور تار) → د 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] د سروو ځواب سرعت تنظیمول

انځورونه

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
892-Lesson 86: Controlling a servo position using a potentiometer (variable resistor)
ژبه: C++
/*
 * 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
}
 

هغه شیان چې تاسو ورته اړتیا لرئ

سرچینې او حوالې

فایلونه📁

نور فایلونه