در این پست از سایت اِمیک, سنسور بسیار دقیق و صنعتی 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
سلام, درست متوجه نشدم اگر منظورتون فعال کردن مقاومت بالاکش هست خیر لازم نیست فعال کنید
سلام تشکربابت سایت خوبتون بی زحمت لیست قطعاتی که دراین پروزه استفاده میشه بفرمایید
سلام, میکروکنترلر ATmega16A , سنسور دما و رطوبت SHT10 , ال سی دی کاراکتری 16*2 , یک پتانسیومتر تریمر 10K اهم برای تنظیم کنتراست ال سی دی , مقاومت 10K اهم , برد بورد یا فیبر چاپی برای بستن پروژه و تست ان
بنده خواستم با تایمر یه شمارنده ملث ساعت بسازم که بشه زمان رو کنترل کرد ولی اعداد اینتیجر تایمر رو 1- نشون میده
از دستور ltoa بجای sprintf برای تبدیل مقادیر تایمر به رشته ای از کاراکتر استفاده کن
ملاحظه بفرمایید
بنده کد رو تغییر ندادم، فقط تایمر رو بهش اضافه کردم تا بتونم زمان سنج داشته باشم
حالا اعداد اینتیجر تایمر رو 1- نشون میده
اگر هم این اعداد رو char تعریف کنم، 255 نشون داده میشه
ممنون از توجه شما
سلام مجدد
بله ببخشید حق با شما بود، رجیستر JTAG رو 1 کردم، حل شد.
حالا وقتی میخوام float و int رو روی ال سی دی نشون بدم مشکل دار میشه
یعنی اعداد اینتیجر رو منفی 1 نشون میده. لطفا کمک کنین
ممنونم
سلام, نکته ای که در انتهای مطلب در مورد دستور sprintf گفته شده را انجام بدید ببینید مشکل حل میشه
انجام دادم از اول
اعدادی که از روی سنسور میخونه رو درست نشون میده
ولی اعدادی که تایمر قراره بسازه به عنوان ساعت رو 1- نشون میده
دوست عزیز تایمر تو این پروژه استفاده نشده! کدها را تغییر دادید؟ کامل توضیح بدید تا بتونم کمکتون کنم
عرض سلام و خسته نباشید شبیه سازی کاملا درسته ولی تو عمل کار نمیکنه حتی تو همین پروژه یه کلمه رو تو ال سی دی نوشتم که همون رو هم نشون نمیده فقط مربع های سفید. لطفا کمک کنین
سلام, پروژه را در عمل تست کردم بنابراین مشکلی نداره. اتصالات LCD را بررسی کنید مشکلی نداشته باشه, توصیه میکنم ابتدا یک پروژه ساده برای نمایش متن روی LCD انجام بده ببین که مشکلی نباشه و بعد از اینکه از عملکرد صحیح LCD مطمئن شدی بیا سراغ این پروژه
سلام مهندس.چرا سنسور رطوبت فقط با فرکانس 1 مگ کار میکنه و فرکانس رو میذاریم روی 8 مگ فقط علامت سوال نشون میده روی فرکانس داخلی و خارجی هم تست کردم جواب نمیده
سلام, فکر نمیکنم همچین مشکلی وجود داشته باشه برای اطمینان من همین پروژه را در شبیه سازی با فرکانس 8 مگ تست کردم و مشکلی وجود نداشت. احتمالا یه جای کار را اشتباه انجام می دید
شبیه ساز جواب میده ولی تو عمل سنسور به اشباع میره بالای 5000 درجه نشون میده ولی با 1 مگاهرتز درست کار میکنه.من اون 8 مگاهرتزو برای تایمر استفاده می کنم.اگه با 1 مگاهرتز برنامه بنویسم تایمر به کندی کار میکنه
من قبلا یک پروژه دستگاه جوجه کشی با سنسور sht10 انجام دادم و از کریستال خارجی 8 مگ هم استفاده کردم و مشکلی نداشت. فکر نمیکنم مشکلتون بخاطر فرکانس باشه
سلام مهندس خسته نباشید.اگه بخوایم وقتی سنسور سوخت یا اتصال برقرار نبود یه متنی تو ال سی دی نمایش داده بشه باید چیکار کنیم.ممنون
سلام و خسته نباشید،چطور میتوم سنسور دستگاه جوجه کشی را با سنسور sht عوغ کنم،راهنمایی کنید،فیزیک بلد نیسم
سلام, نمیشه که فقط سنسور را عوض کنید چون سنسورهای مختلف راه اندازیشون باهم متفاوت هست. فکر میکنم بهترین راه تغییر برد کنترلر دستگاهتون با کنترلری هست که از سنسور sht استفاده می کند. برای تغییر برد کنترلر فعلیتون باید در برنامه و احتمالا سخت افزار اون تغییراتی بدید
سلام
من عین همین برنامه و همین فایل پروتئوس را شبیه سازی و اجرا کردم ولی روی lcd این عبارتها ظاهر میشه
%H=1f و T=1f C
اگه امکانش هست راهنمایی کنید ممنون
سلام, نکته ای که در انتهای مطلب در مورد دستور sprintf گفته شده را انجام دهید
سلام ، من از کتابخونه سنسور sh10 که گذاشتین استفاده کردم ، خیلی ممنون
حالا چطور باید بدونم سنسور از میکرو جدا شده ، و اگه سنسور از میکرو جدا شد ، مثلا بازر بوق بزنه
ممنون میشم راهنمایی بکنید
با عرض سلام و خسته نباشید
من کد شمارو نوشتم خودم کاملا اجرا میشه ولی سرعتش پایینه و برنامه همانند کد شما روان کار نمیکنه
امکانش هست بفرمایید تنظیمات چیپ رو و کندیش علتش چیه
سلام, اگر همین برنامه را بدون تغییر روی میکرو پروگرام کردین نباید مشکلی باشه فرکانس میکرو هم 1 مگ هست. فایل هگز پروژه را که درون فایلهای انتهای مطلب موجوده روی میکرو با فرکانس 1 مگ پروگرام کنید و ببینید درست میشه
با سلام
خیلی تشکر میکنم بابت این پست که واقعا به درد بخور هست، دسدتون درد نکنه.
من به کمک این کتابخانه و سنسور SHT11 دستگاه جوجه کشی ساختم، چند روز اول خیلی خوب کار میکرد و هیچ مشکلی نداشت، ولی بعد چند مدت وقتی رطوبت در داخل دستگاه از 53 درصد بالاتر میره ، یه دفعه مقدار رطوبت میاد پایین، با یه دستگاه آماده رطوبت رو اندازه گرفتن 60 درصد نشون میده ولی این دستگاه مقدار رطوبتش بین 20 تا 35 درصد متغیره و گاهی وقت ها هم یه عدد های عجیب و غریبی نشون میده مثلا : -2.7 یا 2.7 در حالی که دما سنج درست کار میکنه. میخواستم بدون آیا میتونید در این مورد کمکم کنید؟؟
سلام . من این مدار رو با کد ویژن ساختم دقیقا هم کد خود شمارو پروگرم کردم ولی روی ال سی دی فقط چند تا مربع سفید میاد و دیگر هیچ ! خواهشمندم کمک کنید
سلام, احتمالا پایه های lcd را درست وصل نکردید. دقت کنید که اگر از پتانسیومتر برای تنظیم کنتراست lcd استفاده نمی کنید, حتما باید پایه سوم lcd را به زمین متصل کنید
سلام مجدد . نه دقیقا به شکلی که خودتون متصل کردید متصل کردم و بار ها با شیوه های مختلف تست کردم حتی یک بار قبل نشان دادن دما و رطوبت امدم روی ال سی دی یک عبارت را با delay تایپ کردم برای تست سلامت اتصال ال سی دی . مهندس اگه میشه لطف کنید تلگرامتون رو برام ایمیل کنید ک از اون طریق در ارتباط باشیم .
سلام, در صورتی که از اتصالات اطمینان دارید و برنامه را تغییر نداده اید احتمالا میکرو را بدرستی پراگرام نکرده اید, دقت کنید که هنگام پروگرام کردن حتما فیوزبیت jtag را غیرفعال کنید و بهتر است از نرم افزار AVR Studio برای پراگرام کردن استفاده کنید. در حال حاظر در تلگرام فعالیتی ندارم
سلام مجدد . الان jtag رو هم غیر فعال کردم هم چنان این مشکل هست . با کد سنسور MQ9 داخل سایتتون هم همین مشکل رو دارم . بار ها و بار ها اتصالات رو چک کردم و شاید بیش از صد بار پروگرم کردم این پروژه . شاید سنسورم سوخته ! چطور میتونم بفهمم سوخته یا نه ؟
سلام, در صورتی که با پروژه های دیگر هم همین مشکل را دارید پس مشکل از سنسورتون نیست, من هنوز هم فک می کنم مشکل در پروگرام کردن هست. از چه نرم افزاری استفاده می کنید؟ و دقت کنید که فرکانس میکرو را 1 مگ تنظیم کنید
منم همین مشکل رو داشتم باید زمان پروگرام کردن،قسمت فیوز ها،JTAG رو تغییر بدین
کامل درست کار میکنه
سلام مهندس یه مشکلی هست.وقتی رطوبت از 10%میاد پایین تر دوتا درصد نشون میده.مثلا” 9%%
مشکلش چیه؟
سلام, بررسی کردم این مشکل وجود نداشت. در خط 26 از دستور lcd_clear استفاده شده بنابراین lcd پاک میشه و این اتفاق رخ نمی دهد
ممنون
سلام.مهندس مشکل sht11بیشترش حل شد.متوجه اشتباهم شدم
اصلاح می کنم:منظورم از سنسور دما و رطوبت sht11بود
سلام مهندس وقت تون بخیر.
در مورد سنسور رطوبت یه سوال داشتم.من یه برنامه نوشتم که تو نمایشگر یه تایمرو نشون میده که با وقفه نوشتم وقتی سورس مربوط به سنسور دما رو به برنامه خودم اضافه کردم هیچی نشون نداد وقتی کدهای مربوط به وقفه که خود کدویژن تولید میکنه رو پاک کردم سنسور درست کار کرد.باید چیکار کنم؟
سلام, من درست متوجه نشدم پروژه شما چه کاری انجام میده و مشکل شما دقیقا چیه
یه پروژس که اگه سنسور رطوبت از یه مقداری بزرگتر بود هیتر روشن میشه و اگه کمتر از مقدار بود هیتر خاموش میشه علاوه بر این با تایمر شماره ۲ یه تایمری نوشتم که تو ال سی دی زمان رو نشون میده اگه مثلا به ۱۰ دقیقه رسید یه فن تهویه روشن میشه.حالا نمیدونم چجوریه که کدهای مربوط تایمر باعث میشه ال سی دی هیچی نمایش نده ولی وقتی تایمرو پاک می کنم سنسور درست کار میکنه
قبلا یه پروژه مشابه برای کنترل دستگاه جوجه کشی انجام داده بودم ولی متاسفانه کدهاش رو پیدا نکردم که براتون بفرستم. احتمالا در کدهاتون مشکلی وجود دارد, سورس کامل پروژه را در سایت پیکو فایل اپلود کنید و لینکشو بدید بررسی کنم
چشم حتما میفرستم.فقط یه سوال دیگه هم داشتم این برنامه رو به همراه پسورد گذاری دادیم به یه نفر که تو کارش خیلی مهارت داره و تو ایران معروفه این برنامه رو بصورت حرفه ای انجام داده و بوردشو هم طراحی کرده حالا میخوایم این طرحو به همراه برنامه ازش بخریم خودمون کارای مونتاژشو انجام بدیم بنظرتون این طرحو ازش چند بخریم؟
سلام من مشکلی دارم
ایا کتابخانه sht1 برای مدل sht75 قابل استفاده است
اگر امکانش هست کمکم کنید
سلام, تا حالا با sht75 کار نکردم و اطلاع زیادی در موردش ندارم ولی فکر نمیکنم با این کتابخانه بشه راه اندازی کرد
سلام
ممنونم از راهنمایتون
امکانش هست بگین من ا ز کجا میتونم کتابخونه این سنسور رو بدست بیارم؟
سلام, سرچ کنید. می تونید به سایت شرکت Sensirion سازنده این سنسور هم مراجعه کنید احتمالا برنامه راه اندازی این سنسور را قرار میدن
با عرض سلام خدمت شما.بعد از اینکه پروژه رو تو شبیه ساز اجرا کردم دما تو ال سی دی ۴ درجه کمتر از سنسور نشون میده و رطوبت هم 0.3 کمتر نشون میده اینو چیکار کنم؟سوال دوم اینه که اگه به جای sht10 از sht11 استفاده کنم جواب میده؟
سلام, در عمل تست کنید. این سنسور در شبیه سازی پروتئوس مقداری خطا دارد. بله sht11 هم می تونید استفاده کنید
اگه ممکنه آی دی تلگرام یا شماره تماس تونو برام ایمیل کنین اگه سوالی پیش اومد ازتون بپرسم ممنون
از طریق ایمیل emic1395@gmail.com و یا ایدی سروش emic@ با ما ارتباط برقرار کنید
سلام
میشه به این پروژه علاوه بر lcd کاراکتری 2 تا سون سگمت 4 دیجیت هم اضافه کنید یکی برای دما و یکی برای رطوبت؟
من همین پروژه رو داشتم با بسکام علاوه بر lcd دما و رطوبت رو روی 2 تا سون سگمنت هم نشون میدادم ولی نتونستم پرش سون سگمنت هارو رفع کنم. میدونم بخاطر وقفه های داخل کدها بود ولی نتونستم رفع کنم.
سپاس.
سلام, میشه این کارو انجام داد ولی متاسفانه فعلا بدیل مشغله… نمیتونم انجام بدم. ولی من و دیگر دوستان میتونیم راهنمایتون کنیم, شاید در هفته های اینده اگر وقت شد انجام دادم و در سایت قرار دادم
سپاس فراوان
من منتظر میشم