فهرست مطالب
هدف از این آموزش فراگیری نحوه خواندن مقدار PWM به ورودی میکروکنترلر به زبان C توسط مجموعه آموزشی AVR WIZARD میباشد. ( شما می توانید سنسور های مشابه دیجیتال با خروجی PWM را به این روش راه اندازی نمایید )
قطعات مورد نیاز
- برد اصلی AVR WIZARD
- برد جانبی SENSOR SHIELD
- LCD 2X16
- سنسور MQ9
- تغذیه 9 ولت
سنسور دیجیتال دما SMT172
سنسور SMT172 یک سنسور کم مصرف و با دقت بالا است که سهولت استفاده را در طیف وسیعی از دما ایجاد می کند. با استفاده از پیشرفت های اخیر در فن آوری سنجش دما ، SMT172 برای دستیابی به یک عدم دقت مطلق کمتر از 0.1 C درجه سانتیگراد در دامنه 20- درجه تا 60 درجه سانتی گراد از برخی از تکنیک های طراحی پیچیده IC و همچنین روش های کالیبراسیون با دقت بالا استفاده کرده است.
SMT172 با ولتاژ از 2.7 ولت به 5.5 ولت کار می کند و جریان فعال ان 60μA می باشد . SMT172 دارای تبدیل سریع با سرعت بیش از 4000 خروجی در ثانیه ( در دمای اتاق ) بوده و کم نویز بودن آن، این سنسور را به حسگر حرارت بسیار کارآمد در جهان تبدیل کرده است .این سنسورها در پکیجهای متعددی طراحی شدهاند: TO18 ، TO92 ، TO220 ، SOIC-8L ، SOT223 ، HEC .


شکل 1. سنسور SMT172
سنسور SMT172 دارای دقت کلی 0.1 درجه سانتیگراد در دامنه 20- تا 60+ درجه سانتیگراد و دقت 0.4 درجه سانتی گراد از 45- تا 130+ درجه سانتیگراد می باشد. این ویژگی باعث می شود که از این سنسور در صنایع مختلف اعم از پزشکی گرفته تا غیره استفاده کنند.
نحوه اتصال سنسور MQ به برد SENSOR SHIELD مجموعه آموزشی AVR WIZARD
در برد شیلد سنسور موسوم به SENSOR SHIELD سنسور SMT172 بر روی برد موجود بوده و کاربر می تواند به راحتی شروع به کدنویسی کند.

نحوه برنامه نویسی و خواندن مقادیر سنسور MQ
مزیت این سنسور نسبت به سنسورهای آنالوگ دما نظیر LM35 این است که خروجی سنسور SMT172 دیجیتال و به صورت مدولاسیون عرض پالس (PWM) است و نیازی به مبدل آنالوگ به دیجیتال ندارد و همچنین خروجی CMOS آن باعث شده تا بتوان سنسور را با کابلی به طول ۲۰ متر به میکرو وصل کرد.
خروجی این سنسور از نوع پالس است و توسط اندازه گیری نسبت ۱ بودن پالس به عرض کل پالس می توان دما را به دست آورد (اندازه گیری عرض پالس توسط تایمرها انجام می شود).
نحوه اندازه گیری دیوتی سایکل یا D.C در میکروکنترلر:
برای اندازه گیری پایه خروجی سنسور دما را به پایه وقفه خارجی میکروکنترلر وصل می کنیم و در لبه بالا رونده تایمر را روشن در لبه پایین رونده مقدار تایمر را خوانده و به عنوان زمان یا نیم سیکل مثبت ثبت می کنیم و بعد تایمر را دوباره در همین لبه ( پایین رونده ) روشن و تا لبه بالا رونده زمان را اندازه گیری می کنیم که این نیم سیکل منفی در برنامه نویسی می شود:
(dutycycle=h_time/(h_time+l_time
سپس با استفاده از فرمول زیر ( موجود در دیتاشیت ) دما را بدست می آوریم:

#include
#include
// Alphanumeric LCD functions
#include
#include
#include
#include
// Declare your global variables here
char apply_rising=1;
unsigned long int t0_ovf=0;
unsigned long int high_time=0;
unsigned long int low_time=0;
unsigned char temp[30];
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
TCCR0=0;
if(apply_rising==1)
{
low_time=t0_ovf*256+TCNT0;
// INT1 Mode: Falling Edge
MCUCR=(1<
خروجی برنامه
