This tutorial is part of: Servomotoare
Toate videoclipurile legate de servomotoarele conexe sunt listate aici. Linkuri către alte videoclipuri sunt sub acest articol.
Controlul poziției servo cu gesturi de mână pentru Arduino
În acest tutorial, vom învăța cum să controlăm un motor servo folosind gesturi cu mâinile. Prin mișcarea mâinii spre stânga sau dreapta, poți face motorul servo să răspundă corespunzător. Acest proiect utilizează senzorul de gesturi APDS-9960 pentru a detecta mișcările mâinii și a le traduce în poziții ale motorului servo. Pentru o explicație vizuală detaliată, asigură-te că verifici videoclipul la (în videoclip la 00:30).

Componentele de bază pe care le vom folosi includ un motor servo și senzorul de gesturi APDS-9960. Motorul servo se va roti la unghiuri specifice în funcție de gesturile detectate, în timp ce senzorul APDS-9960 va interpreta mișcările mâinii. Această configurație permite o modalitate intuitivă de a controla motorul servo fără contact fizic.
Hardware explicat
Motorul servo este un dispozitiv mic care poate rota la unghiuri specifice, făcându-l ideal pentru aplicații care necesită poziționare precisă. De obicei, are trei fire: alimentare (roșu), masă (negru) și semnal (portocaliu). Firul de semnal primește comenzi pentru a muta servo-ul la un unghi specificat.
APDS-9960 este un senzor versatil care poate detecta gesturi, lumină ambientală și culoare. Acesta comunică cu Arduino prin I2C și necesită câteva pini pentru alimentare și transfer de date. Senzorul poate detecta mișcări precum sus, jos, stânga și dreapta, pe care le vom folosi pentru a controla servomotorul.
Detalii fișă tehnică
| Producător | Broadcom |
|---|---|
| Număr de parte | APDS-9960 |
| Tensiune logică/IO | 2.4 - 3.6 V |
| Tensiune de alimentare | 2.4 - 3.6 V |
| Curent de ieșire (pe canal) | 20 mA max |
| Ghid pentru frecvența PWM | Nu este cazul |
| Praguri logici de intrare | 0,3 V (scăzut), 0,7 V (ridicat) |
| Cădere de tensiune / RDS(on)/ saturație | Nu este cazul |
| Limite termice | -40 până la 85 °C |
| Pachet | 6,0 x 3,0 mm |
| Note / variante | Senzor de gesturi, senzor de lumină RGB |
- Asigurați-vă că servomotorul este alimentat cu o tensiune adecvată (de obicei 5V).
- Conectați APDS-9960 la Arduino folosind comunicația I2C.
- Acordați atenție pinului de întrerupere pentru senzorul de gesturi.
- Utilizați rezistențe de pull-up dacă este necesar pentru o detecție stabilă a semnalului.
- Asigurați-vă că calibrați senzorul în diferite condiții de iluminare pentru o mai bună precizie.

Pentru a conecta componentele, începe cu motorul servo. Conectează firul roșu la pinul de 5V al Arduino-ului, firul negru la masă (GND) și firul de semnal portocaliu la pin.9Acest lucru va permite Arduino-ului să controleze poziția servomotorului.
Apoi, conectați senzorul de gesturi APDS-9960. Conectați-l laV_Nconectează la 3.3V al Arduino-ului, iarGNDpune la pământ. TheINTpinul ar trebui să fie conectat la pinul2pe Arduino, în timp ceSDAșiSCLpinii merg la piniA4șiA5, respectiv. Această configurație permite senzorului să comunice eficient cu Arduino.
Exemple de cod și ghiduri
În funcția de configurare, inițializăm servomotorul și senzorul de gesturi. Liniamyservo.attach(9);leagă servomotorul la pinul 9, pe care l-am conectat anterior. Acest lucru permite servomotorului să primească comenzi de la 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);
}Apoi, definim cum sistemul gestionează gesturile în funcția loop. MetodahandleGesture();verifică gesturile disponibile și execută acțiunile corespunzătoare. De exemplu, dacă gestul detectat este la stânga, servomotorul se va deplasa la 180 de grade.
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;
}
}
}În cele din urmă, bucla verifică continuu gesturile și actualizează poziția servomotorului pe baza gestului detectat. Asigurați-vă că testați configurația în diferite condiții de iluminare pentru a obține o recunoaștere precisă a gesturilor.
Demonstrație / Ce să aștepți
Odată ce totul este conectat și codul este încărcat, ar trebui să poți controla servomotorul mișcându-ți mâna la stânga sau la dreapta. Servomotorul se va roti la 180 de grade pentru un gest la stânga și va reveni la 0 grade pentru un gest la dreapta. Dacă gesturile nu sunt detectate, verifică poziționarea senzorului și condițiile de iluminare din jur (în video la 05:30).
Capitole
- Introducere - 00:00
- Prezentare generală a hardware-ului - 01:30
- Instrucțiuni de cablare - 03:00
- Explicație cod - 04:30
- Demonstrație - 06:00
This tutorial is part of: Servomotoare
- 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
- Controlul motorului servo Arduino folosind un potentiometru
- 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");
}
}
}
Resurse și referințe
Încă nu sunt resurse.
Fișiere📁
Nu sunt disponibile fișiere.