תוכן עניינים:
וִידֵאוֹ: מעקב אחר תנועות עיניים באמצעות חיישן אינפרא אדום: 5 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:16
השתמשתי בחיישן אינפרא אדום כדי לחוש תנועות עיניים ולשלוט על ה- 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 הוא 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: פעולה
זיהוי תנועות שמאל וימין והבהוב של האישון בעזרת החיישן ושלט על נורית גלגל העין.
מוּמלָץ:
מערכת מעקב אחר תנועות ראש ל- VR: 8 שלבים
מערכת מעקב אחר תנועות ראש ל- VR: שמי סם KODO, במדריך זה אלמד אותך צעד אחר צעד כיצד להשתמש בחיישני IMU של Arduino לבניית מערכת מעקב ראש ל- VR. בפרויקט זה תצטרך: - תצוגת LCD HDMI : https: //www.amazon.com/Elecrow-Capacitive-interfac
מעקב אחר תנועות באמצעות MPU-6000 ופוטון חלקיקים: 4 שלבים
מעקב אחר תנועות באמצעות MPU-6000 וחלקיק פוטון: MPU-6000 הוא חיישן מעקב אחר תנועה בעל 6 צירים הכולל מד תאוצה 3 צירים וג'ירוסקופ 3 צירים. חיישן זה מסוגל לבצע מעקב יעיל אחר המיקום והמיקום המדויק של אובייקט במישור התלת ממדי. ניתן להעסיק אותו
מעקב אחר תנועות עיניים אנושיות: 6 שלבים
מעקב אחר תנועות עיניים אנושיות: פרויקט זה נועד ללכוד את תנועת העין האנושית, ומציג את תנועתו על קבוצה של נורות LED הממוקמות בצורת עין. סוג זה של פרויקט עשוי להיות בעל שימושים רבים בתחום הרובוטיקה ובמיוחד חומא
מעקב אחר תנועות באמצעות MPU-6000 ו- Arduino Nano: 4 שלבים
מעקב אחר תנועות באמצעות MPU-6000 ו- Arduino Nano: MPU-6000 הוא חיישן מעקב תנועה בעל 6 צירים הכולל מד תאוצה 3 צירים וג'ירוסקופ 3 צירים. חיישן זה מסוגל לבצע מעקב יעיל אחר המיקום והמיקום המדויק של אובייקט במישור התלת ממדי. ניתן להעסיק אותו
מעקב אחר תנועות באמצעות MPU-6000 ו- Raspberry Pi: 4 שלבים
מעקב אחר תנועות באמצעות MPU-6000 ו- Raspberry Pi: MPU-6000 הוא חיישן מעקב תנועה בעל 6 צירים הכולל מד תאוצה 3 צירים וג'ירוסקופ 3 צירים. חיישן זה מסוגל לבצע מעקב יעיל אחר המיקום והמיקום המדויק של אובייקט במישור התלת ממדי. ניתן להעסיק אותו