درس ۸۹: استفاده از سروو موتور پیوسته یا ۳۶۰ درجه | دوره گامبهگام آردوینو
آیا تا به حال خواستهاید یک موتور را در هر دو جهت به هر مدتی که میخواهید بچرخانید، به جای اینکه فقط مانند یک سروو استاندارد به جلو و عقب حرکت کند؟ این دقیقاً همان چیزی است که یک موتور سروو پیوسته یا ۳۶۰ درجه ارائه میدهد. برخلاف سروو استاندارد که به یک زاویه خاص (معمولاً ۰ تا ۱۸۰ درجه) حرکت میکند، یک سروو پیوسته بهطور نامحدود در جهت عقربههای ساعت یا خلاف آن میچرخد. این ویژگی آن را برای ساخت رباتهای کوچک، پایههای دوربین، یا هر پروژهای که نیاز به کنترل چرخش پیوسته دارد، ایدهآل میکند.
در این پروژه، ما یک سیستم کنترل برای سروو ۳۶۰ درجه با استفاده از فقط سه دکمه فشاری خواهیم ساخت. شما قادر خواهید بود به سروو فرمان دهید در جهت عقربههای ساعت، خلاف جهت عقربههای ساعت بچرخد، یا در هر لحظه متوقف شود. این راهنما شما را از طریق سیمبندی راهنمایی میکند، بخشهای قابل تنظیم شِفر (کود) را توضیح میدهد، و یک نمایش زنده از عملکرد سیستم را به شما نشان میدهد.
در اینجا چند ایده عملی برای استفاده از سروو پیوسته در پروژههای خودتان آورده شده است:
- ساخت یک ربات دوچرخ کوچک: از دو سروو پیوسته برای به حرکت درآوردن چرخها استفاده کنید که امکان حرکت به جلو، عقب و چرخش را فراهم میکند.
- ایجاد پایه دوربین پن-تیلت: از یک سروو پیوسته برای چرخش آهسته و بیپایان یک دوربین امنیتی یا حیات وحش استفاده کنید.
- خودکارسازی یک نوار نقاله: یک سیستم نوار نقاله کوچک را برای مرتبسازی یا توزیع اقلام کنترل کنید.
- طراحی یک استند نمایش چرخان: یک مدل سهبعدی یا محصول را روی سکویی که بهطور پیوسته میچرخد به نمایش بگذارید.
سختافزار مورد نیاز
- برد آردوینو (Uno، Nano و غیره)
- موتور سروو پیوسته (۳۶۰ درجه) (مانند FS90R، DS04-NFC)
- ۳ عدد دکمه فشاری
- سیم جامپر
- برد بورد
راهنمای سیمبندی
سیمبندی این پروژه ساده است. موتور سروو سه سیم دارد: معمولاً یک سیم تیره برای زمین (GND)، یک سیم میانی (اغلب قرمز) برای برق (۵ ولت)، و یک سیم روشنتر (نارنجی، زرد یا سفید) برای سیگنال. همانطور که در ویدیو نشان داده شده است، سروو به آردوینو به صورت زیر متصل میشود:
- زمین سروو (سیم تیره): به GND آردوینو متصل کنید.
- برق سروو (سیم میانی/قرمز): به ۵ ولت آردوینو متصل کنید.
- سیگنال سروو (سیم روشن): به پایه ۹ آردوینو متصل کنید.
برای سه دکمه فشاری، هر دکمه دو طرف دارد. یک طرف همه دکمهها به هم متصل شده و سپس به GND آردوینو وصل میشود. طرف دیگر هر دکمه به یک پایه دیجیتال جداگانه متصل میشود، همانطور که در زیر توضیح داده شده است (در ویدیو در ۰۳:۴۰):
- دکمه جهت عقربههای ساعت (CW): به پایه ۲ آردوینو متصل کنید.
- دکمه توقف: به پایه ۳ آردوینو متصل کنید.
- دکمه خلاف جهت عقربههای ساعت (CCW): به پایه ۴ آردوینو متصل کنید.

توضیح شِفر (کود)
شِفر (کود) به گونهای طراحی شده است که به راحتی قابل تنظیم باشد. مهمترین بخشی که باید تنظیم کنید آرایه sc[] است که مقادیر خاص PWM ارسالشده به سروو را برای کنترل عملکرد آن نگه میدارد. این مقادیر جهانی نیستند و باید برای موتور سروو خاص شما کالیبره شوند (در ویدیو در ۱۲:۲۳).
int sc[]={106, 58, 0};// دستورات سروو به ترتیب هستند
//CCW، STOP، CW
این آرایه قلب کالیبراسیون است. مقادیر به این ترتیب استفاده میشوند:
- sc[0] = 106: این مقدار برای چرخش سروو در خلاف جهت عقربههای ساعت ارسال میشود.
- sc[1] = 58: این مقدار "توقف" است. به دلیل مدار داخلی، مقدار دقیقی که موتور را متوقف میکند متفاوت است. ممکن است متوجه شوید سروو شما حتی هنگام ارسال این فرمان به آرامی میچرخد و باید این عدد را کمی تنظیم کنید تا مقدار واقعی "توقف کامل" را برای موتور خود پیدا کنید.
- sc[2] = 0: این مقدار باعث میشود سروو با حداکثر سرعت در جهت عقربههای ساعت بچرخد.
میتوانید مقادیر آرایه sc[] را برای تغییر سرعت چرخش تنظیم کنید. به عنوان مثال، تنظیم sc[0] روی ۷۰ باعث میشود چرخش خلاف جهت عقربههای ساعت کندتر شود. هرچه مقدار به مقدار "توقف" (۵۸) نزدیکتر باشد، موتور در آن جهت کندتر میچرخد. مقادیر دورتر از ۵۸ سرعت را تا حداکثر محدودیت افزایش میدهند.
چند متغیر کلیدی دیگر نیز وجود دارد که ممکن است نیاز به تغییر داشته باشید. servoPin روی ۹ تنظیم شده است که باید یک پایه با قابلیت PWM روی آردوینو شما باشد. پایههای دکمه در بالای شِفر (کود) تعریف شدهاند و در صورت نیاز قابل تغییر هستند.
int servoPin = 9;// این پایه باید یکی از پایههای دارای PWM ~ باشد
#define STOPpin 3 // پایه دکمه فشاری برای توقف
#define CWpin 2 // دکمه فشاری برای جهت عقربههای ساعت
#define CCWpin 4 // دکمه فشاری برای خلاف جهت عقربههای ساعت
در نهایت، آرایه scText[] رشتههایی را نگه میدارد که برای اشکالزدایی در نمایشگر مسلسل چاپ میشوند. اگر میخواهید پیامهای متفاوتی نمایش دهید، میتوانید اینها را تغییر دهید.
نحوه استفاده از شِفر (کود)
شِفر (کود) ارائهشده را روی برد آردوینو خود آپلود کنید. نمایشگر مسلسل (تنظیم روی ۹۶۰۰ باود) را باز کنید تا پیامهای وضعیت را ببینید. اکنون میتوانید سروو را با استفاده از سه دکمه کنترل کنید:
- دکمه CW را فشار دهید و نگه دارید: سروو شروع به چرخش در جهت عقربههای ساعت میکند. نمایشگر مسلسل "CW" و مقدار ارسالشده را نمایش میدهد.
- دکمه CCW را فشار دهید و نگه دارید: سروو شروع به چرخش در خلاف جهت عقربههای ساعت میکند. نمایشگر مسلسل "CCW" و مقدار ارسالشده را نمایش میدهد.
- دکمه توقف را فشار دهید: سروو تلاش میکند متوقف شود. نمایشگر مسلسل "Stop" را نمایش میدهد.
اگر سروو شما هنگام فشردن دکمه توقف کاملاً متوقف نشود، باید مقدار sc[1] را در آرایه sc[] کالیبره کنید. سعی کنید مقدار را کمی تغییر دهید (مثلاً از ۵۸ به ۵۴ یا ۵۲) و شِفر (کود) را دوباره بارگذاری کنید تا موتور کاملاً بیحرکت بماند.
نمایش زنده
در ویدیو، ارائهدهنده سیستم کامل را نشان میدهد. میتوانید سروو را ببینید که بر اساس فشردن دکمهها در هر دو جهت میچرخد. خروجی Serial Monitor نیز نمایش داده میشود که وضعیت فعلی ("CW"، "Stop" یا "CCW") و مقدار خاص ارسالشده به سروو را نشان میدهد. این ابزار بسیار خوبی برای اشکالزدایی و یافتن مقادیر کالیبراسیون عالی برای موتور خاص شماست. نمایش همچنین نشان میدهد که چگونه تنظیم مقادیر در آرایه sc[] مستقیماً بر سرعت موتور تأثیر میگذارد، از حرکت آهسته تا حداکثر سرعت چرخش.
نتیجهگیری
این پروژه روشی ساده و مؤثر برای کنترل یک سروو موتور پیوسته فراهم میکند. با درک فرآیند کالیبراسیون برای مقدار "توقف"، میتوانید کنترل دقیقی در پروژههای رباتیک و اتوماسیون خود داشته باشید.
بخشهای ویدیو
- [00:05] معرفی سروو موتور پیوسته
- [02:02] نمای کلی سختافزار سروو
- [02:40] نمودار سیمکشی و اتصالات
- [05:07] توضیح شِفر (کود): متغیرها و راهاندازی
- [08:03] توضیح شِفر (کود): منطق حلقه اصلی
- [09:56] تابع servoCommand()
- [10:54] نمایش زنده و خروجی Serial Monitor
- [12:23] کالیبراسیون سرعت سروو و مقادیر توقف
++
/*
* S05-13 Servo with 3 push buttons
* Demonstration of Controlling a Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo using push buttons
*
* Modified by Ahmad Shamshiri for Robojax Robojax.com
* on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww
Watch Introduction to 360 Servo video with code: https://youtu.be/b_xvu6wWafA
You can get the wiring diagram from my Arduino Course at Udemy.com
Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
visit my course now http://robojax.com/L/?id=62
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
Original code by BARRAGAN <http://barraganstudio.com>
*
* Code is available at http://robojax.com/learn/arduino
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int servoPin = 9;// this pin must be one of those with PWM ~
#define STOPpin 3 // push button pin for STOP
#define CWpin 2 // push button for CW
#define CCWpin 4 // push button for CCW
int sc[]={106, 58, 0};// servo commands are in order
//CCW, STOP,CW
String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
//CW button status (CWBS)
//CCW button status (CCWBS)
//stop button status (SBS)
void setup() {
Serial.begin(9600);
pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
myservo.write(sc[1]);// send STOP command
statusText=1;// initial value is STOP
}
void loop() {
CCWBS = digitalRead(CCWpin);// read status of button CCW
SBS = digitalRead(STOPpin);// read status of button STOP
CWBS = digitalRead(CWpin);// read status of button CW
if(CCWBS ==LOW)
{
servoCommand(0);
}else if(SBS ==LOW)
{
servoCommand(1);
}else if(CWBS ==LOW)
{
servoCommand(2);
}
Serial.println(scText[statusText]);
delay(50);
}// loop
void servoCommand(int n)
{
statusText = n;
myservo.write(sc[n]);
Serial.print("Going to ");
Serial.print(scText[n]);
Serial.print( "(");
Serial.print(sc[n]);
Serial.println(")");
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون360 Degree Servo motor on Amazonlink.amazon
-
ایبی360 Degree Servo motor on eBayebay.us
-
علیاکسپرس360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
علیاکسپرس360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
منابع و مراجع
-
داخلی
فایلها📁
سایر فایلها
-
دیتاشیت موتور SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB