کوڈ تلاش کریں

سبق 88: دو پش بٹن سوئچز کے ذریعے سروو موٹر کو کنٹرول کرنا

سبق 88: دو پش بٹن سوئچز کے ذریعے سروو موٹر کو کنٹرول کرنا

یہ پروجیکٹ ظاہر کرتا ہے کہ Arduino کے ساتھ دو پش بٹن استعمال کرکے سروو موٹر کو کیسے کنٹرول کیا جائے۔ پوٹینشیومیٹر یا سیریل کمانڈ پر انحصار کرنے کے بجائے، آپ سادہ ٹیکٹائل سوئچز استعمال کرکے سروو کو دستی طور پر بائیں یا دائیں حرکت دے سکتے ہیں۔ یہ ان ایپلیکیشنز کے لیے انتہائی مفید ہے جہاں آپ کو کسی میکانزم پر براہِ راست، جسمانی کنٹرول کی ضرورت ہوتی ہے، جیسے روبوٹک بازو بنانا، کیمرہ گیمبل کو ایڈجسٹ کرنا، یا ریموٹ کنٹرول پین-اینڈ-ٹیلٹ سسٹم بنانا۔ بٹن آپ کو سروو کے زاویے کو تھوڑا تھوڑا کرکے ایڈجسٹ کرنے کی اجازت دیتے ہیں، اور بٹن کو دبائے رکھنے کی صورت میں یہ اسے اس کی پوری حرکت کی حد تک جھاڑ سکتا ہے۔

یہاں کچھ عملی پروجیکٹ ہیں جو آپ اس سیٹ اپ کے ساتھ بنا سکتے ہیں:

  • روبوٹک بازو یا گریپر کے لیے دستی کنٹرول پینل بنانا۔
  • ریموٹ کنٹرول کیمرہ سلائیڈر یا پین-ٹیلٹ ہیڈ بنانا۔
  • ماڈل ہوائی جہاز یا کشتی کے رڈر کے لیے جسمانی کنٹرول انٹرفیس تیار کرنا۔
  • CNC مشین یا 3D پرنٹر کے لیے پوزیشن ریکارڈ کرنے کے لیے ایک سادہ "ٹیچ پینڈنٹ" بنانا۔

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

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

  • Arduino بورڈ (Uno، Nano، Mega، وغیرہ)
  • سروو موٹر (مثلاً SG90 یا MG995)
  • دو لمحاتی پش بٹن
  • جمپر تار
  • بریڈ بورڈ (اختیاری لیکن تجویز کردہ)

وائرنگ گائیڈ

ویڈیو میں، وائرنگ سیدھی ہے۔ سروو موٹر کا سگنل پن Arduino پر PWM-قابل پن سے منسلک ہے، جو اس مثال میں پن 9 ہے۔ سروو کے لیے پاور اور گراؤنڈ Arduino کے 5V اور GND پنوں سے منسلک ہیں۔ دو پش بٹن ایک دوسرے سے ملتے جلتے طریقے سے وائر کیے گئے ہیں۔ ہر بٹن کی ایک ٹانگ گراؤنڈ سے منسلک ہے، اور دوسری ٹانگ Arduino پر ڈیجیٹل ان پٹ پن سے منسلک ہے (بائیں بٹن کے لیے پن 2 اور دائیں بٹن کے لیے پن 3)۔ کوڈ اندرونی پل-اپ ریزسٹرس استعمال کرتا ہے، لہذا بٹنوں کے لیے بیرونی ریزسٹرس کی ضرورت نہیں ہے۔ (ویڈیو میں 00:57 پر)

Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons

کوڈ کی وضاحت

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

#include <Servo.h>

Servo myservo;  // سروو کو کنٹرول کرنے کے لیے سروو آبجیکٹ بنائیں
int servoPin = 9;// یہ پن ان میں سے ہونا چاہیے جن پر PWM ~ ہو
int angle =90;    // سروو کے لیے ابتدائی زاویہ
int angleStep =5;

#define LEFT 2   // پن 2 بائیں بٹن سے منسلک ہے
#define RIGHT  3  // پن 3 دائیں بٹن سے منسلک ہے
  • servoPin: یہ متغیر Arduino پن کی وضاحت کرتا ہے جس سے سروو کی سگنل تار منسلک ہے۔ ایسا پن استعمال کرنا ضروری ہے جو پلس وڈتھ ماڈیولیشن (PWM) کو سپورٹ کرتا ہو، عام طور پر بورڈ پر ~ علامت سے ظاہر کیا جاتا ہے۔
  • angle: یہ سروو کا ابتدائی زاویہ طے کرتا ہے جب Arduino شروع ہوتا ہے۔ ڈیفالٹ ویلیو 90 ڈگری ہے، جو عام طور پر سروو کو مرکز میں رکھتی ہے۔
  • angleStep: یہ وہ اضافہ ہے جس کے ذریعے ہر بار بٹن دبانے پر سروو کا زاویہ تبدیل ہوتا ہے۔ ویلیو 5 کا مطلب ہے کہ ہر دبانے سے سروو 5 ڈگری حرکت کرے گا۔ آپ تیز حرکت کے لیے اسے بڑھا سکتے ہیں یا باریک کنٹرول کے لیے کم کر سکتے ہیں۔
  • LEFT اور RIGHT: یہ #define ہدایات ڈیجیٹل پنوں کو تفویض کرتی ہیں جن سے پش بٹن منسلک ہیں۔ اگر آپ اپنے بٹنوں کو مختلف پنوں سے وائر کرتے ہیں، تو آپ کو اپنے سیٹ اپ سے مماثل کرنے کے لیے ان اقدار کو تبدیل کرنا ہوگا۔

loop() فنکشن میں بنیادی منطق چیک کرتی ہے کہ آیا کوئی بٹن دبایا گیا ہے (پل-اپ کنفیگریشن کی وجہ سے LOW سگنل پڑھ کر)۔ اگر "دائیں" بٹن دبایا جاتا ہے، تو یہ angle متغیر کو angleStep سے کم کرتا ہے۔ اگر "بائیں" بٹن دبایا جاتا ہے، تو یہ angle کو بڑھاتا ہے۔ کوڈ میں حد کی جانچ شامل ہے تاکہ زاویہ 0 سے 180 ڈگری کی حد کے اندر رہے۔ پھر myservo.write(angle) فنکشن سروو کو نئی پوزیشن پر جانے کا حکم دینے کے لیے استعمال ہوتا ہے۔

لائیو پروجیکٹ ڈیموسٹریشن

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

ویڈیو ابواب

  • [00:00] بٹنوں کے ساتھ سروو کو کنٹرول کرنے کا تعارف
  • [00:57] سروو اور پش بٹنوں کے لیے وائرنگ گائیڈ
  • [02:12] کوڈ کی وضاحت، حصہ 1: سیٹ اپ اور کنفیگریشن
  • [03:25] کوڈ کی وضاحت، حصہ 2: مرکزی لوپ منطق
  • [05:20] پروجیکٹ کا لائیو ڈیموسٹریشن
  • [06:23] نتیجہ اور ممکنہ ایپلیکیشنز

تصاویر

2 pin tactile push button switch
2 pin tactile push button switch
SG90 Mini Servo Motor
SG90 Mini Servo Motor
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons
891-Lesson 88: Servo control with 2 push buttons
زبان: C++
/*
 * S05-05 Servo control with 2 push buttons
 * Download and resource page https://robojax.com/RJT764
 Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
 * 
 * Written by Ahmad Shamshiri for Robojax.com 
 * on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada

  
 * 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/>.
 */
/*
 Controlling a servo with two Push buttons with Arduino
 when Left  push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
 when Right  push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops

*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90;    // initial angle  for servo
int angleStep =5;

#define LEFT 2   // pin 2 is connected to left button
#define RIGHT  3  // pin 3 is connected to right button

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
  pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
  pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
  myservo.write(angle);// send servo to the middle at 90 degrees
 Serial.println("Robojax Servo 2 Buttons ");
}

void loop() {
  // Servo button demo by Robojax.com
  while(digitalRead(RIGHT) == LOW){

    if (angle > 0 && angle <= 180) {
      angle = angle - angleStep;
       if(angle < 0){
        angle = 0;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// while
 // Servo button demo by Robojax.com

  while(digitalRead(LEFT) == LOW){

    // Servo button demo by Robojax.com
    if (angle >= 0 && angle <= 180) {
      angle = angle + angleStep;
      if(angle >180){
        angle =180;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// 

  
}

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

فائلیں📁

دیگر فائلیں