اتصال سنسور دما DS18B20 به برد آردوینو (آموزش کامل)

محتویات
در این مقاله به صورت کامل با سنسور دما DS18B20 آشنا میشویم. سپس نحوه اتصال این سنسور به برد آردوینو را یاد میگیریم. در ادامه نحوه راه اندازی چندین سنسور DS18B20 به برد آردوینو آموزش داده میشود.
سنسور دما DS18B20
سنسور دمای DS18B20 یک سنسور دمای دیجیتال تک سیم است. این بدان معناست که برای ارتباط با آردوینو فقط به یک خط داده (و GND) نیاز دارد.
این سنسور می تواند توسط یک منبع تغذیه خارجی تغذیه شود یا می تواند برق را از همان خط داده (به نام “حالت انگل”) دریافت کند، که نیاز به منبع تغذیه خارجی را از بین می برد.
پین های سنسور دما DS18B20
جدول زیر نحوه اتصال سنسور DS18B20 را به برد آردوینو نشان می دهد:
DS18B20 | Arduino |
GND | GND |
DQ | DQ هر پین دیجیتال (با مقاومت 4.7 کیلو اهم) |
VDD | 5V (حالت عادی) یا GND (حالت انگل) |
هر سنسور دمای DS18B20 دارای یک کد سریال منحصر به فرد 64 بیتی است. این به شما امکان می دهد چندین سنسور را به یک سیم داده متصل کنید. بنابراین، می توانید دما را از چندین سنسور فقط با استفاده از یک پین دیجیتال آردوینو دریافت کنید.
سنسور دمای DS18B20 در نسخه ضد آب نیز موجود است.

در اینجا خلاصه ای از اصلی ترین مشخصات سنسور دمای DS18B20 آمده است:
- از طریق ارتباط باس یک سیمه ارتباط برقرار می کند
- محدوده منبع تغذیه: 3.0 ولت تا 5.5 ولت
- محدوده دمای کارکرد: -55 درجه سانتیگراد تا +125 درجه سانتیگراد
- دقت +/-0.5 ºC (بین محدوده -10ºC تا 85ºC)
برای اطلاعات بیشتر به دیتاشیت DS18B20 مراجعه کنید.
اندازه گیری دما با سنسور DS18B20 و آردوینو
برای اینکه به شما نشان دهیم حسگر چگونه کار می کند، یک مثال ساده می سازیم که دما را از حسگر DS18B20 با آردوینو می خواند و مقادیر را در مانیتور سریال آردوینو نمایش می دهد.
برای این پروژه به قطعات زیر نیاز دارید:
- Arduino UNO
- سنسور دمای DS18B20 (یک یا چند سنسور) – یا نسخه ضد آب
- مقاومت 4.7 کیلو اهم
- برد بورد
- سیم های جامپر
سنسور می تواند در دو حالت کار کند:
حالت عادی: 3 سیم مورد نیاز است. شما به پین VDD برق می دهید. مانند شماتیک زیر:
حالت انگل: فقط به داده و GND نیاز دارید. سنسور قدرت خود را از خط داده می گیرد. در این مورد، در اینجا شماتیکی است که باید دنبال کنید:
تنها با استفاده از یک پین دیجیتال آردوینو می توانید دمای بیش از یک سنسور را به طور همزمان بخوانید. برای این کار، فقط باید تمام پین های داده حسگرها را به یک پین دیجیتال آردوینو متصل کنید.
کد آردوینو برای سنسور DS18B20
برای ارتباط با سنسور دمای DS18B20، باید کتابخانه One Wire توسط Paul Stoffregen و کتابخانه Dallas Temperature را نصب کنید. مراحل بعدی را برای نصب آن کتابخانه ها دنبال کنید.
پس از نصب کتابخانه های مورد نیاز کد کامل را در برد آپلود کنید. کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مختلف کد را توضیح میدهیم.
کد با گنجاندن کتابخانه های OneWire و DallasTemperature شروع میشود.
#include <OneWire.h>
#include <DallasTemperature.h>
نمونه های مورد نیاز برای سنسور دما را ایجاد کنید. سنسور دما به پایه 4 متصل است.
// سیم داده به پین دیجیتال آردوینو 4 متصل است const int oneWireBus = 4; // یک نمونه oneWire را برای برقراری ارتباط با هر دستگاه OneWire تنظیم کنید OneWire oneWire (oneWireBus); // مرجع oneWire ما را به سنسور دمای دالاس منتقل کنید DallasTemperature sensors(&oneWire);
در setup()، مانیتور سریال را با نرخ باود 9600 مقداردهی کنید.
Serial.begin(9600);
سنسور دمای DS18B20 را راه اندازی کنید:
sensors.begin();
loop() جایی است که دما را دریافت می کنید. قبل از دریافت مقدار دمای واقعی، باید متد requestTemperatures() را فراخوانی کنید.
sensors.requestTemperatures();
سپس دما را بر حسب سانتیگراد دریافت و چاپ کنید. برای بدست آوردن دما بر حسب سانتیگراد، از متد getTempCByIndex()
استفاده کنید:
Serial.print(sensors.getTempCByIndex(0));
یا از
getTempFByIndex()
برای دریافت دما به فارنهایت استفاده کنید.
Serial.println(sensors.getTempFByIndex(0));
متدهای getTempCByIndex()
و getTempFByIndex()
شاخص سنسور دما را می پذیرند. از آنجا که ما فقط از یک سنسور استفاده می کنیم، شاخص آن 0 است. اگر بیش از یک سنسور دارید، از شاخص 0 برای سنسور اول، شاخص 1 برای سنسور دوم و غیره استفاده کنید.
هر ثانیه خوانش دمای جدید درخواست می شود.
delay(5000);
پس از آپلود کد، مانیتور سریال Arduino IDE را با نرخ باود 9600 باز کنید. شما باید دمای نمایش داده شده در هر دو درجه سانتیگراد و فارنهایت را دریافت کنید:
راه اندازی چند سنسور دما DS18B20 با آردوینو
سنسور دما DS18B20 با استفاده از پروتکل یک سیم ارتباط برقرار می کند و هر سنسور دارای یک کد سریال 64 بیتی منحصر به فرد است، بنابراین می توانید تنها با استفاده از یک پین دیجیتال آردوینو، دما را از چندین سنسور بخوانید.
برای خواندن دما از چندین سنسور، فقط باید تمام خطوط داده را به هم متصل کنید، همانطور که در مدار شماتیک زیر نشان داده شده است:
سپس کد قرار داده شده در فایل دانلودی انتهای صفحه را آپلود کنید. این کد تمام داده ها را از پین 4 میگیرد و در سریال مانیتور چاپ میکند. در اینجا قسمت های مختلف این کد را توضیح میدهیم.
این کد از چندین روش مفید برای کنترل چندین سنسور DS18B20 استفاده می کند.
برای بدست آوردن تعداد سنسورهای DS18B20 در خط داده، از متد getDeviceCount()
استفاده می کنید.
numberOfDevices = sensors.getDeviceCount();
متد getAddress()
آدرس سنسورها را پیدا می کند:
if(sensors.getAddress(tempDeviceAddress, i)){
آدرس برای هر سنسور منحصر به فرد است. بنابراین هر سنسور را می توان با آدرس آن شناسایی کرد.
سپس از متد getTempC()
استفاده می کنیم که آدرس دستگاه را به عنوان آرگومان می پذیرد. با این روش می توانید دما را از یک سنسور خاص دریافت کنید:
float tempC = sensors.getTempC(tempDeviceAddress);
برای بدست آوردن دما بر حسب درجه فارنهایت، می توانید از getTemF()
استفاده کنید. همچنین می توانید دما را بر حسب سانتیگراد به فارنهایت تبدیل کنید:
DallasTemperature::toFahrenheit(tempC)
نتیجه گیری
سنسور دما DS18B20 یک سنسور دیجیتال یک سیم است. برای استفاده از این سنسور با آردوینو، به کتابخانه های OneWire و DallasTemperature نیاز دارید. شما می توانید از یک سنسور یا چندین سنسور در یک خط داده استفاده کنید زیرا می توانید هر سنسور را با آدرس منحصر به فرد آن شناسایی کنید.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود