درس ۸۸: کنترل موتور سروو با استفاده از دو کلید فشاری
این پروژه نحوه کنترل یک موتور سروو با استفاده از دو دکمه فشاری با آردوینو را نشان میدهد. به جای تکیه بر پتانسیومتر یا فرمان سریال، میتوانید از کلیدهای لمسی ساده برای حرکت دستی سروو به چپ یا راست استفاده کنید. این امر برای کاربردهایی که نیاز به کنترل مستقیم و فیزیکی بر یک مکانیزم دارید، مانند ساخت بازوی رباتیک، تنظیم گیمبال دوربین، یا ایجاد سیستم پن-تیلت کنترل از راه دور، بسیار مفید است. دکمهها به شما امکان میدهند زاویه سروو را به صورت افزایشی تنظیم کنید، با قابلیت نگه داشتن دکمه برای جاروب کردن آن در کل محدوده حرکت.
در اینجا چند پروژه عملی وجود دارد که میتوانید با این راهاندازی بسازید:
- ساخت پنل کنترل دستی برای بازوی رباتیک یا گیره.
- ایجاد اسلایدر دوربین یا سر پن-تیلت کنترل از راه دور.
- توسعه رابط کنترل فیزیکی برای سکان هواپیمای مدل یا قایق.
- ساخت یک «آموزشدهنده ساده» برای ثبت موقعیتها برای دستگاه CNC یا چاپگر سهبعدی.

سختافزار و قطعات
این پروژه فقط به چند قطعه اساسی نیاز دارد و آن را به نقطه شروع عالی برای یادگیری در مورد دستگاههای ورودی و خروجی با آردوینو تبدیل میکند.
- برد آردوینو (Uno، Nano، Mega و غیره)
- موتور سروو (به عنوان مثال SG90 یا MG995)
- دو دکمه فشاری لحظهای
- سیم جامپر
- بردبورد (اختیاری اما توصیه میشود)
راهنمای سیمکشی
در ویدیو، سیمکشی ساده است. پایه سیگنال موتور سروو به یک پایه دارای قابلیت PWM روی آردوینو متصل میشود که در این مثال پایه ۹ است. برق و زمین سروو به پایههای ۵ ولت و GND آردوینو متصل میشوند. دو دکمه فشاری به روشی مشابه به یکدیگر سیمکشی میشوند. یک پایه هر دکمه به زمین و پایه دیگر به یک پایه ورودی دیجیتال روی آردوینو (پایه ۲ برای دکمه «چپ» و پایه ۳ برای دکمه «راست») متصل میشود. شِفر (کود) از مقاومتهای pull-up داخلی استفاده میکند، بنابراین برای دکمهها به مقاومت خارجی نیاز نیست. (در ویدیو در ۰۰:۵۷)

توضیح شِفر (کود)
شِفر (کود) به گونهای طراحی شده است که به راحتی قابل تنظیم باشد. بخشهای کلیدی قابل تنظیم توسط کاربر در بالای اسکچ قرار دارند. در اینجا تجزیه و تحلیل متغیرها و تعاریف مهمی که ممکن است بخواهید برای پروژه خود تنظیم کنید، آمده است.
#include <Servo.h>
Servo myservo; // ایجاد شیء سروو برای کنترل سروو
int servoPin = 9;// این پایه باید از پایههای دارای PWM ~ باشد
int angle =90; // زاویه اولیه برای سروو
int angleStep =5;
#define LEFT 2 // پایه ۲ به دکمه چپ متصل است
#define RIGHT 3 // پایه ۳ به دکمه راست متصل است
servoPin: این متغیر پایه آردوینو را که سیم سیگنال سروو به آن متصل است تعریف میکند. استفاده از پینی که از مدولاسیون عرض پالس (PWM) پشتیبانی میکند، که معمولاً با نماد~روی برد مشخص میشود، حیاتی است.angle: این زاویه اولیه سروو را هنگام شروع آردوینو تنظیم میکند. مقدار پیشفرض ۹۰ درجه است که معمولاً سروو را در مرکز قرار میدهد.angleStep: این افزایشی است که زاویه سروو هر بار که دکمهای فشرده میشود تغییر میکند. مقدار ۵ به این معنی است که هر فشار دکمه سروو را ۵ درجه حرکت میدهد. میتوانید این را برای حرکت سریعتر افزایش دهید یا برای کنترل دقیقتر کاهش دهید.LEFTوRIGHT: این دستورات#defineپایههای دیجیتالی را که دکمههای فشاری به آنها متصل هستند اختصاص میدهند. اگر دکمههای خود را به پایههای مختلف سیمکشی میکنید، باید این مقادیر را مطابق با راهاندازی خود تغییر دهید.
منطق اصلی در تابع loop() بررسی میکند که آیا دکمهای فشرده شده است (با خواندن سیگنال LOW به دلیل پیکربندی pull-up). اگر دکمه «راست» فشرده شود، متغیر angle را به اندازه angleStep کاهش میدهد. اگر دکمه «چپ» فشرده شود، angle را افزایش میدهد. شِفر (کود) شامل بررسیهای مرزی است تا اطمینان حاصل شود زاویه در محدوده ۰ تا ۱۸۰ درجه باقی میماند. سپس از تابع myservo.write(angle) برای فرمان دادن به سروو برای حرکت به موقعیت جدید استفاده میشود.
نمایش زنده پروژه
در نمایش ویدیویی، عملکرد به وضوح نشان داده شده است. فشار دادن و نگه داشتن دکمه «چپ» باعث میشود سروو به آرامی به چپ حرکت کند، با افزایش زاویه ۵ درجه در هر بار، تا زمانی که به ۱۸۰ درجه برسد و متوقف شود. به طور مشابه، فشار دادن و نگه داشتن دکمه «راست» باعث میشود سروو به راست برگردد و زاویه را کاهش دهد تا به ۰ درجه برسد. زاویه فعلی در نمایشگر مسلسل چاپ میشود و به شما امکان میدهد موقعیت دقیق سروو را در زمان واقعی ببینید. (در ویدیو در ۰۵:۲۰)
فصلهای ویدیو
- [۰۰:۰۰] مقدمهای بر کنترل سروو با دکمهها
- [۰۰:۵۷] راهنمای سیمکشی برای سروو و دکمههای فشاری
- [۰۲:۱۲] توضیح شِفر (کود)، بخش ۱: راهاندازی و پیکربندی
- [۰۳:۲۵] توضیح شِفر (کود)، بخش ۲: منطق حلقه اصلی
- [۰۵:۲۰] نمایش زنده پروژه
- [۰۶:۲۳] نتیجهگیری و کاربردهای بالقوه
/*
* S05-05 Servo control with 2 push buttons
* Download and resource page https://robojax.com/RJT764
Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
*
* Written by Ahmad Shamshiri for Robojax.com
* on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada
* 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/>.
*/
/*
Controlling a servo with two Push buttons with Arduino
when Left push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
when Right push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 2 // pin 2 is connected to left button
#define RIGHT 3 // pin 3 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo 2 Buttons ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
آمازون
-
آمازون
-
آمازونموتور سروو در اَمه زونamzn.to
-
ایبی
فایلها📁
سایر فایلها
-
دیتاشیت موتور SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB