آردوینو آردوینو Arduino Uno پروژه های آردوینو

طراحی و پیاده سازی ترموستات دیجیتال با قابلیت تنظیم از طریق ریموت کنترل

create-digital-thermostat-with-arduino-and-ir-remote-control-digispark
نوشته شده توسط معین صابری

ترموستات ها یکی از مهم ترین و پرکاربردترین ابزارها در صنایع مختلف به شمار می روند. به کمک این ابزار می توانید دمای محیط را بر روی مقدار مد نظر خود، تنظیم کنید. از این ابزار می توان در گلخانه ها، سالن های صنعتی و حتی ادارات و منازل استفاده نمود. در بازار انواع مختلفی از ترموستات ها وجود دارد. اما شاید شما بخواهید نوع مد نظر خود را ساخته و بسته به نیاز خود تغییرات لازم را در آن اعمال نمایید. در این آموزش به طراحی و پیاده سازی یک ترموستات دیجیتال می پردازیم. در این دستگاه شما می توانید از طریق یک ریموت کنترل IR، دمای دستگاه را تنظیم نمایید. بر روی این دستگاه دو رله تعبیه شده است. یکی از این رله ها  مربوط به فن سرما و دیگری مربوط به فن گرماست. این دستگاه دمای محیط را اندازه گیری کرده و بسته به دمای تنظیم شده توسط کاربر، فن سرما و یا گرما را جهت رسیدن دمای محیط به دمای ایده آل کاربر، فعال می نماید. در ادامه این آموزش به صورت مرحله به مرحله قطعات و جزییات این مدار را تشریح کرده و به پیاده سازی آن می پردازیم. بنابراین با  آردوینو به زبان فارسی، دیجی اسپارک، همراه باشید.

 


ترموستات و تعریف و کاربرد


ترموستات ها یکی از ابزارهای کلیدی جهت کنترل دما به شمار می روند. به کمک این ابزارها شما می توانید دمای میحط را بر روی مقدار مورد نظر تنظیم کنید. این ابزارها دارای یک یا دو فن هستند. یکی از فن ها وظیفه ایجاد سرمایش و فن دیگر وظیفه ایجاد گرما را بر عهده دارد. به عنوان مثال، ترموستات های خودرویی وظیفه کاهش دما را بر عهده دارند. در سیستم ترموستات خودرویی، دما از طریق سنسور دما سنجیده شده و هر زمان که از حد خاصی بالاتر رود، به رله فن فرمان فعال سازی ارسال می شود. رله با فعال سازی فن، تا زمانیکه دمای موتور بر روی مقدار ایده آل قرار نگیرد، فعال باقی می ماند.

 

در این آموزش یک ترموستات ساده را طراحی و پیاده سازی می کنیم. در این ترموستات به کمک ریموت IR، دمای ایده آل خود را برای دستگاه تعیین می نمایید. دستگاه با اندازه گیری دمای محیط، چنانچه دمای محیط از مقدار مد نظر شما بیشتر باشد، با ارسال فرمان به رله مخصوص فن سرما، این فن را روشن می کند تا دما کاهش یابد. به طریق مشابه، چنانچه دمای محیط از مقدار مد نظر شما کمتر باشد، دستگاه با ارسال فرمان به رله مخصوص فن گرما، این فن را روشن می کند تا دمای محیط افزایش یابد. در این دستگاه یک ریموت کنترل تعبیه شده که به سادگی با کلیدهای افزایش و کاهش، می توانید دمای محیط را کنترل نمایید. در قسمت های بعدی به تشریح قطعات مدار پرداخته و در نهایت با ارائه شماتیک و کد برنامه، به اجرای پروژه ترموستات دیجیتال می پردازیم.

 


برد آردوینو UNO


برد آردویینو UNO، یکی از پرکابردترین و پر استفاده ترین سری بردهای آردویینو به شمار می رود. سادگی در راه اندازی، منابع آموزشی بسیار و قیمت مناسب نسبت به سایر بردهای هم رده، این برد را به یکی از انتخاب های اصلی در زمینه الکترونیک تبدیل می نماید. در پروژه ترموستات دیجیتال با برد آردوینو اقدام به ساخت می‌کنیم.

برد آردوینو Uno و تجهیزات ساخت برد کنترل هود آشپزخانه - دیجی اسپارک

 

به کمک برد آردویینو، هم میتوان بر روی نمونه اولیه کار کرد و هم می توان آن را در محصول نهایی نیز به کار برد. دسترسی ساده و استاندار به پایه های ورودی و خروجی، وجود بوت لودر و پروگرام ساده برد، از مزیت های این برد به شمار می رود. همچنین، بر روی این برد، یک کریستال با فرکانس ۱۶ مگاهرتز قرار گرفته که از بابت تامین منبع کلاک، آسوده خاطر خواهیم بود. با توجه به نزدیک بودن زبان برنامه نویسی آردویینو به زبان ++C، کار با آن برای برنامه نویسان این زبان نیز بدون مشکل خواهد بود. از طرفی دیگر،  با توجه به وجود کتابخانه های متعدد و فراوان برای سنسورها  و نمایشگر های مختلف، این قطعات را به سادگی و بدون نگرانی، می توان به این برد متصل نمود. در پروژه ترموستات دیجیتال برد آردوینو UNO به عنوان پردازنده مرکزی، فرامین کاربر را دریافت از طریق ریموت دریافت کرده و با سنجش دما به کمک سنسور دما، به رله های گرما و یا سرما، بسته به موقعیت فرمان می دهد.

 


سنسور دما DHT11


سنسور دما و رطوبت DHT11، یک سنسور مقرون به صرفه و مناسب برای سیستم های کنترل دما به شمار می رود. این سنسور، دارای یک سنسور دما و رطوبت داخلی است. این سنسور داده های مربوط به دما و رطوبت را از طریق یک پایه خروجی، به برد آردویینو ارسال می نماید. در زیر به طور خلاصه، مشخصات فنی این سنسور را مشاهده می نمایید.

  • محدوده ولتاژ کاری: ۳ الی ۵ ولت
  • محدوده اندازه گیری رطوبت:  ۲۰ الی ۸۰ درصد با ۵ درصد خطا
  • محدوده اندازه گیری  دما: ۰ الی ۵۰ درجه سانتی گراد با دو درجه خطا

همچنین برای راه اندازی این سنسور و اتصال آن به آردویینو، کتابخانه DHT11  برای برد آردویینو فراهم بوده که به سادگی می توان داده های سنسور را در برنامه آردویینو، استفاده نمود.

سنسور دما رطوبت DHT11 در برد هود آشپزخانه - دیجی اسپارک

 

در این پروژه ما برای سنجش دمای محیط و مقایسه با دمای تنظیم شده توسط کاربر، از سنسور DHT11 استفاده کرده ایم. البته شما می توانید برای دقت بالاتر و بازه اندازه گیری بیشتر، از سنسور DS18B20 استفاده نمایید.

 


ریموت کنترل IR


ریموت های کنترل مادون قرمز، یکی از پرکاربردترین ریموت های کنترل در دستگاه های الکترونیکی به شمار می رود. به عنوان مثال، در تلویزیون ها، دستگاه های صوتی، کولرهای گازی و…. از این ریموت ها استفاده می شود. این ریموت ها که بر مبنای تکنولوژی مادون قرمز کار می کنند، در سیستم ترموستات نیز مورد استفاده قرار می گیرند. در این سیستم کاربر می تواند با فشردن کلیدهای + و -، دما را افزایش و یا کاهش دهد.

ماژول ریموت کنترل مادون قرمز ir در برد هود آشپزخانه - دیجی اسپارک

 

برای ریموت های IR، ماژول گیرنده نیز، مخصوص برد آردویینو تعبیه شده است. این ماژول به سادگی به آردویینو متصل شده و می تواند کلید های فشرده شده بر روی ریموت را بخواند. در این پروژه نیز از ریموت کنترل برای دریافت ورودی از کاربر استفاده نموده ایم.

توجه: ممکن است ریموت معرفی شده در قسمت لوازم مورد نیاز از لحاظ کلید با ریموت استفاده شده در این پروژه متفاوت باشد. برنامه نوشته شده کد ریموت را نمایش می دهد. شما با دریافت کد کلیدهای +، – و ۰ ریموت، تغییرات لازم را در کد برنامه اعمال کنید.

 


ماژول رله


رله یک سوییچ مکانیکی با قابلیت کنترل از طریق پالس الکترونیکی است. این سوییچ که در سال ۱۸۳۵ توسط جوزف هانری اختراع گردید، امروزه یکی از قطعات بسیار پرکاربرد در صنایع الکترونیک، اتوماسیون صنعتی، خودرو و…. به شمار می رود. در این پروژه نیز، جهت فرمان به موتور فن و فعال سازی آن، از رله نیز استفاده می گردد.

ماژول رله تک کانال در طراحی برد هود آشپزخانه - دیجی اسپارک

 

رله ها جهت راه اندازی نیاز به یک مدار راه اندازی دارند. از آنجاییکه فرمان فعال و یا غیر فعال سازی رله از طرف برد آردویینو صادر شده و جریان خروجی آردویینو جهت فرمان به رله کافی نیست، حتما جهت تامین این جریان نیاز به یک ترانزیستور خواهیم داشت. از طرفی دیگر، به دلیل ایجاد بارهای سلفی در زمان سوییچ رله، می بایست از یک دیود هرزگرد نیز استفاده نمود.  این در حالیست که در ماژول رله، این مدار از پیش تعبیه شده و شما می توانید به سادگی، این ماژول را به آردویینو متصل نمایید.  توجه کنید که این ماژول می تواند تا ۱۰ آمپر جریان را بر روی ترمینال های خود تحمل نماید. البته شما می توانید بسته به جریان موتورهای خود، رله مناسب را با توجه به جریان اولیه راه اندازی موتور انتخاب نمایید.

 


نمایشگر سگمنت TM1637


در طراحی سیستم های مختلف همواره نمایشگرها نقشی اساسی برای تعامل با کاربر بازی می کنند. نمایشگر ها در انواع مختلف کاراکتری، گرافیکی، TFT و سون سگمنتی وجود دارند. از لحاظ اقتصادی، نمایشگرهای سگمنت جزو مناسب ترین نمایشگرها در پروژه ها به شمار می روند. اما یکی از مشکلات این نمایشگرها تعداد زیاد پایه جهت راه اندازی است. این در حالیست که ماژول TM1637 برای راه اندازی تنها نیاز به دو پایه دارد.

ماژول نمایشگر سگمنت TM1637 و برد آردوینو - دیجی اسپارک

 

ماژول نمایشگر سون سگمنت TM1637 دارای ۴ نمایشگر(۴دیجیت) جهت نمایش داده هاست.این نمایشگر از پروتکل I2C جهت ارتباط با میکروکنترلرها استفاده می کند. راه اندازی و کار با این نمایشگر با بردهای آردوینو بسیار ساده است. از آنجاییکه برای این ماژول کتابخانه آردوینو توسعه یافته است، لذا شما می توانید به سادگی از این نمایشگر استفاده نمایید. در این پروژه  دمای تنظیم شده توسط کاربر بر روی این نمایشگر به نمایش در می آید. همچنین وضعیت کاری برد ترموستات بر روی این نمایشگر به نمایش در می آید.

 


نصب کتابخانه های مورد نیاز


در این پروژه از ماژول TM1637 جهت نمایش داده ها به کاربر و از ماژول ریموت کنترل جهت دریافت ورودی از وی استفاده می کنیم. بنابراین نیاز است تا در ابتدا، کتابخانه مربوط به هرکدام را در نرم افزار آردویینو، نصب نماییم. برای نصب کتابخانه نمایشگر Seven Segment، ابتدا در نرم افزار آردویینو، مطابق تصویر زیر و با توجه به فلش های قرمز رنگ، بر روی منوی Tools و سپس Manage Libraries کلیک کنید.

 

در قدم بعدی، در منوی ظاهر شده، در کادر جستجو، عبارت TM1637 را جستجو کرده و در میان کتابخانه های ظاهر شده، کتابخانه مشخص شده با کادر قرمز رنگ در تصویر زیر را نصب نمایید.

 

پس از این مرحله، نوبت به نصب کتابخانه ریموت کنترل می رسد. در این قسمت به بررسی نحوه نصب کتابخانه IR REMOTE می پردازیم. برای این منظور در قسمت جستجو که با فلش مشخص شده، عبارت ir remoter را تایپ نمایید. پس از جستجو کتابخانه در مخازن آردویینو، لطفا کتابخانه مشخص شده در تصویر را انتخاب و نصب نمایید.

 


شماتیک و اتصالات


در این قسمت به بررسی و تشریح سیم کشی های مدار ترموستات خود می پردازیم. در ابتدا تصویر زیر شمای کلی از اتصالات را نمایش می دهد.

 

مطابق تصویر فوق، سیم کشی های مدار را انجام می دهیم. ابتدا ارتباط بین سنسور DHT11 و برد آردوینو را به شکل زیر، برقرار سازید.

DHT11 آردوینو
VCC ۵V
GND GND
۲ OUT

 

پس از برقراری اتصالات سنسور دما، اتصالات نمایشگر سون سگمنت را به صورت زیر انجام دهید.

TM1637 آردوینو
VCC ۵V
GND GND
۸ CLK
۹ DIO

 

از آنجاییکه برای دریافت ورودی از کاربر از ریموت کنترل استفاده می کنیم، لذا ارتباط بین ماژول گیرنده IR و برد آردوینو UNO را به شکل زیر برقرار نمایید.

IR REMOTE آردوینو
VCC ۵V
GND GND
۷ OUT

در نهایت برای ماژول های رله، ماژول رله متصل به فن گرما به پایه ۵ و فن سرما به پایه ۴ متصل می گردد. تغذیه مازول رله نیز از ۵ ولت تامین می گردد. همچنین جهت اتصال فن به مازول رله، توجه داشته باشید که موتورهای الکتریکی در لحظه راه اندازی اولیه، تقریبا ۸ الی ۱۰ برابر جریان نامی خود، به جریان نیاز دارند. بنابراین رله می بایست توان تحمل این جریان را داشته باشد. همچنین جهت اتصال بار به خروجی رله، در می توانید با کلیک بر روی این لینک، اطلاعات لازم را در صورت نیاز مطالعه نمایید. پس از اجرای سیم کشی های مدار، نوبت به آپلود کد برنامه بر روی آردوینو می رسد.  در قسمت بعدی به این موضوع می پردازیم.

 


کدهای پروژه ترموستات دیجیتال


پس از برقراری ارتباط بین قسمت های مختلف مدار، نوبت به آپلود کد برنامه می رسد. کدهای این برنامه برای برد اردوینو UNO توسعه یافته اند. این کدها را بر روی برد آپلود نمایید.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 

 

پس از آپلود کد برنامه، نوبت به اجرای برنامه می رسد. در قسمت بعدی به این موضوع می پردازیم.

 


اجرای پروژه ترموستات دیجیتال


در این قسمت به اجرای پروژه ترموستات دیجیتال می پردازیم.  در این پروژه دمای پیشفرض بر روی ۲۰ درجه تنظیم شده است. بنابراین در صورتیکه دمای محیط بیش از دمای مد نظر شما تنظیم شده باشد، حالت سرما مطابق شکل زیر فعال می گردد. توجه داشته باشید که دو رقم اول دمای تنظیم شده توسط شما و عبارت C به معنای COLD و مد سرماست.

پروژه ترموستات دیجیتال با برد آردوینو - دیجی اسپارک

 

در صورتیکه دمای تنظیم شده توسط شما از دمای محیط بیشتر شود، فن گرما ساز عمل کرده و تا رسیدن به دمای مطلوب، مطابق تصویر زیر فعال باقی خواهد ماند. در این حالت نیز دو رقم اول دمای تنظیم شده توسط شما و عبارت H به معنای فعال سازی مد گرماست.

طرح نهایی پروژه ترموستات دیجیتال آردوینو - دیجی اسپارک

 

همچنین در صورتیکه پس از کار فن ها، دما محیط به دمای مطلوب کاربر برسد، فن سرما و یا گرما قطع شده و مطابق تصویر زیر، عبارت OF به معنای خاموش بودن را نمایش می دهد.

تنظیم ترموستات دیجیتال آردوینو با ریموت IR - دیجی اسپارک

 

توجه ۱: در این پروژه از یک ریموت کنترل مخصوص ضبط صوت خودرو استفاده شده است. در اینجا به کمک کلید + دما افزایش و با کلید – دما کاهش می یابد. همچنین با فشردن کلید ۰، دمای محیط برای ۵ ثانیه نمایش داده خواهد شد.

توجه ۲: در این پروژه جهت تست از سنسور DHT11 استفاده کرده ایم. شما می توانید برای دقت بالاتر و بازه اندازه گیری بیشتر، از سنسور DS18B20 استفاده نمایید.

 


تحلیل کدهای پروژه ترموستات دیجیتال


در این قسمت به تحلیل و بررسی کدهای پروژه ترموستات دیجیتال می پردازیم. از آنجاییکه درون کدهای این پروژه به صورت خط به خط توضیحات(کامنت) درج شده است، لذا در این جا به طور مختصر به روال کلی کار می پردازیم. شما می توانید با مطالعه کدهای برنامه و توضیحات آن، نحوه اجرای برنامه را به طور کامل دریابید.در این برنامه دو تابع زیر اجرا را برعهده می گیرند.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 


لوازم مورد نیاز


ماژول رله (۲عدد)

برد آردوینو UNO

سنسور دمای DHT11

ماژول گیرنده مادون قرمز 

سنسور دمای DS18B20 کابل دار 

ماژول نمایشگر سون سگمنت TM1637

 


جمع بندی


در آموزش ترموستات دیجیتال به طراحی و پیاده سازی یک سیستم ترموستات پرداختیم. در این سیستم کاربر می تواند با تنظیم دمای مطلوب بر روی دستگاه، دمای اتاق و یا محیط مد نظر خود را تنظیم نماید. در این دستگاه دو رله مخصوص فن های سرما و گرما تعبیه شده که هر کدام جهت تنظیم دمای مد نظر کاربر، از برد آردوینو در مواقع لزوم فرمان می گیرند. در این دستگاه جهت راحتی دریافت ورودی از کاربر، از ریموت کنترل استفاده کرده ایم. به کمک ریموت و با فشردن دکمه های + و -، می توانیم دما را بر روی مقدار مد نظر، تنظیم کنیم.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۶ دیدگاه

  • C:\Users\Mahdiizi\Documents\Arduino\sketch_mar01e\sketch_mar01e.ino: In function ‘void get_key()’:
    C:\Users\Mahdiizi\Documents\Arduino\sketch_mar01e\sketch_mar01e.ino:38:29: warning: ‘bool IRrecv::decode(decode_results*)’ is deprecated: Please use IrReceiver.decode() without a parameter and IrReceiver.decodedIRData. . [-Wdeprecated-declarations]
    if (irrecv.decode(&results))//بررسی داده ارسالی از سوی ریموت ، با فشردن هر کلید از ریموت، کد آن کلید ارسال شده و اینجا دریافت می گردد.
    ^
    In file included from C:\Users\Mahdiizi\Documents\Arduino\libraries\IRremote\src/IRremote.hpp:278:0,
    from C:\Users\Mahdiizi\Documents\Arduino\libraries\IRremote\src/IRremote.h:10,
    from C:\Users\Mahdiizi\Documents\Arduino\sketch_mar01e\sketch_mar01e.ino:1:
    C:\Users\Mahdiizi\Documents\Arduino\libraries\IRremote\src/IRReceive.hpp:1455:6: note: declared here
    bool IRrecv::decode(decode_results *aResults) {
    ^~~~~~
    C:\Users\Mahdiizi\Documents\Arduino\libraries\SevenSegmentTM1637\src\SevenSegmentFun.cpp:187:80: error: no ‘void SevenSegmentFun::bouncingBall(uint16_t, uint16_t, bool)’ member function declared in class ‘SevenSegmentFun’
    void SevenSegmentFun::bouncingBall(uint16_t moves, uint16_t d, bool runForever) {
    ^
    Multiple libraries were found for “IRremote.h”
    Used: C:\Users\Mahdiizi\Documents\Arduino\libraries\IRremote
    Not used: C:\Program Files (x86)\Arduino\libraries\Arduino-IRremote-master
    exit status 1
    Error compiling for board Arduino Uno.

    مهندس این خطارو هنکام کام‍‍‍‍‍‍‍بایل میده

    • برای رفع این مشکل می بایست از سایر کتابخانه ها استفاده کنید. این کتابخانه جدیدا مشکلات عجیبی دارد!

  • C:\Users\Mahdiizi\Documents\Arduino\sketch_mar01e\sketch_mar01e.ino: In function ‘void get_key()’:
    C:\Users\Mahdiizi\Documents\Arduino\sketch_mar01e\sketch_mar01e.ino:39:29: warning: ‘bool IRrecv::decode(decode_results*)’ is deprecated: Please use IrReceiver.decode() without a parameter and IrReceiver.decodedIRData. . [-Wdeprecated-declarations]
    if (irrecv.decode(&results))//بررسی داده ارسالی از سوی ریموت ، با فشردن هر کلید از ریموت، کد آن کلید ارسال شده و اینجا دریافت می گردد.
    ^
    In file included from C:\Users\Mahdiizi\Documents\Arduino\libraries\IRremote\src/IRremote.hpp:278:0,
    from C:\Users\Mahdiizi\Documents\Arduino\libraries\IRremote\src/IRremote.h:10,
    from C:\Users\Mahdiizi\Documents\Arduino\sketch_mar01e\sketch_mar01e.ino:2:
    C:\Users\Mahdiizi\Documents\Arduino\libraries\IRremote\src/IRReceive.hpp:1455:6: note: declared here
    bool IRrecv::decode(decode_results *aResults) {
    ^~~~~~
    C:\Users\Mahdiizi\Documents\Arduino\libraries\SevenSegmentTM1637\src\SevenSegmentFun.cpp:187:80: error: no ‘void SevenSegmentFun::bouncingBall(uint16_t, uint16_t, bool)’ member function declared in class ‘SevenSegmentFun’
    void SevenSegmentFun::bouncingBall(uint16_t moves, uint16_t d, bool runForever) {
    ^
    exit status 1
    Error compiling for board Arduino Uno.

    الان هم این اخطار رو میده

    • سلام و ببخشید بابت تاخیر زیاد در پاسخگویی
      متاسفانه ماژول IR کتابخانه آن جدیدا مشکلاتی دارد. این مشکل مربوط به کتابخانه و آپدیت جدید آن است.