Talaan ng mga Nilalaman:

Pagsubaybay sa Mata na Paggalaw Gamit ang Infrared Sensor: 5 Hakbang
Pagsubaybay sa Mata na Paggalaw Gamit ang Infrared Sensor: 5 Hakbang

Video: Pagsubaybay sa Mata na Paggalaw Gamit ang Infrared Sensor: 5 Hakbang

Video: Pagsubaybay sa Mata na Paggalaw Gamit ang Infrared Sensor: 5 Hakbang
Video: Ang trabaho ko ay pagmamasid sa kagubatan at may kakaibang nangyayari dito. 2024, Nobyembre
Anonim
Pagsubaybay sa Mata na Paggalaw Gamit ang Infrared Sensor
Pagsubaybay sa Mata na Paggalaw Gamit ang Infrared Sensor

Gumamit ako ng isang infrared sensor upang maunawaan ang mga paggalaw ng mata at makontrol ang LED.

Gumawa ako ng mga eyeballs sa LED Tape NeoPixel.

Hakbang 1: Saligang Batas

Saligang Batas
Saligang Batas

Gumamit ako ng dalawang sensor QTR - 1A para sa pagsubaybay sa mata. Sensing sa Arduino at pagkontrol sa LED.

mga sangkap

  • SparkFun Arduino Pro Mini 328 - 5V / 16MHz
  • Adafruit LiIon / LiPoly Backpack Add-On para sa Pro Trinket / ItsyBitsy
  • Baterya ng LiPo
  • NeoPixel strip
  • QTR-1A Sensor ng Reflectance

Hakbang 2: NeoPixel LED Eye Ball

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

NeoPixel LED tape ang ginamit. Ang LED ay 68 na yunit.

Ang LED ay naayos sa mangkok na may dobleng panig na tape at wired.

Hakbang 3: Sensor Unit

Unit ng Sensor
Unit ng Sensor
Unit ng Sensor
Unit ng Sensor
Unit ng Sensor
Unit ng Sensor

Gumamit ako ng dalawang sensor QTR - 1A para sa pagsubaybay sa mata. QTR - 1A ay inilalagay sa isang plastic sheet na may distansya na halos lapad ng mata.

Ang bahagi ng sensor at bahagi ng microcontroller ay naayos sa mga salamin sa mata na may isang clip ayon sa pagkakabanggit.

Hakbang 4: Arduino Code

Kapag lumapit ang iris sa isang sensor, ang nababanaag na ilaw ay nababawasan at tumataas ang halaga ng sensor. Sa kabaligtaran, kapag gumalaw ang iris, tataas ang masasalamin na ilaw at bumababa ang halaga ng sensor ng salamin ng larawan.

Ang kanan at kaliwang paggalaw ng mag-aaral ng LED eyeball ay nararamdaman ang pagtaas at pagbawas ng isang halaga ng sensor at kinokontrol ito. Kapag kumukurap, ang parehong mga halaga ng sensor ay bumababa, kaya kung ang dalawang halaga ng sensor ay sabay na bumababa, ang mga eyelid ng LED eyeball ay bababa.

Ginamit ko ang sumusunod na silid-aklatan.

  • QTRsensors:
  • Adafruit_NeoPixel:

# isama ang # isama

# tukuyin ang NUM_SENSORS 2 // bilang ng mga sensor na ginamit # tukuyin ang NUM_SAMPLES_PER_SENSOR 10 // sa average na # tukuyin ang 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 kulay; int ningning = 40; byte eyeColor; int LR = 7; takip ng boolean = false; int cnt = 0;

// Black eye L&R animationint blackLED [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, 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}, {21, 23, 44, 46, 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}, {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}};

// Blink animationint eyelid = 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 sensorValues [NUM_SENSORS];

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

// Black eye for (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , color);}

// pupil for (uint16_t i = 0; i

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

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

walang bisa ang pag-setup () {

Serial.begin (115200); pinangunahan.begin (); humantong.setBightness (ningning); // Initial Brightness 40 led.show (); // Initialize all pixel to 'off' color = led. Color (0, 177, 55); // pagkaantala ng kulay ng mag-aaral (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; kumurap (eyelid, LR); }

void loop () {// QTR - 1A sensor halaga qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];

doble rasioL = (doble) sensorValL / iniSensorValL;

doble rasioR = (doble) sensorValR / iniSensorValR;

Serial.print (rasioL);

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

kung (rasioL> 0.985 && rasioR <0.985) {// tama para sa (int i = LR; i <12; i ++) {blink (0, i); pagkaantala (40); LR = i; }} iba pa kung (rasioL 0.985) {// umalis para sa (int i = LR; i> 2; i -) {blink (0, i); pagkaantala (40); LR = i; }} iba pa kung (takip == false && rasioL <0.96 && rasioR <0.96) {// Blinking close for (int i = 1; i 0.96 && rasioR> 0.96) {// Blinking open for (int i = 8; i > 0; i -) {blink (i, LR); pagkaantala (40); takip = maling; }} iba pa kung (takip == maling && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // eyelid = 0; kung (LR <= 7) {para sa (int i = LR; i <= 7; i ++) {blink (0, i); pagkaantala (40); LR = i; }} iba pa {para sa (int i = LR; i> = 7; i -) {blink (0, i); pagkaantala (40); LR = i; }}}

// Initial value refresh if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Hakbang 5: Pagpapatakbo

Makitang kaliwa at kanang kilusan at blink ng mag-aaral gamit ang sensor, at kontrolin ang eyeball LED.

Inirerekumendang: