کوڈ تلاش کریں

سبق 85: سروو موٹرز کا تعارف | آردوینو سٹیپ بائی سٹیپ کورس

سبق 85: سروو موٹرز کا تعارف | آردوینو سٹیپ بائی سٹیپ کورس

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

یہاں 360-ڈگری سروو کے چند عملی استعمال ہیں:

  • ایک چھوٹی دو پہیوں والی روبوٹ کار بنانا۔
  • ایک پین اور ٹیلٹ کیمرہ ماؤنٹ بنانا جو لامتناہی گھومتا رہے۔
  • ایک چھوٹی کنویئر بیلٹ یا ونچ چلانا۔
  • ایک سادہ ریڈار یا سینسر اسکیننگ پلیٹ فارم بنانا۔

ہارڈویئر اور اجزاء

اس پروجیکٹ کے لیے، آپ کو درج ذیل اجزاء کی ضرورت ہوگی:

  • Arduino بورڈ (مثلاً Uno)
  • مسلسل گردش کرنے والا سروو موٹر (مثلاً FS90R یا اسی جیسا)
  • تین پش بٹن
  • جمپر تار
  • بریڈ بورڈ (اختیاری، آسان وائرنگ کے لیے)

وائرنگ گائیڈ

اس پروجیکٹ کی وائرنگ سیدھی ہے۔ سروو موٹر میں تین تار ہوتے ہیں: عام طور پر براؤن (گراؤنڈ)، سرخ (پاور)، اور نارنجی یا پیلا (سگنل)۔ پش بٹن ایک سادہ ترتیب میں جڑے ہوتے ہیں۔

کنکشنز کی تفصیل یہ ہے:

  • سروو موٹر:
    • براؤن تار (گراؤنڈ) Arduino کے GND پن سے جڑتا ہے۔
    • سرخ تار (پاور) Arduino کے 5V پن سے جڑتا ہے۔
    • نارنجی/پیلا تار (سگنل) Arduino کے پن 9 سے جڑتا ہے۔
  • پش بٹن:
    • ہر بٹن کا ایک رخ Arduino کے GND پن سے جڑا ہوتا ہے۔
    • "Counter-Clockwise" بٹن کا دوسرا رخ پن 2 سے جڑتا ہے۔
    • "Stop" بٹن کا دوسرا رخ پن 3 سے جڑتا ہے۔
    • "Clockwise" بٹن کا دوسرا رخ پن 4 سے جڑتا ہے۔

ویڈیو میں، تخلیق کار اس بات پر زور دیتا ہے کہ سروو کا سگنل تار Arduino کے PWM-قابل پن سے جڑا ہونا چاہیے، جسے اکثر ٹیلڈ (~) علامت سے نشان زد کیا جاتا ہے۔ پن 9 ان پنوں میں سے ایک ہے۔ پش بٹن Arduino کے اندرونی پل-اپ ریزسٹرس استعمال کرتے ہیں، جو بیرونی ریزسٹرس کی ضرورت ختم کرکے وائرنگ کو آسان بناتا ہے (ویڈیو میں 07:02 پر)۔

کوڈ کی وضاحت

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

پنز اور کمانڈز کی ترتیب

کوڈ کے اوپری حصے میں، آپ کو پنز اور سروو کنٹرول ویلیوز کی تعریفیں ملیں گی۔ یہ وہ جگہ ہے جہاں آپ اپنے پروجیکٹ کے رویے کو حسب ضرورت بنا سکتے ہیں۔


const int servoPin = 9;    // سروو سگنل کے لیے PWM پن
const int stopPin = 3;     // اسٹاپ بٹن کے لیے پن
const int cwPin = 4;       // گھڑی کی سمت والے بٹن کے لیے پن
const int ccwPin = 2;      // مخالف گھڑی کی سمت والے بٹن کے لیے پن

یہ مستقل تعریفیں بتاتی ہیں کہ بٹنوں اور سروو سے کون سے Arduino پن جڑے ہوئے ہیں۔ اگر آپ اپنے بٹنوں کے لیے مختلف پن استعمال کرتے ہیں، تو آپ یہاں نمبر تبدیل کریں گے۔ servoPin ایک PWM-قابل پن ہونا چاہیے۔


const int csServoCommand[3] = {106, 52, 0};  // {CCW, STOP, CW}
const String csServoCommandText[3] = {"Counter Clockwise", "Stopped", "Clockwise"};

یہ سمجھنے اور ٹیون کرنے کے لیے سب سے اہم حصہ ہے۔ csServoCommand ارے میں وہ ویلیوز ہیں جو سروو کو بھیجی جاتی ہیں۔ مسلسل سروو کے لیے، یہ ویلیوز زاویہ نہیں بلکہ رفتار اور سمت ظاہر کرتی ہیں۔

  • 106 مکمل رفتار مخالف گھڑی کی سمت گردش کے لیے ویلیو ہے۔
  • 52 مکمل رکنے کے لیے ویلیو ہے۔
  • 0 مکمل رفتار گھڑی کی سمت گردش کے لیے ویلیو ہے۔

یہ ویلیوز عالمگیر نہیں ہیں۔ مینوفیکچرنگ فرق کی وجہ سے، "اسٹاپ" ویلیو (52) کو ایڈجسٹ کرنے کی ضرورت پڑ سکتی ہے۔ اگر آپ کا سروو اسٹاپ بٹن دبانے پر آہستہ سے بہتا ہے، تو آپ کو اس ویلیو کو ٹھیک ٹیون کرنا ہوگا۔ ویڈیو اس عمل کو ظاہر کرتی ہے، جس میں دکھایا گیا ہے کہ ویلیو کو 54 یا 51 میں تبدیل کرنے سے موٹر کے رویے پر کیا اثر پڑتا ہے (ویڈیو میں 13:45 پر)۔

آپ موٹر کی رفتار تبدیل کرنے کے لیے گردش کی ویلیوز کو بھی ایڈجسٹ کر سکتے ہیں۔ مثال کے طور پر، مخالف گھڑی کی سمت کی ویلیو کو 70 پر سیٹ کرنے سے یہ 106 کے مقابلے میں آہستہ گھومے گی (ویڈیو میں 12:23 پر)۔

csServoCommandText ارے میں ٹیکسٹ سٹرنگز ہیں جو موجودہ کمانڈ حالت دکھانے کے لیے سیریل مانیٹر پر پرنٹ ہوتی ہیں۔

کسٹم فنکشن: servoCommand()

کوڈ کمانڈ منطق کو سنبھالنے کے لیے ایک کسٹم فنکشن استعمال کرتا ہے۔ یہ فنکشن ایک نمبر (0، 1، یا 2) بطور دلیل لیتا ہے، اسٹیٹس ٹیکسٹ کو اپ ڈیٹ کرتا ہے، اور سروو کو متعلقہ کمانڈ بھیجتا ہے۔


void servoCommand(int n) {
  statusText = csServoCommandText[n];
  myservo.write(csServoCommand[n]);
  Serial.println(csServoCommandText[n]);
  Serial.println(csServoCommand[n]);
}

یہ فنکشن مرکزی لوپ سے اس وقت کال کیا جاتا ہے جب کوئی بٹن دبایا جاتا ہے۔ یہ ڈسپلے کو اپ ڈیٹ کرنے اور سروو کو کنٹرول کرنے کی منطق کو مرکزی بناتا ہے، جس سے کوڈ صاف اور تبدیل کرنے میں آسان ہو جاتا ہے۔

لائیو پروجیکٹ اور مظاہرہ

ویڈیو میں، تخلیق کار پروجیکٹ کو عملی طور پر دکھاتا ہے۔ "Clockwise" بٹن دبانے سے سروو کو ویلیو 0 بھیجی جاتی ہے، جس سے یہ ایک سمت میں گھومتا ہے۔ "Counter-Clockwise" بٹن دبانے سے ویلیو 106 بھیجی جاتی ہے، جس سے یہ دوسری سمت گھومتا ہے۔ "Stop" بٹن 52 بھیجتا ہے، جو موٹر کو روک دینا چاہیے۔

سیریل مانیٹر موجودہ حالت اور سرو کو بھیجی جانے والی صحیح قدر کو ظاہر کرنے کے لیے استعمال ہوتا ہے۔ یہ ڈیبگنگ اور آپ کے مخصوص موٹر کے لیے بہترین "اسٹاپ" قدر تلاش کرنے کے لیے انتہائی قیمتی ہے۔ جیسا کہ ویڈیو میں نوٹ کیا گیا ہے، سرو کے اندرونی سرکٹری کی وجہ سے اسٹاپ کمانڈ مکمل طور پر درست نہیں ہو سکتی، اور آپ کو آہستہ بہاؤ یا وائبریشن نظر آ سکتی ہے۔ یہ سستے مسلسل سرو کی ایک عام خصوصیت ہے اور کوڈ میں اسٹاپ ویلیو کو ایڈجسٹ کرکے اسے کم کیا جا سکتا ہے (ویڈیو میں 01:15 پر)۔

ابواب

  • [00:05] 360 ڈگری سرو موٹر کا تعارف
  • [02:02] اجزاء اور ہارڈویئر کا جائزہ
  • [02:40] تفصیلی وائرنگ ڈایاگرام اور کنکشنز
  • [05:07] کوڈ کی وضاحت: مستقل، اریز، اور سیٹ اپ
  • [09:56] کوڈ کی وضاحت: سرو کمانڈ فنکشن
  • [10:54] لائیو ڈیموسٹریشن اور سیریل مانیٹر آؤٹ پٹ
  • [12:23] سرو رفتار اور اسٹاپ ویلیوز کو ایڈجسٹ کرنا

تصاویر

SG90 Mini Servo Motor
SG90 Mini Servo Motor
SG90_servo_motor-1
SG90_servo_motor-1
115-Arduino code to control continuous 360° servo from serial monitor command
زبان: C++
/* 
 *  
 *  Demonstration of Controlling Continuous Servo (360 servo)
 *  This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor. 
📚⬇️ Download and resource page https://robojax.com/RJT762
 *  
 * Modified by Ahmad Shamshiri for Robojax.com
 * on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
 * Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
 * Get this code from Robojax.com
 * 
 Original code by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.
 Modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#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
int incomingByte = 0;   // for incoming serial data

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



void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("received: ");
                Serial.print (incomingByte);
                if(incomingByte == 108){
                 Serial.println(" sent 0 Rotating CW "); 
                 myservo.write(0); 
                }else if(incomingByte == 114){
                  Serial.println(" sent 180 Rotating CCW "); 
                  myservo.write(180); 
                }else if(incomingByte == 60){
                  Serial.println(" sent Stopped "); 
                  myservo.write(60); 
                }else{
                  Serial.println(" moving Randomly"); 
                  myservo.write(incomingByte); 
                }
                  
                 
        }

  
}
893-Arduino code to control continuous 360° servo from serial monitor command (Code 2)
زبان: C++
/* 
 *  
 *  Demonstration of Controlling Continuous Servo (360 servo)
360 Servo -2
 *  This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor. 
📚⬇️ Download and resource page https://robojax.com/RJT762
 *  
 * Modified by Ahmad Shamshiri for Robojax.com
 * on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
 * Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
 * Get this code from Robojax.com
 * 
 Original code by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.
 Modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#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 of those with PWM ~
int pos = 0;    // variable to store the servo position
int incomingByte = 0;   // for incoming serial data
int CWBS, CCWBS, SBS;

void setup() {
  Serial.begin(9600);
 pinMode(2,INPUT_PULLUP);// set pin for push button STOP
  pinMode(3,INPUT_PULLUP);// set pin for push button CCW  
  pinMode(4,INPUT_PULLUP);// set pin for push button CW
   
  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
}



void loop() {
    CCWBS = digitalRead(2);// read status of button CCW
    SBS = digitalRead(3);// read status of button STOP
    CWBS = digitalRead(4);// read status of button CW
                 if(CCWBS == LOW){
                 Serial.println(" sent 0 Rotaing CW "); 
                 myservo.write(0); 
                }else if(CWBS == LOW){
                  Serial.println(" sent 180 Rotaing CCW "); 
                  myservo.write(180); 
                }else if(SBS == LOW){
                  Serial.println(" sent Stopped "); 
                  myservo.write(60); 
                }else{
                  Serial.println(" moving Random"); 
                  myservo.write(48); 
                }
                  


  
}// loop 

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

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

فائلیں📁

دیگر فائلیں