Sisukord:

Silmaliigutuse jälgimine infrapunaanduri abil: 5 sammu
Silmaliigutuse jälgimine infrapunaanduri abil: 5 sammu

Video: Silmaliigutuse jälgimine infrapunaanduri abil: 5 sammu

Video: Silmaliigutuse jälgimine infrapunaanduri abil: 5 sammu
Video: Meditatsioon: mõtete väljalülitamine 2024, Juuli
Anonim
Silmaliigutuse jälgimine infrapunaanduri abil
Silmaliigutuse jälgimine infrapunaanduri abil

Silmaliigutuste tajumiseks ja LED -i juhtimiseks kasutasin infrapunaandurit.

Silmamunad tegin LED Tape NeoPixeliga.

1. samm: põhiseadus

Põhiseadus
Põhiseadus

Silmade jälgimiseks kasutasin kahte andurit QTR - 1A. Tundmine Arduino abil ja LED -i juhtimine.

komponendid

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Adafruit LiIon/LiPoly seljakoti lisand Pro Trinket/ItsyBitsy jaoks
  • LiPo aku
  • NeoPixeli riba
  • QTR-1A peegeldusandur

2. samm: NeoPixel LED silmapall

NeoPixel LED silmapall
NeoPixel LED silmapall
NeoPixel LED silmapall
NeoPixel LED silmapall

Kasutatakse NeoPixeli LED -linti. LED on 68 ühikut.

LED on kausi külge kinnitatud kahepoolse teibiga ja juhtmega.

3. samm: andur

Andur
Andur
Andur
Andur
Andur
Andur

Silmade jälgimiseks kasutasin kahte andurit QTR - 1A. QTR - 1A asetatakse plastlehele umbes silma laiuse kaugusel.

Anduriosa ja mikrokontrolleri osa kinnitati prillide külge vastavalt klambriga.

Samm: Arduino kood

Kui iiris läheneb ühele andurile, peegelduv valgus väheneb ja anduri väärtus suureneb. Seevastu iirise eemaldumisel suureneb peegelduv valgus ja väheneb fotoreflektori anduri väärtus.

LED -silmamuna pupilli parem- ja vasakpoolne liikumine tajub ühe anduri väärtuse suurenemist ja vähenemist ning kontrollib seda. Vilgutades vähenevad mõlemad anduri väärtused, nii et kui kaks anduri väärtust samaaegselt vähenevad, lähevad LED -silmamuna silmalaud alla.

Kasutasin järgmist raamatukogu.

  • QTRsensors:
  • Adafruit_NeoPixel:

#kaasama #kaasama

#define NUM_SENSORS 2 // kasutatud andurite arv#define NUM_SAMPLES_PER_SENSOR 10 // keskmistamine#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 mustNum = 24; int pupillNum = 12; uint32_t värv; int heledus = 40; bait silmaVärv; int LR = 7; loogiline kaas = vale; int cnt = 0;

// Mustade silmade L&R animatsioonintLED [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, 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, 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, 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, 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}};

// õpilase L&R animatsiooniint pupillLED [15] [12] = {{33, 34, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {32, 33, 34, 35, 68, 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 silmalaud = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int silmalaudLED [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 ((märkimata märk ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned int sensorValues [NUM_SENSORS];

void blink (int silmalaud, int LR) {if (silmalaud! = 8) {// Tina (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Must silm: (uint16_t i = 0; i led.setPixelColor (mustLED [LR] , värv);}

// õpilane (uint16_t i = 0; i

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

// silmalaud (int i = 0; i <eyelidNum [silmalaud]; i ++) {led.setPixelColor (eyelidLED , 0); }} muidu kui (silmalaud == 8) {led.clear (); } led.show ();}

tühine seadistus () {

Seriaalne algus (115200); led.begin (); led.setBrightness (heledus); // Esialgne heledus 40 led.show (); // Initsialiseeri kõik pikslid 'off' värviks = led. Color (0, 177, 55); // õpilase värvi viivitus (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; vilkuma (silmalaud, LR); }

void loop () {// QTR - 1A anduri väärtus qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];

topelt rasioL = (kahekordne) sensorValL / iniSensorValL;

topelt rasioR = (kahekordne) sensorValR / iniSensorValR;

Serial.print (rasioL);

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

if (rasioL> 0,985 && rasioR <0,985) {// õige (int i = LR; i <12; i ++) {vilgub (0, i); viivitus (40); LR = i; }} muu kui (rasioL 0,985) {// vasakule (int i = LR; i> 2; i-) {vilgub (0, i); viivitus (40); LR = i; }} muidu kui (kaas == vale && rasioL <0,96 && rasioR <0,96) {// Vilgub sulgudes (int i = 1; i 0,96 && rasioR> 0,96) {// Vilgub lahti (int i = 8; i > 0; i-) {vilgub (i, LR); viivitus (40); kaas = vale; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normaalne // cnt ++; // silmalaud = 0; kui (LR <= 7) {jaoks (int i = LR; i <= 7; i ++) {vilgub (0, i); viivitus (40); LR = i; }} else {jaoks (int i = LR; i> = 7; i-) {vilgub (0, i); viivitus (40); LR = i; }}}

// Algväärtuse värskendamine, kui (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Samm: toiming

Tuvastage anduriga õpilase vasak ja parem liikumine ja vilkumine ning juhtige silmamuna LED -i.

Soovitan: