Search Code

পাঠ ৮৬: পটেনশিওমিটার ব্যবহার করে সার্ভো মোটরের অবস্থান নিয়ন্ত্রণ

পাঠ ৮৬: পটেনশিওমিটার ব্যবহার করে সার্ভো মোটরের অবস্থান নিয়ন্ত্রণ

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

এই দক্ষতার প্রয়োগ বিশাল এবং ব্যবহারিক। আপনাকে অনুপ্রাণিত করার জন্য এখানে কয়েকটি ধারণা দেওয়া হলো:

  • রোবোটিক আর্ম নিয়ন্ত্রণ: নির্ভুল পিক-এন্ড-প্লেস অপারেশনের জন্য একটি রোবোটিক আর্মের প্রতিটি জয়েন্ট ম্যানুয়ালি অবস্থান করতে একটি পটেনশিওমিটার ব্যবহার করুন।
  • ক্যামেরা প্যান এবং টিল্ট সিস্টেম: টাইম-ল্যাপস বা নজরদারির জন্য একটি রিমোট-নিয়ন্ত্রিত ক্যামেরা মাউন্ট তৈরি করুন, একটি ডায়াল ঘোরানোর মাধ্যমে মসৃণভাবে প্যান এবং টিল্ট করুন।
  • অ্যানালগ গেজ প্রতিরূপ: সেন্সর ডেটার উপর ভিত্তি করে চলা একটি ভৌত ড্যাশবোর্ড গেজ (যেমন স্পিডোমিটার বা তাপমাত্রা ডায়াল) তৈরি করুন, যেখানে পটেনশিওমিটারটি ম্যানুয়াল ওভাররাইড বা ক্যালিব্রেশন টুল হিসেবে কাজ করে।
  • ইন্টারঅ্যাকটিভ আর্ট ইনস্টলেশন: কাইনেটিক ভাস্কর্য তৈরি করুন যা দর্শকের ইনপুটে সাড়া দেয়, যেখানে একটি ডায়াল ঘোরালে চলমান অংশগুলির অবস্থান পরিবর্তন হয়।
  • মডেল যানবাহন স্টিয়ারিং: একটি মডেল গাড়ি বা নৌকার স্টিয়ারিং কোণ দূর থেকে নিয়ন্ত্রণ করুন, যা ডিজিটাল বোতামের চেয়ে আরও স্বজ্ঞাত এবং অ্যানালগ অনুভূতি প্রদান করে।

এই গাইডটি রোবোজ্যাক্সের ভিডিও টিউটোরিয়াল Lesson 86: Control position of a servo motor using potentiometer (ভিডিওতে 00:00 সময়ে) এর উপর ভিত্তি করে তৈরি। এটি ওয়্যারিং বোঝা থেকে শুরু করে কোড ব্যাখ্যা করা পর্যন্ত পুরো প্রক্রিয়াটি আপনাকে ধাপে ধাপে দেখায়। চলুন শুরু করা যাক।

হার্ডওয়্যার এবং উপাদানসমূহ

এই প্রকল্পটি অনুসরণ করতে আপনার নিম্নলিখিত উপাদানগুলির প্রয়োজন হবে:

  • একটি আরডুইনো বোর্ড (যেমন, Uno, Nano)
  • একটি স্ট্যান্ডার্ড সার্ভো মোটর (যেমন, SG90 বা MG996R)
  • একটি পটেনশিওমিটার (পরিবর্তনশীল রোধ, সাধারণত 10kΩ)
  • জাম্পার তার
  • একটি ব্রেডবোর্ড (ঐচ্ছিক, সহজ সংযোগের জন্য)

ওয়্যারিং বোঝা

এই প্রকল্পের ওয়্যারিং সহজবোধ্য। মূল বিষয় হলো সার্ভো এবং পটেনশিওমিটার উভয়ের জন্য সঠিক পাওয়ার এবং সিগন্যাল সংযোগ প্রদান করা। সার্ভো একটি শক্তি-ক্ষুধার্ত ডিভাইস, তাই এটি সরাসরি আরডুইনোর 5V পিন থেকে পাওয়ার পায়। পটেনশিওমিটার একটি ভোল্টেজ ডিভাইডার হিসেবে কাজ করে এবং আমরা এর অবস্থান নির্ধারণ করতে এর ওয়াইপার (মাঝের পিন) এ ভোল্টেজ পড়ি। (ভিডিওতে 01:05 সময়ে)

এই প্রকল্পটি যে একটি চতুর কৌশল ব্যবহার করে তা হলো পটেনশিওমিটারকে পাওয়ার দেওয়ার জন্য একটি ডিজিটাল পিনে অতিরিক্ত 5V উৎস তৈরি করা, কারণ কিছু আরডুইনো বোর্ডে শুধুমাত্র একটি ডেডিকেটেড 5V পিন থাকে। এটি কোডে একটি ডিজিটাল পিন (পিন 8) কে HIGH সেট করার মাধ্যমে করা হয়, যা 5V আউটপুট দেয়। (ভিডিওতে 00:39 সময়ে)

ভিডিওতে উল্লেখিত ওয়্যারিং ডায়াগ্রামটি এখানে দেওয়া হলো:

Arduino wiring or servo motor with pot
পট সহ সার্ভো মোটরের জন্য আরডুইনো ওয়্যারিং

সংযোগগুলি বিশদভাবে দেখি:

  • সার্ভো মোটর:
    • পাওয়ার (লাল তার) → আরডুইনো 5V পিন
    • গ্রাউন্ড (বাদামী/কালো তার) → আরডুইনো GND পিন
    • সিগন্যাল (কমলা/হলুদ তার) → আরডুইনো পিন 3 (একটি PWM-সক্ষম পিন)
  • পটেনশিওমিটার:
    • বাম পিন → আরডুইনো GND পিন
    • মাঝের পিন (ওয়াইপার) → আরডুইনো অ্যানালগ পিন A0
    • ডান পিন → আরডুইনো পিন 8 (কোডে VCC2 হিসেবে সংজ্ঞায়িত)

কোড ব্যাখ্যা

এই প্রকল্পের কোডটি মার্জিতভাবে সহজ। এটি পটেনশিওমিটার পড়তে এবং সার্ভো নিয়ন্ত্রণ করতে কয়েকটি মূল আরডুইনো ফাংশন ব্যবহার করে। আপনার নিজের প্রকল্পের জন্য আপনি যে ব্যবহারকারী-কনফিগারযোগ্য অংশগুলি সামঞ্জস্য করতে পারেন সেগুলিতে ফোকাস করা যাক। (ভিডিওতে 03:00 সময়ে)

স্কেচের শীর্ষে, আপনি পিনগুলি সংজ্ঞায়িত করবেন এবং সার্ভো অবজেক্ট তৈরি করবেন। এগুলি হল প্রাথমিক ভেরিয়েবল যা আপনি আপনার ওয়্যারিংয়ের উপর ভিত্তি করে পরিবর্তন করবেন:

#include <Servo.h>

Servo myservo;  // সার্ভো নিয়ন্ত্রণের জন্য সার্ভো অবজেক্ট তৈরি করুন

int potpin = A0;  // পটেনশিওমিটার সংযোগের জন্য ব্যবহৃত অ্যানালগ পিন
int servoPin = 3; // সার্ভোর জন্য একটি ডিজিটাল পিন (PWM সহ) সংজ্ঞায়িত করুন। শুধুমাত্র পিন 3, 5, 6, 9, 10, 11 ব্যবহার করা যেতে পারে
int VCC2 = 8;// পটেনশিওমিটারের জন্য অতিরিক্ত VCC সংজ্ঞায়িত করুন
int val;    // অ্যানালগ পিন থেকে মান পড়ার জন্য ভেরিয়েবল

প্রতিটি অংশ কী করে তা এখানে দেওয়া হলো:

  • Servo myservo;: এই লাইনটি myservo নামে একটি অবজেক্ট তৈরি করে যা আমরা আমাদের নির্দিষ্ট সার্ভো মোটর নিয়ন্ত্রণ করতে ব্যবহার করব। আপনি এটি পুনঃনামকরণ করতে পারেন, তবে আপনাকে পরে কোডে একই নাম ব্যবহার করতে হবে।
  • int potpin = A0;: এটি সংজ্ঞায়িত করে যে পটেনশিওমিটারের ওয়াইপার কোন অ্যানালগ পিনের সাথে সংযুক্ত। আপনি যদি তারটি একটি ভিন্ন অ্যানালগ পিনে সরান, তবে আপনাকে এই সংখ্যাটি আপডেট করতে হবে।
  • int servoPin = 3;: এটি সার্ভোর সিগন্যাল তারের জন্য ডিজিটাল পিন সেট করে। একটি PWM-সক্ষম পিন ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ (সাধারণত বোর্ডে '~' চিহ্ন দিয়ে চিহ্নিত)। মন্তব্যটি বেশিরভাগ আরডুইনোর জন্য বৈধ পিনগুলির তালিকা দেয়।
  • int VCC2 = 8;: এটি সেই পিন যা আমরা পটেনশিওমিটারের জন্য একটি মাধ্যমিক 5V উৎস হিসেবে ব্যবহার করছি। আপনার বোর্ডে একাধিক 5V পিন থাকলে, আপনি এটি সরাসরি সংযোগ করতে পারেন এবং কোডের এই অংশটি সরিয়ে ফেলতে পারেন।

setup() ফাংশনে, কোডটি সার্ভো আরম্ভ করে এবং অতিরিক্ত পাওয়ার পিন সেটআপ করে। myservo.attach(servoPin) ফাংশনটি অপরিহার্য কারণ এটি Arduino-কে জানায় যে কোন পিনটি সার্ভোর সিগন্যাল তারের সাথে সংযুক্ত।

void setup() {
  Serial.begin(9600);          //  সিরিয়াল সেটআপ
  myservo.attach(servoPin);  // পিন 3-এ সার্ভো অবজেক্টের সাথে সার্ভো সংযুক্ত করে

  pinMode(VCC2, OUTPUT);// পিন 8 কে আউটপুট হিসেবে সেট করে
  digitalWrite(VCC2, HIGH);// পিন 8 কে HIGH সেট করে যাতে এটি 5V পিন হিসেবে কাজ করে
}

মূল লজিকটি loop() ফাংশনে রয়েছে। এটি পটেনশিওমিটারের মান পড়ে, কোণে রূপান্তর করে এবং সার্ভোকে সরানোর নির্দেশ দেয়। এখানে দুটি গুরুত্বপূর্ণ ফাংশন হলো analogRead() এবং map()। (ভিডিওতে 04:27-এ)

void loop() {
  val = analogRead(potpin);            // পটেনশিওমিটারের মান পড়ে (মান 0 থেকে 1023 এর মধ্যে)
  val = map(val, 0, 1023, 0, 180);     // সার্ভোর সাথে ব্যবহারের জন্য স্কেল করে (মান 0 থেকে 180 এর মধ্যে)
  myservo.write(val);                  // স্কেল করা মান অনুযায়ী সার্ভোর অবস্থান নির্ধারণ করে
  Serial.print(val);
  Serial.println();
  delay(50);                           // সার্ভো সেখানে পৌঁছানোর জন্য অপেক্ষা করে
}

এটি যেভাবে কাজ করে:

  • analogRead(potpin): এই ফাংশনটি পটেনশিওমিটারের ওয়াইপার থেকে ভোল্টেজ পড়ে এবং 0 (0V) থেকে 1023 (5V) এর মধ্যে একটি মান ফেরত দেয়।
  • map(val, 0, 1023, 0, 180): এটি পুরো প্রকল্পের চাবিকাঠি। এটি পটেনশিওমিটার থেকে কাঁচা মান (0 থেকে 1023) নেয় এবং আনুপাতিকভাবে সার্ভো কোণে (0 থেকে 180 ডিগ্রি) রূপান্তর করে। উদাহরণস্বরূপ, যদি পটেনশিওমিটার 511 (প্রায় অর্ধেক) পড়ে, তাহলে map() ফাংশন 90 ফেরত দেবে, সার্ভোকে তার কেন্দ্র অবস্থানে নিয়ে যাবে।
  • myservo.write(val): এই ফাংশনটি গণনা করা কোণ (এখন val-এ সংরক্ষিত) নেয় এবং সার্ভোকে সেই অবস্থানে ঘোরানোর নির্দেশ দেয়।
  • delay(50): এটি প্রতিটি লুপের শেষে একটি ছোট বিরতি যোগ করে। এটি আপডেটের হার নিয়ন্ত্রণ করে। একটি বড় বিরতি (যেমন 200ms) সার্ভোকে ধাপে ধাপে সরায়, যখন একটি ছোট বিরতি (যেমন 50ms) চলাচলকে খুব মসৃণ করে। প্রতিক্রিয়াশীলতা পরিবর্তন করতে আপনি এটি সামঞ্জস্য করতে পারেন। (ভিডিওতে 07:26-এ)

লাইভ প্রকল্প প্রদর্শন

ভিডিওতে, আপনি প্রকল্পটি কাজ করতে দেখতে পারেন। পটেনশিওমিটারের নব ঘোরানোর সাথে সাথে, সার্ভো মোটরের বাহু আনুপাতিকভাবে তার অবস্থান অনুসরণ করে। সিরিয়াল মনিটর বর্তমান কোণ প্রিন্ট করে, নিশ্চিত করে যে ম্যাপিং সঠিকভাবে কাজ করছে। যখন পটেনশিওমিটার তার সর্বনিম্ন অবস্থানে থাকে, সার্ভো 0 ডিগ্রিতে থাকে। আপনি নবটি সর্বোচ্চে ঘোরানোর সাথে সাথে, সার্ভো মসৃণভাবে 180 ডিগ্রিতে ঘোরে। (ভিডিওতে 06:33-এ)

এই রিয়েল-টাইম ফিডব্যাক লুপটি একটি অ্যানালগ সেন্সর এবং একটি ডিজিটাল অ্যাকচুয়েটরের নিরবচ্ছিন্ন সংহতকরণ প্রদর্শন করে, একটি প্রতিক্রিয়াশীল এবং স্বজ্ঞাত নিয়ন্ত্রণ ব্যবস্থা তৈরি করে।

অধ্যায়সমূহ

  • [00:00] ভূমিকা এবং প্রকল্পের সারসংক্ষেপ
  • [01:05] সার্কিট ডায়াগ্রাম এবং ওয়্যারিং ডায়াগ্রাম
  • [02:07] শারীরিক ওয়্যারিং প্রদর্শন
  • [03:00] কোড ব্যাখ্যা
  • [06:33] লাইভ প্রদর্শন এবং পরীক্ষা
  • [07:26] সার্ভো প্রতিক্রিয়ার গতি সামঞ্জস্য করা

ছবি

Arduino wiring or servo motor with pot
Arduino wiring or servo motor with pot
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
892-Lesson 86: Controlling a servo position using a potentiometer (variable resistor)
ভাষা: C++
/*
 * Lesson 88: Controlling Servo motor a with Potentiometer
 * 📚⬇️ Download and resource page https://robojax.com/RJT763
 watch full video tutroial: https://www.youtube.com/watch?v=ntRW77mNFFk
 
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob

 Update by Ahmad Shamshiri on Jan 01, 2019  in Ajax, Ontario, Canada


*/

#include <Servo.h>

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

int potpin = A0;  // analog pin used to connect the potentiometer
int servoPin = 3; // define a digital pin (with PWM) for servo. Can use only pin 3, 5, 6,9, 10, 11
int VCC2 = 8;// define extra VCC for potentiometer
int val;    // variable to read the value from the analog pin

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

  pinMode(VCC2, OUTPUT);// set pin 8 as output
  digitalWrite(VCC2, HIGH);// set pin 8 HIGH so it acts as 5V pin
}

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
  Serial.print(val);
  Serial.println();
  delay(50);                           // waits for the servo to get there
}
 

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

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

ফাইলসমূহ📁

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