Search Code

Somo la 88: Kudhibiti motor ya servo kwa kutumia swichi mbili za kushinikiza kitufe

Somo la 88: Kudhibiti motor ya servo kwa kutumia swichi mbili za kushinikiza kitufe

Mradi huu unaonyesha jinsi ya kudhibiti motor ya servo kwa kutumia vitufe viwili vya kushinikiza na Arduino. Badala ya kutegemea potentiometer au amri ya serial, unaweza kutumia swichi rahisi za kugusa kusogeza servo kwa mkono kushoto au kulia. Hii ni muhimu sana kwa matumizi ambapo unahitaji udhibiti wa moja kwa moja, wa kimwili juu ya utaratibu, kama vile kujenga mkono wa roboti, kurekebisha gimbal ya kamera, au kuunda mfumo wa mbali wa pan-and-tilt. Vitufe vinakuruhusu kurekebisha pembe ya servo hatua kwa hatua, kwa uwezo wa kushikilia kitufe kupeperusha kwenye safu yake yote ya mwendo.

Hapa kuna miradi michache ya vitendo unayoweza kujenga kwa usanidi huu:

  • Kujenga jopo la udhibiti wa mkono kwa mkono wa roboti au gripper.
  • Kuunda slider ya kamera inayodhibitiwa kwa mbali au kichwa cha pan-tilt.
  • Kuendeleza kiolesura cha udhibiti wa kimwili kwa ndege ya mfano au usukani wa mashua.
  • Kutengeneza "teach pendant" rahisi kurekodi nafasi za mashine ya CNC au printa ya 3D.

Vifaa na Vipengele

Mradi huu unahitaji vipengele vichache tu vya msingi, na kuifanya kuwa hatua bora ya kuanzia kujifunza kuhusu vifaa vya kuingiza na kutoa na Arduino.

  • Bodi ya Arduino (Uno, Nano, Mega, n.k.)
  • Motor ya servo (mfano, SG90 au MG995)
  • Vitufe viwili vya kushinikiza vya muda mfupi
  • Waya za jumper
  • Breadboard (hiari lakini inapendekezwa)

Mwongozo wa Uunganishaji

Katika video, uunganishaji ni rahisi. Pini ya ishara ya motor ya servo imeunganishwa kwenye pini inayoweza PWM kwenye Arduino, ambayo ni pini 9 katika mfano huu. Nguvu na ardhi ya servo zimeunganishwa kwenye pini za 5V na GND za Arduino. Vitufe viwili vya kushinikiza vimeunganishwa kwa njia sawa kwa kila kimoja. Mguu mmoja wa kila kitufe umeunganishwa kwenye ardhi, na mguu mwingine umeunganishwa kwenye pini ya kuingiza ya dijiti kwenye Arduino (pini 2 kwa kitufe cha "kushoto" na pini 3 kwa kitufe cha "kulia"). Msimbo unatumia resistors za ndani za pull-up, kwa hivyo hakuna resistors za nje zinazohitajika kwa vitufe. (katika video saa 00:57)

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

Maelezo ya Msimbo

Msimbo umeundwa kuwa rahisi kusanidi. Sehemu muhimu zinazoweza kusanidiwa na mtumiaji ziko juu ya sketch. Hapa kuna uchambuzi wa vigezo na ufafanuzi muhimu unaoweza kutaka kurekebisha kwa mradi wako mwenyewe.

#include <Servo.h>

Servo myservo;  // tengeneza kitu cha servo kudhibiti servo
int servoPin = 9;// pini hii lazima iwe kati ya zile zilizo na PWM ~
int angle =90;    // pembe ya awali ya servo
int angleStep =5;

#define LEFT 2   // pini 2 imeunganishwa kwenye kitufe cha kushoto
#define RIGHT  3  // pini 3 imeunganishwa kwenye kitufe cha kulia
  • servoPin: Kigezo hiki kinafafanua pini ya Arduino ambayo waya ya ishara ya servo imeunganishwa. Ni muhimu kutumia pini inayounga mkono Pulse Width Modulation (PWM), kwa kawaida inaonyeshwa na alama ya ~ kwenye bodi.
  • angle: Hii inaweka pembe ya awali ya servo wakati Arduino inapoanza. Thamani ya default ni digrii 90, ambayo kwa kawaida inaweka servo katikati.
  • angleStep: Hii ni nyongeza ambayo pembe ya servo inabadilika kila wakati kitufe kinapobonyezwa. Thamani ya 5 inamaanisha kila kubonyeza kutasogeza servo kwa digrii 5. Unaweza kuongeza hii kwa mwendo wa haraka au kuipunguza kwa udhibiti wa hali ya juu.
  • LEFT na RIGHT: Maagizo haya ya #define yanaweka pini za dijiti ambazo vitufe vya kushinikiza vimeunganishwa. Ikiwa unawasha vitufe vyako kwenye pini tofauti, lazima ubadilishe thamani hizi ili zilingane na usanidi wako.

Mantiki ya msingi katika kazi ya loop() inaangalia ikiwa kitufe kimebonyezwa (kwa kusoma ishara ya LOW kutokana na usanidi wa pull-up). Ikiwa kitufe cha "kulia" kimebonyezwa, inapunguza kigezo cha angle kwa angleStep. Ikiwa kitufe cha "kushoto" kimebonyezwa, inaongeza angle. Msimbo unajumuisha ukaguzi wa mipaka kuhakikisha pembe inabaki ndani ya safu ya digrii 0 hadi 180. Kazi ya myservo.write(angle) kisha inatumiwa kuamuru servo kusogea kwenye nafasi mpya.

Maonyesho ya Moja kwa Moja ya Mradi

Katika maonyesho ya video, utendaji unaonyeshwa wazi. Kubonyeza na kushikilia kitufe cha "kushoto" husababisha servo kupeperusha vizuri kushoto, na pembe ikiongezeka kwa digrii 5 kwa wakati mmoja, hadi kufikia digrii 180 na kusimama. Vile vile, kubonyeza na kushikilia kitufe cha "kulia" hufanya servo kupeperusha kurudi kulia, ikipunguza pembe hadi kufikia digrii 0. Pembe ya sasa inachapishwa kwenye Serial Monitor, ikikuruhusu kuona nafasi halisi ya servo kwa wakati halisi. (katika video saa 05:20)

Sura za Video

  • [00:00] Utangulizi wa kudhibiti servo kwa vitufe
  • [00:57] Mwongozo wa uunganishaji wa servo na vitufe vya kushinikiza
  • [02:12] Maelezo ya msimbo, sehemu ya 1: Usanidi na usanidi
  • [03:25] Maelezo ya msimbo, sehemu ya 2: Mantiki kuu ya kitanzi
  • [05:20] Maonyesho ya moja kwa moja ya mradi
  • [06:23] Hitimisho na matumizi yanayowezekana

Bilder

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
Språk: 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
  }// 

  
}

Filer📁

Andra filer