Turinys:

Akių judesio sekimas naudojant infraraudonųjų spindulių jutiklį: 5 žingsniai
Akių judesio sekimas naudojant infraraudonųjų spindulių jutiklį: 5 žingsniai

Video: Akių judesio sekimas naudojant infraraudonųjų spindulių jutiklį: 5 žingsniai

Video: Akių judesio sekimas naudojant infraraudonųjų spindulių jutiklį: 5 žingsniai
Video: Leap Motion SDK 2024, Lapkritis
Anonim
Akių judesio sekimas naudojant infraraudonųjų spindulių jutiklį
Akių judesio sekimas naudojant infraraudonųjų spindulių jutiklį

Naudojau infraraudonųjų spindulių jutiklį, kad pajustų akių judesius ir valdytų šviesos diodą.

Akių obuolius dariau su LED Tape NeoPixel.

1 žingsnis: Konstitucija

Konstitucija
Konstitucija

Akių sekimui naudojau du jutiklius QTR - 1A. Jutimas naudojant „Arduino“ir šviesos diodo valdymas.

komponentai

  • „SparkFun Arduino Pro Mini 328“- 5 V/16 MHz
  • „Adafruit LiIon“/„LiPoly“kuprinės priedas „Pro Trinket“/„ItsyBitsy“
  • LiPo baterija
  • NeoPixel juostelė
  • QTR-1A atspindžio jutiklis

2 žingsnis: „NeoPixel“LED akių kamuoliukas

„NeoPixel“LED akių kamuoliukas
„NeoPixel“LED akių kamuoliukas
NeoPixel LED akių kamuoliukas
NeoPixel LED akių kamuoliukas

Naudojama „NeoPixel“LED juosta. LED yra 68 vienetai.

Šviesos diodas yra pritvirtintas prie dubenėlio dvipuse juosta ir prijungtas.

3 žingsnis: jutiklio blokas

Jutiklio blokas
Jutiklio blokas
Jutiklio blokas
Jutiklio blokas
Jutiklio blokas
Jutiklio blokas

Akių stebėjimui naudojau du jutiklius QTR - 1A. QTR - 1A dedami ant plastikinio lakšto maždaug akies pločio atstumu.

Jutiklio dalis ir mikrovaldiklio dalis atitinkamai buvo pritvirtinti prie akinių su spaustuku.

4 žingsnis: „Arduino“kodas

Kai rainelė artėja prie vieno jutiklio, atspindėta šviesa mažėja, o jutiklio vertė didėja. Priešingai, kai rainelė nutolsta, atspindėta šviesa didėja, o foto atšvaito jutiklio vertė mažėja.

Dešinysis ir kairysis LED akies obuolio vyzdžio judesiai pajunta vieno jutiklio vertės padidėjimą ir sumažėjimą ir jį valdo. Mirksint, abi jutiklio vertės sumažėja, taigi, jei abi jutiklio vertės sumažės vienu metu, LED akies obuolio vokai nusileis.

Aš naudoju šią biblioteką.

  • QTRsensors:
  • „Adafruit_NeoPixel“:

#įtraukti #įtraukti

#define NUM_SENSORS 2 // naudojamų jutiklių skaičius#apibrėžti NUM_SAMPLES_PER_SENSOR 10 // vidurkis#apibrėžti 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 juodasNum = 24; int mokinysNum = 12; uint32_t spalva; int ryškumas = 40; baitų akių spalva; int LR = 7; loginis dangtis = klaidingas; int cnt = 0;

// Juodų akių L&R animacija 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}, {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, 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, 68}};

// mokinio L&R animacija, 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}};

// Mirksinti animacijavoko vokas = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int eyedidLED [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“((nepasirašytas simbolis ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned int sensorValues [NUM_SENSORS];

void mirksėti (int vokas, int LR) {if (voko! = 8) {// Alavas (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Juoda akis (uint16_t i = 0; i led.setPixelColor (juodaLED [LR] , spalva);}

// mokinys (uint16_t i = 0; i

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

// eyelid for (int i = 0; i <eyelidNum [eyelid]; i ++) {led.setPixelColor (eyelidLED , 0); }} else if (vokas == 8) {led.clear (); } led.show ();}

void setup () {

Serial.begin (115200); led.begin (); led.setBrightness (ryškumas); // Pradinis ryškumas 40 led.show (); // Inicijuokite visus taškus į „off“color = led. Color (0, 177, 55); // mokinio spalvos uždelsimas (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; mirksėjimas (vokas, LR); }

void loop () {// QTR - 1A jutiklio reikšmė qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];

dvigubas rasioL = (dvigubas) sensorValL / iniSensorValL;

dvigubas rasioR = (dvigubas) sensorValR / iniSensorValR;

Serial.print (rasioL);

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

if (rasioL> 0,985 && rasioR <0,985) {// tinka (int i = LR; i <12; i ++) {mirksėti (0, i); vėlavimas (40); LR = i; }} else if (rasioL 0.985) {// kairė (int i = LR; i> 2; i-) {mirksėti (0, i); vėlavimas (40); LR = i; }} else if (dangtis == klaidingas && rasioL <0,96 && rasioR <0,96) {// Mirksi arti (int i = 1; i 0,96 && rasioR> 0,96) {// Mirksi atvirai (int i = 8; i > 0; i-) {mirksi (i, LR); vėlavimas (40); dangtis = klaidingas; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // akies vokas = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {mirksėti (0, i); vėlavimas (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {mirksėti (0, i); vėlavimas (40); LR = i; }}}

// Pradinės vertės atnaujinimas, jei (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

5 žingsnis: veikimas

Su jutikliu nustatykite vyzdžio kairės ir dešinės pusės judesius ir mirksėjimą, taip pat valdykite akies obuolio šviesos diodą.

Rekomenduojamas: