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

পাঠ ১৮/৩১: আরডুইনোর সাথে সার্ভো মোটর ব্যবহার করা সানফাউন্ডারের আরডুইনো কিট

পাঠ ১৮/৩১: আরডুইনোর সাথে সার্ভো মোটর ব্যবহার করা সানফাউন্ডারের আরডুইনো কিট

সার্ভো মোটর হলো অসংখ্য রোবোটিক্স এবং রিমোট-কন্ট্রোল প্রকল্পের কাজের ঘোড়া, যা স্টিয়ারিং মেকানিজম থেকে রোবোটিক আর্ম পর্যন্ত সবকিছুর জন্য সুনির্দিষ্ট কৌণিক নিয়ন্ত্রণ প্রদান করে। এই গাইডটি, SunFounder Arduino কিট কোর্সের পাঠ ১৮-এর উপর ভিত্তি করে, আপনাকে Arduino-এর সাথে একটি সার্ভো মোটর ব্যবহারের মৌলিক বিষয়গুলির মাধ্যমে পরিচালিত করবে। আপনি হার্ডওয়্যার সংযোগ করতে এবং দুটি ভিন্ন পদ্ধতি ব্যবহার করে মোটরের অবস্থান নিয়ন্ত্রণ করতে শিখবেন: একটি সাধারণ সুইপিং গতি এবং একটি নব-নিয়ন্ত্রিত অবস্থান। এখানে আপনি যে জ্ঞান অর্জন করবেন তা অত্যন্ত ব্যবহারিক এবং বিস্তৃত প্রকল্পে প্রয়োগ করা যেতে পারে, যার মধ্যে রয়েছে:

  • একটি রোবোটিক আর্ম তৈরি করা যা নির্ভুলতার সাথে বস্তু ধরতে এবং সরাতে পারে।
  • স্টিয়ারিংয়ের জন্য সার্ভো সহ একটি রিমোট-কন্ট্রোল গাড়ি বা নৌকা তৈরি করা।
  • একটি সোলার ট্র্যাকার তৈরি করা যা শক্তি সংগ্রহ সর্বাধিক করতে সূর্যকে অনুসরণ করে।
  • নজরদারি বা ফটোগ্রাফির জন্য একটি প্যান-এবং-টিল্ট ক্যামেরা মাউন্ট নির্মাণ করা।
  • একটি মডেল বিমানের নিয়ন্ত্রণ পৃষ্ঠ, যেমন রাডার বা আইলরন, স্বয়ংক্রিয় করা।

হার্ডওয়্যার ওভারভিউ

কোডে ডুব দেওয়ার আগে, সার্ভো মোটরটি নিজেই বোঝা অপরিহার্য। ভিডিওতে যেমন প্রদর্শিত হয়েছে, একটি সার্ভো মোটর একটি স্ট্যান্ডার্ড DC মোটরের মতো ক্রমাগত ঘোরে না। পরিবর্তে, এটি একটি নির্দিষ্ট কৌণিক অবস্থানে ঘোরে, সাধারণত ০ থেকে ১৮০ ডিগ্রির মধ্যে। এটি সুনির্দিষ্ট চলাচলের প্রয়োজন এমন অ্যাপ্লিকেশনের জন্য আদর্শ করে তোলে। ভিডিওটি বেশ কয়েকটি উদাহরণ তুলে ধরে, একটি RC গাড়ি চালানো থেকে শুরু করে একটি রোবোটিক আর্মের জটিল জয়েন্ট নিয়ন্ত্রণ পর্যন্ত (ভিডিওতে ০০:০৬-এ)।

সার্ভো বিভিন্ন আকারে আসে, যার শারীরিক আকার এবং টর্ক রেটিং তাদের দাম এবং প্রয়োগ নির্ধারণ করে। একটি ছোট মাইক্রো সার্ভো হালকা মডেলের জন্য নিখুঁত, যখন একটি বড়, আরও শক্তিশালী সার্ভো ভারী কাজের জন্য প্রয়োজন যেমন একটি "খুব শক্তিশালী বা মোটা গাড়ি" চালানো (ভিডিওতে ০১:৫৯-এ)।

বেশিরভাগ শখের সার্ভোতে একটি স্ট্যান্ডার্ড সংযোগকারীতে তিনটি তার থাকে। ভিডিওটি একটি চতুর ডিজাইন পছন্দ ব্যাখ্যা করে: মাঝের তারটি সর্বদা পাওয়ার তার (VCC), সাধারণত ৫V। এটি একটি সুরক্ষা বৈশিষ্ট্য যা সংযোগকারীটি পিছনের দিকে প্লাগ করা হলে ডিভাইসটিকে ভুল পোলারিটি থেকে রক্ষা করে (ভিডিওতে ০৩:২৭-এ)। অন্য দুটি তার গ্রাউন্ড (GND) এবং নিয়ন্ত্রণ সংকেতের জন্য।

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

Servo-wiring_bb
Servo-pot_wiring

সার্ভোটিকে আপনার Arduino-তে ওয়্যার করা সহজ। ভিডিওটি সংযোগগুলির একটি স্পষ্ট প্রদর্শন প্রদান করে (ভিডিওতে ০৪:৪৮-এ)। সার্ভো সংযোগকারীর তিনটি পিন নিম্নরূপ Arduino-তে সংযুক্ত:

  • সিগন্যাল তার (প্রায়শই কমলা বা হলুদ): এটি Arduino-তে একটি ডিজিটাল PWM পিনে সংযুক্ত করুন। উদাহরণটি পিন ৯ ব্যবহার করে।
  • পাওয়ার তার (প্রায়শই লাল): এটি Arduino-তে ৫V পিনে সংযুক্ত করুন।
  • গ্রাউন্ড তার (প্রায়শই বাদামী বা কালো): এটি Arduino-তে GND পিনগুলির একটিতে সংযুক্ত করুন।

ভিডিওতে, উপস্থাপক সার্ভোর মহিলা সংযোগকারীকে Arduino-এর পিন হেডারগুলির সাথে সংযোগ করতে পুরুষ-থেকে-পুরুষ DuPont জাম্পার তার ব্যবহার করেন (ভিডিওতে ০৫:২৩-এ)।

প্রোগ্রাম ১: সার্ভো মোটর নিয়ন্ত্রণ (সুইপ)

এই প্রথম প্রোগ্রামটি ক্লাসিক "সুইপ" উদাহরণ। এটি ০ এবং ১৮০ ডিগ্রির মধ্যে সামনে এবং পিছনে সরিয়ে সার্ভোর গতির সম্পূর্ণ পরিসর প্রদর্শনের জন্য ডিজাইন করা হয়েছে। এটি আপনার ওয়্যারিং সঠিক কিনা তা যাচাই করার এবং আপনার সার্ভোকে কাজ করতে দেখার একটি দুর্দান্ত উপায়। ভিডিওটি এই কোড আপলোড করা এবং সার্ভোটিকে সামনে এবং পিছনে সুইপ করতে দেখা প্রদর্শন করে (ভিডিওতে ০৯:২১-এ)।

সার্ভো নিয়ন্ত্রণ করতে, কোডটি প্রথমে অন্তর্নির্মিত Servo.h লাইব্রেরি অন্তর্ভুক্ত করে, যা প্রয়োজনীয় নিয়ন্ত্রণ সংকেত তৈরি করার প্রক্রিয়াটি সহজ করে। তারপর আপনি একটি সার্ভো অবজেক্ট তৈরি করেন এবং এটিকে একটি নাম দেন, যেমন myservosetup() ফাংশনে, আপনি myservo.attach(9) ব্যবহার করে এই অবজেক্টটিকে একটি নির্দিষ্ট পিনে সংযুক্ত করেন, Arduino-কে জানান যে সার্ভোর সিগন্যাল তারটি পিন ৯-এ সংযুক্ত।

জাদুটি loop() ফাংশনে ঘটে, যা সার্ভো সরাতে দুটি for লুপ ব্যবহার করে। প্রথম লুপটি একটি অবস্থান ভেরিয়েবল pos ০ থেকে ১৮০ পর্যন্ত বৃদ্ধি করে, সার্ভোটিকে একবারে এক ডিগ্রি সরিয়ে। দ্বিতীয় লুপটি বিপরীত করে, pos ১৮০ থেকে ০-তে হ্রাস করে। গুরুত্বপূর্ণ অংশটি প্রতিটি লুপ পুনরাবৃত্তির শেষে delay(15)। এই বিরতি সার্ভোটিকে পরবর্তী কমান্ড পাঠানোর আগে শারীরিকভাবে নতুন অবস্থানে যাওয়ার জন্য যথেষ্ট সময় দেয়। এই বিলম্ব ছাড়া, সার্ভো তাল মিলিয়ে চলতে পারত না এবং থেমে যেত বা কাঁপত (ভিডিওতে ১২:৩১-এ)।

এই উদাহরণটি শেখার জন্য নিখুঁত, তবে একটি বাস্তব অ্যাপ্লিকেশনে, আপনি সম্ভবত সার্ভোটিকে একটি নির্দিষ্ট কোণে সেট করতে চাইবেন। ভিডিওতে যেমন দেখানো হয়েছে, আপনি for লুপগুলিকে myservo.write(90)-এর মতো একটি একক কমান্ড দিয়ে প্রতিস্থাপন করে কোডটি পরিবর্তন করতে পারেন যাতে সার্ভোটিকে ৯০ ডিগ্রিতে সরানো যায় এবং সেখানে ধরে রাখা যায় (ভিডিওতে ১০:০৯-এ)।

প্রোগ্রাম ২: সার্ভো মোটর নিয়ন্ত্রণ (নব)

এই দ্বিতীয় প্রোগ্রামটি সার্ভো নিয়ন্ত্রণকে আরও এক ধাপ এগিয়ে নিয়ে যায় একটি পটেনশিওমিটার (একটি নব) প্রবর্তন করে যা সার্ভোর অবস্থানের উপর রিয়েল-টাইম, ম্যানুয়াল নিয়ন্ত্রণ প্রদান করে। এটি বোঝার একটি চমত্কার উপায় যে কীভাবে অ্যানালগ ইনপুট সুনির্দিষ্ট শারীরিক গতিতে অনুবাদ করা যেতে পারে।

এই প্রোগ্রামটি পূর্ববর্তী প্রোগ্রামের উপর ভিত্তি করে একটি পটেনশিওমিটার যোগ করে। পটেনশিওমিটার হলো একটি পরিবর্তনশীল রোধ যা অ্যানালগ ভোল্টেজ ডিভাইডার হিসেবে কাজ করে। যখন আপনি নব ঘোরান, এটি তার আউটপুট পিনে ভোল্টেজ পরিবর্তন করে। আরডুইনো তার একটি অ্যানালগ পিনে অ্যানালগ-টু-ডিজিটাল কনভার্টার (ADC) ব্যবহার করে এই ভোল্টেজটি পড়ে, যা ০ থেকে ১০২৩ এর মধ্যে একটি মানে রূপান্তরিত করে।

এই প্রোগ্রামের মূল বিষয় হলো map() ফাংশন। এই ফাংশনটি একটি সংখ্যাকে এক রেঞ্জ থেকে অন্য রেঞ্জে স্কেল করে। এই ক্ষেত্রে, এটি পটেনশিওমিটারের কাঁচা মান (০ থেকে ১০২৩) সার্ভোর জন্য উপযুক্ত মানে (০ থেকে ১৮০ ডিগ্রি) রূপান্তর করতে ব্যবহৃত হয়। কোডটি analogRead(potpin) দিয়ে পটেনশিওমিটারের মান পড়ে, map(val, 0, 1023, 0, 180) ব্যবহার করে স্কেল করে, এবং তারপর সেই স্কেল করা মানটি myservo.write(val) দিয়ে সার্ভোতে পাঠায়। এটি একটি সরাসরি সংযোগ তৈরি করে যেখানে নবটি তার মাঝামাঝি অবস্থানে ঘোরালে সার্ভোটি ৯০ ডিগ্রিতে অবস্থান করবে, এবং এভাবে চলতে থাকবে।

নিয়ন্ত্রণের এই পদ্ধতিটি অত্যন্ত স্বজ্ঞাত এবং এটি অনেক মানব-মেশিন ইন্টারফেসের ভিত্তি, সাধারণ রিমোট কন্ট্রোল থেকে জটিল রোবোটিক কন্ট্রোলার পর্যন্ত।

লাইভ প্রজেক্ট প্রদর্শন

ভিডিওটি উভয় প্রোগ্রামের কার্যকরী লাইভ প্রদর্শন প্রদান করে। সুইপ প্রোগ্রামের জন্য, আপনি দেখতে পাবেন সার্ভো আর্মটি ০ থেকে ১৮০ ডিগ্রি এবং আবার ফিরে মসৃণভাবে চলছে। উপস্থাপক আরও দেখান যে for লুপে ধাপের আকার (যেমন, ১ ডিগ্রি থেকে ২০ ডিগ্রি) এবং বিলম্বের সময় পরিবর্তন করলে সার্ভোর আচরণ কীভাবে পরিবর্তিত হয়, যা গতিকে দ্রুততর কিন্তু কম মসৃণ করে তোলে (ভিডিওতে ১১:১৯ মিনিটে)।

নব প্রোগ্রামের জন্য, প্রদর্শনটি দেখায় যে পটেনশিওমিটার ঘোরানো কীভাবে সরাসরি সার্ভোর অবস্থানকে রিয়েল-টাইমে নিয়ন্ত্রণ করে। এই ভিজ্যুয়াল প্রতিক্রিয়া অ্যানালগ ইনপুট এবং শারীরিক আউটপুটের মধ্যে সম্পর্ক বোঝার জন্য চমৎকার।

অধ্যায়সমূহ

  • [00:00] সার্ভো মোটরের পরিচিতি
  • [01:07] সার্ভো মোটরের প্রয়োগ
  • [02:57] সার্ভো মোটরের গঠন
  • [04:48] আরডুইনোতে সার্ভো সংযোগ
  • [06:06] সুইপ উদাহরণ কোড অন্বেষণ
  • [09:21] সুইপ প্রোগ্রাম প্রদর্শন
  • [10:04] কাস্টম সার্ভো কোণ নির্ধারণ
  • [11:19] সুইপ গতি এবং ধাপের আকার পরিবর্তন
  • [13:15] আরেকটি সার্ভো মোটরের উদাহরণ

ছবি

SG90_servo_motor-1
SG90_servo_motor-1
SG90 servo
SG90 servo
Servo-pot_wiring
Servo-pot_wiring
Servo-wiring_bb
Servo-wiring_bb
914-Lesson 18/31: Controlling servo motor (sweep)
ভাষা: C++
/*
Lesson 18/31: Controlling servo motor (sweep)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
 
  
 * 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/>.
 */

#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

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

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
}
915-Lesson 18/31: Controlling servo motor (knob)
ভাষা: C++
/*
Lesson 18/31: Controlling servo motor (knob)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
 
  
 * 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/>.
 */
#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

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

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

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

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

ফাইলসমূহ📁

আর্ডুইনো লাইব্রেরি (জিপ)