راهاندازی سنسور دما DS18b20 با آردوینو
شاید نیاز باشد در یک مکان، دما را در شرایط مختلف محیطی اندازهگیری کنیم و طبق یک زمان بندی خاص اطلاعات را ارسال کنیم، و در نهایت طبق اطلاعات بدست آمده، دستورات موردنظر را اجرا کنیم. فرض کنید که میخواهید دمای یک محیط آزمایشگاهی را اندازه گیری و کنترل کنید، به احتمال زیاد در وهلهی اول سوالات زیر برایتان به وجود بیاید.
- از چه سنسوری باید استفاده کنم؟
- چطور میتوانم این اندازهگیری را انجام بدهم؟
- از چه سخت افزاری باید استفاده کنم؟
در این مقاله میخواهیم به این سوالات پاسخ دهیم و در نهایت این سنسور را توسط برد آردوینو Nano راهاندازی کنیم و جواب را در سریال مانیتور نرمافزار آردوینو مشاهده کنیم.
خب اولین سوالی که ممکن است به ذهن برسد،این است که برای انجام این پروژه باید از چه سنسوری استفاده کنیم؟ برای پاسخ به این سوال باید یک شناخت کلی از سنسورها به همراه عملکرد آنها داشته باشیم. به طور مثال برای پروژه ای که تعریف کردیم فقط به اندازه گیری دما نیاز داریم. پس سنسورهایی که فقط دما را اندازهگیری میکنند باید پیدا کنیم که با یک جستجو ساده بدست میآید. برای این پروژه از سنسور DS18b20 به دلیل دقت بالای اندازهگیری آن استفاده میکنیم که اگر کمی هم جستجو کرده باشید از سنسور DS18b20 در پروژه های مختلف استفاده شده است.
حال سوال بعدی که ممکن است به ذهن برسد، این است که چطور این سنسور را باید راه اندازی کنیم؟ در پاسخ به این سوال لازم است که کمی دیتاشیت این سنسور را مورد برسی قرار دهیم. در این قسمت میخواهیم به صورت مختصر دیتاشیت سنسور DS18b20 را باهم بررسی کنیم.
ویژگیهای این سنسور به صورت کلی شامل موارد زیر میباشد:
استفاده از پروتکل ONE_WIRE جهت راه اندازی
تغییر رزولوشن از 9 تا 12 بیت
تغذیه بین 3 تا 5.5 ولت
اندازهگیری دما از 55- تا 125 درجه سانتیگراد (دقت کنید که مقدار دمایی که در پروژه مدنظر شما است در این رنج است یا خیر که در این پروژه این بازه دمایی مدنظر ما میباشد.)
پروتکل ONE_WIRE چیست؟ و نحوه عملکرد این پروتکل به چه صورتی است؟
این پروتکل برای انتقال دیتا فقط از یک پین استفاده میکند، به همین جهت به آن ONE WIRE میگویند. درواقع یکی از پرچالشترین پروتکلها، همین پروتکل است به این دلیل که زمانبندی در این پروژه از اهمیت بالایی برخوردار است. همچنین نحوه عملکرد آن هم کاملا بستگی به زمانبندی دارد. فرض کنید که برای روشن کردن سنسور DS18b20 باید هر 480 میکرو ثانیه کد “0XA0” را ارسال کنید، در صورتیکه طبق این زمانبندی ارسال دستور صورت نگیرد سنسور فعال نخواهد شد و در نهایت عمل نخواهد کرد. از اینرو زمانبندی در این پروتکل، اهمیت بسیار زیادی را دارد.
بلوک دیاگرام سنسور DS18b20 هم به صورت شکل زیر است.
برای اطلاعات بیشتر توصیه میکنیم که حتما دیتاشیت این سنسور را مطالعه کنید.
پس از اینکه اطلاعات کافی در مورد سنسور DS18b20 را بدست آوردیم. باید بستر مناسب برای پیاده سازی سنسور DS18b20 را انتخاب کنیم.
انتخاب بستر مناسب برای پروژه، یکی از مشکلات مهندسین الکترونیک است که عدم شناخت به ادوات الکترونیکی باعث بروز این مشکل شده است. انتخاب بستر مناسب برای پروژه به مواردی مثل مدت زمان تعیین شده برای انجام پروژه و سختی پروژه و رابط گرافیکی و … بستگی دارد که باید حتما تک تک این موارد مورد برسی قرار گیرند و در نهایت چیپ موردنظر انتخاب شود.
جهت راهاندازی این سنسور باید دو مرحله را رعایت کنیم، یکی ترسیم شماتیک برد و دیگری بخش کدنویسی که در نرمافزار آردوینو انجام میگیرد.
کدنویسی سنسور DS1820 –DS18b20
ابتدا باید کتابخانه موردنظر را طبق تصاویر زیر نصب کنیم.
سپس کد زیر را در محیط IDE آردوینو مینویسیم.
// First we include the libraries #include <OneWire.h> فراخوانی کتابخانه مربوط به سنسور DS18b20 #include <DallasTemperature.h> فراخوانی کتابخانه ای که برای راهاندازی سنسور DS18b20 نوشته شده به همراه تمامی تنظیمات رجیستری و زمانبندیها /********************************************************************/ // 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 دستور ارسال ادرس جهت برقراری ارتباط با سنسور در صورتیکه ارتباط به درستی انجام گرفته باشد در سریال مانیتور DONE را مینویسد. Serial.println("DONE"); /********************************************************************/ Serial.print("Temperature is: "); Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"? اگر DONE رادریافت کرده بودیم در خط بالا حال توسط این خط از برنامه قادر خواهیم بود دما را از سنسور دریافت کنیم. // You can have more than one DS18B20 on the same bus. // 0 refers to the first IC on the wire delay(1000); }
جهت دانلود فایل برنامه اینجا کلیک کنید .
اگر تمامی موارد به درستی انجام گرفته باشد، باید خروجی را به صورت زیر در سریال مانیتور مشاهد کنیم.
امیدواریم که آموزش برای شما مفید واقع شده باشد.