کوډ ولټوئ

لومړی ۸۵: د سروو موټرو پېژندنه | د آردوینو ګام په ګام کورس

لومړی ۸۵: د سروو موټرو پېژندنه | د آردوینو ګام په ګام کورس

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

دلته د ۳۶۰ درجې سروو لپاره څو عملي کارونې دي:

  • د کوچني دوه څرخه روبوټ موټر جوړول.
  • د پین او ټیلټ کیمرې ماونټ جوړول چې پرته له پایه څرخي.
  • د کوچني کنویر بیلټ یا وینچ چلول.
  • د ساده رادار یا سینسر سکین کولو پلیټ فارم جوړول.

هارډویر او اجزاوې

د دې پروژې لپاره، تاسو لاندې اجزاوو ته اړتیا لرئ:

  • آردوینو بورډ (د مثال په توګه، 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] د سروو سرعت او بند ارزښتونو تنظیمول

انځورونه

SG90 Mini Servo Motor
SG90 Mini Servo Motor
SG90_servo_motor-1
SG90_servo_motor-1
115-Arduino code to control continuous 360° servo from serial monitor command
ژبه: C++
/* 
 *  
 *  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); 
                }
                  
                 
        }

  
}
893-Arduino code to control continuous 360° servo from serial monitor command (Code 2)
ژبه: C++
/* 
 *  
 *  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 

هغه شیان چې تاسو ورته اړتیا لرئ

سرچینې او حوالې

فایلونه📁

نور فایلونه