Mục lục:

Theo dõi chuyển động của mắt bằng cảm biến hồng ngoại: 5 bước
Theo dõi chuyển động của mắt bằng cảm biến hồng ngoại: 5 bước

Video: Theo dõi chuyển động của mắt bằng cảm biến hồng ngoại: 5 bước

Video: Theo dõi chuyển động của mắt bằng cảm biến hồng ngoại: 5 bước
Video: Mắt Cảm Biến Chuyển Động Bật Tắt Đèn 2024, Tháng mười một
Anonim
Theo dõi chuyển động của mắt bằng cảm biến hồng ngoại
Theo dõi chuyển động của mắt bằng cảm biến hồng ngoại

Tôi đã sử dụng một cảm biến hồng ngoại để cảm nhận chuyển động của mắt và điều khiển đèn LED.

Tôi đã tạo nhãn cầu bằng LED Tape NeoPixel.

Bước 1: Hiến pháp

cấu tạo
cấu tạo

Tôi đã sử dụng hai cảm biến QTR-1A để theo dõi mắt. Cảm biến với Arduino và điều khiển đèn LED.

các thành phần

  • SparkFun Arduino Pro Mini 328 - 5V / 16MHz
  • Adafruit LiIon / LiPoly Backpack Add-On cho Pro Trinket / ItsyBitsy
  • Pin LiPo
  • Dải NeoPixel
  • Cảm biến phản xạ QTR-1A

Bước 2: Bóng mắt LED NeoPixel

Bóng mắt LED NeoPixel
Bóng mắt LED NeoPixel
Bóng mắt LED NeoPixel
Bóng mắt LED NeoPixel

Băng LED NeoPixel được sử dụng. LED là 68 đơn vị.

Đèn LED được cố định vào bát bằng băng keo hai mặt và có dây.

Bước 3: Bộ cảm biến

Bộ cảm biến
Bộ cảm biến
Bộ cảm biến
Bộ cảm biến
Bộ cảm biến
Bộ cảm biến

Tôi đã sử dụng hai cảm biến QTR-1A để theo dõi mắt. QTR-1A được đặt trên một tấm nhựa ở khoảng cách bằng chiều rộng của mắt.

Phần cảm biến và phần vi điều khiển được cố định vào kính mắt bằng một chiếc kẹp.

Bước 4: Mã Arduino

Khi mống mắt tiếp cận một cảm biến, ánh sáng phản xạ giảm và giá trị cảm biến tăng lên. Ngược lại, khi mống mắt di chuyển ra xa, ánh sáng phản xạ tăng lên và giá trị cảm biến của phản xạ ảnh giảm.

Chuyển động phải và trái của đồng tử nhãn cầu LED cảm nhận sự tăng và giảm của một giá trị cảm biến và điều khiển nó. Khi nhấp nháy, cả hai giá trị cảm biến đều giảm, vì vậy nếu hai giá trị cảm biến giảm đồng thời, mí mắt của nhãn cầu LED sẽ đi xuống.

Tôi đã sử dụng thư viện sau đây.

  • QTRsensors:
  • Adafruit_NeoPixel:

#include #include

# xác định NUM_SENSORS 2 // số lượng cảm biến được sử dụng # xác định NUM_SAMPLES_PER_SENSOR 10 // tính trung bình # xác định 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 studentNum = 12; uint32_t màu; int độ sáng = 40; byte eyeColor; int LR = 7; boolean lid = false; int cnt = 0;

// Mắt đen 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}};

// học sinh L&R hoạt hình học sinhLED [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}};

// Nháy mí mắt animationint = 0; int EyelineNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int EyelineLED [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 chớp (int mi mắt, int LR) {if (mi mắt! = 8) {// Pewter for (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66 (66, 66)); }

// Mắt đen for (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , color);}

// đồng tử for (uint16_t i = 0; i

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

// mí mắt for (int i = 0; i <míNum [mí mắt]; i ++) {led.setPixelColor (mí mắt LED , 0); }} else if (míc == 8) {led.clear (); } led.show ();}

void setup () {

Serial.begin (115200); led.begin (); led.setBrightness (độ sáng); // Độ sáng ban đầu 40 led.show (); // Khởi tạo tất cả các pixel thành 'off' color = led. Color (0, 177, 55); // độ trễ màu đồng tử (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; chớp mắt (mí mắt, LR); }

void loop () {// QTR - Giá trị cảm biến 1A 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);

if (rasioL> 0.985 && rasioR <0.985) {// right for (int i = LR; i <12; i ++) {flash (0, i); chậm trễ (40); LR = i; }} else if (rasioL 0.985) {// left for (int i = LR; i> 2; i -) {flash (0, i); chậm trễ (40); LR = i; }} else if (lid == false && rasioL <0.96 && rasioR <0.96) {// Nhấp nháy đóng cho (int i = 1; i 0.96 && rasioR> 0.96) {// Nhấp nháy mở cho (int i = 8; i > 0; i -) {nháy (i, LR); chậm trễ (40); nắp = sai; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // mí mắt = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {nháy (0, i); chậm trễ (40); LR = i; }} else {for (int i = LR; i> = 7; i -) {nháy (0, i); chậm trễ (40); LR = i; }}}

// Làm mới giá trị ban đầu if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Bước 5: Hoạt động

Phát hiện chuyển động trái phải và nhấp nháy của đồng tử bằng cảm biến, đồng thời điều khiển đèn LED nhãn cầu.

Đề xuất: