فهرست مطالب:

پیاده سازی بدون انسداد APDS9960 سنسور حرکت: 5 مرحله
پیاده سازی بدون انسداد APDS9960 سنسور حرکت: 5 مرحله

تصویری: پیاده سازی بدون انسداد APDS9960 سنسور حرکت: 5 مرحله

تصویری: پیاده سازی بدون انسداد APDS9960 سنسور حرکت: 5 مرحله
تصویری: آنژیوی طبیعی برای باز کردن گرفتگی عروق قلب | رفع چربی دور قلب 2024, جولای
Anonim
پیاده سازی سنسور حرکت بدون انسداد APDS9960
پیاده سازی سنسور حرکت بدون انسداد APDS9960
پیاده سازی سنسور حرکت بدون انسداد APDS9960
پیاده سازی سنسور حرکت بدون انسداد APDS9960
پیاده سازی سنسور حرکت بدون انسداد APDS9960
پیاده سازی سنسور حرکت بدون انسداد APDS9960

مقدمه

این دستورالعمل نحوه ایجاد پیاده سازی غیر مسدود کننده APDS9960 Gesture Sensor با استفاده از SparkFun_APDS-9960_Sensor_Arduino_Library را توضیح می دهد.

معرفی

بنابراین احتمالاً از خود می پرسید که عدم انسداد چیست؟ یا حتی مسدود کردن در این مورد؟

مهمتر اینکه چرا مهم است که هیچ چیزی به درستی مسدود نشود؟

بسیار خوب ، بنابراین هنگامی که یک ریزپردازنده برنامه ای را اجرا می کند ، به طور متوالی خطوط کد را اجرا می کند و با انجام این کار ، توابع را با توجه به ترتیبی که شما آنها را نوشته اید فرا می خواند و از آنها برمی گردد.

یک تماس مسدود کننده فقط یک تماس با هر نوع عملکردی است که باعث توقف اجرا می شود ، به این معنی که یک فراخوانی تابع در جایی که تماس گیرنده اجرا را از سر نمی گیرد تا عملکرد فراخوانی شده به پایان برسد.

خب پس این چرا مهم است؟

در صورتی که برخی از کدها را نوشته اید که باید به طور مرتب بسیاری از عملکردها را به طور متوالی اجرا کند ، مانند خواندن دما ، خواندن یک دکمه و به روز رسانی صفحه نمایش ، اگر کد به روزرسانی صفحه نمایش یک تماس مسدود کننده باشد ، سیستم شما پاسخگو نخواهد بود. دکمه را فشار می دهد و درجه حرارت را تغییر می دهد ، زیرا پردازنده تمام وقت خود را صرف انتظار برای به روزرسانی صفحه نمایش می کند و وضعیت دکمه یا آخرین درجه حرارت را نمی خواند.

من به نوبه خود می خواهم یک دستگاه رومیزی IoT با قابلیت WiFi MQTT ایجاد کنم که مقادیر دما و رطوبت محلی و از راه دور ، سطوح نور محیط ، فشار فشارسنجی ، زمان را پیگیری می کند ، همه این پارامترها را روی LCD نمایش می دهد ، به uSD وارد می شود. کارت را در زمان واقعی بخوانید ، ورودی های دکمه را بخوانید ، روی LED های خروجی بنویسید و حرکات را کنترل کنید تا بتوانید موارد زیرساخت اینترنت اشیاء خود را کنترل کنید و همه آنها توسط ESP8266-12 کنترل شوند.

متأسفانه تنها دو منبع از کتابخانه APDS9960 که می توانستم پیدا کنم کتابخانه های SparkFun و AdaFruit بودند که هر دو از کد برنامه ای از Avago (سازنده ADPS9960) خارج شده و دارای یک تماس به نام "readGesture" هستند که مدتی را شامل می شود (1) {} ؛ حلقه ای که در پروژه بالا استفاده می شود باعث می شود تا ESP8266-12E هر زمان که حسگر ADPS9960 اشباع می شود بازنشانی شود (یعنی زمانی که یک جسم در مجاورت خود باقی می ماند یا منبع IR دیگری که سنسور را روشن می کند).

در نتیجه برای برطرف کردن این رفتار ، من انتخاب کردم که پردازش Gestures را به یک پردازنده دوم منتقل کنم که در آن ESP8266-12E به عنوان میکروکنترلر اصلی و این سیستم برده ، همانطور که در تصاویر 1 و 2 بالا نشان داده شده است ، نمودارهای System Overview و System Composition به ترتیب نشان داده شد. به عکس 3 نمونه اولیه مدار را نشان می دهد.

به منظور محدود کردن تغییرات لازم برای ایجاد کد فعلی ، من یک کلاس بسته بندی/کتابخانه ای نوشتم که با خیال "APDS9960_NonBlocking" نامگذاری شده است.

آنچه در زیر می آید توضیح مفصلی از راه حل غیر مسدود کننده است.

به چه قطعاتی نیاز دارم؟

اگر می خواهید راه حل I2C را که با کتابخانه APDS9960_NonBlocking کار می کند بسازید ، به قسمتهای زیر نیاز دارید.

  1. 1 تخفیف ATMega328P در اینجا
  2. 1 تخفیف PCF8574P در اینجا
  3. 6 مقاومت 10K در اینجا
  4. 4 مقاومت 1K در اینجا
  5. 1 عدد دیود 1N914 در اینجا
  6. 1 تخفیف PN2222 NPN Transistor در اینجا
  7. 1 عدد کریستال 16 مگاهرتز در اینجا
  8. 2 خازن 0.1uF در اینجا
  9. 1 خازن الکترولیتی 1000uF اینجا
  10. 1 خازن الکترولیتی 10uF در اینجا
  11. 2 خازن 22pF در اینجا

اگر می خواهید خروجی سنسور حرکت را از طریق رابط موازی بخوانید ، می توانید مقاومت PCF8574P و سه مقاومت 10K را رها کنید.

به چه نرم افزاری نیاز دارم؟

آردوینو IDE 1.6.9

به چه مهارتهایی نیاز دارم؟

برای راه اندازی سیستم ، از کد منبع (ارائه شده) استفاده کنید و مدارهای لازم را ایجاد کنید ، به موارد زیر نیاز دارید.

  • حداقل تسلط بر لوازم الکترونیکی ،
  • آشنایی با آردوینو و IDE آن ،
  • درک نحوه برنامه نویسی Arduino جاسازی شده (به دستورالعمل برنامه نویسی ATTiny85 ، ATTiny84 و ATMega328P: Arduino به عنوان ISP مراجعه کنید)
  • کمی صبر.

موضوعات تحت پوشش

  • مروری مختصر بر مدار
  • مروری کوتاه بر نرم افزار
  • آزمایش دستگاه تشخیص حرکات APDS9960
  • نتیجه
  • منابع

مرحله 1: مرور کلی مدار

نمای کلی مدار
نمای کلی مدار

مدار به دو بخش تقسیم می شود.

  • اولین مورد ، سریال I2C به موازی است که از طریق مقاومت های R8… 10 و IC1 انجام می شود. در اینجا R8… R10 آدرس I2C را برای تراشه 8 بیتی ورودی/خروجی IC1 و NXP PCF8574A تنظیم کرد. محدوده آدرس معتبر این دستگاه به ترتیب 0x38… 0x3F است. در مثال نرم افزار I2C ارائه شده "I2C_APDS9960_TEST.ino" "تعریف GESTURE_SENSOR_I2C_ADDRESS" باید متناسب با این محدوده آدرس تغییر کند.
  • همه اجزای دیگر یک Arduino Uno تعبیه شده در برده را تشکیل می دهند و عملکردهای زیر را دارند.

    • R1 ، T1 ، R2 و D1 ورودی بازنشانی دستگاه برده را ارائه می دهند. در اینجا یک پالس بالا فعال در IC1 - P7 U1 را مجبور به تنظیم مجدد می کند.
    • R3 ، R4 ، مقاومتهای محدودکننده جریان برای دستگاه جاسازی شده هستند که خطوط TX/RX را برنامه ریزی می کند.
    • C5 و R7 به Arduino IDE اجازه می دهد تا U1 را به طور خودکار از طریق یک پالس در خط DTR دستگاه متصل FTDI برنامه ریزی کند.
    • R5 و R6 مقاومتهای I2C برای APDS9960 هستند که C6 جداسازی راه آهن محلی را فراهم می کند.
    • U1 ، C1 ، C2 و Q1 به ترتیب Arduino Uno تعبیه شده و ساعت آن را تشکیل می دهند.
    • سرانجام C3 و C4 جداسازی راه آهن محلی را برای U1 ارائه می دهند.

مرحله 2: مرور نرم افزار

مروری بر نرم افزار
مروری بر نرم افزار
مروری بر نرم افزار
مروری بر نرم افزار
مروری بر نرم افزار
مروری بر نرم افزار

مقدمه

برای کامپایل موفقیت آمیز این کد منبع ، برای برنامه ریزی Arduino Uno U1 تعبیه شده به کتابخانه های اضافی زیر نیاز دارید.

SparkFun_APDS9960.h

  • نویسنده: استیو کوین
  • هدف: این نسخه انشعابی از SparkFun APDS9960 Sensor است که از jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library چنگال زده شده است. برای اصلاح اشکال زدایی چند تغییر دارد و دارای یک آشکارساز حساسیت زدا برای کاهش تحریکات جعلی است.
  • از:

APDS9960_NonBlocking.h

  • نویسنده: استیو کوین
  • هدف: یک رابط تمیز برای جاسازی این پیاده سازی غیر مسدود کننده APDS9960 Gesture Sensor در کد Arduino شما ارائه می دهد.
  • از:

اگر با نحوه دستیابی به این هدف آشنا نیستید ، نحوه برنامه نویسی میکروکنترلر Arduino Uno (ATMega328P) را در زیر مشاهده کنید.

برنامه ریزی ATTINY85 ، ATTINY84 و ATMEGA328P: ARDUINO AS ISP

بررسی عملکردی

میکروکنترلر برده جاسازی شده ATMega328P از خط INT از ADPS9960 نظرسنجی می کند. وقتی این خط پایین می آید ، میکروکنترلر ثبت های ADPS9960 را می خواند و تعیین می کند که آیا یک حرکت معتبر وجود داشته است. اگر یک حرکت معتبر تشخیص داده شده باشد ، کد این حرکت 0x0… 0x6 ، 0xF روی بندر B قرار می گیرد و 'nGestureAvailable' کم است.

وقتی دستگاه اصلی "nGestureAvailable" را فعال می بیند ، مقدار پورت B را می خواند و سپس nGestureClear را موقتاً پایین می آورد تا دریافت داده ها را تأیید کند.

سپس دستگاه برده 'nGestureAvailable' را بالا اعلام می کند و داده ها را در بندر B. پاک می کند. عکس 5 بالا نشان می دهد که از یک تجزیه و تحلیل منطقی در طول یک چرخه تشخیص/خواندن کامل گرفته شده است.

مرور کلی کد

تصویر 1 در بالا نحوه عملکرد نرم افزار در U1 برده تعبیه شده Arduino Uno ، همراه با تصویر 2 نحوه عملکرد دو وظیفه پس زمینه/پیش زمینه را توضیح می دهد. تصویر 3 یک بخش کد است که نحوه استفاده از کتابخانه APDS9960_NonBlockingll را شرح می دهد. تصویر 4 نقشه ای بین پین های دیجیتال Arduino Uno و پین های سخت افزاری واقعی در ATMega328P ارائه می دهد.

پس از بازنشانی میکروکنترلر برده جاسازی شده ، APDS9960 را فعال می کند و به تشخیص حرکت اجازه می دهد تا خروجی INT خود را فعال کرده و ورودی/خروجی آن را پیکربندی کند ، و روال سرویس وقفه (ISR) "GESTURE_CLEAR ()" را به وقفه بردار INT0 وصل می کند (پین دیجیتال 2 ، پین IC سخت افزار 4) ، پیکربندی آن برای یک ماشه لبه در حال سقوط. این ورودی nGestureClear را از دستگاه اصلی تشکیل می دهد.

پین خروجی قطع "INT" از APDS9960 به پین دیجیتال 4 ، سخت افزار IC Pin 6 متصل است که به عنوان ورودی U1 پیکربندی شده است.

خط سیگنال 'nGestureAvailable' در پین دیجیتالی 7 ، سخت افزار IC 13 پین به عنوان خروجی پیکربندی شده و در حالت غیر فعال (تنظیم نشده) تنظیم شده است.

در نهایت بیت های بندر B 0 0 … 3 به ترتیب به عنوان خروجی پیکربندی شده و کم تنظیم می شوند. اینها بخش کوچکی از داده ها را تشکیل می دهند که نشان دهنده انواع مختلف حرکات تشخیص داده شده است. هیچ = 0x0 ، خطا = 0xF ، بالا = 0x1 ، پایین = 0x2 ، چپ = 0x3 ، راست = 0x4 ، نزدیک = 0x5 و دور = 0x6.

وظیفه پس زمینه "حلقه" برنامه ریزی شده است که به طور مداوم از طریق خواندن پین دیجیتالی خروجی وقفه INT را از طریق APDS9960 بررسی می کند. هنگامی که خروجی INT از APDS9960 کم فعال می شود ، نشان می دهد که حسگر فعال شده است ، میکروکنترلر سعی می کند با تماس "readGesture" هر گونه ژست را تفسیر کند () 'with it while (1) {}؛ حلقه بی پایان

اگر یک حرکت معتبر تشخیص داده شود ، این مقدار در پورت B نوشته می شود ، خروجی 'nGestureAvailable' تأیید می شود و سمافور بولی 'bGestureAvailable' تنظیم می شود و از ورود هرگونه حرکت دیگر جلوگیری می کند.

هنگامی که استاد خروجی فعال "nGestureAvailable" را تشخیص می دهد ، این مقدار جدید را می خواند و "nGestureClear" را کم فعال می کند. این لبه در حال سقوط باعث می شود که کار پیش زمینه "ISR GESTURE_CLEAR ()" برای تعلیق اجرای وظیفه پس زمینه "حلقه" ، پاکسازی پورت B ، خروجی "bGestureAvailable" و خروجی "nGestureAvailable" برنامه ریزی شود.

وظیفه پیش زمینه "GESTURE_CLEAR ()" اکنون معلق است و کار پس زمینه "حلقه" دوباره برنامه ریزی شده است. اکنون می توان حرکات بیشتری را از APDS9960 حس کرد.

با استفاده از وقفه های پیش زمینه/وظایف پس زمینه به این ترتیب حلقه بی نهایت بالقوه در "readGesture ()" دستگاه برده بر عملکرد دستگاه اصلی تأثیر نمی گذارد و مانع اجرای دستگاه برده نیز نمی شود. این اساس یک سیستم عامل بسیار ساده زمان واقعی (RTOS) را تشکیل می دهد.

توجه: پیشوند 'n' به معنای فعال کم است یا مانند 'nGestureAvailable' تأیید شده است

مرحله 3: آزمایش دستگاه تشخیص حرکات بدون انسداد APDS9960

آزمایش دستگاه تشخیص حرکات بدون انسداد APDS9960
آزمایش دستگاه تشخیص حرکات بدون انسداد APDS9960
آزمایش دستگاه تشخیص حرکت بدون انسداد APDS9960
آزمایش دستگاه تشخیص حرکت بدون انسداد APDS9960
آزمایش دستگاه تشخیص حرکت بدون انسداد APDS9960
آزمایش دستگاه تشخیص حرکت بدون انسداد APDS9960
آزمایش دستگاه تشخیص حرکت بدون انسداد APDS9960
آزمایش دستگاه تشخیص حرکت بدون انسداد APDS9960

مقدمه

حتی اگر ماژول APDS9960 با +5v عرضه شود ، از تنظیم کننده داخلی +3v3 استفاده می کند ، به این معنی که خطوط I2C آن +3v3 سازگار است و +5v نیست. به همین دلیل است که من از Arduino Due +3v3 سازگار به عنوان میکرو کنترلر برای جلوگیری از نیاز به تغییر سطح استفاده کردم.

اگر می خواهید از Arduino Uno واقعی استفاده کنید ، باید خطوط I2C را به سطح U1 تغییر دهید. دستورالعمل زیر را در جایی که یک مجموعه اسلاید مفید (I2C_LCD_With_Arduino) ضمیمه کرده ام که نکات کاربردی زیادی در مورد استفاده از I2C ارائه می دهد ، مشاهده کنید.

آزمایش رابط I2C

تصاویر 1 و 2 بالا نحوه تنظیم و برنامه ریزی سیستم برای رابط I2C را نشان می دهد. ابتدا باید کتابخانه APDS9960_NonBlocking را بارگیری و نصب کنید. اینجا

آزمایش رابط موازی

در عکسهای 3 و 4 توضیحات مشابهی در مورد رابط موازی داده شده است

مرحله 4: نتیجه گیری

نتیجه
نتیجه

عمومی

کد به خوبی کار می کند و بدون هیچ گونه کاذب مثبت ، حرکات را به صورت واکنش گرا تشخیص می دهد. چند هفته ای است که به عنوان یک دستگاه برده در پروژه بعدی من راه اندازی شده است. من بسیاری از حالتهای مختلف شکست را امتحان کرده ام (و همینطور موتور جستجوی Quinn moggie) که قبلاً منجر به تنظیم مجدد ESP8266-12 شد ، بدون تأثیر منفی.

بهبودهای احتمالی

  • بدیهی. کتابخانه APDS9960 Gesture Sensor را دوباره بنویسید تا مسدود نشود.

    در واقع من با Broadcom تماس گرفتم و مرا به یک توزیع کننده محلی رساند که فوراً درخواست من برای پشتیبانی را نادیده گرفت ، من حدس می زنم من فقط SparkFun یا AdaFruit نیستم. بنابراین احتمالاً باید مدتی منتظر بمانید

  • کد را به یک میکروکنترلر برده کوچکتر منتقل کنید. استفاده از ATMega328P برای یک کار کمی بیش از حد است. اگرچه در ابتدا ATTiny84 را نگاه کردم ، اما استفاده از آن را متوقف کردم زیرا احساس کردم اندازه کامپایل شده کد یک خط مرزی مناسب است. با اضافه شدن هزینه های اضافی برای تغییر کتابخانه APDS9960 برای کار با کتابخانه متفاوت I2C.

مرحله 5: منابع

مورد نیاز برای برنامه ریزی arduino جاسازی شده (ATMega328P - U1)

SparkFun_APDS9960.h

  • نویسنده: استیو کوین
  • هدف: این نسخه انشعابی از SparkFun APDS9960 Sensor است که از jonn26/SparkFun_APDS-9960_Sensor_Arduino_Library چنگال زده شده است. این دستگاه دارای چند تغییر جهت رفع اشکال بوده و دارای یک آشکارساز غیر حساس شده جهت کاهش تحریکات جعلی می باشد.
  • از:

لازم است این قابلیت غیر مسدود کننده را در کد arduino خود قرار دهید و نمونه های کار شده را ارائه دهید

APDS9960_NonBlocking.h

  • نویسنده: استیو کوین
  • هدف: یک رابط تمیز برای جاسازی این پیاده سازی غیر مسدود کننده APDS9960 Gesture Sensor در کد Arduino شما ارائه می دهد.
  • از:

سیستم عامل زمان واقعی

https://fa.wikipedia.org/wiki/Real-time_operating_system

برگه اطلاعات APDS9960

https://cdn.sparkfun.com/assets/learn_tutorials/3/2/1/Avago-APDS-9960-datasheet.pdf

توصیه شده: