
کتابخانه های زیادی برای راه اندازی این سنسور وجود دارد اما با توجه به اینکه بسیاری از مهندسین و دانشجویان در استفاده از کتابخانه ها با آن مواجه می شود هنگ میکروکنترلر در اثر نویز و یا هنگ ناشی از قطع و وصل شدن پایه سنسور می باشد کتابخانه ای که نوشته شده مشکل هنگ سنسور را برطرف کرده است
نحوه ی استفاده از کتابخانه در زیر توضیح داده شده است.
پایه های سنسور AM2120:
مشخصات سنسور AM2120:
ولتاژ: | ۳٫۳-۵٫۵ ولت |
محدوده اندازه گیری رطوبت: | ۰-۹۹٫۹% |
محدوده اندازه گیری دما: | منفی ۴۰ ~ مثبت ۸۰ درجه سانتی گراد |
دقت اندازه گیری رطوبت: | ۳% |
دقت اندازه گیری دما: | ۰٫۵ % |
رزولیشن اندازه گیری رطوبت: | ۰٫۱ |
رزولیشن اندازه گیری دما: | ۰٫۱ |
مدت زمان پاسخ گویی سنسور: | ۲ ثانیه |
فاصله پایه ها از هم: | ۲٫۵۴mm |
ابعاد: | ۱۵mm x 12mm |
و در عکس زیر نحوه ی وصل سنسور را مشاهده می کنید
توضیحات کتابخانه AM2120:
برای افزودن کتابخانه فایل AM2120.h را در ابتدای برنامه اینکلود کنید
تنظیمات کانفیک پین سنسور:
کتابخانه AM2120.h را باز کنید
پورت و پینی که سنسور به آن وصل خواهد شد را تعیین کنید
1 2 3 |
#define Am2120_port_pin PORTC.0 #define Am2120_direction DDRC.0 #define am2120_read_pin PINC.0 |
نمایش بر روی سون سگمنت یا ال سی دی:
اگر از ال سی دی برای نمایش مقدار دما و رطوبت استفاده می کنید ثابت USE_LCD را بر روی YES قرار دهید در غیر این صورت ثابت USE_LCD را برابر با NO قرار دهید.
در صورتی که USE_LCD را برابر با YES قرار دهید مقدار دما و رطوبت خوانده شده در قالب float خواهد بود اما در صورتی که ثابت USE_LCD را برابر با NO قرار دهید قالب دما و رطوبت خوانده شده به صورت اینتیجر خواهد بود که این قالب برای نمایش در سون سگمنت مناسب می باشد.
نحوه ی استفاده از تابع:
1 |
am2120read(); |
با صدا زدن تابع دما و رطوبت خوانده شده و در دو متغیر Temperature , humidity ذخیره می گردد
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <mega8.h> #include <stdlib.h> // Alphanumeric LCD functions #include <delay.h> #include <alcd.h> #include <../library/AM2120.h> void main(void) { while(1){ am2120_read(); lcd_gotoxy(0,0); ftoa(Temperature,1,str_var); lcd_putsf("T:"); lcd_puts(str_var); lcd_putsf(" "); lcd_gotoxy(0,1); lcd_putsf("H:"); ftoa(humidity,1,str_var); lcd_puts(str_var); lcd_putsf(" "); lcd_gotoxy(8,1); lcd_putsf("Err:"); if(err_am2120==0)lcd_putsf("0"); else lcd_putsf("1"); delay_ms(2000); } } $include "../../library/AM2120_library.inc" |
1 |
نکته مهم:
فاصله بین زمان خواندن از سنسور باید حداقل ۱۸۰۰ میلی ثانیه و در حالت عادی دو ثانیه باشد بنابرین نباید در کمتر از دو ثانیه بیش از یک بار تابع را صدا بزنید که در غیر این صورت با ارور مواجه خواهید شد
نکته:
اگر در طول زمانی که سنسور در مدار است سیم سنسور دچار قطعی شود بعضی مواقع با هنگ سنسور روبه رو می شوید و این به خاطر گیر کردن میکروکنترلر در حلقه های برنامه نویسی می باشد که این یک مشکل جدی محسوب می شود در اینجا ما با استفاده از کانتر این مشکل را برطرف کردیم و سنسور در اثر قطع و وصل احتمالی هنگ نخواهد کرد.
نکته:
در صورتی که سنسور را در محیط پر نویز استفاده کنید یا سیم ارتباطی بیش از مقدار تعیین شده طولانی باشد ممکن است دیتای دریافتی با مشکل مواجه شود یعنی دیتا ی خوانده شده مقدار واقعی نباشد و همراه با خطا باشد بنابراین در این کتابخانه طبق دیتاشیت check_sum را خوانده و با مقدار خوانده شده دما و رطوبت مقایسه کردیم که در صورت عدم مغایرت متغیر سراسری err_am2120 مقداردهی می شود
لذا در صورت وجود مشکل موقع خواندن مثل عدم تطبیق چک سام ها یا مشکل قطعی سیم پایه سنسور همه اینها ارور محسوب شده و متغیر err_am2120 برابر با یک خواهد بود در غیر این صورت در صورتی که ارور رفع شود مقدار err_am2120 برابر با صفر می شود و می توانید از این متغیر در برنامه خود استفاده کنید
استفاده از کتابخانه برای نمایش در سون سگمنت:
اگر قصد راه اندازی با سون سگمنت داشته باشید برای جلوگیری از رفرش نامنظم سون سگمنت چه اقداماتی را باید انجام دهید
کتابخانه AM2120.h را باز کنید و این خطوط را پیدا کنید (خط شانزدهم):
1 2 3 |
am2120_pin_low; delay_ms(20); am2120_pin_hi; |
محاسبه زمان تاخیر تابع رفرش:
معمولا بیشترین تاخیری که باعث چشمک زدن سون سگمنت می شود مربوط به تایم استارت و برقرای ارتباط با سنسور می باشد
شما باید تابع رفرش سون سگمنت را در کد بالا به جای delay_ms(20); به کار ببرید
نکته:مثال همراه با lcd16x2 ایجاد شده است
باید مقدار تاخیر تابع سون سگمنتها را مشخص کنید که کمتر از دو میلی ثانیه و بیشتر از بیست میلی ثانیه نباشد
برای مثال اگر من یک سون سگمنت مالتی پلکس ۳ رقمی داشته باشم و برای رفرش هر کدام یک میلی ثانیه قرار دهم با هر بار صدا زدن تابع سه میلی ثانیه زمان تلف خواهد شد
کار ما در اینجا تلف کردن زمان به مدت ۲۰ میلی ثانیه می باشد تا سنسور بتواند اماده ادامه روند ارتباط باشد
پس با در نظر گرفتن اینکه تابع رفرش سون سگمنت سه میلی ثانیه زمان تلف می کند من می توانم شش بار تابع را صدا بزنم
با اجرای تابع رفرش به مقدار ۶ بار ۱۸ میلی ثانیه و با احتساب تاخیر اجرای دستورات ، تقریبا ۲۰ میلی ثانیه زمان تلف خواهد شد
در این مدت سون سگمنتها رفرش شده و مشکل چشمک زدن از بین خواهد رفت.
نکته:
حتما پایه دوم سنسور را با مقاومت ۴٫۷ کیلو پول آپ کنید.
دانلود
- ورژن کامپایلر کدویژن : 3.12 به بالا
فایل AM2120 پروتیوس که استفاده میکنیدو میشه بدید ؟
سلام
توی پروتیوس dht22 رو می توانید به جای am2120 استفاده کنید
تنها تفاوتش در شماره پایه هاست
برنامه یکیست...