آموزش راه اندازی ds18b20 با آردوینو – سنسور دما
سلام ، در این جلسه قراره آموزش راه اندازی ds18b20 با آردوینو رو در کنار هم یادبگیریم.
معرفی سنسور ds18b20
ds18b20 یک سنسور دماست که برای ارسال دیتا فقط از یک پایه استفاده میکنه و خروجی اطلاعات اون به شکل دیجیتاله.
این سنسور رنج اندازه گیری 9 تا 12 بیتی داره که میتونیم اون رو در برنامه نویسیمون مشخص کنیم(یعنی قابل تنظیمه).
درسته که این سنسور رنج اندازی گیریش 55- تا 125+ هستش ولی بخاطر ساختاری که داره در دمای رنج 10- درجه تا 85+ فقط میتونه دقت نیم درجه یا بخوام دقیق تر بگم 0.625 درجه ای رو به ما میده و در دمای بالاتر و پایین از 10- درجه تا 85+ دقت اون به مقدار 2 درجه میرسه که در کارهای صنعتی ای که دقت بالا احتیاج ندارن کار آمده.
شکل پایه ها :
این آی سی 2نوع پکیج برای حالت SMD هم داره که شکل پایه هارو در زیر میبینید. توجه کنید که اگر قسمت قوسدار سنسور به سمت شما باشه پایه ها از چپ به راست نامگذاری میشن.
البته یک سری از این سنسور ها با کابل ضد آب هستن که تفاوتی ایجاد نمیکنه و این 3تا پایه توسط کابل به آردوینو وصل میشت و تا فاصله 20 متری میشه بین سنسور و آردوینو فاصله ایجاد کرد.
از مشخصات دیگه ی این سنسور دما بخوام بگم میشه به موارد زیر اشاره کرد:
1- هر سنسور ds18b20 یک کد 64 بیتی یکتا داره که باعث میشه اگر بخوایم چند تا از اون هارو همزمان راه اندازی کنیم به مشکل برنخوریم. این کد 64 بیتی هم در یک حافظه ROM در خود سنسور قرار داده شده.
2- ولتاژ مورد نیاز برای راه اندازی ds18b20 با آردوینو یا میکروکنترلر ها 3 تا 5V هستش.
اگر میخواین بیشتر با سنسور ds18b20 آشنا بشین دیتاشیت اون رو دانلود کنین.
دیتاشیت ds18b20
راه اندازی ds18b20 با آردوینو
پروژه یک :
برای اینکه آموزش سبک استاندارد خودش رو داشته باشه اول اون رو مشابه آموزش سایت اصلی آردوینو راه اندازی میکنیم و بعد میریم سراغ آموزش های بعدی.این آموزش به زبون انگلیسی در لینک زیر موجوده : Temperature Sensor [DS18B20]
برای راه اندازی ds18b20 با آردوینو ما فقط به یک مقاومت 4.7 کیلو نیاز داریم که پایه ی دیتا رو پول آپ کنیم. پس طبق شکل زیر اون رو به آردوینو وصل کنیم:
کتابخونه ی OneWire رو در این پروژه نیاز داریم که میتونین از لینک دانلود سبز رنگ زیر دانلود کنین یا ب وبسایت github برین و از لینک زیر دانلودش کنین : oneWire in Github
و همچنین کتابخونه ی DallasTemperature رو: DallasTemperature
دانلود کتابخانه ی DallasTemperature
کتابخونه رو که دانلود کردین روی مسیر زیر کلیک کنین و در پنجره ای که باز میشه فایل زیپ دانلود شده رو انتخاب کنین تا کتابخونه به نرم افزار معرفی بشه.
کد پروژه :
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 |
//Include 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) { Serial.begin(9600); //Begin serial communication Serial.println("Arduino Digital Temperature // Levinic.ir"); //Print a message 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"? delay(1000); } |
در این پروژه برای نمایش اطلاعات از ارتباط سریال استفاده کردیم.
در ابتدا کتابخونه ها صدا زده شدن و بعد کلاس ONE_WIRE_BUS رو تعریف کردیم و برابر با 2 قرار داده شده ، یعنی سنسور رو به پایه ی دیجیتال شماره 2 وصل میکنیم.
در ادامه مطابق زیر پروتکل onewire یا یک سیمه رو به آردوینو گفتیم راه اندازی کنه تا بتونیم انتقال دیتا بدیم :
1 |
OneWire oneWire(ONE_WIRE_BUS) |
در void setup هم دستور شروع ارتباط سریال و یک سیم رو با دستور begin انجام دادیم .
در حلقه ی loop هم با دستور زیر درخواست ارسال دما رو به سنسور میدیم و بعد خروجیش رو چاپ میکنیم:
1 |
sensors.requestTemperatures(); |
در خط بعد ، عبارت “DONE” بر روی پنجره چاپ میشه و به معنای “انجام شدن درخواست ارسال داده به سنسور” هستش.
تا اینجا ما به سنسور گفتیم که دما رو برای ما ارسال کنه ، حالا دمای ارسال شده رو چطوری نمایش میدیم ؟ با تابع sensors.getTempCByIndex(0) . این تابع مقدار دما رو میخونه و با دستور serial.print اون رو روی صفحه ارتباط سریال نمایش دادیم.
خروجی برنامه در صفحه ارتباط سریال به شکل زیره:
1 2 3 4 5 6 7 8 9 10 11 |
Arduino Digital Temperature // Levinic.ir Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures...DONE Temperature for Device 1 is: 30.55 Requesting temperatures... |
پروژه دوم :
نمایش دما DS18b20 روی lcd کاراکتری
توی این پروژه قراره اطلاعات رو روی lcd هم بر حسب سانتیگراد و هم بر حسب فارنهایت نمایش بدیم.
پس مطابق شکل زیر پایه های lcd به آردوینو متصل میشن :
این بار پایه ی دیتا ی سنسور Ds18b20 رو به به پایه ی دیجیتال شماره 7 آردوینو وصل میکنیم .
کد پروژه :
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 |
#include <OneWire.h> #include <LiquidCrystal.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 7 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); float tempC = 0; float tempF = 0; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { sensors.begin(); lcd.begin(16,2); lcd.clear(); } void loop() { sensors.requestTemperatures(); tempC = sensors.getTempCByIndex(0); tempF = sensors.toFahrenheit(tempC); delay(1000); Serial.println(tempC); lcd.setCursor(0,0); lcd.print("C: "); lcd.print(tempC); lcd.print(" degrees"); lcd.setCursor(0,1); lcd.print("F: "); lcd.print(tempF); lcd.print(" degrees"); } |
تابع های بیشتری در این پروژه نسبه به پروژه قبلی استفاده نشده جز تابع toFahrenheit که دما رو از سانتیگراد به فارنهایت تبدیل میکنه.
دقت کنین که اگر مقدار -127 روی صفحه دیده شد منظور اینه که ارتباط یا کانکشن مشکل داره ، از قطع شدن سیم گراند تا نذاشتن مقاومت پول آپ و .. ممکنه باعث این اتفاق باشه.
اگر با تابع های lcd هم آشنا نیستین به مطلبش مراجعه کنین: راه اندازی LCD کاراکتری با آردوینو .
خروجی کد :
سوالی در رابطه با راه اندازی ds18b20 با آردوینو بود میتونین در بخش کامنت ها بپرسین.
سلام من میخواهم دمای اندازه گیری شده رو به عنوان یک داده در ادامه در اردینو استفاده کنم لطفا بهم بگید چطوری
میتونید خروجی رو در ی متغیر بریزید و استفاده کنین.
اگر هدفتون فقط انجام یک پروژه نیست و آردوینو رو تمایل دارین کامل یادبگیرین پیشنهاد میکنم به بخش زبان C و بعد آردوینو از منو مراجعه کنید جلسه دوم درباره ی متغیر ها توضیح دادم.