شِفر (کود) جستجو

درس 92: کنترل چندین سروو هر کدام با پتانسیومتر | دوره آموزشی Arduino مرحله به مرحله

درس 92: کنترل چندین سروو هر کدام با پتانسیومتر | دوره آموزشی Arduino مرحله به مرحله

در این پروژه، شما یاد خواهید گرفت که چگونه یک کنترلر سرو مستقل و چندکاناله با استفاده از آردوینو U​no و دو پتانسیومتر بسازید. به جای یک سروو که یک دستگیره را دنبال می‌کند، این راهنما نشان می‌دهد که چگونه به هر سروو ورودی آنالوگ اختصاصی خود را بدهید، که به شما این امکان را می‌دهد که دو تا شش موتور سرو را به طور مستقل و همزمان کنترل کنید. این یک بلوک ساختمانی بنیادی برای هر پروژه است که به کنترل دستی دقیق چندین قسمت متحرک نیاز دارد.

این تنظیمات فوق‌العاده چندمنظوره است. در اینجا چند راه عملی برای استفاده از آن آمده است:

  • رباتیک:کنترل حرکت افقی و عمودی یک گیبلا دوربین یا مفاصل پایه و بازوی یک ربات کوچک.
  • عروسک‌های متحرکایجاد حرکات واقع‌گرایانه برای یک عروسک یا شخصیت انیماترونیک با کنترل مستقل سر و چشم‌های آن.
  • کنترل مدل:ساخت یک کنترلر سفارشی برای وسایل نقلیه کنترلی یا هواپیماهای مدل به منظور تنظیم دقیق فلپ‌ها و آیلرون‌ها.
  • خودکارسازی:ایجاد یک ایستگاه کنترل دستی برای یک ردیاب خورشیدی یا یک دستگاه موقعیت‌یابی چندمحوری.

سخت‌افزار مورد نیاز

  • آردوینو اونو (یا هر بورد سازگار دیگر)
  • ۲ عدد موتور سرو (در اینجا از سرو موتورهای استاندارد ۱۸۰ درجه استفاده شده است)
  • دو عدد پتانسیومتر (۱۰کیلو اهم گزینه‌ای رایج است)
  • بورد آزمایش و سیم‌های جامپر
  • منبع تغذیه خارجی 5 ولت (توصیه شده برای چندین سرو)

راهنمای سیم‌کشی

این پروژه به کمی بیشتر از سیم‌کشی نسبت به یک تنظیم سروو منفرد نیاز دارد، عمدتاً به این دلیل که شما باید انرژی و زمین را به چندین مؤلفه توزیع کنید. کلید کار این است که از ریل‌های قدرت برک‌برد برای ایجاد یک بیس مشترک ۵ ولت و GND استفاده کنید. یک دیاگرام سیم‌کشی برای این ساخت ضروری است.

Two_or_more_Servo_pot_bb

بیایید ارتباطات را تجزیه و تحلیل کنیم، همان‌طور که در ویدیو توضیح داده شده است (در ویدیو در 02:23). ابتدا ریل‌های قدرت خود را راه‌اندازی کنید: آردوینو را متصل کنید۵ ولتبه ریل مثبت پایه مدار متصل کنید وGNDپایه را به ریل منفی وصل کنید. این به شما دسترسی آسان به انرژی برای تمام قطعاتتان می‌دهد.

پتانسیومترها:هر پتانسیومتر به عنوان یک تقسیم‌کننده ولتاژ عمل می‌کند. پایه راست هر پتانسیومتر را به۵ ولتریل و پایه چپ بهGNDریل. پایه وسط "قلم‌مو" است و ولتاژ متغیری را تامین می‌کند. پایه وسط اولین پتانسیومتر را به ورودی آنالوگ متصل کنید.A0و پایه میانی دوم بهA1(در ویدیو در ۰۳:۲۲).

موتورهای سروو:هر سروو دارای سه سیم است. سیم تیره رنگ (معمولاً سیاه یا قهوه‌ای) را بهGNDریل. سیم وسط (معمولاً قرمز) را به متصل کنید5 ولتریل. در نهایت، سیم سیگنال (که معمولاً نارنجی یا زرد است) را به یک پایه دارای قابلیت PWM در آردوینو متصل کنید. سیم سیگنال سرو موتور اول به پایه3و سیم سیگنال سرو موتور دوم به پایه می‌رود۵(در ویدیو در ۰۴:۰۱). به خاطر داشته باشید، شما باید از پایه‌های دارای PWM (که با یک تیوید "~" در آونو علامت‌گذاری شده‌اند) برای کنترل سروو استفاده کنید.

توضیح شِفر (کود)

شِفر (کود) بر اساس مثال استاندارد "دکمه" از IDE آردوینو است اما به گونه‌ای تغییر یافته است که دو سروو را مدیریت کند. منطق آن ساده است: مقدار آنالوگ را از پتانسیومتر بخوانید، آن را به یک زاویه نگاشت کنید و به سروو فرمان دهید که به آن زاویه حرکت کند. بخش پیکربندی در بالای شِفر (کود) جایی است که همه تنظیمات خود را انجام خواهید داد.

اینجا بخش قابل پیکربندی کاربر وجود دارد که پایه‌ها را تعریف کرده و اشیاء سروو را ایجاد می‌کند:


#include <Servo.h>

//**** servo 1 settings
Servo servo1; 
const int servo1PotPin = A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END

//**** servo 2 settings
Servo servo2; 
const int servo2PotPin = A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END

این هسته پیکربندی است. برای افزودن یک سروو سوم، شما باید بلوک "تنظیمات سروو ۲" را کپی کنید، تمامی "۲"ها را به "۳" تغییر دهید و یک پایه آنالوگ جدید اختصاص دهید (برای مثال،A2) و یک پایه PWM جدید (به عنوان مثال،9). TheServoکلاس در IDE آردوینو گنجانده شده است، بنابراین به هیچ کتابخانه اضافی نیاز نیست.

درsetup()تابع، الservo.attach(pin)دستوری به آردوینو می‌گوید که کدام پایه به سیم سیگنال هر سروو متصل است. شما باید برای هر سروویی که استفاده می‌کنید، یک خط داشته باشید.


void setup() {
  //Robojax.com multiple servo
  servo1.attach(servo1Pin); 
  servo2.attach(servo2Pin);   
}

درloop()شِفر (کود) مقدار پتانسیومتر را خوانده، آن را به دامنه ۰-۱۸۰ درجه نگاشته و آن زاویه را به سروو می‌نویسد.delay(5)در انتها یک پارامتر تنظیم وجود دارد. همانطور که در ویدئو نشان داده شده است، کاهش این مقدار از ۱۵ به ۵ میلی‌ثانیه باعث می‌شود حرکت سروو بسیار صاف‌تر شود و لرزش را از بین ببرد (در ویدئو در ۱۲:۰۰).

نمایش پروژه زنده

هنگامی که مدار را سیم‌کشی کرده‌اید و شِفر (کود) را بارگذاری کرده‌اید، نمایش بلافاصله انجام می‌شود. زمانی که آردوینو را روشن می‌کنید، هر سروو به موقعیتی که با تنظیم فعلی پتانسیومتر مربوطه تعیین شده، حرکت خواهد کرد. وقتی که یک ولوم را بچرخانید، سروو آن به آرامی حرکت را دنبال می‌کند. ویدئو نشان می‌دهد که دو سروو به طور کامل مستقل کار می‌کنند و این امکان را برای حرکات پیچیده و همزمان فراهم می‌کند. اگر هرگونه لرزش یا نوسانی مشاهده کردید، تنظیم کردنdelay()مقدار در حلقه اولین چیزی است که باید امتحان شود.

فصل‌ها

  • [00:00] مقدمه و مروری بر پروژه
  • :56 درک موتورهای سرو
  • نمودار سیم کشی برای دو سرو و پتانسیومترها
  • [04:15] توضیحات دقیق سیمکشی
  • [06:49] توضیح شِفر (کود): پیکربندی و راه‌اندازی
  • [09:15] توضیح شِفر (کود): منطق کنترل و نقشه‌برداری
  • [11:15] نمایش زنده و تنظیمات

تصاویر

چندین سروو یک پتانسیومتر: تنظیمات اصلی
چندین سروو یک پتانسیومتر: تنظیمات اصلی
چند سرور یک پتانسیومتر: نمای بالای تنظیمات اصلی
چند سرور یک پتانسیومتر: نمای بالای تنظیمات اصلی
چندین سروو یک پتانسیومتر: ایجاد ۵ ولت اضافی از آردوینو روی بورد براده
چندین سروو یک پتانسیومتر: ایجاد ۵ ولت اضافی از آردوینو روی بورد براده
SG90 Mini Servo Motor
SG90 Mini Servo Motor
Two_or_more_Servo_pot_bb
Two_or_more_Servo_pot_bb
888-Lesson 92: Controlling Multiple servo motors
زبان: C++
/*
 * Control two or more servo motors 
 * using potentiometers.
 * Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
 * in Ajax, Ontario, Canada . www.Robojax.com
 * This code on robojax https://robojax.com/RJT766
 *  
 * Original code from Arduino IDE: File->Examples->Servo->knob
 *  
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob


 * Get this code and other Arduino codes from Robojax.com



 *  * 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 download 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 1 settings
Servo servo1; 
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END

//**** servo 2 settings
Servo servo2; 
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END

void setup() {
  //Robojax.com multiple servo
  servo1.attach(servo1Pin); 
  servo2.attach(servo2Pin);   
}

void loop() {
  //Robojax.com multiple servo
  servo1Value = analogRead(servo1PotPin); 
  servo1Value = map(servo1Value, 0, 1023, 0, 180);
  servo1.write(servo1Value);

  servo2Value = analogRead(servo2PotPin); 
  servo2Value = map(servo2Value, 0, 1023, 0, 180);
  servo2.write(servo2Value);
  
  delay(5);
 //Robojax.com multiple servo  
}// loop end

مواردی که ممکن است به آن‌ها نیاز داشته باشید

منابع و مراجع

هنوز هیچ منبعی موجود نیست.

فایل‌ها📁

سایر فایل‌ها