Daftar Isi:
- Langkah 1: Konstitusi
- Langkah 2: Bola Mata LED NeoPixel
- Langkah 3: Unit Sensor
- Langkah 4: Kode Arduino
- Langkah 5: Operasi
Video: Pelacakan Gerakan Mata Menggunakan Sensor Inframerah: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:57
Saya menggunakan sensor inframerah untuk merasakan gerakan mata dan mengontrol LED.
Saya membuat bola mata dengan LED Tape NeoPixel.
Langkah 1: 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
Pita LED NeoPixel digunakan. LED adalah 68 unit.
LED dipasang pada mangkuk dengan pita dua sisi dan kabel.
Langkah 3: Unit 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:
Sistem Pelacakan Gerakan Kepala untuk VR: 8 Langkah
Sistem Pelacakan Gerakan Kepala untuk VR: Nama saya Sam KODO, Dalam tutorial ini, saya akan mengajari Anda langkah demi langkah cara menggunakan sensor Arduino IMU untuk membangun sistem pelacakan kepala untuk VR. Dalam proyek ini Anda akan membutuhkan: - Layar LCD HDMI :https://www.amazon.com/Elecrow-Capacitive-interfac…- Sebuah
Pelacakan Gerakan Mata Manusia: 6 Langkah
Pelacakan Gerakan Mata Manusia: Proyek ini bertujuan untuk menangkap gerakan mata manusia, dan menampilkan gerakannya ke satu set lampu LED yang ditempatkan dalam bentuk mata. Jenis proyek ini berpotensi memiliki banyak kegunaan di bidang robotika dan khususnya manusia
Motor Bergerak Dengan Pelacakan Mata: 8 Langkah
Motor Bergerak Dengan Pelacakan Mata: Saat ini, sensor pelacak mata lebih umum di berbagai area tetapi secara komersial lebih dikenal untuk permainan interaktif. Tutorial ini tidak berpura-pura menguraikan sensor karena sangat kompleks dan karena semakin umum digunakan
Kontrol Gerakan Sederhana - Kontrol Mainan RC Anda Dengan Gerakan Lengan Anda: 4 Langkah (dengan Gambar)
Kontrol Gerakan Sederhana - Kontrol Mainan RC Anda Dengan Gerakan Lengan Anda: Selamat datang di 'ible' saya #45. Beberapa waktu yang lalu saya membuat BB8 versi RC yang berfungsi penuh menggunakan bagian Lego Star Wars … https://www.instructables.com/id/Whats-Inside-My-R…Ketika saya melihat betapa kerennya itu Force Band yang dibuat oleh Sphero, saya berpikir: "Ok, saya c
Pelacakan Gerakan 3D Tfcd Melalui Penginderaan Kapasitif dan Output LED: 6 Langkah (dengan Gambar)
Tfcd 3D Motion Tracking Through Capacitive Sensing dan LED Output: Dalam instruksi ini dijelaskan bagaimana gerakan tangan dapat dilacak dalam ruang 3D dengan menggunakan prinsip capacitive sensing. Dengan mengubah jarak antara aluminium foil bermuatan dan tangan Anda, kapasitas kapasitor akan bervariasi