Cari Kode

Pelajaran 88: Mengendalikan motor servo menggunakan dua sakelar tombol tekan

Pelajaran 88: Mengendalikan motor servo menggunakan dua sakelar tombol tekan

Proyek ini menunjukkan cara mengendalikan motor servo menggunakan dua tombol tekan dengan Arduino. Alih-alih mengandalkan potensiometer atau perintah serial, Anda dapat menggunakan sakelar taktil sederhana untuk menggerakkan servo ke kiri atau kanan secara manual. Ini sangat berguna untuk aplikasi yang membutuhkan kontrol fisik langsung atas suatu mekanisme, seperti membangun lengan robot, menyesuaikan gimbal kamera, atau membuat sistem pan-and-tilt yang dikendalikan dari jarak jauh. Tombol-tombol tersebut memungkinkan Anda untuk menyesuaikan sudut servo secara bertahap, dengan kemampuan menahan tombol untuk menggerakkannya melintasi seluruh rentang geraknya.

Berikut adalah beberapa proyek praktis yang dapat Anda bangun dengan pengaturan ini:

  • Membangun panel kontrol manual untuk lengan robot atau gripper.
  • Membuat penggeser kamera atau kepala pan-tilt yang dikendalikan dari jarak jauh.
  • Mengembangkan antarmuka kontrol fisik untuk kemudi pesawat model atau perahu.
  • Membuat "teach pendant" sederhana untuk merekam posisi bagi mesin CNC atau printer 3D.

Perangkat Keras dan Komponen

Proyek ini hanya membutuhkan beberapa komponen dasar, menjadikannya titik awal yang sangat baik untuk mempelajari perangkat input dan output dengan Arduino.

  • Papan Arduino (Uno, Nano, Mega, dll.)
  • Motor servo (misalnya, SG90 atau MG995)
  • Dua tombol tekan momen
  • Kabel jumper
  • Breadboard (opsional tetapi disarankan)

Panduan Pengkabelan

Dalam video, pengkabelannya sederhana. Pin sinyal motor servo terhubung ke pin berkemampuan PWM pada Arduino, yaitu pin 9 dalam contoh ini. Daya dan ground untuk servo terhubung ke pin 5V dan GND pada Arduino. Kedua tombol tekan dihubungkan dengan cara yang mirip satu sama lain. Satu kaki dari setiap tombol terhubung ke ground, dan kaki lainnya terhubung ke pin input digital pada Arduino (pin 2 untuk tombol "kiri" dan pin 3 untuk tombol "kanan"). Kode ini menggunakan resistor pull-up internal, sehingga tidak diperlukan resistor eksternal untuk tombol-tombol tersebut. (dalam video pada 00:57)

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

Penjelasan Kode

Kode ini dirancang agar mudah dikonfigurasi. Bagian yang dapat dikonfigurasi pengguna berada di bagian atas sketsa. Berikut adalah rincian variabel dan definisi penting yang mungkin ingin Anda sesuaikan untuk proyek Anda sendiri.

#include <Servo.h>

Servo myservo;  // membuat objek servo untuk mengontrol servo
int servoPin = 9;// pin ini harus memiliki PWM ~
int angle =90;    // sudut awal untuk servo
int angleStep =5;

#define LEFT 2   // pin 2 terhubung ke tombol kiri
#define RIGHT  3  // pin 3 terhubung ke tombol kanan
  • servoPin: Variabel ini mendefinisikan pin Arduino yang terhubung dengan kabel sinyal servo. Sangat penting untuk menggunakan pin yang mendukung Pulse Width Modulation (PWM), biasanya ditandai dengan simbol ~ pada papan.
  • angle: Ini mengatur sudut awal servo saat Arduino mulai. Nilai defaultnya adalah 90 derajat, yang biasanya menengahkan servo.
  • angleStep: Ini adalah kenaikan sudut servo setiap kali tombol ditekan. Nilai 5 berarti setiap tekan akan menggerakkan servo sebesar 5 derajat. Anda dapat meningkatkannya untuk gerakan lebih cepat atau menguranginya untuk kontrol yang lebih halus.
  • LEFT dan RIGHT: Arahan #define ini menetapkan pin digital yang terhubung dengan tombol tekan. Jika Anda menghubungkan tombol ke pin yang berbeda, Anda harus mengubah nilai-nilai ini agar sesuai dengan pengaturan Anda.

Logika inti dalam fungsi loop() memeriksa apakah tombol ditekan (dengan membaca sinyal LOW karena konfigurasi pull-up). Jika tombol "kanan" ditekan, variabel angle dikurangi sebesar angleStep. Jika tombol "kiri" ditekan, angle ditambah. Kode ini mencakup pemeriksaan batas untuk memastikan sudut tetap dalam rentang 0 hingga 180 derajat. Fungsi myservo.write(angle) kemudian digunakan untuk memerintahkan servo bergerak ke posisi baru.

Demonstrasi Proyek Langsung

Dalam demonstrasi video, fungsionalitasnya ditunjukkan dengan jelas. Menekan dan menahan tombol "kiri" menyebabkan servo bergerak mulus ke kiri, dengan sudut bertambah 5 derajat setiap kali, hingga mencapai 180 derajat dan berhenti. Demikian pula, menekan dan menahan tombol "kanan" membuat servo bergerak kembali ke kanan, mengurangi sudut hingga mencapai 0 derajat. Sudut saat ini dicetak ke Serial Monitor, memungkinkan Anda melihat posisi persis servo secara real-time. (dalam video pada 05:20)

Bab Video

  • [00:00] Pengenalan mengendalikan servo dengan tombol
  • [00:57] Panduan pengkabelan untuk servo dan tombol tekan
  • [02:12] Penjelasan kode, bagian 1: Pengaturan dan konfigurasi
  • [03:25] Penjelasan kode, bagian 2: Logika loop utama
  • [05:20] Demonstrasi langsung proyek
  • [06:23] Kesimpulan dan aplikasi potensial

Gambar

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

  
}

Berkas📁

File lainnya