Wa Koodu

Líloṣiṣẹ́ Servo pẹ̀lú Àwọn Bọ́tìnì Títẹ̀ Nípa Lílo Arduino

Líloṣiṣẹ́ Servo pẹ̀lú Àwọn Bọ́tìnì Títẹ̀ Nípa Lílo Arduino

Nínú ẹ̀kọ́ yìí, a óò kọ́ bí a ṣe lè ṣàkóso ẹ̀rọ servo kan nípa lílo àwọn bọ́tìnnì ìtẹ̀ méjì, ọ̀kan fún gbígbé servo lọ sí òsì àti èkejì fún gbígbé e lọ sí ọ̀tún. Nígbà tí o bá tẹ bọ́tìnnì ọ̀tún, servo yóò gbéra ní ìwọ̀n 10 ìyíwọ̀ sí ọ̀tún, àti nígbà tí o bá tẹ bọ́tìnnì òsì, yóò gbéra ní ìwọ̀n kan náà sí òsì. Bí o bá di bọ́tìnnì kan múlẹ̀, servo yóò máa gbéra ní ìtọ́sọ́nà yẹn títí tí o fi yóò tú u sílẹ̀.

Iṣẹ́-ọwọ́ yìí jẹ́ ọ̀nà tí ó dára láti lóye bí a ṣe lè so àwọn bọ́tìnnì pọ̀ mọ́ ẹ̀rọ servo nípa lílo Arduino. A óò bo àwọn ohun èlò tí a nílò, àwọn ìtọ́sọ́nà ìsopọ̀, àti kóòdù tí a nílò láti mú kí gbogbo rẹ̀ ṣiṣẹ́. Fún òye tí ó ṣe kedere, o lè wo fídíò tí ó bá ẹ̀kọ́ yìí lọ (nínú fídíò ní 01:00).

Àlàyé Ohun Èlò

Fún iṣẹ́-ọwọ́ yìí, o óò nílò Arduino board kan, ẹ̀rọ servo kan, àti àwọn bọ́tìnnì ìtẹ̀ méjì. Ẹ̀rọ servo ni ó máa ṣe gbígbéra, nígbà tí àwọn bọ́tìnnì ìtẹ̀ yóò sì ṣiṣẹ́ gẹ́gẹ́ bí àwọn ohun tí a fi ń kó wọlé láti ṣàkóso ìtọ́sọ́nà gbígbéra yẹn. Arduino ni ó máa ṣe àgbéyẹ̀wò àwọn ohun tí a kó wọlé wọ̀nyí, kí ó sì rán àwọn àmì tí ó yẹ sí ẹ̀rọ servo.

Ẹ̀rọ servo máa ń ṣiṣẹ́ nípa lílo àwọn àmì pulse-width modulation (PWM). Nípa ríran àwọn ìwọ̀n pulse tí ó yàtọ̀ síra, o lè ṣàkóso ìyíwọ̀ ẹ̀rọ servo. A óò so àwọn bọ́tìnnì ìtẹ̀ pọ̀ mọ́ àwọn pin input oní nọ́ńbà ní orí Arduino, àti pé a óò lo àwọn resistor ìfà-oke inú láti rọrùn ìsopọ̀.

Àwọn Àlàyé Datasheet

OlùṣeOríṣiríṣi
Nọ́ńbà apáSG90
Fóltì Logic/IO5 V
Fóltì ìpèsè4.8–6 V
Ìwọ̀n ìjàde lọ́wọ́ (fún ikanni kọ̀ọ̀kan)1.5 A tí ó pọ̀ jù
Ìwọ̀n ìṣàn tí ó ga jù (fún ikanni kọ̀ọ̀kan)2.5 A tí ó pọ̀ jù
Ìtọ́sọ́nà ìgbohùnsáfẹ́fẹ́ PWM50 Hz
Àwọn ìpele ìwọ̀n input logic0.3VCC sí 0.7VCC
Ìdínkù fóltì / RDS(on) / ìkún0.4 V
Àwọn ìwọ̀n ooru85 °C
ÀpótíṢíṣe láti inú plástìkì
Àwọn àkíyèsí / àwọn oríṣiYíyí 180° tí ó jẹ́ bọ́g-bọ́g

  • Rí i dájú pé ẹ̀rọ servo náà bá fóltì ìpèsè rẹ mu.
  • Lo ìmú-ooru tí ó yẹ bí o bá ń ṣiṣẹ́ ní àwọn ìwọ̀n ìṣàn gíga.
  • So àwọn bọ́tìnnì pọ̀ mọ́ ilẹ̀ pẹ̀lú ìtòlẹ́sẹẹsẹ ìfà-oke.
  • Ṣe debounce àwọn bọ́tìnnì rẹ bí o bá ń rí ìwà tí kò dúró ṣinṣin.
  • Ṣàkíyèsí ìjàde serial fún ṣíṣe àtúnṣe àṣìṣe.

Àwọn Ìtọ́sọ́nà Ìsopọ̀

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

Láti so àwọn ohun èlò pọ̀, bẹ̀rẹ̀ nípa sísopọ̀ ẹ̀rọ servo. So okùn pupa ti ẹ̀rọ servo pọ̀ mọ́ pin 5V ní orí Arduino, okùn dúdú pọ̀ mọ́ pin GND, àti okùn àmì yẹ́lò tàbí funfun pọ̀ mọ́ pin 9 ní orí Arduino. Pin yìí ni yóò ṣàkóso ipò ẹ̀rọ servo.

Lẹ́yìn náà, so àwọn bọ́tìnnì ìtẹ̀ pọ̀. So ìpẹ̀kun kan ti bọ́tìnnì ọ̀tún pọ̀ mọ́ pin 2 àti ìpẹ̀kun kejì pọ̀ mọ́ ilẹ̀. Fún bọ́tìnnì òsì, so ìpẹ̀kun kan pọ̀ mọ́ pin 12 àti ìpẹ̀kun kejì pọ̀ mọ́ ilẹ̀ pẹ̀lú. Ìtòlẹ́sẹẹsẹ yìí máa jẹ́ kí àwọn resistor ìfà-oke inú pa àwọn pin mọ́ ní gíga nígbà tí a kò tẹ àwọn bọ́tìnnì.

Àwọn Àpẹẹrẹ Kóòdù & Ìtọ́sọ́nà

Ẹ jẹ́ kí a bẹ̀rẹ̀ pẹ̀lú kóòdù fún ṣíṣe àkóso ẹ̀rọ servo pẹ̀lú bọ́tìnnì ìtẹ̀ kan ṣoṣo. Kóòdù náà bẹ̀rẹ̀ nípa ṣíṣe ìmúrasílẹ̀ ohun servo àti ṣíṣètò ìyíwọ̀ àkọ́kọ́ kan. Èyí ni àpẹẹrẹ kúkúrú kan:

int angle = 90;    // ìyíwọ̀ àkọ́kọ́ fún servo
int angleStep = 10; // ìwọ̀n ìgbésẹ̀ fún gbígbéra

Nínú àpẹẹrẹ yìí, angle dúró fún ipò lọ́wọ́lọ́wọ́ ti ẹ̀rọ servo, nígbà tí angleStep ṣàlàyé iye tí servo máa gbéra pẹ̀lú ìtẹ̀ bọ́tìnnì kọ̀ọ̀kan. Kóòdù yìí ṣe pàtàkì fún títọ̀pasẹ̀ ipò ẹ̀rọ servo.

Lẹ́yìn náà, a ní iṣẹ́ ìmúrasílẹ̀ níbi tí a ti so servo pọ̀ àti tí a ṣètò àwọn pin input:

void setup() {
  Serial.begin(9600);          // ṣètò serial
  myservo.attach(9);  // so servo pọ̀ mọ́ pin 9
  pinMode(2, INPUT_PULLUP); // ṣètò pin bọ́tìnnì
}

Nínú ìmúrasílẹ̀, a bẹ̀rẹ̀ ìṣàkíyèsí serial àti a so servo pọ̀ mọ́ pin 9. Bọ́tìnnì tí ó wà ní pin 2 ni a ṣètò gẹ́gẹ́ bí input pẹ̀lú resistor ìfà-oke, èyí tí ó rọrùn ìsopọ̀ àti tí ó yẹra fún àìní àwọn resistor ìta.

Níkẹyìn, a wo iṣẹ́ loop tí ó ń ṣe ìtọ́jú ìtẹ̀ bọ́tìnnì:

while(digitalRead(2) == LOW) {
  angle = angle + angleStep; // pọ̀ ìyíwọ̀ sí i
  myservo.write(angle); // gbé servo
}

Loop yìí ń ṣàyẹ̀wò nígbà gbogbo bí a bá tẹ bọ́tìnnì. Nígbà tí a bá tẹ̀ ẹ́, ìyíwọ̀ náà máa pọ̀ sí i nípa ìwọ̀n ìgbésẹ̀ tí a ṣètò, àti servo yóò gbéra ní ìbámu. Ó ṣe pàtàkì láti rí i dájú pé ìyíwọ̀ náà wà láàárín àwọn ìwọ̀n tí ó yẹ (0 sí 180 ìyíwọ̀) láti yẹra fún ìbàjẹ́ ẹ̀rọ servo.

Ìfihàn / Ohun Tí O Lè Retí

Nígbà tí o bá tẹ bọ́tìnnì ọ̀tún, ẹ̀rọ servo yóò gbéra sí ọ̀tún ní àwọn ìwọ̀n 10 títí tí yóò fi dé ìwọ̀n 180 tí ó pọ̀ jù. Bákan náà, tí o bá tẹ bọ́tìnnì òsì, yóò gbé e lọ sí òsì. Bí o bá di bọ́tìnnì kan múlẹ̀, servo yóò máa gbéra ní ìtọ́sọ́nà yẹn títí tí o fi yóò tú u sílẹ̀ (nínú fídíò ní 01:00).

Àwọn àṣìṣe tí ó wọ́pọ̀ pẹ̀lú àwọn ìṣòro ìsopọ̀, bíi àwọn ìsopọ̀ tí kò tọ́ tàbí àwọn input tí ń fòfò. Rí i dájú nígbà gbogbo pé àwọn ìsopọ̀ rẹ ṣe dáradára àti pé o ń lo àwọn pin tí ó tọ́ gẹ́gẹ́ bí a ti sọ nínú kóòdù.

Aworan

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

  
}

Ohun ti o le nilo

Orisun & itọkasi

Ko si awọn orisun sibẹsibẹ.

Fáìlìs📁

Ko si awọn faili ti o wa.