کنترل دستگاهها از راه دور با واکیتاکی و DTMF، پروژه RFOT
توی این بلاگ میخوایم ببینیم چطور میشه با استفاده از تنهای DTMF، دستگاههای الکترونیکی رو از راه دور کنترل کرد. همون تنهایی که واکیتاکی وقتی دکمه PTT رو میگیری و یه عدد میزنی، تولید میکنه.
قبل از هر چیزی یه چیزو روشن کنم. میدونم الان چی به ذهنت رسیده.
نه. این پروژه ربطی به اون چیزایی که فکر میکنی نداره. اسم این پروژه رو گذاشتم RFOT که مخفف Radio Frequency Of Thingse. هدفش سادهست. کمک به سازندهها و رادیو آماتورها برای ساختن پروژههای جذابتر بدون اینکه مجبور باشن پول زیادی خرج رادیوهای خاص کنن.
و خواهشا از این کد فقط برای پروژه های علمی استفاده کنید. من به عنوان سازنده، هیچ مسئولیتی در قبال استفاده بد یا سوءاستفاده ازش ندارم.
DTMF مخفف Dual Tone Multiple Frequencye. اینا همون صداهایین که وقتی داری با کسی تلفنی حرف میزنی و یه عددی رو میزنی، شنیده میشه. مثلا وقتی به پشتیبانی یه شرکتی زنگ زدی و گوینده گفته “برای صحبت با اپراتور، عدد 3 رو فشار بدید” هم این تجربه رو داشتی. اون سیستم از تنهای DTMF تو پسزمینه استفاده میکنه تا بفهمه چه عددی رو زدی.
و بله، واکیتاکی تو هم میتونه همین تنها رو تولید کنه. آنالوگ، DMR، یا POC، فرقی نمیکنه. تقریباً هر رادیویی که صفحه کلید داشته باشه میتونه این کار رو بکنه.
قبل از DTMF، تلفنها صفحه گردان شماره گیری داشتن. وقتی صفحه رو میچرخوندی، خط تلفن رو به تعداد مشخصی قطع و وصل میکرد. پنج پالس برای عدد پنج، ده پالس برای صفر. کار میکرد ولی کند بود، حدود یک ثانیه برای هر رقم. نمیتونست دستورات پیچیده بفرسته و قطعات مکانیکی زیاد خراب میشد.
با رشد شبکههای تلفن، آزمایشگاه بل فهمید که به چیزی سریعتر نیاز داره. اواخر دهه ۱۹۴۰ شروع به آزمایش با سیگنالینگ مبتنی بر صدا کردن. چالش بزرگ این بود که سیگنال باید از کل شبکه تلفن عبور میکرد، از جمله بخشهایی که فقط برای صدا طراحی شده بودن، نه داده.
بعدش توی دهه ۱۹۵۰ پیشرفت بزرگ اتفاق افتاد. مهندسها فهمیدن که یه جفت تن همزمان، یکی از گروه فرکانس پایین و یکی از گروه فرکانس بالا، میتونه به طور قابل اعتمادی از صدای انسان تشخیص داده بشه. این حیاتی بود. اگه صدای یه آدم اشتباهی خط رو قطع میکرد، شبکه به هم میریخت. نیاز به دو تن همزمان، باعث شد محرکهای کاذب تقریباً غیرممکن بشن.
سال ۱۹۶۰ آزمایشگاه بل یه شبکه ۱۶ کلیدی رو نهایی کرد. کلیدها شامل ۰ تا ۹ و A, B, C, D بودن. هر کلید یه فرکانس سطر و یه فرکانس ستون منحصربفرد گرفت. جدول فرکانس اینجاست.

گروه پایین: ۶۹۷ هرتز، ۷۷۰ هرتز، ۸۵۲ هرتز، ۹۴۱ هرتز. گروه بالا: ۱۲۰۹ هرتز، ۱۳۳۶ هرتز، ۱۴۷۷ هرتز، ۱۶۳۳ هرتز.
عدد ۵ رو بزنی، میشه ۷۷۰ هرتز به اضافه ۱۳۳۶ هرتز. ستاره رو بزنی، میشه ۹۴۱ هرتز به اضافه ۱۲۰۹ هرتز. این فرکانسها رو به طور خاص انتخاب کردن چون هیچ فرکانسی مضرب دیگری نیست. این کار از هارمونیک جلوگیری میکنه. ضمن اینکه صدای انسان به ندرت این تنهای خاص رو تولید میکنه.
(AT&T)ای تی اند تی، DTMF رو با نام تجاری Touch Tone در نمایشگاه جهانی نیویورک سال ۱۹۶۴ به عموم معرفی کرد. اولین مدل تجاری وسترن الکتریک ۱۵۰۰ بود که فقط ده دکمه داشت، ستاره و مربع نداشت. صفحه کلید ۱۲ دکمهای با ستاره و مربع تا سال ۱۹۶۸ استاندارد شد. مارکتینگش هم هوشمندانه بود. صفحه تاچ تون سریعتر و رضایتبخشتر از صفحه گردان بود. اوایل ماهیانه هزینه اضافه داشت ولی زود استاندارد شد.
حالا اون کلیدهای A, B, C, D. اینا هیچوقت برای مصرفکنندههای عادی نبودن. شرکتهای تلفن ازشون برای کنترل داخلی شبکه استفاده میکردن. A برای کنترل شبکه و مسیریابی بود. B برای نگهداری تم یا تست خط. C برای پارک تم یا دسترسی اولویتدار. D برای اولویت نظامی در شبکه Autovon. اون دکمه D میتونست تمهای با اولویت پایینتر رو برای خطوط اضطراری قطع کنه. تلفنهای مصرفی هیچوقت این دکمهها رو نداشتن ولی هنوز هم توی تجهیزات تست مدرن و نرمافزارها دیده میشن.
توی دهه ۱۹۷۰، مودمهای آکوستیک کوپلر از جفت تنهای متفاوتی برای داده استفاده میکردن. DTMF برای ارتباطات کامپیوتری خیلی کند بود چون فقط هر ۱۰۰ میلیثانیه یه رقم میفرستاد. ولی در DTMF استاندارد ورود داده از طریق تلفن شد، مثل سیستمهای بانکتلفنی، منوهای پیامگیر و نظرسنجیهای خودکار.
بعد توی دهه ۱۹۸۰، کلیدهای ستاره و مربع کاربردهای قدرتمندی پیدا کردن. کلید مربع که بهش octothorpe هم میگن، به عنوان ارسال یا پایان ورود استفاده میشد. کلید ستاره برای فعال کردن ویژگیهایی مثل ستاره ۶۷ برای مخفی کردن کالرآیدی، ستاره ۶۹ برای برگردوندن تماس، ستاره ۷۰ برای لغو منتظر تماس.
در گوشیهای همراه، ویپ و گوشیهای هوشمند، صفحه کلید فیزیکی DTMF داره آرام آرام محو میشه. اما روش سیگنالینگ هنوز زندهست. گوشی هوشمندت هنوز وقتی توی منوی تلفنی حرکت میکنی، تنهای DTMF میفرسته. پروتکلهای ویپ مثل SIP، DTMF رو به صورت پکتهای خاص میفرستن. و فرکانسهاش هنوز توی رادیو آماتوری و سیستمهای کنترل صنعتی استفاده میشن.
اینجا جاییست که برای ما رادیوییها جالب میشه. واکیتاکیها دهههاست از DTMF استفاده میکنن. مدلهای تجاری و آماتوری خیلی قبل از پروژه RFOT ما این قابلیت رو داشتن. چندتا از کاربردهای کلاسیکش رو بگم.
اینجا چیزی هست که واقعاً میخوام روش تأکید کنم. میتونی تجهیزات در سطح صنعتی برای کشاورزا بسازی فقط با یه واکیتاکی ساده و یه ماژول دیکودر DTMF ارزون مثل MT8870. بدون نیاز به پیالسیهای گرون، بدون طرح اشتراک داده سلولی، بدون نیاز به اینترنت.
یه کشاورز رو تصور کن که چندتا پمپ آب توی یه زمین بزرگ پخش شده. دویدن به اونور و اینور برای روشن و خاموش کردنشون وقت و سوخت هدر میده. با این راهاندازی، یه واکیتاکی معمولی برمیداری، خروجی صوتیاش رو به ماژول MT8870 وصل میکنی، و بعد اون ماژول رو به یه برد رله وصل میکنی که پمپ رو کنترل میکنه. کشاورز توی کامیونش با یه واکیتاکی دیگه میشینه، چندتا دکمه رو میزنه در حالی که PTT رو گرفته، و پمپ از نیم کیلومتر دورتر روشن یا خاموش میشه.
همینطور برای شیرهای آبیاری، فنهای سیلوی غله، حصارهای برقی، یا چراغهای هشدار. هزینه کل اغلب زیر پنجاه دلاره برای قطعات دیکودر و رله، به اضافه دو تا واکیتاکی ارزون که احتمالاً از قبل دارن. این علمی تخیلی نیست. این همون روشیه که کشاورزا و دامدارای واقعی سالهاست برای کنترل از راه دور با تکنولوژی پایین انجام میدن. پروژه DTMF Commander ما فقط این رو برای هابیستها و سازندهها راحتتر و انعطافپذیرتر میکنه.
اولا این پروژه در حقیقت بخشی از یک پروژه بزرگ تره, دوما چیزی که با DTMF Commander میسازیم، یه نسخه همه منظوره و متنباز از اون سیستمهای تله متری تجاریه. بدون رادیو اختصاصی، بدون کنسولهای کنترل گرون. فقط واکیتاکی خودت، یه گیرنده ارزون، و چند خط کد پایتون.
همون تکنولوژی که به یه آتشنشان اجازه میده یه رادیوی خاص رو بیدار کنه یا به یه کشاورز اجازه میده یه پمپ آب رو روشن کنه، الان توی دست توئه تا چراغها، موتورها، سنسورها، یا هر چیز دیگهای که میتونه به پورت سریال وصل بشه رو کنترل کنی. و تازه اپ اوپن سورس هست و شما میتونید به وب سایت یا هاست یا سرور خودتون وصلش کنید.

ایده اصلی اینه.
سمت فرستنده، از یه واکیتاکی با صفحه کلید استفاده میکنی. وقتی PTT رو میگیری و یه عدد میزنی، یه تن DTMF روی هوا میفرسته.
توی سمت گیرنده، یه واکیتاکی دیگه یا یه RTL-SDR اون تن رو دریافت میکنه، به یه دیکودر میده، و اون دیکودر یه دستور سریال به دستگاه الکترونیکی شما میفرسته. میتونه یه آردوینو باشه، یه برد رله، یا یه پایه GPIO رزبری پای.
بدون اینترنت. بدون سلولی. فقط رادیو خالص و DTMF.
برای فرستنده به یه واکیتاکی با صفحه کلید نیاز داری. آنالوگ، DMR، یا POC، هرکدوم کار میکنه. اگه واکیتاکی شما صفحه کلید نداره، بازم میتونی با پخش کردن تنهای DTMF از گوشیات از طریق کابل AUX که به ورودی میکروفون واکیتاکی وصل شده، بفرستیش.
برای گیرنده دو تا راه داری.
همینطور میتونی از یه ماژول دیکودر DTMF مثل MT8870 استفاده کنی تا دیگه نیازی به لپتاپ یا رزبری پای و اپ من برای دیکود کردن نباشه. مستقیم به یه میکروکنترلر وصلش کن، کد رو بنویس، و هر کاری خواستی بر اساس تن DTMF دریافتی انجام بده.

من یه برنامه به اسم DTMF Commander طراحی کردم. به یه ورودی صوتی گوش میده، تنهای DTMF رو تشخیص میده، و دستورات سریال به پورت COM انتخابی تو میفرسته. ولی اینجا قسمت مهمشه. فقط وقتی پسورد درست تشخیص داده بشه، دستور رو میفرسته.
میتونی فایل های برنامه و بقیه ابزارها رو از لینکهای پایین دانلود کنی.
– DTMF Commander
– SDR++
– Virtual Audio Cable
یا برای کلون کردن ریپو:
|
1 |
git clone https://github.com/Edward1Stark/DTMF_commander |
یه نسخه .exe از برنامه توی ریپو هست که برای کاربرای ویندوز خیلی راحته. ولی اگه روی لینوکسی، میتونی کد رو از سورس اجرا کنی. برنامه به چند تا کتابخونه نیاز داره که میتونی همه رو با این دستور نصب کنی (فایل txt توی ریپو هست):
|
1 |
pip install -r requirements.txt |
راهاندازی گام به گام
استفاده از واکیتاکی دوم به عنوان گیرنده
اول، هردو واکیتاکی رو روی یه فرکانس قانونی تنظیم کن. قبل از ارسال، قوانین محلی کشورت رو چک کن.
دوم، واکیتاکی گیرنده رو با کابل AUX به لپتاپ یا رزبری پای وصل کن. صدا رو به اندازهای کم بگیر که اعوجاج نداشته باشه. اگه صدا زیادی بلند باشه، ممکنه تشخیص DTMF اشتباه بده.
سوم، برنامه DTMF Commander رو اجرا کن یا با فایل .exe یا با این دستور از سورس:
|
1 |
python dtmf_ui.py |
چهارم توی برنامه، واکیتاکی رو به عنوان ورودی صوتی انتخاب کن. یه پسورد و یه دستور سریال تنظیم کن. پورت COM درست رو برای دستگاه هدف انتخاب کن، مثل آردوینو یا برد رله. بعد بزن Start.
پنجم، روی واکیتاکی فرستنده، PTT رو بگیر و یه عددی رو بزن. عدد تشخیص داده شده روی صفحه ظاهر میشه.
استفاده از RTL-SDR به عنوان گیرنده
برای انجام کار با SDR به سه تا نرمافزار نیاز داری. SDR Sharp یا SDR++ برای دریافت تنهایDTMF و Virtual Audio Cable برای مسیریابی خروجی صدای SDR به DTMF Commander. و خود DTMF Commander برای دیکود کردن و خروجی سریال.
اول Virtual Audio Cable رو نصب کن. بعد SDR Sharp یا SDR++ رو باز کن. برو روی همون فرکانسی که واکیتاکی روش ارسال میکنه. خروجی صدا رو بذار روی Virtual Audio Cable. شروع کن به دریافت.
حالا DTMF Commander رو باز کن (با فایل .exe یا با دستور پایین از سورس):
|
1 |
python dtmf_ui.py |
و ورودی صوتی رو بذار روی Virtual Audio Cable. بزن Start و لذت ببر.
سخنی با دوستان برنامهنویس
میدونم برنامه عالی نیست، مخصوصاً رابط کاربریاش. ولی این بخشی از یه پروژه بزرگتره و فعلاً فقط میخواستم منطق اصلی کار کنه.
راحت میتونی فورکش کنی، بهبودش بدی، و قابلیت اضافه کنی. میتونی دستورات از طریق اینترنت اضافه کنی، مثل DTMF به MQTT. میتونی دستورات رو به یه HTTP endpoint بفرستی. میتونی یه رابط گرافیکی بهتر بسازی یا پشتیبانی از پسوردهای بلندتر و لاگینگ اضافه کنی.
حرف آخر
تنهای DTMF تکنولوژی قدیمیای هستن. ولی وقتی اونا رو با رادیو ترکیب میکنی، تبدیل میشن به یه راه قدرتمند، ارزون و بامزه برای کنترل چیزها از راه دور. بدون سلولی، بدون وایفای، فقط تو، واکیتاکیات و چند خط کد.
مسئول باش. با خیال راحت آزمایش کن. و از ساخت لذت ببر.
کارآفرین, تولید کننده, طراح الکترونیک و ....
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.