آردوینو آردوینو Arduino Uno آموزش آردوینو پروژه های آردوینو پکیج سنسور آردوینو

پروژه با سنسور دما DS18B20 دماسنج دیجیتال با برد Arduino آردوینو

-DS18B20-دماسنج دیحیتال-آردوبنو-arduino
نوشته شده توسط علیرضا قربانی
سنسور دما DS18B20 یک سنسور دمای دیجیتال است که توسط شرکت Maxim Integrated تولید شده است. این سنسور از خانواده‌ی سنسورهای ۱-Wire بوده و از پروتکل ارتباطی ۱-Wire برای انتقال داده‌ها استفاده می‌کند. این سنسور دارای یک آدرس یکتا است که برای تمایز آن از سایر سنسورها استفاده می‌شود.سنسور دما DS18B20 یک شماره سریال خاص با هر اطلاعاتی که ارسال می‌کند میفرستد؛بنابراین اگر ۵۰ تا هم از این سنسور‌ها نیاز داشته باشید می‌توانید آن را فقط به یک گذرگاه وصل کنید و دقیق هم میدانید که اطلاعات دقیقا از کدام سنسور ارسال شده است. خب حالا که تا حدودی با سنسور دماسنج دیجیتال DS18B20 آشنا شدید به سراغ معرفی بیشتر آن و نصب راه‌اندازی آن می‌رویم ، پش در ادامه‌ی آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید.

DS18B20-دماسنج دیحیتال-آردوبنو

 


معرفی سنسور دماسنج دیجیتال DS18B20


سنسور دما DS18B20 یک سنسور دمای دیجیتال است که توسط شرکت Maxim Integrated تولید شده است. این سنسور از خانواده‌ی سنسورهای ۱-Wire بوده و از پروتکل ارتباطی ۱-Wire برای انتقال داده‌ها استفاده می‌کند. این سنسور دارای یک آدرس یکتا است که برای تمایز آن از سایر سنسورها استفاده می‌شود.در سیستم‌های کنترل حرارتی مانند کولرها، گرمایش‌ها و کنترلرهای هوشمند، از DS18B20 برای اندازه‌گیری دما استفاده می‌شود. این سنسور در صنایع مختلف برای کنترل و نظارت بر دما استفاده می‌شود.در سیستم‌های مدیریت محیطی مانند خانه‌هوشمند، ساختمان‌های هوشمند و سیستم‌های کنترل محیطی، DS18B20 برای تنظیم و کنترل دما استفاده می‌شود.در سیستم‌های هواشناسی و محیط‌زیستی، DS18B20 برای اندازه‌گیری دما در محیط‌های مختلف مورد استفاده قرار می‌گیرد.از مزیت‌های DS18B20 می‌توان به دقت بالا، اندازه کوچک، کارکرد با ولتاژ پایین (۳٫۳ ولت یا ۵ ولت)، تحمل از شرایط محیطی سخت و قابلیت اتصال به صورت زنجیره‌ای (از طریق پروتکل ۱-Wire) اشاره کرد. به دلیل این ویژگی‌ها، DS18B20 به عنوان یکی از محبوب‌ترین سنسورهای دما در پروژه‌های الکترونیکی مورد استفاده قرار می‌گیرد.

سنسور دما DS18B20 یک سنسور دما با خروجی دیجیتال است که  قادر به اندازه‌گیری دما در محدوده منفی ۵۵ الی ۱۲۵ درجه‌ ساتتی گراد با دقت ۰٫۰۶۲۵ اندازه‌گیری نمود. از ویژگی‌های دیگر سنسور دماسنج DS18B20 می‌توان به موارد زیر اشاره نمود:

  • پروتکل ارتباطی تک سیمه یا  one wire
  • تغذیه ۳ الی ۵٫۵ ولت
  • رنج اندازه‌گیری دما منفی ۵۵ الی ۱۲۵  درجه سانتی گراد (منفی ۶۷ الی ۲۵۷ درجه فارنهایت)
  • رزولوشن ۹ الی ۱۲ بیت
  • زمان پاسخ گویی ۷۵۰ میلی‌ثانیه در حالت ۱۲ بیت
  • قابلیت تغذیه شدن فقط از طریق پین DATA (توصیه نمی‌شود)

 

 


سخت افزار مورد نیاز


برد آردوینو Arduino UNO

سنسور دماسنج دیجیتال DS18B20

مقاومت ۴٫۷ کلیواهم

 


 اتصال سنور دماسنج دیجیتال DS18B20 به برد آردوینو


این سنسور یکی از ساده‌ترین سنسورهای دجیتال بوده است. گذشته از پین VCC و GND  ، این سنسور یک تک پین سیگنال دیجیتال دارد که همانطور که در تصویر مشاهده میکنید ما  آن را به پین دیجیتال شماره ۲ آردوینو متصل کرده ایم. همچنین این سنسور برای راه‌اندازی نیاز به یک مقاومت پول‌آپ ۴٫۷ کیلواهم بین پین سیگنال و پین پاور دارد.( بنده سعی کردم از پول‌آپ داخلی خود آردوینو استفاه کنم ولی متاسفانه نتیجه‌ای نگرفتم ، شما هم امتحان کنید و اگر نتیجه‌ای گرفتید ما را هم مطلع کنید 🙂 )

سنسور دمای دیجیتال DS18B20 آردوینو Arduino

 

البته باید بگم که راهی هم وجود دارد که این سنسور را تنها به یک سیم به آردوینو وصل کرد ( بدون 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
    لطفا راهنمایی کنید

    • سلام
      با توجه به اینکه ظرفیت خازن نمایش میدهد به احتمال زیاد در اتصالات اشتباه کرده اید و یا ایراد از تنظیمات سریال مانیتور است. لطفا اطلاعات کاملتری از نحوه ی اجرا و اتصالات بیان کنید تا راهنمایی کامل تری صورت گیرد.

  • تا چه مسافتی میتونیم سنسور رو با سیم از آردوینو دور کنیم؟ با این شرط که سنسور دچار مشکل یا پارازیت نشه

    • با سلام
      ضمن تشکر از توجه شما، در این خصوص تجربه عملی نیاز است. اطلاعاتی در دیتاشیت ذکر شده است ولی شما باید با توجه به شرایط محیطی تست کنید. در این خصوص از دیگر کاربران که تخصص کافی در این زمینه دارند، تقاضا دارم تا در بحث شرکت کنند.

  • سلام
    ممنون از مطلب جالبی که زحمتش رو کشیدی .من میخوام با استفاده از چند سنسور در نقاط مختلف با استفاده از یک کیت آردوینو مقدار دمایی اون نقاط رو داشته باشم.لطفا راهنمایی کن این مطلب رو چطور در برنامه قرار بدم.

    • با سلام
      ضمن تشکر از توجه شما، منظور شما این است که دمای چند سنسور را به صورت میانگین محاسبه کنید؟ در این صورت پروژه جالبی خواهد بود، پیشنهاد می‌شود از کتابخانه‌ی DallasTemperature.h استفاده کنید.

  • باسلام احمدی پور تستم ممنون از اموزشهاتون
    اگر بخوام دمای بدست امده از سنسور رو در نقطه ۱به صورت بیسیم به نقطه ۲اون هم داخل مانیتور بفرستم چه اموزشی دارید
    ممنونم

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

  • سلام من این سنسور رو با اردوینو لئوناردو می خوام راش بندازم ولی هنگام اپلود ارور avrdud:ser_open():cant open device //./com1″:the system cantfind thefile specified رو نشون می ده

    • سلام
      این ارور مربوط به عدم شناسایی پورت است.
      نوع برد و پورت را به درستی انتخاب کرده اید؟

  • عالی بود! خیلی مختصر و مفید.
    در دنیای پر از اطلاعات امروز که آدم حوصله‌اش نمی‌کشه متن‌های پر از حاشیه و در آخر بی‌محتوا بخونه!
    من به استفاده چند سنسور دما هم‌زمان خیلی نیاز دارم! اگه امکانش هست راهنمایی کنید.

    • با سلام
      از توجه شما ممنونم.
      در این خصوص بایستی آدرس i2c هر سنسور را در کدها اضافه کنید.