معرفی سنسور دماسنج دیجیتال DS18B20
سنسور دما DS18B20 یک سنسور دما با خروجی دیجیتال است که قادر به اندازهگیری دما در محدوده منفی ۵۵ الی ۱۲۵ درجه ساتتی گراد با دقت ۰٫۰۶۲۵ اندازهگیری نمود. از ویژگیهای دیگر سنسور دماسنج DS18B20 میتوان به موارد زیر اشاره نمود:
- پروتکل ارتباطی تک سیمه یا one wire
- تغذیه ۳ الی ۵٫۵ ولت
- رنج اندازهگیری دما منفی ۵۵ الی ۱۲۵ درجه سانتی گراد (منفی ۶۷ الی ۲۵۷ درجه فارنهایت)
- رزولوشن ۹ الی ۱۲ بیت
- زمان پاسخ گویی ۷۵۰ میلیثانیه در حالت ۱۲ بیت
- قابلیت تغذیه شدن فقط از طریق پین DATA (توصیه نمیشود)
سخت افزار مورد نیاز
مقاومت ۴٫۷ کلیواهم
اتصال سنور دماسنج دیجیتال DS18B20 به برد آردوینو
این سنسور یکی از سادهترین سنسورهای دجیتال بوده است. گذشته از پین VCC و GND ، این سنسور یک تک پین سیگنال دیجیتال دارد که همانطور که در تصویر مشاهده میکنید ما آن را به پین دیجیتال شماره ۲ آردوینو متصل کرده ایم. همچنین این سنسور برای راهاندازی نیاز به یک مقاومت پولآپ ۴٫۷ کیلواهم بین پین سیگنال و پین پاور دارد.( بنده سعی کردم از پولآپ داخلی خود آردوینو استفاه کنم ولی متاسفانه نتیجهای نگرفتم ، شما هم امتحان کنید و اگر نتیجهای گرفتید ما را هم مطلع کنید 🙂 )
البته باید بگم که راهی هم وجود دارد که این سنسور را تنها به یک سیم به آردوینو وصل کرد ( بدون VCC و از پین دیتا تغذیه شود) ولی به دیل اینکه کد را کند میکند ، تصمیم گرفتم روش فوق را آموزش بدم.
کد نویسی سنسور دما DS18B20 آردوینو
همانظور که در ابتدای مطلب گفته شد ، میتوان تعداد زیادی از سنسور DS18B20 را به یک گذرگاه متصل نمود ولی ما برای این آموزش فقط از یکی از آنها استفاده میکنیم و کدمان هم فقط یک سنسور را پشتیبانی میکند. بنابراین اگر نیاز داشتید که از تعداد بیشتری از این سنسور استفاده کنید ، برای ما کامنت بزارین تا راهنماییتون کنیم. کتابخانهای که در وبسایت رسمی قرار داره کمی پیچیدس و بعضی اوقات دارای مشکل میشه برای همین ما لایبرری برای شما آماده کردیم که راحتتر بتونین با این سنسور ارتباط برقرار کنید.کتابخانه را از لینک زیر دانلود کنید و طبق آموزش زیر آن را به نرم افزار آردوینو خود اضافه کنید. کتابخانه DS18B20 آردوینو و آموزش نصب کتابخانه در نرم افزار arduino حال کدهای زیر را بر روی آردوینو خود آپلود کنین و نتیجه را بر روی سریال مانیتور نرم افزار آردوینو مشاهده کنید.
#include <OneWire.h> int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2 //Temperature chip i/o OneWire ds(DS18S20_Pin); // on digital pin 2 void setup(void) { Serial.begin(9600); } void loop(void) { float temperature = getTemp(); Serial.println(temperature); delay(100); //just here to slow down the output so it is easier to read } float getTemp(){ //returns the temperature from one DS18S20 in DEG Celsius byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1000; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return -1000; } if ( addr[0] != 0x10 && addr[0] != 0x28) { Serial.print("Device is not recognized"); return -1000; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float tempRead = ((MSB << 8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16; return TemperatureSum; }
این کد یک برنامه ساده برای اندازهگیری دما با استفاده از سنسور DS18S20 (معمولاً نوعی از DS18B20) را نشان میدهد. سنسور DS18S20 از پروتکل ۱-Wire برای ارتباط با میکروکنترلر استفاده میکند. این کد با اتصال سنسور DS18S20 به پین دیجیتال ۲ میکروکنترلر، دمای محیط را اندازهگیری و در کنسول سریال نمایش میدهد.
این کد از کتابخانهی OneWire استفاده میکند. در ابتدای کد، پین مربوط به سنسور (DS18S20_Pin) انتخاب شده و شیء ds از نوع OneWire با استفاده از این پین ایجاد میشود.
در تابع setup، ارتباط سریال با سرعت ۹۶۰۰ بیت در ثانیه شروع میشود.
تابع loop مقادیر دما را در انتهای هر بار اجرا به کنسول سریال میفرستد.
تابع getTemp مسئول اندازهگیری دما و محاسبه آن است.
در ابتدای تابع getTemp، آدرس دستگاه را مشخص میکند و از طریق پروتکل ۱-Wire با سنسور ارتباط برقرار میکند.
سپس، مقادیر دما را از حافظهی داخلی سنسور خوانده و محاسبه میکند.
دمای محیط به صورت دوازدهمیانگین برگشت داده میشود.
در صورتی که هیچ سنسوری در شبکه ۱-Wire شناسایی نشود یا اعتبار CRC اطلاعات دریافتی مشکل داشته باشد، دما به مقدار -۱۰۰۰ تنظیم میشود.
اگر دستگاه تشخیص داده شده نوع ۰x10 یا ۰x28 نباشد، پیام “Device is not recognized” در کنسول سریال نمایش داده میشود.
در انتها، دمای محیط به صورت float واحد درجه سلسیوس برگشت داده میشود.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
با سلام و تشکر از زحماتی که کشیدین ….
آموزش فوق العاده جالبی بود …. خیلی استفاده کردم …..
می خواستم اگه ممکنه محبت کنین و راهنمایی های لازم در خصوص استفاده از چند سنسور بصورت همزمان را برای من ارسال نمایید و یا اگه بتونین بصورت یک جلسه اموزش مجزا و مرتبط با این آموزش آن را قرار بدین فکر کنم خیلی مفید باشه و به خیلی ها ایده بده ….
باز هم از لطفتون بسیار متشکرم ….
با سلام
ضمن تشکر از توجه شما، برای این موضوع میتوانید به دیگر آموزشهای سایت مراجعه کنید.
با سلام و سپاس از آموزش عالیتون
بنده هم دوست دارم آموزش استفاده از چند سنسور را آموزش بدین. هم بیان آموزشتون شیواست و هم پر محتوی است. ممنون میشم از لطفتون
سلام و ممنون از آموزش عالیتون
آیا این سنسور کالیبره شده هست …؟؟؟؟
ممنون
با سلام
خیر، البته منظورتان را از کالیبره اگر دقیقتر بیان کنید، راهنمایی کامل صورت میگیرد.
با سلام. ممنون میشم اگر برنامه ارتباط hx711 و برد اردوینو و لود سل را داریدٰ به من کمک کنید. من نیاز دارم در هر لحظه میزان تنش را اندازه بگیرم. یعنی خروجی برنامه به صورت زمان و تنش باشه. میشه کمکم کنین؟
با سلام
ضمن تشکر از توجه شما، در حال حاضر برنامهای برای انتشار این آموزش نداریم.
سلام
دلیلش چیه که ۱۰۰۰- نمایش میدم ؟
با سلام
لطفا اعلام کنید اتصالات را چطور انجام دادهاید؟ همچنین از چه مقاومتی در ورودی استفاده کردهاید؟
با سلام من این برنامه را اجرا میکنم ولی در خروجی به حای دما ظرفیت خازن میده !
capacitance value = 0.072 pF
لطفا راهنمایی کنید
سلام
با توجه به اینکه ظرفیت خازن نمایش میدهد به احتمال زیاد در اتصالات اشتباه کرده اید و یا ایراد از تنظیمات سریال مانیتور است. لطفا اطلاعات کاملتری از نحوه ی اجرا و اتصالات بیان کنید تا راهنمایی کامل تری صورت گیرد.
سلام
دقیق ترین سنسور دما کدوم مدله؟ که تغییراتش کم باشه موقعی که دما ثابته
با سلام
ضمن تشکر از توجه شما، در این خصوص انتخابهای زیادی وجود دارند و سوال شما بسیار کلی است. برای سنجش دمای محیطی میتوان به سنسور DHT22 اشاره کرد و برای سنجش دمای تماسی تا ۱۵۰ درجه به سنسور DT100 و یا همین سنسور DS18B20 اشاره کرد.
خیلی ممنون از لطفتون
سلامت باشید.
تا چه مسافتی میتونیم سنسور رو با سیم از آردوینو دور کنیم؟ با این شرط که سنسور دچار مشکل یا پارازیت نشه
با سلام
ضمن تشکر از توجه شما، در این خصوص تجربه عملی نیاز است. اطلاعاتی در دیتاشیت ذکر شده است ولی شما باید با توجه به شرایط محیطی تست کنید. در این خصوص از دیگر کاربران که تخصص کافی در این زمینه دارند، تقاضا دارم تا در بحث شرکت کنند.
سلام
ممنون از مطلب جالبی که زحمتش رو کشیدی .من میخوام با استفاده از چند سنسور در نقاط مختلف با استفاده از یک کیت آردوینو مقدار دمایی اون نقاط رو داشته باشم.لطفا راهنمایی کن این مطلب رو چطور در برنامه قرار بدم.
با سلام
ضمن تشکر از توجه شما، منظور شما این است که دمای چند سنسور را به صورت میانگین محاسبه کنید؟ در این صورت پروژه جالبی خواهد بود، پیشنهاد میشود از کتابخانهی DallasTemperature.h استفاده کنید.
باسلام احمدی پور تستم ممنون از اموزشهاتون
اگر بخوام دمای بدست امده از سنسور رو در نقطه ۱به صورت بیسیم به نقطه ۲اون هم داخل مانیتور بفرستم چه اموزشی دارید
ممنونم
با سلام و تشکر از شما
در این خصوص به چند روش میتوان اطلاعات را ارسال کرد. یکی استفاده از ماژول وای فای برای ارسال دیتا، که از طریق شبکه لوکال و یا اینترنت میتواند صورت گیرد. روش دیگر هم استفاده از ماژولهای فرستنده گیرنده رادیویی است. در این حالت نیاز به دو ماژول دارید یکی برای ارسال دیتا و دیگری برای دریافت دیتا میباشد. پیشنهاد میکنم آموزش ساخت خانه هوشمند با ماژول ESP8266 وب سرور لوکال گرافیکی را مطالعه بفرمایید. سپس سوالاتتان را از طریق قسمت نظرات مطرح بفرمایید.
سلام من این سنسور رو با اردوینو لئوناردو می خوام راش بندازم ولی هنگام اپلود ارور avrdud:ser_open():cant open device //./com1″:the system cantfind thefile specified رو نشون می ده
سلام
این ارور مربوط به عدم شناسایی پورت است.
نوع برد و پورت را به درستی انتخاب کرده اید؟
عالی بود! خیلی مختصر و مفید.
در دنیای پر از اطلاعات امروز که آدم حوصلهاش نمیکشه متنهای پر از حاشیه و در آخر بیمحتوا بخونه!
من به استفاده چند سنسور دما همزمان خیلی نیاز دارم! اگه امکانش هست راهنمایی کنید.
با سلام
از توجه شما ممنونم.
در این خصوص بایستی آدرس i2c هر سنسور را در کدها اضافه کنید.