Cuprins:

Urmărirea mișcării ochilor utilizând senzorul infraroșu: 5 pași
Urmărirea mișcării ochilor utilizând senzorul infraroșu: 5 pași

Video: Urmărirea mișcării ochilor utilizând senzorul infraroșu: 5 pași

Video: Urmărirea mișcării ochilor utilizând senzorul infraroșu: 5 pași
Video: Kit-ul SmartHome Accesibil - Am testat Enel HomiX 2024, Iulie
Anonim
Urmărirea mișcării ochilor utilizând senzorul cu infraroșu
Urmărirea mișcării ochilor utilizând senzorul cu infraroșu

Am folosit un senzor cu infraroșu pentru a simți mișcările ochilor și pentru a controla LED-ul.

Am făcut globi oculari cu bandă LED NeoPixel.

Pasul 1: Constituție

Constituţie
Constituţie

Am folosit doi senzori QTR - 1A pentru urmărirea ochilor. Detectarea cu Arduino și controlul LED-ului.

componente

  • SparkFun Arduino Pro Mini 328 - 5V / 16MHz
  • Supliment Adafruit LiIon / LiPoly Backpack pentru Pro Trinket / ItsyBitsy
  • Baterie LiPo
  • Benzi NeoPixel
  • Senzor de reflexie QTR-1A

Pasul 2: NeoPixel LED Eye Ball

NeoPixel LED Eye Ball
NeoPixel LED Eye Ball
NeoPixel LED Eye Ball
NeoPixel LED Eye Ball

Se utilizează banda LED NeoPixel. LED-ul este de 68 de unități.

LED-ul este fixat pe castron cu bandă dublă și cablat.

Pasul 3: Unitatea senzorului

Unitate senzor
Unitate senzor
Unitate senzor
Unitate senzor
Unitate senzor
Unitate senzor

Am folosit doi senzori QTR - 1A pentru urmărirea ochilor. QTR - 1A sunt plasate pe o foaie de plastic la o distanță de aproximativ lățimea ochiului.

Partea senzorului și partea microcontrolerului au fost fixate la ochelari cu un clip respectiv.

Pasul 4: Cod Arduino

Când irisul se apropie de un senzor, lumina reflectată scade și valoarea senzorului crește. În schimb, atunci când irisul se îndepărtează, lumina reflectată crește și valoarea senzorului reflectorului foto scade.

Mișcarea dreaptă și stângă a pupilei globului ocular LED detectează creșterea și scăderea valorii unui senzor și o controlează. Când clipesc, ambele valori ale senzorului scad, deci dacă cele două valori ale senzorului scad simultan, pleoapele globului ocular cu LED vor coborî.

Am folosit următoarea bibliotecă.

  • QTRsensors:
  • Adafruit_NeoPixel:

#include #include

#define NUM_SENSORS 2 // numărul de senzori utilizați # define NUM_SAMPLES_PER_SENSOR 10 // media # 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 BlackNum = 24; int pupilNum = 12; uint32_t culoare; luminozitate int = 40; byte eyeColor; int LR = 7; capac boolean = fals; int cnt = 0;

// Animarea L&R pentru ochi negri este negru [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, 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, 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, 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}};

// pupil L&R animationint pupilLED [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}, {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, 68}};

// Blink animationint pleoapa = 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 ((unsigned char ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned int senzorValori [NUM_SENSORS];

clipire nulă (int pleoapă, int LR) {if (pleoapă! = 8) {// Pewter pentru (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Ochi negru pentru (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , culoare);}

// elev pentru (uint16_t i = 0; i

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

// pleoapa pentru (int i = 0; i <eyelidNum [pleoapa]; i ++) {led.setPixelColor (pleoapaLED , 0); }} else if (pleoapa == 8) {led.clear (); } led.show ();}

configurare nulă () {

Serial.begin (115200); led.begin (); led.setBlightness (luminozitate); // Luminozitate inițială 40 led.show (); // Inițializați toți pixelii la „off” color = led. Color (0, 177, 55); // întârzierea culorii elevului (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; clipire (pleoapă, LR); }

bucla void () {// QTR - 1A valoarea senzorului qtra.read (sensorValues); sensorValL = senzorValori [0]; sensorValR = senzorValori [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) {// dreapta pentru (int i = LR; i <12; i ++) {blink (0, i); întârziere (40); LR = i; }} else if (rasioL 0.985) {// left for (int i = LR; i> 2; i -) {blink (0, i); întârziere (40); LR = i; }} else if (lid == false && rasioL <0,96 && rasioR <0,96) {// Închidere intermitentă pentru (int i = 1; i 0,96 && rasioR> 0,96) {// Intermitent deschis pentru (int i = 8; i > 0; i -) {clipire (i, LR); întârziere (40); capac = fals; }} else if (lid == false && rasioL> 0,96 && rasioR> 0,96) {// normal // cnt ++; // pleoapa = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {clipește (0, i); întârziere (40); LR = i; }} else {for (int i = LR; i> = 7; i -) {clipire (0, i); întârziere (40); LR = i; }}}

// Reîmprospătarea valorii inițiale dacă (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Pasul 5: Operațiune

Detectați mișcarea stângă și dreaptă și clipiți cu pupila cu senzorul și controlați LED-ul globului ocular.

Recomandat: