Search Code

Darasi na 88: Sarrafa motar servo ta amfani da maɓallan turawa guda biyu

Darasi na 88: Sarrafa motar servo ta amfani da maɓallan turawa guda biyu

Wannan aikin yana nuna yadda ake sarrafa motar servo ta amfani da maɓallan turawa biyu tare da Arduino. Maimakon dogaro da potentiometer ko umarnin serial, za ka iya amfani da maɓallan taɓawa masu sauƙi don motsa servo da hannu zuwa hagu ko dama. Wannan yana da matuƙar amfani ga aikace-aikace inda kake buƙatar sarrafa kai tsaye, na jiki akan na'ura, kamar gina hannun mutum-mutumi, daidaita gimbal na kyamara, ko ƙirƙirar tsarin karkata da karkata da ake sarrafa shi daga nesa. Maɓallan suna ba ka damar daidaita kusurwar servo a hankali, tare da ikon riƙe maɓallin don share shi a cikin cikakken kewayon motsi.

Ga wasu ayyuka masu amfani da za ka iya ginawa da wannan saitin:

  • Gina kwamitin sarrafawa na hannu don hannun mutum-mutumi ko gripper.
  • Ƙirƙirar silida na kyamara ko kai na pan-tilt da ake sarrafa shi daga nesa.
  • Haɓaka hanyar sarrafa jiki don jirgin sama mai ƙirar ƙira ko rudder na jirgin ruwa.
  • Yin "teach pendant" mai sauƙi don rikodin matsayi don na'urar CNC ko firinta na 3D.

Kayan aiki da Abubuwan Haɗi

Wannan aikin yana buƙatar ƴan abubuwa kaɗan kawai na asali, yana mai da shi kyakkyawan mafari don koyon game da na'urorin shigarwa da fitarwa tare da Arduino.

  • Arduino board (Uno, Nano, Mega, da sauransu)
  • Motar servo (misali, SG90 ko MG995)
  • Maɓallan turawa na ɗan lokaci biyu
  • Wayoyin jumper
  • Breadboard (na zaɓi amma an ba da shawarar)

Jagorar Haɗin Waya

A cikin bidiyon, haɗin waya yana da sauƙi. Fil ɗin siginar motar servo an haɗa shi da fil mai iya PWM akan Arduino, wanda shine fil 9 a wannan misalin. Wutar lantarki da ƙasa don servo an haɗa su da fil 5V da GND na Arduino. Maɓallan turawa biyu an haɗa su a hanya mai kama da juna. Ɗaya ƙafar kowane maɓallin an haɗa shi da ƙasa, kuma ɗayan ƙafar an haɗa shi da fil shigar dijital akan Arduino (fil 2 don maɓallin "hagu" da fil 3 don maɓallin "dama"). Lambar tana amfani da resistors na ciki na pull-up, don haka ba a buƙatar resistors na waje don maɓallan. (a cikin bidiyo a 00:57)

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

Bayanin Lambar

An tsara lambar don sauƙin daidaitawa. Sassan da mai amfani zai iya daidaitawa suna a saman sketch ɗin. Ga rarrabuwar mahimman masu canji da ma'anoni waɗanda za ka iya so ka daidaita don aikinka.

#include <Servo.h>

Servo myservo;  // ƙirƙirar abu na servo don sarrafa servo
int servoPin = 9;// wannan fil ɗin dole ne ya kasance daga waɗanda ke da PWM ~
int angle =90;    // kusurwar farko don servo
int angleStep =5;

#define LEFT 2   // fil 2 an haɗa shi da maɓallin hagu
#define RIGHT  3  // fil 3 an haɗa shi da maɓallin dama
  • servoPin: Wannan mai canji yana bayyana fil ɗin Arduino wanda aka haɗa wayar siginar servo da shi. Yana da mahimmanci a yi amfani da fil wanda ke goyan bayan Pulse Width Modulation (PWM), wanda aka fi nuna shi da alamar ~ akan board ɗin.
  • angle: Wannan yana saita kusurwar farko na servo lokacin da Arduino ya fara. Ƙimar da aka saba ita ce digiri 90, wanda yawanci ke tsakiyar servo.
  • angleStep: Wannan shine ƙarin da kusurwar servo ke canzawa kowane lokacin da aka danna maɓallin. Ƙimar 5 tana nufin kowane dannawa zai motsa servo da digiri 5. Za ka iya ƙara wannan don saurin motsi ko rage shi don ingantaccen sarrafawa.
  • LEFT da RIGHT: Waɗannan umarnin #define suna sanya fil ɗin dijital waɗanda aka haɗa maɓallan turawa da su. Idan ka haɗa maɓallanka zuwa filaye daban-daban, dole ne ka canza waɗannan ƙimar don dacewa da saitinka.

Mahimman dabaru a cikin aikin loop() yana duba idan an danna maɓallin (ta hanyar karanta siginar LOW saboda tsarin pull-up). Idan an danna maɓallin "dama", yana rage mai canji angle da angleStep. Idan an danna maɓallin "hagu", yana ƙara angle. Lambar ta haɗa da duban iyaka don tabbatar da cewa kusurwar ta kasance a cikin kewayon digiri 0 zuwa 180. Aikin myservo.write(angle) ana amfani da shi don umurtar servo don motsawa zuwa sabon matsayi.

Nunin Aikin Kai Tsaye

A cikin nunin bidiyo, aikin yana bayyana a fili. Danna da riƙe maɓallin "hagu" yana sa servo ya share da sauƙi zuwa hagu, tare da ƙara kusurwar da digiri 5 a lokaci ɗaya, har sai ya kai digiri 180 ya tsaya. Hakazalika, danna da riƙe maɓallin "dama" yana sa servo ya share baya zuwa dama, yana rage kusurwar har sai ya kai digiri 0. Ana buga kusurwar na yanzu zuwa Serial Monitor, yana ba ka damar ganin ainihin matsayin servo a lokaci-lokaci. (a cikin bidiyo a 05:20)

Babban Bidiyo

  • [00:00] Gabatarwa ga sarrafa servo da maɓallan
  • [00:57] Jagorar haɗin waya don servo da maɓallan turawa
  • [02:12] Bayanin lambar, kashi na 1: Saitawa da daidaitawa
  • [03:25] Bayanin lambar, kashi na 2: Babban dabaru na loop
  • [05:20] Nunin aikin kai tsaye
  • [06:23] Ƙarshe da aikace-aikace masu yuwuwa

Hotuna

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

  
}

Fayiloli📁

Sauran fayiloli