لومړی ۸۵: د سروو موټرو پېژندنه | د آردوینو ګام په ګام کورس
دې پروژې لارښود تاسو ته د دوامداره څرخېدونکي سروو موټرو نړۍ معرفي کوي، چې د ۳۶۰ درجې سروو په نوم هم پیژندل کیږي. د معیاري سروو برعکس چې یو ځانګړي زاویې ته حرکت کوي (لکه ۰ تر ۱۸۰ درجو)، دا موټرې په هر لوري کې په دوامداره توګه څرخي. دا دوی د کوچنیو روبوټونو، ټانک لارو، یا هر هغه پروژې لپاره مثالی کوي چې ساده او ارزانه ډرایو موټرو ته اړتیا لري. دا لارښود به تاسو ته وښیې چې څنګه یو د آردوینو او څو فشار تڼیو په کارولو سره کنټرول کړئ، چې تاسو ته د هغې د لوري او سرعت باندې عملي کنټرول درکوي.
دلته د ۳۶۰ درجې سروو لپاره څو عملي کارونې دي:
- د کوچني دوه څرخه روبوټ موټر جوړول.
- د پین او ټیلټ کیمرې ماونټ جوړول چې پرته له پایه څرخي.
- د کوچني کنویر بیلټ یا وینچ چلول.
- د ساده رادار یا سینسر سکین کولو پلیټ فارم جوړول.

هارډویر او اجزاوې
د دې پروژې لپاره، تاسو لاندې اجزاوو ته اړتیا لرئ:
- آردوینو بورډ (د مثال په توګه، Uno)
- دوامداره څرخېدونکی سروو موټر (د مثال په توګه، FS90R یا ورته)
- درې فشار تڼۍ
- جمپر تارونه
- بریډبورډ (اختیاري، د اسانه تار اړیکې لپاره)
د تار اړیکې لارښود
د دې پروژې تار اړیکې ساده دي. د سروو موټر درې تارونه لري: معمولا نسواري (ځمکه)، سور (بریښنا)، او نارنجي یا ژیړ (سیګنال). فشار تڼۍ په ساده ترتیب سره تار شوي دي.
دلته د اړیکو تفصیل دی:
- سروو موټر:
- نسواري تار (ځمکه) د آردوینو GND پن سره نښلول کیږي.
- سور تار (بریښنا) د آردوینو 5V پن سره نښلول کیږي.
- نارنجي/ژیړ تار (سیګنال) د آردوینو پن ۹ سره نښلول کیږي.
- فشار تڼۍ:
- د هرې تڼۍ یو اړخ د آردوینو GND پن سره نښلول شوی دی.
- د "کاونټر-کلک وایز" تڼۍ بل اړخ پن ۲ سره نښلول شوی دی.
- د "بندول" تڼۍ بل اړخ پن ۳ سره نښلول شوی دی.
- د "کلک وایز" تڼۍ بل اړخ پن ۴ سره نښلول شوی دی.
په ویډیو کې، جوړونکی ټینګار کوي چې د سروو سیګنال تار باید د آردوینو PWM-وړ پن سره ونښلول شي، کوم چې ډیری وخت د ټیلډ (~) سمبول سره نښه شوی وي. پن ۹ د دې پنونو څخه یو دی. فشار تڼۍ د آردوینو داخلي پل-اپ ریزسټرونه کاروي، کوم چې د بهرنیو ریزسټرونو اړتیا له منځه وړلو سره تار اړیکې ساده کوي (په ویډیو کې په ۰۷:۰۲).
د کوډ تشریح
کوډ د دریو فشار تڼیو حالت لوستلو او د سروو موټر ته اړونده کمانډ لیږلو لپاره ډیزاین شوی. راځئ چې د کارونکي لخوا د تنظیم وړ برخې مات کړو.
د پنونو او کمانډونو تنظیم
د کوډ په پورتنۍ برخه کې، تاسو به د پنونو او سروو کنټرول ارزښتونو تعریفونه ومومئ. دا هغه ځای دی چیرې چې تاسو کولی شئ د خپلې پروژې چلند تنظیم کړئ.
const int servoPin = 9; // د سروو سیګنال لپاره PWM پن
const int stopPin = 3; // د بندولو تڼۍ لپاره پن
const int cwPin = 4; // د کلک وایز تڼۍ لپاره پن
const int ccwPin = 2; // د کاونټر-کلک وایز تڼۍ لپاره پن
دا ثابتونه تعریف کوي چې کوم آردوینو پنونه د تڼیو او سروو سره نښلول شوي دي. که تاسو د خپلو تڼیو لپاره مختلف پنونه کاروئ، تاسو به دلته شمیرې بدلې کړئ. servoPin باید د PWM-وړ پن وي.
const int csServoCommand[3] = {106, 52, 0}; // {CCW, STOP, CW}
const String csServoCommandText[3] = {"Counter Clockwise", "Stopped", "Clockwise"};
دا ترټولو مهمه برخه ده چې پوهیدل او تنظیم یې کول اړین دي. د csServoCommand ارې هغه ارزښتونه لري چې سروو ته لیږل کیږي. د دوامداره سروو لپاره، دا ارزښتونه زاویه نه ښیې بلکه سرعت او لوري ښیې.
- 106 د بشپړ سرعت کاونټر-کلک وایز څرخیدو ارزښت دی.
- 52 د بشپړ بندیدو ارزښت دی.
- 0 د بشپړ سرعت کلک وایز څرخیدو ارزښت دی.
دا ارزښتونه نړیوال ندي. د تولید توپیرونو له امله، د "بندیدو" ارزښت (52) ممکن تنظیم ته اړتیا ولري. که ستاسو سروو ورو ورو حرکت وکړي کله چې تاسو د بندولو تڼۍ فشاروئ، تاسو به دې ارزښت ته ښه تنظیم ته اړتیا ولرئ. ویډیو دا پروسه ښیې، ښیې چې څنګه ارزښت 54 یا 51 ته بدلول کولی شي د موټر چلند اغیزمن کړي (په ویډیو کې په ۱۳:۴۵).
تاسو کولی شئ د څرخیدو ارزښتونه هم تنظیم کړئ ترڅو د موټر سرعت بدل کړئ. د مثال په توګه، د کاونټر-کلک وایز ارزښت 70 ته ټاکل به دا د 106 په پرتله ورو ورو څرخوي (په ویډیو کې په ۱۲:۲۳).
د csServoCommandText ارې هغه متن تارونه لري چې د اوسني کمانډ حالت ښودلو لپاره سریال مانیټر ته چاپ کیږي.
دودیز فنکشن: servoCommand()
کوډ د کمانډ منطق اداره کولو لپاره دودیز فنکشن کاروي. دا فنکشن یوه شمېره (0، 1، یا 2) د دلیل په توګه اخلي، د حالت متن تازه کوي، او اړونده کمانډ سروو ته لیږي.
void servoCommand(int n) {
statusText = csServoCommandText[n];
myservo.write(csServoCommand[n]);
Serial.println(csServoCommandText[n]);
Serial.println(csServoCommand[n]);
}
دا فنکشن د اصلي لوپ څخه بلل کیږي کله چې یوه تڼۍ فشارول کیږي. دا د ښودنې تازه کولو او سروو کنټرول لپاره منطق مرکزي کوي، کوډ پاک او د بدلون لپاره اسانه کوي.
ژوندۍ پروژه او مظاهره
په ویډیو کې، جوړونکی پروژه په عمل کې ښیې. د "کلک وایز" تڼۍ فشارول ارزښت 0 سروو ته لیږي، چې دا په یو لوري کې څرخوي. د "کاونټر-کلک وایز" تڼۍ فشارول ارزښت 106 لیږي، چې دا په بل لوري څرخوي. د "بندول" تڼۍ 52 لیږي، کوم چې باید موټر ودروي.
سیریل مانیټر د اوسني حالت او هغه دقیق ارزښت د ښودلو لپاره کارول کیږي چې سروو ته لیږل کیږي. دا د بګ موندلو او ستاسو د ځانګړي موټور لپاره د بشپړ "بند" ارزښت موندلو لپاره خورا ارزښتناک دی. لکه څنګه چې په ویډیو کې یادونه شوې، د سروو د داخلي سرکټري له امله د بند کمانډ ممکن بشپړ نه وي، او تاسو ممکن ورو حرکت یا وایبریشن وګورئ. دا د ارزانه دوامداره سروو موټورونو یوه عامه ځانګړنه ده او د کوډ کې د بند ارزښت تنظیمولو سره کم کیدی شي (په ویډیو کې په 01:15 کې).
فصلونه
- [00:05] د ۳۶۰ درجې سروو موټور پیژندنه
- [02:02] اجزاوې او هارډویر کتنه
- [02:40] تفصیلي تارونې ډیاګرام او اړیکې
- [05:07] د کوډ تشریح: ثابتونه، صفونه، او ترتیب
- [09:56] د کوډ تشریح: د servoCommand فنکشن
- [10:54] ژوندۍ ننداره او د سیریل مانیټر محصول
- [12:23] د سروو سرعت او بند ارزښتونو تنظیمول
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("received: ");
Serial.print (incomingByte);
if(incomingByte == 108){
Serial.println(" sent 0 Rotating CW ");
myservo.write(0);
}else if(incomingByte == 114){
Serial.println(" sent 180 Rotating CCW ");
myservo.write(180);
}else if(incomingByte == 60){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Randomly");
myservo.write(incomingByte);
}
}
}
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
360 Servo -2
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#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 of those with PWM ~
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
int CWBS, CCWBS, SBS;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);// set pin for push button STOP
pinMode(3,INPUT_PULLUP);// set pin for push button CCW
pinMode(4,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
}
void loop() {
CCWBS = digitalRead(2);// read status of button CCW
SBS = digitalRead(3);// read status of button STOP
CWBS = digitalRead(4);// read status of button CW
if(CCWBS == LOW){
Serial.println(" sent 0 Rotaing CW ");
myservo.write(0);
}else if(CWBS == LOW){
Serial.println(" sent 180 Rotaing CCW ");
myservo.write(180);
}else if(SBS == LOW){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Random");
myservo.write(48);
}
}// loop
هغه شیان چې تاسو ورته اړتیا لرئ
-
امازون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 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB