Cari Kode

Pelajaran 89: Menggunakan Motor Servo Kontinu atau 360| Kursus Arduino Langkah demi Langkah

Pelajaran 89: Menggunakan Motor Servo Kontinu atau 360| Kursus Arduino Langkah demi Langkah

Pernahkah Anda ingin memutar motor ke salah satu arah selama yang Anda inginkan, daripada hanya berayun bolak-balik seperti servo standar? Inilah yang ditawarkan oleh motor servo kontinu atau 360 derajat. Tidak seperti servo standar yang bergerak ke sudut tertentu (biasanya 0 hingga 180 derajat), servo kontinu berputar tanpa henti searah jarum jam atau berlawanan arah jarum jam. Ini membuatnya sempurna untuk membangun robot kecil, platform kamera, atau proyek apa pun yang membutuhkan kontrol putaran kontinu.

Dalam proyek ini, kita akan membangun sistem kontrol untuk servo 360 derajat hanya menggunakan tiga tombol tekan. Anda akan dapat memerintahkan servo untuk berputar searah jarum jam, berlawanan arah jarum jam, atau berhenti kapan saja. Panduan ini akan memandu Anda melalui pengkabelan, menjelaskan bagian kode yang dapat dikonfigurasi pengguna, dan menunjukkan demonstrasi langsung sistem yang sedang berjalan.

Berikut adalah beberapa ide praktis untuk menggunakan servo kontinu dalam proyek Anda sendiri:

  • Bangun robot beroda dua kecil: Gunakan dua servo kontinu untuk menggerakkan roda, memungkinkan gerakan maju, mundur, dan berbelok.
  • Buat dudukan kamera pan-and-tilt: Gunakan satu servo kontinu untuk panning lambat tanpa henti pada kamera keamanan atau satwa liar.
  • Otomatiskan ban berjalan: Kontrol sistem konveyor kecil untuk menyortir atau mengeluarkan barang.
  • Rancang dudukan tampilan berputar: Tampilkan model 3D atau produk di platform yang berputar terus menerus.

Perangkat Keras yang Dibutuhkan

  • Papan Arduino (Uno, Nano, dll.)
  • Motor servo kontinu (360 derajat) (misalnya, FS90R, DS04-NFC)
  • 3x Tombol tekan
  • Kabel jumper
  • Papan breadboard

Panduan Pengkabelan

Pengkabelan untuk proyek ini cukup sederhana. Motor servo memiliki tiga kabel: biasanya yang gelap untuk ground (GND), yang tengah (sering merah) untuk daya (5V), dan yang lebih terang (oranye, kuning, atau putih) untuk sinyal. Seperti yang ditunjukkan dalam video, servo dihubungkan ke Arduino sebagai berikut:

  • Ground Servo (kabel gelap): Hubungkan ke GND Arduino.
  • Daya Servo (kabel tengah/merah): Hubungkan ke 5V Arduino.
  • Sinyal Servo (kabel terang): Hubungkan ke pin 9 Arduino.

Untuk tiga tombol tekan, setiap tombol memiliki dua sisi. Satu sisi dari semua tombol dihubungkan bersama dan kemudian ke GND Arduino. Sisi lain dari setiap tombol dihubungkan ke pin digital terpisah, seperti dijelaskan di bawah ini (dalam video pada 03:40):

  • Tombol Searah Jarum Jam (CW): Hubungkan ke pin 2 Arduino.
  • Tombol Berhenti: Hubungkan ke pin 3 Arduino.
  • Tombol Berlawanan Arah Jarum Jam (CCW): Hubungkan ke pin 4 Arduino.
360 servo 3 push button wiring

Penjelasan Kode

Kode dirancang agar mudah dikonfigurasi. Bagian terpenting yang perlu Anda sesuaikan adalah array sc[], yang menyimpan nilai PWM spesifik yang dikirim ke servo untuk mengontrol aksinya. Nilai-nilai ini tidak universal dan harus dikalibrasi untuk motor servo spesifik Anda (dalam video pada 12:23).

int sc[]={106, 58, 0};// perintah servo secara berurutan
        //CCW, STOP,CW

Array ini adalah inti dari kalibrasi. Nilai-nilai digunakan dalam urutan ini:

  • sc[0] = 106: Nilai ini dikirim untuk membuat servo berputar berlawanan arah jarum jam.
  • sc[1] = 58: Ini adalah nilai "berhenti". Karena sirkuit internal, nilai pasti yang membuat motor berhenti bervariasi. Anda mungkin menemukan servo Anda berputar perlahan bahkan saat perintah ini dikirim, dan Anda perlu menyesuaikan angka ini sedikit untuk menemukan nilai "berhenti total" yang sebenarnya untuk motor Anda.
  • sc[2] = 0: Nilai ini membuat servo berputar searah jarum jam dengan kecepatan maksimum.

Anda dapat menyesuaikan nilai dalam array sc[] untuk mengubah kecepatan putaran. Misalnya, mengatur sc[0] menjadi 70 akan membuat putaran berlawanan arah jarum jam lebih lambat. Semakin dekat nilai ke nilai "berhenti" (58), semakin lambat motor akan berputar ke arah tersebut. Nilai yang lebih jauh dari 58 akan meningkatkan kecepatan hingga batas maksimum.

Ada juga beberapa variabel kunci lain yang mungkin perlu Anda ubah. servoPin diatur ke 9, yang harus berupa pin berkemampuan PWM di Arduino Anda. Pin tombol didefinisikan di bagian atas kode dan dapat diubah jika diperlukan.

int servoPin = 9;// pin ini harus salah satu yang memiliki PWM ~

#define STOPpin 3 // pin tombol tekan untuk STOP
#define CWpin 2 //  tombol tekan untuk CW
#define CCWpin 4 // tombol tekan untuk CCW

Terakhir, array scText[] menyimpan string yang dicetak ke Serial Monitor untuk debugging. Anda dapat mengubahnya jika ingin menampilkan pesan yang berbeda.

Cara Menggunakan Kode

Unggah kode yang disediakan ke papan Arduino Anda. Buka Serial Monitor (atur ke 9600 baud) untuk melihat pesan status. Anda sekarang dapat mengontrol servo menggunakan tiga tombol:

  • Tekan dan tahan tombol CW: Servo akan mulai berputar searah jarum jam. Serial Monitor akan menampilkan "CW" dan nilai yang dikirim.
  • Tekan dan tahan tombol CCW: Servo akan mulai berputar berlawanan arah jarum jam. Serial Monitor akan menampilkan "CCW" dan nilai yang dikirim.
  • Tekan tombol Berhenti: Servo akan mencoba berhenti. Serial Monitor akan menampilkan "Stop".

Jika servo Anda tidak berhenti sepenuhnya saat tombol Stop ditekan, Anda perlu mengkalibrasi nilai sc[1] dalam array sc[]. Coba ubah nilainya sedikit (misalnya, dari 58 menjadi 54 atau 52) dan unggah ulang kode hingga motor tetap diam sempurna.

Demonstrasi Langsung

Dalam video, presenter mendemonstrasikan sistem lengkap. Anda dapat melihat servo berputar di kedua arah berdasarkan penekanan tombol. Output Serial Monitor juga ditampilkan, memperlihatkan status saat ini ("CW", "Stop", atau "CCW") dan nilai spesifik yang dikirim ke servo. Ini adalah alat yang sangat baik untuk debugging dan menemukan nilai kalibrasi yang sempurna untuk motor spesifik Anda. Demonstrasi ini juga menunjukkan bagaimana menyesuaikan nilai dalam array sc[] secara langsung memengaruhi kecepatan motor, dari gerakan lambat hingga kecepatan rotasi maksimumnya.

Kesimpulan

Proyek ini menyediakan cara sederhana dan efektif untuk mengendalikan motor servo kontinu. Dengan memahami proses kalibrasi untuk nilai "stop", Anda dapat memastikan kontrol yang presisi dalam proyek robotika dan otomasi Anda sendiri.

Bab Video

  • [00:05] Pengenalan Motor Servo Kontinu
  • [02:02] Tinjauan Perangkat Keras Servo
  • [02:40] Diagram Pengkabelan dan Koneksi
  • [05:07] Penjelasan Kode: Variabel dan Pengaturan
  • [08:03] Penjelasan Kode: Logika Loop Utama
  • [09:56] Fungsi servoCommand()
  • [10:54] Demonstrasi Langsung dan Output Serial Monitor
  • [12:23] Mengkalibrasi Kecepatan Servo dan Nilai Stop

Gambar

360 servo 3 push button wiring
360 servo 3 push button wiring
209-How to control a 360 servo with push buttons
Bahasa: C++
++
/*
 *  S05-13 Servo with 3 push buttons
 *  Demonstration of Controlling a Continuous Servo (360 servo)
 *  This code allows you to control a 360-degree servo using push buttons
 *
 * Modified by Ahmad Shamshiri for Robojax Robojax.com
 * on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
 Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww

 Watch Introduction to  360 Servo video with code: https://youtu.be/b_xvu6wWafA
 You can get the wiring diagram from my Arduino Course at Udemy.com
 Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
 visit my course now http://robojax.com/L/?id=62

 If you found this tutorial helpful, please support me so I can continue creating
 content like this. 
 or make a donation using PayPal http://robojax.com/L/?id=64

 Original code by BARRAGAN <http://barraganstudio.com>
 *
 * Code is available at http://robojax.com/learn/arduino

 * 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 downloaded 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/>.

*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int servoPin = 9;// this pin must be one of those with PWM ~


#define STOPpin 3 // push button pin  for STOP
#define CWpin 2 //  push button for CW
#define CCWpin 4 // push button for CCW

int sc[]={106, 58, 0};// servo commands are in order
        //CCW, STOP,CW

String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
      //CW button status (CWBS)
      //CCW button status (CCWBS)
      //stop button status (SBS)

void setup() {
  Serial.begin(9600);
  pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
  pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
  pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW

  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
  myservo.write(sc[1]);// send STOP command
  statusText=1;// initial value is STOP
}



void loop() {

    CCWBS = digitalRead(CCWpin);// read status of button CCW
    SBS = digitalRead(STOPpin);// read status of button STOP
    CWBS = digitalRead(CWpin);// read status of button CW

    if(CCWBS ==LOW)
    {
      servoCommand(0);
    }else if(SBS ==LOW)
    {
      servoCommand(1);
    }else if(CWBS ==LOW)
    {
      servoCommand(2);
    }

  Serial.println(scText[statusText]);
  delay(50);
}// loop



void servoCommand(int n)
{
   statusText = n;
   myservo.write(sc[n]);
   Serial.print("Going to  ");
   Serial.print(scText[n]);
   Serial.print( "(");
   Serial.print(sc[n]);
   Serial.println(")");
}

Hal-hal yang mungkin Anda butuhkan

Sumber daya & referensi

Berkas📁

File lainnya