Wa Koodu

Ẹ̀kọ́ 88: Ṣíṣàkóso ẹ̀rọ servo ní lílo àwọn bọ̀tìnì títẹ méjì

Ẹ̀kọ́ 88: Ṣíṣàkóso ẹ̀rọ servo ní lílo àwọn bọ̀tìnì títẹ méjì

Iṣẹ́ yìí ṣàfihàn bí a ṣe lè ṣàkóso mótò servo ní lílo àwọn bọ́tìnnì títẹ méjì pẹ̀lú Arduino. Dípò gbígbéṣẹ́ lórí potentiometer tàbí àṣẹ serial, o lè lo àwọn bọ́tìnnì títẹ́ onífọwọ́kan láti gbé servo lọ sí òsì tàbí ọ̀túnnú. Èyí wúlò gan-an fún àwọn ohun èlò tí o nílò ìṣàkóso tààrà, gẹ́gẹ́ bí kíkọ́ apá ẹ̀rọ roboti, àtúnṣe camera gimbal, tàbí ṣíṣẹ̀dá ètò pan-and-tilt tí a ń ṣàkóso láti ọ̀nà jíjìn. Àwọn bọ́tìnnì náà gbà ọ́ láàyè láti ṣàtúnṣe igun servo ní àfikún, pẹ̀lú agbára láti di bọ́tìnnì mú láti gbá a kọjá gbogbo ìwọ̀n rẹ̀.

Èyí ni àwọn iṣẹ́ àdánilọ́wọ́ díẹ̀ tí o lè kọ́ pẹ̀lú ètò yìí:

  • Kíkọ́ pápá ìṣàkóso afọwọ́ fún apá ẹ̀rọ roboti tàbí ohun àmú.
  • Ṣíṣẹ̀dá orí pan-tilt tàbí camera slider tí a ń ṣàkóso láti ọ̀nà jíjìn.
  • Ìdàgbàsókè ojú ìṣàkóso afọ́wọ́ fún ọkọ̀ òfuurufú àwòkọ́ṣe tàbí ìdarí ọkọ̀ ojú omi.
  • Ṣíṣe "teach pendant" rírọrùn láti ṣàkọsílẹ̀ àwọn ipò fún ẹ̀rọ CNC tàbí ẹ̀rọ ìtẹ̀wé 3D.

Ohun Èlò àti Àwọn Ẹ̀yà

Iṣẹ́ yìí nílò àwọn ẹ̀yà pàtàkì díẹ̀ péré, tí ó sì jẹ́ ibi ìbẹ̀rẹ̀ tí ó dára láti kọ́ nípa àwọn ẹ̀yà input àti output pẹ̀lú Arduino.

  • Bọ́ọ̀dù Arduino (Uno, Nano, Mega, àti bẹ́ẹ̀ bẹ́ẹ̀ lọ)
  • Mótò servo (bíi SG90 tàbí MG995)
  • Àwọn bọ́tìnnì títẹ́ onífọwọ́kan méjì
  • Àwọn okun oníjùmọ̀sọ́pọ̀
  • Breadboard (kìí ṣe dandan ṣùgbọ́n a ṣe ìmọ̀ràn rẹ̀)

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

Nínú fídíò náà, ìsopọ̀ náà rọrùn. Pínì ifihan àmì servo ni a so pọ̀ mọ́ pínì tí ó ní agbára PWM lórí Arduino, èyí tí ó jẹ́ pínì 9 nínú àpẹẹrẹ yìí. Agbára àti ilẹ̀ fún servo ni a so pọ̀ mọ́ àwọn pínì 5V àti GND ti Arduino. Àwọn bọ́tìnnì títẹ́ méjì náà ni a so pọ̀ ní ọ̀nà tí ó jọra. Ẹsẹ̀ kan ti bọ́tìnnì kọ̀ọ̀kan ni a so pọ̀ mọ́ ilẹ̀, àti ẹsẹ̀ kejì ni a so pọ̀ mọ́ pínì input oní nọ́ńbà kan lórí Arduino (pínì 2 fún bọ́tìnnì "òsì" àti pínì 3 fún bọ́tìnnì "ọ̀tún"). Kódù náà lo àwọn resistor ìfààwọ́ inú, nítorí náà kò sí àwọn resistor òde tí a nílò fún àwọn bọ́tìnnì. (nínú fídíò ní 00:57)

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

Àlàyé Kódù

A ṣe kódù náà ní ọ̀nà tí ó rọrùn láti ṣàtúnṣe. Àwọn apá pàtàkì tí olùṣàmúlò lè ṣàtúnṣe wà ní ìbẹ̀rẹ̀ sketch náà. Èyí ni ìpínkiri àwọn àṣàyàn àti ìtumọ̀ tí o lè fẹ́ láti ṣàtúnṣe fún iṣẹ́ tìrẹ.

#include <Servo.h>

Servo myservo;  // ṣẹ̀dá ohun servo láti ṣàkóso servo
int servoPin = 9;// pínì yìí gbọ́dọ̀ jẹ́ ọ̀kan nínú àwọn tí ó ní PWM ~
int angle =90;    // igun ìbẹ̀rẹ̀ fún servo
int angleStep =5;

#define LEFT 2   // pínì 2 ni a so pọ̀ mọ́ bọ́tìnnì òsì
#define RIGHT  3  // pínì 3 ni a so pọ̀ mọ́ bọ́tìnnì ọ̀tún
  • servoPin: Àṣàyàn yìí ṣàlàyé pínì Arduino tí a so okun ifihan àmì servo pọ̀ mọ́. Ó ṣe pàtàkì láti lo pínì tí ó ń ṣàtìlẹ́yìn Pulse Width Modulation (PWM), tí a sábà máa ń fi àmì ~ hàn lórí bọ́ọ̀dù.
  • angle: Èyí ṣètò igun ìbẹ̀rẹ̀ ti servo nígbà tí Arduino bẹ̀rẹ̀. Iye àìtúnṣe jẹ́ 90 ìwọ̀n, èyí tí ó sábà máa ń mú servo dúró sí àárín.
  • angleStep: Èyí ni àfikún tí igun servo yóò yípadà nígbàkúùgbà tí a tẹ bọ́tìnnì. Iye 5 túmọ̀ sí pé títẹ̀ kọ̀ọ̀kan yóò gbé servo ní ìwọ̀n 5. O lè pọ̀ sí i fún ìyípadà tí ó yára tàbí dín kù fún ìṣàkóso tí ó ṣe kúlẹ̀kúlẹ̀.
  • LEFT àti RIGHT: Àwọn àṣẹ #define wọ̀nyí yàn àwọn pínì oní nọ́ńbà tí a so àwọn bọ́tìnnì títẹ́ pọ̀ mọ́. Bí o bá so àwọn bọ́tìnnì rẹ pọ̀ mọ́ àwọn pínì mìíràn, o gbọ́dọ̀ yí àwọn iye wọ̀nyí padà láti bá ètò rẹ mu.

Ìtumọ̀ pàtàkì nínú iṣẹ́ loop() ṣàyẹ̀wò bí a bá tẹ bọ́tìnnì (nípa kíkà ifihan àmì LOW nítorí ìtòlẹ́ pull-up). Bí a bá tẹ bọ́tìnnì "ọ̀tún", ó dín angle kù nípa angleStep. Bí a bá tẹ bọ́tìnnì "òsì", ó pọ̀ angle sí i. Kódù náà ní àwọn àyẹ̀wò ààlà láti rí i dájú pé igun náà wà láàárín 0 sí 180 ìwọ̀n. Iṣẹ́ myservo.write(angle) ni a lò láti pàṣẹ fún servo láti gbé sí ipò tuntun.

Ìfihàn Iṣẹ́ Àdánilọ́wọ́

Nínú ìfihàn fídíò, iṣẹ́ náà hàn kedere. Títẹ̀ àti dídì bọ́tìnnì "òsì" mú kí servo gbá lọ sí òsì ní ọ̀nà dídán, pẹ̀lú igun tí ó ń pọ̀ sí i ní ìwọ̀n 5 ní àkókò kan, títí ó fi dé 180 ìwọ̀n tí ó sì dúró. Bákan náà, títẹ̀ àti dídì bọ́tìnnì "ọ̀tún" mú kí servo gbá padà sí ọ̀tún, tí ó ń dín igun kù títí ó fi dé 0 ìwọ̀n. A tẹ̀ igun lọ́wọ́lọ́wọ́ sí Serial Monitor, tí ó gbà ọ́ láàyè láti rí ipò gangan ti servo ní àkókò gidi. (nínú fídíò ní 05:20)

Àwọn Abala Fídíò

  • [00:00] Ìfihàn sí ṣíṣàkóso servo pẹ̀lú àwọn bọ́tìnnì
  • [00:57] Ìtọ́sọ́nà ìsopọ̀ fún servo àti àwọn bọ́tìnnì títẹ́
  • [02:12] Àlàyé kódù, apá 1: Ìtòlẹ́ àti ìṣàtúnṣe
  • [03:25] Àlàyé kódù, apá 2: Ìtumọ̀ lúùpù àkọ́kọ́
  • [05:20] Ìfihàn àdánilọ́wọ́ iṣẹ́ náà
  • [06:23] Ìparí àti àwọn ohun èlò tí ó lè ṣiṣẹ́

Aworan

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

  
}

Fáìlìs📁

Awọn faili miiran