INHOUDSOPGAWE:

Oogbewegingsopsporing met infrarooi sensor: 5 stappe
Oogbewegingsopsporing met infrarooi sensor: 5 stappe

Video: Oogbewegingsopsporing met infrarooi sensor: 5 stappe

Video: Oogbewegingsopsporing met infrarooi sensor: 5 stappe
Video: Sharp IR GP2Y0A51SK0F afstandssensor gebruiken met Arduino (2 cm tot 15 cm) 2024, Julie
Anonim
Oogbewegingsopsporing met infrarooi sensor
Oogbewegingsopsporing met infrarooi sensor

Ek het 'n infrarooi sensor gebruik om oogbewegings te sien en die LED te beheer.

Ek het oogballe gemaak met LED Tape NeoPixel.

Stap 1: Grondwet

Grondwet
Grondwet

Ek het twee sensors QTR - 1A gebruik vir oogopsporing. Sensing met Arduino en die beheer van die LED.

komponente

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Adafruit LiIon/LiPoly-rugsak-byvoeging vir Pro Trinket/ItsyBitsy
  • LiPo battery
  • NeoPixel strook
  • QTR-1A Weerkaatsensor

Stap 2: NeoPixel LED -oogbal

NeoPixel LED -oogbal
NeoPixel LED -oogbal
NeoPixel LED -oogbal
NeoPixel LED -oogbal

NeoPixel LED -band word gebruik. LED is 68 eenhede.

LED is met dubbelzijdige band en bedraad aan die bak vasgemaak.

Stap 3: Sensoreenheid

Sensoreenheid
Sensoreenheid
Sensoreenheid
Sensoreenheid
Sensoreenheid
Sensoreenheid

Ek het twee sensors QTR - 1A gebruik vir oogopsporing. QTR - 1A word op 'n plastiekvel op 'n afstand van ongeveer die wydte van die oog geplaas.

Die sensorgedeelte en die mikrobeheerderdeel is met 'n klem op die bril vasgemaak.

Stap 4: Arduino -kode

As die iris een sensor nader, neem die weerkaatsende lig af en neem die sensorwaarde toe. Omgekeerd, as die iris wegbeweeg, neem die weerkaatste lig toe en neem die sensorwaarde van die fotoreflektor af.

Die regter- en linkerbeweging van die pupil van die LED -oogbal voel die toename en afname van een sensorwaarde en beheer dit. As dit knip, verminder beide sensorwaardes, dus as die twee sensorwaardes gelyktydig afneem, val die ooglede van die LED -oogbal af.

Ek het die volgende biblioteek gebruik.

  • QTRsensors:
  • Adafruit_NeoPixel:

#include #include

#definieer NUM_SENSORS 2 // aantal sensors wat gebruik word#definieer NUM_SAMPLES_PER_SENSOR 10 // gemiddeld#definieer 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 kleur; int helderheid = 40; byte eyeColor; int LR = 7; booleaanse deksel = vals; int cnt = 0;

// Swart oog L&R animasie in swartLED [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}, {20, 21, 24, 43, 46, 47, 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}};

// leerling L&R animasie leerlingLED [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}};

// Knipper animasie na ooglid = 0; int ooglidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int ooglidLED [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 ((ongetekende karakter ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); ongetekende int sensorWaardes [NUM_SENSORS];

leegte knip (int ooglid, int LR) {if (ooglid! = 8) {// Pewter vir (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Swart oog vir (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , kleur);}

// leerling vir (uint16_t i = 0; i

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

// ooglid vir (int i = 0; i <ooglidNum [ooglid]; i ++) {led.setPixelColor (ooglidLED , 0); }} anders as (ooglid == 8) {led.clear (); } led.show ();}

ongeldige opstelling () {

Serial.begin (115200); led.begin (); led.setBrightness (helderheid); // Aanvanklike helderheid 40 led.show (); // Initialiseer alle pixels na 'af' color = led. Color (0, 177, 55); // leerling kleur vertraging (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; knipoog (ooglid, LR); }

leegte lus () {// QTR - 1A sensor waarde qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];

double rasioL = (double) sensorValL / iniSensorValL;

double rasioR = (double) sensorValR / iniSensorValR;

Serial.print (rasioL);

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

as (rasioL> 0.985 && rasioR <0.985) {// regs vir (int i = LR; i <12; i ++) {blink (0, i); vertraging (40); LR = i; }} anders as (rasioL 0.985) {// links vir (int i = LR; i> 2; i-) {blink (0, i); vertraging (40); LR = i; }} anders as (lid == false && rasioL <0.96 && rasioR <0.96) {// Knipperend naby vir (int i = 1; i 0.96 && rasioR> 0.96) {// Knipperend oop vir (int i = 8; i > 0; i-) {blink (i, LR); vertraging (40); deksel = vals; }} anders if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normaal // cnt ++; // ooglid = 0; as (LR <= 7) {for (int i = LR; i <= 7; i ++) {blink (0, i); vertraging (40); LR = i; }} anders {vir (int i = LR; i> = 7; i-) {blink (0, i); vertraging (40); LR = i; }}}

// Aanvanklike waarde verfris as (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Stap 5: Bediening

Ontdek die linker- en regterbeweging en knip van die leerling met die sensor, en beheer die oogbol -LED.

Aanbeveel: