Daftar Isi:

Pelacakan Gerakan Mata Menggunakan Sensor Inframerah: 5 Langkah
Pelacakan Gerakan Mata Menggunakan Sensor Inframerah: 5 Langkah

Video: Pelacakan Gerakan Mata Menggunakan Sensor Inframerah: 5 Langkah

Video: Pelacakan Gerakan Mata Menggunakan Sensor Inframerah: 5 Langkah
Video: Menggunakan Sensor Inframerah 2024, Juli
Anonim
Pelacakan Gerakan Mata Menggunakan Sensor Inframerah
Pelacakan Gerakan Mata Menggunakan Sensor Inframerah

Saya menggunakan sensor inframerah untuk merasakan gerakan mata dan mengontrol LED.

Saya membuat bola mata dengan LED Tape NeoPixel.

Langkah 1: Konstitusi

Konstitusi
Konstitusi

Saya menggunakan dua sensor QTR - 1A untuk pelacakan mata. Sensing dengan Arduino dan mengontrol LED.

komponen

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Adafruit LiIon/LiPoly Backpack Add-On untuk Pro Trinket/ItsyBitsy
  • Baterai Lipo
  • Strip NeoPixel
  • Sensor Reflektansi QTR-1A

Langkah 2: Bola Mata LED NeoPixel

Bola Mata LED NeoPixel
Bola Mata LED NeoPixel
Bola Mata LED NeoPixel
Bola Mata LED NeoPixel

Pita LED NeoPixel digunakan. LED adalah 68 unit.

LED dipasang pada mangkuk dengan pita dua sisi dan kabel.

Langkah 3: Unit Sensor

Satuan Sensor
Satuan Sensor
Satuan Sensor
Satuan Sensor
Satuan Sensor
Satuan Sensor

Saya menggunakan dua sensor QTR - 1A untuk pelacakan mata. QTR - 1A ditempatkan pada lembaran plastik pada jarak sekitar lebar mata.

Bagian sensor dan bagian mikrokontroler masing-masing dipasang pada kacamata dengan klip.

Langkah 4: Kode Arduino

Ketika iris mendekati satu sensor, cahaya yang dipantulkan berkurang dan nilai sensor meningkat. Sebaliknya, ketika iris menjauh, cahaya yang dipantulkan bertambah dan nilai sensor dari reflektor foto berkurang.

Gerakan kanan dan kiri pupil bola mata LED merasakan kenaikan dan penurunan satu nilai sensor dan mengontrolnya. Saat berkedip, kedua nilai sensor berkurang, sehingga jika kedua nilai sensor berkurang secara bersamaan, kelopak mata bola mata LED akan turun.

Saya menggunakan perpustakaan berikut.

  • QTRsensors:
  • Adafruit_NeoPixel:

#sertakan #sertakan

#define NUM_SENSORS 2 // jumlah sensor yang digunakan#define NUM_SAMPLES_PER_SENSOR 10 // averaging#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 muridNum = 12; warna uint32_t; int kecerahan = 40; byte warna mata; int LR =7; tutup boolean = salah; int cnt = 0;

//Animasi L&R mata hitamint 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 animasiint kelopak mata = 0; int kelopak mataNum[8] = {0, 4, 8, 16, 24, 34, 44, 56}; int kelopak mataLED[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 kelopak mata, int LR) { if (kelopak mata != 8){ //Pewter for(uint16_t i=0; i<led.numPixels(); i++) { led.setPixelColor(i, led. Color(66), 66, 66)); }

//Mata hitam untuk(uint16_t i=0; i led.setPixelColor(blackLED[LR], color); }

//murid untuk(uint16_t i=0; i

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

//kelopak mata untuk(int i=0; i < jumlah kelopak mata[kelopak mata]; i++) { led.setPixelColor(eyelidLED, 0); } } else if (kelopak mata == 8){ led.clear(); } led.show();}

batalkan pengaturan() {

Serial.begin(115200); dipimpin.mulai(); led.setBrightness(kecerahan); // Kecerahan Awal 40 led.show(); // Inisialisasi semua piksel ke 'off' color = led. Color(0, 177, 55); //penundaan warna pupil(100); qtra.read(Nilai sensor); iniSensorValL = sensorValues[0]; iniSensorValR = sensorValues[1]; berkedip(kelopak mata, LR); }

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

double rasioL = (ganda)sensorValL / iniSensorValL;

double rasioR = (ganda)sensorValR / iniSensorValR;

Serial.print(rasioL);

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

if(rasioL > 0.985 && rasioR < 0.985){ //kanan untuk(int i = LR; i < 12; i++){ blink(0, i); penundaan (40); LR = saya; } }else if(rasioL 0.985){ //kiri untuk(int i=LR; i>2; i--){ blink(0, i); penundaan (40); LR = saya; } }else if(lid == false && rasioL < 0.96 && rasioR < 0.96){ //Berkedip close for(int i = 1; i 0.96 && rasioR > 0.96){ //Berkedip terbuka untuk(int i = 8; i > 0; i--){ berkedip(i, LR); penundaan (40); tutup = palsu; } }else if(lid == false && rasioL > 0.96 && rasioR > 0.96) { //normal //cnt++; //kelopak mata = 0; if(LR <= 7){ for(int i=LR; i<=7; i++){ blink(0, i); penundaan (40); LR = saya; } }else { for(int i=LR; i>=7; i--){ blink(0, i); penundaan (40); LR = saya; } } }

//Refresh nilai awal jika (cnt > 10){ iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; } }

Langkah 5: Operasi

Mendeteksi gerakan kiri dan kanan dan kedipan pupil dengan sensor, dan mengontrol LED bola mata.

Direkomendasikan: