Tutorial ini adalah bagian dari: Motor Servo
Semua video terkait motor servo yang relevan tercantum di sini. Tautan ke video lain ada di bawah artikel ini.
Mengontrol Posisi Servo dengan Gerakan Tangan untuk Arduino
Dalam tutorial ini, kita akan belajar bagaimana mengendalikan motor servo menggunakan gerakan tangan. Dengan menggerakkan tangan Anda ke kiri atau ke kanan, Anda dapat membuat motor servo merespons sesuai. Proyek ini memanfaatkan sensor gerak APDS-9960 untuk mendeteksi gerakan tangan dan menerjemahkannya menjadi posisi servo. Untuk penjelasan visual yang lebih rinci, pastikan untuk memeriksa video di (dalam video di 00:30).

Komponen inti yang akan kami gunakan termasuk motor servo dan sensor gerak APDS-9960. Motor servo akan berputar ke sudut tertentu berdasarkan gerakan yang terdeteksi, sementara sensor APDS-9960 akan menginterpretasikan gerakan tangan. Pengaturan ini memungkinkan cara yang intuitif untuk mengontrol servo tanpa sentuhan fisik.
Penjelasan Perangkat Keras
Motor servo adalah perangkat kecil yang dapat berputar pada sudut tertentu, menjadikannya ideal untuk aplikasi yang memerlukan penempatan yang tepat. Biasanya, motor ini memiliki tiga kabel: daya (merah), tanah (hitam), dan sinyal (oranye). Kabel sinyal menerima perintah untuk menggerakkan servo ke sudut yang ditentukan.
APDS-9960 adalah sensor serbaguna yang dapat mendeteksi gerakan, cahaya sekitar, dan warna. Sensor ini berkomunikasi dengan Arduino melalui I2C dan memerlukan beberapa pin untuk daya dan transfer data. Sensor ini dapat mendeteksi gerakan seperti atas, bawah, kiri, dan kanan, yang akan kita gunakan untuk mengontrol servo.
Detail Lembar Data
| Produsen | Broadcom |
|---|---|
| Nomor bagian | APDS-9960 |
| Tegangan Logika/IO | 2,4 - 3,6 V |
| Tegangan suplai | 2,4 - 3,6 V |
| Arus keluaran (per saluran) | 20 mA maks |
| Panduan frekuensi PWM | Tidak berlaku |
| Ambang logika input | 0,3 V (rendah), 0,7 V (tinggi) |
| Penurunan tegangan / RDS(on)/ saturasi | Tidak berlaku |
| Batas termal | -40 hingga 85 °C |
| Paket | 6,0 x 3,0 mm |
| Catatan / varian | Pendeteksian gerakan, pendeteksian cahaya RGB |
- Pastikan servo diberi daya dengan tegangan yang memadai (biasanya 5V).
- Sambungkan APDS-9960 ke Arduino menggunakan komunikasi I2C.
- Perhatikan pin interupsi untuk sensor gerakan.
- Gunakan resistor pull-up jika perlu untuk deteksi sinyal yang stabil.
- Pastikan untuk mengkalibrasi sensor dalam berbagai kondisi pencahayaan untuk akurasi yang lebih baik.

Untuk menghubungkan komponen, mulai dengan motor servo. Sambungkan kabel merah ke pin 5V Arduino, kabel hitam ke ground (GND), dan kabel sinyal oranye ke pin.9Ini akan memungkinkan Arduino untuk mengontrol posisi servo.
Selanjutnya, sambungkan sensor gerak APDS-9960. Hubungkan keV_Nsambungkan ke 3.3V Arduino, danGNDpin ke tanah. TheINTpin harus terhubung ke pin2pada Arduino, sementaraSDAdanSCLpin pergi ke pinA4danA5, masing-masing. Konfigurasi ini memungkinkan sensor untuk berkomunikasi secara efektif dengan Arduino.
Contoh Kode & Panduan
Dalam fungsi setup, kami menginisialisasi servo dan sensor gerak. Barismyservo.attach(9);mengikat servo ke pin 9, yang sebelumnya kita sambungkan. Ini memungkinkan servo untuk menerima perintah dari Arduino.

void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Set interrupt pin as input
pinMode(APDS9960_INT, INPUT);
// Initialize Serial port
Serial.begin(9600);
}Selanjutnya, kami mendefinisikan bagaimana sistem menangani gerakan dalam fungsi loop. MetodehandleGesture();memeriksa gerakan yang tersedia dan mengeksekusi tindakan yang sesuai. Misalnya, jika gerakan yang terdeteksi adalah kiri, servo akan bergerak ke 180 derajat.
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_LEFT:
myservo.write(180); // added by RoboJax
break;
case DIR_RIGHT:
myservo.write(0); // added by RoboJax
break;
}
}
}Akhirnya, loop terus-menerus memeriksa gerakan dan memperbarui posisi servo berdasarkan gerakan yang terdeteksi. Pastikan untuk menguji pengaturan dalam berbagai kondisi pencahayaan untuk mendapatkan pengenalan gerakan yang akurat.
Demonstrasi / Apa yang Diharapkan
Setelah semuanya terhubung dan kode diunggah, Anda seharusnya dapat mengendalikan servo dengan menggerakkan tangan Anda ke kiri atau ke kanan. Servo akan berputar hingga 180 derajat untuk gerakan kiri dan kembali ke 0 derajat untuk gerakan kanan. Jika gerakan tidak terdeteksi, periksa posisi sensor dan kondisi cahaya di sekitarnya (dalam video pada 05:30).
Bab-bab
- Pengantar - 00:00
- Ikhtisar Perangkat Keras - 01:30
- Instruksi Pengkabelan - 03:00
- Penjelasan Kode - 04:30
- Demonstrasi - 06:00
Tutorial ini adalah bagian dari: Motor Servo
- Mengontrol Servo dengan Tombol Tekan Menggunakan Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Mengontrol Servo dengan Potensiometer Menggunakan Arduino
- Mengontrol Servo dengan Potensiometer dan LCD1602 menggunakan Arduino
- Controlling Servo Motors Using an Infrared Remote with Arduino
- Kontrol Motor Servo Arduino Menggunakan Potensiometer
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Cara Menggunakan Servo 360° Kontinu dengan Arduino
- Kode Arduino dan Video untuk Pengontrol Servo PCA9685 16 Saluran 12-Bit V1
- Buat Saklar Toggle Servo Arduino dengan Tombol Tekan
++
/****************************************************************
Modified for RoboJax by A.B.S. on May 09, 2017
in Ajax, Ontario, Canada. www.RoboJax.com
Original Source:
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
Distributed as-is; no warranty is given.
****************************************************************/
#include <Wire.h>
// added by RoboJax
#include <Servo.h>
#include <SparkFun_APDS9960.h>
Servo myservo; // create servo object to control a servo // added by RoboJax
// Pins
#define APDS9960_INT 2 // Needs to be an interrupt pin
// Constants
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Set interrupt pin as input
pinMode(APDS9960_INT, INPUT);
// Initialize Serial port
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Initialize interrupt service routine
attachInterrupt(0, interruptRoutine, FALLING);
// Initialize APDS-9960 (configure I2C and initial values)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Start running the APDS-9960 gesture sensor engine
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}
}
void loop() {
if( isr_flag == 1 ) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
myservo.write(180); // added by RoboJax
break;
case DIR_RIGHT:
Serial.println("RIGHT");
myservo.write(0); // added by RoboJax
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
Sumber daya & referensi
Belum ada sumber daya.
Berkas📁
Tidak ada file tersedia.