🔄 سروو پیوسته (۳۶۰ درجه) (Continuous Rotation Servo)
| اسم انگلیسی | Continuous Rotation Servo |
|---|---|
| در ووکوی (Wokwi) | نسخهی آمادهای سراغ نداریم |
| دسته | ⚙️ موتور و حرکت |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
سروو پیوسته یا ۳۶۰ درجه (Continuous Rotation Servo) از بیرون شبیه سروو معمولی است، ولی بهجای رفتن به یک زاویه مثل موتور مدام میچرخد و تو فقط سرعت و جهت را تعیین میکنی. چون گیربکس و راهانداز داخل خودش است، بدون درایور جدا چرخ ربات کوچک، تسمهنقالهی اسباببازی یا میز گردان میسازی؛ فقط سه سیم و کتابخانهی Servo.
سروو پیوسته در ووکوی (Wokwi)
تا جایی که میدانیم ووکوی نسخهی آمادهی این قطعه را ندارد. نزدیکترین قطعه، wokwi-servo، یک سروو معمولی ۰ تا ۱۸۰ درجه است؛ اگر کد پایین را رویش اجرا کنی، بازو بهجای چرخیدن به یک زاویه میرود و میایستد. سیمکشیاش با همان پایههای GND، V+ و PWM یکی است، پس برای تمرین سیمکشی و ساختار کد به کار میآید، نه برای دیدن چرخش.
منطق سرعت و جهت را در تینکرکد فارسی امتحان کن که سروو پیوسته را با پایههای V، G و S هم در حالت ساده (2D) و هم در حالت آردوینو (3D) رایگان شبیهسازی میکند. فرق دو نوع سروو و موتور DC را در سروو یا موتور DC بخوان.
سیمکشی با آردوینو
| پایهی قطعه | وصل به |
|---|---|
| سیم قهوهای یا مشکی | GND |
| سیم قرمز | 5V (برای دو سروو یا بیشتر، منبع ۵ تا ۶ ولت جدا با زمین مشترک) |
| سیم نارنجی یا زرد | پین 9 |
در ربات دوچرخ، دو سروو پیوسته آینهای نصب میشوند؛ پس برای جلو رفتن یکی باید با عدد مثبت و دیگری با عدد منفی بچرخد.
کد نمونه
بهجای write از writeMicroseconds استفاده کردیم که دقیقتر است: ۱۵۰۰ میکروثانیه توقف، ۱۰۰۰ تمام سرعت به یک سمت و ۲۰۰۰ تمام سرعت به سمت دیگر. تابع drive عددی از منفی ۱۰۰ تا ۱۰۰ میگیرد:
// Continuous-rotation servo: speed and direction from -100..100.
// Wiring: brown/black -> GND, red -> 5V, orange/yellow -> pin 9
#include <Servo.h>
Servo wheel;
const int STOP_US = 1500; // tune this until the servo really stops
const int RANGE_US = 500; // 1000..2000 us is full speed both ways
void drive(int percent) {
percent = constrain(percent, -100, 100);
wheel.writeMicroseconds(STOP_US + (long)percent * RANGE_US / 100);
}
void setup() {
wheel.attach(9);
drive(0);
}
void loop() {
drive(60); delay(2000); // forward, medium
drive(0); delay(1000); // stop
drive(-100); delay(2000); // reverse, full
drive(0); delay(1000);
}
برای پیدا کردن نقطهی توقف، فقط drive(0) را اجرا کن و STOP_US را چند واحد چند واحد کم و زیاد کن تا محور کاملاً بایستد. این عدد برای هر سروو کمی فرق دارد.
اشتباههای رایج
- انتظار زاویه: سروو پیوسته نمیداند کجاست؛ اگر زاویهی دقیق میخواهی، سروو معمولی یا موتور پلهای بگیر.
- write(90) و نایستادن: نقطهی توقف را تنظیم نکردهای؛ با پیچ تنظیم یا عدد
STOP_USدرستش کن. - انتظار سرعت خطی: بیشتر تغییر سرعت نزدیک نقطهی توقف اتفاق میافتد و بالای حدود ۶۰ درصد سرعت تقریباً ثابت میماند.
- دو سروو روی 5V برد: هنگام شروع همزمان، افت ولتاژ آردوینو را ریست میکند؛ تغذیهی جدا بگذار.
آموزشهای مرتبط
- موتور گیربکسدار، راه دیگر حرکت دادن چرخ ربات
- سروو با آردوینو: جاروب و کنترل با پتانسیومتر
- سروو موتور با ESP32
سؤالهای رایج
فرق سروو پیوسته با سروو معمولی در کد چیست؟
کتابخانه همان Servo است، ولی معنی عدد فرق دارد. در سروو معمولی write(90) یعنی برو به ۹۰ درجه؛ در سروو پیوسته یعنی بایست. عددهای کمتر یا بیشتر از ۹۰ سرعت و جهت چرخش را تعیین میکنند.
چرا سروو پیوستهی من وقتی باید بایستد آرام میچرخد؟
نقطهی توقف واقعیاش دقیقاً ۱۵۰۰ میکروثانیه (همان write(90)) نیست. یا پیچ تنظیم کنار سروو را بچرخان، یا در کد عدد توقف را پیدا کن و جایگزین کن، یا هنگام توقف detach بزن.
در ووکوی سروو پیوسته هست؟
تا جایی که میدانیم نه. wokwi-servo یک سروو موقعیتی ۰ تا ۱۸۰ درجه است و با همین کد فقط به یک زاویه میرود و میایستد. سروو پیوسته در تینکرکد فارسی رایگان شبیهسازی میشود.