آردوینو Arduino Uno آموزش آردوینو دسته‌بندی پروژه های آردوینو

کیت دما بر پایه آردوینو – ساخت ترموستات با سنسور DS18B20

thermostat-with-arduino-and-ds18b20-character-lcd-2x20-digispark
نوشته شده توسط پریسا پوربلورچیان

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

 


سنسور DS18B20


سنسور دما DS18B20 دارای کابل و کاملا ضد آب می‌باشد. زمانی که نیاز دارید، دمای محیط را به صورت تماسی اندازه‌گیری کنید، سنسور DS18B20 بسیار کاربردی خواهد بود. دمای مطلوب جهت اندازه گیری توسط سنسور DS18B20، با توجه به اینکه با کابل PVC پوشیده شده است، ۱۲۵ درجه سانتی گراد تخمین زده شده است. با این وجود پیشنهاد می‌شود آن را زیر ۱۰۰ درجه سانتی گراد نگهداری کنید. از آنجایی که انتقال سیگنال کاملا دیجیتالی است، حتی در فواصل طولانی هم خطا در دریافت دمای محیط نخواهید داشت. سنسور دما DS18B20 از ۹ تا ۱۲ بیت دمای قابل تنظیم را فراهم می‌کند. اتصال سنسور تنها توسط یک سیم با یک میکروپروسسور و ولتاژ ۳ تا ۵٫۵ ولت انجام می‌شود. همانطور که اشاره شد، ولتاژ کاری سنسور DS18B20 از ۳ تا ۵٫۵ ولت DC است. دقت اندازه‌گیری سنسور بین محدوده دمایی – ۱۰ تا + ۸۵ درجه سانتی گراد برابر ±۰٫۵ می‌باشد. محدوده اندازه‌گیری دمای سنسور بین – ۵۵ تا + ۱۲۵ درجه سانتی گراد و -۶۷ تا + ۲۵۷ درجه فارنهایت می‌باشد. سنسور دما DS18B20 دارای سه پایه سیگنال و VCC و GND می‌باشد. طول سیم سنسور ۹۰ سانتی متر است و پایه های ان با سه رنگ زرد، مشکی و قرمز مشخص شده است.


برد آردوینو Arduino


برد آردوینو میکروکنترلری با قابلیت دسترسی به پورت های دیجیتال و آنالوگ و پروتکل‌های I2C و SPI است. در این آموزش از آردوینو Arduino مدل UNO استفاده شده است. برد آردوینو Arduino دارای تراشه Atmega328P است و با در اختیار داشتن پایه‌های کنترلی آنالوگ و دیجیتال I/O میتوان با سنسورهای مختلف ارتباط برقرار کرد. با در نظر گرفتن پروتکل ارتباطی، آن‌ها را راه اندازی و کدنویسی کرد. محیط برنامه نویسی IDE Arduino است که نباز به دانش برنامه نویسی C++ خواهد داشت. با انتقال کد به محیط برنامه نویسی و کامپایل کد پروژه آماده اجرا خواهد بود. مراحل نصب نرم افزار آردوینو Arduino در آموزش زیر نوشته و منتشر شده است. در صورتیکه تا به حال با برد آردوینو کار نکرده اید، ابتدا آموزش زیر را مطالعه و سپس مراحل بعدی را اجرا کنید. آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE همچنین به صورت مستقیم میتوانید نرم افزار آردوینو را از طریق لینک زیر دانلود کنید. مراحل نصب نرم افزار دقیقا مشابه دیگر نرم افزارهای کامپیوتری است.

لینک دانلود نرم افزار آردوینو

 


ال سی دی LCD 20×2


WH2002A یک نمابشگر ال سی دی کاراکتری ۲۰X2 می‌باشد که از آی سی داخلی ST7066 در ساختار آن بهره می‌برد. رابط پیش فرض ال سی دی ۸۰۰ ۴/۸-bit موازی است. همچنین این مدل با آی سی RW1063 controller IC با پروتکل I2C و SPI در بازار موجود است و اتصالات و سیم کشی آن محدوتر خواهد شد. آموزش راه اندازی ال سی دی LCD 20×2 در لینک زیر قرار گرفته شده است. طبق آموزش تنظیمات ال سی دی را انجام دهید.

آموزش راه اندازی ۳ مدل ال سی دی کاراکتری LCD با آردوینو Arduino

 


استفاده از رله Relay


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


اتصالات ترموستات Thermostat


در این پروژه از سنسور دما DS18B20، رله Relay، آردوینو UNO و ال سی دی استفاده شده است. در جدول زیر اتصالات پروژه نوشته شده است. مطابق با آن اتصالات را انجام دهید.

 


کد آردوینو ترموستات


کد را کپی و به نرم افزار آردوینو Arduino انتقال دهید.

#include <LiquidCrystal.h>


#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);







const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);



int relay =13;



void setup() {
   Serial.begin(9600);
  
  lcd.begin(20, 2);
  pinMode(relay,OUTPUT);

Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();



}
 





void loop() {


 Serial.print("Requesting temperatures...");
 sensors.requestTemperatures(); 
 Serial.println("DONE");
 
float tempC = sensors.getTempCByIndex(0);
 Serial.println(tempC);

  lcd.setCursor(0, 0);
  lcd.print("Temperature: "); 
  lcd.setCursor(0,1);
  lcd.print(tempC, DEC);
  Serial.println(tempC, DEC);
  lcd.print((char)223);
  lcd.print("C");
  if (tempC >28) {
    digitalWrite(13,LOW);
     lcd.print("    ON");
  } else {
    digitalWrite(13,HIGH);
    lcd.print("   OFF");
  }
  delay(10000);
  lcd.clear();
}

جهت کامپایل در نرم افزار آردوینو در ابتدا نوع برد را از منو Tools انتخاب کنید. در این آموزش از برد آردوینو UNO با عنوان Arduino Genuino استفاده شده است.

 


نصب کتابخانه DS18B20 و LiquidCrystal


در این کد آردوینو از دو کتابخانه DS18B20 و کتابخانه LiquidCrystal استفاده شده است. جهت نصب کتابخانه ها از منو نرم افزار آردوینو مسیر زیر را بروید:

Arduino/Tools/Manage Libraries

 در این مرحله کتابخانه ها را نصب کنید:

بر روی install کلیک کرده تا نصب شود. حال کتابخانه ها آماده است. برنامه را Verify و سپس آپلود کنید.

 


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


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

نصب کتابخانه ها

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>

 

تعریف پایه های LCD

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

 lcd.begin(20, 2);

 

تعریف و نمایش محتوا LCD

lcd.setCursor(0, 0);
  lcd.print("Temperature: "); 
  lcd.setCursor(0,1);
  lcd.print(tempC, DEC);
  Serial.println(tempC, DEC);
  lcd.print((char)223);
  lcd.print("C");
  if (tempC >28) {
    digitalWrite(13,LOW);
     lcd.print("    ON");
  } else {
    digitalWrite(13,HIGH);
    lcd.print("   OFF");
  }
  delay(10000);
  lcd.clear();

در این بخش شرط نویسی انجام شده است. در صورتیکه دما بیشتر از ۲۸ درجه سانتی گراد باشد، رله فعال و در حالت کمتر از ۲۸ درجه رله غیرفعال است. از دستور lcd.print برای نوشتن محتوا در ال سی دی استفاده می‌شود.

 

تعریف پایه DallasTemperature

#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);


void setup() {
 sensors.begin();

}

void loop() {


 Serial.print("Requesting temperatures...");
 sensors.requestTemperatures(); 
 Serial.println("DONE");
 
float tempC = sensors.getTempCByIndex(0);
 Serial.println(tempC);

}

 

 


جمع بندی لیدی پای


در این پروژه دما توسط سنسور DS18B20 اندازه گیری شده و بر روی ال سی دی LCD نمایش داده می‌شود. جهت طراحی ترموستات در ابتدا سنسور را فعال کرده تا دمای محیط خود را دریافت کنید. سپس در شرط گذاری if else دمای که اندازه گرفته اید را وارد کنید:

 if (tempC >28) 

به عنوان مثال دما در اتاق من ۲۸ درجه بود و فعال شدن رله برای دمای بیشتر از ۲۸ درجه تنظیم شده بود

 شرط گذاری در این مرحله انجام شده است. دما هر ۱۰ ثانیه یک بار بر روی ال سی دی نمایش داده می‌شود. پیشنهاد می‌شود از برد برد برای انجام اتصالات استفاده کنید. در خروجی رله از پمپ، فن میتوانید برای ساخت هیتر و یا خنک کننده اتصال دهید. دمای اندازه گیری شده در این کد از float استفاده شده که دما را به صورت اعشاری نمایش مید‌هد.

 

 


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


برد آردوینو Arduino

سنسور دما DS18B20

رله دو کانال 

پک ۳ عددی کابل فلت

ال سی دی LCD 20X2

برد بورد Breadboard

 

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک دانشجوکیت digispark daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

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

۲۲ دیدگاه

  • سلام درود
    ضمن تشکر سوالی که داشتم اینه ایا امکانش هست روی همین پروژه از ماژول DHT11 استفاده که ؟ ممنون

  • سلام درود
    ضمن تشکر سوالی که داشتم اینه ایا امکانش هست روی همین پروژه از ماژول DHT11 استفاده کرد ؟
    ممنون اگر ممکنه راهنمایی میفرمایید .

      • سلام و وقت بخیر
        ضمن تشکر از پروژه ای که اموزش دادید من با راهنمایی های شما و تامین قطعه lcd 20 ×۲ و سنسور این پروژه از سایت طبق جدول اتصالات پروژه رو انجام دادم ولی متاسفانه نمیدونم کجا اشتباه کردم دما -۱۲۷نمایش داده میشه و قطع و وصل سنسور دما تاثیری ندارد به نظرتون اشتباهم کجاست

        • با سلام
          یک مقاومت ۴٫۷ کیلو بین دو پایه VCC و Data سنسور قرار دهید مشکل برطرف خواهد شد.

          • سلام و احترام
            از راهنماییتون ممنون راستش از ابتدا مقاومت رو گذاشته بودم ولی کار نمیکرد شما که فرمودید مجدد از ابتدا همه چیز رو بررسی کردم و مقاومت رو تعویض بازم دما منفی ۱۲۷ هستش ایا احتمال خرابی سنسور ها وجود داره در این صورت یکی دیگه تهیه کنم در مورد کتابخانه چی ممکنه درست نصب نشده باشه و نتونه دما رو از سنسور بخونه ؟ ممنون سلامت و پاینده باشید

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

  • سلام و احترام
    ضمن تشکر من این پروژه با آموزش خوبی که شما تهیه کردید و تهیه قطعات از سایت اجرا کردم و طبق دستور العمل جلو رفتم ولی نمیدونم چرا دما ۱۲۷- نمایش داده میشه
    به نظرتون اشتباهم کجاست ؟ اتصالات رومجدد چک کردم ظاهرا درسته وقتی هم سنسور دما رو جدا میکنم هیچ تفاوتی نداره و همچنان دما ثابت ممنون میشم راهنمایی بفرمایید .
    امیدوارم ۲ تا پیغام نشه مجدد چون یکبار پیعام ارسال کردم نمیدونم ثبت شده یا نه کامل
    تشکر از تمامی گروه دیجی اسپارک که درجه یک هستن

    • با سلام
      در صورتیکه بین دو پایه VCC و Data از مقاومت ۴٫۷ کیلو استفاده نکنید، دیتا دریافت نمی‌شود.

  • سلام و درود
    ابتدا از شما تشکر کنم بابت راهنمایی مشکلم حل شد من ولتاژ سنسور رو در انتهای مسیر برد بورد میگرفتم و ولتاژ کافی بعد از lcdبه سنسدر نمیرسید شما که مجدد به مقاومت تاکید کردید به سراغ ولتاژ رفتم با جا به جایی تغذیه سنسور دما نمایش داده شد . و سنسور هم سالم بود . ممنون موفق و پیروز باشید

    • با سلام
      کاربر گرامی از اینکه تجربه و روش حل مشکل را اعلام کردید صمیمانه سپاسگزارم.

  • سلام
    امکانش هست در همین پزوژه از سنسور دمای دیگه ای استفاده بشه که بتونه دما رو تا محدوده ۶۰۰-۵۰۰ درجه هم نمایش بده؟

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

    • با سلام
      برای نمایش دما به صورت اعشاری از دیتاتابپ float double بایستی استفاده کنید.

      • درود خیلی ممنون بابت پاسختون
        با سعی خطا و راهنمائی دوستان مشکل حل شد منظورم ست کردن دمای ترموستات بصورت اعشار بود
        ;flot set
        ;Set =set+%1

        • کاربر گرامی از اینکه تجربه ی خود را با دیگر کاربران به اشتراک می‌گذارید، صمیمانه سپاسگزاریم.