مقدمه
شاید نیاز باشد در یک مکان، دما را در شرایط مختلف محیطی اندازهگیری کنیم و طبق یک زمانبندی خاص اطلاعات را ارسالکنیم، و درنهایت طبق اطلاعات بدستآمده، دستورات موردنظر را اجراکنیم. فرضکنید که میخواهید دمای یک محیط آزمایشگاهی را اندازهگیری و کنترل کنید، به احتمالزیاد در وهلهی اول سوالات زیر برایتان بهوجود بیاید.
- از چه سنسوری باید استفادهکنم؟
- چطور میتوانم این اندازهگیری را انجام بدهم؟
- از چه سختافزاری باید استفادهکنم؟
معرفی
در این مقاله میخواهیم به این سوالات پاسخ دهیم و درنهایت این سنسور را توسط برد آردوینو Nano راهاندازی کنیم و جواب را در سریال مانیتور نرمافزار آردوینو مشاهدهکنیم.
خب اولین سوالی که ممکناست به ذهن برسد،این است که برای انجام این پروژه باید از چه سنسوری استفادهکنیم؟ برای پاسخ به این سوال باید یک شناخت کلی از سنسورها بههمراه عملکرد آنها داشتهباشیم. بهطورمثال برای پروژهای که تعریفکردیم فقط به اندازهگیری دما نیاز داریم. پس سنسورهایی که فقط دما را اندازهگیری میکنند باید پیداکنیم که با یک جستجو ساده بدست میآید. برای این پروژه از سنسور DS18b20 بهدلیل دقت بالای اندازهگیری آن استفاده میکنیم که اگر کمی هم جستجو کرده باشید از سنسور DS18b20 در پروژه های مختلف استفادهشدهاست.
حال سوالبعدی که ممکناست به ذهن برسد، این است که چطور این سنسور را باید راهاندازی کنیم؟ در پاسخ به این سوال لازماست که کمی دیتاشیت این سنسور را موردبررسی قراردهیم. در این قسمت میخواهیم بهصورت مختصر دیتاشیت سنسور DS18b20 را باهم بررسیکنیم.
ویژگیهای این سنسور بهصورتکلی شامل مواردزیر میباشد:
- استفادهاز پروتکل ONE_WIRE جهت راهاندازی
- تغییر رزولوشن از ۹ تا ۱۲بیت
- تغذیه بین ۳ تا ۵.۵ولت
اندازهگیری دما از ۵۵- تا ۱۲۵درجه سانتیگراد(دقتکنید که مقدار دمایی که در پروژه مدنظر شما است در این رنج است یا خیر که در این پروژه این بازه دمایی مدنظر ما میباشد.)
پروتکل ONE_WIRE چیست؟ و نحوه عملکرد این پروتکل به چهصورتی است؟
این پروتکل برای انتقال دیتا فقط از یک پین استفاده میکند، بههمینجهت به آن ONE WIRE میگویند. درواقع یکیاز پرچالشترین پروتکلها، همین پروتکل است به این دلیل که زمانبندی در این پروژه از اهمیت بالایی برخوردار است. همچنین نحوه عملکرد آنهم کاملا بستگی به زمانبندی دارد. فرضکنید که برای روشنکردن سنسورDS18b20 باید هر ۴۸۰میکروثانیه کد “0XA0” را ارسالکنید، درصورتیکه طبق این زمانبندی ارسال دستور صورت نگیرد سنسور فعال نخواهد شد و درنهایت عمل نخواهد کرد. از اینرو زمانبندی در این پروتکل، اهمیت بسیار زیادی را دارد.
بلوک دیاگرام سنسور DS18b20 هم بهصورت شکلزیر است.
برای راهاندازی سنسور DS18b20 حتما به یک مقاومت ۴.۷کیلو نیاز دارید، که باید بهصورت پولآپ متصل شود در غیر اینصورت سنسور عمل نخواهد کرد.
برای اطلاعات بیشتر توصیه میکنیم که حتما دیتاشیت این سنسور را مطالعهکنید.
پساز اینکه اطلاعات کافی درمورد سنسور 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); }
اگر تمامی موارد بهدرستی انجامگرفتهباشد، باید خروجی را بهصورتزیر در سریال مانیتور مشاهدهکنیم.
امیدواریم که آموزش برای شما مفید واقعشدهباشد.
منبع:سیسوگ
[…] درسایت راهاندازی سنسور دما DS18b20 با آردوینو و پروتکل onewire (تک س… توضیح داده شده است. شما از طریق این آموزش، میتوانید […]