This tutorial is part of: Servo Motorlar
Servo motorlarla ilgili tüm videolar burada listelenmiştir. Diğer videolara ait bağlantılar bu makalenin altında yer almaktadır.
Arduino ile El Hareketleriyle Servo Pozisyonunu Kontrol Etme
Bu eğitimde, bir servo motoru el hareketleriyle nasıl kontrol edeceğimizi öğreneceğiz. Elinizi sola veya sağa hareket ettirerek, servo motorun buna göre yanıt vermesini sağlayabilirsiniz. Bu proje, el hareketlerini algılamak ve bunları servo pozisyonlarına dönüştürmek için APDS-9960 hareket sensörünü kullanmaktadır. Ayrıntılı bir görsel açıklama için, videoyu (videoda 00:30'da) kontrol etmeyi unutmayın.

Kullanacağımız temel bileşenler arasında bir servo motor ve APDS-9960 jest sensörü bulunmaktadır. Servo motor, algılanan jestlere göre belirli açılara dönecek, APDS-9960 sensörü ise el hareketlerini yorumlayacaktır. Bu düzenek, fiziksel temas olmadan servoyu kontrol etmenin sezgisel bir yolunu sağlar.
Donanım Açıklandı
Servo motor, belirli açılara dönebilme yeteneğine sahip küçük bir cihazdır ve bu nedenle hassas konumlandırma gerektiren uygulamalar için idealdir. Genellikle üç kablosu vardır: güç (kırmızı), toprak (siyah) ve sinyal (turuncu). Sinyal kablosu, servoyu belirli bir açıya hareket ettirmek için komutlar alır.
APDS-9960, jesters, ortam ışığı ve renkleri algılayabilen çok yönlü bir sensördür. Arduino ile I2C üzerinden iletişim kurar ve güç ile veri transferi için birkaç pine ihtiyaç duyar. Sensör, yukarı, aşağı, sola ve sağa gibi hareketleri algılayabilir; bunları servoyu kontrol etmek için kullanacağız.
Veri Sayfası Detayları
| Üretici | Broadcom |
|---|---|
| Parça numarası | APDS-9960 |
| Mantık/Giriş-Çıkış voltajı | 2.4 - 3.6 V |
| Besleme voltajı | 2.4 - 3.6 V |
| Çıkış akımı (kanal başına) | 20 mA maksimum |
| PWM frekansı rehberi | Geçerli değil |
| Giriş mantığı eşikleri | 0.3 V (düşük), 0.7 V (yüksek) |
| Gerilim düşüşü / RDS(on)doygunluk | Geçerli değil |
| Termal sınırlar | -40 ile 85 °C |
| Paket | 6.0 x 3.0 mm |
| Notlar / varyantlar | Hareket algılama, RGB ışık algılama |
- Servo'nun yeterli voltajla (genellikle 5V) beslenmesini sağlayın.
- APDS-9960'ı Arduino'ya I2C iletişimi kullanarak bağlayın.
- Hareket sensörü için kesme pinine dikkat edin.
- Gerekirse stabil sinyal algılama için pull-up dirençleri kullanın.
- Farklı aydınlatma koşullarında sensörü kalibre ettiğinizden emin olun, böylece daha iyi bir doğruluk elde edersiniz.

Bileşenleri bağlamak için, servo motorla başlayın. Kırmızı kabloyu Arduino'nun 5V pinine, siyah kabloyu toprak (GND) pinine ve turuncu sinyal kablosunu pin'e bağlayın.9Bu, Arduino'nun servonun konumunu kontrol etmesine olanak tanıyacaktır.
Sonraki adım, APDS-9960 hareket sensörünü bağlamaktır. BağlayınV_NArduino'nun 3.3V pinine veGNDtoprağa sabitle. BuINTpin, pin'e bağlanmalıdır.2Arduino'da, ikenSDAveSCLpinler pinlere giderA4veA5sırasıyla. Bu yapılandırma, sensörün Arduino ile etkili bir şekilde iletişim kurmasını sağlar.
Kod Örnekleri ve Geçiş Rehberi
Kurulum fonksiyonunda, servoyu ve hareket sensörünü başlatıyoruz. Satırmyservo.attach(9);servo'yu daha önce bağladığımız 9 numaralı pine bağlar. Bu, servonun Arduino'dan komut almasını sağlar.

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);
}Sonraki adımda, sistemin döngü fonksiyonunda jestleri nasıl işlediğini tanımlıyoruz. YöntemhandleGesture();mevcut jestleri kontrol eder ve karşılık gelen eylemleri gerçekleştirir. Örneğin, tespit edilen jest soldaysa, servo 180 dereceye hareket edecektir.
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;
}
}
}Son olarak, döngü sürekli olarak jestleri kontrol eder ve tespit edilen jestlere göre servo pozisyonunu günceller. Doğru jest tanıma elde etmek için kurulumu farklı aydınlatma koşullarında test etmeyi unutmayın.
Gösterim / Ne Beklemeli
Her şey bağlandığında ve kod yüklendiğinde, elinizi sola veya sağa hareket ettirerek servoyu kontrol edebilmelisiniz. Servo, sol hareket için 180 derece dönecek ve sağ hareket için 0 dereceye dönecektir. Hareketler algılanmazsa, sensörün konumunu ve çevresindeki ışık koşullarını kontrol edin (videoda 05:30'da).
Bölümler
- Giriş - 00:00
- Donanım Genel Görünümü - 01:30
- Bağlantı Talimatları - 03:00
- Kod Açıklaması - 04:30
- Gösterim - 06:00
This tutorial is part of: Servo Motorlar
- 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
- Potansiyometre Kullanarak Arduino Servo Motor Kontrolü
- 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");
}
}
}
Kaynaklar ve referanslar
Henüz kaynak yok.
Dosyalar📁
Dosya mevcut değil.