এই টিউটোরিয়ালটি এর একটি অংশ: সার্ভো মোটরস
সার্ভো মোটর সম্পর্কিত সমস্ত ভিডিও এখানে তালিকাভুক্ত করা হয়েছে। অন্যান্য ভিডিওর লিঙ্ক এই নিবন্ধের নীচে রয়েছে।
আরডুইনো সার্ভো টগল সুইচ তৈরি করুন একটি পুশ বাটন দিয়ে
একটি পুশ বাটন দিয়ে আরডুইনো সার্ভো টগল সুইচ তৈরি করুন
এই প্রজেক্ট গাইড আপনাকে দেখাবে কিভাবে একটি সহজ কিন্তু অত্যন্ত কার্যকরী সার্কিট তৈরি করতে হয়: একটি সার্ভো মোটর যা একটি পুশ বাটনের প্রতিটি চাপে দুটি অবস্থানের মধ্যে টগল করে। প্রথম চাপে, সার্ভোটি মসৃণভাবে 0 থেকে 180 ডিগ্রিতে ঘুরবে। দ্বিতীয় চাপে, এটি 180 থেকে 0 ডিগ্রিতে ফিরে আসবে। এটি রোবোটিক্স এবং অটোমেশনের একটি মৌলিক ধারণা, যা স্বয়ংক্রিয় দরজার ল্যাচ, একটি সাধারণ রোবোটিক আর্ম, পতাকা ওয়েভার, বা এমন যেকোনো প্রজেক্টের জন্য উপযুক্ত যেখানে দুই-অবস্থার শারীরিক ক্রিয়া প্রয়োজন।
আমরা প্রয়োজনীয় হার্ডওয়্যার, ওয়্যারিং এবং আরডুইনো কোডের বিস্তারিত ব্যাখ্যা নিয়ে আলোচনা করব যা এটি সব কাজ করে।
হার্ডওয়্যার এবং ওয়্যারিং
এই প্রজেক্টের উপাদানগুলো ন্যূনতম এবং বেশিরভাগ আরডুইনো স্টার্টার কিটে সাধারণ। আপনার একটি আরডুইনো বোর্ড (যেমন Uno), একটি স্ট্যান্ডার্ড hobby সার্ভো মোটর (যেমন SG90), একটি পুশ বাটন এবং কয়েকটি জাম্পার তারের প্রয়োজন হবে।
ওয়্যারিং সহজবোধ্য। সার্ভোর পাওয়ার এবং গ্রাউন্ড লাইন আরডুইনোর 5V এবং GND পিনের সাথে সংযুক্ত থাকে, যখন এর সিগন্যাল লাইন একটি PWM-সক্ষম পিনের সাথে (আমাদের কোডে পিন 9) সংযুক্ত থাকে। পুশ বাটনটি ডিজিটাল পিন 2 এবং GND এর মধ্যে সংযুক্ত থাকে।
আরডুইনো কোড ব্যাখ্যা
স্কেচটি স্ট্যান্ডার্ড Servo.h লাইব্রেরি ব্যবহার করে, যা আরডুইনো IDE এর সাথে অন্তর্ভুক্ত। কোডটি পরিষ্কার এবং বোঝা সহজ করার জন্য ডিজাইন করা হয়েছে, সার্ভোর অবস্থা ট্র্যাক রাখতে ফ্ল্যাগ এবং মসৃণ ঘূর্ণন গতি তৈরি করতে `for` লুপ ব্যবহার করে।
গ্লোবাল ভেরিয়েবল এবং কনফিগারেশন
কোডের শীর্ষে, আমরা পিন এবং সার্ভোর আচরণ সংজ্ঞায়িত করি। এগুলি হল প্রধান মান যা আপনি আপনার প্রজেক্টের জন্য কাস্টমাইজ করতে চাইতে পারেন।
#include <Servo.h>
// সার্ভো এবং বাটন পিনের জন্য ভেরিয়েবল সংজ্ঞায়িত করুন
const int servoPin = 9; // সার্ভো সিগন্যাল তারটি ডিজিটাল পিন 9 এর সাথে সংযুক্ত করুন
const int buttonPin = 2; // পুশ বাটনটি ডিজিটাল পিন 2 এর সাথে সংযুক্ত করুন
// সার্ভো মুভমেন্ট প্যারামিটার সংজ্ঞায়িত করুন
const int initialAngle = 0; // সার্ভোর শুরুর কোণ
const int targetAngle1 = 180; // প্রথম লক্ষ্য কোণ
const int targetAngle2 = 0; // দ্বিতীয় লক্ষ্য কোণ
const int movingStep = 1; // মসৃণ চলাচলের জন্য ধাপের আকার (একবারে 1 ডিগ্রি)
Servo myServo; // একটি Servo অবজেক্ট তৈরি করুন
// অবস্থা-ট্র্যাকিং ভেরিয়েবল
int currentAngle = initialAngle;
bool buttonPressed = false;
bool servoAt180 = false;
servoPin: সার্ভোর সিগন্যাল তারের সাথে সংযুক্ত পিন। এটি অবশ্যই একটি PWM পিন হতে হবে (বেশিরভাগ আরডুইনো বোর্ডে `~` দিয়ে চিহ্নিত)।buttonPin: পুশ বাটনটি যে পিনে সংযুক্ত।initialAngle,targetAngle1,targetAngle2: এগুলি সার্ভোর চলাচলের শুরু এবং শেষ বিন্দু নির্ধারণ করে।movingStep: এটি নিয়ন্ত্রণ করে লুপের প্রতিটি ধাপে সার্ভো কত ডিগ্রি moves। একটি ছোট সংখ্যা মসৃণ, ধীর গতি তৈরি করে।
`setup()` ফাংশন
setup() ফাংশনটি আরডুইনো চালু হলে একবার চলে। এটি সার্ভো শুরু করে, বাটন পিন কনফিগার করে এবং সার্ভোকে তার শুরুর অবস্থানে সেট করে।
void setup() {
myServo.attach(servoPin); // সার্ভোকে তার পিনের সাথে সংযুক্ত করে
pinMode(buttonPin, INPUT_PULLUP); // বাটন পিনটি অভ্যন্তরীণ pull-up সহ ইনপুট হিসাবে সেট করুন
myServo.write(initialAngle); // সার্ভোকে তার প্রাথমিক অবস্থানে সরান
Serial.begin(9600); // ডিবাগিংয়ের জন্য সিরিয়াল শুরু করুন
}
আমরা বাটন পিনের জন্য INPUT_PULLUP ব্যবহার করি। এটি আরডুইনোতে একটি অভ্যন্তরীণ রোধ সক্রিয় করে, যা বাটন চাপা না হলে পিনের অবস্থা HIGH রাখে। যখন বাটন চাপা হয়, এটি পিনটিকে গ্রাউন্ডের সাথে সংযুক্ত করে, অবস্থা LOW করে। এই দরকারী বৈশিষ্ট্যটির অর্থ হল আপনার সার্কিটে একটি বাহ্যিক pull-up রোধ যোগ করার প্রয়োজন নেই।
`loop()` - মূল লজিক
মূল লুপটি ক্রমাগত বাটন চাপ পরীক্ষা করে। যখন একটি চাপ সনাক্ত করা হয়, এটি সার্ভোকে তার পরবর্তী লক্ষ্য অবস্থানে নিয়ে যায়।
void loop() {
// বাটনের অবস্থা পড়ুন
int buttonState = digitalRead(buttonPin);
// বাটন চাপা হয়েছে কিনা (LOW) এবং এটি আগে থেকে ধরে রাখা ছিল না কিনা তা পরীক্ষা করুন
if (buttonState == LOW && !buttonPressed) {
delay(50); // একাধিক ট্রিগার প্রতিরোধ করতে ডিবাউন্স বিলম্ব
if (digitalRead(buttonPin) == LOW) { // বাটনের অবস্থা পুনরায় পরীক্ষা করুন
buttonPressed = true; // বাটন চাপা হিসাবে চিহ্নিত করুন
if (!servoAt180) {
// 180 এ না থাকলে, 180 এ সরান
for (int angle = currentAngle; angle <= targetAngle1; angle += movingStep) {
myServo.write(angle);
delay(15); // গতি নিয়ন্ত্রণ করতে ধাপগুলির মধ্যে বিলম্ব
}
currentAngle = targetAngle1;
servoAt180 = true; // অবস্থা আপডেট করুন
} else {
// 180 এ থাকলে, 0 এ ফিরে যান
for (int angle = currentAngle; angle >= targetAngle2; angle -= movingStep) {
myServo.write(angle);
delay(15);
}
currentAngle = targetAngle2;
servoAt180 = false; // অবস্থা আপডেট করুন
}
}
}
// বাটন ছাড়া হলে বাটন চাপা ফ্ল্যাগটি রিসেট করুন
if (buttonState == HIGH) {
buttonPressed = false;
}
}
কোডটি একটি বুলিয়ান ফ্ল্যাগ, servoAt180, ব্যবহার করে সার্ভোর শেষ অবস্থান মনে রাখার জন্য। যখন বোতাম চাপা হয়, এটি এই ফ্ল্যাগটি পরীক্ষা করে: যদি সার্ভোটি ১৮০ ডিগ্রিতে না থাকে, তবে এটি সেখানে সরিয়ে নেয়; অন্যথায়, এটি এটিকে ০-এ ফিরিয়ে আনে। for লুপগুলোই মসৃণ সুইপিং গতি তৈরি করে, সার্ভোটিকে এক ডিগ্রি করে সরিয়ে, প্রতিটি ধাপের মধ্যে সামান্য বিলম্ব সহ।
এটি কীভাবে কাজ করে
একবার আপনি কোডটি আপলোড করে আপনার Arduino-তে পাওয়ার চালু করলে, সার্ভোটি তার প্রাথমিক ০-ডিগ্রি অবস্থানে চলে যাবে।
- প্রথম চাপ: যখন আপনি বোতামটি চাপবেন, কোডটি ইনপুট শনাক্ত করে এবং সার্ভোটিকে ০ থেকে ১৮০ ডিগ্রির দিকে, এক ডিগ্রি করে সরানো শুরু করে।
- দ্বিতীয় চাপ: সার্ভোটি ১৮০ ডিগ্রিতে পৌঁছানোর পরে, পরবর্তী বোতাম চাপলে এটি ১৮০ থেকে ০ ডিগ্রির দিকে ফিরে সুইপ করবে।
এই চক্রটি প্রতিটি পরবর্তী বোতাম চাপের সাথে পুনরাবৃত্তি হবে, যা আপনার প্রকল্পের জন্য একটি নির্ভরযোগ্য এবং অনুমানযোগ্য টগল প্রক্রিয়া তৈরি করবে।
এই টিউটোরিয়ালটি বিভাগের একটি অংশ: সার্ভো মোটরস
- আরডুইনো ব্যবহার করে পুশ বাটনের মাধ্যমে সার্ভো নিয়ন্ত্রণ করা
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- পোটেনশিওমিটার ব্যবহার করে আরডুইনো দিয়ে সার্ভো নিয়ন্ত্রণ করা
- পোটেনশিওমিটার এবং LCD1602 ব্যবহার করে আরডুইনো দিয়ে সার্ভো নিয়ন্ত্রণ
- Controlling Servo Motors Using an Infrared Remote with Arduino
- পোটেনশিওমিটার ব্যবহার করে আর্ডুইনো সার্ভো মোটর নিয়ন্ত্রণ
- হ্যান্ড জেসচার দ্বারা সার্ভো পজিশন নিয়ন্ত্রণ করা আর্দুইনোর জন্য
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- কন্টিনিউয়াস ৩৬০° সার্ভো কীভাবে আরডুইনোর সাথে ব্যবহার করবেন
- Arduino Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
/*
This code is provided by robojax.com
you can view the wiring diagram and details of this tutorial
here https://robojax.com/T661
*/
#include <Servo.h>
// Define variables for servo and button pins
const int servoPin = 9; // Connect servo signal wire to digital pin 9
const int buttonPin = 2; // Connect push button to digital pin 2
// Define servo movement parameters
const int initialAngle = 0; // Servo's starting angle
const int targetAngle1 = 180; // First target angle
const int targetAngle2 = 0; // Second target angle (same as initial in this case)
const int movingStep = 1; // Step size for smooth movement (e.g., 1 degree at a time)
Servo myServo; // Create a Servo object
int currentAngle = initialAngle; // Variable to keep track of the servo's current angle
bool buttonPressed = false; // Flag to track button state
bool servoAt180 = false; // Flag to track if the servo is at 180 degrees
void setup() {
myServo.attach(servoPin); // Attaches the servo on the servoPin to the servo object
pinMode(buttonPin, INPUT_PULLUP); // Set the button pin as input with internal pull-up resistor
myServo.write(initialAngle); // Set the servo to its initial angle
Serial.begin(9600); // Start serial communication for debugging
}
void loop() {
// Read the state of the button
int buttonState = digitalRead(buttonPin);
// Check if the button is pressed (LOW because of INPUT_PULLUP) and it was not pressed before
if (buttonState == LOW && !buttonPressed) {
delay(50); // Debounce delay
if (digitalRead(buttonPin) == LOW) { // Confirm button press after debounce
buttonPressed = true; // Set flag to indicate button is currently pressed
if (!servoAt180) {
// Move servo to 180 degrees
Serial.println("Moving to 180 degrees");
for (int angle = currentAngle; angle <= targetAngle1; angle += movingStep) {
myServo.write(angle);
delay(15); // Adjust this delay for desired speed
}
currentAngle = targetAngle1;
servoAt180 = true;
} else {
// Move servo to 0 degrees
Serial.println("Moving to 0 degrees");
for (int angle = currentAngle; angle >= targetAngle2; angle -= movingStep) {
myServo.write(angle);
delay(15); // Adjust this delay for desired speed
}
currentAngle = targetAngle2;
servoAt180 = false;
}
}
}
// Reset buttonPressed flag when button is released
if (buttonState == HIGH) {
buttonPressed = false;
}
}
সম্পদ ও রেফারেন্সসমূহ
এখনো কোনো সম্পদ নেই।
ফাইলসমূহ📁
ডেটাশিট (পিডিএফ)
-
sg90_serveo_motor_datasheet
sg90_serveo_motor_datasheet.pdf0.13 MB