الکترونیک

نگاهی به ریموت های درب پارکینگ، دزدگیر های ساده (غیر تصویری) و بقیه ریموت های رادیویی RF !

نوشته شده توسط احسان وارسته

تمام ریموت ها یه وجه مشترک دارن و اون کوچیک و قابل حمل بودنشونه! ریموت های رادیویی با یه باطری 27A یا 23A و 12 ولتی که تو نگاه اول شاید شوکه بشین(من اولین بار که چند سال قبل یکی از این باطری هارو دیدم شوکه شدم!!) که یعنی باطری به این کوچیکی میتونه 23 یا 27 آمپر بده!!؟ ولی خب این عددها آمپر خروجی باطری نیستن، مدل باطری شونن! معمولا 23A ها تا 55mAh ظرفیت دارن (نامی) و 27A ها هم مقداری خیلی کمتر )در حدود 20mAh). داخلشون هم ظاهرا تعدادی باطری سکه ای 1.5 ولتی بصورت سری گذاشتن (8 تا).

عکس باتری آلکالاین 23A و 12V

این ریموت ها تو دو نوع 315 و 433 مگاهرتزی توی دنیا خیلی معروفن. از مدولاسیون ASK استفاده می کنن و مدار فرستنده و گیرنده کم خرجی دارن. اگه توی پروژه ای میخواین دیتای کمی رو(مثلا 100 بایت در ثانیه) به فاصله حداکثر 50 متری ارسال کنین میتونین از ماژول های ASK که توی بازار ایران وجود دارن استفاده کنین که تو دو نوع ساده و سوپرهترودین عرضه شدن. نوع سوپرهترودین یا superheterodyne دقیقا مثل رادیوهای سوپرهترودین، موج ورودی با فرکانس بالارو با career یا حامل فرکانس میانی که خودش تولیدش میکنه و به IF یا Intermediate Frequency یا فرکانس میانی معروفه ضرب میکنه (توی میکسر) که خروجیش میشه فرکانس میانی مدوله شده با سیگنال دیتا. یکی از مزیت های این کار اینه که دیگه لازم نیست فیلتر های متغیر مختلفی توی مسیر دمدولاتور (demodulator) قرار بدیم و همه فیلترهامون برای فرکانس میانی (که ثابت هست) بهینه شدن. قیمت ماژول های سوپرهترودین یکم بیشتره ولی بخاطر کیفیتشون ارزشش رو دارن.

ریموت ها چه کدی ارسال میکنن؟

کدی که ریموت های جدید ارسال میکنن یک کد 20 بیتی هستش که توسط خود شرکت سازنده بصورت تصادفی هنگام ساخت ایجاد شده و توی آی سی پروگرام شده و چون 20 بیت هست یعنی 2 به توان 20 منهای 1 حالت برای کد ها وجود داره یعنی دقیقا 1048575 حالت! اینکه دو تا ریموت با هم کد یکسان داشته باشن یک به میلیونه، ولی اگه همچین اتفاقی هم بیوفته امیدوارم که صاحبای این دو تا ریموت همسایه نباشن و این ریموتشون رو به دزدگیر ماشین یا درب ورود پارکینگشون متصل نکرده باشن!!!

علاوه بر کد 20 بیتی، 4 بیت اضافه هم ارسال میشه که نشون دهنده دکمه فشرده شده روی ریموت هست. معمولا توی ریموت های 4 دکمه ای، برای دکمه اول عدد 1 یا 0001 ، دکمه دوم عدد 2 یا 0010 و همینطور برای دکمه سوم و چهارم عدد های 4 و 8 ارسال میشه. اینطوریه که برای لرن کردن یه ریموت به یه دزدگیر شما نیاز ندارین همه دکمه هاشو تعریف کنین فقط کافیه که یه دکمه رو فشار بدین تا اطلاعات کد ریموت توی حافظه دستگاه مدنظرتون ذخیره بشه، دیگه بقیه کارا با خودشه!

من چند سالی بخاطر خدمت سربازی و کارم که هیچ ارتباطی با الکترونیک نداشت از این محیط دور شده بودم، همین چند روز پیش بود تصمیم گرفتم بفهمم ریموت دزدگیر ماشینم چی میفرسته و چه کدی رو گیرنده ماشینم میگیره؟! این شد که بازش کردم و با یه لاجیک آنالایزر دیتاشو نگاه کردم، ولی واقعیتش تا خود ریموت رو باز نکرده بودم و با کد آی سی ev1527 آشنا نشده بودم نفهمیدم چطور کار میکنه 😊!

OTP انکدر چیه؟ EV1527 چطور کار میکنه؟

در رابطه با OTP انکدر، اگه توی اینترنت جستجو بکنین اطلاعات خیلی بی ربطی با قضیه پیدا میکنین. اینکه OTP دقیقا مخفف چیه رو خودمم نمیدونم! ولی اگه داکیومنت EV1527 رو نگاه کنین مطالب جالبی توجهتون رو جلب میکنه:

– این آی سی با سری های RT و FP سازگاره (کد یکسان)
– از تکنولوژی CMOS استفاده میکنه
– مصرف باطریش تو حالت Idle حدود 1 میکرو آمپره (یه خبر خوب برای باطری ها!)
– ولتاژ ورودی 3 تا 12 ولت رو قبول میکنه
– چهارتا پین دیتا داره (برای کلید ها)
– اسیلاتور تک مقاومتی !
– در پکیج های SOP و DIP موجوده

پین 1 برای اتصال مقاومت پول-آپ اسیلاتور، 2 و 3 برای تغذیه، 4 برای اتصال به مدار فرستنده، و 5 تا 8 هم برای دیتا هستن. همونطور که مشخصه، میشه تا 15 تا دکمه براش تعریف کرد. ساده ترین حالت اینه که هر دکمه رو با یه مقاومت به هر پین Kn متصل کنیم یعنی همون کاری که توی ریموت های 4 کلیدی انجام میدن:

توی دیتاشیت راجع به اینکه چه موجی ارسال میشه، گفته برای شروع یک سیگنال Preamble به این شکل ارسال میشه:

که اینجا نسبت 0 به 1 مدنظره، یعنی نسبت 31 به 1 دارن. برای 24 بیت بقیه هم، دیتا رو به این شکل برای 0 و 1 ارسال میکنه:

که یعنی نسبت 3 به 1 دارن، یعنی اگه 3 تا High داشته باشیم و 1 Low، بیت دیتای ما 1 خواهد بود و برعکس.

یه جدول 15 ردیفه هم بهمون دادن که یعنی هر کلیدی که (K) 1 بشه متناظرش همون بیت دیتا 1 میشه.

ولی جدولی که خیلی مهمه و توی طراحی الگوریتم برنامه دیکدتون باید مدنظر قرار بدین اینه:

این جدول داره میگه برای مقاومت های مختلف Rosc (ستون اول از چپ) ما کلاک های متفاوتی داریم که خود این کلاک ها با تغییر ولتاژ ورودی آی سی از 4 تا 12 ولت عوض میشن!! مثلا برای مقاومت 300 کیلواهمی، وقتی باطری ریموتتون نو باشه و روی 12 ولت، 1.34 میلی ثانیه عرض هر پالس کلاک هست و وقتی یه دوره استفاده بکنین و ولتاژش هی کم و کمتر شه تا حد مثلا 10 ولت این عدد به 1.41 میرسه! شاید به نظر زیاد نباشه، ولی درصد خطای خود مقاومت رو هم حساب کنیم و مثلا اگه مقاومت 10 درصد استفاده کرده باشن، یه مقاومت 300 کیلو میتونه بین 270 تا 330 کیلو اهم باشه!

حالا چرا این مهمه؟ بخاطر اینکه اگه مثلا شما بخواین از یه کانتر تایمر برای شمارش عرض پالس های دریافتی استفاده کنین و مثلا بگین اگه کانتر High روی 12 و کانتر Low روی 372 بود (خیلی ایده آله!!!) اونوقت یعنی شما سیگنال Preamble رو گرفتی، حالا میتونی 24 بیت بقیه رو بخونی! ولی واقعیت اینه که بهترین کاری که باید انجام بدین استفاده از نسبت ها هست، یعنی 372 رو بر 12 تقسیم کنین و به 31 برسین و اینطوری فقط نسبت هارو مقایسه بکنین. ولی باز این هم مشکلی داره، تو عمل بخاطر خیلی مسائل مختلف از جمله نویز محیط، کیفیت ساخت آی سی، نسبت ها همچین هم دقیق نیستن، در واقع ممکنه شما هیچوقت به نسبت 31 نرسین! برای همین باید روی یک رنج یا بازه کار کنین. اینکه این بازه چقدر میتونه باشه باز هم جالبه! چون آخرین بازه ای که باهاش کار کردم و موفق بود برای سیگنال Preamble بازه بین 20 تا 60 بود که توسط دستگاه گیرنده هم شناسایی میشد!

البته دقت کنین که در حالتی که هیچ ریموتی در حال ارسال سیگنال نیست، خروجی گیرنده همینطور به شما سیگنال میده:

و بخاطر اینکه دارین از تکنیک مقایسه با بازه استفاده میکنین احتمال اینکه توی نویز هم سیگنال پیدا کنین خیلی زیاده!! (در حقیقت پیدا می کنین، خیلی هم پیدا می کنین!) اما راه حل چیه؟

یکی از راه حل ها میتونه این باشه که وقتی یه کد رو دریافت کردین، برای اینکه مطمئن بشین این کد دریافتیتون نویز نیست منتظر کد بعدی باشین و با کد قبلی مقایسه کنین، اگه یکسان بود؛ کد دریافتی شما نویز نیست و واقعا کد یک ریموته! این کار رو میتونین بجای یک بار، دو بار یا حتی بیشتر انجام بدین ولی دقت کنین از حدی زیادتر نشه که حساسیت گیرنده تون پایین بیاد!

توی تصویر بالا خروجی کد من رو میبینین که توی نویز(سیگنال بالا) مقادیر 0 و 1 رو شناسایی کرده و تو سیگنال پایین داره نشون میده!! (با UART ارسال میکنه). متاسفانه این ریموت ها کد checksum ی برای ما نمیفرستن که بتونیم کد دریافتیمون رو بررسی کنیم!

یه سیگنال درست به زیبایی شکل پایینه:

توی تصویر پایین کدم رو جوری نوشتم که بعد از هر دو بار که کد یکسان گرفت کد رو قبول کنه:اگه دقت کنین تو سیگنال دوم(پایینی) بعد از دیتای دوم یه سری دیتای فشرده ارسال شده که یه رشته شامل دیتای دیکد شده میشه.

توی گیف زیر سه تا سیگنال رو نشون دادم. سیگنال اول خروجی ماژول گیرنده هست، سیگنال دوم خروجی UART میکروکنترلر، سیگنال سوم خروجی پین میکروکنترلر برای فعال کردن رله (یا LED) هستش:

اولش نویز رو مرور کردم، همونطور که میبینین نویز میتونه خیلی شبیه سیگنال باشه!
جلوتر، دیتا رو نشون دادم و سیگنال Preamble بعلاوه کد منحصربفرد 20 بیتی و کد کلیدهارو بصورت جدا نشون دادم.
و در نهایت بیشتر روی سیگنال زوم کردم و کد خروجی رو نشون دادم! البته سانسورش کردم چون برای دزدگیر ماشینمه!!!!

من تو این مطلب قصد نداشتم کدی رو منتشر کنم، چون میدونم کلی کد تمیز و خوب تو اینترنت پیدا میشه برای این کار. صرفا قصدم توضیح تجربه ام بود تو دیکد کردن سیگنال ریموت ها! لطفا اگه راه حل بهتری برای شناسایی و حذف نویز کد دریافتی از ماژول گیرنده دارین توی نظرها بگین که در این صفحه ثبت بشه!

چون تقریبا همه مداراتی که از این ماژول های گیرنده توشون استفاده شدن رله دارن، و نه یکی که چند تا! خیلی مهمه که برای تغذیه این ماژول ها چند تا خازن تو مسیر track خط تغذیه شون بذاریم، با این کار اثر پالس هایی که بخاطر قطع و وصل شدن رله ها روی خط تغذیه افتادن رو روی ماژول گیرنده به حداقل میرسونیم.

درباره نویسنده

احسان وارسته

یه علاقمند به حوزه علم و فناوری که دوست داره با به اشتراک گذاشتن دانشش قدم کوچکی برای کمک به جامعه فنی برداره :)
حمایت مالی

نظر بگذارید