Isi kandungan:
- Langkah 1: Perlembagaan
- Langkah 2: Bola Mata LED NeoPixel
- Langkah 3: Unit Sensor
- Langkah 4: Kod Arduino
- Langkah 5: Operasi
Video: Penjejakan Gerak Mata Menggunakan Sensor Inframerah: 5 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
Saya menggunakan sensor inframerah untuk merasakan pergerakan mata dan mengawal LED.
Saya membuat bola mata dengan LED Tape NeoPixel.
Langkah 1: Perlembagaan
Saya menggunakan dua sensor QTR - 1A untuk penjejakan mata. Sensing dengan Arduino dan mengawal LED.
komponen
- SparkFun Arduino Pro Mini 328 - 5V / 16MHz
- Adafruit LiIon / LiPoly Backpack Add-On untuk Pro Trinket / ItsyBitsy
- Bateri LiPo
- Jalur NeoPixel
- Sensor Pantulan QTR-1A
Langkah 2: Bola Mata LED NeoPixel
Pita LED NeoPixel digunakan. LED ialah 68 unit.
LED dipasang ke mangkuk dengan pita dua sisi dan berwayar.
Langkah 3: Unit Sensor
Saya menggunakan dua sensor QTR - 1A untuk penjejakan mata. QTR - 1A diletakkan di atas kepingan plastik pada jarak kira-kira lebar mata.
Bahagian sensor dan bahagian mikrokontroler dipasang pada cermin mata masing-masing dengan klip.
Langkah 4: Kod Arduino
Apabila iris mendekati satu sensor, cahaya yang dipantulkan berkurang dan nilai sensor meningkat. Sebaliknya, ketika iris menjauh, cahaya yang dipantulkan meningkat dan nilai sensor reflektor foto menurun.
Pergerakan kanan dan kiri murid bola mata LED merasakan kenaikan dan penurunan satu nilai sensor dan mengawalnya. Ketika berkelip, kedua-dua nilai sensor menurun, jadi jika kedua-dua nilai sensor menurun secara bersamaan, kelopak mata bola mata LED akan turun.
Saya menggunakan perpustakaan berikut.
- Sensor QTR:
- Adafruit_NeoPixel:
#sertakan #sertakan
#tentukan NUM_SENSORS 2 // bilangan sensor yang digunakan # tentukan NUM_SAMPLES_PER_SENSOR 10 // rata-rata # tentukan 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; kecerahan int = 40; mata byteColor; int LR = 7; tudung boolean = palsu; int cnt = 0;
// Animasi L&R mata hitam berwarna hitamLED [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, 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}};
// murid animasi L&R muridLED [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}};
// Kelopak mata animasi berkelip = 0; int eyelidNum [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 ((tanda tidak ditandatangani ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); Nilai sensor int yang tidak ditandatangani [NUM_SENSORS];
sekelip mata (int kelopak mata, int LR) {if (kelopak mata! = 8) {// Pewter untuk (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 (muridLED [LR] , led. Color (0, 0, 66)); }
// kelopak mata untuk (int i = 0; i <eyelidNum [kelopak mata]; i ++) {led.setPixelColor (kelopak mataLED , 0); }} lain jika (kelopak mata == 8) {led.clear (); } led.show ();}
batal persediaan () {
Serial.begin (115200); led.begin (); led.setBrightness (kecerahan); // Kecerahan Awal 40 led.show (); // Memulakan semua piksel ke 'off' color = led. Color (0, 177, 55); // kelewatan warna murid (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; berkelip (kelopak mata, LR); }
gelung kosong () {// QTR - nilai sensor 1A qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
double rasioL = (double) sensorValL / iniSensorValL;
double rasioR = (double) sensorValR / iniSensorValR;
Serial.print (rasioL);
Cetakan bersiri (""); Serial.println (rasioR);
jika (rasioL> 0.985 && rasioR <0.985) {// betul untuk (int i = LR; i <12; i ++) {berkedip (0, i); kelewatan (40); LR = i; }} lain jika (rasioL 0.985) {// kiri untuk (int i = LR; i> 2; i -) {berkedip (0, i); kelewatan (40); LR = i; }} lain jika (lid == false && rasioL <0.96 && rasioR <0.96) {// Berkedip dekat untuk (int i = 1; i 0.96 && rasioR> 0.96) {// Berkedip terbuka untuk (int i = 8; i > 0; i -) {berkelip (i, LR); kelewatan (40); tudung = palsu; }} lain jika (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // kelopak mata = 0; jika (LR <= 7) {untuk (int i = LR; i <= 7; i ++) {berkelip (0, i); kelewatan (40); LR = i; }} lain {untuk (int i = LR; i> = 7; i -) {berkelip (0, i); kelewatan (40); LR = i; }}}
// Nilai awal disegarkan jika (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Langkah 5: Operasi
Kesan pergerakan kiri dan kanan dan sekelip mata murid dengan sensor, dan kawal LED bola mata.
Disyorkan:
Penjejakan Gerak Menggunakan MPU-6000 dan Foton Zarah: 4 Langkah
Penjejakan Gerak Menggunakan MPU-6000 dan Foton Partikel: MPU-6000 adalah Sensor Pengesanan Gerak 6-Paksi yang mempunyai akselerometer 3-Paksi dan giroskop 3-Paksi yang tertanam di dalamnya. Sensor ini mampu mengesan kedudukan dan lokasi objek dengan tepat dalam satah 3 dimensi. Ia boleh digunakan
Penjejakan Gerak Menggunakan MPU-6000 dan Arduino Nano: 4 Langkah
Motion Tracking Menggunakan MPU-6000 dan Arduino Nano: MPU-6000 adalah Sensor Motion Tracking 6-Axis yang mempunyai accelerometer 3-Axis dan giroskop 3-Axis yang tertanam di dalamnya. Sensor ini mampu mengesan kedudukan dan lokasi objek dengan tepat dalam satah 3 dimensi. Ia boleh digunakan
Penjejakan Gerak Menggunakan MPU-6000 dan Raspberry Pi: 4 Langkah
Motion Tracking Menggunakan MPU-6000 dan Raspberry Pi: MPU-6000 adalah Sensor Motion Tracking 6-Axis yang mempunyai accelerometer 3-Axis dan giroskop 3-Axis yang tertanam di dalamnya. Sensor ini mampu mengesan kedudukan dan lokasi objek dengan tepat dalam satah 3 dimensi. Ia boleh digunakan
Anjing Penjejakan Inframerah: 3 Langkah
Anjing Penjejakan Inframerah: Suatu hari saya menjumpai sebuah video yang menarik di: http://arduinotr.com/cisim/?fbclid=IwAR22rYmiRQQJ0nqAusOLhBj_778gROseej6TUonvbOnAd65A-sl_wnyqrJQ&tdsourcetag=s_mengakui ini benar-benar memanfaatkan … sungguh
Outlet Dikawal Gerak - Dari Lampu Sensor Gerak: 6 Langkah
Outlet Dikawal Gerakan - Dari Lampu Sensor Gerak: Bayangkan anda adalah tipu muslihat atau pergi ke rumah paling menakutkan di blok itu. Setelah melewati semua hantu, hantu dan kubur anda akhirnya sampai ke jalan terakhir. Anda dapat melihat gula-gula dalam mangkuk di hadapan anda! Tetapi tiba-tiba gho