This tutorial is part of: Servo motori
Svi videozapisi vezani za servo motore navedeni su ovdje. Linkovi do drugih videozapisa nalaze se ispod ovog članka.
Kontrola pozicije serva pomoću rukovnih gesti za Arduino
U ovom tutorijalu naučićemo kako kontrolisati servo motor koristeći pokrete ruku. Pomeranjem ruke levo ili desno, možete naterati servo motor da odgovori u skladu s tim. Ovaj projekat koristi APDS-9960 senzor pokreta za detekciju pokreta ruku i prevođenje istih u pozicije servo motora. Za detaljno vizuelno objašnjenje, obavezno pogledajte video (u videu na 00:30).

Osnovne komponente koje ćemo koristiti uključuju servo motor i APDS-9960 senzor pokreta. Servo motor će se okretati pod određenim uglovima na osnovu detektovanih pokreta, dok će APDS-9960 senzor interpretirati pokrete ruku. Ova postavka omogućava intuitivan način kontrole serva bez fizičkog dodira.
Objašnjena oprema
Servo motor je mali uređaj koji može rotirati na specifične uglove, što ga čini idealnim za primjene koje zahtijevaju precizno pozicioniranje. Obično ima tri žice: napajanje (crvena), uzemljenje (crna) i signal (narančasta). Signalna žica prima komande za pomjeranje serva na određeni ugao.
APDS-9960 je svestran senzor koji može detektovati geste, ambijentalnu svetlost i boje. Komunicira sa Arduinom putem I2C i zahteva nekoliko pinova za napajanje i prenos podataka. Senzor može detektovati pokrete kao što su gore, dole, levo i desno, koje ćemo koristiti za kontrolu serva.
Tehnički podaci
| Proizvođač | Broadcom |
|---|---|
| Broj dijela | APDS-9960 |
| Logika/IO napon | 2.4 - 3.6 V |
| Napon napajanja | 2.4 - 3.6 V |
| Izlazna struja (po kanalu) | 20 mA max |
| Upute za PWM frekvenciju | Nije primjenjivo |
| Ulazni logički pragovi | 0,3 V (nisko), 0,7 V (visoko) |
| Napon pada / RDS(on)/ zasićenje | Nije primjenjivo |
| Termalne granice | -40 do 85 °C |
| Pakovanje | 6,0 x 3,0 mm |
| Napomene / varijante | Senzor za geste, senzor za RGB svjetlost |
- Osigurajte da servo bude napajan odgovarajućim naponom (obično 5V).
- Povežite APDS-9960 s Arduinom koristeći I2C komunikaciju.
- Obratite pažnju na prekidač za senzor pokreta.
- Koristite pull-up otpornike ako je potrebno za stabilno prepoznavanje signala.
- Pobrinite se da kalibrirate senzor u različitim svjetlosnim uslovima za bolju tačnost.

Da biste povezali komponente, počnite sa servo motorom. Povežite crvenu žicu na 5V pin Arduina, crnu žicu na uzemljenje (GND), a narandžastu signalnu žicu na pin.9To će omogućiti Arduinu da kontroliše poziciju serva.
Sljedeće, povežite APDS-9960 senzor pokreta. SpojiteV_Npriključite na Arduino-ovih 3.3V, i GNDpriključite na tlo. TajINTpin treba biti povezan s pinom2na Arduinu, dok jeSDAiSCLigle idu na igleA4iA5, respektivno. Ova konfiguracija omogućava senzoru da efikasno komunicira sa Arduinom.
Primjeri koda i vodič
U funkciji postavljanja inicijalizujemo servo i senzor pokreta. Linijamyservo.attach(9);vezuje servo na pin 9, koji smo prethodno povezali. To omogućava servou da prima komande sa Arduina.

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);
}Sljedeće, definiramo kako sustav obrađuje geste u funkciji petlje. MetodahandleGesture();provjerava dostupne geste i izvršava odgovarajuće radnje. Na primjer, ako je otkrivena gesta lijevo, servo će se pomaknuti na 180 stepeni.
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;
}
}
}Na kraju, petlja neprekidno provjerava geste i ažurira poziciju servomotora na osnovu otkrivene geste. Osigurajte da testirate postavku u različitim uvjetima osvjetljenja kako biste dobili tačno prepoznavanje gesta.
Demonstracija / Šta očekivati
Kada je sve povezano i kod je otpremljen, trebali biste moći kontrolisati servo pomeranjem ruke levo ili desno. Servo će se okrenuti na 180 stepeni za levo gestikuliranje i vratiti na 0 stepeni za desno gestikuliranje. Ako gestovi nisu detektovani, proverite poziciju senzora i uslove osvetljenja u okolini (u videu na 05:30).
Poglavlja
- Uvod - 00:00
- Pregled hardvera - 01:30
- Upute za ožičenje - 03:00
- Objašnjenje koda - 04:30
- Demonstracija - 06:00
This tutorial is part of: Servo motori
- 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
- Kontrola servo motora Arduino pomoću potenciometra
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Kako koristiti kontinuirani 360° servo s Arduinom
- 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");
}
}
}
Resources & references
No resources yet.
Files📁
No files available.