اگر در اینجا هستید، پس حتما میخواهید سنسور دما دیجیتال DS18B20 را با آردوینو راه اندازی کنید. پس همراه ما باشید تا قدم به قدم انجام این پروژه را به شما آموزش دهیم.
اندازهگیری دما در ساخت بسیاری لوازم و تجهیزات صنایع مختلف اهمیت بسیاری دارد. به همین منظور سنسورهای مختلفی برای اندازهگیری دما به بازار عرضه شدند. از فر اجاق گاز خانه شما گرفته تا تجهیزات پزشکی و لوازم گرمایش و تهویه هوا، همگی از نوعی سنسور دما استفاده میکنند.
اما یکی از سنسورهایی که به علت قیمت ارزان و دقت قابل قبول، معمولا در پروژههای مبتنی بر آردوینو برای سنجش دما مورد استفاده قرار میگیرد، سنسور دمای دیجیتال DS18B20 تک سیمه است. این سنسور نسبتا دقیق است و به قطعه دیگری نیاز ندارد. بنابراین تنها با چند اتصال و یک کد ساده آردوینو، بهراحتی میتوانید، دما را اندازهگیری کنید.
سنسور دما تک سیم DS18B20
اکنون بیایید کمی بیشتر شما را با سنسور دما DS18B20 آشنا کنیم.
DS18B20، سنسور دما تک سیمی است که توسط شرکت نیمه رساناهای دالاس ساخته شده است. این سنسور برای ارتباط با میکروکنترلر، از پروتکل تک سیمه استفاده میکند. به همین دلیل برای ارتباط دو طرفه با میکرو تنها به یک پایه دیجیتال نیاز دارد.
سنسور دما DS18B20، معمولاً دو مدل دارد. یک مدل آن، با پکیج TO-92 است. این مدل دقیقاً مشابه یک ترانزیستور معمولی میباشد. مدل دیگر آن به شکل یک پراب فلزی ضد آب است که هنگامیکه میخواهید دمای زیر آب یا زیر زمین را اندازهگیری کنید، کارایی بسیاری خواهد داشت.
همانطور که قبلا گفتیم، سنسور دما DS18B20 نسبتاً دقیق است و برای کارکردن نیازی به قطعه دیگری ندارد. این سنسور قادر است دمای بین 55- تا 125+ درجه سانتیگراد را با دقت 0.5± درجه سانتیگراد اندازهگیری کند.
رزولوشن سنسور دما DS18B20 بسته به انتخاب کاربر بین 9، 10، 11 و 12 بیت قابل انتخاب است. با این حال، رزولوشن پیشفرض آن، 12 بیت است (یعنی 0.0625 درجه سانتیگراد).
این سنسور میتواند با منبع تغذیه 3 تا 5.5 ولت تغذیه شود و هنگام تبدیل دمای فعال، تنها 1mA مصرف کند. در جدول زیر میتوانید مشخصات کامل این سنسور را مشاهده کنید:
3V to 5.5V | Power Supply |
1mA | Current Consumption |
55°C to 125°C- | Temperature Range |
±0.5°C | Accuracy |
9bit to12bit (selectable) | Resolution |
750ms> | Conversion Time |
چند سنسور DS18B20 روی یک باس
یکی از مزایای بزرگ سنسور دما DS18B20 این است که در یک ارتباط تک سیمه میتوان از چندین سنسور DS18B20 (ماکزیمم 8 سنسور) استفاده کرد و فقط از طریق یک پایه دیجیتال آنها را کنترل نمود. از آنجاییکه هر سنسور DS18B20 دارای یک کد سریال 64 بیتی مجزا است که در کارخانه به آن اختصاص داده شده است، تشخیص آنها از هم بسیار آسان میباشد. این ویژگی این امکان را به شما میدهد تا سنسورهای مختلفی را در نقاط مختلف یک فضای بزرگ کنترل کنید.
برای اینکه یاد بگیرید چگونه دما را از چند سنسور DS18B20 بخوانید، میتوانید مقاله زیر را مطالعه کنید:
آموزش خواندن چند سنسور دما DS18B20 و راه اندازی آنها با آردوینو
پایههای سنسور دما DS18B20
GND : پایه زمین سنسور است.
DQ : پورت داده تک سیم است که باید به پایه دیجیتال یک میکروکنترلر متصل شود.
VDD : پایه تغذیه سنسور است که باید به ولتاژی بین 3.3 تا 5 ولت متصل شود.
سیمکشی – راه اندازی سنسور دما DS18B20 با آردوینو
تا اینجا در مورد سنسور دما DS18B20 و ویژگیهای آن صحبت کردیم. اما الان زمان آن رسیده است که دست به کار شویم و راه اندازی سنسور دما DS18B20 را با آردوینو شروع کنیم.
قطعات مورد نیاز:
- سنسور دما دیجیتال DS18B20 (برای پروژههای آزمایشی و ابتدایی میتوانید از سنسور دما دیجیتال DS18B20 معمولی نیز استفاده کنید.)
- سنسور دما دیجیتال DS18B20 ضد آب (در صورتیکه میخواهید دمای زیر آب یا زیر زمین را اندازهگیری کنید، میتوانید از این سنسور استفاده کنید.)
- مقاومت 4.7 کیلو اهم 1/4 وات
- کاور استیل سنسور دمای DS18B20
- مینی برد بورد 170 سوراخ
- سیم جامپر نری / نری
سیم کشی سنسور دما دیجیتال DS18B20 تک سیم به آردوینو دشوار نیست. برای شروع کار، VDD را به 5 ولت آردوینو و GND را به زمین آردوینو متصل کنید. سپس پایه داده (DQ) را به پایه دیجیتال 2 روی آردوینو متصل نمایید. برای پایدار ماندن انتقال داده باید پایه داده سنسور DS18B20 از طریق یک مقاومت 4.7 کیلو اهمی pull-up شود. ( مقاومت pull-up داخلی آردوینو برای این کار مناسب نیست).
نکته:
حتما از درست نصب شدن سنسور DS18B20 مطمئن شوید. اگر به اشتباه سنسور را نصب کنید، سنسور داغ میشود و میسوزد.
اگر از پراب ضد آب سنسور DS18B20 استفاده میکنید، سیم قرمز را به 5 ولت، سیاه را به زمین و سیم زرد داده را به پایه دیجیتال 2 آردوینو وصل کنید. مشابه حالت قبل حتما باید سیم داده با یک مقاومت 4.7 کیلو pull-up شود.
نصب کتابخانه برای DS18B20
پروتکل تک سیم دالاس تا حدودی پیچیده است و به همین دلیل برای ارتباط دو طرفه با سنسور به کدهای زیادی نیاز است . برای راحت شدن کار، توابع کتابخانهی ِDallas Temperature.h را نصب میکنیم تا بتوانیم برای خواندن دما از سنسور، از دستورهای ساده استفاده کنیم.
برای نصب کتابخانه، به مسیر Sketch>Include Library>Manage Libraries بروید. سپس منتظر بمانید تا مدیریت کتابخانه فهرست کتابخانهها را دانلود کند و لیست کتابخانههای نصب شده را بهروز رسانی نماید.
جستجوی خود را با تایپ DS18b20 فیلتر کنید. پس از این کار چند نتیجه برای شما نمایش داده خواهد شد. Dallas Temperature by Miles Burton را پیدا کنید. سپس، بر روی آن کلیک کنید و گزینه نصب را انتخاب نمایید.
کتابخانه Dallas Temperature یک کتابخانه سخت افزاری است که توابع سطح پایین را مدیریت میکند. این کتابخانه برای اینکه بتواند علاوه بر سنسور DS18B20، با هر دستگاه تک سیم که از پروتکل تک سیم استفاده میکند، ارتباط برقرار کند، باید همراه با کتابخانه One Wire باشد. به همین خاطر این کتابخانه را هم نصب کنید.
کد آردوینو
برای راه اندازی سنسور دما 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);
}
خروجی کد بالا در سریال مانیتور به شکل زیر خواهد بود:
توضیح کد:
برنامه بالا با اضافه کردن کتابخانههای 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
سلام
یه سوال داشتم
کتابخانه رو چطور نصب کنیم.
سلام و درود به شما،
لینک کتابخانه رو قرار دادیم، میتونی کتابخونه رو دانلود کنی و طبق مقاله پیش بری که کاملا توضیح داده شده.
موفق باشی
سلام… بسیار عالی ….من وصل شدم…منتها کد آردینو شما برا یک سنسوره!!!!….اگه ۸ سنسور وصل بشه به یه ورودی دیجیتال، چطور مقادیر تو سریال مانیتور بخونیم؟
سلام امیر عزیز،
یه مقاله دیگه در وبلاگ هست که سه سنسور رو راه اندازی کردیم. اسم مقاله آموزش راه اندازی چند سنسور دما DS18B20 با آردوینوست که
میتونی از این مقاله کمک بگیری. میتونی از لینکی که در همین مقاله هست، بری یا از لینک زیر:
https://roboeq.ir/blog/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%DA%86%D9%86%D8%AF-%D8%B3%D9%86%D8%B3%D9%88%D8%B1-%D8%AF%D9%85%D8%A7-ds18b20-%D8%A8%D8%A7-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88/
بله درست شد متشکرم. … دیتا ها واسه هر سنسور در قسمت سریال مانیتور نشون داده میشه… من الان تو لبویو تونستم به دماهای خروجی که تو نرم افزار آردینو نشون میداد برسم! دیتاهای مانیتور شده به صورت استرینگ هست هم تو آردینو و هم تو لبویو…. آیا میشه دیتاها رو array کرد که بشه برد رو نمودار! یا بشه بصورت دسیمال نشون داد؟ من میخام دیتاها رو برحسب زمان تو فایل تکست یا اکسل سیو کنم!!! الان هم تو لبویو و هم تو آردینو فقط میتونم قرائت کنم مقادیرشون بصورت استرینگ.
سلام مجدد به شما،
بسیار عالی،
خروجی تابع getTempCByIndex، عدد هست نه استرینگ.
با این حال برای تبدیل استرینگ به عدد از تابع toInt میتونی استفاده کنی،
مثلا اگر استرینگ شما در متغیر tempC باشد، عبارت ()tempC.toIn
تبدیل شدهی آن به عدد صحیح خواهد بود.
سلام. و تشکر بابت اموزش فوق العاده خوب شما. چگونه میتوان یک رله را راه اندازی کرد که درصورت تعیین حد بالا و یا پایین دما ، رله کار کند
درود بر شما دوست عزیز
در این آموزش با خواندن دما آشنا شدیم. برای خاموش و روشن کردن یک رله برحسب دمای خوانده شده، از دستورات شرطی استفاده میکنیم. برای مثال در کد زیر، در صورتی که دما از ۲۵ درجه بیشتر باشد پایه دیجیتال ۱ آردوینو را HIGH کردهایم و در غیر اینصورت پایه LOW میشود.
pinMode(1, OUTPUT);
if(sensors.getTempCByIndex(0)>۲۵)
{
digitalWrite(1, HIGH);
}
دستور اول مربوط به خروجی کردن پایه ۱ است که میبایست در قسمت setup قرار گیرد و دستور if دستور شرطی است.
دستور شرطی در بخش LOOP برنامه قرار میگیرد تا مقایسه به طور مداوم انجام شود.
همچنین برای راهاندازی رله، مطالعه مقالههای مربوطه نیز خالی از لطف نیست.
آموزش راه اندازی رله با آردوینو
اتصال ماژول رله ۵ ولت یک كاناله به آردوينو