Mündəricat:

İnfraqırmızı sensordan istifadə edərək göz hərəkətlərinin izlənməsi: 5 addım
İnfraqırmızı sensordan istifadə edərək göz hərəkətlərinin izlənməsi: 5 addım

Video: İnfraqırmızı sensordan istifadə edərək göz hərəkətlərinin izlənməsi: 5 addım

Video: İnfraqırmızı sensordan istifadə edərək göz hərəkətlərinin izlənməsi: 5 addım
Video: İşıq sensoru ilə mikrodalğalı varlıq sensoru - ümumi baxış, Tuya Smart və Home Assistant-da işləmə 2024, Noyabr
Anonim
İnfraqırmızı sensordan istifadə edərək göz hərəkətlərinin izlənməsi
İnfraqırmızı sensordan istifadə edərək göz hərəkətlərinin izlənməsi

Göz hərəkətlərini hiss etmək və LED -i idarə etmək üçün infraqırmızı sensordan istifadə etdim.

LED Tape NeoPixel ilə göz qapaqları düzəltdim.

Addım 1: Konstitusiya

Konstitusiya
Konstitusiya

Gözləri izləmək üçün iki sensör QTR - 1A istifadə etdim. Arduino ilə algılama və LED -in idarə edilməsi.

komponentlər

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Pro Trinket/ItsyBitsy üçün Adafruit LiIon/LiPoly Sırt Çantası Əlavəsi
  • LiPo Batareyası
  • NeoPixel zolağı
  • QTR-1A Yansıtma Sensoru

Addım 2: NeoPixel LED Göz Topu

NeoPixel LED Göz Topu
NeoPixel LED Göz Topu
NeoPixel LED Göz Topu
NeoPixel LED Göz Topu

NeoPixel LED şeridi istifadə olunur. LED 68 ədəddir.

LED qaba iki tərəfli lentlə bərkidilir və tellə bağlanır.

Addım 3: Sensor vahidi

Sensor vahidi
Sensor vahidi
Sensor vahidi
Sensor vahidi
Sensor vahidi
Sensor vahidi

Gözləri izləmək üçün iki sensör QTR - 1A istifadə etdim. QTR - 1A, gözün eni yaxınlığında bir plastik təbəqəyə yerləşdirilir.

Sensor hissəsi və mikrokontrolör hissəsi sırasıyla bir kliplə gözlüklərə bərkidilmişdir.

Addım 4: Arduino Kodu

İris bir sensora yaxınlaşanda əks olunan işıq azalır və sensorun dəyəri artır. Əksinə, iris uzaqlaşdıqda əks olunan işıq artır və foto reflektorun sensor dəyəri azalır.

LED göz kürəsinin şagirdinin sağ və sol hərəkəti bir sensor dəyərinin artdığını və azaldığını hiss edir və onu idarə edir. Yanıp sönəndə hər iki sensor dəyəri azalır, buna görə də iki sensorun eyni vaxtda azalması halında, LED göz kürəsinin göz qapaqları aşağı enəcək.

Aşağıdakı kitabxanadan istifadə etdim.

  • QTRsensorları:
  • Adafruit_NeoPixel:

#daxil edin #daxil edin

#NUM_SENSORS 2 müəyyən edin // istifadə olunan sensorlar sayı#NUM_SAMPLES_PER_SENSOR 10 təyin edin // orta#EMITTER_PIN QTR_NO_EMITTER_PIN təyin edin

int iniSensorValL, sensorValL; int iniSensorValR, sensorValR; #define PIN A3 Adafruit_NeoPixel led = Adafruit_NeoPixel (68, PIN, NEO_GRB + NEO_KHZ800); int blackNum = 24; int pupilNum = 12; uint32_t rəng; int parlaqlıq = 40; bayt göz rəngi; int LR = 7; boolean qapaq = yalan; int cnt = 0;

// Qara göz L&R animasiyası qara LED [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, 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, 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, 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, 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, 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, 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, 68}};

// şagird L&R animasiyasında şagird [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}};

// Göz qapağının animasiyası göz qırpır = 0; int göz qapağıNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int göz qapağı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 ((işarəsiz simvol ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); imzasız int sensorValues [NUM_SENSORS];

boş göz qırpması (int göz qapağı, int LR) {if (göz qapağı! = 8) {// Pewter for (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66), 66, 66)); }

// Qara göz (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , rəng);}

// şagird (uint16_t i = 0; i

led.setPixelColor (şagirdLED [LR] , led. Color (0, 0, 66)); }

// göz qapağı (int i = 0; i <eyelidNum [göz qapağı]; i ++) {led.setPixelColor (göz qapağıLED , 0); }} başqa if (göz qapağı == 8) {led.clear (); } led.show ();}

boş quraşdırma () {

Serial.begin (115200); led.begin (); led.setBrightness (parlaqlıq); // İlk Parlaqlıq 40 led.show (); // Bütün pikselləri 'off' color = led. Color (0, 177, 55) olaraq başladın; // şagird rəng gecikməsi (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; göz qırpması (göz qapağı, LR); }

void loop () {// QTR - 1A sensor dəyəri qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];

ikiqat rasioL = (ikiqat) sensorValL / iniSensorValL;

ikiqat rasioR = (ikiqat) sensorValR / iniSensorValR;

Serial.çap (rasioL);

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

if (rasioL> 0.985 && rasioR <0.985) {// sağ üçün (int i = LR; i <12; i ++) {yanıp sönmə (0, i); gecikmə (40); LR = i; }} else if (rasioL 0.985) {// for (int i = LR; i> 2; i-) {blink (0, i); gecikmə (40); LR = i; }} başqa if (qapaq == yalan && rasioL <0.96 && rasioR <0.96) {// Yanıp sönən (int i = 1; i 0.96 && rasioR> 0.96) {// üçün yanıp sönən (int i = 8; i > 0; i-) {yanıp sön (i, LR); gecikmə (40); qapaq = yalan; }} başqa if (qapaq == yanlış && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // göz qapağı = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {yanıp sönmə (0, i); gecikmə (40); LR = i; }} başqa {üçün (int i = LR; i> = 7; i-) {yanıp sönmə (0, i); gecikmə (40); LR = i; }}}

// Başlanğıc dəyəri yeniləyin, əgər (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Addım 5: Əməliyyat

Sensorla şagirdin sol və sağ hərəkətini və göz qırpımını aşkar edin və göz kürəsinin LEDini idarə edin.

Tövsiyə: