در این پست از سایت اِمیک, سنسور بسیار دقیق و صنعتی SHT10 را با استفاده از میکروکنترلر AVR و با نرم افزار کامپایلر کدویژن (CodeVisionAVR) راه اندازی خواهیم کرد. البته این پروژه را بدون هیچ تغییری می توانید برای سنسور های SHT11 و SHT15 نیز استفاده کنید. در ادامه با سنسورهای سری SHT بیشتر اشنا خواهیم شد.
اشنایی با سنسورهای سری SHT :
سنسورهای سری SHT ساخت شرکت سوئیسی Sensirion می باشند و یکی از پرکاربردترین و دقیق ترین سنسورهای دما و رطوبت در انواع حوزه های کاری عمومی تا صنعتی می باشند.

سنسورهای سری SHT شامل سنسورهای SHT71 , SHT75 , SHT21 , SHT25 , SHT10 , SHT11 , SHT15 می باشند که مشخصات این سنسورها به صورت زیر است:

پایه های سنسورهای SHT11 , SHT10 و SHT15 که ما در این پست راه اندازی خواهیم کرد به صورت زیر می باشد:

پایه 1 : اتصال به Ground یا زمین منبع تغذیه
پایه 2 : پایه DATA
پایه 3 : پایه SCK
پایه 4 : اتصال به مثبت منبع تغذیه
نکته: پایه هایی که با NC مشخص شده اند لازم نیست بجایی وصل شوند
یکی از مشکلات استفاده از این سنسورها پکیج بسیار کوچک و حساس آنها می باشد که استفاده از آنها را در بسیاری از کاربردها دشوار کرده است. ماژول های مختلفی برای این سنسورها طراحی شده که این مشکل را برطرف نموده و استفاده از آنها را در بیشتر پروژه ها آسان کرده است. همچنین برای این سنسورها هدر برد هایی هم وجود دارد که می توانید سنسور را بر روی ان نصب کنید و به راحتی در پروژه های مختلف استفاده کنید. برخی از این ماژول ها و هدر بردها را در زیر مشاهده می کنید:

مشخصات و ویژگی ها :
- ولتاژ ورودی 2.2 تا 5.5 ولت
- رنج اندازه گیری دما -5 تا 123.5 درجه سانتی گراد
- رنج اندازه گیری رطوبت 0 تا 100 درصد
- عدم نیاز به کالیبراسیون
- خروجی دیجیتال و قابل اعتماد
- مصرف کم
- پایداری بالا و …
پروژه راه اندازی سنسور دما و رطوبت SHT1x با میکروکنترلر AVR :
در ادامه شماتیک این پروژه را مشاهده می کنید, ما در این پروژه از میکروکنترلر ATmega16 و همچنین یک ال سی دی کاراکتری 2*16 برای نمایش متن و سنسور SHT10 استفاده کرده ایم

عملکرد این پروژه به این صورت است که مقدار دما و رطوبت محیط را با استفاده از سنسور SHT10 اندازه گیری کرده و بر روی نمایشگر LCD کاراکتری نمایش میدهد. همانطور که گفته شده بدون هیچ گونه تغییری در شماتیک و یا برنامه می توانید این پروژه را برای سنسورهای SHT11 و SHT15 نیز استفاده کنید.

سنسور SHT10 دارای 4 پایه است که در شماتیک بالا پایه های تغذیه سنسور ( VCC و GND ) که وجود ندارد را به تغذیه متصل کنید. دو پایه دیگر طبق شماتیک بالا به میکروکنترلر متصل می شوند. توجه کنید که لازم است پایه DATA سنسور با استفاده از یک مقاومت 10K پول آپ شود.
در صورتی که می خواهید پایه های DATA و SCK را به دلخواه به پین دیگری از میکرو متصل کنید, باید شماره پین های مورد نظر خود را بجای پین های فعلی در فایل کتابخانه پروژه وارد کنید.
پتانسیومتر RV1 برای تنظیم کنتراست (درخشندگی) ال سی دی کاراکتری می باشد, در صورتی که پتانسیومتر نداشتید می تونید پین 3 ال سی دی کاراکتری را به زمین (منفی تغذیه) متصل کنید.
برنامه:
|
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 28 29 30 31 32 33 34 35 36 37 38 39 40 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> //کتابخانه ميکروکنترلر مگا16// #include <delay.h> //delay کتابخانه// #include <stdio.h> //sprintf براي استفاده از تابع stdio فراخواني کتابخانه// #include <alcd.h> //کاراکتري LCD فراخواني کتابخانه// #include <shtxx.h> //SHT فراخواني کتابخانه سنسور// void main(void) { float Temperature ; //براي ريختن مقادير دما در ان float از نوع Temperature تعريف متغير// float Humidity ; //براي ريختن مقادير رطوبت در ان float از نوع Humidity تعريف متغير// char Buffer_LCD[16]; //کاراکتري نمايش دهيم lcd براي تبديل مقادير دما و رطوبت به رشته اي از کاراکتر تا بتوانيم ان را روي char تعريف متغير از نوع// DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (1<<DDA0); PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (1<<PORTA1) | (0<<PORTA0); DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0); PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); lcd_init(16); //(LCD بررسي اتصال) LCD پيکره بندي// while (1) { Humidity=read_sensor(0); //مي ريزد Humidity دستور روبرو مقادير رطوبت را از سنسور خوانده و درون متغير// Temperature=read_sensor(1); //مي ريزد Temperature دستور روبرو مقادير دما را از سنسور خوانده و درون متغير// lcd_clear(); //LCD پاک کردن// sprintf(Buffer_LCD,"H=%3.1f",Humidity); //LCD براي نمايش روي Buffer_LCD تبديل مقادير رطوبت به رشته اي از کاراکتر و ذخيره ان در متغير// lcd_gotoxy(0,0); //رفتن به ستون 0 و سطر 0 از ال سي دي کاراکتري// lcd_puts(Buffer_LCD); //ذخيره شده اند Buffer_LCD نمايش مقادير رطوبت که به صورت کاراکتر در متغير// lcd_putsf("%"); //نوشتن علامت درصد % بعد از مقدار رطوبت روي ال سي دي// sprintf(Buffer_LCD,"T=%3.1f",Temperature); //LCD براي نمايش روي Buffer_LCD تبديل مقادير دما به رشته اي از کاراکتر و ذخيره ان در متغير// lcd_gotoxy(0,1); // رفتن به ستون 0 و سطر 1 از ال سي دي کاراکتري// lcd_puts(Buffer_LCD); //ذخيره شده اند Buffer_LCD نمايش مقادير دما که به صورت کاراکتر در متغير// lcd_putsf("C"); //بعد از دما به عنوان سانتي گراد LCD روي C نوشتن کاراکتر// delay_ms(300); //ايجاد تاخير به مدت 300 ميلي ثانيه// } } |
در این پروژه برای راه اندازی سنسور SHT10 از کتابخانه ان استفاده شده است. فایل های کتابخانه زیر را دانلود کرده و طبق توضیحات زیر در مسیر نصب نرم افزار کدویژن کپی کنید (در فایل های پروژه موجود در انتهای مطلب نیز این کتابخانه موجود است)
- فایل shtxx.h را در مسیر نصب نرم افزار کدویژن در پوشه inc قرار دهید
- فایل shtxx.lib را در مسیر نصب نرم افزار کدویژن در پوشه lib قرار دهید
توجه : زمانی که از دستور sprintf در کدویژن استفاده می کنیم باید از مسیر
|
1 |
" Project/Configure/C Compiler/Code Generation " |
گزینه ی s}Printf Features} را روی float, width, precision قرار دهیم .
نکته: پایه ای از میکروکنترلر که به پین SCK از سنسور متصل می شود را باید خروجی کنیم. همانطور که در برنامه در خط 14 مشاهده می کنید ما پایه 40 (PA0) از میکرو را که به پین SCK از سنسور متصل است, خروجی کرده ایم.
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…





سلام ببخشین میتونم این کد رو برای shd20 هم استفاده ؟؟؟
سلام
میخواستم اگر امکانش هست از این کتابخونه توی atmel studio استفاده کنم
لطف میکنید راهنمایی کنید
سلام
ممنون بابت سایتتون
بنده سنسور رو راه اندازی کردم و همه چیز اوکیه
اما پس از مدتی برنامه قفل میکند و مقادیر دما و رطوبت هیچ تغییری نمیکنند
خیلی وقته که این مشکل رو دارم، لطفا راهنمایی کنید.
سلام
پایه صفر که به sckمتصل است رو اگه خروجی تعریف کردیم مقدار پایه رو hi کنیم یا low
سلام, درست متوجه نشدم اگر منظورتون فعال کردن مقاومت بالاکش هست خیر لازم نیست فعال کنید