Obsah:

Sledovanie pohybu očí pomocou infračerveného senzora: 5 krokov
Sledovanie pohybu očí pomocou infračerveného senzora: 5 krokov

Video: Sledovanie pohybu očí pomocou infračerveného senzora: 5 krokov

Video: Sledovanie pohybu očí pomocou infračerveného senzora: 5 krokov
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
Sledovanie pohybu očí pomocou infračerveného senzora
Sledovanie pohybu očí pomocou infračerveného senzora

Na snímanie pohybov očí a ovládanie LED som použil infračervený senzor.

Očné bulvy som vyrobil pomocou LED pásky NeoPixel.

Krok 1: Ústava

ústava
ústava

Na sledovanie očí som použil dva senzory QTR - 1A. Snímanie pomocou Arduina a ovládanie LED diódy.

komponentov

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Doplnok batohu Adafruit LiIon/LiPoly pre Pro Trinket/ItsyBitsy
  • LiPo batéria
  • NeoPixel pásik
  • Senzor odrazivosti QTR-1A

Krok 2: NeoPixel LED Eye Ball

NeoPixel LED očná guľa
NeoPixel LED očná guľa
NeoPixel LED očná guľa
NeoPixel LED očná guľa

Použitá je LED páska NeoPixel. LED dióda má 68 jednotiek.

LED je k miske pripevnená obojstrannou páskou a zapojená.

Krok 3: Senzorová jednotka

Senzorová jednotka
Senzorová jednotka
Senzorová jednotka
Senzorová jednotka
Senzorová jednotka
Senzorová jednotka

Na sledovanie očí som použil dva senzory QTR - 1A. QTR - 1A sú umiestnené na plastovú fóliu vo vzdialenosti približne šírky oka.

Senzorová časť a časť mikrokontroléra boli pripevnené k okuliarom klipom.

Krok 4: Arduino kód

Keď sa clona priblíži k jednému senzoru, odrazené svetlo sa zníži a hodnota senzora sa zvýši. Naopak, keď sa clona pohne, odrazené svetlo sa zvýši a hodnota senzora fotoreflektora sa zníži.

Pohyb zrenice LED diódy vpravo a vľavo sníma zvýšenie a zníženie jednej hodnoty senzora a riadi ho. Keď bliká, obidve hodnoty snímača sa znížia, takže ak sa súčasne znížia obidve hodnoty snímačov, očné viečka očnej gule LED klesnú.

Použil som nasledujúcu knižnicu.

  • Senzory QTR:
  • Adafruit_NeoPixel:

#include #include

#define NUM_SENSORS 2 // počet použitých senzorov#definovať NUM_SAMPLES_PER_SENSOR 10 // priemerovanie#definovať 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; farba uint32_t; vnútorný jas = 40; byte eyeColor; int LR = 7; booleovské viečko = nepravda; int cnt = 0;

// Animácia Black Eye L&R 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}};

// žiak L&R animationint pupilLED [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 eyelid = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int eyelidLED [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 ((znak bez znamienka ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); nepodpísaný int senzorValues [NUM_SENSORS];

void blink (int očné viečko, int LR) {if (viečko! = 8) {// Pewter pre (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Čierne oko pre (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , farba);}

// žiak pre (uint16_t i = 0; i

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

// očné viečko pre (int i = 0; i <eyelidNum [eyelid]; i ++) {led.setPixelColor (eyelidLED , 0); }} else if (očné viečko == 8) {led.clear (); } led.show ();}

neplatné nastavenie () {

Serial.begin (115200); led.begin (); led.setBrightness (jas); // Počiatočný jas 40 led.show (); // Inicializácia všetkých pixelov na 'vypnuté' farba = led. Color (0, 177, 55); // oneskorenie farby zrenice (100); qtra.read (hodnotyValues); iniSensorValL = hodnoty senzora [0]; iniSensorValR = hodnoty senzora [1]; žmurknutie (očné viečko, LR); }

void loop () {// QTR - 1A hodnota senzora qtra.read (sensorValues); sensorValL = hodnoty senzora [0]; sensorValR = sensorValues [1];

double rasioL = (double) sensorValL / iniSensorValL;

double rasioR = (double) sensorValR / iniSensorValR;

Serial.print (rasioL);

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

if (rasioL> 0,985 && rasioR <0,985) {// vpravo pre (int i = LR; i <12; i ++) {blink (0, i); oneskorenie (40); LR = i; }} else if (rasioL 0,985) {// left for (int i = LR; i> 2; i-) {blink (0, i); oneskorenie (40); LR = i; }} else if (lid == false && rasioL <0,96 && rasioR <0,96) {// Blikajúce zatvorenie pre (int i = 1; i 0,96 && rasioR> 0,96) {// Blikanie otvorené pre (int i = 8; i > 0; i-) {žmurknutie (i, LR); oneskorenie (40); viečko = nepravda; }} else if (lid == false && rasioL> 0,96 && rasioR> 0,96) {// normal // cnt ++; // očné viečko = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {blink (0, i); oneskorenie (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {blink (0, i); oneskorenie (40); LR = i; }}}

// Obnovenie počiatočnej hodnoty, ak (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Krok 5: Prevádzka

Snímajte senzorom pohyb vľavo a vpravo a žmurkanie zrenice a ovládajte LED diódy očnej gule.

Odporúča: