آموزش راه اندازی ds18b20 با آردوینو -توضیح خط به خط کد

مقدمه

با سلام خدمت همه شما دوستان. در این جلسه قصد داریم در مورد نحوه راه اندازی سنسور ds18b20 با آردوینو صحبت کنیم. برای فهم کامل این جلسه ، حتما باید یک سری دستورات پایه ای در مورد آردوینو رو بشناسید. پیشنهاد ما این هست که اگه زیاد با آردوینو آشنایی ندارید ، از لینک زیر ، به دوره مقدماتی آردوینو وبسایت ما یک سر بزنید:

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

شناخت سنسور ds18b20

این سنسور ، یک سنسور دما است که محصول شرکت Maxim Integrated هست که دقتی قابل تنظیم از 9 الی 12 بیت رو داره. هر سنسوری یک کد 64 بیتی یکتا داره که باعث میشه اگه چند تا سنسور رو بخوایم راه اندازی کنیم ، به مشکل بر نخوریم. ضمن این که این سنسور بسیار ساده راه اندازی میشه و خطای بسیار معقولی هم داره. مقدار این خط برای رنج 10- درجه تا 85+ درجه برابر 0.5 درجه سانتیگراد و برای 55- تا 125+ برابر 2 درجه سانتیگراد هست. در زیر ما مشخصات کلی این سنسور رو آوردیم:

  • ارسال و دریافت دما تنها با استفاده از یک پایه
  • این سنسور سه پایه دارد که یک پایه برای VCC ، یک پایه برای GND و پایه دیگر برای دیتا است.
  • هر سنسور یک کد 64 بیتی مخصوص به خود دارد که بر روی ROM آن ذخیره شده است.
  • رنج اندازه گیری این سنسور از 55- تا 125+ است.
  • ولتاژ کاری این سنسور از 3.0 ولت تا 5.5 ولت هست.
  • بدون نیاز به هیچ قطعه خارجی راه اندازی می شود.
  • در سه پکیج 8 پین SO  و 8 پین uSOP و 3 پین TO-92 وجود داره که البته ما اکثرا اون را با پکیج TO-92 میشناسیم.

این سنسور در موارد زیر هم به گفته دیتایشت اون ، کاربرد خواهد داشت:

  • سیستم های صنعتی
  • ترمومترها
  • سیستم های حرارتی حساس
  • محصولات قابل فروش

بخش سخت افزار:

قطعات مورد نیاز:

راه اندازی این سنسور بسیار ساده هست و ما به قطعات زیادی نیاز نخواهیم داشت. برای راه اندازی تنها به قطعات زیر نیاز داریم:

  • یک نمونه برد Arduino ( مثل UNO یا DUE یا …)
  • یک سنسور دمای DS18B20
  • برد برد
  • تعدادی سیم
  • یک مقاومت 4.7 کیلو ( البته میتویند از رنج های نزدیک به این مقاومت هم استفاده کنید)

اتصال سنسور به برد آردوینو:
شاید ابتدا بهتر باشه نگاهی دقیق تر به خود این سنسور داشته باشیم:

پایه های سنسور ds18b20

همونطور که گفتیم این سنسور سه تا پایه داره که یک پایه مربوط به VCC ، یک پایه مربوط به GND و پایه دیگر مربوط به دیتا میباشد. نحوه اتصال این سنسور به برد آردوینو هم در شکل زیر آورده شده است:

راه اندازی ds18b20 با آردوینو

نکته مهم در این شکل ، استفاده از مقاومت 4.7 کیلو بین پایه های VCC و Data است که حتما باید قرار داده شود و در صورت قرار ندادن ، داده ای را در خروجی نخواهیم داشت. نکته دیگر هم این که باید پایه دیتا به یکی از پایه های دیجیتال متصل شود.

قسمت نرم افزاری:

در قسمت نرم افزاری پیش از هر چیز باید کتابخانه مربوط به این سنسور رو نصب کنیم. ما در مورد نحوه نصب یک کتابخانه قبلا توضیحاتی رو دادیم که میتونید از این لینک اون رو بخونید.

ما در اینجا به دو کتابخانه نیاز خواهیم داشت.  کتابخانه OneWire و کتابخانه Dallas Temperature . این دو کتابخانه را میتوانید از لینک زیر دانلود کنید:

پس از این که این کتابخانه ها رو نصب کردید ، حالا باید بریم سر وقت کد راه اندازی. ابتدا کد زیر رو ببینید تا در ادامه این کد رو خط به خط توضیح بدیم:

 

در خطوط 3 و 4 که فایل های هدر مربوط به این کتابخانه ها به برنامه اضافه شده اند.

در خط 7 ما یک ثابت با نام “ONE_WIRE_BUS” تعریف کردیم و مقدارش رو برابر 2 قرار دادیم. در واقع در این خط قصد داریم بگیم که سیم مربوط به دیتا به پایه شماره 2 دیجیتال متصل میشه.

در خط شماره 11 ما در واقع پروتکل onewire رو راه اندازی کردیم تا بتونیم با سنسورهای مختلفی که از این پروتکل پشتیبانی میکنن ، ارتباط برقرار کنیم.

در خط شماره 14 ارتباط بین پروتکل onewire و سنسور دمای خودمون رو برقرار کردیم.

در خط شماره 19 ارتباط سریال رو با نرخ 9600 راه اندازی کردیم تا بتونیم داده ها رو روی پنجره سریال مشاهده کنیم.

در خط 20 ، روی خروجی نوشتیم عبارت “Dallas Temperature IC Control Library Demo” نوشته شده است که به معنای استفاده دمو از این کتابخانه است.

در خط شماره 21 ، ما یک سری تنظیمات اولیه رو به سنسور میدیم .

در خط شماره 29 ما بر روی پنجره سریال عبارت “Requesting temperatures…” رو چاپ میکنیم چون در خط بعد میخوایم این درخواست رو به سنسور بفرستیم.

در خط شماره 30 ما درخواست ارسال دما رو از سنسور میکنیم.

در خط شماره 31 عبارت “DONE” بر روی پنجره خروجی نمایش داده میشه و به معنای “انجام شدن درخواست ارسال داده به سنسور” هست.

در خط شماره 33 بر روی پنجره خروجی عبارت Temperature is نوشته می شود ، چون در مرحله بعد ، قصد داریم دما را بر روی خروجی نمایش دهیم.

در خط شماره 34 هم ، مقدار دما به وسیله تابع sensors.getTempCByIndex(0) خوانده میشه و بر روی پنجره خروجی به نمایش در میاد. علت این که مقدار آرگومان این تابع برابر 0 هست اینه که ما فقط داریم اطلاعات رو از یک سنسور میخونیم. چون ممکنه در آینده  قصد داشته باشیم که اطلاعات رو از چند سنسور بخونیم اون موقع این پارامتر به کمک ما خواهد اومد.

پس از کامپایل و اجرای این کد در خروجی خواهیم داشت:

/********************************************************************/
// First we include the libraries
#include <OneWire.h> 
#include <DallasTemperature.h>
/********************************************************************/
// Data wire is plugged into pin 2 on the Arduino 
#define ONE_WIRE_BUS 2 
/********************************************************************/
// Setup a oneWire instance to communicate with any OneWire devices  
// (not just Maxim/Dallas temperature ICs) 
OneWire oneWire(ONE_WIRE_BUS); 
/********************************************************************/
// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
/********************************************************************/ 
void setup(void) 
{ 
 // start serial port 
 Serial.begin(9600); 
 Serial.println("Dallas Temperature IC Control Library Demo"); 
 // Start up the library 
 sensors.begin(); 
} 
void loop(void) 
{ 
 // call sensors.requestTemperatures() to issue a global temperature 
 // request to all devices on the bus 
/********************************************************************/
 Serial.print(" Requesting temperatures..."); 
 sensors.requestTemperatures(); // Send the command to get temperature readings 
 Serial.println("DONE"); 
/********************************************************************/
 Serial.print("Temperature is: "); 
 Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"?  
   // You can have more than one DS18B20 on the same bus.  
   // 0 refers to the first IC on the wire 
   delay(1000); 
} 

 

و همونطور که مشاهده میکنید ، دما بر روی خروجی نمایش داده میشه.

Dallas Temperature IC Control Library Demo
 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...DONE
Temperature for Device 1 is: 24.37 Requesting temperatures...

 

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

اشتراک گذاری:
مطالب زیر را حتما بخوانید

6 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • با سلام برای کالیبره کردن سنسور میشه دستکاری رو برنامه کرد؟

    • با سلام و احترام.
      پیشنهاد می شود برای کالیبراسیون سنسور از یک کد جداگانه استفاده کنید. لینک مربوط به کالیبراسیون این سنسور در زیر آورده شده است :
      آموزش کالیبراسیون ds18b20
      موفق باشید.

  • با سلام و عرض خسته نباشید خدمت شما.لینکی کتاب خونه داخلش هست بالا نیامده.اگه میشه لینک رو اضافه کنید.ممنون

دیدگاهتان را بنویسید