Пребарување код

Лекција 88: Контролирање на серво мотор со користење на два притисни копчиња

Лекција 88: Контролирање на серво мотор со користење на два притисни копчиња

Овој проект демонстрира како да контролирате серво мотор користејќи две копчиња со Arduino. Наместо да се потпирате на потенциометар или сериска команда, можете да користите едноставни тактилни прекинувачи за рачно поместување на серво моторот лево или десно. Ова е исклучително корисно за апликации каде што ви е потребна директна, физичка контрола над механизам, како што се изградба на роботска рака, прилагодување на камера гимбал, или создавање на далечински управуван систем за пан-тилт. Копчињата ви овозможуваат постепено прилагодување на аголот на серво моторот, со можност да го држите копчето за да го движите низ целиот опсег на движење.

Еве неколку практични проекти што можете да ги изградите со оваа поставка:

  • Изградба на рачен контролен панел за роботска рака или грабач.
  • Создавање на далечински управувана камера лизгалка или пан-тилт глава.
  • Развивање на физички контролен интерфејс за кормило на модел на авион или брод.
  • Правење на едноставен „teach pendant“ за снимање позиции за CNC машина или 3D печатач.

Хардвер и компоненти

Овој проект бара само неколку основни компоненти, што го прави одлична почетна точка за учење за влезни и излезни уреди со Arduino.

  • Arduino плоча (Uno, Nano, Mega, итн.)
  • Серво мотор (на пр., SG90 или MG995)
  • Две моментални копчиња
  • Жици за поврзување
  • Breadboard (опционално, но препорачано)

Водич за поврзување

Во видеото, поврзувањето е едноставно. Сигналниот пин на серво моторот е поврзан со PWM-способен пин на Arduino, што е пин 9 во овој пример. Напојувањето и заземјувањето за серво моторот се поврзани со 5V и GND пиновите на Arduino. Двете копчиња се поврзани на сличен начин едно со друго. Едната нога на секое копче е поврзана со заземјување, а другата нога е поврзана со дигитален влезен пин на Arduino (пин 2 за „лево“ копче и пин 3 за „десно“ копче). Кодот користи внатрешни pull-up отпорници, така што не се потребни надворешни отпорници за копчињата. (во видео на 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 сигнал поради pull-up конфигурацијата). Ако „десно“ копче е притиснато, ја намалува angle променливата за angleStep. Ако „лево“ копче е притиснато, ја зголемува angle. Кодот вклучува проверки на граници за да осигури дека аголот останува во опсегот од 0 до 180 степени. Функцијата myservo.write(angle) потоа се користи за да му нареди на серво моторот да се движи до новата позиција.

Демонстрација на живиот проект

Во видео демонстрацијата, функционалноста е јасно прикажана. Притискањето и држењето на „лево“ копче предизвикува серво моторот непречено да се движи налево, со зголемување на аголот за 5 степени во исто време, додека не достигне 180 степени и запре. Слично, притискањето и држењето на „десно“ копче го прави серво моторот да се движи надесно, намалувајќи го аголот додека не достигне 0 степени. Тековниот агол се печати на Serial Monitor, што ви овозможува да ја видите точната позиција на серво моторот во реално време. (во видео на 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
  }// 

  
}

Работи што можеби ќе ви требаат

Датотеки📁

Други датотеки