مهندسی برق و کامپیوتر

  • نویسنده : admin
  • بازدید : [] مشاهده
  • دسته بندی : دسته: مهندسی برق

سلام به همه دوستان : امروز میخوایم در مورد ” پروژه کنترل و مانیتورینگ دما با ds18b20 و sim800c ” صحبت کنیم، شاید خیلی وقت ها  شده باشه که خارج از خونه باشید و بخواید ببینین دمای اتاقتون یا هال یا پذیرایی چقدره یا اگر دما از یه حدی بالاتر رفت از راه دور به شما خبر بده، اگر دنبال همچین چیزی هستین شاید مطلب امروز مفید باشه؛ روند کاری این سیستم اینجوریه که این سیستم یه سیم کارت میخوره و شما به شماره دستگاه زنگ میزنین، دستگاه تماس شما رو در کمال احترام!!!!!!!!! قطع میکنه و چند ثانیه بعد دمای اندازه گیری شده رو به شما اس ام اس میکنه؛ خیلی سرتون رو درد نیارم و بریم سر اصل مطلب.

پروژه کنترل و مانیتورینگ دما با ds18b20 و sim800c

پروژه کنترل و مانیتورینگ دما با ds18b20 و sim800c

 

اجزای پروژه مانیتورینگ دما با avr

  1. سنسور دمای دیجیتال ds18b20
  2. ماژول sim800c
  3. میکروکنترلر avr atmega16
  4. یه چند تا مقاومت و خازن و دیود و بردبرد!

 

سنسور دمای دیجیتال ds18b20

این سنسور دما یک سنسور دما ی دیجیتال کالیبره شده هست، و ویژگی جالب اون اینه که از یک سیم برای ارسال و دریافت داده استفاده میکنه  و از پروتکل ۱wire یا یک سیمه برای ارسال و دریافت داده استفاده میشه. نکته مهم دیگه اینه که این سنسور سه پایه vcc ,gnd ,data داره که خب پایه vcc برای تغذیس ولی اختیاریه!!!!!!!!!!!!!! ینی این که میتونین وصلش نکنین!!!!!!!!!!!!!!! در این حالت تغذیه اش از همون سیم دیتا که به میکروکنترلر وصله تامین میشه که در این حالت به این تغذیه میگن تغذیه انگلی!!!!!!!!!! ولی من تو این پروژه پایه vcc سنسور رو به تغذیه وصل کردم.

نکته بعدی در مورد این سنور این که این سنسور در یک حالت مثل سنسور lm35 و در حالت دیگه به صورت ضد آب عرضه میشه که من حالت دوم رو انتخاب کردم، و حالت دوم به همراه خودش یک سیم تقریبا نیم متری با پوشش ضد آب داره.

 

ماژول مخابراتی sim800c

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

توجه مهم : اگر این ماژول و یا هر ماژول مخابراتی دیگه رو که میخواین استفاده کنین که به صورت هدربرد ینی با برد راه انداز تهیه میکنین حتما حتما حتما حتما پایه ri رو خودش داشته باشه. حالا داستان این پایه چیه؟؟؟ الان میگم: داستان این پایه از این قراره که ولتاژ این پایه همیشه برابر ۲٫۸ هست، خب؟؟؟؟ حالا وقتی که اس ام اس میاد این پایه برا مدت ۱۲۰ میلی ثانیه  ۰ میشه که اینجا ازش میگذریم، ولی چیزی که مهمه اینه که زمانی به ماژول زنگ میزنیم ولتاژ از ۲٫۸ به صفر  ولت میرسه و تا زمانی که تکلیف این تماس مشخص نشه ( رد تماس یا تایید تماس یه قطع تماس به به دلیل جواب ندادن ) ۰ ولت میمونه و بعد دوباره به ۲٫۸ تبدیل میشه.

حالا اصن این پایه ri چه ربطی به ما داره که اینقدر براش سخنرانی میکنیم؟؟؟؟؟ الان میگم

ما میتونیم از این پایه استفاده کنیم و بدیمش به یکی از پایه های  وقفه خارجی میکرو وهر وقت که بهش زنگ زدن متوجه بشیم که تماس دریافتی داریم، اینجوری لازم نیست که هی مداوم چک کنیم که ببینیم بهمون زنگ زدن یا نه. اگر بخوایم مداوم چک کنیم بهمون زنگ زدن، باید درنظر داشته باشیم که هنگامی که با ماژول تماس میگیرید، ماژول هی عبارت ring رو برمیگردونه که شما باید بیاین کد بزنین و بگردین دنبال عبارت ring که اینجوری هم کد طولانی میشه و هم توان مصرفی مدار افزایش پیدا میکنه. برای اطلاعات بیشتر تو این زمینه توان مصرفی عبارت power management in embedded systems رو سرچ کنین و مقاله هاش رو بخونین.

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

 

میکروکنترلر

این قسمت دیگه میشه مغز مدارمون، همیشه سیستم های میکروکنترلر ی برام جالب بوده، آخه به نظر من دقیقا مثل اجزای بدن میمونن، الان تو همین مدار ما یه سنسور دما و یه ماژول مخابراتی داریم که هردو این ها عملا بدون میکرو ( مغز ) بی فایده میشن. حالا  اینجا میخوایم عملکرد کلی مدار(بدن) رو تشریح کنیم!!!!!.

جریان از این قراره که میکرو داره براش خودش ول میچرخه ( البته خیلی هم ول نه، داره دما رو چک میکنه )، یهو شما زنگ میزنین به دستگاه، بعد اون پایه  ri صفر میشه، چون این پایه به وقفه خارجی میکرو وصله تو میکرو وقفه ایجاد میشه. همونطور که میدونین زمانی که یه قفه ایجاد میشه، همون لحظه یه تابع ( روتین ) اجرا میشه و هدایت برنامه از هرجایی که هست به این تابع منتقل میشه و دستورات موجود تو این تابع اجرا میشه و بعد که این دستورات تموم شد  به برنامه اصلی بر میگردیم. نکته مهم اینه که ما اینجا باید بیایم اولا تماس تلفنی رو قطع کنیم تا بتونیم دما رو  پیامک کنیم. پس عبارت ath رو به ماژول مخابراتی میدیم و به کمک این عبارت تماس رو قطع میکینم. مسئله ای که حتما باید بهش توجه کنیم اینه که تو تابع ( روتین ) وقفه نمیتونیم از دستورات طولانی استفاده کنیم، باید زود کارمون رو انجام بدیم و بپریم بیرون. بگو خب! گفتی؟؟؟ خب از اونجایی که دستورات ارسال پیامک زمانبر هستن ما میایم بیرون تابع  وقفه پیامک رو میفرستیم. پس تو تابع وقفه چیکار کنیم؟؟؟؟؟ اول میایم یه متغیر عمومی ( global ) تعریف میکنیم، همونطور که میدونین متغیر عمومی متغیری هستش که تمام توابع بهش دسترسی دارن. پس هر زمان که وارد این تابع شدیم مقدار این متغیر رو برابر یک میکنیم، بعد در بیرون از این تابع بررسی میکنیم اگر یک بود این مقدار ابتدا صفرش میکینم تا برای دفعات بعدی قابل استفاده باشه، بعد  دما رو میخونیم و اس ام اس میکینم.

برای خوندن دما کدویژن ( بخش کد ویزارد ) برای سنسور دمای ds18b20 کتابخونه اماده گذاشته و دما رو ازش میخونیم ( دمش گررررررم ) در صورتی که دیدید تابع مورد استفاده در اینجا رو کامپایلرتون نمیشناسه به خاطر تفاوت ورژنه، در این صورت به مستندات کتابخونه ds18b20 کامپایلرتون مراجعه کنین.

نکته بعدی اینه که ما دائما دما رو میخونیم و اگر دما از یه حد خاصی بالاتر رفت، مثلا از ۴۵ بیشتر شد به اون شماره یه پیامک  میدیم ( قاعدتا دلیلی نداره دمای اتاق به ۴۵ برسه در حالت عادی مگه چیزی شده باشه ) حالا شما اینجا میتونین خودتون حد رو تعیین کنین. این رو در نظر بگیرین که خوندن دما نسبت به پاسخ گویی به تماس تلفنی اولویت داره. ینی ما اول میایم دما رو میخونیم و اگر دما از حد مورد نظر بالاتر بود یه اس به شماره تعیین شده میدیم و در این حالت هیچ تماس تلفنی رو قبول نمیکینم، ینی شما به دستگاه میتونین زنگ بزنین   و بوق هم میخوره ولی تماس دیگه قطع نمیشه، مگه این که شانس داشته باشین و دما پایین اومده باشه و وقفه دریافت شده باشه.

برای اینکه تو این حالت تماس رو دریافت نکنیم میایم وقفه های میکرو رو با دستور زیر غیر فعال میکینم :

نکته ای که باید در نظر بگیرین این که احتمالا برای اولین بار که دستگاه شروع به کار میکنه دوتا پیامک دریافت کنین یکی به خاطر اینه که لحظه اول راه اندازه ماژول مخابراتی پایه ri ولتاژش ۰ هست و میکرو این ۰ شدن رو به عنوان وقفه قبول میکنه، البته خیلی سریع این پایه تغییر وضعیت میده و ۲٫۸ میشه. دلیل دوم اینه که زمانی که سنسور دما راه میفته برای ار اول عدد ۶۸ رو بر میگردونه و که خب از دمای تعیین شده توسط ما یعنی ۴۵ بیشتره و همین سبب میشه که پیامک بیاد. البته این دو مورد احتمالی هستن و ممکنه هیچ وقت پیش نیان و دست کم یکیشون اتفاق بیفته و فقط هم در ابتدای راه اندازی اتفاق میفتن.

 

پروژه کنترل و مانیتورینگ دما با ds18b20 و sim800c

کد پروژه : 

 

شماتیک پروژه :

پروژه کنترل و مانیتورینگ دما با ds18b20 و sim800c

 

عکس مدار در عمل : در اول مطلب قرارش دادم.

 

فیلم های پروژه : امیدوارم خیلی سرتون رو درد نیاورده باشم، دو تا فیلم از مدار داریم که اولی مربوط به تماس و جواب دستگاه هست و دیگری مربوط به آتش زدن سنسور دما و ارسال پیامک از دستگاه به شماره تعیین شده هست که تو فیلم ابتدا دمای ۴۸٫۵ رو نشون میده و رفته رفته دما زیاد تر میشه و اس ام اس های بیشتری میاد که تو فیلم برای کاهش حجم قرارش ندادم.

http://www.aparat.com/v/hK2kG

http://www.aparat.com/v/SwFq6

 

 

پیشنهاد مطلب : در صورت تمایل میتونید مطلب زیر رو هم بخونید که با همین ماژول sim800c بسته شده :

پروژه دزدگیر با قابلیت شماره گیری sim800c و sr501