Ten poradnik jest częścią: Silniki serwo
Wszystkie powiązane filmy dotyczące serwomotorów znajdują się tutaj. Linki do innych filmów znajdują się poniżej tego artykułu.
Kontrolowanie pozycji serwomechanizmu za pomocą gestów ręcznych dla Arduino
W tym samouczku nauczymy się, jak kontrolować serwomotor za pomocą gestów ręki. Przesuwając rękę w lewo lub w prawo, możesz sprawić, że serwomotor zareaguje odpowiednio. Ten projekt wykorzystuje czujnik gestów APDS-9960 do wykrywania ruchów ręki i przekształcania ich w pozycje serwomotoru. Aby uzyskać szczegółowe wizualne wyjaśnienie, upewnij się, że sprawdzisz wideo (w wideo o 00:30).

Główne komponenty, które będziemy używać, to silnik serwo i czujnik gestów APDS-9960. Silnik serwo będzie obracał się do określonych kątów w zależności od wykrytych gestów, podczas gdy czujnik APDS-9960 będzie interpretował ruchy rąk. Ta konfiguracja umożliwia intuicyjne sterowanie serwem bez fizycznego dotyku.
Wyjaśnienie sprzętu
Serwomotor to małe urządzenie, które może obracać się do określonych kątów, co czyni je idealnym do zastosowań wymagających precyzyjnego pozycjonowania. Zazwyczaj ma trzy przewody: zasilanie (czerwony), masa (czarny) i sygnał (pomarańczowy). Przewód sygnałowy odbiera polecenia, aby przesunąć serwomotor do określonego kąta.
APDS-9960 to wszechstronny czujnik, który może wykrywać gesty, światło otoczenia i kolor. Komunikuje się z Arduino za pomocą I2C i wymaga kilku pinów do zasilania i transferu danych. Czujnik może wykrywać ruchy takie jak w górę, w dół, w lewo i w prawo, które wykorzystamy do sterowania serwomechanizmem.
Szczegóły karty katalogowej
| Producent | Broadcom |
|---|---|
| Numer części | APDS-9960 |
| Napięcie logiczne/IO | 2,4 - 3,6 V |
| Napięcie zasilania | 2,4 - 3,6 V |
| Prąd wyjściowy (na kanał) | 20 mA max |
| Wskazówki dotyczące częstotliwości PWM | Nie dotyczy |
| Progi logiki wejściowej | 0,3 V (niski), 0,7 V (wysoki) |
| Spadek napięcia / RDS(on)/ nasycenie | Nie dotyczy |
| Limity termiczne | -40 do 85 °C |
| Pakiet | 6,0 x 3,0 mm |
| Notatki / warianty | Wykrywanie gestów, wykrywanie światła RGB |
- Upewnij się, że serwomechanizm jest zasilany odpowiednim napięciem (zwykle 5V).
- Podłącz APDS-9960 do Arduino za pomocą komunikacji I2C.
- Zwróć uwagę na pin przerwania dla czujnika gestów.
- Użyj rezystorów podciągających, jeśli to konieczne, dla stabilnego wykrywania sygnału.
- Upewnij się, że skalibrujesz czujnik w różnych warunkach oświetleniowych, aby uzyskać lepszą dokładność.

Aby podłączyć komponenty, zacznij od serwomotoru. Podłącz czerwony przewód do pinu 5V Arduino, czarny przewód do masy (GND), a pomarańczowy przewód sygnałowy do pinu.9To pozwoli Arduino kontrolować pozycję serwomechanizmu.
Następnie podłącz czujnik gestów APDS-9960. PodłączV_Npodłącz do 3.3V Arduino, a następnieGNDprzypnij do ziemi. TheINTpin powinien być podłączony do pinu2na Arduino, podczas gdy SDAiSCLpiny idą do pinówA4iA5, odpowiednio. Ta konfiguracja pozwala czujnikowi skutecznie komunikować się z Arduino.
Przykłady kodu i przewodnik
W funkcji setup inicjalizujemy serwomechanizm i czujnik gestów. Liniamyservo.attach(9);wiąże serwomechanizm z pinem 9, który wcześniej podłączyliśmy. To pozwala serwomechanizmowi odbierać polecenia z 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);
}Następnie definiujemy, jak system obsługuje gesty w funkcji pętli. MetodahandleGesture();sprawdza dostępne gesty i wykonuje odpowiadające akcje. Na przykład, jeśli wykryty gest to lewy, serwo przesunie się do 180 stopni.
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 koniec pętla nieprzerwanie sprawdza gesty i aktualizuje pozycję serwomechanizmu na podstawie wykrytego gestu. Upewnij się, że przetestujesz konfigurację w różnych warunkach oświetleniowych, aby uzyskać dokładne rozpoznawanie gestów.
Demonstracja / Czego się spodziewać
Gdy wszystko jest podłączone, a kod jest załadowany, powinieneś być w stanie kontrolować serwomechanizm, poruszając ręką w lewo lub w prawo. Serwomechanizm obróci się o 180 stopni w przypadku gestu w lewo i wróci do 0 stopni w przypadku gestu w prawo. Jeśli gesty nie są wykrywane, sprawdź położenie czujnika i warunki oświetleniowe w otoczeniu (w wideo o 05:30).
Rozdziały
- Wprowadzenie - 00:00
- Przegląd sprzętu - 01:30
- Instrukcje dotyczące okablowania - 03:00
- Wyjaśnienie kodu - 04:30
- Demonstracja - 06:00
Ten poradnik jest częścią: Silniki serwo
- 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 serwomotoru Arduino za pomocą potencjometru
- 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");
}
}
}
Zasoby i odniesienia
Brak zasobów.
Pliki📁
Brak dostępnych plików.