สารบัญ:

การติดตามการเคลื่อนไหวของดวงตาโดยใช้เซ็นเซอร์อินฟราเรด: 5 ขั้นตอน
การติดตามการเคลื่อนไหวของดวงตาโดยใช้เซ็นเซอร์อินฟราเรด: 5 ขั้นตอน

วีดีโอ: การติดตามการเคลื่อนไหวของดวงตาโดยใช้เซ็นเซอร์อินฟราเรด: 5 ขั้นตอน

วีดีโอ: การติดตามการเคลื่อนไหวของดวงตาโดยใช้เซ็นเซอร์อินฟราเรด: 5 ขั้นตอน
วีดีโอ: PIR เซนเซอร์ตรวจจับการเคลื่อนไหว220V 2024, กรกฎาคม
Anonim
การติดตามการเคลื่อนไหวของดวงตาโดยใช้เซ็นเซอร์อินฟราเรด
การติดตามการเคลื่อนไหวของดวงตาโดยใช้เซ็นเซอร์อินฟราเรด

ฉันใช้เซ็นเซอร์อินฟราเรดเพื่อตรวจจับการเคลื่อนไหวของดวงตาและควบคุม LED

ฉันสร้างลูกตาด้วยเทป LED NeoPixel

ขั้นตอนที่ 1: รัฐธรรมนูญ

รัฐธรรมนูญ
รัฐธรรมนูญ

ฉันใช้เซ็นเซอร์ QTR - 1A สองตัวสำหรับการติดตามดวงตา ตรวจจับด้วย Arduino และควบคุม LED

ส่วนประกอบ

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Adafruit LiIon/LiPoly Backpack Add-On สำหรับ Pro Trinket/ItsyBitsy
  • แบตเตอรี่ LiPo
  • แถบ NeoPixel
  • เซ็นเซอร์สะท้อนแสง QTR-1A

ขั้นตอนที่ 2: NeoPixel LED Eye Ball

ลูกตา LED NeoPixel
ลูกตา LED NeoPixel
ลูกตา LED NeoPixel
ลูกตา LED NeoPixel

ใช้เทป NeoPixel LED LED คือ 68 หน่วย

LED ยึดติดกับชามด้วยเทปสองด้านและต่อสาย

ขั้นตอนที่ 3: หน่วยเซนเซอร์

หน่วยเซนเซอร์
หน่วยเซนเซอร์
หน่วยเซนเซอร์
หน่วยเซนเซอร์
หน่วยเซนเซอร์
หน่วยเซนเซอร์

ฉันใช้เซ็นเซอร์ QTR - 1A สองตัวสำหรับการติดตามดวงตา QTR - 1A วางบนแผ่นพลาสติกที่ระยะห่างประมาณความกว้างของดวงตา

ส่วนเซ็นเซอร์และส่วนไมโครคอนโทรลเลอร์ถูกจับจ้องไปที่แว่นสายตาโดยใช้คลิปหนีบตามลำดับ

ขั้นตอนที่ 4: รหัส Arduino

เมื่อม่านตาเข้าใกล้เซ็นเซอร์ตัวหนึ่ง แสงสะท้อนจะลดลงและค่าเซ็นเซอร์จะเพิ่มขึ้น ในทางกลับกัน เมื่อม่านตาเคลื่อนออกไป แสงสะท้อนจะเพิ่มขึ้น และค่าเซ็นเซอร์ของตัวสะท้อนแสงจะลดลง

การเคลื่อนไหวทางขวาและซ้ายของรูม่านตาของลูกตา LED จะตรวจจับการเพิ่มขึ้นและลดลงของค่าเซ็นเซอร์หนึ่งค่าและควบคุมค่านั้น เมื่อกะพริบ ค่าเซ็นเซอร์ทั้งสองจะลดลง ดังนั้นหากค่าเซ็นเซอร์ทั้งสองลดลงพร้อมกัน เปลือกตาของลูกตา LED จะลดลง

ฉันใช้ห้องสมุดต่อไปนี้

  • เซ็นเซอร์ QTR:
  • Adafruit_NeoPixel:

#รวม #รวม

#define NUM_SENSORS 2 // จำนวนเซ็นเซอร์ที่ใช้#define NUM_SAMPLES_PER_SENSOR 10 // ค่าเฉลี่ย#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; นักเรียน intNum = 12; uint32_t สี; ความสว่างภายใน = 40; ไบต์ eyeColor; int LR =7; ฝาบูลีน = เท็จ; int cnt = 0;

// ตาดำ L&R อนิเมชั่น 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}};

// ภาพเคลื่อนไหวของนักเรียน L&R ภาพเคลื่อนไหว LED[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}};

// กะพริบตาภาพเคลื่อนไหว = 0; เปลือกตาจำนวนเต็ม[8] = {0, 4, 8, 16, 24, 34, 44, 56}; เปลือกตา LED[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((ถ่านที่ไม่ได้ลงนาม) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); ค่าเซ็นเซอร์ int ที่ไม่ได้ลงนาม[NUM_SENSORS];

โมฆะกะพริบตา (เปลือกตา int, int LR) { ถ้า (เปลือกตา != 8) { //Pewter for (uint16_t i=0; i<led.numPixels (); i++) { led.setPixelColor (i, led. Color (66), 66, 66)); }

//ตาดำสำหรับ(uint16_t i=0; i led.setPixelColor(blackLED[LR], color); }

// นักเรียนสำหรับ (uint16_t i=0; i

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

// เปลือกตาสำหรับ (int i = 0; i <เปลือกตา [เปลือกตา]; i++) { led.setPixelColor (eyelidLED , 0); } } else if (เปลือกตา == 8){ led.clear(); } led.show();}

การตั้งค่าเป็นโมฆะ () {

Serial.begin(115200); led.begin(); led.setBrightness(ความสว่าง); // ความสว่างเริ่มต้น 40 led.show(); // เริ่มต้นพิกเซลทั้งหมดเป็น 'ปิด' สี = led. Color(0, 177, 55); // สีของรูม่านตาล่าช้า (100); qtra.read(ค่าเซ็นเซอร์); iniSensorValL = ค่าเซ็นเซอร์[0]; iniSensorValR = ค่าเซ็นเซอร์[1]; กะพริบตา (เปลือกตา, LR); }

วงเป็นโมฆะ () {// QTR - 1A ค่าเซ็นเซอร์ qtra.read (sensorValues); sensorValL = ค่าเซ็นเซอร์[0]; sensorValR = ค่าเซ็นเซอร์ [1];

สองเท่า rasioL = (สองเท่า)sensorValL / iniSensorValL;

สองเท่า rasioR = (สองเท่า)sensorValR / iniSensorValR;

Serial.print(rasioL);

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

if(rasioL > 0.985 && rasioR < 0.985){ // right for (int i = LR; i < 12; i++){ กะพริบ (0, i); ล่าช้า(40); LR = ผม; } } else if (rasioL 0.985){ //left for (int i=LR; i>2; i--){ กะพริบ (0, i); ล่าช้า(40); LR = ผม; } } อื่น if (lid == false && rasioL < 0.96 && rasioR < 0.96) { // กะพริบปิดสำหรับ (int i = 1; i 0.96 && rasioR > 0.96){ // เปิดกะพริบสำหรับ (int i = 8; i > 0; i--){ กะพริบ (i, LR); ล่าช้า(40); ฝา = เท็จ; } } อื่น if (lid == false && rasioL > 0.96 && rasioR > 0.96) {// ปกติ //cnt++; //เปลือกตา = 0; if(LR <= 7){ for(int i=LR; i<=7; i++){ กะพริบ(0, i); ล่าช้า(40); LR = ผม; } }else { สำหรับ(int i=LR; i>=7; i--){ กะพริบ(0, i); ล่าช้า(40); LR = ผม; } } }

// ค่าเริ่มต้นรีเฟรชถ้า (cnt > 10) { iniSensorValL = sensorValL; iniSensorValR = เซ็นเซอร์ValR; cnt = 0; } }

ขั้นตอนที่ 5: การทำงาน

ตรวจจับการเคลื่อนไหวทางซ้ายและขวาและการกะพริบของรูม่านตาด้วยเซ็นเซอร์ และควบคุม LED ของลูกตา

แนะนำ: