جدول المحتويات:
- الخطوة 1: الدستور
- الخطوة 2: كرة العين LED NeoPixel
- الخطوة الثالثة: وحدة الاستشعار
- الخطوة 4: كود اردوينو
- الخطوة 5: العملية
فيديو: تتبع حركة العين باستخدام مستشعر الأشعة تحت الحمراء: 5 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
لقد استخدمت مستشعر الأشعة تحت الحمراء لاستشعار حركات العين والتحكم في مؤشر 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
تم استخدام شريط 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: العملية
كشف الحركة اليمنى واليسرى وميض التلميذ باستخدام المستشعر ، والتحكم في مصباح مقلة العين.
موصى به:
مصباح الأشعة تحت الحمراء (الأشعة تحت الحمراء) الجزء 2: 3 خطوات
مصباح الأشعة تحت الحمراء (الأشعة تحت الحمراء) الجزء -2: مرحبًا يا شباب ، لقد عدت مع الجزء 2 من مصباح الأشعة تحت الحمراء (الأشعة تحت الحمراء) القابل للتوجيه. إذا لم تكن قد رأيت الجزء الأول ، فانقر هنا ، فلنبدأ … دائرة إضاءة بسيطة بالأشعة تحت الحمراء للمساعدة في الرؤية الليلية لكاميرات الدوائر التلفزيونية المغلقة. رؤية ليلية بإضاءة الأشعة تحت الحمراء ، باسم
مصباح الأشعة تحت الحمراء (الأشعة تحت الحمراء) الجزء 1: 5 خطوات
مصباح الأشعة تحت الحمراء (الأشعة تحت الحمراء) الجزء -1: مرحبًا … في هذا الدليل ، سوف نتعلم قليلاً عن الرؤية الليلية ، وطرق مختلفة لتحقيق الرؤية الليلية ودائرة إضاءة بالأشعة تحت الحمراء بسيطة للمساعدة في الرؤية الليلية لكاميرات CCTV. يوضح الشكل الرسم التخطيطي لدائرة IR Illumina
ميزان حرارة يعمل بالأشعة تحت الحمراء لا يلامس من أردوينو - ميزان حرارة قائم على الأشعة تحت الحمراء باستخدام Arduino: 4 خطوات
ميزان حرارة يعمل بالأشعة تحت الحمراء لا يلامس من أردوينو | ميزان حرارة قائم على الأشعة تحت الحمراء باستخدام Arduino: مرحبًا يا رفاق في هذه التعليمات ، سنقوم بعمل مقياس حرارة بدون تلامس باستخدام اردوينو. نظرًا لأن درجة حرارة السائل / الصلب في بعض الأحيان تكون مرتفعة جدًا أو منخفضة ومن ثم يصعب الاتصال بها وقراءتها درجة الحرارة ثم في هذا المشهد
Adafruit SI1145 مستشعر الأشعة فوق البنفسجية / الضوء المرئي / الأشعة تحت الحمراء - اردوينو وشاشات الكريستال السائل: 4 خطوات
Adafruit SI1145 مستشعر الأشعة فوق البنفسجية / الضوء المرئي / الأشعة تحت الحمراء - Arduino و LCD: يستخدم هذا المشروع مستشعر Adafruit SI1145 للأشعة فوق البنفسجية / الضوء المرئي / الأشعة تحت الحمراء لحساب تصنيف الأشعة فوق البنفسجية الحالي. لم يتم استشعار الأشعة فوق البنفسجية مباشرة. بدلاً من ذلك ، يتم حسابها كدالة للضوء المرئي وقراءات الأشعة تحت الحمراء. عندما اختبرت ذلك في الخارج ،
جهاز تحكم عن بعد بالأشعة تحت الحمراء وجهاز استقبال الأشعة تحت الحمراء (TSOP1738) مع Arduino: 10 خطوات
جهاز التحكم عن بعد بالأشعة تحت الحمراء وجهاز استقبال الأشعة تحت الحمراء (TSOP1738) مع Arduino: هذا التوجيه مخصص للمبتدئين في Arduino. هذا أحد مشاريعي السابقة مع Arduino. لقد استمتعت كثيرًا عندما صنعتها وأتمنى أن تنال إعجابك أيضًا. الميزة الأكثر جاذبية لهذا المشروع هي "التحكم اللاسلكي". وهذا هو