جدول المحتويات:

تتبع حركة العين باستخدام مستشعر الأشعة تحت الحمراء: 5 خطوات
تتبع حركة العين باستخدام مستشعر الأشعة تحت الحمراء: 5 خطوات

فيديو: تتبع حركة العين باستخدام مستشعر الأشعة تحت الحمراء: 5 خطوات

فيديو: تتبع حركة العين باستخدام مستشعر الأشعة تحت الحمراء: 5 خطوات
فيديو: قم بتنشيط ميزة Sensors off جديدة على هاتف Samsung في اجهزة اندرويد 2024, يوليو
Anonim
تتبع حركة العين باستخدام مستشعر الأشعة تحت الحمراء
تتبع حركة العين باستخدام مستشعر الأشعة تحت الحمراء

لقد استخدمت مستشعر الأشعة تحت الحمراء لاستشعار حركات العين والتحكم في مؤشر LED.

لقد صنعت مقل العيون باستخدام LED Tape NeoPixel.

الخطوة 1: الدستور

دستور
دستور

لقد استخدمت مستشعرين QTR - 1A لتتبع العين. الاستشعار باستخدام Arduino والتحكم في مؤشر LED.

عناصر

  • SparkFun Arduino Pro Mini 328-5 فولت / 16 ميجا هرتز
  • Adafruit LiIon / LiPoly حقيبة الظهر الإضافية لـ Pro Trinket / ItsyBitsy
  • بطارية ليبو
  • شريط NeoPixel
  • مستشعر الانعكاس QTR-1A

الخطوة 2: كرة العين LED NeoPixel

كرة العين LED من NeoPixel
كرة العين LED من NeoPixel
كرة العين LED من NeoPixel
كرة العين LED من NeoPixel

تم استخدام شريط NeoPixel LED. الصمام 68 وحدة.

تم تثبيت LED على الوعاء بشريط على الوجهين وسلك.

الخطوة الثالثة: وحدة الاستشعار

وحدة الاستشعار
وحدة الاستشعار
وحدة الاستشعار
وحدة الاستشعار
وحدة الاستشعار
وحدة الاستشعار

لقد استخدمت مستشعرين QTR - 1A لتتبع العين. يتم وضع QTR - 1A على لوح بلاستيكي على مسافة عرض العين تقريبًا.

تم تثبيت جزء المستشعر وجزء وحدة التحكم الدقيقة على النظارات بمشبك على التوالي.

الخطوة 4: كود اردوينو

عندما تقترب القزحية من مستشعر واحد ، يقل الضوء المنعكس وتزداد قيمة المستشعر. على العكس من ذلك ، عندما تتحرك القزحية بعيدًا ، يزداد الضوء المنعكس وتنخفض قيمة مستشعر عاكس الصورة.

تستشعر الحركة اليمنى واليسرى لتلميذ مقلة العين LED زيادة ونقصان قيمة مستشعر واحدة وتتحكم فيها. عند الوميض ، تنخفض قيم المستشعر ، لذلك إذا انخفضت قيمتي المستشعر في وقت واحد ، فإن جفون مقلة العين LED ستنخفض.

لقد استخدمت المكتبة التالية.

  • QTRsensors:
  • Adafruit_NeoPixel:

# تضمين # تضمين

#define NUM_SENSORS 2 // عدد المستشعرات المستخدمة # حدد NUM_SAMPLES_PER_SENSOR 10 // متوسط # حدد 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 ؛ عدد التلاميذ الداخليين = 12 ؛ لون uint32_t ؛ سطوع int = 40 ؛ بايت العين كثافة العمليات LR = 7 ؛ غطاء منطقي = خطأ ؛ int cnt = 0 ؛

// حركة العين السوداء L&R animint 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} ، {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}} ؛

// وميض الرسوم المتحركة جفن = 0 ؛ int eyelidNum [8] = {0، 4، 8، 16، 24، 34، 44، 56} ؛ int eyelidLED [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 eyelid، int LR) {if (eyelid! = 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 <eyelidNum [eyelid]؛ i ++) {led.setPixelColor (eyelidLED ، 0)؛ }} else if (eyelid == 8) {led.clear ()؛ } led.show () ؛}

الإعداد باطل() {

Serial.begin (115200) ؛ led.begin () ، led.setBrightness (سطوع) ؛ // السطوع الأولي 40 led.show () ؛ // تهيئة جميع وحدات البكسل على "إيقاف تشغيل" اللون = led. Color (0 ، 177 ، 55) ؛ // تأخير لون التلميذ (100) ؛ qtra.read (sensorValues) ؛ iniSensorValL = sensorValues [0] ، iniSensorValR = sensorValues [1] ، طرفة عين (جفن ، LR) ؛ }

الحلقة الفارغة () {// QTR - 1A قيمة المستشعر qtra.read (sensorValues) ؛ sensorValL = sensorValues [0] ، sensorValR = sensorValues [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 ++) {blink (0، i)؛ تأخير (40) ؛ LR = أنا ؛ }} else if (rasioL 0.985) {// left for (int i = LR؛ i> 2؛ i -) {blink (0، i)؛ تأخير (40) ؛ LR = أنا ؛ }} else if (lid == false && rasioL <0.96 && rasioR <0.96) {// وميض قريب من أجل (int i = 1؛ i 0.96 && rasioR> 0.96) {// وميض مفتوح لـ (int i = 8؛ i > 0 ؛ i -) {blink (i، LR) ؛ تأخير (40) ؛ غطاء = خطأ ؛ }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++؛ // جفن = 0 ؛ إذا (LR <= 7) {for (int i = LR؛ i <= 7؛ i ++) {blink (0، i) ؛ تأخير (40) ؛ LR = أنا ؛ }} else {for (int i = LR؛ i> = 7؛ i -) {blink (0، i)؛ تأخير (40) ؛ LR = أنا ؛ }}}

// تحديث القيمة الأولية إذا (cnt> 10) {iniSensorValL = sensorValL ؛ iniSensorValR = sensorValR ؛ cnt = 0 ؛ }}

الخطوة 5: العملية

كشف الحركة اليمنى واليسرى وميض التلميذ باستخدام المستشعر ، والتحكم في مصباح مقلة العين.

موصى به: