کوڈ تلاش کریں

سبق 89: کنٹینیوئس یا 360 سروو موٹر کا استعمال | Arduino سٹیپ بائی سٹیپ کورس

سبق 89: کنٹینیوئس یا 360 سروو موٹر کا استعمال | Arduino سٹیپ بائی سٹیپ کورس

کیا آپ نے کبھی کسی موٹر کو کسی بھی سمت میں اس وقت تک گھمانا چاہا ہے جب تک آپ چاہیں، بجائے اس کے کہ وہ معیاری سروو کی طرح آگے پیچھے جھولتی رہے؟ یہ بالکل وہی ہے جو ایک مسلسل یا 360 ڈگری سروو موٹر پیش کرتی ہے۔ معیاری سروو کے برعکس جو ایک مخصوص زاویے (عام طور پر 0 سے 180 ڈگری) تک حرکت کرتی ہے، ایک مسلسل سروو گھڑی کی سمت یا مخالف سمت میں لامتناہی گھومتی رہتی ہے۔ یہ اسے چھوٹے روبوٹس، کیمرہ پلیٹ فارمز، یا کسی بھی پروجیکٹ کے لیے بہترین بناتا ہے جس میں مسلسل گردش کنٹرول کی ضرورت ہو۔

اس پروجیکٹ میں، ہم صرف تین پش بٹنوں کا استعمال کرتے ہوئے 360 ڈگری سروو کے لیے ایک کنٹرول سسٹم بنائیں گے۔ آپ سروو کو گھڑی کی سمت، مخالف سمت گھمانے، یا کسی بھی لمحے روکنے کا حکم دے سکیں گے۔ یہ گائیڈ آپ کو وائرنگ کے بارے میں بتائے گی، کوڈ کے صارف کے قابل ترتیب حصوں کی وضاحت کرے گی، اور سسٹم کا لائیو مظاہرہ دکھائے گی۔

اپنے پروجیکٹس میں مسلسل سروو استعمال کرنے کے لیے چند عملی خیالات یہ ہیں:

  • ایک چھوٹا دو پہیوں والا روبوٹ بنائیں: پہیوں کو چلانے کے لیے دو مسلسل سرووز استعمال کریں، جس سے آگے، پیچھے اور مڑنے کی حرکت ممکن ہو۔
  • پین اور ٹیلٹ کیمرہ ماؤنٹ بنائیں: سیکیورٹی یا وائلڈ لائف کیمرے کی سست، لامتناہی گردش کے لیے ایک مسلسل سروو استعمال کریں۔
  • کنویئر بیلٹ کو خودکار بنائیں: اشیاء کو چھانٹنے یا نکالنے کے لیے ایک چھوٹا کنویئر سسٹم کنٹرول کریں۔
  • گھومنے والا ڈسپلے اسٹینڈ ڈیزائن کریں: کسی 3D ماڈل یا پروڈکٹ کو ایسے پلیٹ فارم پر دکھائیں جو مسلسل گھومتا ہو۔

مطلوبہ ہارڈویئر

  • آرڈوینو بورڈ (Uno، Nano، وغیرہ)
  • مسلسل (360 ڈگری) سروو موٹر (مثلاً FS90R، DS04-NFC)
  • 3x پش بٹن
  • جمپر تار
  • بریڈ بورڈ

وائرنگ گائیڈ

اس پروجیکٹ کی وائرنگ سیدھی ہے۔ سروو موٹر میں تین تاریں ہوتی ہیں: عام طور پر ایک گہری تار گراؤنڈ (GND) کے لیے، ایک درمیانی (اکثر سرخ) پاور (5V) کے لیے، اور ایک ہلکی (نارنجی، پیلی، یا سفید) سگنل کے لیے۔ جیسا کہ ویڈیو میں دکھایا گیا ہے، سروو کو آرڈوینو سے اس طرح جوڑا گیا ہے:

  • سروو گراؤنڈ (گہری تار): آرڈوینو GND سے جوڑیں۔
  • سروو پاور (درمیانی/سرخ تار): آرڈوینو 5V سے جوڑیں۔
  • سروو سگنل (ہلکی تار): آرڈوینو پن 9 سے جوڑیں۔

تین پش بٹنوں کے لیے، ہر بٹن کے دو رخ ہوتے ہیں۔ تمام بٹنوں کا ایک رخ آپس میں جوڑ کر آرڈوینو GND سے منسلک کیا جاتا ہے۔ ہر بٹن کا دوسرا رخ ایک علیحدہ ڈیجیٹل پن سے منسلک ہوتا ہے، جیسا کہ ذیل میں بیان کیا گیا ہے (ویڈیو میں 03:40 پر):

  • گھڑی کی سمت (CW) بٹن: آرڈوینو پن 2 سے جوڑیں۔
  • اسٹاپ بٹن: آرڈوینو پن 3 سے جوڑیں۔
  • مخالف سمت (CCW) بٹن: آرڈوینو پن 4 سے جوڑیں۔
360 servo 3 push button wiring

کوڈ کی وضاحت

کوڈ آسانی سے قابل ترتیب بنایا گیا ہے۔ سب سے اہم حصہ جسے آپ کو ایڈجسٹ کرنے کی ضرورت ہوگی وہ sc[] ارے ہے، جس میں سروو کو اس کی حرکات کنٹرول کرنے کے لیے بھیجی جانے والی مخصوص PWM قدریں ہوتی ہیں۔ یہ قدریں عالمگیر نہیں ہیں اور آپ کی مخصوص سروو موٹر کے لیے کیلیبریٹ کی جانی چاہئیں (ویڈیو میں 12:23 پر)۔

int sc[]={106, 58, 0};// سروو کمانڈز ترتیب میں ہیں
        //CCW، STOP، CW

یہ ارے کیلیبریشن کا مرکز ہے۔ قدریں اس ترتیب میں استعمال ہوتی ہیں:

  • sc[0] = 106: یہ قدر سروو کو مخالف سمت گھمانے کے لیے بھیجی جاتی ہے۔
  • sc[1] = 58: یہ "اسٹاپ" قدر ہے۔ اندرونی سرکٹری کی وجہ سے، وہ صحیح قدر جو موٹر کو روکتی ہے مختلف ہوتی ہے۔ آپ دیکھ سکتے ہیں کہ آپ کی سروو اس کمانڈ کے باوجود آہستہ گھومتی ہے، اور آپ کو اپنی موٹر کے لیے حقیقی "مکمل اسٹاپ" قدر تلاش کرنے کے لیے اس نمبر کو تھوڑا ایڈجسٹ کرنا ہوگا۔
  • sc[2] = 0: یہ قدر سروو کو زیادہ سے زیادہ رفتار سے گھڑی کی سمت گھماتی ہے۔

آپ گردش کی رفتار تبدیل کرنے کے لیے sc[] ارے میں قدریں ایڈجسٹ کر سکتے ہیں۔ مثال کے طور پر، sc[0] کو 70 پر سیٹ کرنے سے مخالف سمت کی گردش سست ہو جائے گی۔ قدر جتنی "اسٹاپ" قدر (58) کے قریب ہوگی، موٹر اس سمت میں اتنی ہی آہستہ گھومے گی۔ 58 سے دور قدریں رفتار کو زیادہ سے زیادہ حد تک بڑھا دیں گی۔

کچھ دیگر اہم متغیرات بھی ہیں جنہیں آپ تبدیل کر سکتے ہیں۔ servoPin کو 9 پر سیٹ کیا گیا ہے، جو آپ کے آرڈوینو پر PWM قابل پن ہونا چاہیے۔ بٹن پن کوڈ کے شروع میں بیان کیے گئے ہیں اور ضرورت پڑنے پر تبدیل کیے جا سکتے ہیں۔

int servoPin = 9;// یہ پن ان میں سے ایک ہونا چاہیے جن پر PWM ~ ہو

#define STOPpin 3 // اسٹاپ کے لیے پش بٹن پن
#define CWpin 2 // CW کے لیے پش بٹن
#define CCWpin 4 // CCW کے لیے پش بٹن

آخر میں، scText[] ارے میں وہ سٹرنگز ہیں جو ڈیبگنگ کے لیے سیریل مانیٹر پر پرنٹ کی جاتی ہیں۔ اگر آپ مختلف پیغامات دکھانا چاہیں تو انہیں تبدیل کر سکتے ہیں۔

کوڈ استعمال کرنے کا طریقہ

فراہم کردہ کوڈ کو اپنے آرڈوینو بورڈ پر اپ لوڈ کریں۔ اسٹیٹس پیغامات دیکھنے کے لیے سیریل مانیٹر (9600 باؤڈ پر سیٹ) کھولیں۔ اب آپ تین بٹنوں کا استعمال کرتے ہوئے سروو کو کنٹرول کر سکتے ہیں:

  • CW بٹن دبائیں اور تھامیں: سروو گھڑی کی سمت گھومنا شروع کر دے گی۔ سیریل مانیٹر "CW" اور بھیجی جانے والی قدر دکھائے گا۔
  • CCW بٹن دبائیں اور تھامیں: سروو مخالف سمت گھومنا شروع کر دے گی۔ سیریل مانیٹر "CCW" اور بھیجی جانے والی قدر دکھائے گا۔
  • اسٹاپ بٹن دبائیں: سروو رکنے کی کوشش کرے گی۔ سیریل مانیٹر "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] سروو رفتار اور اسٹاپ ویلیوز کی کیلیبریشن

تصاویر

360 servo 3 push button wiring
360 servo 3 push button wiring
209-How to control a 360 servo with push buttons
زبان: 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(")");
}

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

فائلیں📁

دیگر فائلیں