کنترل وسایل از راه دور همیشه جزو جذابیت های الکترونیک بوده ، نمونه ای از این کار هم که متداول تر هست با کمک ماژول های gsm و پیامک انجام میشه ، حالا ما توی این آموزش می خوایم با کمک ماژول M66 شرکت کوییتل یک کنترل رله پیامکی بسازیم ، البته نه به همراه یک پردازنده خارجی (مثل آردوینو) ، بلکه به صورت OpenCpu استفاده از این روش باعث میشه تا هزینه سخت افزار ما پایین تر بیاد و برد کوچیک تری هم داشته باشیم ، پس با امبددتک همراه باشید تا به سراغ این پروژه محبوب بریم.

 

در ابتدا باید بگم که شما برای انجام این پروژه باید با کار با OpenCpu توی ماژول M66 آشنا باشید برای اینکار میتونید این قسمت آمورش رو بررسی کنید:
کار با ماژول M66 – قسمت اول – کار با OpenCpu

 

سخت افزار

برای سخت افزار ما از برد توسعه ماژول M66 استفاده کردیم و برای اون یک مین برد زدیم تا وارد بحث طراحی برد برای خود ماژول نشیم در ادامه تصویر این برد رو مشاهده میکنید:

شماتیک برد بالا رو میتونید از اینجا مشاهده کنید ، در ادامه بخش های مختلف شماتیک رو بررسی میکنیم:

تغذیه

ورودی برد ما 12 ولت هست و این 12 ولت مستقیم میره سر سیم پیچ های رله ، غیر از اون یه رگولاتور L7805 هم اینجا داریم تا ولتاژ مورد نیاز برای هدر برد M66 رو تامین کنه ، همچنین یه رگولاتور 3.3 ولت برای تامین تغذیه آیسی های PCF8574 و 7HC04 که در ادامه کاربرد اونها گفته میشه

 

بخش کنترل

قسمت اصلی ما اینجا خروجی I2C ماژول M66 هست که به آیسی PCF8574 میره تا از طریق اون خروجی های ما کنترل بشه ، هر چند بدون این آیسی هم ما میتونستیم خروجی ها رو کنترل کنیم (حداقل الان چون فقط 4 تا خروجی داریم) اما یه مزیت مهم داره استفاده از این آیسی ، مسئله اینجاست که این ماژول های GSM ممکنه برخی اوقات ریست بشند که دلایل مختلفی میتونه داشته باشه و میشه گفت طبیعی هست توی این ماژول ها ، اما نکته اینه که اگر ما مستقیم خروجی ها رو به پایه های ماژول متصل کنیم هنگام ریست شدن وضعیت پایه ها از دست میره یا دست کم یه بار قطع و وصل میشه که اتفاق جالبی نیست! بعد از اون خروجی آیسی PCF8574 رو به یک آیسی NOT میدیم که استفاده ازش دوتا دلیل داره ، یکی همون NOT کردن خروجی های PCF (چون برعکس هست خروجیش) و دیگری بافر کردن خروجی PCF که بتونیم به کمک اون ترانزیستور ها رو فعال کنیم.

کنترل خروجی ها

قسمت آخر هم اینجاست که خروجی آیسی NOT به یک ترانزیستور رفته و از اونجا رله رو فعال میکنه ، همچنین اینجا یک دیود هرزگرد و یک LED برای هر رله داریم.

 

کدنویسی

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

اولین بار که ماژول روشن میشه از هیچ شماره ای دستور نمیگیره

بعد باید دکمه btn که روی برد هست رو 2 ثانیه نگه دارید تا سه تا led روی برد شروع به چشمک زدن بکنند.

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

و اون شماره به عنوان ادمین ذخیره میشه.

حالا چهار تا خروجی داریم.
با دستور
on out x
که به جای x از 1 تا 4 شماره خروجی رو مشخص میکنید
با دستور
off out x
هم خاموش میشه
و با دستور
pulse out x
خروجی لحظه ای فعال میشه

برای اضافه کردن کاربر هم از این دستور استفاده میشه
add user +989100000000

فقط فرمت شماره باید به همین صورت باشه

با دستور
user list
هم شماره کاربران برگردونده میشه

چهار تا شماره هم جمعا ذخیره میتونید بکنید

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

این قسمت کار خاصی انجام نمیده فقط میاد I2C رو راه اندازی میکنه و یک بار ال ای دی های روی خود برد توسعه رو خاموش روشن میکنه ، در آخر تابع check_file صدا زده میشه این تابع میاد و بررسی میکنه که فایلی داخل UFS داخلی ماژول با نام data.txt موجود هست یا نه ، در واقع ما از این فایل برای ذخیره شماره هایی که امکان دسترسی دارند رو مشخص میکنیم

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

دوباره به تابع proc_main_task  بر میگردیم ،در ادامه یک حلقه while داریم که پیام های دریافتی از هسته ماژول رو دریافت میکنه که یکی از اونها دریافت SMS جدید هست ، توی خط 758 این اتفاق میوفته

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

در اینجا بررسی میشه که آیا داخل حالت تنظیم admin هست یا نه (که این در 521 مشخص میشه و در صورتی که دکمه روی برد بیشتر از 2 ثانیه نگه داشته بشه )، اگر در این وضعیت بود شماره ای که از اون پیامک دریافت شده رو توی فایل data.txt ذخیره میکنه و فقط از اون دستور میگیره

در ادامه محتویات متن دریافتی از طریق پیامک بررسی میشه تا عمل مرتبط با اون انجام بشه ، توی خط 326 بررسی میشه که اگر پیامک با متن “add user” شروع شده بود شماره ای که وارد شده رو به لیست کاربر ها اضافه کنه

در ادامه در خط 368 بررسی میشه که اگر دستور “user list” اومد لیست شماره هایی که میتونند دستور ارسال کنند رو برگردونه

بعد از اون میرسیم به قسمت اصلی کارمون یعنی اگر دستور با “on out” شروع شد

ابتدا در خط 380 بررسی میشه که بعد از دستور “on out” حتما یه عدد اومده باشه و نه کاراکتر یا چیز دیگه ای

بعد از اون هم اگر مثلا عدد 1 اومده بود ، بیت اول متغیر all رو برابر 1 میکنه و در انتها تابع update_IO صدا زده میشه که دیتا ها رو برای PCF میفرسته تا اعمال بشند.

منبع : سیسوگ

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

بدون دیدگاه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *