Hierdie tutorialie is deel van: Servomotors
Alle video's wat verband hou met servomotors, word hier gelys. Skakels na ander video's is onder hierdie artikel.
Beheer van Servo Posisie met Handgebare vir Arduino
In hierdie tutoriaal sal ons leer hoe om 'n servo-motor te beheer met handgebare. Deur jou hand links of regs te beweeg, kan jy die servo-motor laat reageer. Hierdie projek maak gebruik van die APDS-9960 gebaar sensor om handbewegings te detecteer en dit in servo-posisies te vertaal. Vir 'n gedetailleerde visuele verduideliking, maak seker om die video te kyk (in video by 00:30).

Die kernkomponente wat ons gaan gebruik, sluit 'n servo-motor en die APDS-9960 gebaar sensor in. Die servo-motor sal na spesifieke hoeke draai gebaseer op die gedetecteerde gebare, terwyl die APDS-9960 sensor die handbeweging interpreteer. Hierdie opstelling maak 'n intuïtiewe manier moontlik om die servo te beheer sonder fisiese aanraking.
Hardeware verduidelik
Die servo-motor is 'n klein toestel wat na spesifieke hoeke kan draai, wat dit ideaal maak vir toepassings wat presiese posisionering vereis. Dit het tipies drie drade: krag (rooi), grond (swart), en sein (oranje). Die sein draad ontvang opdragte om die servo na 'n gespesifiseerde hoek te beweeg.
Die APDS-9960 is 'n veelsydige sensor wat gebare, omgewingslig en kleur kan opspoor. Dit kommunikeer met die Arduino via I2C en vereis 'n paar penne vir krag en datatransfer. Die sensor kan bewegings soos op, af, links en regs opspoor, wat ons sal gebruik om die servo te beheer.
Datasheet Besonderhede
| Fabrikant | Broadcom |
|---|---|
| Onderdeel nommer | APDS-9960 |
| Logika/IO spanning | 2.4 - 3.6 V |
| Voorsienings spanning | 2.4 - 3.6 V |
| Uitsetstroom (per kanaal) | 20 mA maks |
| PWM frekwensie riglyne | nie van toepassing |
| Invoerlingsdrempels | 0.3 V (laag), 0.7 V (hoog) |
| Spanningstoename / RDS(on)/ versadiging | Nie van toepassing |
| Termiese perke | -40 tot 85 °C |
| Pakket | 6.0 x 3.0 mm |
| Notas / variante | Gebaaropsporing, RGB ligopsporing |
- Verseker dat die servo met voldoende spanning (tipies 5V) van krag voorsien word.
- Koppel die APDS-9960 aan die Arduino met behulp van I2C kommunikasie.
- Let op die onderbreking pin vir die gebaar sensor.
- Gebruik trekweerstande indien nodig vir stabiele seinopsporing.
- Maak seker dat jy die sensor in verskillende beligtingstoestande kalibreer vir beter akkuraatheid.

Om die komponente te bedrading, begin met die servo-motor. Verbind die rooi draad met die Arduino se 5V pen, die swart draad met die grond (GND), en die oranje sein draad met die pen.9Dit sal die Arduino in staat stel om die servo se posisie te beheer.
Volgende, bedrading die APDS-9960 gebaar sensor. Sluit dieV_Npen na die Arduino se 3.3V, en dieGNDpen na grond. DieINTpen moet aan pen gekoppel wees2op die Arduino, terwyl dieSDAenSCLpennet gaan na pennetA4enA5, onderskeidelik. Hierdie konfigurasie stel die sensor in staat om effektief met die Arduino te kommunikeer.
Kode Voorbeelde & Staproete
In die opstelling funksie, stel ons die servo en die gebaar sensor in. Die lynmyservo.attach(9);bind die servo aan pen 9, wat ons voorheen gekoppel het. Dit stel die servo in staat om opdragte van die Arduino te ontvang.

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);
}Volgende, definieer ons hoe die stelsel gebare in die lusfunksie hanteer. Die metodehandleGesture();kontroleer beskikbare gebare en voer ooreenstemmende aksies uit. Byvoorbeeld, as die gebaar wat opgespoor word links is, sal die servo na 180 grade beweeg.
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;
}
}
}Laastens, die lus kontinueerlik nagaan vir gebare en werk die servo-posisie op grond van die opgespoor gebaar by. Maak seker om die opstelling in verskillende beligtingsomstandighede te toets om akkurate gebaarherkenning te verkry.
Demonstraasie / Wat om te verwag
Sodra alles gekabel is en die kode opgelaai is, behoort jy die servo te kan beheer deur jou hand links of regs te beweeg. Die servo sal na 180 grade draai vir 'n linker gebaar en terugkeer na 0 grade vir 'n regter gebaar. As die gebare nie opgespoor word nie, kyk na die sensor se posisionering en die omringende ligtoestande (in die video om 05:30).
Hoofstukke
- Inleiding - 00:00
- Hardeware Oorsig - 01:30
- Draadopdragte - 03:00
- Kode verduideliking - 04:30
- Demonstrasie - 06:00
Hierdie handleiding is deel van: Servomotors
- Beheer van 'n Servo met Drukkoppe deur Arduino te gebruik
- 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)
- Beheer van 'n Servo met 'n Potensiometer deur Arduino te gebruik
- Beheer van 'n Servo met Potensiometer en LCD1602 deur Arduino te gebruik
- Beheer van servomotors met behulp van 'n infrarooi-afstandbeheer met Arduino
- Arduino Servo Motor Beheer met 'n Potensiometer
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Hoe om 'n Kontinu 360° Servo met Arduino te gebruik
- Arduino-kode en video vir PCA9685 16-kanaal 12-bis Servo-beheerder V1
- Bou 'n Arduino Servo-wisselskakelaar met 'n drukknoppie
++
/****************************************************************
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");
}
}
}
Hulpbronne en verwysings
Geen hulpbronne nog.
Lêers📁
Geen lêers beskikbaar.