কোড অনুসন্ধান

পাঠ ৮৯: কন্টিনিউয়াস বা ৩৬০ সার্ভো মোটর ব্যবহার করা| আরডুইনো স্টেপ বাই স্টেপ কোর্স

পাঠ ৮৯: কন্টিনিউয়াস বা ৩৬০ সার্ভো মোটর ব্যবহার করা| আরডুইনো স্টেপ বাই স্টেপ কোর্স

আপনি কি কখনও একটি মোটরকে যতক্ষণ খুশি ততক্ষণ যেকোনো দিকে ঘোরাতে চেয়েছেন, সাধারণ সার্ভোর মতো কেবল সামনে-পেছনে দোলানোর পরিবর্তে? একটি কন্টিনিউয়াস বা ৩৬০-ডিগ্রি সার্ভো মোটর ঠিক এই সুবিধাই দেয়। সাধারণ সার্ভো যা একটি নির্দিষ্ট কোণে (সাধারণত ০ থেকে ১৮০ ডিগ্রি) ঘোরে, তার বিপরীতে একটি কন্টিনিউয়াস সার্ভো ঘড়ির কাঁটার দিকে বা বিপরীত দিকে অবিরাম ঘুরতে থাকে। এটি ছোট রোবট, ক্যামেরা প্ল্যাটফর্ম বা যেকোনো প্রকল্পের জন্য উপযুক্ত যেখানে অবিরাম ঘূর্ণন নিয়ন্ত্রণ প্রয়োজন।

এই প্রকল্পে, আমরা মাত্র তিনটি পুশ বাটন ব্যবহার করে একটি ৩৬০-ডিগ্রি সার্ভোর জন্য একটি নিয়ন্ত্রণ ব্যবস্থা তৈরি করব। আপনি সার্ভোকে ঘড়ির কাঁটার দিকে, বিপরীত দিকে ঘোরাতে বা যেকোনো মুহূর্তে থামাতে নির্দেশ দিতে পারবেন। এই গাইডটি আপনাকে ওয়্যারিং সম্পর্কে ধাপে ধাপে জানাবে, কোডের ব্যবহারকারী-কনফিগারযোগ্য অংশগুলো ব্যাখ্যা করবে এবং সিস্টেমের একটি লাইভ ডেমোনস্ট্রেশন দেখাবে।

আপনার নিজের প্রকল্পে একটি কন্টিনিউয়াস সার্ভো ব্যবহারের জন্য এখানে কিছু ব্যবহারিক ধারণা দেওয়া হলো:

  • ছোট দুই-চাকার রোবট তৈরি করুন: চাকা চালানোর জন্য দুটি কন্টিনিউয়াস সার্ভো ব্যবহার করুন, যা সামনে, পিছনে এবং বাঁক নেওয়ার সুবিধা দেবে।
  • প্যান-এন্ড-টিল্ট ক্যামেরা মাউন্ট তৈরি করুন: একটি সিকিউরিটি বা বন্যপ্রাণী ক্যামেরার ধীর, অবিরাম প্যানিংয়ের জন্য একটি কন্টিনিউয়াস সার্ভো ব্যবহার করুন।
  • কনভেয়র বেল্ট স্বয়ংক্রিয় করুন: জিনিস বাছাই বা বিতরণের জন্য একটি ছোট কনভেয়র সিস্টেম নিয়ন্ত্রণ করুন।
  • ঘূর্ণায়মান ডিসপ্লে স্ট্যান্ড ডিজাইন করুন: একটি প্ল্যাটফর্মে ৩D মডেল বা পণ্য প্রদর্শন করুন যা অবিরাম ঘোরে।

প্রয়োজনীয় হার্ডওয়্যার

  • Arduino বোর্ড (Uno, Nano, ইত্যাদি)
  • কন্টিনিউয়াস (৩৬০-ডিগ্রি) সার্ভো মোটর (যেমন FS90R, DS04-NFC)
  • ৩টি পুশ বাটন
  • জাম্পার তার
  • ব্রেডবোর্ড

ওয়্যারিং গাইড

এই প্রকল্পের ওয়্যারিং সহজ। সার্ভো মোটরের তিনটি তার থাকে: সাধারণত গ্রাউন্ডের জন্য একটি গাঢ় রঙের (GND), পাওয়ারের জন্য একটি মাঝের (প্রায়ই লাল) (5V), এবং সিগন্যালের জন্য একটি হালকা রঙের (কমলা, হলুদ বা সাদা)। ভিডিওতে দেখানো হয়েছে, সার্ভোটি Arduino-তে নিম্নরূপে সংযুক্ত করা হয়েছে:

  • সার্ভো গ্রাউন্ড (গাঢ় তার): Arduino GND-তে সংযুক্ত করুন।
  • সার্ভো পাওয়ার (মাঝের/লাল তার): Arduino 5V-তে সংযুক্ত করুন।
  • সার্ভো সিগন্যাল (হালকা তার): Arduino পিন 9-এ সংযুক্ত করুন।

তিনটি পুশ বাটনের জন্য, প্রতিটি বাটনের দুটি পাশ থাকে। সব বাটনের এক পাশ একসাথে সংযুক্ত করে Arduino GND-তে দেওয়া হয়। প্রতিটি বাটনের অন্য পাশটি একটি আলাদা ডিজিটাল পিনে সংযুক্ত থাকে, যেমনটি নিচে বর্ণনা করা হলো (ভিডিওতে ০৩:৪০ মিনিটে):

  • ঘড়ির কাঁটার দিকে (CW) বাটন: Arduino পিন 2-এ সংযুক্ত করুন।
  • স্টপ বাটন: Arduino পিন 3-এ সংযুক্ত করুন।
  • বিপরীত দিকে (CCW) বাটন: Arduino পিন 4-এ সংযুক্ত করুন।
360 servo 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] কে 70 সেট করলে বিপরীত দিকের ঘূর্ণন ধীর হবে। মানটি "স্টপ" মানের (58) যত কাছাকাছি হবে, মোটরটি সেই দিকে তত ধীরে ঘুরবে। 58 থেকে যত দূরে মান হবে, গতি সর্বোচ্চ সীমা পর্যন্ত তত বাড়বে।

আরও কিছু গুরুত্বপূর্ণ ভেরিয়েবল রয়েছে যা আপনাকে পরিবর্তন করতে হতে পারে। servoPin 9 সেট করা আছে, যা আপনার Arduino-তে PWM-সক্ষম একটি পিন হতে হবে। বাটন পিনগুলো কোডের শুরুতে সংজ্ঞায়িত করা আছে এবং প্রয়োজন হলে পরিবর্তন করা যেতে পারে।

int servoPin = 9;// এই পিনটি অবশ্যই PWM ~ সহ একটি হতে হবে

#define STOPpin 3 // স্টপের জন্য পুশ বাটন পিন
#define CWpin 2 // CW-এর জন্য পুশ বাটন
#define CCWpin 4 // CCW-এর জন্য পুশ বাটন

সবশেষে, scText[] অ্যারেতে স্ট্রিংগুলো থাকে যা ডিবাগিংয়ের জন্য সিরিয়াল মনিটরে প্রিন্ট করা হয়। আপনি চাইলে ভিন্ন বার্তা প্রদর্শনের জন্য এগুলো পরিবর্তন করতে পারেন।

কোড ব্যবহারের পদ্ধতি

প্রদত্ত কোডটি আপনার Arduino বোর্ডে আপলোড করুন। স্ট্যাটাস বার্তা দেখতে সিরিয়াল মনিটর খুলুন (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(")");
}

আপনাকে যা প্রয়োজন হতে পারে

সম্পদ ও রেফারেন্সসমূহ

ফাইলসমূহ📁

অন্যান্য ফাইলগুলি