Search Code

لومړی ۸۸: د دوو پش بټن سویچونو په کارولو سره د سروو موټر کنټرول

لومړی ۸۸: د دوو پش بټن سویچونو په کارولو سره د سروو موټر کنټرول

دا پروژه ښیي چې څنګه د Arduino په کارولو سره د دوو فشارونو تڼیو په مرسته د سروو موټور کنټرول کړو. د پوټینشیومیټر یا سریال کمانډ پر ځای، تاسو کولی شئ ساده ټ�کټک سویچونه وکاروئ ترڅو سروو په لاسي ډول کیڼ یا ښي خوا ته حرکت ورکړئ. دا د هغو غوښتنلیکونو لپاره خورا ګټور دی چېرته چې تاسو د یو میکانیزم مستقیم فزیکي کنټرول ته اړتیا لرئ، لکه د روبوټیک لاس جوړول، د کیمرې ګیمبل تنظیمول، یا د لیرې کنټرول شوي پین-او-ټیلټ سیسټم جوړول. تڼۍ تاسو ته اجازه درکوي چې د سروو زاویه په تدریجي ډول تنظیم کړئ، د تڼۍ په نیولو سره کولی شئ دا د حرکت بشپړ حد ته واړوئ.

دلته ځینې عملي پروژې دي چې تاسو کولی شئ د دې ترتیب سره جوړې کړئ:

  • د روبوټیک لاس یا ګریپر لپاره د لاسي کنټرول پینل جوړول.
  • د لیرې کنټرول شوي کیمرې سلایډر یا پین-ټیلټ سر جوړول.
  • د ماډل الوتکې یا کښتۍ روډر لپاره فزیکي کنټرول انٹرفیس رامینځته کول.
  • د CNC ماشین یا 3D چاپګر لپاره د موقعیتونو ثبتولو لپاره ساده "تدریس پنډنټ" جوړول.

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

دا پروژه یوازې څو اساسي اجزاوو ته اړتیا لري، چې دا د Arduino سره د انپټ او آوټپټ دواړو وسایلو د زده کړې لپاره غوره پیل ټکی جوړوي.

  • Arduino بورډ (Uno، Nano، Mega، او داسې نور)
  • سروو موټور (لکه SG90 یا MG995)
  • دوه لنډمهاله فشارونې تڼۍ
  • جمپر تارونه
  • بریډبورډ (اختیاري مګر سپارښت کیږي)

وایرینګ لارښود

په ویډیو کې، وایرینګ ساده دی. د سروو موټور سیګنال پن د Arduino په PWM وړ پن سره وصل دی، کوم چې په دې مثال کې پن 9 دی. د سروو بریښنا او ځمکه د Arduino د 5V او GND پنونو سره وصل دي. دوه فشارونې تڼۍ په ورته ډول یو بل سره تار شوي دي. د هرې تڼۍ یوه پښه ځمکې سره او بله پښه د Arduino په ډیجیټل انپټ پن سره وصل ده (د "کیڼ" تڼۍ لپاره پن 2 او د "ښي" تڼۍ لپاره پن 3). کوډ داخلي پل-اپ ریزسټرونه کاروي، نو د تڼیو لپاره بهرني ریزسټرونو ته اړتیا نشته. (په ویډیو کې په 00:57)

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

د کوډ تشریح

کوډ د اسانه تنظیم وړ ډیزاین شوی. کلیدي کاروونکي تنظیم وړ برخې د سکیچ په پورتنۍ برخه کې دي. دلته د مهمو متغیرونو او تعریفونو ماتول دي چې تاسو ممکن د خپلې پروژې لپاره تنظیم کړئ.

#include <Servo.h>

Servo myservo;  // د سروو کنټرول لپاره سروو آبجیکٹ جوړ کړئ
int servoPin = 9;// دا پن باید د PWM ~ لرونکو څخه وي
int angle =90;    // د سروو لپاره لومړنۍ زاویه
int angleStep =5;

#define LEFT 2   // پن 2 د کیڼ تڼۍ سره وصل دی
#define RIGHT  3  // پن 3 د ښي تڼۍ سره وصل دی
  • servoPin: دا متغیر د Arduino هغه پن تعریفوي چې د سروو سیګنال تار ورسره وصل دی. دا خورا مهمه ده چې داسې پن وکاروئ چې Pulse Width Modulation (PWM) ملاتړ کوي، معمولا په بورډ کې د ~ سمبول سره ښودل کیږي.
  • angle: دا د سروو لومړنۍ زاویه ټاکي کله چې Arduino پیل کیږي. ډیفالټ ارزښت 90 درجې دی، کوم چې معمولا سروو منځ ته راوړي.
  • angleStep: دا هغه زیاتوالی دی چې د هرې تڼۍ فشارولو سره د سروو زاویه بدلیږي. د 5 ارزښت پدې معنی دی چې هر فشار به سروو 5 درجو ته حرکت ورکړي. تاسو کولی شئ دا د ګړندي حرکت لپاره زیات کړئ یا د ښه کنټرول لپاره کم کړئ.
  • LEFT او RIGHT: دا #define لارښوونې هغه ډیجیټل پنونه ټاکي چې فشارونې تڼۍ ورسره وصل دي. که تاسو خپلې تڼۍ مختلفو پنونو سره وتارئ، نو تاسو باید دا ارزښتونه د خپل ترتیب سره سم بدل کړئ.

په loop() فنکشن کې اصلي منطق ګوري چې ایا تڼۍ فشارول شوې ده (د پل-اپ ترتیب له امله د LOW سیګنال لوستلو سره). که "ښي" تڼۍ فشارول شي، دا د angleStep په اندازه د angle متغیر کموي. که "کیڼ" تڼۍ فشارول شي، دا angle زیاتوي. کوډ د حد چکونه شاملوي ترڅو ډاډ ترلاسه کړي چې زاویه د 0 څخه تر 180 درجو پورې پاتې کیږي. بیا د myservo.write(angle) فنکشن د سروو د نوي موقعیت ته د حرکت امر کولو لپاره کارول کیږي.

ژوندۍ پروژې نندارې

په ویډیو نندارې کې، فعالیت په روښانه توګه ښودل شوی. د "کیڼ" تڼۍ فشارول او نیول د سروو لامل کیږي چې په اسانۍ سره کیڼ خوا ته واړوي، د زاویې سره چې په هر ځل کې 5 درجې زیاتیږي، تر هغه چې 180 درجو ته ورسیږي او ودریږي. په ورته ډول، د "ښي" تڼۍ فشارول او نیول سروو بیرته ښي خوا ته واړوي، زاویه کموي تر هغه چې 0 درجو ته ورسیږي. اوسنۍ زاویه سریال مانیټر ته چاپ کیږي، تاسو ته اجازه درکوي چې د سروو دقیق موقعیت په ریښتیني وخت کې وګورئ. (په ویډیو کې په 05:20)

د ویډیو فصلونه

  • [00:00] د تڼیو سره د سروو کنټرول پیژندنه
  • [00:57] د سروو او فشارونو تڼیو لپاره وایرینګ لارښود
  • [02:12] د کوډ تشریح، برخه 1: ترتیب او تنظیم
  • [03:25] د کوډ تشریح، برخه 2: اصلي لوپ منطق
  • [05:20] د پروژې ژوندۍ نندارې
  • [06:23] پایله او احتمالي غوښتنلیکونه

Images

2 pin tactile push button switch
2 pin tactile push button switch
SG90 Mini Servo Motor
SG90 Mini Servo Motor
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
891-Lesson 88: Servo control with 2 push buttons
Language: C++
/*
 * 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
  }// 

  
}

Files📁

Other files