کوډ ولټوئ

لومړی ۱۸/۳۱: د سروو موټور کارول د آردوینو سره د سن فاونډر آردوینو کټ

لومړی ۱۸/۳۱: د سروو موټور کارول د آردوینو سره د سن فاونډر آردوینو کټ

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

  • د روبوټیک لاس جوړول چې کولی شي شیان په دقیق ډول ونیسي او حرکت ورکړي.
  • د لرې کنټرول موټر یا کښتۍ جوړول چې د سټیرینګ لپاره سروو ولري.
  • د لمریز تعقیبونکي پراختیا چې د انرژۍ راټولولو اعظمي کولو لپاره لمر تعقیبوي.
  • د څارنې یا عکاسۍ لپاره د پین-او-ټیلټ کیمرې ماونټ جوړول.
  • د ماډل الوتکې د کنټرول سطحو اتومات کول، لکه رډر یا ایلیرون.

هارډویر عمومي کتنه

مخکې له دې چې کوډ ته لاړ شو، دا اړینه ده چې د سروو موټور پخپله پوه شو. لکه څنګه چې په ویډیو کې ښودل شوي، سروو موټور د معیاري DC موټور په څیر په دوامداره توګه نه ګرځي. پرځای یې، دا یو ځانګړي زاویه یي موقعیت ته ګرځي، معمولا د 0 او 180 درجو ترمنځ. دا د هغو غوښتنلیکونو لپاره مثالی کوي چې دقیق حرکت ته اړتیا لري. ویډیو ډیری مثالونه روښانه کوي، د RC موټر سټیرینګ څخه نیولې تر روبوټیک لاس د پیچلو بندونو کنټرول پورې (په ویډیو کې په 00:06).

سرووګانې په مختلفو اندازو کې راځي، چې فزیکي اندازه او تورک درجه یې قیمت او غوښتنلیک ټاکي. یو کوچنی مایکرو سروو د سپکو ماډلونو لپاره مناسب دی، پداسې حال کې چې د درنو دندو لکه د "ډیر پیاوړي یا موټر موټر" سټیرینګ لپاره لوی، ډیر پیاوړی سروو ته اړتیا ده (په ویډیو کې په 01:59).

ډیری شوقي سرووګانې درې تارونه لري چې په معیاري نښلونکي کې ځای پر ځای شوي. ویډیو یو هوښیار ډیزاین انتخاب تشریح کوي: منځنی تار تل د بریښنا تار (VCC) وي، معمولا 5V. دا یو خوندیتوب ځانګړتیا ده چې وسیله د غلط قطبي کیدو څخه ساتي که نښلونکی شاته ولګول شي (په ویډیو کې په 03:27). نور دوه تارونه د ځمکې (GND) او کنټرول سیګنال لپاره دي.

وایرینګ لارښود

Servo-wiring_bb
Servo-pot_wiring

ستاسو Arduino ته د سروو وایرینګ ساده دی. ویډیو د اړیکو روښانه مظاهره چمتو کوي (په ویډیو کې په 04:48). د سروو نښلونکي درې پنونه Arduino سره په لاندې ډول وصل دي:

  • سیګنال تار (اکثرا نارنجي یا ژیړ): دا د Arduino په ډیجیټل PWM پن سره وصل کړئ. مثال پن 9 کاروي.
  • بریښنا تار (اکثرا سور): دا د Arduino په 5V پن سره وصل کړئ.
  • ځمکنی تار (اکثرا نسواري یا تور): دا د Arduino په یو GND پن سره وصل کړئ.

په ویډیو کې، وړاندې کوونکی د نارینه-سره-نارینه DuPont جمپر تارونه کاروي ترڅو د سروو ښځینه نښلونکی د Arduino پن سرلیکونو سره وصل کړي (په ویډیو کې په 05:23).

پروګرام 1: د سروو موټور کنټرول (سویپ)

دا لومړی پروګرام کلاسیک "سویپ" مثال دی. دا د سروو د بشپړ حرکت حد ښودلو لپاره ډیزاین شوی چې دا د 0 او 180 درجو ترمنځ شاته او مخکې حرکت کوي. دا ستاسو د وایرینګ سمتیا تصدیق کولو او ستاسو سروو په عمل کې لیدلو لپاره یوه غوره لار ده. ویډیو د دې کوډ اپلوډ کول او د سروو شاته او مخکې جاروبي لیدل ښیې (په ویډیو کې په 09:21).

د سروو کنټرول لپاره، کوډ لومړی جوړ شوی Servo.h کتابتون شاملوي، کوم چې د اړین کنټرول سیګنالونو تولید پروسه ساده کوي. بیا تاسو یو سروو اعتراض جوړوئ او ورته نوم ورکوئ، لکه myservo. په setup() فنکشن کې، تاسو دا اعتراض د myservo.attach(9) په کارولو سره یو ځانګړي پن سره نښلوئ، Arduino ته وایئ چې د سروو سیګنال تار پن 9 سره وصل دی.

جادو په loop() فنکشن کې پیښیږي، کوم چې د سروو حرکت کولو لپاره دوه for لوپونه کاروي. لومړی لوپ د موقعیت متغیر pos له 0 څخه 180 ته زیاتوي، سروو یو په یو درجه حرکت کوي. دوهم لوپ برعکس کوي، pos له 180 څخه بیرته 0 ته کموي. مهمه برخه د هر لوپ تکرار په پای کې delay(15) ده. دا وقفه سروو ته کافي وخت ورکوي چې د راتلونکي کمانډ لیږلو دمخه فزیکي توګه نوي موقعیت ته حرکت وکړي. پرته له دې ځنډ، سروو به ونه شي کولی تعقیب کړي او به ودریږي یا ولړزیږي (په ویډیو کې په 12:31).

دا مثال د زده کړې لپاره مناسب دی، مګر په ریښتیني غوښتنلیک کې، تاسو به احتمالا غواړئ سروو یو ځانګړي زاویې ته وټاکئ. لکه څنګه چې په ویډیو کې ښودل شوي، تاسو کولی شئ کوډ د for لوپونو په ځای د یو واحد کمانډ لکه myservo.write(90) سره بدل کړئ ترڅو سروو 90 درجو ته حرکت وکړي او هلته یې وساتي (په ویډیو کې په 10:09).

پروګرام 2: د سروو موټور کنټرول (کنوب)

دا دوهم پروګرام د سروو کنټرول یو ګام نور هم وړاندې کوي د پوټینټیومیټر (یو کنوب) په معرفي کولو سره ترڅو د سروو موقعیت باندې ریښتیني وخت، لاسي کنټرول چمتو کړي. دا د دې پوهیدو لپاره یوه ښه لار ده چې څنګه انلاګ انپټ دقیق فزیکي حرکت ته ژباړل کیدی شي.

دا پروګرام په تېر پروګرام باندې جوړېږي او یو پوټینشنومیټر ورزیاتوي. پوټینشنومیټر یو متغیر مقاومت دی چې د انلاګ ولټېج وېشونکي په توګه کار کوي. کله چې تاسو دستګاه وګرځوئ، دا د خپل آوټ پټ پن په ولټېج کې بدلون راولي. اردوینو دا ولټېج د خپلو انلاګ پنونو په یوه پن باندې د انلاګ-ډیجیټل کنورټر (ADC) په کارولو سره لوستلی شي، او دا یې د 0 او 1023 ترمنځ په ارزښت بدلوي.

د دې پروګرام کلیدي برخه د map() فنکشن دی. دا فنکشن یوه شمېره له یوې حد څخه بلې حد ته اندازه کوي. په دې حالت کې، دا د پوټینشنومیټر خام ارزښت (0 تر 1023) د سروو لپاره مناسب ارزښت (0 تر 180 درجو) ته ژباړلو لپاره کارول کېږي. کوډ د پوټینشنومیټر ارزښت د analogRead(potpin) سره لوستلی شي، دا د map(val, 0, 1023, 0, 180) په کارولو سره اندازه کوي، او بیا دا اندازه شوی ارزښت د myservo.write(val) سره سروو ته لیږي. دا یوه مستقیمه اړیکه رامنځته کوي چې دستګاه د منځني نقطې ته وګرځول شي نو سروو به په 90 درجو کې ودرېږي، او همداسې نور.

د کنټرول دا طریقه ډېره هوښیارانه ده او د ډېرو انساني-ماشیني انٹرفیسونو بنسټ دی، له ساده ریموټ کنټرولونو څخه تر پېچلو روبوټیک کنټرولرونو پورې.

ژوندۍ پروژې نندارې

ویډیو د دواړو پروګرامونو ژوندۍ نندارې وړاندې کوي. د سویپ پروګرام لپاره، تاسو کولی شئ د سروو لاس په نرمۍ سره له 0 څخه تر 180 درجو او بېرته حرکت کوي وګورئ. وړاندې کوونکی دا هم ښیي چې څنګه د for لوپ کې د ګام اندازه بدلول (د بیلګې په توګه، له 1 درجې څخه تر 20 درجو) او د ځنډ وخت د سروو چلند بدلوي، چې حرکت ګړندی کوي مګر لږ نرم (په ویډیو کې په 11:19).

د دستګاه پروګرام لپاره، ننداره ښیي چې څنګه د پوټینشنومیټر ګرځول په ریښتیني وخت کې د سروو موقعیت مستقیم کنټرولوي. دا بصري فیډبیک د انلاګ انپټ او فزیکي آوټ پټ ترمنځ د اړیکې د پوهیدو لپاره ډېر ښه دی.

فصلونه

  • [00:00] د سروو موټرو پېژندنه
  • [01:07] د سروو موټرو کارونې
  • [02:57] د سروو موټر اناتومي
  • [04:48] سروو له اردوینو سره نښلول
  • [06:06] د سویپ مثال کوډ سپړنه
  • [09:21] د سویپ پروګرام ننداره
  • [10:04] د سروو دودیز زاویه ټاکل
  • [11:19] د سویپ سرعت او د ګام اندازه بدلول
  • [13:15] د بل سروو موټر مثال

انځورونه

SG90_servo_motor-1
SG90_servo_motor-1
SG90 servo
SG90 servo
Servo-pot_wiring
Servo-pot_wiring
Servo-wiring_bb
Servo-wiring_bb
914-Lesson 18/31: Controlling servo motor (sweep)
ژبه: C++
/*
Lesson 18/31: Controlling servo motor (sweep)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#include <Servo.h>

Servo myservo;  // create Servo object to control a servo
// twelve Servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the Servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
}
915-Lesson 18/31: Controlling servo motor (knob)
ژبه: C++
/*
Lesson 18/31: Controlling servo motor (knob)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include <Servo.h>

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

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

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

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
  delay(15);                           // waits for the servo to get there
}

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

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

فایلونه📁

Arduino کتابتونونه (zip)