فهرست مطالب:

ردیابی حرکت چشم با استفاده از سنسور مادون قرمز: 5 مرحله
ردیابی حرکت چشم با استفاده از سنسور مادون قرمز: 5 مرحله

تصویری: ردیابی حرکت چشم با استفاده از سنسور مادون قرمز: 5 مرحله

تصویری: ردیابی حرکت چشم با استفاده از سنسور مادون قرمز: 5 مرحله
تصویری: نه کاری که نمیدونستی گوشیت انجام میده | 9 کاربرد مخفی گوشی 2024, نوامبر
Anonim
ردیابی حرکت چشم با استفاده از سنسور مادون قرمز
ردیابی حرکت چشم با استفاده از سنسور مادون قرمز

من از حسگر مادون قرمز برای تشخیص حرکات چشم و کنترل LED استفاده کردم.

من با LED Tape NeoPixel کره چشم درست کردم.

مرحله 1: قانون اساسی

قانون اساسي
قانون اساسي

من از دو سنسور QTR - 1A برای ردیابی چشم استفاده کردم. حس کردن با آردوینو و کنترل LED

اجزاء

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • افزودنی کوله پشتی Adafruit LiIon/LiPoly برای Pro Trinket/ItsyBitsy
  • باتری LiPo
  • نوار NeoPixel
  • سنسور بازتاب QTR-1A

مرحله 2: NeoPixel LED Eye Ball

توپ چشم NeoPixel LED
توپ چشم NeoPixel LED
توپ چشم NeoPixel LED
توپ چشم NeoPixel LED

از نوار LED NeoPixel استفاده می شود. LED 68 واحد است.

LED با نوار دو طرفه و با سیم به کاسه ثابت می شود.

مرحله 3: واحد سنسور

واحد سنسور
واحد سنسور
واحد سنسور
واحد سنسور
واحد سنسور
واحد سنسور

من از دو سنسور QTR - 1A برای ردیابی چشم استفاده کردم. QTR - 1A بر روی یک ورق پلاستیکی در فاصله تقریباً عرض چشم قرار می گیرد.

قسمت حسگر و قسمت میکروکنترلر به ترتیب با گیره بر روی عینک ثابت شدند.

مرحله 4: کد آردوینو

وقتی عنبیه به یک سنسور نزدیک می شود ، نور منعکس شده کاهش می یابد و مقدار سنسور افزایش می یابد. برعکس ، وقتی عنبیه دور می شود ، نور منعکس شده افزایش می یابد و مقدار سنسور بازتابنده عکس کاهش می یابد.

حرکت راست و چپ مردمک کره چشم LED افزایش و کاهش یک مقدار سنسور را حس می کند و آن را کنترل می کند. هنگام چشمک زدن ، هر دو مقدار سنسور کاهش می یابد ، بنابراین اگر دو مقدار سنسور به طور همزمان کاهش یابد ، پلک های کره چشم LED پایین می آید.

من از کتابخانه زیر استفاده کردم.

  • QTRsensors:
  • Adafruit_NeoPixel:

#شامل #شامل شود

#تعریف NUM_SENSORS 2 // تعداد حسگرهای مورد استفاده#تعریف NUM_SAMPLES_PER_SENSOR 10 // به طور متوسط#تعریف EMITTER_PIN QTR_NO_EMITTER_PIN

int iniSensorValL ، sensorValL ؛ int iniSensorValR ، sensorValR ؛ #تعریف PIN A3 Adafruit_NeoPixel led = Adafruit_NeoPixel (68 ، PIN ، NEO_GRB + NEO_KHZ800) ؛ int blackNum = 24 ؛ int pupilNum = 12 ؛ رنگ uint32_t ؛ روشنایی int = 40 ؛ بایت eyeColor؛ int LR = 7 ؛ درب بولی = غلط ؛ int cnt = 0؛

// انیمیشن سیاه چشم L&R سیاه LED [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}} ؛

// انیمیشن دانش آموز L&R شاگردLED [15] [12] = {{33 ، 34 ، 68 ، 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} ؛ پلک داخلی [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 ((char charged ) {0 ، 1} ، NUM_SENSORS ، NUM_SAMPLES_PER_SENSOR ، EMITTER_PIN) ؛ حسگر int بدون ارزش

چشمک زدن خالی (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 (سیاهLED [LR] ، رنگ) ؛}

// دانش آموز برای (uint16_t i = 0 ؛ i

led.setPixelColor (دانش آموز LED [LR] ، led. Color (0 ، 0 ، 66)) ؛ }

// پلک برای (int i = 0 ؛ i <eyelidNum [پلک] ؛ i ++) {led.setPixelColor (پلک LED ، 0) ؛ }} else if (پلک == 8) {led.clear ()؛ } led.show ()؛}

void setup () {

Serial.begin (115200) ؛ led.begin ()؛ led.setBrightness (روشنایی) ؛ // روشنایی اولیه 40 led.show ()؛ // همه پیکسل ها را به رنگ "off" = = led. Color (0 ، 177 ، 55)؛ // تاخیر رنگ مردمک (100) ؛ qtra.read (sensorValues) ؛ iniSensorValL = sensorValues [0]؛ iniSensorValR = sensorValues [1] ؛ پلک زدن (پلک ، LR) ؛ }

void loop () {// QTR - 1A مقدار حسگر qtra.read (sensorValues) ؛ sensorValL = sensorValues [0]؛ sensorValR = sensorValues [1]؛

double rasioL = (double) sensorValL / iniSensorValL؛

double rasioR = (double) sensorValR / iniSensorValR؛

Serial.print (rasioL) ؛

Serial.print ("")؛ Serial.println (rasioR)؛

if (rasioL> 0.985 && rasioR <0.985) {// مناسب برای (int i = LR؛ i <12؛ i ++) {چشمک زدن (0، i)؛ تأخیر (40) ؛ LR = i ؛ }} else if (rasioL 0.985) {// برای (int i = LR؛ i> 2؛ i-) {چشمک (0، i)؛ تأخیر (40) ؛ LR = i ؛ }} 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 ، LR) ؛ تأخیر (40) ؛ lid = false؛ }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// معمولی // cnt ++؛ // پلک = 0 ؛ if (LR <= 7) {for (int i = LR؛ i <= 7؛ i ++) {چشمک زدن (0، i)؛ تأخیر (40) ؛ LR = i ؛ }} else {for (int i = LR؛ i> = 7؛ i-) {چشمک زدن (0، i)؛ تأخیر (40) ؛ LR = i ؛ }}}

// تازه کردن مقدار اولیه if (cnt> 10) {iniSensorValL = sensorValL؛ iniSensorValR = sensorValR؛ cnt = 0؛ }}

مرحله 5: عملیات

حرکت چپ و راست را تشخیص داده و با حسگر چشمک بزنید و LED چشم را کنترل کنید.

توصیه شده: