کوډ ولټوئ

د آردوینو په مرسته د پش بټنونو سره د سروو کنټرول

د آردوینو په مرسته د پش بټنونو سره د سروو کنټرول

په دې ټیوټوریل کې، موږ به زده کړو چې څنګه د دوو پش بټنونو په کارولو سره سروو موټور کنټرول کړو، یو د سروو کیڼ اړخ ته د حرکت کولو لپاره او بل د ښي اړخ ته د حرکت کولو لپاره. کله چې تاسو ښي بټن فشار کړئ، سروو به ۱۰ درجې ښي اړخ ته حرکت وکړي، او کله چې تاسو کیڼ بټن فشار کړئ، دا به د همدې اندازې سره کیڼ اړخ ته حرکت وکړي. که تاسو یو بټن ونیسئ، سروو به په هغه لوري حرکت ته دوام ورکړي تر هغه چې تاسو یې خوشې کړئ.

دا پروژه د دې پوهیدو لپاره یوه ښه لار ده چې څنګه د Arduino په کارولو سره بټنونه د سروو موټور سره وصل کړو. موږ به اړین هارډویر اجزا، د تارونو د نښلولو لارښوونې، او هغه کوډ پوښو چې د دې ټولو کار کولو لپاره اړین دی. د روښانه پوهیدو لپاره، تاسو کولی شئ د دې ټیوټوریل سره مل ویډیو ته مراجعه وکړئ (په ویډیو کې په ۰۱:۰۰ کې).

هارډویر تشریح شوی

د دې پروژې لپاره، تاسو به د Arduino بورډ، یو سروو موټور، او دوه پش بټنونو ته اړتیا ولرئ. سروو موټور د حرکت مسؤل دی، پداسې حال کې چې پش بټنونه د حرکت د لوري کنټرول لپاره د انپټ په توګه کار کوي. Arduino دا انپټونه پروسس کوي او سروو ته مناسب سیګنالونه لیږي.

سروو موټور د پلټ-وډت ماډولیشن (PWM) سیګنالونو پر بنسټ کار کوي. د مختلفو پلټ پلنوالي په لیږلو سره، تاسو کولی شئ د سروو زاویه کنټرول کړئ. پش بټنونه به د Arduino په ډیجیټل انپټ پنونو سره وصل شي، او موږ به د تارونو د ساده کولو لپاره داخلي پل-اپ ریزسټرونه وکاروو.

ډیټاشیټ تفصیلات

جوړونکیمختلف
د پرزې شمېرهSG90
منطق/IO ولټاژ۵ V
د برېښنا ولټاژ۴.۸–۶ V
د تولید جریان (په هر چینل)۱.۵ A اعظمي
د لوړ جریان (په هر چینل)۲.۵ A اعظمي
د PWM فریکونسي لارښوونه۵۰ Hz
د انپټ منطق حدونه۰.۳VCC څخه تر ۰.۷VCC
د ولټاژ کمښت / RDS(on) / سنتریشن۰.۴ V
حرارتي حدونه۸۵ °C
بسته بنديپلاستیکي
یادښتونه / ډولونهمعیاري ۱۸۰° څرخ

  • ډاډ ترلاسه کړئ چې سروو ستاسو د برېښنا ولټاژ لپاره درجه بندي شوی دی.
  • که په لوړ جریان کې کار کوئ، مناسب حرارتي خپرونکی وکاروئ.
  • بټنونه د پل-اپ ترتیب سره ځمکې ته وصل کړئ.
  • که غیر منظم چلند تجربه کوئ، خپل بټنونه ډیبونس کړئ.
  • د ډیبګ کولو لپاره سریال آوټ پټ وڅارئ.

د تارونو د نښلولو لارښوونې

Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons

د اجزاو د نښلولو لپاره، د سروو موټور په وصل کولو سره پیل وکړئ. د سروو سور تار د Arduino په 5V پن سره وصل کړئ، تور تار د GND پن سره، او ژیړ یا سپین سیګنال تار د Arduino په پن ۹ سره وصل کړئ. دا پن به د سروو موقعیت کنټرول کړي.

بیا، پش بټنونه وصل کړئ. د ښي بټن یو ټرمینل پن ۲ ته او بل ټرمینل ځمکې ته وصل کړئ. د کیڼ بټن لپاره، یو ټرمینل پن ۱۲ ته او بل ټرمینل هم ځمکې ته وصل کړئ. دا ترتیب داخلي پل-اپ ریزسټرونو ته اجازه ورکوي چې کله بټنونه فشار نه وي، پنونه لوړ وساتي.

د کوډ مثالونه او تفصیلي کتنه

راځئ چې د یو واحد پش بټن سره د سروو کنټرول لپاره د کوډ سره پیل وکړو. کوډ د سروو اعتراض پیل کوي او لومړنۍ زاویه ټاکي. دلته یو لنډ اقتباس دی:

int angle = 90;    // د سروو لپاره لومړنۍ زاویه
int angleStep = 10; // د حرکت لپاره د ګام اندازه

په دې اقتباس کې، angle د سروو اوسنی موقعیت ښیي، پداسې حال کې چې angleStep ټاکي چې د هر بټن فشار سره سروو څومره حرکت کوي. دا کوډ د سروو موقعیت تعقیب لپاره اړین دی.

بیا، موږ د سیټ اپ فنکشن لرو چیرې چې موږ سروو ضمیمه کوو او انپټ پنونه تنظیم کوو:

void setup() {
  Serial.begin(9600);          // سریال تنظیم کړئ
  myservo.attach(9);  // سروو په پن ۹ سره ضمیمه کوي
  pinMode(2, INPUT_PULLUP); // د بټن پن تنظیم کړئ
}

په سیټ اپ کې، موږ سریال مانیټر پیل کوو او سروو پن ۹ ته ضمیمه کوو. پن ۲ باندې بټن د پل-اپ ریزسټر سره د انپټ په توګه ټاکل شوی، کوم چې تارونه ساده کوي او د بهرنیو ریزسټرونو اړتیا مخنیوی کوي.

په پای کې، موږ د لوپ فنکشن ته ګورو چې د بټن فشار اداره کوي:

while(digitalRead(2) == LOW) {
  angle = angle + angleStep; // زاویه زیاته کړئ
  myservo.write(angle); // سروو حرکت ورکړئ
}

دا لوپ په دوامداره توګه ګوري چې ایا بټن فشار شوی دی. کله چې فشار شي، زاویه د ټاکل شوي ګام سره زیاتیږي، او سروو په مطابق حرکت کوي. دا مهمه ده چې ډاډ ترلاسه شي چې زاویه په حدونو کې پاتې کیږي (۰ څخه تر ۱۸۰ درجو) ترڅو سروو ته زیان ونه رسوي.

ښودنه / څه تمه وکړو

کله چې تاسو ښي بټن فشار کړئ، سروو باید د ۱۰ درجو په زیاتوالي سره ښي اړخ ته حرکت وکړي تر هغه چې اعظمي ۱۸۰ درجو ته ورسیږي. په ورته ډول، د کیڼ بټن فشار به دا کیڼ اړخ ته حرکت ورکړي. که تاسو یو بټن ونیسئ، سروو به په هغه لوري حرکت ته دوام ورکړي تر هغه چې تاسو یې خوشې کړئ (په ویډیو کې په ۰۱:۰۰ کې).

عامې ستونزې د تارونو مسلې شاملې دي، لکه غلط اړیکې یا فلوټینګ انپټونه. تل ډاډ ترلاسه کړئ چې ستاسو اړیکې خوندي دي او تاسو د کوډ کې مشخص شوي سم پنونه کاروئ.

انځورونه

Control a servo with a single push button using Arduino
Control Servo with single push button with Arduino
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons
98-Control a servo with a single push button using Arduino
ژبه: C++
/*
 Controlling a servo with a push button with Arduino
 When a push button is pressed, the servo starts moving to the right or left until
 it reaches 180 and then returns to 0 degrees.

 May 22, 2018 at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle for servo
int angleStep =10;

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(2,INPUT_PULLUP);
   Serial.println("Robojax Servo Button ");
}

void loop() {
  while(digitalRead(2) == LOW){
  // change the angle for the next time through the loop:
  angle = angle + angleStep;

    // reverse the direction of the movement at the ends of the angle:
    if (angle <= 0 || angle >= 180) {
      angleStep = -angleStep;
    }
    myservo.write(angle); // move the servo to the desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degrees");    
  delay(100); // waits for the servo to get there
  }// while

  
}
99-Control a servo with two push buttons using Arduino
ژبه: C++
/*
 Controlling a servo with two push buttons with Arduino
 When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
 When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
 At any instance, if the button is released, the servo stops.

 May 22, 2018, at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle  for servo
int angleStep =5;

#define LEFT 12   // pin 12 is connected to left button
#define RIGHT  2  // pin 2 is connected to right button

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
  pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
  myservo.write(angle);// send servo to the middle at 90 degrees
 Serial.println("Robojax Servo Button ");
}

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
  }// 

  
}

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

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

تر اوسه هیڅ سرچینې نشته.

فایلونه📁

هیڅ فایل شتون نلري.