آیا تابهحال علاقهمند بودهاید که یک سروو موتور را بهدقت کنترل کنید و حرکات دقیق را به آن بدهید؟ با استفاده از آردوینو، این امر بهسادگی امکانپذیر است. در جهان تکنولوژی، روزبهروز دستاوردهای جدیدی در زمینه رباتیک و اتوماسیون به وجود میآید. یکی از این دستاوردها، سروو موتورها هستند. این موتورها به دلیل قابلیتهای خاص خود، از جمله دقت بالا، سرعت قابل تنظیم و قابلیت کنترل زاویه، در بسیاری از زمینهها مورد استفاده قرار میگیرند. در این آموزش، شما با راهاندازی سروو موتور با آردوینو آشنا خواهید شد و قدمبهقدم نحوهی کنترل دقیق حرکت و موقعیت سروو موتور را خواهید آموخت. پس با ما همراه باشید تا دنیایی از امکانات و خلاقیت را با سروو موتورها و آردوینو کشف کنید.
آشنایی با سروو موتور
موتورهای زیادی برای انتخاب وجود دارد، اما انتخاب موتور مناسب برای کار مهم است. اگر پروژه شما نیاز به موقعیتیابی دقیق دارد، سروو موتور معمولاً بهترین گزینه است. شما میتوانید به آنها آموزش دهید که به کجا اشاره کنند، و آنها این کار را برای شما انجام خواهند داد. به همین سادگی! سروو موتورها قادر به کنترل دقیق چرخش شفت موتور هستند. آنها به شما امکان میدهند زاویه چرخش دقیق را با کد یا با ورودیهایی مانند جوی استیک، دکمههای فشاری یا پتانسیومتر تنظیم کنید.
یکی از اولین کاربردهای سروو موتورها، کنترل مکانیزمهای فرمان هواپیماها، اتومبیلها و قایقهای RC بود. امروزه میتوانید آنها را در رباتها، تجهیزات صنعتی و بسیاری از پروژههای مختلف آردوینو بیابید.
در این آموزش، ما نگاهی به راهاندازی سروو موتور با آردوینو برای کنترل آنها و همچنین نحوه کار این موتورها خواهیم داشت. علاوه بر اینها به دو نمونه کد که میتوانید در آردوینو اجرا کنید، نگاه خواهیم کرد. اولین برنامه به شما نشان خواهد داد که چگونه جهت و موقعیت سروو را با استفاده از دو دکمه فشاری کنترل کنید. برنامه دوم نحوه استفاده از پتانسیومتر برای کنترل موقعیت سروو را به شما نشان میدهد.
خب منتظر چه هستید؟ بیایید شروع کنیم!
سروو موتور چیست؟
سرووها موتورهایی هستند که به شما امکان کنترل دقیق حرکت فیزیکی را میدهند، زیرا معمولاً بهجای چرخش مداوم به یک موقعیت حرکت میکنند. اتصال و کنترل آنها ساده است؛ زیرا درایور موتور دقیقاً در آنها تعبیه شده است.
ساختار سروو موتور
سرووها شامل یک موتور DC کوچک هستند که از طریق چرخدندهها به شفت خروجی متصل میشوند. شفت خروجی یک سروو هورن را به حرکت در میآورد و همچنین به یک پتانسیومتر (pot) متصل میشود.
پتانسیومتر بازخورد موقعیت را به تقویتکننده خطا در واحد کنترل ارائه میدهد که موقعیت فعلی موتور را با موقعیت هدف مقایسه میکند.
در پاسخ به خطا، واحد کنترل موقعیت فعلی موتور را طوری تنظیم میکند که با موقعیت موردنظر مطابقت داشته باشد.
در مهندسی کنترل، این مکانیسم بهعنوان سروو مکانیسم یا بهاختصار سروو شناخته میشود. این یک سیستم کنترل حلقه بسته است که از بازخورد منفی برای تنظیم سرعت و جهت موتور برای رسیدن به نتیجه مطلوب استفاده میکند.
سختافزار
برخی از اجزای مهم سختافزار سروو موتور عبارتاند از:
- بدنه: بدنه یک سروو موتور معمولاً از فلز یا پلاستیک ساخته میشود و شامل قطعات داخلی موتور و مکانیسم گیربکس است. این بدنه معمولاً دارای سازوکاری است که به سروو موتور امکان حرکت و چرخش در زوایا را میدهد.
- موتور: قسمت اصلی سروو موتور ، موتور الکتریکی است که حرکت و چرخش را ایجاد میکند. معمولاً از موتورهای DC (جریان مستقیم) استفاده میشود که با تغییر جهت جریان الکتریکی، حرکت را در جهت موردنظر انجام میدهند.
- گیربکس: برخی از سروو موتورها دارای گیربکس هستند که باعث افزایش گشتاور و کاهش سرعت چرخش موتور میشود. گیربکس در برخی استفادهها، مانند رباتیک و مکانیک دقیق، بسیار مهم است.
- سنسورها: برخی از سروو موتورها دارای سنسورهایی مانند پتانسیومتر یا انکودر هستند که امکان بازخوانی موقعیت دقیق سروو موتور را فراهم میکنند. این سنسورها به کنترلر سروو موتور اطلاعات لازم را درباره موقعیت سروو موتور ارائه میدهند.
- کنترلر: سروو موتورها دارای یک کنترلر هستند. کنترلر یک مدار الکترونیکی است که امکان کنترل دقیق سروو موتور را فراهم میکند. این کنترلر معمولاً شامل یک میکروکنترلر، مدارهای کنترلی و منطقی، و واسطهای ارتباطی مختلف مانند پورتهای PWM (پالس عرض مودوله) و سیگنالهای کنترلی است.
- درایور: درایور سروو موتور، وظیفه تقویت و کنترل جریان و ولتاژ الکتریکی موردنیاز برای عملکرد سروو موتور را بر عهده دارد. این قطعه بین کنترلر و موتور قرار میگیرد.
نرمافزار
نرمافزار سروو موتور نقش مهمی در کنترل و مدیریت عملکرد این موتور دارد. این نرمافزار معمولاً بر روی سیستمعامل قرار میگیرد و بهوسیله کامپیوتر یا دستگاههای دیگر کنترل میشود. برخی از مؤلفهها و اجزای نرمافزار سروو موتور عبارتاند از:
- رابط کاربری (User Interface): نرمافزار سروو موتور معمولاً یک رابط کاربری گرافیکی (GUI) دارد که به کاربر امکان کنترل و پیکربندی سروو موتور را میدهد. این رابط کاربری میتواند شامل صفحهها، منوها، کنترلها و نمایشگرهای مختلف باشد که کاربر میتواند از طریق آنها مقادیر موردنیاز را تنظیم کند.
- الگوریتمهای کنترل (Control Algorithms): نرمافزار سروو موتور شامل الگوریتمها و روشهای کنترلی است که بر اساس سیگنالها و اطلاعات دریافتی از سروو موتور و سنسورها، تصمیمگیری و کنترل حرکت این موتور را انجام میدهد. این الگوریتمها معمولاً شامل کنترل PID (Proportional-Integral-Derivative) یا الگوریتمهای مدلبندی است.
- واسطهای ارتباطی (Communication Interfaces): نرمافزار سروو موتور ممکن است دارای واسطهای ارتباطی باشد که امکان ارتباط با سایر سیستمها و دستگاهها را فراهم میکند. این واسطها میتوانند شامل پورتهای سریال، پروتکلهای شبکه مانند Ethernet یا Wi-Fi و یا رابطهای بیسیم مانند بلوتوث باشند.
- کتابخانهها و رابطهای برنامهنویسی: برای برنامهنویسان و توسعهدهندگان، نرمافزار سروو موتور معمولاً کتابخانهها و رابطهای برنامهنویسی (API) را فراهم میکند. این ابزارها به برنامهنویسان امکان کنترل سروو موتور و تعامل با آن را از طریق کد برنامهنویسی بهراحتی میدهند. برخی از زبآنها و رابطهای معروف شامل C/C++, Python, Arduino و Raspberry Pi هستند.
اصلیترین وظایف نرمافزار سروو موتور
نرمافزار سروو موتور وظایف متعددی را بر عهده دارد که بهتر است پیش از راهاندازی سروو موتور با آردوینو با آنها آشنا شوید. برخی از اصلیترین وظایف نرمافزار سروو موتور عبارتاند از:
- کنترل موقعیت و سرعت: نرمافزار سروو موتور بر اساس دستورات و پارامترهای دریافتی از کنترلر، موقعیت و سرعت موردنظر سروو موتور را تعیین و کنترل میکند. این شامل محاسبه و مقایسه موقعیت فعلی و موقعیت مطلوب، محاسبه سرعت موردنظر و تنظیم جریان و ولتاژ موردنیاز برای حرکت است.
- کنترل زاویه: نرمافزار سروو موتور میتواند به طور مستقیم زاویه دقیق موتور را کنترل کند. این شامل استفاده از اطلاعات موقعیت ارائه شده توسط پتانسیومتر یا انکودر و محاسبه سیگنالهای کنترلی موردنیاز برای رسیدن به زاویه موردنظر است.
- کنترل حرکت: با استفاده از نرمافزار سروو موتور، میتوان حرکتهای مختلفی را برای سروو موتور تعریف کرد، مانند حرکت خطی، حرکت چرخشی، حرکت بهصورت پیوسته یا گامبهگام و غیره.
- کنترل سرعت: با استفاده از نرمافزار سروو موتور ، میتوانید سرعت حرکت سروو موتور را تنظیم کنید. این به شما امکان میدهد تا سروو موتور را با سرعتهای مختلف حرکت دهید و بهتناسب با نیازهای خود تنظیمات موردنظر را انجام دهید.
- کنترل قدرت و گشتاور: نرمافزار سروو موتور به شما امکان میدهد تا قدرت و گشتاور موردنیاز را برای سروو موتور تنظیم کنید. با تنظیم جریان و ولتاژ مورداستفاده برای موتور سروو موتور، میتوانید بهدقت قدرت و گشتاور را کنترل کنید.
خرید سروو موتور دیجیتال ۳۶۰ درجه مدل MG996R
پایهها
سروو موتورها معمولاً دارای سه مدل پایه اتصال هستند که در هنگام راهاندازی سروو موتور با آردوینو باید به آن توجه کنید. این پایهها عبارتاند از:
- GND بهعنوان یک زمینه مشترک برای موتور و منطق عمل میکند.
- 5 ولت یک ولتاژ مثبت است که سروو را تغذیه میکند.
- کنترل یک ورودی برای سیستم کنترل است.
رنگ سیمها بین سروو موتورها متفاوت است، اما سیم قرمز همیشه 5 ولت است و GND سیاه یا قهوهای است. سیم کنترل معمولاً نارنجی یا زرد است.
سروو موتور چگونه کار میکند؟
پیش از آن که به نحوه راهاندازی سروو موتور با آردوینو بپردازیم، بهتر است بدانید که این موتورها چگونه کار میکنند. شما میتوانید سروو موتور را با ارسال یک سری پالس به آن کنترل کنید. یک سروو موتور معمولی هر 20 میلیثانیه یک پالس انتظار دارد (یعنی سیگنال باید 50 هرتز باشد).
طول پالس موقعیت سروو موتور تعیینکنندهی زاویهی چرخش سروو موتور است. باتوجهبه طول پالس، موقعیت سروو موتور تغییر میکند. میتوانید با استفاده از مقادیر زیر، موقعیت مطلوب سروو موتور را تنظیم کنید:
- طول پالس کوتاهتر از یک میلیثانیه: در این صورت، سروو موتور به زاویهی ۰ درجه (حالت افراطی) چرخش میکند.
- طول پالس ۱.۵ میلیثانیه: این طول پالس سروو موتور را به زاویهی ۹۰ درجه (موقعیت میانه) میچرخاند.
- طول پالس ۲ میلیثانیه یا بیشتر: در این حالت، سروو موتور به زاویهی ۱۸۰ درجه چرخش میکند.
بین مقادیر یک تا دو میلیثانیه، سروو موتور به موقعیتی که با طول پالس مطابقت داشته باشد، چرخش میکند.
مهم است به این نکته توجه کنید که هیچ استانداردی برای رابطه دقیق بین طول پالس و موقعیت سروو موتور وجود ندارد؛ بنابراین، ممکن است نیاز باشد طرح خود را تغییر دهید تا محدودهی سروو موتور را تنظیم کنید.
همچنین در هنگام راهاندازی سروو موتور با آردوینو به این نکته توجه کنید که مدتزمان پالس ممکن است در برندهای مختلف متفاوت باشد. بهعنوانمثال، برای رسیدن به زاویهی ۱۸۰ درجه ممکن است به ۲.۵ میلیثانیه و برای زاویهی ۰ درجه ممکن است به ۰.۵ میلیثانیه نیاز داشته باشید.
آموزش راهاندازی سروو موتور با آردوینو
با استفاده از آردوینو و اطلاعاتی که در اختیارتان قرار میدهیم، شما بهسادگی میتوانید در هنگام راهاندازی سروو موتور با آردوینو، این موتورها را به زاویه و موقعیت دقیقی که میخواهید حرکت دهید. برای این که بهتر است اول نگاهی به سراغ فهرست قطعاتی که باید تهیه کنید بیندازیم.
لیست قطعات لازم
حالا بیایید ببینیم چگونه از آردوینو برای کنترل سروو موتور استفاده کنیم. اینها اجزایی هستند که برای راهاندازی پروژههای نمونه موردبحث به آنها نیاز دارید:
- یک برد آردوینو که از طریق USB به کامپیوتر متصل میشود (ترجیحاً آردوینو UNO)
- یک موتور سروو (SG90 Micro Servo)
- سیمهای جامپر
- پتانسیومتر 10 کیلو اهم
- مقاومتها
- خازنها
- نگهدارنده باتری 4X AA
- دکمههای لمسی
بسته به سروویی که استفاده میکنید (بهخصوص سرووهای بزرگتر)، باید از یک منبع تغذیه DC جداگانه برای تغذیه آن استفاده کنید. در غیر این صورت، جریانی که توسط سروو کشیده میشود میتواند به آردوینو شما آسیب برساند.
نامهای بزرگ کمی در دنیای سروو موتور وجود دارد. Hitec و Futaba تولیدکنندگان پیشرو سروو RC هستند.
هنگامی که همه اجزا را تهیه کردید، اکنون نوبت به نحوه راهاندازی سروو موتور با آردوینو که در ادامه به بررسی آن خواهیم پرداخت میرسد.
اتصال پایهها و بستن مدار
بهطورکلی برای انجام این کار باید مطابق زیر عمل کنید:
- سروو موتور دارای کانکتور مادگی با سهپایه است. تاریکترین یا حتی سیاه معمولاً زمین است. این را به آردوینو GND وصل کنید.
- کابل برق را که در همه استانداردها باید قرمز باشد به 5 ولت در آردوینو وصل کنید.
- خط باقیمانده روی کانکتور سروو را به یک پین دیجیتال در آردوینو وصل کنید.
- برای مشاهده سرووی متصل به آردوینو، تصویر را بررسی کنید.
اگر بخواهیم دقیقتر بیان کنیم، سروو موتورها دارای سه سیم برق، زمین و سیگنال هستند. همانطور که پیشازاین گفتیم، سیم برق معمولاً قرمز است و باید به پین 5 ولت روی برد آردوینو وصل شود. سیم زمین معمولاً سیاه یا قهوهای است و باید به یک پین زمین روی برد متصل شود. پین سیگنال معمولاً زرد یا نارنجی است و باید به پین PWM روی برد متصل شود.
اما، ما از یک میکرو سروو موتور SG90 در آزمایشهای خود استفاده خواهیم کرد. این در 4.8-6VDC (معمولی 5V) کار میکند و میتواند 180 درجه (90 درجه در هر جهت) بچرخد.
در حالت بیکار حدود 10 میلیآمپر و هنگام حرکت از 100 میلیآمپر تا 250 میلیآمپر میکشد، بنابراین میتوانیم با خروجی 5 ولت آردوینو آن را تغذیه کنیم.
اگر سروو شما بیش از 250 میلیآمپر مصرف میکند، از یک منبع تغذیه جداگانه برای آن استفاده کنید.
سیم قرمز را به 5 ولت آردوینو و سیم مشکی/قهوهای را به زمین وصل کنید. در نهایت، سیم نارنجی/زرد را به پین شماره 9 دارای PWM وصل کنید.
جدول زیر اتصالات پین را فهرست میکند:
تصویر زیر نحوه اتصال سروو موتور SG90 به آردوینو را نشان میدهد.
کدنویسی برای راه اندازی سروو موتور با آردوینو
علاوه بر تهیه تجهیزات لازم و انجام اتصالات فیزیکی شما باید برنامهنویسی مربوطه را نیز انجام دهید. برای راهاندازی سروو موتور با آردوینو ما از کتابخانه داخلی سروو آردوینو برای برنامهریزی سروو استفاده میکنیم. این کتابخانه همراه با Arduino IDE است، بنابراین نیازی به نصب آن نیست.
هنگامی که قطعات را مطابق نمودار سیمکشی بالا وصل کردید، Arduino IDE را باز کنید و این کد را روی برد آپلود کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <Servo.h> Servo servo1; int servoPin = 9; void setup(){ servo1.attach(servoPin); } void loop(){ servo1.write(0); delay(1000); servo1.write(90); delay(1000); servo1.write(180); delay(1000); |
سروو موتور باید به 0 درجه حرکت کند، یک ثانیه مکث کند، سپس به 90 درجه حرکت کند، یک ثانیه مکث کند، سپس به 180 درجه حرکت کند، یک ثانیه مکث کند، سپس دوباره شروع به کار کند.
در این کد، ابتدا کتابخانه Servo را با استفاده از #include <Servo.h> اضافه میکنیم. در خط بعدی، یک شی به نام servo1 ایجاد میکنیم که به سروو موتور در سراسر کد اشاره میکند. سپس در خط بعدی، یک متغیر به نام servoPin تعریف میکنیم و آن را برابر با پین ۹ آردوینو قرار میدهیم.
در قسمت setup()، سروو را با استفاده از تابع attach() مقداردهی اولیه میکنیم. تابع attach() یک پارامتر، یعنی پینی که سروو به آن متصل است، میگیرد؛ بنابراین عبارت servo1.attach(servoPin).را مینویسیم.
در قسمت loop()، سروو را به سه موقعیت مختلف میچرخانیم. برای جابهجایی سروو، از تابع write() با زاویه چرخش بهعنوان آرگومان استفاده میکنیم. تابع ذکر شده را از طریق شیء servo1 فراخوانی میکنیم (با استفاده از servo1.write() )و زاویههای ۰، ۹۰ و ۱۸۰ درجه، سروو را به موقعیتهای موردنظر حرکت میدهیم. زاویه، عرض پالس ارسال شده به سروو موتور را تغییر میدهد که سپس میزان چرخش را تعیین میکند. سپس با استفاده از delay(1000)، یک ثانیه مکث میکنیم تا سروو به هر موقعیت برسد. این عملکرد را بهصورت پیوسته تکرار میکنیم.
تابع writeMicroseconds()
تابع write() برای بیشتر سرووها قابلاستفاده است، اما برخی از سروو موتورها محدودیتهایی دارند. برخی از سرووها دارای محدوده 180 درجه هستند، برخی دیگر 90 درجه و برخی دیگر در هر نقطهای بین این دو. استفاده از تابع write() فقط حداکثر 180 مرحله را امکانپذیر میکند. استفاده از تابع write() برای راهاندازی سروو موتور با آردوینو تا حداکثر 180 موقعیت ممکن است. بااینحال، تابعی به نام writeMicroseconds() وجود دارد که امکان کنترل تا 1000 موقعیت را برای شما فراهم میکند. اگر میخواهید کنترل دقیقتری بر سروو خود داشته باشید، میتوانید از تابع writeMicroseconds() بهجای write() استفاده کنید.
طرح زیر نحوه استفاده از تابع writeMicroseconds() را نشان میدهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <Servo.h> Servo servo1; int servoPin = 9; void setup(){ servo1.attach(servoPin); } void loop(){ servo1.writeMicroseconds(1000); delay(1000); servo1.writeMicroseconds(1500); delay(1000); servo1.writeMicroseconds(2000); delay(1000); |
در این طرح، ما تابع write() را با تابع writeMicroseconds()جایگزین کردهایم. برای تغییر مقادیر زاویه به مقادیر زمانی، از (0، 90، 180) درجه به (1000، 1500، 2000) میکروثانیه استفاده میکنیم. برای اجرای برنامه با تنظیمات سختافزاری مشابه، برنامه را آپلود و اجرا کنید. برای یک سروو موتور با برد 180 درجه، مقادیر 1000 میکروثانیه معادل 0 درجه، 1500 میکروثانیه معادل 90 درجه و 2000 میکروثانیه معادل 180 درجه خواهد بود.
بسته به نوع سروو موتوری که استفاده میکنید، ممکن است تفاوتهایی را مشاهده کنید. یک نکته جالب که در حین نظارت بر پالسها با استفاده از اسیلوسکوپ متوجه شدیم این است که هنگام استفاده از “servo1.write(0)”، عرض پالس تنها حدود 700 میکروثانیه بود، نه 1000 میکروثانیه که معادل تنظیم روی صفر درجه است؛ اما وقتی از “servo1.writeMicroseconds(1000)” استفاده کردیم، خروجی به طور دقیق 1000 میکروثانیه بود.
در واقع با استفاده از تابع “write()”در هنگام راهاندازی سروو موتور با آردوینو، ممکن است برخی از این موتورها دقت مطلوب را در تنظیم زاویهی خود نداشته باشند، بهخصوص در مقادیر حداکثر یا حداقل زاویه اما با استفاده از تابع “writeMicroseconds()”، میتوانید به طور مستقیم مقدار زمان را تنظیم کرده و بر اساس آن سروو موتور را کنترل کنید. این امر موجب میشود تا بادقت بیشتری زاویه موردنظر خود را تنظیم کنید.
سروو موتور را با دکمههای فشاری کنترل کنید
در هنگام راهاندازی سروو موتور با آردوینو مدار خود را همانطور که در نمودار بالا نشان داده شده است بسازید، سپس کد زیر را آپلود کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
#include<Servo.h> int pos = 90; int pin4 = 4; int pin3 = 3; int LedHi = 5; int LedLow = 6; Servo servo1; void setup() { pinMode(LedHi, OUTPUT); pinMode(LedLow, OUTPUT); pinMode(pin4, INPUT); pinMode(pin3, INPUT); Serial.begin(9600); servo1.attach(9); } void loop() { while (digitalRead(pin3) == HIGH && pos < 180) { digitalWrite(LedLow, LOW); pos++; servo1.write(pos); Serial.print("Degrees rotation= "); Serial.println(pos); if (pos == 180) { Serial.print("Reached top end "); digitalWrite(LedHi, HIGH); } delay(10); } while (digitalRead(pin4) == HIGH && pos > 0) { digitalWrite(LedHi, LOW); pos--; servo1.write(pos); Serial.print("Degrees rotation= "); Serial.println(pos); if (pos == 0) { Serial.print("Reached low end "); digitalWrite(LedLow, HIGH); } delay(10); } |
پس از آپلود کد کامپایل شده به آردوینو، مانیتور سریال را در برنامه آردوینو خود باز کنید. با فشاردادن هر یک از دکمهها، سروو موتور باید زاویه خود را افزایش یا کاهش دهد، و این تغییرات در مانیتور سریال نمایش داده میشود. در ابتدا، کد سروو را روی 90 درجه تنظیم میکند. برای افزایش زاویه، از دکمهای که به پایه 3 متصل شده استفاده کنید. وقتی به 180 درجه برسید که انتهای چرخش بالا است، LED متصل به پایه 5 روشن میشود و همچنین وقتی به انتهای محدوده که 0 درجه است برسید، LED متصل به پایه 6 روشن میشود.
برای تعیین نتیجه فشار دکمه، یک عبارت “while” به کار میبریم که شرطی را بررسی میکند که دکمه و زاویه شفت فعلی را تأیید میکند. مثلاً شرط “(digitalRead(pin3) == HIGH && pos < 180)” مشخص میکند که دکمه فشار داده شده است (ارزش HIGH دارد) و زاویه کنونی کمتر از 180 است. در این صورت، برنامه یک درجه به زاویه اضافه میکند و حلقه ادامه مییابد. همچنین، برای دکمه دوم، شرط “while (digitalRead(pin4) == HIGH && pos > 0)” بررسی میکند که دکمه فشار داده شده است و زاویه کنونی بزرگتر از 0 است. در این صورت، زاویه یک درجه کاهش مییابد و حلقه باز میشود.
سطح روشن یا خاموش بودن LEDها بر اساس مقدار زاویه کنترل میشود. این کنترل در دستور “if” انجام میشود که زاویه را بررسی میکند تا ببیند آیا زاویه 0 یا 180 است. بهمحض تغییر زاویه در هر یک از دو دستور “while”، LED ها خاموش میشوند.
کنترل سروو با پتانسیومتر
این بار هنگام راهاندازی سروو موتور با آردوینو مدار را همانطور که در نمودار نشان داده شده است با استفاده از یک پتانسیومتر 10 کیلو اهم برای کنترل سروو موتور بسازید. سپس کد زیر را آپلود کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#include <Servo.h> int LowLed = 5; int HiLed = 6; Servo servo1; int pot = A0; int val; void setup() { servo1.attach(9); pinMode(LowLed, OUTPUT); pinMode(HiLed, OUTPUT); Serial.begin(9600); } void loop() { val = analogRead(pot); val = map(val, 0, 1023, 0, 180); servo1.write(val); Serial.println(val); if (val == 0) digitalWrite(LowLed, HIGH); if (val == 180) digitalWrite(HiLed, HIGH); if (val > 0) digitalWrite(LowLed, LOW); if (val < 180) digitalWrite(HiLed, LOW); delay(10); |
پس از آپلود کد، مانیتور سریال آردوینو را باز کنید. همانطور که پتانسیومتر را تنظیم میکنید، چرخش سروو نیز متناسب با آن تغییر میکند. هنگامی که به حد پایین محدوده رسیدید، LED Low روشن میشود و با رسیدن به حد بالا، LED High روشن میشود.
توضیحات کد
این کد بسیار ساده است. اولین خط کد در تابع ()loop باید بهصورت زیر باشد:
1 2 3 4 5 |
val = analogRead(pot); val = map(val, 0, 1023, 0, 180); servo1.write(val); |
analogRead() ولتاژ پتانسیومتر را بهعنوان سیگنال آنالوگ دریافت میکند. مقادیر طیف کامل ورودی پذیرفته شده در آردوینو (0-5V) را میپذیرد. آن را بهعنوان یک عدد صحیح در محدوده (0-1023) میگیرد. بهعنوانمثال، مقدار DC 0V بهعنوان عدد صحیح 0 گرفته میشود. یک مقدار دامنه کامل 5 ولت بهعنوان عدد صحیح 1023 و نیمی از محدوده ورودی 2.5 ولت بهعنوان عدد صحیح 512، نیمی از 1023 گرفته میشود.
خط بعدی کد val = map(val, 0, 1023, 0, 180); مقدار val را در محدوده 0، 1023، تا مقدار 0، 180 ترسیم میکند.
خط بعدی کد servo1.write(val); دستور write() است که عدد صحیح ذخیره شده در val را بهعنوان آرگومان میگیرد و آن را به سروو اعمال میکند. سروو یک پالس از servo1.write(val) دریافت میکند. و عرض پالس با مقدار val تعیین میشود. سروو از عرض این پالس برای تعیین چرخش آن استفاده میکند.
آموزش راهاندازی همزمان چند سروو موتور با آردوینو
اگر میخواهید راهاندازی سروو موتور با آردوینو را با بیش از یک سروو انجام دهید، بهطورکلی باید چندین شیء سروو را مشخص کنید، پینهای مختلفی را به هر یک وصل کرده و هر سروو را جداگانه آدرسدهی کنید؛ اما در وهله اول، باید اشیای سروو را (به تعداد موردنیاز) اعلام کنید که میتوانید نمونه آن را در زیر ببینید.
1 2 3 |
// Create servo objects Servo Servo1, Servo2, Servo3; |
سپس باید هر شی را به یک سروو موتور متصل کنیم. به یاد داشته باشید، هر سروو موتور از یک پین جداگانه استفاده کند:
1 2 3 4 5 |
Servo1.attach(servoPin1); Servo2.attach(servoPin2); Servo3.attach(servoPin3); |
در پایان، ما فقط باید به هر شی سروو بهصورت جداگانه رسیدگی کنیم:
1 2 3 |
Servo1.write(0); // Set Servo 1 to 0 degrees Servo2.write(90); // Set Servo 2 to 90 degrees |
از نظر اتصال، پایههای سرووها به GND در آردوینو، برق سروو به 5 ولت یا VIN (بسته به ورودی برق) میرود و در پایان، هر خط سیگنال باید به یک پین دیجیتال متفاوت متصل شود. برخلاف تصور رایج، در هنگام راهاندازی سروو موتور با آردوینو، سرووها نیازی به کنترل با پینهای PWM ندارند و با هر پین دیجیتالی کار میکنند.
جمعبندی
آیا به دنیایی از رباتها، ماشینها و مکانیزمهای پیشرفته علاقهمندید؟ با استفاده از آردوینو و سروو موتورها، اکنون این قدرت در دستان شماست. با راهاندازی سروو موتور با آردوینو، قدرت حرکت را در دستان خود قرار دهید و خلاقیت خود را به چالش بکشید. با درنظرگرفتن اطلاعاتی که در اختیارتان قرار میدهیم، شما قادر خواهید بود تا موقعیت، سرعت و گشتاور سروو موتور را بهدلخواه خود تنظیم کرده و به طور خلاقانه از این امکانات برای پروژههای خود بهرهبرداری کنید .پس همراه ما باشید و خود را در دنیایی از حرکت و خلاقیت غوطهور کنید. بیایید به دنیای جذاب و پرهیجان سروو موتور وارد شویم و تواناییهای خود را به نمایش بگذاریم.
منتظر چه هستید؟ اکنون بهترین زمان برای شروع است.
در نهایت امیدواریم که مطالب فوق برای شما مفید بوده باشد. بیصبرانه منتظر نظرات، انتقادات و پیشنهادهای شما عزیزان هستیم.