Съдържание:

Проследяване на движението на очите с помощта на инфрачервен сензор: 5 стъпки
Проследяване на движението на очите с помощта на инфрачервен сензор: 5 стъпки

Видео: Проследяване на движението на очите с помощта на инфрачервен сензор: 5 стъпки

Видео: Проследяване на движението на очите с помощта на инфрачервен сензор: 5 стъпки
Видео: 5 Яки Трика за iPhone, които НЕ ЗНАЕТЕ! 2024, Юли
Anonim
Проследяване на движението на очите с помощта на инфрачервен сензор
Проследяване на движението на очите с помощта на инфрачервен сензор

Използвах инфрачервен сензор, за да усетя движенията на очите и да контролирам светодиода.

Направих очни ябълки с LED лента NeoPixel.

Стъпка 1: Конституция

Конституция
Конституция

Използвах два сензора QTR - 1A за проследяване на очите. Усещане с Arduino и управление на светодиода.

компоненти

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Добавка за раница Adafruit LiIon/LiPoly за Pro Trinket/ItsyBitsy
  • LiPo батерия
  • Неопикселова лента
  • QTR-1A Сензор за отражение

Стъпка 2: NeoPixel LED очна топка

LED топка за очи NeoPixel LED
LED топка за очи NeoPixel LED
LED топка за очи NeoPixel LED
LED топка за очи NeoPixel LED

Използва се LED лента NeoPixel. LED е 68 единици.

LED се фиксира към купата с двустранна лента и се свързва.

Стъпка 3: Сензорен модул

Сензорен блок
Сензорен блок
Сензорен блок
Сензорен блок
Сензорен блок
Сензорен блок

Използвах два сензора QTR - 1A за проследяване на очите. QTR - 1A се поставят върху пластмасов лист на разстояние около ширината на окото.

Сензорната част и частта от микроконтролера бяха фиксирани съответно към очилата с щипка.

Стъпка 4: Arduino код

Когато ирисът се приближи до един сензор, отразената светлина намалява и стойността на сензора се увеличава. Обратно, когато ирисът се отдалечава, отразената светлина се увеличава и стойността на сензора на фоторефлектора намалява.

Дясното и лявото движение на зеницата на LED очната ябълка усеща увеличаването и намаляването на стойността на един сензор и я контролира. Когато мига, и двете стойности на сензора намаляват, така че ако двете стойности на сензора намаляват едновременно, клепачите на LED очната ябълка ще паднат надолу.

Използвах следната библиотека.

  • QTRsensors:
  • Adafruit_NeoPixel:

#включи #включи

#дефинирайте NUM_SENSORS 2 // брой използвани сензори#дефинирайте NUM_SAMPLES_PER_SENSOR 10 // осредняваме#дефинирайте 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 pupilNum = 12; uint32_t цвят; int яркост = 40; байт eyeColor; int LR = 7; булев капак = невярно; int cnt = 0;

// L&R анимация за черни очи в черно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}, {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}};

// ученик L&R анимацияint ученикLED [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}};

// Blink animationint клепач = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int клепач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 ((беззнаков знак ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); беззначен int sensorValues [NUM_SENSORS];

празно мигане (int клепач, int LR) {if (клепач! = 8) {// Оловен за (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Черни очи за (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , цвят);}

// ученик за (uint16_t i = 0; i

led.setPixelColor (ученикLED [LR] , led. Color (0, 0, 66)); }

// клепач за (int i = 0; i <eyelidNum [клепач]; i ++) {led.setPixelColor (eyelidLED , 0); }} иначе ако (клепач == 8) {led.clear (); } led.show ();}

void setup () {

Serial.begin (115200); led.begin (); led.setBrightness (яркост); // Начална яркост 40 led.show (); // Инициализираме всички пиксели на 'off' color = led. Color (0, 177, 55); // забавяне на цвета на зеницата (100); qtra.read (sensorValues); iniSensorValL = valueValues [0]; iniSensorValR = сензорни стойности [1]; мига (клепач, LR); }

void loop () {// QTR - 1A стойност на сензора qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];

двоен rasioL = (двоен) sensorValL / iniSensorValL;

двоен rasioR = (двоен) sensorValR / iniSensorValR;

Serial.print (rasioL);

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

if (rasioL> 0.985 && rasioR <0.985) {// вдясно за (int i = LR; i <12; i ++) {мига (0, i); забавяне (40); LR = i; }} иначе ако (rasioL 0.985) {// ляво за (int i = LR; i> 2; i-) {мига (0, i); забавяне (40); LR = i; }} else if (lid == false && rasioL <0,96 && rasioR <0,96) {// Мигащо затваряне за (int i = 1; i 0,96 && rasioR> 0,96) {// Мигащо отворено за (int i = 8; i > 0; i-) {мига (i, LR); забавяне (40); капак = невярно; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// нормално // cnt ++; // клепач = 0; ако (LR <= 7) {for (int i = LR; i <= 7; i ++) {мига (0, i); забавяне (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {мига (0, i); забавяне (40); LR = i; }}}

// Опресняване на първоначалната стойност if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Стъпка 5: Операция

Открийте движението наляво и надясно и премигнете на зеницата със сензора и контролирайте светодиода за очната ябълка.

Препоръчано: