תוכן עניינים:

מעקב אחר תנועות עיניים באמצעות חיישן אינפרא אדום: 5 שלבים
מעקב אחר תנועות עיניים באמצעות חיישן אינפרא אדום: 5 שלבים

וִידֵאוֹ: מעקב אחר תנועות עיניים באמצעות חיישן אינפרא אדום: 5 שלבים

וִידֵאוֹ: מעקב אחר תנועות עיניים באמצעות חיישן אינפרא אדום: 5 שלבים
וִידֵאוֹ: עשר הנשים הכי גבוהות בעולם┃טופטן 2024, נוֹבֶמבֶּר
Anonim
מעקב אחר תנועות עיניים באמצעות חיישן אינפרא אדום
מעקב אחר תנועות עיניים באמצעות חיישן אינפרא אדום

השתמשתי בחיישן אינפרא אדום כדי לחוש תנועות עיניים ולשלוט על ה- LED.

הכנתי גלגלי עיניים עם טייפ LED NeoPixel.

שלב 1: חוקה

חוּקָה
חוּקָה

השתמשתי בשני חיישנים QTR - 1A למעקב עיניים. חישה עם Arduino ושליטה ב- LED.

רכיבים

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • תוסף לתרמיל גב של Adafruit LiIon/LiPoly עבור Pro Trinket/ItsyBitsy
  • סוללת LiPo
  • רצועת NeoPixel
  • חיישן השתקפות QTR-1A

שלב 2: כדור עיניים LED NeoPixel

כדור עיניים LED NeoPixel
כדור עיניים LED NeoPixel
כדור עיניים LED NeoPixel
כדור עיניים LED NeoPixel

משתמשים בקלטת LED מסוג NeoPixel. LED הוא 68 יחידות.

LED קבוע לקערה בעזרת סרט דו צדדי ומחווט.

שלב 3: יחידת חיישן

יחידת חיישן
יחידת חיישן
יחידת חיישן
יחידת חיישן
יחידת חיישן
יחידת חיישן

השתמשתי בשני חיישנים QTR - 1A למעקב עיניים. QTR - 1A מונחים על יריעת פלסטיק במרחק של בערך רוחב העין.

חלק החיישן וחלק הבקרה נקבעו למשקפיים בעזרת קליפ בהתאמה.

שלב 4: קוד ארדואינו

כאשר הקשתית מתקרבת לחיישן אחד, האור המוחזר פוחת וערך החיישן עולה. לעומת זאת, כאשר הקשתית מתרחקת, האור המוחזר גדל וערך החיישנים של מחזיר הצילום יורד.

התנועה הימנית והשמאלית של אישון גלגל העין LED חשה עלייה וירידה של ערך חיישן אחד ושולטת בו. כאשר מהבהבים שני ערכי החיישנים יורדים, כך שאם שני ערכי החיישנים יורדים בו זמנית, העפעפיים של גלגל העין הלד יירדו.

השתמשתי בספרייה הבאה.

  • חיישן QTR:
  • Adafruit_NeoPixel:

#כלול #כלול

#הגדר 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; int pupilNum = 12; צבע uint32_t; בהירות int = 40; byte eyeColor; int LR = 7; מכסה בוליאני = שקר; int cnt = 0;

// עין שחורה אנימציה L&R 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}, {4, 19, 20, 25, 42, 47, 48, 63, 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}, {21, 23, 44, 46, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};

// תלמיד L & R אנימציה תלמיד LED [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); חיישן אינט לא חתום [NUM_SENSORS];

מצמוץ חלל (int עפעף, int LR) {if (עפעף! = 8) {// פיוטר עבור (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); }} אחרת אם (עפעף == 8) {led.clear (); } led.show ();}

הגדרת בטל () {

Serial.begin (115200); led.begin (); led.setBrightness (בהירות); // בהירות ראשונית 40 led.show (); // אתחל את כל הפיקסלים ל'כבוי 'color = led. Color (0, 177, 55); // עיכוב בצבע התלמיד (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; מצמוץ (עפעף, LR); }

לולאת void () {// 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 = i; }} אחרת אם (rasioL 0.985) {// עזבו ל- (int i = LR; i> 2; i-) {blink (0, i); עיכוב (40); LR = i; }} אחרת אם (lid == false && rasioL <0.96 && rasioR <0.96) {// מהבהב קרוב עבור (int i = 1; i 0.96 && rasioR> 0.96) {// מהבהב פתוח עבור (int i = 8; i > 0; i-) {למצמץ (i, LR); עיכוב (40); מכסה = שקר; }} אחרת אם (lid == false && rasioL> 0.96 && rasioR> 0.96) {// רגיל // cnt ++; // עפעף = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {blink (0, i); עיכוב (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {למצמץ (0, i); עיכוב (40); LR = i; }}}

// רענון ערך ראשוני אם (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

שלב 5: פעולה

זיהוי תנועות שמאל וימין והבהוב של האישון בעזרת החיישן ושלט על נורית גלגל העין.

מוּמלָץ: