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

ESP32 টিউটোরিয়াল ১৭/৫৫ - ESP32 এবং পটেনশিওমিটার ব্যবহার করে সার্ভো মোটর নিয়ন্ত্রণ - ESP32 IoT লার্নিং কিট

ESP32 টিউটোরিয়াল ১৭/৫৫ - ESP32 এবং পটেনশিওমিটার ব্যবহার করে সার্ভো মোটর নিয়ন্ত্রণ - ESP32 IoT লার্নিং কিট

এই টিউটোরিয়ালে, আমরা শিখব কীভাবে SunFounder-এর ESP32 IoT লার্নিং কিট থেকে একটি ESP32 মাইক্রোকন্ট্রোলার এবং একটি পটেনশিওমিটার ব্যবহার করে একটি সার্ভো মোটর নিয়ন্ত্রণ করতে হয়। এই প্রজেক্টের শেষে, আপনি পটেনশিওমিটার ব্যবহার করে সার্ভো মোটরের কোণ মসৃণভাবে সামঞ্জস্য করতে পারবেন, যা সুনির্দিষ্ট নিয়ন্ত্রণ সম্ভব করবে। এটি ESP32-এর ক্ষমতা এবং এটি কীভাবে মোটরের সাথে ইন্টারফেস করে তা অন্বেষণ করার একটি দুর্দান্ত উপায়।

বিস্তারিত জানার জন্য, আমরা প্রয়োজনীয় হার্ডওয়্যার উপাদান, ওয়্যারিং নির্দেশাবলী এবং কোড উদাহরণগুলি কভার করব যাতে সবকিছু চালু ও কার্যকর করা যায়। আরও ভিজ্যুয়াল উপস্থাপনার জন্য, এই টিউটোরিয়ালের সাথে সম্পর্কিত ভিডিওটি দেখতে ভুলবেন না (ভিডিওতে 0:30-এ)।

হার্ডওয়্যার ব্যাখ্যা

এই প্রজেক্টের প্রাথমিক উপাদানগুলির মধ্যে রয়েছে ESP32 মাইক্রোকন্ট্রোলার, একটি সার্ভো মোটর (SG90) এবং একটি পটেনশিওমিটার। ESP32 একটি শক্তিশালী মাইক্রোকন্ট্রোলার যা বিল্ট-ইন Wi-Fi এবং ব্লুটুথ অফার করে, যা এটিকে IoT প্রজেক্টের জন্য উপযুক্ত করে তোলে। এটি মোটর সহ বিভিন্ন ডিভাইস উচ্চ নির্ভুলতার সাথে নিয়ন্ত্রণ করতে সক্ষম।

SG90 সার্ভো মোটর একটি বহুল ব্যবহৃত উপাদান যা প্রায় 270 ডিগ্রি ঘুরতে পারে। এটি একটি পালস-প্রস্থ মডুলেশন (PWM) সিগন্যালে কাজ করে, যেখানে ঘূর্ণনের কোণ নির্ধারিত হয় এতে পাঠানো পালসের প্রস্থ দ্বারা। পটেনশিওমিটার একটি পরিবর্তনশীল রোধ হিসাবে কাজ করে, যা আপনাকে ESP32-এ পাঠানো ভোল্টেজ সামঞ্জস্য করতে দেয়, যা ফলস্বরূপ সার্ভোর অবস্থান নিয়ন্ত্রণ করে।

ডেটাশিট বিবরণ

প্রস্তুতকারক SG
পার্ট নম্বর SG90
লজিক/আইও ভোল্টেজ 3.3 V (ESP32)
সাপ্লাই ভোল্টেজ 5 V
আউটপুট কারেন্ট (প্রতি চ্যানেল) 1.2 A
পিক কারেন্ট (প্রতি চ্যানেল) 2.5 A
PWM ফ্রিকোয়েন্সি নির্দেশিকা 50 Hz
ইনপুট লজিক থ্রেশহোল্ড 0.2 V (নিম্ন), 2.5 V (উচ্চ)
ভোল্টেজ ড্রপ / RDS(on) / স্যাচুরেশন 0.5 V
থার্মাল সীমা 85 °C সর্বোচ্চ
প্যাকেজ প্লাস্টিক
নোট / ভেরিয়েন্ট বিভিন্ন গিয়ার প্রকারে উপলব্ধ

 

  • সার্ভোটি উপযুক্ত ভোল্টেজ (5V) দিয়ে পাওয়ার করা নিশ্চিত করুন।
  • সাধারণ রেফারেন্সের জন্য সার্ভোর গ্রাউন্ডটি ESP32 গ্রাউন্ডের সাথে সংযুক্ত করুন।
  • সার্ভোর অবস্থান নিয়ন্ত্রণ করতে উপযুক্ত PWM সিগন্যাল ব্যবহার করুন।
  • সার্ভোর কারেন্ট প্রয়োজনীয়তা সম্পর্কে সচেতন থাকুন; প্রয়োজন হলে একটি বাহ্যিক পাওয়ার সাপ্লাই ব্যবহার করুন।
  • ভুল কনফিগারেশন এড়াতে ওয়্যারিং করার সময় সঠিক পিন অ্যাসাইনমেন্ট পরীক্ষা করুন।

ওয়্যারিং নির্দেশাবলী

ESP32-17-Sevo_motor-wiring

সার্ভো মোটর এবং পটেনশিওমিটারকে ESP32-এর সাথে ওয়্যার করতে, প্রথমে সার্ভোর গ্রাউন্ড তারটি (সাধারণত কালো বা বাদামী) ESP32-এর একটি গ্রাউন্ড পিনের সাথে সংযুক্ত করে শুরু করুন। এরপর, সার্ভোর পাওয়ার তারটি (সাধারণত লাল) ESP32-এর 5V পিনের সাথে সংযুক্ত করুন। অবশেষে, সার্ভো থেকে সিগন্যাল তারটি (সাধারণত কমলা বা সাদা) ESP32-এর পিন 25-এর সাথে সংযুক্ত করুন।

পটেনশিওমিটারের জন্য, একটি বাইরের পিন ESP32-এর 3.3V পিনের সাথে এবং অন্য বাইরের পিনটি গ্রাউন্ডের সাথে সংযুক্ত করুন। পটেনশিওমিটারের মাঝের পিনটি ESP32-এর পিন 34-এর সাথে সংযুক্ত করা উচিত। এই সেটআপটি ESP32-কে পটেনশিওমিটার থেকে পরিবর্তনশীল ভোল্টেজ আউটপুট পড়তে দেয়, যা সার্ভোর অবস্থান নিয়ন্ত্রণ করতে ব্যবহৃত হবে।

কোড উদাহরণ ও ওয়াকথ্রু

নিম্নলিখিত কোড স্নিপেটটি সার্ভো ইনিশিয়ালাইজ করে এবং এর গতিবিধি নিয়ন্ত্রণের জন্য প্যারামিটার সেট করে:

#include 

Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms

void setup() {
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
  myServo.setPeriodHertz(50); // স্ট্যান্ডার্ড 50Hz সার্ভো
}

এই কোডে, আমরা ESP32Servo লাইব্রেরি অন্তর্ভুক্ত করি এবং myServo নামে সার্ভোর একটি ইনস্ট্যান্স তৈরি করি। আমরা সার্ভোর জন্য পিন নম্বর সংজ্ঞায়িত করি এবং সর্বনিম্ন ও সর্বোচ্চ পালস প্রস্থ সেট করি যা সার্ভোর কোণ সীমার সাথে মিলে যায়।

ESP32_servo_lib

এরপর, আসুন লুপটি দেখি যা ক্রমাগত সার্ভোটিকে সামনে এবং পিছনে সরায়:

void loop() {
  for (int angle = 0; angle <= 180; angle++) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
  for (int angle = 180; angle >= 0; angle--) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
}

এই লুপটি ধীরে ধীরে কোণটি 0 থেকে 180 ডিগ্রি এবং আবার ফিরে পরিবর্তন করে, সার্ভোর জন্য সংশ্লিষ্ট পালস প্রস্থে কোণ রূপান্তর করতে map ফাংশন ব্যবহার করে। প্রতিটি পরিবর্তনের পরে একটি সংক্ষিপ্ত বিলম্ব হয় যাতে সার্ভোটি মসৃণভাবে তার নতুন অবস্থানে পৌঁছাতে পারে।

প্রদর্শন / কী আশা করবেন

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

ভিডিও টাইমস্ট্যাম্প

  • 00:00 শুরু
  • 1:56 সার্ভো মোটর কী
  • 5:00 ডক্স পেজ
  • 6:33 সার্ভোর জন্য ওয়্যারিং ব্যাখ্যা করা হয়েছে
  • 7:45 Arduino IDE-তে ESP32-এর জন্য COMP পোর্ট নির্বাচন
  • 9:27 Arduino কোড ব্যাখ্যা করা হয়েছে
  • 14:31 ESP32 ব্যবহার করে সার্ভো নিয়ন্ত্রণের প্রদর্শন
  • 16:04 5V ছাড়া অন্য ভোল্টেজে সার্ভো চালানো
  • 18:47 লুপ ছাড়া সার্ভো নিয়ন্ত্রণ
  • 20:15 পটেনশিওমিটার দিয়ে সার্ভো নিয়ন্ত্রণ
  • 21:37 পট সহ সার্ভো Arduino কোড ব্যাখ্যা করা হয়েছে

ছবি

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32_servo_lib
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
ভাষা: C++
#include <ESP32Servo.h>

// Define the servo and the pin it is connected to
Servo myServo;
const int servoPin = 25;

// Define the minimum and maximum pulse widths for the servo
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms

void setup() {
  // Attach the servo to the specified pin and set its pulse width range
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);

  // Set the PWM frequency for the servo
  myServo.setPeriodHertz(50); // Standard 50Hz servo
}

void loop() {
  // Rotate the servo from 0 to 180 degrees
  for (int angle = 0; angle <= 180; angle++) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }

  // Rotate the servo from 180 to 0 degrees
  for (int angle = 180; angle >= 0; angle--) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
}

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

ফাইলসমূহ📁

ডেটাশিট (পিডিএফ)

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