Hướng dẫn này là một phần của: Động cơ servo
Tất cả các video liên quan đến động cơ servo đều được liệt kê ở đây. Các liên kết đến các video khác nằm bên dưới bài viết này.
Điều khiển vị trí servo bằng cử chỉ tay cho Arduino
Trong hướng dẫn này, chúng ta sẽ học cách điều khiển một động cơ servo bằng cách sử dụng cử chỉ tay. Bằng cách di chuyển tay sang trái hoặc phải, bạn có thể làm cho động cơ servo phản ứng tương ứng. Dự án này sử dụng cảm biến cử chỉ APDS-9960 để phát hiện chuyển động tay và chuyển đổi chúng thành vị trí của động cơ servo. Để có một giải thích hình ảnh chi tiết, hãy chắc chắn kiểm tra video tại (trong video tại 00:30).

Các thành phần chính mà chúng tôi sẽ sử dụng bao gồm một động cơ servo và cảm biến cử chỉ APDS-9960. Động cơ servo sẽ quay đến các góc cụ thể dựa trên các cử chỉ được phát hiện, trong khi cảm biến APDS-9960 sẽ diễn giải các chuyển động của tay. Cấu hình này cho phép kiểm soát động cơ servo một cách trực quan mà không cần chạm vào.
Giải thích phần cứng
Động cơ servo là một thiết bị nhỏ có thể xoay đến các góc cụ thể, làm cho nó trở nên lý tưởng cho các ứng dụng yêu cầu định vị chính xác. Nó thường có ba dây: nguồn (đỏ), đất (đen) và tín hiệu (cam). Dây tín hiệu nhận lệnh để di chuyển động cơ servo đến một góc xác định.
APDS-9960 là một cảm biến đa năng có thể phát hiện cử chỉ, ánh sáng xung quanh và màu sắc. Nó giao tiếp với Arduino qua I2C và cần một vài chân để cung cấp nguồn và truyền dữ liệu. Cảm biến có thể phát hiện các chuyển động như lên, xuống, trái và phải, mà chúng ta sẽ sử dụng để điều khiển servo.
Chi tiết bảng dữ liệu
| Nhà sản xuất | Broadcom |
|---|---|
| Số hiệu bộ phận | APDS-9960 |
| Điện áp Logic/IO | 2.4 - 3.6 V |
| Điện áp cung cấp | 2.4 - 3.6 V |
| Dòng điện đầu ra (mỗi kênh) | 20 mA tối đa |
| Hướng dẫn tần số PWM | Không áp dụng |
| Ngưỡng logic đầu vào | 0,3 V (thấp), 0,7 V (cao) |
| Sụt áp / RDS(on)/ bão hòa | Không áp dụng |
| Giới hạn nhiệt độ | -40 đến 85 °C |
| Gói | 6,0 x 3,0 mm |
| Ghi chú / biến thể | Cảm biến cử chỉ, cảm biến ánh sáng RGB |
- Đảm bảo servo được cấp nguồn với điện áp đủ (thường là 5V).
- Kết nối APDS-9960 với Arduino bằng cách sử dụng giao tiếp I2C.
- Chú ý đến chân ngắt cho cảm biến cử chỉ.
- Sử dụng điện trở kéo lên nếu cần thiết để phát hiện tín hiệu ổn định.
- Hãy chắc chắn hiệu chỉnh cảm biến trong các điều kiện ánh sáng khác nhau để có độ chính xác tốt hơn.

Để kết nối các thành phần, bắt đầu với động cơ servo. Kết nối dây đỏ với chân 5V của Arduino, dây đen với đất (GND), và dây tín hiệu cam với chân.9Điều này sẽ cho phép Arduino điều khiển vị trí của servo.
Tiếp theo, kết nối cảm biến cử chỉ APDS-9960. Kết nối cáiV_Nghim vào 3.3V của Arduino, vàGNDđinh vào mặt đất. TheINTchân phải được kết nối với chân2trên Arduino, trong khiSDAvàSCLchân ghim đi đến chân ghimA4vàA5, tương ứng. Cấu hình này cho phép cảm biến giao tiếp hiệu quả với Arduino.
Ví dụ mã & Hướng dẫn
Trong hàm thiết lập, chúng tôi khởi tạo servo và cảm biến cử chỉ. Dòngmyservo.attach(9);gắn servo vào chân 9, mà chúng ta đã kết nối trước đó. Điều này cho phép servo nhận lệnh từ 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);
}Tiếp theo, chúng tôi định nghĩa cách hệ thống xử lý các cử chỉ trong hàm vòng lặp. Phương pháphandleGesture();kiểm tra các cử chỉ có sẵn và thực hiện các hành động tương ứng. Ví dụ, nếu cử chỉ được phát hiện là bên trái, servo sẽ di chuyển đến 180 độ.
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;
}
}
}Cuối cùng, vòng lặp liên tục kiểm tra các cử chỉ và cập nhật vị trí servo dựa trên cử chỉ được phát hiện. Hãy đảm bảo kiểm tra thiết lập trong nhiều điều kiện ánh sáng khác nhau để có được nhận diện cử chỉ chính xác.
Buổi trình diễn / Những gì cần mong đợi
Khi mọi thứ đã được kết nối và mã đã được tải lên, bạn sẽ có thể điều khiển servo bằng cách di chuyển tay sang trái hoặc phải. Servo sẽ quay đến 180 độ cho cử chỉ bên trái và quay trở lại 0 độ cho cử chỉ bên phải. Nếu các cử chỉ không được phát hiện, hãy kiểm tra vị trí của cảm biến và điều kiện ánh sáng xung quanh (trong video tại 05:30).
Chương
- Giới thiệu - 00:00
- Tổng quan phần cứng - 01:30
- Hướng dẫn đấu dây - 03:00
- Giải thích mã - 04:30
- Buổi biểu diễn - 06:00
Hướng dẫn này là một phần của: Động cơ servo
- Điều khiển Servo bằng nút nhấn sử dụng 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)
- Điều khiển Servo bằng chiết áp sử dụng Arduino
- Điều khiển Servo bằng chiết áp và LCD1602 sử dụng Arduino
- Điều khiển động cơ Servo bằng điều khiển từ xa hồng ngoại với Arduino
- Điều khiển động cơ servo Arduino bằng cách sử dụng biến trở
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Cách sử dụng Servo 360° liên tục với Arduino
- Mã Arduino và Video cho Bộ điều khiển Servo PCA9685 16 kênh 12-bit V1
- Xây dựng Công tắc Bật/Tắt Servo Arduino với Nút Nhấn
++
/****************************************************************
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");
}
}
}
Tài nguyên & tài liệu tham khảo
Chưa có tài nguyên nào.
Tập tin📁
Không có tệp nào khả dụng.