บทเรียนนี้เป็นส่วนหนึ่งของ: มอเตอร์เซอร์โว
วิดีโอทั้งหมดที่เกี่ยวข้องกับมอเตอร์เซอร์โว แสดงไว้ที่นี่ ลิงก์ไปยังวิดีโออื่นๆ อยู่ด้านล่างบทความนี้
ควบคุมตำแหน่งเซอร์โวด้วยท่าทางมือสำหรับ Arduino
ในบทแนะนำนี้ เราจะเรียนรู้วิธีควบคุมมอเตอร์เซอร์โวด้วยการเคลื่อนไหวของมือ โดยการขยับมือไปทางซ้ายหรือขวา คุณสามารถทำให้มอเตอร์เซอร์โวตอบสนองตามนั้น โครงการนี้ใช้เซ็นเซอร์ตรวจจับการเคลื่อนไหว APDS-9960 เพื่อตรวจจับการเคลื่อนไหวของมือและแปลเป็นตำแหน่งของเซอร์โว สำหรับคำอธิบายภาพที่ละเอียด โปรดตรวจสอบวิดีโอที่ (ในวิดีโอที่ 00:30)

ส่วนประกอบหลักที่เราจะใช้รวมถึงมอเตอร์เซอร์โวและเซ็นเซอร์ตรวจจับท่าทาง APDS-9960 มอเตอร์เซอร์โวจะหมุนไปยังมุมที่กำหนดตามท่าทางที่ตรวจจับได้ ในขณะที่เซ็นเซอร์ APDS-9960 จะตีความการเคลื่อนไหวของมือ การตั้งค่านี้ช่วยให้สามารถควบคุมมอเตอร์เซอร์โวได้อย่างมีสติปัญญาโดยไม่ต้องสัมผัสทางกายภาพ
อธิบายฮาร์ดแวร์
เซอร์โวมอเตอร์เป็นอุปกรณ์ขนาดเล็กที่สามารถหมุนไปยังมุมที่เฉพาะเจาะจง ทำให้เหมาะสำหรับการใช้งานที่ต้องการการวางตำแหน่งที่แม่นยำ โดยทั่วไปจะมีสายสามเส้น: สายไฟ (แดง), สายกราวด์ (ดำ) และสายสัญญาณ (ส้ม) สายสัญญาณจะรับคำสั่งเพื่อเคลื่อนที่เซอร์โวไปยังมุมที่กำหนด
APDS-9960 เป็นเซ็นเซอร์ที่หลากหลายซึ่งสามารถตรวจจับท่าทาง แสงรอบข้าง และสี มันสื่อสารกับ Arduino ผ่าน I2C และต้องการพินบางตัวสำหรับพลังงานและการถ่ายโอนข้อมูล เซ็นเซอร์สามารถตรวจจับการเคลื่อนไหวเช่นขึ้น ลง ซ้าย และขวา ซึ่งเราจะใช้เพื่อควบคุมเซอร์โว
รายละเอียดแผ่นข้อมูล
| ผู้ผลิต | บรอดคอม |
|---|---|
| หมายเลขชิ้นส่วน | APDS-9960 |
| แรงดันไฟฟ้า Logic/IO | 2.4 - 3.6 โวลต์ |
| แรงดันไฟฟ้าจ่าย | 2.4 - 3.6 โวลต์ |
| กระแสไฟฟ้าเอาต์พุต (ต่อช่อง) | 20 mA สูงสุด |
| คำแนะนำความถี่ PWM | ไม่สามารถใช้ได้ |
| เกณฑ์ตรรกะนำเข้า | 0.3 โวลต์ (ต่ำ), 0.7 โวลต์ (สูง) |
| แรงดันไฟฟ้าตก / RDS(on)/ ความอิ่มตัว | ไม่สามารถใช้ได้ |
| ขีดจำกัดความร้อน | -40 ถึง 85 °C |
| แพ็คเกจ | 6.0 x 3.0 มม. |
| หมายเหตุ / ตัวแปร | การตรวจจับท่าทาง, การตรวจจับแสง RGB |
- ตรวจสอบให้แน่ใจว่าเซอร์โวมีกำลังไฟฟ้าที่เพียงพอ (โดยปกติ 5V)
- เชื่อมต่อ APDS-9960 กับ Arduino โดยใช้การสื่อสาร I2C
- โปรดใส่ใจที่ขาอินเตอร์รัปต์สำหรับเซ็นเซอร์การเคลื่อนไหว
- ใช้ตัวต้านทานดึงขึ้นหากจำเป็นเพื่อการตรวจจับสัญญาณที่เสถียร
- ตรวจสอบให้แน่ใจว่าได้ปรับเทียบเซ็นเซอร์ในสภาพแสงที่แตกต่างกันเพื่อความแม่นยำที่ดียิ่งขึ้น

ในการเดินสายส่วนประกอบ ให้เริ่มจากมอเตอร์เซอร์โว เชื่อมต่อสายสีแดงเข้ากับขา 5V ของ Arduino สายสีดำเข้ากับกราวด์ (GND) และสายสัญญาณสีส้มเข้ากับขา9สิ่งนี้จะช่วยให้ Arduino สามารถควบคุมตำแหน่งของเซอร์โวได้
ถัดไป ให้ต่อเซ็นเซอร์ตรวจจับท่าทาง APDS-9960V_Nเชื่อมต่อกับ 3.3V ของ Arduino และGNDปักลงดิน. ตัวINTพินควรเชื่อมต่อกับพิน2บน Arduino ขณะที่SDAและSCLพินไปที่พินA4และA5, ตามลำดับ การตั้งค่านี้ช่วยให้เซ็นเซอร์สามารถสื่อสารได้อย่างมีประสิทธิภาพกับ Arduino
ตัวอย่างโค้ดและการเดินทาง
ในฟังก์ชันการตั้งค่า เราจะเริ่มต้นเซอร์โวและเซ็นเซอร์ตรวจจับท่าทางmyservo.attach(9);เชื่อมต่อเซอร์โวเข้ากับพิน 9 ซึ่งเราได้เชื่อมต่อไว้ก่อนหน้านี้ นี่ทำให้เซอร์โวสามารถรับคำสั่งจากอาร์ดูอิโนได้

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);
}ถัดไป เราจะกำหนดว่าระบบจัดการกับท่าทางอย่างไรในฟังก์ชันลูป วิธีการhandleGesture();ตรวจสอบท่าทางที่มีอยู่และดำเนินการตามการกระทำที่สอดคล้องกัน ตัวอย่างเช่น หากตรวจพบท่าทางทางซ้าย เซอร์โวจะเคลื่อนที่ไปที่ 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;
}
}
}สุดท้าย ลูปจะตรวจสอบท่าทางอย่างต่อเนื่องและอัปเดตตำแหน่งเซอร์โวตามท่าทางที่ตรวจพบ ให้แน่ใจว่าทดสอบการตั้งค่าในสภาพแสงที่แตกต่างกันเพื่อให้ได้การรู้จำท่าทางที่แม่นยำ
การสาธิต / สิ่งที่คาดหวัง
เมื่อทุกอย่างถูกเชื่อมต่อและโค้ดถูกอัปโหลดแล้ว คุณควรจะสามารถควบคุมเซอร์โวได้โดยการขยับมือไปทางซ้ายหรือขวา เซอร์โวจะหมุนไปที่ 180 องศาสำหรับการเคลื่อนไหวทางซ้ายและกลับไปที่ 0 องศาสำหรับการเคลื่อนไหวทางขวา หากไม่ตรวจจับการเคลื่อนไหว ให้ตรวจสอบตำแหน่งของเซ็นเซอร์และสภาพแสงรอบข้าง (ในวิดีโอที่ 05:30)
บทที่
- บทนำ - 00:00
- ภาพรวมฮาร์ดแวร์ - 01:30
- คำแนะนำการเดินสาย - 03:00
- คำอธิบายโค้ด - 04:30
- การสาธิต - 06:00
บทเรียนนี้เป็นส่วนหนึ่งของ: มอเตอร์เซอร์โว
- ควบคุมเซอร์โวด้วยปุ่มกดโดยใช้ 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)
- ควบคุมเซอร์โวด้วยโพเทนชิโอมิเตอร์โดยใช้ Arduino
- ควบคุมเซอร์โวด้วยโพเทนชิโอมิเตอร์และLCD1602 โดยใช้ Arduino
- การควบคุมเซอร์โวมอเตอร์โดยใช้รีโมทอินฟราเรดร่วมกับอาร์ดูอิโน
- การควบคุมมอเตอร์เซอร์โว Arduino โดยใช้พอเทนชิโอมิเตอร์
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- วิธีใช้เซอร์โวหมุนต่อเนื่อง 360° กับ Arduino
- โค้ด Arduino และวิดีโอสำหรับ PCA9685 ตัวควบคุมเซอร์โว 16 ช่อง 12 บิต V1
- สร้างสวิตช์สลับเซอร์โว Arduino ด้วยปุ่มกด
++
/****************************************************************
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");
}
}
}
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
ไม่มีไฟล์ที่พร้อมใช้งาน