Cisimlerin Uzaklığını ve Hareket Yönünü Algılayan “ZX” Sensörü Kullanımı
Sparkfun ve XYZ Interactive firmasının birlikte geliştirdiği ZX mesafe ve hareket sensöründen bahsedeceğim. Adında da anlaşılacağı üzere zx sensörü, hem mesafe ölçebiliyor hem de sensörün önünden geçen bir cismin hareket yönünü algılayabiliyor.
Sensörün üzerinde 2 adet kızılötesi led ( sol ve sağ tarafta) ve bir adet kızılötesi alıcı (ortada) bulunuyor. Sensör GestureSense teknolojisini kullanarak yaklaşık 25 cm ye kadar mesafe ölçümü ve yaklaşık 15 cm ye kadar cismin konumunu tek eksende (sensöre paralel eksen) algılayabiliyor. Bu algılama sayesinde cisim sağa yada sola hareket ettiğinde, eski konumuna göre yeni konumunu karşılaştırıp hareket yönünü ve hızını saptıyor. Sensör I2C veya UART üzerinden iletişim sağlıyor. Sensörü almak isterseniz Robotistan da bulabilirsiniz.
Özellikler:
- Çalışma Voltajı: 3.3V – 5V
- Z-Eksen Tanıma Aralığı: 10 Inç (~ 25cm) ( sensöre dik mesafe ölçümü)
- X-Eksen Tanıma Aralığı: 6 Inç (~ 15cm) ( sensöre paralel konum ölçümü)
- 4 Adet Hareket Komut Desteği
- I2C veya UART iletişimi
Sensörün kütüphanesini buradan indirebilirsiniz >> SparkFun ZX
Örnek Uygulama:
Sensör kütüphanesindeki ” I2C_ZX_Demo ” kodunu açın veya aşağıdaki kodu yükleyin.
/**************************************************************** I2C_ZX_Demo.ino XYZ Interactive ZX Sensor Shawn Hymel @ SparkFun Electronics May 6, 2015 https://github.com/sparkfun/SparkFun_ZX_Distance_and_Gesture_Sensor_Arduino_Library Tests the ZX sensor's ability to read ZX data over I2C. This demo configures the ZX sensor and periodically polls for Z-axis and X-axis data. Hardware Connections: Arduino Pin ZX Sensor Board Function --------------------------------------- 5V VCC Power GND GND Ground A4 DA I2C Data A5 CL I2C Clock Resources: Include Wire.h and ZX_Sensor.h Development environment specifics: Written in Arduino 1.6.3 Tested with a SparkFun RedBoard This code is beerware; if you see me (or any other SparkFun employee) at the local, and you've found our code helpful, please buy us a round! Distributed as-is; no warranty is given. ****************************************************************/ #include <Wire.h> #include <ZX_Sensor.h> // Constants const int ZX_ADDR = 0x10; // ZX Sensor I2C address // Global Variables ZX_Sensor zx_sensor = ZX_Sensor(ZX_ADDR); uint8_t x_pos; uint8_t z_pos; void setup() { uint8_t ver; // Initialize Serial port Serial.begin(9600); Serial.println(); Serial.println("-----------------------------------"); Serial.println("SparkFun/GestureSense - I2C ZX Demo"); Serial.println("-----------------------------------"); // Initialize ZX Sensor (configure I2C and read model ID) if ( zx_sensor.init() ) { Serial.println("ZX Sensor initialization complete"); } else { Serial.println("Something went wrong during ZX Sensor init!"); } // Read the model version number and ensure the library will work ver = zx_sensor.getModelVersion(); if ( ver == ZX_ERROR ) { Serial.println("Error reading model version number"); } else { Serial.print("Model version: "); Serial.println(ver); } if ( ver != ZX_MODEL_VER ) { Serial.print("Model version needs to be "); Serial.print(ZX_MODEL_VER); Serial.print(" to work with this library. Stopping."); while(1); } // Read the register map version and ensure the library will work ver = zx_sensor.getRegMapVersion(); if ( ver == ZX_ERROR ) { Serial.println("Error reading register map version number"); } else { Serial.print("Register Map Version: "); Serial.println(ver); } if ( ver != ZX_REG_MAP_VER ) { Serial.print("Register map version needs to be "); Serial.print(ZX_REG_MAP_VER); Serial.print(" to work with this library. Stopping."); while(1); } } void loop() { // If there is position data available, read and print it if ( zx_sensor.positionAvailable() ) { x_pos = zx_sensor.readX(); if ( x_pos != ZX_ERROR ) { Serial.print("X: "); Serial.print(x_pos); } z_pos = zx_sensor.readZ(); if ( z_pos != ZX_ERROR ) { Serial.print(" Z: "); Serial.println(z_pos); } } }
Bu kod cismin sensöre olan uzaklığını ve cismin konumunu serial monitöre yazdıracak. Arduino kullanarak sensörün I2C pinleri üzerinden, sda pinini A4, scl pinini de A5 pinine takınız. VCC pinini 5v ve gnd pinini de gnd ye takınız. Kodu yükleyip bağlantıları da yaptıktan sonra serial monitörü açınız. Sensöre bağlandığında elinizi sensörün üzerine 10 cm ile 25 cm arası uzaklıkta tuttuğunuzda aşağıdaki gibi Z ( mesafe) ve X ( konum ) değerlerini ekranda göreceksiniz.
Görsel Uygulama:
Bu uygulamada ise sensörü I2C pinleri üzerinden usb serial dönüştürücü ile bilgisayara bağlayıp görsel uygulama ile sensörden gelen verilen grafiksel olarak işlenecek. Aşağıdaki şekildeki gibi I2C pinlerine direk bağlantısını yapabilirsiniz.
PC uygulamasını buradan indirebilirsiniz >> ZX_Demo_V11
Serial Port input kısmında sensörün bağlı olduğu portu seçin ve açın. Elinizi sensör üzerinde aşağı yukarı hareket ettirdiğinizde mesafe değeri yeşil slider bar da görünecek, sağa sola hareket ettirdiğinizde ise kırmızı top elinizin konumunu anlık olarak ekranda gösterecektir. Yukarıdaki videoda da çalışma şeklini göstermiştir.
merhabalar, bu sensörü kullandığımızda serial monitörde yazan değerleri neyi temsil etmektedir? X ve Z değerleri maksimum 240 oluyor ancak neyi temsil ettiklerini anlayamadım.
Merhaba, bu sensörü Türkiye’de nerelerden satın alabiliriz?
robotistan, robitshop, n11 gibi sitelerde mevcut.