Satura rādītājs:

Acu kustības izsekošana, izmantojot infrasarkano sensoru: 5 soļi
Acu kustības izsekošana, izmantojot infrasarkano sensoru: 5 soļi

Video: Acu kustības izsekošana, izmantojot infrasarkano sensoru: 5 soļi

Video: Acu kustības izsekošana, izmantojot infrasarkano sensoru: 5 soļi
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Jūlijs
Anonim
Acu kustības izsekošana, izmantojot infrasarkano sensoru
Acu kustības izsekošana, izmantojot infrasarkano sensoru

Es izmantoju infrasarkano sensoru, lai sajustu acu kustības un kontrolētu gaismas diodi.

Es izveidoju acu ābolus ar LED Tape NeoPixel.

1. solis: Konstitūcija

Konstitūcija
Konstitūcija

Acu izsekošanai es izmantoju divus sensorus QTR - 1A. Sensēšana ar Arduino un LED vadība.

sastāvdaļas

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Adafruit LiIon/LiPoly mugursomas papildinājums Pro Trinket/ItsyBitsy
  • LiPo akumulators
  • NeoPixel sloksne
  • QTR-1A atstarošanas sensors

2. solis: NeoPixel LED acu bumba

NeoPixel LED acu bumba
NeoPixel LED acu bumba
NeoPixel LED acu bumba
NeoPixel LED acu bumba

Tiek izmantota NeoPixel LED lente. LED ir 68 vienības.

Gaismas diode ir piestiprināta pie bļodas ar abpusēju lenti un vadu.

3. solis: Sensora bloks

Sensora bloks
Sensora bloks
Sensora bloks
Sensora bloks
Sensora bloks
Sensora bloks

Acu izsekošanai es izmantoju divus sensorus QTR - 1A. QTR - 1A ir novietoti uz plastmasas loksnes apmēram acs platuma attālumā.

Sensora daļa un mikrokontrollera daļa tika piestiprinātas pie brillēm attiecīgi ar skavu.

4. solis: Arduino kods

Kad varavīksnene tuvojas vienam sensoram, atstarotā gaisma samazinās un sensora vērtība palielinās. Un otrādi, kad varavīksnene attālinās, atstarotā gaisma palielinās un foto atstarotāja sensora vērtība samazinās.

LED acs ābola zīlītes labā un kreisā kustība uztver viena sensora vērtības palielināšanos un samazināšanos un kontrolē to. Mirgojot, abas sensora vērtības samazinās, tādēļ, ja abas sensora vērtības samazinās vienlaicīgi, LED acs ābola plakstiņi samazināsies.

Es izmantoju šādu bibliotēku.

  • QTRsensors:
  • Adafruit_NeoPixel:

#iekļaut #iekļaut

#define NUM_SENSORS 2 // izmantoto sensoru skaits#definēt NUM_SAMPLES_PER_SENSOR 10 // vidēji#definēt 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 skolēnsNum = 12; uint32_t krāsa; int spilgtums = 40; baits eyeColor; int LR = 7; Būla vāks = nepatiess; int cnt = 0;

// Melno acu L&R animācijaintLED [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}, {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, 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, 68}};

// skolēna L&R animācija, 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 plakstiņš = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int plakstiņuLED [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 ((neparakstīts simbols ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); neparakstīts int sensorValues [NUM_SENSORS];

void mirkšķināšana (int plakstiņš, int LR) {if (plakstiņš! = 8) {// Alva priekš (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Melna acs priekš (uint16_t i = 0; i led.setPixelColor (melnaLED [LR] , krāsa);}

// skolēns (uint16_t i = 0; i

led.setPixelColor (skolēnsLED [LR] , led. Color (0, 0, 66)); }

// plakstiņš priekš (int i = 0; i <eyelidNum [plakstiņš]; i ++) {led.setPixelColor (eyelidLED , 0); }} cits if (plakstiņš == 8) {led.clear (); } led.show ();}

void setup () {

Serial.begin (115200); led.begin (); led.setBrightness (spilgtums); // Sākotnējais spilgtums 40 led.show (); // Inicializēt visus pikseļus uz 'off' color = led. Color (0, 177, 55); // skolēna krāsas aizture (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; mirgot (plakstiņš, LR); }

void loop () {// QTR - 1A sensora vērtība qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];

dubultā rasioL = (dubultā) sensorsValL / iniSensorValL;

dubultā rasioR = (dubultā) sensorsValR / iniSensorValR;

Sērijas nospiedums (rasioL);

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

if (rasioL> 0.985 && rasioR <0.985) {// tiesības uz (int i = LR; i <12; i ++) {mirgot (0, i); kavēšanās (40); LR = i; }} cits, ja (rasioL 0,985) {// atstāts (int i = LR; i> 2; i-) {mirgot (0, i); kavēšanās (40); LR = i; }} else if (lid == false && rasioL <0.96 && rasioR <0.96) {// Mirgo tuvu (int i = 1; i 0.96 && rasioR> 0.96) {// Mirgo atvērts (int i = 8; i > 0; i-) {mirgo (i, LR); kavēšanās (40); vāks = nepatiess; }} cits if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normāls // cnt ++; // plakstiņš = 0; ja (LR <= 7) {par (int i = LR; i <= 7; i ++) {mirgo (0, i); kavēšanās (40); LR = i; }} cits {par (int i = LR; i> = 7; i-) {mirgot (0, i); kavēšanās (40); LR = i; }}}

// Sākotnējās vērtības atsvaidzināšana, ja (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorsValR; cnt = 0; }}

5. darbība: darbība

Ar sensoru atklājiet zīlītes kreiso un labo kustību un mirgošanu un kontrolējiet acs ābola gaismas diodi.

Ieteicams: