Tafuta Msimbo

Kudhibiti Servo kwa Vitufe vya Kushinikiza Kwa Kutumia Arduino

Kudhibiti Servo kwa Vitufe vya Kushinikiza Kwa Kutumia Arduino

Katika mafunzo haya, tutajifunza jinsi ya kudhibiti motor ya servo kwa kutumia vifungo viwili vya kushinikiza, moja kwa kusogeza servo kushoto na kingine kwa kuisogeza kulia. Ukibonyeza kitufe cha kulia, servo itasogea kwa digrii 10 kulia, na ukibonyeza kitufe cha kushoto, itasogea kwa kiasi sawa kushoto. Ukishikilia kitufe chini, servo itaendelea kusogea katika mwelekeo huo hadi ukiache.

Mradi huu ni njia nzuri ya kuelewa jinsi ya kuunganisha vifungo na motor ya servo kwa kutumia Arduino. Tutashughulikia vipengele muhimu vya vifaa, maagizo ya wiring, na msimbo unaohitajika kufanya yote yafanye kazi. Kwa ufahamu wazi zaidi, unaweza kurejelea video inayoambatana na mafunzo haya (katika video saa 01:00).

Vifaa Vimeelezwa

Kwa mradi huu, utahitaji bodi ya Arduino, motor ya servo, na vifungo viwili vya kushinikiza. Motor ya servo inawajibika kwa harakati, wakati vifungo vya kushinikiza hufanya kama pembejeo za kudhibiti mwelekeo wa harakati hiyo. Arduino huchakata pembejeo hizi na kutuma ishara zinazofaa kwa servo.

Motor ya servo hufanya kazi kwa misingi ya ishara za pulse-width modulation (PWM). Kwa kutuma upana tofauti wa pulse, unaweza kudhibiti pembe ya servo. Vifungo vya kushinikiza vitaunganishwa kwenye pini za pembejeo za dijiti kwenye Arduino, na tutatumia resistors za ndani za kuvuta-juu kurahisisha wiring.

Maelezo ya Datasheet

MtengenezajiMbalimbali
Nambari ya sehemuSG90
Voltage ya Logic/IO5 V
Voltage ya usambazaji4.8–6 V
Mkondo wa pato (kwa kila channel)1.5 A max
Mkondo wa kilele (kwa kila channel)2.5 A max
Mwongozo wa mzunguko wa PWM50 Hz
Viwango vya kizingiti cha pembejeo0.3VCC hadi 0.7VCC
Kushuka kwa voltage / RDS(on) / kueneza0.4 V
Mipaka ya joto85 °C
KifurushiPlastiki
Vidokezo / lahajaMzunguko wa kawaida wa 180°

  • Hakikisha servo imekadiriwa kwa voltage yako ya usambazaji.
  • Tumia uondoaji wa joto unaofaa ikiwa unafanya kazi kwa mikondo ya juu.
  • Unganisha vifungo kwenye ardhi na usanidi wa kuvuta-juu.
  • Ondoa debounce kwenye vifungo vyako ikiwa unapata tabia isiyo ya kawaida.
  • Fuatilia pato la serial kwa utatuzi.

Maagizo ya Wiring

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

Ili kuunganisha vipengele, anza kwa kuunganisha motor ya servo. Unganisha waya nyekundu ya servo kwenye pini ya 5V kwenye Arduino, waya nyeusi kwenye pini ya GND, na waya ya ishara ya njano au nyeupe kwenye pini ya 9 kwenye Arduino. Pini hii itadhibiti nafasi ya servo.

Ifuatayo, unganisha vifungo vya kushinikiza. Unganisha terminal moja ya kitufe cha kulia kwenye pini ya 2 na terminal nyingine kwenye ardhi. Kwa kitufe cha kushoto, unganisha terminal moja kwenye pini ya 12 na terminal nyingine kwenye ardhi pia. Mpangilio huu unaruhusu resistors za ndani za kuvuta-juu kuweka pini juu wakati vifungo havijabonyezwa.

Mifano ya Msimbo na Maelezo

Wacha tuanze na msimbo wa kudhibiti servo kwa kitufe kimoja cha kushinikiza. Msimbo huanzisha kitu cha servo na kuweka pembe ya awali. Hapa kuna sehemu fupi:

int angle = 90;    // pembe ya awali ya servo
int angleStep = 10; // ukubwa wa hatua kwa harakati

Katika kipande hiki, angle inawakilisha nafasi ya sasa ya servo, wakati angleStep inafafanua ni kiasi gani servo inasogea kwa kila ubonyezo wa kitufe. Msimbo huu ni muhimu kwa kufuatilia nafasi ya servo.

Ifuatayo, tuna kazi ya setup ambapo tunaunganisha servo na kusanidi pini za pembejeo:

void setup() {
  Serial.begin(9600);          // anzisha serial
  myservo.attach(9);  // unganisha servo kwenye pini ya 9
  pinMode(2, INPUT_PULLUP); // sanidi pini ya kitufe
}

Katika setup, tunaanzisha monitor ya serial na kuunganisha servo kwenye pini ya 9. Kitufe kwenye pini ya 2 kimewekwa kama pembejeo na resistor ya kuvuta-juu, ambayo hurahisisha wiring na kuepuka hitaji la resistors za nje.

Hatimaye, tunaangalia kazi ya loop inayoshughulikia ubonyezo wa kitufe:

while(digitalRead(2) == LOW) {
  angle = angle + angleStep; // ongeza pembe
  myservo.write(angle); // songa servo
}

Loop hii huangalia kila mara ikiwa kitufe kimebonyezwa. Kikibonyezwa, pembe inaongezeka kwa hatua iliyofafanuliwa, na servo inasogea ipasavyo. Ni muhimu kuhakikisha pembe inabaki ndani ya mipaka (0 hadi 180 digrii) ili kuzuia uharibifu wa servo.

Maonyesho / Nini cha Kutarajia

Ukibonyeza kitufe cha kulia, servo inapaswa kusogea kulia kwa nyongeza za digrii 10 hadi kufikia kiwango cha juu cha digrii 180. Vile vile, kubonyeza kitufe cha kushoto kitaisogeza kushoto. Ukishikilia kitufe chini, servo itaendelea kusogea katika mwelekeo huo hadi ukiache kitufe (katika video saa 01:00).

Makosa ya kawaida ni pamoja na masuala ya wiring, kama vile miunganisho isiyo sahihi au pembejeo zinazoelea. Hakikisha miunganisho yako ni salama na unatumia pini sahihi kama ilivyobainishwa kwenye msimbo.

Bilder

Control a servo with a single push button using Arduino
Control Servo with single push button with Arduino
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
98-Control a servo with a single push button using Arduino
Språk: C++
/*
 Controlling a servo with a push button with Arduino
 When a push button is pressed, the servo starts moving to the right or left until
 it reaches 180 and then returns to 0 degrees.

 May 22, 2018 at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle for servo
int angleStep =10;

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(2,INPUT_PULLUP);
   Serial.println("Robojax Servo Button ");
}

void loop() {
  while(digitalRead(2) == LOW){
  // change the angle for the next time through the loop:
  angle = angle + angleStep;

    // reverse the direction of the movement at the ends of the angle:
    if (angle <= 0 || angle >= 180) {
      angleStep = -angleStep;
    }
    myservo.write(angle); // move the servo to the desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degrees");    
  delay(100); // waits for the servo to get there
  }// while

  
}
99-Control a servo with two push buttons using Arduino
Språk: C++
/*
 Controlling a servo with two push buttons with Arduino
 When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
 When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
 At any instance, if the button is released, the servo stops.

 May 22, 2018, at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle  for servo
int angleStep =5;

#define LEFT 12   // pin 12 is connected to left button
#define RIGHT  2  // pin 2 is connected to right button

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
  pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
  myservo.write(angle);// send servo to the middle at 90 degrees
 Serial.println("Robojax Servo Button ");
}

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

  
}

Tänker att du kanske behöver

Resurser och referenser

Inga resurser än.

Filer📁

Inga filer tillgängliga.