فهرست مطالب:

کنترل از راه دور مادون قرمز I2C با آردوینو: 8 مرحله (همراه با تصاویر)
کنترل از راه دور مادون قرمز I2C با آردوینو: 8 مرحله (همراه با تصاویر)

تصویری: کنترل از راه دور مادون قرمز I2C با آردوینو: 8 مرحله (همراه با تصاویر)

تصویری: کنترل از راه دور مادون قرمز I2C با آردوینو: 8 مرحله (همراه با تصاویر)
تصویری: فرستنده و گیرنده بی‌سیم آردوینو - قسمت اول 2024, جولای
Anonim
کنترل از راه دور مادون قرمز I2C با آردوینو
کنترل از راه دور مادون قرمز I2C با آردوینو
کنترل از راه دور مادون قرمز I2C با آردوینو
کنترل از راه دور مادون قرمز I2C با آردوینو

این دستورالعمل نحوه ایجاد کنترل از راه دور جهانی با استفاده از I2C برای رابط را توضیح می دهد.

چقدر عجیب می گویید ، با استفاده از یک دستگاه برده I2C؟

بله ، یک دستگاه برده I2C.

این به این دلیل است که زمان بندی دقیق بسته های IR بسیار سخت است و اگر آردوینو معمولی کارهای دیگری را همزمان انجام دهد ، با آن مشکل پیدا می کند. بهتر است بار محاسباتی را با اختصاص فعالیتهای زمانبندی شدید به پردازنده های اختصاصی در صورت امکان توزیع کنید (بهتر است این کار را در سخت افزار انجام دهید). با توجه به اینکه I2C یک روش ارتباطی مستند و قوی بین IC ها است ، من این را به عنوان رابط انتخاب کردم.

معرفی

همانطور که در بالا ذکر شد ، این دستورالعمل نحوه کنترل لوازم خانگی مانند تلویزیون ، پخش کننده DVD و ماهواره و غیره را با استفاده از کتابخانه IRremote در آردوینو توضیح می دهد.

با یک مثال طراحی ، آردوینو را به یک ماژول کنترل از راه دور برده I2C (تصویر 1 بالا) با مدار آزمایش نمونه اولیه (تصویر 2 بالا) خاتمه می دهد و در ادامه به جزئیات چگونگی کوچک کردن طراحی خود به حداقل اجزای مورد نیاز می پردازد. در طرح دیگری تعبیه شده است در مورد من ، من از این دستگاه جاسازی شده در دستگاه کنترل از راه دور IoT Universal استفاده می کنم که در اطراف ESP8266-12E قرار دارد.

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

برای ساختن مدار نشان داده شده در مرحله 1 (فرستنده IR) به قطعات زیر نیاز دارید:

  • 2 عدد مقاومت 10K
  • 1 عدد مقاومت 390R
  • 1 عدد مقاومت 33R
  • 1 عدد مقاومت 3K8
  • 1 عدد LED قرمز
  • 1 تخفیف IR Led TSAL6400
  • 1 ترانزیستور BC337
  • 1 خازن 220uF
  • 1 تخفیف برای آردوینو اونو

برای ساختن مدار نشان داده شده در مرحله 4 (گیرنده مادون قرمز) به قطعات زیر نیاز دارید:

  • 1 مقاومت 10K
  • 1 تخفیف TSOP38328
  • 1 خازن 220uF
  • 1 تخفیف برای آردوینو اونو

برای ساختن مدار نشان داده شده در مرحله 5 (مدار آزمایش برده) به قطعات زیر نیاز دارید.

  • 4 مقاومت 10K
  • 2 مقاومت 390R خاموش
  • 1 عدد مقاومت 33R
  • 1 عدد مقاومت 3K8
  • 2 خاموش LED قرمز
  • 1 تخفیف IR LED TSAL6400
  • 1 ترانزیستور BC337
  • 1 خازن 220uF
  • 2 دکمه SPST
  • 2 تخفیف برای آردوینو Unos

برای ساختن مدار نشان داده شده در مرحله 6 (طراحی کوچک شده) به قطعات زیر نیاز دارید.

  • 3 عدد مقاومت 10K
  • 1 عدد مقاومت 270R
  • 1 عدد مقاومت 15R
  • 4 مقاومت 1K خاموش
  • 1 عدد LED قرمز
  • 1 تخفیف IR LED TSAL6400 یا TSAL5300
  • 1 ترانزیستور BC337
  • 1 خازن 220 ولت الکترولیتی @ 6.3 ولت
  • 1 خازن الکترولیتی خازن 1000uF @ 6.3 ولت
  • 2 خازن 0.1uF
  • 2 عدد خازن 22pF
  • 1 عدد Xtal با سرعت 16 مگاهرتز
  • 1 تخفیف ATMega328P-PU

توجه: همچنین برای برنامه ریزی ATMega328P به یک دستگاه FTDI نیاز خواهید داشت

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

  • حداقل تسلط بر لوازم الکترونیکی ،
  • آشنایی با آردوینو و IDE آن ،
  • یک کم صبر،
  • برخی از درک I2C مفید خواهد بود (برای جزئیات کلی کتابخانه I2C/Wire به اینجا مراجعه کنید).

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

  • مرور مختصر مدار ،
  • مرور مختصر نرم افزار ،
  • محتوای بسته I2C ،
  • به دست آوردن کدهای کنترل از راه دور (ui32Data) ،
  • چگونه دستگاه I2C Slave خود را آزمایش کنید ،
  • کوچک کردن طرح خود ،
  • نتیجه،
  • مراجع استفاده شده است.

سلب مسئولیت

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

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

مروری مختصر بر مدار
مروری مختصر بر مدار

هدف مدار انتقال کدهای کنترل از راه دور IR است. طراحی آن بسیار ساده و کاملاً ساده است.

هنگامی که ترانزیستور Q1 a BC337 NPN از طریق منطقی از Arduino PWM O/P D3 به Resistor R5 روشن می شود ، جریان از طریق Leds 1 و 2 عبور می کند. به ترتیب فقط توسط مقاومت بالاست R3 و R4 به ترتیب محدود می شود. Q1 برای افزایش جریان عبوری از دیود IR (IF Max = 100mA) تا بیش از آنچه که Arduino O/P قادر به تامین 40mA @ +5v ~ است ، استفاده می شود.

خازن C1 a 220uF Electrolytic مقداری تثبیت را فراهم می کند و از افت ریل منبع تغذیه توسط نیروی 1 و 2 Leds جلوگیری می کند.

مقاومت R1 و R2 کشش I2C هستند.

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

بررسی اجمالی نرم افزار
بررسی اجمالی نرم افزار
بررسی اجمالی نرم افزار
بررسی اجمالی نرم افزار
بررسی اجمالی نرم افزار
بررسی اجمالی نرم افزار

مقدمه

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

IRremote.h

  • توسط: z3t0
  • هدف: کتابخانه از راه دور مادون قرمز برای آردوینو: ارسال و دریافت سیگنال های مادون قرمز با چندین پروتکل
  • از:

مرور کلی کد

همانطور که در تصویر 1 بالا نشان داده شده است ، هنگام راه اندازی کد ، ورودی/خروجی میکرو کنترلر را پیکربندی می کند ، سپس وضعیت پرچم نرم افزار داخلی "bFreshDataFlag" را بررسی می کند. هنگامی که این پرچم تنظیم می شود ، کنترل کننده خط "Busy" (ارسال پین داده D4 کم) را تأیید می کند و به حالت eBUSY حرکت می کند و دستورات دکمه را که در uDataArray نگهداری می شود ، می خواند و داده های تعدیل شده IR را به LED IR ارسال می کند. دنباله انتقال

هنگامی که داده های ذخیره شده در uDataArray به طور کامل ارسال شد ، وضعیت 'eIDLE' از سر گرفته می شود و خط 'مشغول' لغو می شود (ارسال پین داده D4 بالا). اکنون دستگاه آماده دریافت فشارهای بیشتر دکمه است که پایان دنباله انتقال را مشخص می کند.

دریافت داده های فشار دکمه IR

وقتی داده ها از طریق I2C به کنترل از راه دور مادون قرمز ارسال می شوند ، وقفه ای ایجاد می کند و فراخوانی عملکرد ()

پس از فعال شدن داده های دریافتی I2C ، به ترتیب در بافر 'uDataArray ' نوشته می شود.

در هنگام دریافت داده ، اگر انتهای دنباله توسط استاد (bFreshData! = 0x00) نشان داده شود ، "bFreshDataFlag" تنظیم می شود ، بنابراین شروع دنباله انتقال را نشان می دهد.

تصاویر 2… 3 نمونه ای از یک دنباله بسته معمولی را نشان می دهد.

توجه: کد منبع کامل در اینجا موجود است

مرحله 3: محتوای بسته I2C

محتوای بسته I2C
محتوای بسته I2C

قالب بسته کنترل ارسال شده به slave در I2C در تصویر 1 آمده است ، معنی هر فیلد در زیر آمده است

معنی فیلدهای بسته کنترل

بایت bEncoding؛

  • رمزگذاری کنترل از راه دور IR ،

    • RC6 (آسمان) = 0 ،
    • SONY = 1 ،
    • SAMSUNG = 2 ،
    • NEC = 3 ،
    • ال جی = 4

uint32_t ui32Data؛

نمایش شش ضلعی جریان داده دوتایی IR 4 بایت داده (طولانی بدون علامت) ، LSByte… MSByte

بایت bNumberOfBitsInTheData؛

تعداد بیت در داده ها (حداکثر 32). محدوده = 1… 32

بایت bPulseTrainRepeats؛

چند بار تکرار این قطار نبض. محدوده = 1… 255. به طور معمول 2… 4 تکرار. ممکن است بخواهید این مورد را برای دستورات روشن/خاموش تمدید کنید زیرا دستگاه دریافت کننده برای دریافت سیگنال روشن شدن نیاز به چند تکرار قطار پالس اضافی دارد

بایت bDelayBetweenPulseTrainRepeats؛

تأخیر بین تکرارهای این قطار پالس. محدوده = 1… 255mS به طور معمول 22mS… 124mS

بایت bButtonRepeats؛

فشار دادن مکرر یک دکمه را شبیه سازی می کند (اما از کد تغییر یافته مانند ریموت اپل پشتیبانی نمی کند ، فقط کد دکمه را تکرار می کند). محدوده = 1… 256. پیش فرض = 1

uint16_t ui16DelayBetweenButtonRepeats؛

تأخیر بین تکرارهای دکمه (int بدون امضا). 2 بایت در کل LSByte… MSByte. محدوده = 1… 65535mS پیش فرض = 0 میلی ثانیه

بایت bFreshData؛

  • داده های تازه یک مقدار غیر صفر آخرین نوشته شده ، دنباله IR TX را فعال می کند. محدوده 0x00… 0xFF

    • بسته های کنترل بیشتری در راه است = 0
    • این بسته کنترل نهایی است = مقدار غیر صفر 1 ، 2 ،… 255

به استفاده از دستورالعمل کامپایلر '_packed_' توجه کنید. این امر برای اطمینان از این است که داده ها بسته به بایت در حافظه صرف نظر از سیستم مورد استفاده (Uno ، Due ، ESP8266 و غیره). این بدان معناست که اتحاد بین registerAllocationType و dataArrayType فقط به صورت متوالی نیاز دارد که از یک بسته کنترل به صورت بایت خارج شده و نرم افزار TX/RX را ساده کند.

مرحله 4: دستیابی به کدهای کنترل از راه دور (ui32Data)

به دست آوردن کدهای کنترل از راه دور (ui32Data)
به دست آوردن کدهای کنترل از راه دور (ui32Data)
به دست آوردن کدهای کنترل از راه دور (ui32Data)
به دست آوردن کدهای کنترل از راه دور (ui32Data)
به دست آوردن کدهای کنترل از راه دور (ui32Data)
به دست آوردن کدهای کنترل از راه دور (ui32Data)
به دست آوردن کدهای کنترل از راه دور (ui32Data)
به دست آوردن کدهای کنترل از راه دور (ui32Data)

به سه روش می توانید کد کلید مربوط به کنترل از راه دور را بدست آورید.

  1. از طریق شمارش بیت با اسیلوسکوپ ،
  2. آن را در یک وب سایت جستجو کنید ،
  3. آن را مستقیماً از جریان داده در نرم افزار رمزگشایی کنید.

از طریق شمارش بیت با محدوده

این یک روش کارآمد نیست زیرا زمان زیادی طول می کشد و به طور بالقوه به بیش از یک بار نیاز دارد ، اما می تواند بسیار دقیق باشد. همچنین در اعتبارسنجی بصری کدهای بدست آمده از روشهای 2 و 3 ، همچنین در تعیین هرگونه ویژگی از راه دور مفید است. به عنوان مثال هنگام نگه داشتن یک دکمه در ریموت اپل IR. ریموت در ابتدا یک دنباله فرمان صادر می کند و سپس آن را با یک دنباله فشرده مکرر 0xF دنبال می کند….

آن را در یک وب سایت جستجو کنید

پایگاه داده کد کنترل از راه دور در وب سایت کنترل از راه دور مادون قرمز لینوکس منبع خوبی است.

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

آن را مستقیماً از جریان داده رمزگشایی کنید

با استفاده از مدار تصویر 1 بالا همراه با نمونه کتابخانه IRremote 'IRrecvDumpV2.ino' می توان جریان داده را مستقیماً از راه دور رمزگشایی کرد. تصویر 2 یک ریموت رمزگشایی شده تلویزیون Samsung را برای فشار دادن دکمه روشن/خاموش در پنجره پایانه Arduino IDE نشان می دهد.

گیرنده/فرستنده ترکیبی

تصاویر 3 و 4 بالا راه حلی را نشان می دهند که امکان دریافت و انتقال فرمان IR را برای نمونه سازی آسان فراهم می کند.

برای رمزگشایی فشارهای دکمه کنترل از راه دور IR ، باید Arduino را با مثال 'IRrecvDumpV2.ino' همراه با کتابخانه IRremote فلش کنید.

همچنین در صورت فرمان IR م equallyثر است. چراغ قرمز به عنوان نشانگر بصری دستگاه در حال کار است.

مرحله 5: چگونه دستگاه برده I2C خود را آزمایش کنید

چگونه دستگاه برده I2C خود را آزمایش کنید
چگونه دستگاه برده I2C خود را آزمایش کنید
چگونه دستگاه برده I2C خود را آزمایش کنید
چگونه دستگاه برده I2C خود را آزمایش کنید

با استفاده از کد منبع در اینجا و مداری که در تصویر 1 نشان داده شده است ، "Master" Arduino را با "IR_Remote_Sim_Test.ino" و "Slave" Arduino را با "IR_Remote_Sim.ino" برنامه ریزی کنید.

با فرض اینکه شما یک تلویزیون سونی Bravia ، یک جعبه Sky HD و یک ساندبار BT سونی دارید ، دکمه 1 را فشار دهید تا تلویزیون شما به BBC1 تغییر کند (کانال 101). دکمه 2 را فشار دهید و نوار صدا شما بی صدا می شود. دوباره فشار دهید تا نادیده گرفته شود.

در حین اجرای دنباله انتقال IR ، LED3 روشن می شود که نشان می دهد برده مشغول است و LED1 به طور خطی با فرایند انتقال IR چشمک می زند.

البته اگر سیستم سرگرمی مشابه بالا را ندارید ، می توانید برده را با 'IRrecvDumpV2.ino' برنامه ریزی مجدد کنید ، دستورات مورد علاقه خود را رمزگشایی کنید ، سپس آنها را برای 'IR_Remote_Sim_Test.ino' برای برنامه خود برنامه ریزی کنید. سناریوی داده شده

تصویر 2 نمای کلی نرم افزار تست سطح سیستم بین Master و Slave را نشان می دهد.

مرحله 6: طراحی خود را کوچک کنید

طراحی خود را کوچک کنید
طراحی خود را کوچک کنید

بسیار خوب ، بنابراین با فرض اینکه این دستورالعمل را دنبال کرده اید ، تکیه بر دو Arduinos برای کنترل دستگاه های خانگی خود ، کارآمدترین استفاده از سهام Arduino شما نیست. در نتیجه اگر مدار نشان داده شده در تصویر بالا را بسازید و دستورالعمل های اینجا را برای برنامه نویسی ATMega328P با 'IR_Remote_Sim.ino' دنبال کنید ، می توانید کل سیستم را به حداقل اجزا کاهش دهید. این به شما امکان می دهد طرح خود را در سیستم دیگری جاسازی کنید.

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

نتیجه
نتیجه
نتیجه
نتیجه

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

من Arduino Uno R3 را به عنوان دستگاهی انتخاب کردم که دارای RAM کافی باشد تا بتوانم یک بافر دکمه با عمق مناسب داشته باشم. من به اندازه بافر 20 بسته (MAX_SEQUENCES) رضایت دادم.

سپر Hybrid TX/RX که من ساختم هنگام رمزگشایی کنترل از راه دور سونی و Sky نیز بسیار مفید بود. اگرچه من مجبور هستم گاهی اوقات از محدوده دیجیتالی خود برای بررسی نرم افزار رمزگشایی شده دستور IR همان چیزی که از IR دریافت می شود (TSOP38328) استفاده کنم.

تنها کاری که می توانستم متفاوت انجام دهم این بود که از مدار درایو جریان ثابت برای چراغ IR استفاده کنم ، همانطور که در تصویر 2 در بالا نشان داده شده است.

نکته دیگری که باید به آن توجه شود این است که همه فرستنده های IR با 38KHz مدوله نمی شوند ، TSOP38328 برای 38KHz بهینه شده است.

مرحله 8: منابع مورد استفاده

IRRemote.h

  • توسط: z3t0
  • هدف: کتابخانه از راه دور مادون قرمز برای آردوینو: ارسال و دریافت سیگنال های مادون قرمز با چندین پروتکل
  • از:

کتابخانه از راه دور IR

  • z3t0.github.io/Arduino-IRremote/
  • https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

سنسور گیرنده مادون قرمز (مادون قرمز) - TSOP38238 (معادل)

https://cdn-shop.adafruit.com/datasheets/tsop382.pdf

برای جلوگیری از پر کردن ساختار داده به مرزهای کلمه

  • https://github.com/esp8266/Arduino/issues/1825
  • https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
  • https://stackoverflow.com/questions/11770451/the-meaning-of-attribute-packed-aligned4

منبع خوب جزئیات از راه دور IR

https://www.sbprojects.com/knowledge/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReference
  • https://www.arduino.cc/fa/Reference/WireSend

پایگاه داده از راه دور IR

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

برگه BC337

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

برگه اطلاعات 1N4148

https://www.vishay.com/docs/81857/1n4148.pdf

توصیه شده: