پروژهٔ پایانی: ترموستات هوشمند
همهٔ درسهای دوره را در یک ترموستات کامل کنار هم میگذاری: سنجش دما، نمایش، تصمیم با پسماند و کلیدزنی رله.
در پایان این درس میتوانید
- دما و رطوبت را از سنسور DHT22 بخوانی و اعتبار نمونه را وارسی کنی.
- خروجی حسگر را روی نمایشگر LCD با سیمکشی چهار بیتی نمایش دهی.
- مرزهای پایین و بالای پسماند را از روی دمای هدف حساب کنی.
- تصمیم روشن و خاموشکردن رله را طوری بنویسی که کلیدزنی پیاپی رخ ندهد.
- نمونهگیری دورهای را با millis و بدون متوقفکردن حلقه پیاده کنی.
ترموستات سادهترین حلقهٔ کنترل خودکاری است که میتوانی بسازی: چیزی را میسنجد، آن را با یک هدف مقایسه میکند و بر پایهٔ نتیجه، یک بار الکتریکی را وصل یا قطع میکند. در این پروژهٔ پایانی همهٔ مهارتهای دوره کنار هم میآیند؛ خواندن یک حسگر رقمی، نمایش روی صفحه، تصمیم شرطی، زمانبندی و راندن یک خروجی توانبالا.
سنجش و نمایش
سنسور DHT22 دما و رطوبت را با یک پروتکل تکسیمه روی یک پایهٔ رقمی میفرستد. این حسگر کند است: هر نمونهگیری حدود ۲۵۰ میلیثانیه طول میکشد و سازنده میگوید فاصلهٔ دو نمونه کمتر از ۲ ثانیه نباشد، وگرنه مقدار داخلی هنوز تازه نشده و همان عدد قبلی را تحویل میگیری. کتابخانه با dht.readTemperature() یک عدد اعشاری بر حسب درجهٔ سلسیوس برمیگرداند و اگر ارتباط خراب باشد بهجای عدد، مقدار NAN میدهد؛ پس هر برنامهٔ جدی باید نتیجه را با isnan() وارسی کند و در صورت خرابی، تصمیم قبلی را دستنخورده نگه دارد.
نمایشگر LCD شانزده در دو را در حالت چهار بیتی میبندیم. در این حالت هر بایت در دو مرحله و از روی چهار خط داده عبور میکند، پس بهجای یازده پایه فقط شش پایه مصرف میشود: دو پایهٔ فرمان و چهار پایهٔ داده. ترتیب پایهها در سازندهٔ LiquidCrystal(rs, en, d4, d5, d6, d7) باید موبهمو با سیمکشی تو یکی باشد، وگرنه صفحه یا خالی میماند یا نویسههای بیمعنی نشان میدهد.
چرا آستانهٔ تنها کافی نیست
سادهترین تصمیم این است: اگر دما از آستانه کمتر بود بخاری را روشن کن، وگرنه خاموش. مشکل وقتی پیدا میشود که دما دقیقاً روی همان آستانه بایستد. خروجی حسگر همیشه چند صدم درجه نوسان دارد و همین نوسان کوچک، برنامه را وادار میکند در هر دور تصمیمش را عوض کند. نتیجه صدای تقتق پیوستهٔ رله است؛ کنتاکتها در هر وصل و قطع جرقه میزنند و میسوزند، و عمر رله که چند ده هزار بار کلیدزنی است در چند ساعت تمام میشود.
پسماند: یک هدف، دو مرز
راهحل پسماند است: بهجای یک آستانه دو مرز بگذار و تصمیم را به حالت فعلی خروجی هم وابسته کن. با هدف ۲۵ درجه و پسماند ۱ درجه، مرز پایین ۲۴ و مرز بالا ۲۶ میشود. قاعده این است: اگر بخاری خاموش است فقط وقتی روشنش کن که دما زیر ۲۴ برود، و اگر روشن است فقط وقتی خاموشش کن که دما از ۲۶ بگذرد. پس در ۲۳ درجه رله حتماً وصل است و در ۲۷ درجه حتماً قطع، اما در بازهٔ ۲۴ تا ۲۶ رله هر حالتی داشته همان را نگه میدارد. یک نوسان نیمدرجهای دیگر هیچ اتفاقی نمیاندازد، چون برای عبور از یک مرز به مرز دیگر باید ۲ درجه تغییر واقعی رخ دهد. همین «حافظهٔ حالت» است که پسماند را از یک if ساده جدا میکند.
پسماند کمی دقت را فدای پایداری میکند: دمای اتاق بهجای عدد ثابت ۲۵، میان ۲۴ و ۲۶ بالا و پایین میرود. پسماند بزرگتر یعنی کلیدزنی کمتر و نوسان بیشتر؛ اندازهٔ درست را کندی خود سیستم تعیین میکند.
زمانبندی بدون توقف
اگر برای فاصلهٔ دو نمونه از delay(2000) استفاده کنی، برد در آن دو ثانیه هیچ کار دیگری نمیتواند بکند؛ نه دکمهای میخواند و نه در شرایط اضطراری رله را قطع میکند. بهجایش millis() را که شمارندهٔ میلیثانیههای روشنبودن برد است بخوان و تنها وقتی که اختلافش با زمان آخرین نمونه از ۲۰۰۰ گذشت کار را انجام بده. حلقه آزاد میماند و میتوانی چند کار با دورههای متفاوت را کنار هم پیش ببری.
مدار فرمان و مدار قدرت
یک پایهٔ رقمی آردوینو حداکثر حدود ۲۰ میلیآمپر میدهد، در حالی که یک بخاری یا پمپ چند آمپر میکشد. رله این دو دنیا را از هم جدا نگه میدارد: سمت فرمان فقط سیمپیچ را با ۵ ولت تحریک میکند و سمت قدرت یک کنتاکت مکانیکی است که هیچ اتصال الکتریکی با برد ندارد. در این کیت، الایدی نشانگر با مقاومت سری از پایانهٔ باز رله تغذیه میشود، نه از پایهٔ آردوینو؛ پس دقیقاً همان جایی روشن میشود که بار واقعی به آن بسته خواهد شد.
همین مدار روی سختافزار واقعی ممکن است برق شهر را قطع و وصل کند. کار با ولتاژ برق شهر بدون آموزش، ابزار درست و رعایت ایمنی خطر برقگرفتگی و آتشسوزی دارد. تمرین را در شبیهساز انجام بده و روی میز آزمایشگاه فقط بار کمولتاژ ببند.
رابطههای کلیدی
مأموریت روی میز کار
کیت را اجرا کن و از پنل تنظیم محیط شبیهساز، دمای سنسور DHT22 را آرام کم و زیاد کن. حواست به لحظهٔ عبور از هر مرز باشد.
- برنامه را اجرا کن و مطمئن شو خط اول نمایشگر LCD دما و رطوبت را نشان میدهد.
- دمای سنسور DHT22 را روی ۲۳ درجه بگذار و ببین رله وصل و الایدی نشانگر روشن میشود.
- دما را آرام تا ۲۵ و بعد ۲۵٫۵ درجه بالا ببر و تأیید کن که رله هنوز وصل مانده است.
- دما را از ۲۶ درجه بگذران تا رله قطع شود، سپس به ۲۵ برگرد و ببین دوباره وصل نمیشود.
- مقدار پسماند را در کد از ۱ به ۳ درجه ببر و اندازهگیری کن که بازهٔ بیتصمیم چقدر پهنتر شد.
مدار و کد این درس از پیش چیده شدهاند. آزادانه تغییرشان بدهید — پروژههای خودتان دستنخورده میمانند. تمامصفحه با همین کیت
آزمون این درس
۵ پرسش چهارگزینهای. پس از ثبت، پاسخ درست و توضیح هر پرسش را میبینید. میتوانید هر چند بار که خواستید تلاش کنید؛ بهترین نمره در کارنامه ثبت میشود.