İçindekiler:

Kızılötesi Sensör Kullanarak Göz Hareketi Takibi: 5 Adım
Kızılötesi Sensör Kullanarak Göz Hareketi Takibi: 5 Adım

Video: Kızılötesi Sensör Kullanarak Göz Hareketi Takibi: 5 Adım

Video: Kızılötesi Sensör Kullanarak Göz Hareketi Takibi: 5 Adım
Video: Arduino Dersleri #28 TCRT5000 Kızılötesi Sensör Kullanımı (Zemin Siyah mı? Beyaz Mı?) 2024, Temmuz
Anonim
Kızılötesi Sensör Kullanarak Göz Hareketi Takibi
Kızılötesi Sensör Kullanarak Göz Hareketi Takibi

Göz hareketlerini algılamak ve LED'i kontrol etmek için bir kızılötesi sensör kullandım.

LED Tape NeoPixel ile göz küresi yaptım.

Adım 1: Anayasa

anayasa
anayasa

Göz takibi için iki sensör QTR - 1A kullandım. Arduino ile algılama ve LED'i kontrol etme.

bileşenler

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Pro Trinket/ItsyBitsy için Adafruit LiIon/LiPoly Sırt Çantası Eklentisi
  • LiPo Pil
  • NeoPiksel şeridi
  • QTR-1A Yansıma Sensörü

Adım 2: NeoPixel LED Göz Küresi

NeoPixel LED Göz Küresi
NeoPixel LED Göz Küresi
NeoPixel LED Göz Küresi
NeoPixel LED Göz Küresi

NeoPixel LED bant kullanılmıştır. LED 68 birimdir.

LED, çift taraflı bant ile kaseye sabitlenir ve kablolanır.

Adım 3: Sensör Ünitesi

Sensör Ünitesi
Sensör Ünitesi
Sensör Ünitesi
Sensör Ünitesi
Sensör Ünitesi
Sensör Ünitesi

Göz takibi için iki QTR - 1A sensörü kullandım. QTR - 1A, yaklaşık gözün genişliği kadar bir mesafede plastik bir tabaka üzerine yerleştirilir.

Sensör kısmı ve mikrodenetleyici kısmı sırasıyla bir klips ile gözlüklere sabitlenmiştir.

Adım 4: Arduino Kodu

İris bir sensöre yaklaştığında yansıyan ışık azalır ve sensör değeri artar. Tersine, iris uzaklaştığında yansıyan ışık artar ve foto yansıtıcının sensör değeri azalır.

LED göz küresinin gözbebeğinin sağ ve sol hareketi, bir sensör değerindeki artışı ve azalmayı algılar ve kontrol eder. Yanıp sönerken, her iki sensör değeri de azalır, bu nedenle iki sensör değeri aynı anda azalırsa, LED göz küresinin göz kapakları aşağı iner.

Aşağıdaki kütüphaneyi kullandım.

  • QTRsensors:
  • Adafruit_NeoPixel:

#include #include

#define NUM_SENSORS 2 // kullanılan sensör sayısı#define NUM_SAMPLES_PER_SENSOR 10 // ortalama alma#define EMITTER_PIN QTR_NO_EMITTER_PIN

int iniSensorValL, sensorValL;int iniSensorValR, sensorValR; #define PIN A3 Adafruit_NeoPixel led = Adafruit_NeoPixel(68, PIN, NEO_GRB + NEO_KHZ800); int blackNum = 24; int öğrenciNum = 12; uint32_t renk; int parlaklık = 40; bayt eyeColor; int LR =7; boole kapağı = yanlış; int cnt = 0;

//Siyah göz L&R animasyonu blackLED[15][24] = {{12, 32, 35, 55, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {12, 13, 31, 36, 54, 55, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {11, 13, 14, 30, 37, 53, 54, 56, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {10, 11, 14, 15, 29, 38, 52, 53, 56, 57, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, { 9, 10, 11, 12, 15, 16, 28, 33, 34, 39, 51, 52, 55, 56, 57, 58, 68, 68, 68, 68, 68, 68, 68, 68}, { 0, 8, 9, 10, 11, 12, 13, 16, 17, 27, 32, 35, 40, 50, 51, 54, 55, 56, 57, 58, 59, 67, 68, 68}, { 0, 1, 7, 8, 9, 10, 13, 14, 17, 18, 26, 31, 36, 41, 49, 50, 53, 54, 57, 58, 59, 60, 66, 67}, { 1, 2, 6, 7, 8, 9, 14, 15, 18, 19, 25, 30, 37, 42, 48, 49, 52, 53, 58, 59, 60, 61, 65, 66}, { 2, 3, 5, 6, 7, 8, 15, 16, 19, 20, 24, 29, 38, 43, 47, 48, 51, 52, 59, 60, 61, 62, 64, 65}, { 3, 4, 5, 6, 7, 16, 17, 20, 21, 23, 28, 39, 44, 46, 47, 50, 51, 60, 61, 62, 63, 64, 68, 68}, { 4, 5, 6, 17, 18, 21, 22, 27, 40, 45, 46, 49, 50, 61, 62, 63, 68, 68, 68, 68, 68, 68, 68, 68}, { 4, 5, 18, 19, 26, 41, 48, 49, 62, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, { 4, 19, 20, 25, 42, 47, 48, 63, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {20, 21, 24, 43, 46, 47, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {21, 23, 44, 46, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};

//öğrenci L&R animasyonu öğrenciLED[15][12] = {{33, 34, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {32, 33, 34, 35, 68, 68, 68, 68, 68, 68, 68, 68}, {12, 31, 32, 33, 34, 35, 36, 55, 68, 68, 68, 68}, {12, 13, 30, 31, 32, 33, 34, 35, 36, 37, 54, 55}, {13, 14, 29, 30, 31, 32, 35, 36, 37, 38, 53, 54}, {14, 15, 28, 29, 30, 31, 36, 37, 38, 39, 52, 53}, {15, 16, 27, 28, 29, 30, 37, 38, 39, 40, 51, 52}, {16, 17, 26, 27, 28, 29, 38, 39, 40, 41, 50, 51}, {17, 18, 25, 26, 27, 28, 39, 40, 41, 42, 49, 50}, {18, 19, 24, 25, 26, 27, 40, 41, 42, 43, 48, 49}, {19, 20, 23, 24, 25, 26, 41, 42, 43, 44, 47, 48}, {20, 21, 22, 23, 24, 25, 42, 43, 44, 45, 46, 47}, {21, 22, 23, 24, 43, 44, 45, 46, 68, 68, 68, 68 }, {22, 23, 44, 45, 68, 68, 68, 68, 68, 68, 68, 68}, {22, 45, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};

//Animasyonun göz kapağını kırp = 0; int gözkapağıSayı[8] = {0, 4, 8, 16, 24, 34, 44, 56}; int göz kapağıLED[56] = {64, 65, 66, 67, 58, 59, 60, 61, 56, 57, 62, 63, 49, 50, 51, 52, 47, 48, 53, 54, 38, 39, 40, 41, 46, 55, 36, 37, 42, 43, 26, 27, 28, 29, 35, 44, 24, 25, 30, 31, 15, 16, 17, 18, 34, 45, 23, 32, 13, 14, 19, 20, 6, 7, 8, 9}; QTRSensorsAnalog qtra((imzasız karakter) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned int sensorValues[NUM_SENSORS];

void flash(int göz kapağı, int LR) { if (göz kapağı != 8){ //Pewter for(uint16_t i=0; i<led.numPixels(); i++) { led.setPixelColor(i, led. Color(66), 66, 66)); }

//Black eye for(uint16_t i=0; i led.setPixelColor(blackLED[LR], color); }

//öğrenci for(uint16_t i=0; ben

led.setPixelColor(öğrenciLED[LR], led. Color(0, 0, 66)); }

//gözkapağı for(int i=0; i < gözkapağıNum[gözkapağı];i++) { led.setPixelColor(eyelidLED, 0); } } else if (göz kapağı == 8){ led.clear(); } led.show();}

geçersiz kurulum() {

Seri.başla(115200); led.begin(); led.setBrightness(parlaklık); // İlk Parlaklık 40 led.show(); // Tüm pikselleri 'kapalı' olarak başlat color = led. Color(0, 177, 55); // öğrenci renk gecikmesi(100); qtra.read(sensorValues); iniSensorValL = sensorValues[0]; iniSensorValR = sensorValues[1]; yanıp sönme(göz kapağı, LR); }

void loop() { //QTR - 1A sensör değeri qtra.read(sensorValues); sensorValL = sensorValues[0]; sensorValR = sensorValues[1];

double rasioL = (double)sensorValL / iniSensorValL;

çift rasioR = (çift)sensorValR / iniSensorValR;

Serial.print(rasioL);

Seri.print(" "); Serial.println(rasioR);

if(rasioL > 0.985 && rasioR < 0.985){ //right for(int i = LR; i < 12; i++){ yanıp sönme(0, i); gecikme(40); LR = ben; } }else if(rasioL 0.985){ //left for(int i=LR; i>2; i--){ yanıp sönme(0, i); gecikme(40); LR = ben; } }else if(lid == false && rasioL < 0.96 && rasioR < 0.96){ //Blinking close for(int i = 1; i 0.96 && rasioR > 0.96){ //Yanıp sönen open for(int i = 8; i > 0; i--){ yanıp sönme(i, LR); gecikme(40); kapak = yanlış; } }else if(lid == false && rasioL > 0.96 && rasioR > 0.96) { //normal //cnt++; //göz kapağı = 0; if(LR <= 7){ for(int i=LR; i<=7; i++){ yanıp sönme(0, i); gecikme(40); LR = ben; } }else { for(int i=LR; i>=7; i--){ yanıp sönme(0, i); gecikme(40); LR = ben; } } }

//İlk değer yenileme if (cnt > 10){ iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; } }

Adım 5: Çalıştırma

Sensörle öğrencinin sol ve sağ hareketini ve göz kırpmasını algılayın ve göz küresi LED'ini kontrol edin.

Önerilen: