Search Code

لومړی ۸۹: د دوامداره یا ۳۶۰ سرو موټر کارول | د آردوینو ګام په ګام کورس

لومړی ۸۹: د دوامداره یا ۳۶۰ سرو موټر کارول | د آردوینو ګام په ګام کورس

آیا تاسو کله هم غوښتي چې موټور په هر لوري کې دومره وګرځوئ څومره چې غواړئ، نه یوازې د معیاري سروو په څیر شاته او مخکې حرکت وکړئ؟ دا په حقیقت کې هغه څه دي چې دوامداره یا ۳۶۰ درجې سروو موټور یې وړاندې کوي. د معیاري سروو برعکس چې یو ځانګړي زاویې ته حرکت کوي (معمولا ۰ تر ۱۸۰ درجو)، دوامداره سروو په بې پایه توګه په ساعت لوري یا د ساعت مخالف لوري کې ګرځي. دا د کوچنیو روبوټونو، کیمرې پلیټ فارمونو، یا هر هغه پروژې لپاره مناسب کوي چې دوامداره ګرځېدنې کنټرول ته اړتیا لري.

په دې پروژه کې، موږ به د ۳۶۰ درجې سروو لپاره د کنټرول سیسټم جوړ کړو چې یوازې درې پش بټنونه کاروي. تاسو به وکولی شئ سروو ته امر وکړئ چې په ساعت لوري، د ساعت مخالف لوري، یا په هر وخت کې ودریږي. دا لارښود به تاسو ته د تارونو نښلول تشریح کړي، د کوډ هغه برخې تشریح کړي چې کاروونکي یې بدلولی شي، او د سیسټم ژوندۍ نندارې به تاسو ته وښیې.

دلته ستاسو په خپلو پروژو کې د دوامداره سروو کارولو لپاره څو عملي نظرونه دي:

  • کوچنی دوه څرخه روبوټ جوړ کړئ: دوه دوامداره سرووګانې د څرخونو د چلولو لپاره وکاروئ، چې مخکې، شاته، او د ګرځېدو حرکتونو ته اجازه ورکوي.
  • د پین او ټیلټ کیمرې ماونټ جوړ کړئ: د امنیت یا ځنګلي ژوند کیمرې د ورو، بې پایه پیننګ لپاره یو دوامداره سروو وکاروئ.
  • د لیږدونکي کمربند اتومات کړئ: د توکو د ترتیب یا ویشلو لپاره یو کوچنی لیږدونکی سیسټم کنټرول کړئ.
  • د ګرځېدونکي نندارې سټینډ ډیزاین کړئ: یو ۳D ماډل یا محصول په هغه پلیټ فارم کې وښیئ چې په دوامداره توګه ګرځي.

اړین هارډویر

  • ارډوینو بورډ (Uno، Nano، او داسې نور)
  • دوامداره (۳۶۰ درجې) سروو موټور (لکه FS90R، DS04-NFC)
  • ۳x پش بټنونه
  • جمپر تارونه
  • بریډبورډ

د تارونو نښلولو لارښود

د دې پروژې لپاره د تارونو نښلول ساده دي. د سروو موټور درې تارونه لري: معمولا یو تیاره د ځمکې (GND) لپاره، یو منځنی (اکثره سور) د بریښنا (5V) لپاره، او یو روښانه (نارنجي، ژیړ، یا سپین) د سیګنال لپاره. لکه څنګه چې په ویډیو کې ښودل شوي، سروو په لاندې ډول ارډوینو سره نښلول شوی:

  • د سروو ځمکه (تیاره تار): د ارډوینو GND سره وصل کړئ.
  • د سروو بریښنا (منځنی/سور تار): د ارډوینو 5V سره وصل کړئ.
  • د سروو سیګنال (روښانه تار): د ارډوینو پن ۹ سره وصل کړئ.

د دریو پش بټنونو لپاره، هر بټن دوه اړخونه لري. د ټولو بټنونو یو اړخ یوځای سره نښلول شوی او بیا د ارډوینو GND سره. د هر بټن بل اړخ یو جلا ډیجیټل پن سره نښلول شوی، لکه څنګه چې لاندې تشریح شوي (په ویډیو کې په ۰۳:۴۰):

  • د ساعت لوري (CW) بټن: د ارډوینو پن ۲ سره وصل کړئ.
  • د ودرو بټن: د ارډوینو پن ۳ سره وصل کړئ.
  • د ساعت مخالف لوري (CCW) بټن: د ارډوینو پن ۴ سره وصل کړئ.
360_Serrvo_3_push_button_wiring

د کوډ تشریح

کوډ د اسانه تنظیم وړ ډیزاین شوی. تر ټولو مهمه برخه چې تاسو یې باید تنظیم کړئ د sc[] ارې ده، چې هغه ځانګړي PWM ارزښتونه لري چې د سروو د کړنو کنټرول لپاره ورته لیږل کیږي. دا ارزښتونه نړیوال ندي او باید ستاسو د ځانګړي سروو موټور لپاره کیلیبریټ شي (په ویډیو کې په ۱۲:۲۳).

int sc[]={106, 58, 0};// د سروو کمانډونه په ترتیب سره دي
        //CCW، STOP، CW

دا اره د کیلیبریشن زړه ده. ارزښتونه په دې ترتیب کارول کیږي:

  • sc[0] = 106: دا ارزښت د سروو د ساعت مخالف لوري ته د ګرځولو لپاره لیږل کیږي.
  • sc[1] = 58: دا د "ودرو" ارزښت دی. د داخلي سرکټري له امله، هغه دقیق ارزښت چې موټور ودروي توپیر لري. تاسو ممکن ومومئ چې ستاسو سروو ورو ورو ګرځي حتی کله چې دا کمانډ لیږل کیږي، او تاسو به اړتیا ولرئ چې دا شمېره لږ څه تنظیم کړئ ترڅو ستاسو د موټور لپاره ریښتینی "مړ ودرو" ارزښت ومومئ.
  • sc[2] = 0: دا ارزښت سروو په اعظمي سرعت سره په ساعت لوري ګرځوي.

تاسو کولی شئ د sc[] ارې کې ارزښتونه تنظیم کړئ ترڅو د ګرځېدو سرعت بدل کړئ. د مثال په توګه، sc[0] ته ۷۰ ټاکل به د ساعت مخالف لوري ګرځېدنه ورو کړي. هرڅومره چې ارزښت د "ودرو" ارزښت (۵۸) ته نږدې وي، هومره به موټور په هغه لوري کې ورو وګرځي. له ۵۸ څخه لرې ارزښتونه به سرعت تر اعظمي حد پورې زیات کړي.

دلته ځینې نور کلیدي متغیرونه هم شتون لري چې تاسو یې ممکن بدلولو ته اړتیا ولرئ. servoPin په ۹ ټاکل شوی، کوم چې باید ستاسو په ارډوینو کې د PWM وړ پن وي. د بټن پنونه د کوډ په پورتنۍ برخه کې تعریف شوي او که اړتیا وي بدلیدلی شي.

int servoPin = 9;// دا پن باید د PWM ~ لرونکو پنونو څخه وي

#define STOPpin 3 // د ودرو لپاره پش بټن پن
#define CWpin 2 //  د CW لپاره پش بټن
#define CCWpin 4 // د CCW لپاره پش بټن

په پای کې، د scText[] اره هغه سټرینګونه لري چې د ډیبګ کولو لپاره سریال مانیټر ته چاپ کیږي. که تاسو غواړئ مختلف پیغامونه وښیئ، تاسو کولی شئ دا بدل کړئ.

د کوډ کارولو څرنګوالی

چمتو شوی کوډ خپل ارډوینو بورډ ته اپلوډ کړئ. د حالت پیغامونو لیدو لپاره سریال مانیټر خلاص کړئ (۹۶۰۰ باود ته ټاکل شوی). تاسو اوس کولی شئ د دریو بټنونو په کارولو سره سروو کنټرول کړئ:

  • د CW بټن فشار ورکړئ او ونیسئ: سروو به په ساعت لوري ګرځیدل پیل کړي. سریال مانیټر به "CW" او هغه ارزښت وښیې چې لیږل کیږي.
  • د CCW بټن فشار ورکړئ او ونیسئ: سروو به د ساعت مخالف لوري ته ګرځیدل پیل کړي. سریال مانیټر به "CCW" او هغه ارزښت وښیې چې لیږل کیږي.
  • د ودرو بټن فشار ورکړئ: سروو به د ودرو هڅه وکړي. سریال مانیټر به "Stop" وښیې.

که ستاسو سروو د بند (Stop) تڼۍ د فشارولو پر مهال په بشپړه توګه نه دریږي، نو تاسو اړتیا لرئ چې د sc[] ارې کې د sc[1] ارزښت تنظیم (کیلیبریټ) کړئ. هڅه وکړئ چې ارزښت یو څه بدل کړئ (د بیلګې په توګه، له 58 څخه 54 یا 52 ته) او کوډ بیا پورته کړئ تر هغه چې موټور په بشپړه توګه بې حرکته پاتې شي.

ژوندۍ ننداره

په ویډیو کې، وړاندې کوونکی بشپړ سیستم نندارې ته وړاندې کوي. تاسو کولی شئ وګورئ چې سروو د تڼۍ د فشارولو پر بنسټ په دواړو لورو ګرځي. د سیریل مانیټر محصول هم ښودل کیږي، چې اوسنی حالت ("CW"، "Stop"، یا "CCW") او هغه ځانګړی ارزښت ښیې چې سروو ته لیږل کیږي. دا د ستونزو موندلو او ستاسو د ځانګړي موټور لپاره د بشپړ تنظیم ارزښتونو موندلو لپاره یوه ښه وسیله ده. ننداره دا هم ښیې چې څنګه د sc[] ارې کې د ارزښتونو تنظیم کول په مستقیم ډول د موټور په سرعت اغیزه کوي، د ورو حرکت څخه تر اعظمي ګرځیدو سرعت پورې.

پایله

دا پروژه د دوامداره سروو موټور د کنټرول لپاره یوه ساده او اغیزمنه لار برابروي. د "بند" ارزښت د تنظیم پروسې په پوهیدو سره، تاسو کولی شئ په خپلو روبوټیک او اتوماتیک پروژو کې دقیق کنټرول ډاډمن کړئ.

د ویډیو فصلونه

  • [00:05] د دوامداره سروو موټور پیژندنه
  • [02:02] د سروو هارډویر کتنه
  • [02:40] د تارونو ډیاګرام او اړیکې
  • [05:07] د کوډ تشریح: متغیرونه او ترتیب
  • [08:03] د کوډ تشریح: اصلي لوپ منطق
  • [09:56] د servoCommand() فنکشن
  • [10:54] ژوندۍ ننداره او د سیریل مانیټر محصول
  • [12:23] د سروو سرعت او بند ارزښتونو تنظیم کول

Images

360_Serrvo_3_push_button_wiring
360_Serrvo_3_push_button_wiring
209-How to control a 360 servo with push buttons
Language: C++
++
/*
 *  S05-13 Servo with 3 push buttons
 *  Demonstration of Controlling a Continuous Servo (360 servo)
 *  This code allows you to control a 360-degree servo using push buttons
 *
 * Modified by Ahmad Shamshiri for Robojax Robojax.com
 * on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
 Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww

 Watch Introduction to  360 Servo video with code: https://youtu.be/b_xvu6wWafA
 You can get the wiring diagram from my Arduino Course at Udemy.com
 Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
 visit my course now http://robojax.com/L/?id=62

 If you found this tutorial helpful, please support me so I can continue creating
 content like this. 
 or make a donation using PayPal http://robojax.com/L/?id=64

 Original code by BARRAGAN <http://barraganstudio.com>
 *
 * Code is available at http://robojax.com/learn/arduino

 * 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 downloaded 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 servoPin = 9;// this pin must be one of those with PWM ~


#define STOPpin 3 // push button pin  for STOP
#define CWpin 2 //  push button for CW
#define CCWpin 4 // push button for CCW

int sc[]={106, 58, 0};// servo commands are in order
        //CCW, STOP,CW

String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
      //CW button status (CWBS)
      //CCW button status (CCWBS)
      //stop button status (SBS)

void setup() {
  Serial.begin(9600);
  pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
  pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
  pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW

  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
  myservo.write(sc[1]);// send STOP command
  statusText=1;// initial value is STOP
}



void loop() {

    CCWBS = digitalRead(CCWpin);// read status of button CCW
    SBS = digitalRead(STOPpin);// read status of button STOP
    CWBS = digitalRead(CWpin);// read status of button CW

    if(CCWBS ==LOW)
    {
      servoCommand(0);
    }else if(SBS ==LOW)
    {
      servoCommand(1);
    }else if(CWBS ==LOW)
    {
      servoCommand(2);
    }

  Serial.println(scText[statusText]);
  delay(50);
}// loop



void servoCommand(int n)
{
   statusText = n;
   myservo.write(sc[n]);
   Serial.print("Going to  ");
   Serial.print(scText[n]);
   Serial.print( "(");
   Serial.print(sc[n]);
   Serial.println(")");
}

Things you might need

Resources & references

Files📁

Other files