🦾 سروو موتور (Servo Motor (SG90))
| اسم انگلیسی | Servo Motor (SG90) |
|---|---|
| در ووکوی (Wokwi) | wokwi-servo |
| دسته | ⚙️ موتور و حرکت |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
سروو موتور (Servo Motor) موتوری است که بهجای چرخیدن مداوم، به یک زاویهی مشخص بین ۰ تا ۱۸۰ درجه میرود و همانجا میایستد؛ داخلش یک موتور کوچک، گیربکس و یک مدار کنترل موقعیت است. راهبند پارکینگ، قفل در، بازوی ربات و رادار اولتراسونیک همه با سروو ساخته میشوند. رایجترین مدلش برای یادگیری، SG90 آبی کوچک است.
سروو در ووکوی (Wokwi)
شناسهی سروو در ووکوی wokwi-servo است با سه پایهی GND، V+ و PWM. هنگام اجرا بازوی سروو را میبینی که به زاویهی خواستهشده میرود. این تکه سروو را به پین ۹ و یک دکمه (wokwi-pushbutton) را به پین ۲ وصل میکند:
{
"version": 1,
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0 },
{ "type": "wokwi-servo", "id": "servo1", "top": -140, "left": 160 },
{ "type": "wokwi-pushbutton", "id": "btn1", "top": -90, "left": 20 }
],
"connections": [
[ "servo1:PWM", "uno:9", "orange", [] ],
[ "servo1:V+", "uno:5V", "red", [] ],
[ "servo1:GND", "uno:GND.1", "black", [] ],
[ "btn1:1.l", "uno:2", "green", [] ],
[ "btn1:2.r", "uno:GND.1", "black", [] ]
]
}
| پایه در ووکوی | وصل به | رنگ سیم در سروو واقعی |
|---|---|---|
| GND | uno:GND.1 | قهوهای یا مشکی |
| V+ | uno:5V | قرمز |
| PWM | uno:9 | نارنجی یا زرد |
در تینکرکد فارسی سروو با پایههای V، G و S در هر دو حالت رایگان است و مثال جاروب سروو آماده است.
سیمکشی با آردوینو
| پایهی قطعه | وصل به |
|---|---|
| سیم قهوهای یا مشکی (GND) | GND |
| سیم قرمز (V+) | 5V |
| سیم نارنجی یا زرد (سیگنال) | پین 9 |
| دکمه، یک پایه | پین 2 (INPUT_PULLUP) |
| دکمه، پایهی قطری | GND |
سیگنال سروو یک پالس است که هر ۲۰ میلیثانیه تکرار میشود: پهنای حدود ۱ میلیثانیه یعنی ۰ درجه، ۱٫۵ میلیثانیه وسط و ۲ میلیثانیه ۱۸۰ درجه. کتابخانهی Servo این پالس را در پسزمینه میسازد و تو فقط زاویه را با write میدهی؛ برای همین سیم سیگنال به پین PWM مخصوص نیاز ندارد. اگر سیگنال قطع شود، سروو دیگر موقعیتش را محکم نگه نمیدارد و با کمی فشار جابهجا میشود.
کد نمونه
یک راهبند: هر بار دکمه را بزنی، بازو آرام باز (۹۰ درجه) یا بسته (۰ درجه) میشود. حرکت آرام با تابع moveSlow ساخته شده، چون write بهتنهایی سروو را با بیشترین سرعتش میبرد:
// Barrier gate: a button opens/closes the servo arm slowly.
// Wiring: servo signal -> pin 9, V+ -> 5V, GND -> GND; button pin 2 -> GND
#include <Servo.h>
Servo gate;
const int BTN = 2;
const int CLOSED = 0;
const int OPEN = 90;
int angle = CLOSED;
bool isOpen = false;
void moveSlow(int target) {
while (angle != target) {
angle += (target > angle) ? 1 : -1;
gate.write(angle);
delay(12); // ms per degree: bigger = slower
}
}
void setup() {
pinMode(BTN, INPUT_PULLUP);
gate.attach(9);
gate.write(angle);
}
void loop() {
if (digitalRead(BTN) == LOW) { // pressed
isOpen = !isOpen;
moveSlow(isOpen ? OPEN : CLOSED);
while (digitalRead(BTN) == LOW) {} // wait for release
delay(30);
}
}
متغیر angle همیشه زاویهی فعلی را نگه میدارد، چون سروو خودش به برنامه نمیگوید کجاست. اگر عدد delay داخل moveSlow را بزرگتر کنی، راهبند آرامتر و واقعیتر حرکت میکند.
اشتباههای رایج
- عدد بیرون از بازه: سرووهای ارزان در دو سر بازه گیر میکنند و وزوز میکنند. اگر صدا شنیدی، بازه را مثلاً ۵ تا ۱۷۵ بگیر.
- چند سروو روی 5V برد: ولتاژ میافتد و آردوینو ریست میشود. برای بیش از یکی دو SG90 منبع ۵ ولت جدا بگذار و زمینها را به هم وصل کن.
- چرخاندن بازو با دست وقتی روشن است: چرخدندههای پلاستیکی SG90 زود میشکنند.
- انتظار چرخش ۳۶۰ درجه: سروو معمولی نمیتواند مدام بچرخد؛ برای چرخ ربات سروو پیوسته لازم است.
آموزشهای مرتبط
- سروو با آردوینو: جاروب و کنترل با پتانسیومتر
- سروو موتور با ESP32
- سروو با میکروپایتون روی پیکو
- پارکینگ هوشمند، راهبند سروو با دو سنسور
- قفل در با کارت RFID و سروو
سؤالهای رایج
سه سیم سروو چه رنگیاند؟
در سرووهای رایج مثل SG90: قهوهای یا مشکی زمین (GND)، قرمز تغذیه (V+) و نارنجی یا زرد سیگنال (PWM). در ووکوی هم همین سه پایه با اسم GND، V+ و PWM هستند.
چرا سروو هنگام حرکت آردوینو را ریست میکند؟
سروو در لحظهی حرکت جریان زیادی میکشد و ولتاژ 5V افت میکند. برای یک SG90 کوچک معمولاً 5V آردوینو کافی است، ولی برای چند سروو یا سرووهای بزرگ، تغذیهی جدا با زمین مشترک بگذار.
سروو را به کدام پین آردوینو وصل کنم؟
با کتابخانهی Servo هر پین دیجیتالی کار میکند و لازم نیست پین PWM باشد. فقط بدان که روی اونو، این کتابخانه analogWrite پینهای ۹ و ۱۰ را از کار میاندازد.