آموزش راه اندازی سنسور دما DS18B20 با آردوینو

آموزش راه اندازی سنسور دما DS18B20 با آردوینو

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

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

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

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

اکنون بیایید کمی بیشتر شما را با سنسور دما DS18B20 آشنا کنیم.

DS18B20، سنسور دما تک سیمی است که توسط شرکت نیمه رساناهای دالاس ساخته شده است. این سنسور برای ارتباط با میکروکنترلر، از پروتکل تک سیمه استفاده می‌کند. به همین دلیل برای ارتباط دو طرفه با میکرو تنها به یک پایه دیجیتال نیاز دارد.

سنسور دما DS18B20، معمولاً دو مدل دارد. یک مدل آن، با پکیج TO-92 است. این مدل دقیقاً مشابه یک ترانزیستور معمولی می‌باشد. مدل دیگر آن به شکل یک پراب فلزی ضد آب است که هنگامی‌که می‌‎خواهید دمای زیر آب یا زیر زمین را اندازه‌گیری کنید، کارایی بسیاری خواهد داشت.

سنسور دما دیجیتال DS18B20 و سنسور دما دیجیتال DS18B20 با پوشش ضد آب

همان‌طور که قبلا گفتیم، سنسور دما DS18B20 نسبتاً دقیق است و برای کارکردن نیازی به قطعه دیگری ندارد. این سنسور قادر است دمای بین 55- تا 125+ درجه سانتیگراد را با دقت 0.5± درجه سانتیگراد اندازه­‌گیری کند.

رزولوشن سنسور دما DS18B20 بسته به انتخاب کاربر بین 9، 10، 11 و 12 بیت قابل انتخاب است. با این حال، رزولوشن پیش­‌فرض آن، 12 بیت است (یعنی 0.0625 درجه سانتیگراد).

این سنسور می‌­تواند با منبع تغذیه 3 تا 5.5 ولت تغذیه شود و هنگام تبدیل دمای فعال، تنها 1mA مصرف کند. در جدول زیر می‌توانید مشخصات کامل این سنسور را مشاهده کنید:

3V to 5.5VPower Supply
1mACurrent Consumption
55°C to 125°C-Temperature Range
±0.5°CAccuracy
9bit to12bit (selectable)Resolution
750ms>Conversion Time

چند سنسور DS18B20 روی یک باس

یکی از مزایای بزرگ سنسور دما DS18B20 این است که در یک ارتباط تک سیمه می‌توان از چندین سنسور DS18B20 (ماکزیمم 8 سنسور) استفاده کرد و فقط از طریق یک پایه دیجیتال آن‌ها را کنترل نمود. از آنجایی‌که هر سنسور  DS18B20 دارای یک کد سریال 64 بیتی مجزا است که در کارخانه به آن اختصاص داده شده است، تشخیص آن‌ها از هم بسیار آسان می‌باشد. این ویژگی این امکان را به شما می‌دهد تا سنسورهای مختلفی را در نقاط مختلف یک فضای بزرگ کنترل کنید.

برای اینکه یاد بگیرید چگونه دما را از چند سنسور DS18B20 بخوانید، می‌توانید مقاله زیر را مطالعه کنید:

راه اندازی چند سنسور دما DS18B20 با آردوینو

آموزش خواندن چند سنسور دما DS18B20 و راه اندازی آن‌ها با آردوینو

پایه‌های سنسور دما DS18B20

پایه‌های سنسور دما DS18B20

GND : پایه زمین سنسور است.

DQ : پورت داده تک سیم است که باید به پایه دیجیتال یک میکروکنترلر متصل شود.

VDD : پایه تغذیه سنسور است که باید به ولتاژی بین 3.3 تا 5 ولت متصل شود.

سیم‌کشی – راه اندازی سنسور دما DS18B20 با آردوینو

تا اینجا در مورد سنسور دما DS18B20 و ویژگی‌های آن صحبت کردیم. اما الان زمان آن رسیده است که دست به کار شویم و راه اندازی سنسور دما DS18B20 را با آردوینو شروع کنیم.

قطعات مورد نیاز:

سیم کشی سنسور دما دیجیتال DS18B20 تک سیم به آردوینو دشوار نیست. برای شروع کار، VDD را به 5 ولت آردوینو و GND را به زمین آردوینو متصل کنید. سپس پایه داده (DQ) را به پایه دیجیتال 2 روی آردوینو متصل نمایید. برای پایدار ماندن انتقال داده باید پایه داده سنسور DS18B20 از طریق یک مقاومت 4.7 کیلو اهمی pull-up شود. ( مقاومت pull-up داخلی آردوینو برای این کار مناسب نیست).

نکته:

حتما از درست نصب شدن سنسور DS18B20 مطمئن شوید. اگر به اشتباه سنسور را نصب کنید، سنسور داغ می‌شود و می‌سوزد.

نحوه سیم‌کشی سنسور دما DS18B20 به آردوینو


اگر از پراب ضد آب سنسور DS18B20 استفاده می‌کنید، سیم قرمز را به 5 ولت، سیاه را به زمین و سیم زرد داده را به پایه دیجیتال 2 آردوینو وصل کنید. مشابه حالت قبل حتما باید سیم داده با یک مقاومت 4.7 کیلو pull-up شود.

نحوه سیم‌کشی پراب ضد آب سنسور DS18B20 به آردوینو

نصب کتابخانه­ برای DS18B20

پروتکل تک سیم دالاس تا حدودی پیچیده است و به همین دلیل برای ارتباط دو طرفه با سنسور به کد‌های زیادی نیاز است . برای راحت شدن کار، توابع کتابخانه‌ی ِDallas Temperature.h را نصب می‌کنیم تا بتوانیم برای خواندن دما از سنسور، از دستورهای ساده استفاده کنیم.

برای نصب کتابخانه، به مسیر Sketch>Include Library>Manage Libraries بروید. سپس منتظر بمانید تا مدیریت کتابخانه فهرست کتابخانه‌ها را دانلود کند و لیست کتابخانه­‌های نصب­ شده را به‌روز رسانی نماید.

مسیر دسترسی به Manager Libraries در نرم‌افزار آردوینو برای نصب کتابخانه DS18B20

جستجوی خود را با تایپ DS18b20 فیلتر کنید. پس از این کار چند نتیجه برای شما نمایش داده خواهد شد. Dallas Temperature by Miles Burton را پیدا کنید. سپس، بر روی آن کلیک کنید و گزینه نصب را انتخاب نمایید.

جستجو DS18b20 در library manager و نصب کتابخانه Dallas Temperature

کتابخانه Dallas Temperature یک کتابخانه سخت افزاری است که توابع سطح پایین را مدیریت می­‌کند. این کتابخانه برای اینکه بتواند علاوه بر سنسور DS18B20، با هر دستگاه تک ‌سیم که از پروتکل تک ‌سیم استفاده می‌کند، ارتباط برقرار کند، باید همراه با کتابخانه One Wire باشد. به همین خاطر این کتابخانه را هم نصب کنید.

جستجو کتابخانه One Wire در library manager و نصب آن

کد آردوینو

برای راه اندازی سنسور دما DS18B20 با آردوینو به کد نیاز دارید. می‌توانید از کد زیر برای این کار استفاده کنید. این کد، درک کاملی از چگونگی خواندن دما از سنسور دمای DS18B20 را به شما ارائه می‌‌کند و می‌تواند مبنایی برای آزمایشات و پروژه‌­های کاربردی‌تر شما باشد:

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

// Data wire is plugged into digital pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire device
OneWire oneWire(ONE_WIRE_BUS);	

// Pass oneWire reference to DallasTemperature library
DallasTemperature sensors(&oneWire);

void setup(void)
{
  sensors.begin();	// Start up the library
  Serial.begin(9600);
}

void loop(void)
{ 
  // Send the command to get temperatures
  sensors.requestTemperatures(); 

  //print the temperature in Celsius
  Serial.print("Temperature: ");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print((char)176);//shows degrees character
  Serial.print("C  |  ");
  
  //print the temperature in Fahrenheit
  Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0);
  Serial.print((char)176);//shows degrees character
  Serial.println("F");
  
  delay(500);
}


خروجی کد بالا در سریال مانیتور به شکل زیر خواهد بود:

خروجی کد راه اندازی سنسور دما DS18B20 با آردوینو بر روی سریال مانیتور

توضیح کد:

برنامه بالا با اضافه کردن کتابخانه­‌های OneWire.h و DallasTemperature.h  و معرفی پایه‌ای از آردوینو که پایه دیتای سنسور به آن متصل است، شروع می‌شود.

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

#define ONE_WIRE_BUS 2

سپس، ما یک شی تک­ سیم ایجاد می­‌کنیم. این شی تک ­سیم علاوه بر ارتباط با سنسور DS18B20، به ما امکان ارتباط با هر دستگاه تک ­سیمی را می‌­دهد. برای برقراری ارتباط با DS18B20، ما باید یک شی از کتابخانه Dallas Temperature ایجاد کنیم و شی تک­ سیم را به عنوان یک پارامتر برای آن معرفی کنیم.

OneWire oneWire(ONE_WIRE_BUS);	
DallasTemperature sensors(&oneWire);

هنگامی‌که شی Dallas Temperature ساخته شد، برای تعامل با سنسور، می‌توانیم از دستورات ساده زیر استفاده کنیم:

  • ()Begin: تابعی است که سنسورهای متصل روی باس را جستجو می‌کند و رزولوشن هر کدام  (12 بیت) را تنظیم می‌نماید.
  • ()requestTempertature: تابعی است که برای همه سنسورهای موجود در باس، فرمان انجام تبدیل دما را ارسال می­‌کند.
  • getTempCByIndex(deviceIndex): تابعی است که دما را از سنسور می‌خواند و برمی­‌گرداند. Deviceindex در واقع موقعیت سنسور در باس است. اگر شما فقط از یک DS18B20 روی باس استفاده می­‌کنید، آن را روی 0 تنظیم کنید.

دیگر توابع مفید در کتابخانه DallasTemperature.h:

چند تابع مفید وجود دارد که شما می­‌توانید با استفاده از شی DallasTemperature از آن‌ها استفاده کنید. تعدادی از آن‌ها را در ادامه برررسی می‌‌کنیم:

  • ()setResolution: تابعی است که رزولوشن مبدل آنالوگ به دیجیتال داخلی DS18B20 را بر روی مقادیر 9 ، 10 ، 11 و 12 بیت تنظیم می‌کند. این تعداد بیت به ترتیب مربوط به رزولوشن 0.5 ، 0.25 ، 0.125 و 0.0625 است.
  • ()bool getWaitForConversion: تابعی است که مقدار پرچم waitForConversion را برمی­‌گرداند. این تابع زمانی‌که شما می­‌خواهید چک کنید که تبدیل دما کامل شده است یا نه، مفید است.
  • ()setHighAlarmTemp() & setLowAlarmTemp: تابعی است که هشدارهای داخلی دمای بالا و پایین دستگاه را بر حسب درجه سانتیگراد تنظیم می‌کند. دامنه دما معتبر 55- تا 125 درجه سانتیگراد است.
  • ()bool has Alarm: این تابع، اگر دستگاهی دارای شرایط زنگ هشدار باشد، هنگامی‌که دما از حداکثر یا حداقل دمای تنظیم­ شده عبور می­‌کند، مقدار true را برمی‌گرداند.

کلام آخر

راه اندازی سنسور دما دیجیتال DS18B20 با آردوینو را به اتفاق هم انجام دادیم. انجام این پروژه اصلا دشوار نیست. شما چی فکر می‎کنید؟ آیا موفق شدید این پروژه را به‌راحتی انجام دهید؟ اگر به مشکلی برخوردید یا به راهنمایی بیشتری نیاز داشتید، حتما روی کمک ما حساب باز کنید و سوالات خود را در بخش دیدگاه برای ما بنویسید.

مقالات مشابه

۸ دیدگاه. Leave new

  • سلام
    یه سوال داشتم
    کتابخانه رو چطور نصب کنیم.

    پاسخ
    • سلام و درود به شما،
      لینک کتابخانه رو قرار دادیم، می‌تونی کتابخونه رو دانلود کنی و طبق مقاله پیش بری که کاملا توضیح داده شده.
      موفق باشی

      پاسخ
  • سلام… بسیار عالی ….من وصل شدم…منتها کد آردینو شما برا یک سنسوره!!!!….اگه ۸ سنسور وصل بشه به یه ورودی دیجیتال، چطور مقادیر تو سریال مانیتور بخونیم؟

    پاسخ
  • بله درست شد متشکرم. … دیتا ها واسه هر سنسور در قسمت سریال مانیتور نشون داده میشه… من الان تو لبویو تونستم به دماهای خروجی که تو نرم افزار آردینو نشون میداد برسم! دیتاهای مانیتور شده به صورت استرینگ هست هم تو آردینو و هم تو لبویو…. آیا میشه دیتاها رو array کرد که بشه برد رو نمودار! یا بشه بصورت دسیمال نشون داد؟ من میخام دیتاها رو برحسب زمان تو فایل تکست یا اکسل سیو کنم!!! الان هم تو لبویو و هم تو آردینو فقط میتونم قرائت کنم مقادیرشون بصورت استرینگ.

    پاسخ
    • سلام مجدد به شما،
      بسیار عالی،
      خروجی تابع getTempCByIndex، عدد هست نه استرینگ.
      با این حال برای تبدیل استرینگ به عدد از تابع toInt می‌تونی استفاده کنی،
      مثلا اگر استرینگ شما در متغیر tempC باشد، عبارت ()tempC.toIn
      تبدیل شده‌ی آن به عدد صحیح خواهد بود.

      پاسخ
  • سیدحسین حسینی
    دی ۱۶, ۱۴۰۲ ۲۰:۰۷

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

    پاسخ
    • درود بر شما دوست عزیز
      در این آموزش با خواندن دما آشنا شدیم. برای خاموش و روشن کردن یک رله برحسب دمای خوانده شده، از دستورات شرطی استفاده می‌کنیم. برای مثال در کد زیر، در صورتی که دما از ۲۵ درجه بیشتر باشد پایه دیجیتال ۱ آردوینو را HIGH کرده‌ایم و در غیر اینصورت پایه LOW می‌شود.
      pinMode(1, OUTPUT);
      if(sensors.getTempCByIndex(0)>۲۵)
      {
      digitalWrite(1, HIGH);
      }
      دستور اول مربوط به خروجی کردن پایه ۱ است که می‌بایست در قسمت setup قرار گیرد و دستور if دستور شرطی است.
      دستور شرطی در بخش LOOP برنامه قرار می‌گیرد تا مقایسه به طور مداوم انجام شود.
      همچنین برای راه‌اندازی رله، مطالعه مقاله‌های مربوطه نیز خالی از لطف نیست.
      آموزش راه اندازی رله با آردوینو
      اتصال ماژول رله ۵ ولت یک كاناله به آردوينو

      پاسخ

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات