Кодты іздеу

Сабақ 88: Екі түйме қосқышын пайдаланып сервоқозғалтқышты басқару

Сабақ 88: Екі түйме қосқышын пайдаланып сервоқозғалтқышты басқару

Бұл жоба 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 түйреуішін анықтайды. Импульстік ені модуляциясын (PWM) қолдайтын түйреуішті пайдалану өте маңызды, әдетте платада ~ белгісімен белгіленеді.
  • angle: Бұл Arduino іске қосылған кезде сервоның бастапқы бұрышын орнатады. Әдепкі мән 90 градус, бұл әдетте сервоны орталықтандырады.
  • angleStep: Бұл батырма басылған сайын серво бұрышы өзгеретін қадам. 5 мәні әр басу сервоны 5 градусқа жылжытатынын білдіреді. Жылдамырақ қозғалыс үшін оны көбейтуге немесе дәлірек басқару үшін азайтуға болады.
  • LEFT және RIGHT: Бұл #define директивалары батырмалар қосылған цифрлық түйреуіштерді тағайындайды. Егер батырмаларды басқа түйреуіштерге қоссаңыз, қондырғыңызға сәйкес келу үшін осы мәндерді өзгертуіңіз керек.

loop() функциясындағы негізгі логика батырманың басылғанын тексереді (тарту конфигурациясына байланысты LOW сигналын оқу арқылы). Егер "оң" батырма басылса, angle айнымалысын angleStep мәніне азайтады. Егер "сол" батырма басылса, 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] Қорытынды және әлеуетті қолданбалар

Суреттер

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
Тіл: 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
  }// 

  
}

Сізге қажет болуы мүмкін нәрселер

Файлдар📁

Басқа файлдар