This tutorial is part of: Mota za Servo
Video zote zinazohusiana na mota za servo zinazohusiana, zimeorodheshwa hapa. Viungo vya video zingine viko chini ya makala haya.
Kontrollera servoposition med handgester för Arduino
I den här handledningen kommer vi att lära oss hur man kontrollerar en servomotor med handgester. Genom att flytta handen åt vänster eller höger kan du få servomotorn att reagera därefter. Det här projektet använder APDS-9960 gestsensor för att upptäcka handrörelser och översätta dem till servopositioner. För en detaljerad visuell förklaring, se till att kolla på videon vid (i videon vid 00:30).

De centrala komponenterna vi kommer att använda inkluderar en servomotor och APDS-9960 gestsensor. Servomotorn kommer att rotera till specifika vinklar baserat på de upptäckta gesterna, medan APDS-9960 sensorn kommer att tolka handrörelserna. Denna uppsättning möjliggör ett intuitivt sätt att styra servon utan fysisk beröring.
Hårdvara förklarad
Servomotorn är en liten enhet som kan rotera till specifika vinklar, vilket gör den idealisk för tillämpningar som kräver precis positionering. Den har vanligtvis tre ledningar: ström (röd), jord (svart) och signal (orange). Signalledningen tar emot kommandon för att flytta servot till en angiven vinkel.
APDS-9960 är en mångsidig sensor som kan upptäcka gester, omgivande ljus och färg. Den kommunicerar med Arduino via I2C och kräver några stift för ström och datatransfer. Sensorn kan upptäcka rörelser som upp, ner, vänster och höger, vilket vi kommer att använda för att styra servot.
Datablad Detaljer
| Tillverkare | Broadcom |
|---|---|
| Delnummer | APDS-9960 |
| Logik/IO-spänning | 2,4 - 3,6 V |
| Försörjningsspänning | 2,4 - 3,6 V |
| Utgångsström (per kanal) | 20 mA max |
| PWM-frekvens vägledning | Inte tillämpligt |
| Inmatningslogiktrösklar | 0,3 V (låg), 0,7 V (hög) |
| Spänningsfall / RDS(on)/ mättnad | Ej tillämpligt |
| Termiska gränser | -40 till 85 °C |
| Paket | 6,0 x 3,0 mm |
| Anteckningar / varianter | Gesturesensor, RGB ljussensor |
- Se till att servot är strömsatt med tillräcklig spänning (vanligtvis 5V).
- Anslut APDS-9960 till Arduino med hjälp av I2C-kommunikation.
- Var uppmärksam på avbrottspinnen för gestsensor.
- Använd pull-up-motstånd om det behövs för stabil signaldetektering.
- Se till att kalibrera sensorn under olika ljusförhållanden för bättre noggrannhet.

För att koppla ihop komponenterna, börja med servomotorn. Anslut den röda ledningen till Arduinos 5V-stift, den svarta ledningen till jord (GND) och den orange signalledningen till stift9Detta kommer att göra det möjligt för Arduino att styra servots position.
Nästa, koppla APDS-9960 gestsensor. Anslut denV_Nkoppla till Arduinos 3,3V, och denGNDpin till mark. DenINTpin bör kopplas till pin2på Arduino, medan denSDAochSCLpinnar går till pinnarA4ochA5, respektive. Denna konfiguration gör det möjligt för sensorn att kommunicera effektivt med Arduino.
Kodexempel och genomgång
I inställningsfunktionen initierar vi servot och gestsensor. Radenmyservo.attach(9);binder servon till pin 9, som vi tidigare kopplade. Detta gör att servon kan ta emot kommandon från 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);
}Nästa definierar vi hur systemet hanterar gester i loop-funktionen. MetodenhandleGesture();kontrollerar tillgängliga gester och utför motsvarande åtgärder. Till exempel, om gesten som upptäckts är vänster, kommer servon att röra sig till 180 grader.
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;
}
}
}Slutligen kontrollerar loopen kontinuerligt efter gester och uppdaterar servopositionen baserat på den upptäckta gesten. Se till att testa installationen under olika ljusförhållanden för att få en noggrann gestigenkänning.
Demonstration / Vad man kan förvänta sig
När allt är kopplat och koden är uppladdad, bör du kunna styra servot genom att flytta din hand åt vänster eller höger. Servot kommer att rotera till 180 grader för en vänstergest och återgå till 0 grader för en högergest. Om gesterna inte upptäcks, kontrollera sensorernas placering och omgivande ljusförhållanden (i videon vid 05:30).
Kapitel
- Introduktion - 00:00
- Hårdvaruöversikt - 01:30
- Kopplingsanvisningar - 03:00
- Kodförklaring - 04:30
- Demonstration - 06:00
This tutorial is part of: Mota za Servo
- Controlling a Servo with Push Buttons Using 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)
- Controlling a Servo with a Potentiometer Using Arduino
- Controlling a Servo with Potentiometer and LCD1602 using Arduino
- Controlling Servo Motors Using an Infrared Remote with Arduino
- Arduino servomotorkontroll med hjälp av en potentiometer
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Arduino Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
- Build an Arduino Servo Toggle Switch with a Push Button
++
/****************************************************************
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");
}
}
}
Resurser och referenser
Inga resurser än.
Filer📁
Inga filer tillgängliga.