Cisimlerin Uzaklığını ve Hareket Yönünü Algılayan “ZX” Sensörü Kullanımı

2 586

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.

Bunları da beğenebilirsin

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

2 Yorum

  1. Mustafa

    Merhaba, bu sensörü Türkiye’de nerelerden satın alabiliriz?

    1. Sezgin GÜL

      robotistan, robitshop, n11 gibi sitelerde mevcut.