

آشنایی با سنسور DS18b20


مقدمه
سلام، همین اول کار بهتره بگیم سنسور DS18b20 سنسور دما هست.
همونطور که میدونید یکی از پرکاربردترین سنسورهایی که در اطراف ما استفاده می شه، سنسور دماست.
سنسور های دمای متنوعی در بازار وجود دارد. یکی از این سنسورها که دقت نسبتا بالایی داره، سنسور DS18b20 هست. در این آموزش با ناین سنسور آشنا میشید.
آنچه در این آموزش یاد می گیرید
- سنسور DS1bB20 جیست؟
- معرفی انواع مختلف این سنسور
- راه اندازی سنسور DS18b20 با آردوینو
سنسور DS18b20 چیست؟
سنسور DS18b20 یک سنسور دما با قابلیت اندازه گیری در بازه 55- تا 125+ درجه سانتی گراد و با دقت 0.5 درجه سانتی گراد هست.
دقت خروجی این سنسور از 9 تا 12 بیته که به صورت پیش فرض روی 12 بیت تنظیم شده.
پروتکل ارتباطی این سنسور تک سیمه (One Wire) هست و شما تنها با اتصال یک سیم به پردازندتون، قادر به اندازه گیری دمای محیط هستید.
برای آشنایی بیشتر با این سنسور دما بهتره یه نگاهی به دیتاشیتش بندازید.
یکی از بزرگترین مزیت های این سنسور، وجود پروتکل ارتباطی تک سیمه است. در این پروتکل هر سنسور دارای یک کد 64 بیتی یکتا است. با استفاده از این قابلیت، شما می تونیدتا خروجی چندین سنسور DS18b20 را به صورت مشترک به یک پایه پردازنده وصل کنید.
مدل های مختلف سنسور DS18b20
این سنسور دما در شکل های مختلفی در بازار به فروش میرسه. از خود آی سی گرفته تا به صورت ماژولی و ضد آب. شکل های زیر برخی از انواع این سنسوره که در بازار ایران هم موجوده.






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


این سنسور دارای 3 پایس(البته به جز آی سی SMD):
- VCC: تغذیه ماژول – 3 تا 5 ولت
- GND: زمین
- DQ: خروجی سنسور
راه اندازی سنسور دما DS18b20 با آردوینو
راه این سنسور با آردوینو خیلی خیلی سادس و مثل خیلی از پروژه های آردوینویی کار ا کتابخونه انجام میشه.
اول باید کتابخونه های مورد نیاز سنسور رو نصب کنید. برای این کار از منوی Sketch به بخش Include Library برید و Manage Libraries را انتخاب کنید. در پنجره ی باز شده، 2 کتابخونه ی زیر را نصب کنید. (کتابخونه های DallasTemperature و OneWire)




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


ماژول های DS18b20 معمولا خودشون پایه ی خروجی سنسور رو پول آپ کردن (پایه خروجی سنسور رو با یک مقاومت به تغذیه وصل کردن). اگر از این ماژول ها استفاده می کنید، نیاز نیست خودتون پایه ی خروجی رو مجدد پول آپ کنید.
کد
کد زیر رو روی آردوینو خود آپلود کنید. این کد خروجی سنسور دما رو می خونه و اونو در پنجره ی سریال نشون میده.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
/* DS18B20 Temperature Sensor modified on 06 Nov 2020 by Mohammad Reza Akbari @ Ario Electronic https://ariopulse.com/academy/arduino/ */ #include <OneWire.h> #include <DallasTemperature.h> // Connect Sensor output to pin2 #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); /* The setup function. We only start the sensors here */ void setup(void) { Serial.begin(9600); sensors.begin(); } void loop(void) { sensors.requestTemperatures(); // Send the command to get temperatures float temp = sensors.getTempCByIndex(0); // Check if reading was successful if (temp != DEVICE_DISCONNECTED_C) { Serial.print("Temperature of Sensor 0 is: "); Serial.println(temp); } else { Serial.println("Error to reading data"); } } |
اینم از خروجی کار:


توضیح بخش های مختلف کد
در ابتدای کد، کتابخونه های مورد نیاز رو به کد اضافه میشن.
1 2 |
#include <OneWire.h> #include <DallasTemperature.h> |
در این خط شماره پایه ی آردونو که قراره خروجی سنسور دما به اون وصل شه رو مشخص می کنید.
1 |
#define ONE_WIRE_BUS 2 |
اینجا یک شئ از کلاس OneWire و یک شئ از کلاس DallasTemperature می سازید. (اینجا جای توضیح نیست که شئ و کلاس چیه، ولی اگه با مفهموم شئ و کلاس آشنا نیستین، نگران نباشین، فقط این دو خط رو در کدتون قرار بدین)
1 2 |
OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); |
در بخش setup ارتباط سریال و سنسور دما را را اندازی می کنیم. (با استفاده از تابع begin)
1 2 3 4 5 |
void setup(void) { Serial.begin(9600); sensors.begin(); } |
در بخش loop مقدار سنسور را میخونید و اونو در متغیر temp میریزید. بعد این متغیر را روی پنجره ی سریال چاپ می کنید.
دستور sensors.requestTemperatures() به تمام سنسورهایی که خروجی آن ها به پایه 2 وصل شده است فرمان می دهد که مقدار دما را برای ارسال آماده کنند.
با استفاده از دستور getTempCByIndex(0) مقدار سنسور شماره 0 (اولین سنسوری که به پایه 2 متصل است) را می خونید. اگر تعداد سنسورهای بیشتری داشتین، باید با تغییر 0، مقدار تک تک اونارو بخونین.
اگر سنسور به درستی به آردوینو وصل نشده باشد یا هر مشکلی در خواندن مقدار سنسور پیش بیاید، مقدار temp به صورت DEVICE_DISCONNECTED_C می شه. در این حالت در پنجره ی سریال عبارت “Error to reading data” نمایش داده می شه.
دیدید! کار با سنسور Ds18b20 خیلی آسونه!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void loop(void) { sensors.requestTemperatures(); // Send the command to get temperatures float temp = sensors.getTempCByIndex(0); // Check if reading was successful if (temp != DEVICE_DISCONNECTED_C) { Serial.print("Temperature of Sensor 0 is: "); Serial.println(temp); } else { Serial.println("Error to reading data"); } } |
نتیجه گیری
از امروز ببعد به راحتی می تونید از سنسور DS18b20 توی پروژه هاتون استفاد کنید، سنجش دما خیلی وقتا توی خیلی از پروژه ها ضروریه.
برای تمرین بیشتر سعی کنید دمای اتاقتون رو روی نمایشگر نشون بدید. (برای راهنمایی این آموزش رو بخونید)