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

آموزش ساخت دماسنج با سنسور دما DS18B20 ضد آب و برد آردوینو

Arduino-mega2560-ds18b20-temprature-digispark
نوشته شده توسط پریسا پوربلورچیان

اندازه‌گیری دمای محیط و کنترل آن در پروژه‌های اینترنت اشیاء IoT از اهمیت ویژه‌ای برخوردار است. در گلخانه‌ها، پروژه‌های صنعتی و… کنترل دمای محیط و طراحی ترموستات بسیار مهم خواهد بود. سنجش دما توسط مدار دماسنج می‌تواند در موارد بسیار زیادی موثر باشد. از جمله مدیریت مصرف انرژی در یک ساختمان، یا کنترل فرآیند مانند دستگاه‌های جوجه کشی که بسیار به دما حساس هستند. تا به حال آموزش های متفاوتی با سنسورهای دما در دیجی اسپارک منتشر شده است. در این آموزش به معرفی سنسور دما DS18B20 و نحوه‌ی کار یا آن خواهیم پرداخت. در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید.

 

سنسور دما DS18B20 ضد آب با کابل

سنسور دما DS18B20 دارای کابل و کاملا ضد آب می‌باشد. زمانی که نیاز دارید، دمای محیط را به صورت تماسی اندازه‌گیری کنید، سنسور DS18B20 بسیار کاربردی خواهد بود. دمای مطلوب جهت اندازه گیری توسط سنسور DS18B20، با توجه به اینکه با کابل PVC پوشیده شده است، ۱۲۵ درجه سانتی گراد تخمین زده شده است. با این وجود پیشنهاد می‌شود آن را زیر ۱۰۰ درجه سانتی گراد نگهداری کنید. از آنجایی که انتقال سیگنال کاملا دیجیتالی است، حتی در فواصل طولانی هم خطا در دریافت دمای محیط نخواهید داشت. سنسور دما DS18B20 از ۹ تا ۱۲ بیت دمای قابل تنظیم را فراهم می‌کند. اتصال سنسور تنها توسط یک سیم با یک میکروپروسسور و ولتاژ ۳ تا ۵٫۵ ولت انجام می‌شود. همانطور که اشاره شد، ولتاژ کاری سنسور DS18B20 از ۳ تا ۵٫۵ ولت DC است. دقت اندازه‌گیری سنسور بین محدوده دمایی – ۱۰ تا + ۸۵ درجه سانتی گراد برابر ±۰٫۵ می‌باشد. محدوده اندازه‌گیری دمای سنسور بین – ۵۵ تا + ۱۲۵ درجه سانتی گراد و -۶۷ تا + ۲۵۷ درجه فارنهایت می‌باشد. سنسور دما DS18B20 دارای سه پایه سیگنال و VCC و GND می‌باشد. طول سیم سنسور ۹۰ سانتی متر است و پایه های ان با سه رنگ زرد، مشکی و قرمز مشخص شده است.

هدف آموزش دماسنج DS18B20

با استفاده از سنسور DS18B20 دمای محیط را توسط سنسور اندازه گیری کرده و سپس در ال سی دی LCD مقادیر اندازه گیری شده را نمایش می‌دهیم. در این آموزش از شیلد ال سی دی آردوینو استفاده خواهیم کرد. به عبارت کلی‌تر با استفاده از برد آردوینو  Arduino Mega2560 و سنسور دما DS18B20 یک دماسنج کاربردی می‌سازیم.

 

شیلد نمایشگر Arduino LCD Shield

شیلد ال سی دی آردوینو به دلیل در اختیار داشتن ۶ کلید بر روی آن در پروژه های DIY بسیار پرکاربرد است. با تعریف هر یک از کلیدها در برنامه می‌توانید یک منو برای تغییر وضعیت و نمایش پارامترهای مختلف استفاده کنید. قبلا در آموزش راه اندازی ۳ مدل ال سی دی کاراکتری با آردوینو، به توضیح کامل و نحوهی راه اندازی شیلد ال سی دی آردوینو پرداخته ایم. در صورت نداشتن اطلاعات کافی در خصوص راه اندازی شیلد ال سی دی و فراخوانی هر یک از کلیدها، به آموزش مربوطه مراجعه کنید. در صورت داشتن سوال جهت راه اندازی از همان طریق اقدام کنید.

آموزش ساخت دماسنج با سنسور DS18B20 و آردوینو Mega2560 - دیجی اسپارک

فراخوانی کتابخانه آردوینو

در این آموزش برای راه اندازی سنسور DS18B20 و ال سی دی نیاز به فراخوانی کتابخانه آن ها خواهیم داشت:

  • کتابخانه DallasTemperature

کتابخانه DallasTemperature جهت راه اندازی سنسور DS18B20 استفاده می‌شود. لینک دانلود کتابخانه در صفحه محصول سنسور DS18B20 با کابل ضد آب در فروشگاه دانشجوکیت قرار گرفته شده است. آن را دانلود و سپس فراخوانی کنید.

  • کتابخانه LiquidCrystal

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

  • کتابخانه onewire

کتابخانه onewire برای راه اندازی سنسور دما DS18B20 فراخوانی می‌شود. کتابخانه onewire به صورت پیش فرض در لیست کتابخانه های آردوینو قرار دارد. آن را فراخوانی کنید.

 

اتصالات آردوینو Mega2560

  • سیم زرد رنگ ( دیجیتال) سنسور دما DS18B20 را توسط یک مقاومت ۴٫۷ کیلو اهم به پایه دیجیتال برد آردوینو اتصال دهید.
  • سیم مشکی رنگ سنسور دما DS18B20 را به پایه GND آردوینو اتصال دهید.
  • سیم قرمز رنگ سنسور دما DS18B20 را به پایه VCC آردوینو اتصال دهید.ز

 

وسایل مورد نیاز

برد آردوینو مگا Arduino Mega2560

سنسور دما DS18B20 ضد آب با کابل 

بردبورد 

۶۰ رشته کابل مخصوص بردبورد

شیلد ال سی دی آردوینو Arduino LCD Shield

 

 

کد برنامه سنسور دما DS18B20

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 

 

تحلیل کد آردوینو DS18B20

کد را از طریق کلیدهای میانبری که برای انتقال کدها در نظر گرفته شده است، به نرم افزار آردوینو Arduino انتقال دهید. سپس کتابخانه های گفته شده را فراخوانی و کد را کامپایل کنید.

 

تعریف منو توسط شیلد LCD

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

lcd.print("TEMPERATURE");

کلید UP

نحوه ی فراخوانی کلید در برنامه در آموزش کار با ال سی دی کاراکتری کامل توضیح داده شده است. در صورت نداشتن اطلاعات کافی به آموزش مربوطه مراجعه کنید. با فشردن کلید UP عبارت Start در ال سی دی LCD لاین دوم نمایش داده خواهد شد:

case btnUP :    // با فشردن کلید up پیام start نمایش داده میشود
     {
     lcd.print("start "); // نمایش پیام در ال سی دی 
     break;
     }

آموزش کار با سنسور دماسنج DS18B20 و آردوینو Mega2560 - دیجی اسپارک

کلید Select

با فشردن کلید Select دمای محیط توسط سنسور دما DS18B20 بر حسب درجه سیلسیوس و فارنهایت خوانده شده و سپس در ال سی دی نمایش داده می‌شود:

 case btnSELECT:{  // فشردن کلید select

تعریف دما بر حسب درجه سیلسیوس

tempC = sensors.getTempCByIndex(0); // تعریف درجه سیلسیوس

تعریف دما بر حسب درجه فارنهایت

tempF = sensors.toFahrenheit(tempC); // تعریف درجه فارنهایت

 

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

 

دماسنج با سنسور DS18B20 با برد آردوینو Mega2560-دیجی اسپارک

پروژه:

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۶۳ دیدگاه

    • سلام
      بله تنها باید نوع برد را UNO انتخاب کنید و به درستی اتصالات را انجام دهید.

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

      • یا عرض سلام و خسته نباشبد
        خواستم بپرسم چطور میشه ۲ یا ۳ یا تعداد بیشتری سنسور دما را در این پروژه بکار برد؟
        متشکرم

        • با سلام
          این سنسور دارای کد ID منحصر به فرد است که میتوانید هر تعداد مد نظر را تعریف کنید.

  • سلام
    من کدها رو خوندم ولی نفهمیدم چه جوری باید یه کلید دیگه تعریف کنم؟ دستور تعریف کلید چیه ؟

    • سلام
      برای تعریف کدها باید از دستور Switch استفاده کنید.

      case 1 :
      // Process for test = 1

      break;

      case 5 :
      // Process for test = 5

      break;
      به عنوان مثال دو کلید در این حلقه تعریف شده است. طبق الگو پیش بروید.

    • سلام
      در حال حاضر خیر، پروژه ای ارسال نشده است و می‌توانید اقدام کنید.

      • سلام میشه به جای استفاده از شیلد ال سی دی آردوینو Arduino Shield 2*16 LCD
        با استفاده از یک ۲*۱۶ LCD و چند کلید جدا منو را طراحی کنم و پروژه را ارسال کنم

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

  • سلام ممنون بابت توضیحات کامل شما یه سوال داشتم ممنون میشم سریع بهم جواب بدین.
    دکمه های روی شیلد ال سی دی آردوینو Arduino LCD Shield
    (PULLUP هستن یا PULLDOWN) وقتی تو کد تعرف میکنیم که از کلید ها استفاد کنیم کلید میشه براشون حالت (PULLUP بودن یا PULLDOWN بودن) رو توی کد تنظیم کنیم.

    • سلام
      با توجه به اینکه شماتیک های متفاوتی از شیلد ال سی دی در دسترس می‌باشد، ولی مدلی که بنده کار می‌کنم به صورت مقاومت PullUP می‌باشد. در این موزد حتما دیتاشیت کالا را بررسی کنید.

      • سلام مجدد
        ممنون بابت جواب سوال قبل الان برام سوال جدیدی پیش اومده(الان یعنی وقتی شما کلید UP رو فشار مدید تا مدت زمانی که دست شما روی کلید هست متن start رو نشون میده) بر اساس اینکه گفتیدPullUP هست شیلد ال سی دی شما.

        • سلام مجدد
          بله دقیقا به همین صورت است و با نگه داشتن کلید متن نمایش داده خواهد شد.

            • سلام ببخشید یه سوال دیگه هم داشتم؟
              اگه الان من بخواهم ترموستات برای پروژه درست کنم به دلیل اینکه گفتیدPullUP هست کلید ها وقتی من از یک متغیر میخواهم کم کنم تعدادش رو یا زیاد کنم که ترموستات تنظیم بشه نمیشه اینکار رو انجام داد.
              چون خودش شروع به کم شدن میکنه و نمیشه اصلا از کلید استفاده کرد چه کد مناسبی برای این کار شما پیشنهاد میکنید ممنون میشم یه راهنمایی بکنید!

              • سلام مجدد
                دقیقا منظور شما رو متوجه نشدم.
                با کلیدها قادر به تعریف منو خواهید بود. حتی می‌توانید تغییرات دمای جدید را با هر بار زدن کلید مورد نظر دریافت کنید.
                شفاف تر توضیح دهید.

                • سلام
                  منظورم اینه که میخواهم پروژه ای رو که تعریف کرده اید رو انجام بدم و مینیموم و ماکسیموم دما رو با دکمه های روی شیلد تنظیم کنم با ۴ تاشون (بالا و پایین)وظیفه کم و زیاد کردن مقدار مینیموم دما و (چیپ و راست)وظیفه کم و زیاد کردن مقدار ماکیموم دما ولی به دلیل اینکه دکمه های موجود روی شیلد ال سی دیPullUP هستند نمیشه کدی که نوشتم رو روش پیداه کنم یعنی کار نمیکنه وقتی پروژه رو روشن میکنم خودش از مقدار min دما من کم میکنه نمیشه با دکمه هایی که کد براشون نوشتم کم زیاد کرد مینیموم و ماکسیموم رو و کدم هم درست کار میکنه من با ۴ دکمه جدا که به اردینو وصل کردم و کد براشون نوشتم که هر دکمه که دارم یکی از اونها وظیفه کم و یکی وظیفه زیاد کردن مقدار مینیموم دما و یکی از اونها وظیفه کم و یکی وظیفه زیاد کردن مقدار ماکسیموم دما رو داره کدم کار میکنه و میتونم مقدار ماکسیموم و مینیموم رو روی عدد دلخواهم مثلا مینیموم دما رو روی ۲۰ و ماکسیموم رو روی ۲۴ بزارم و وقتی دما زیاد تر شد از ۲۴ یک رله فعال بشه و وقتی از ۲۰ کم تر شد یک رله فعال بشه و با این ۴ دکمه جدا کدم کار میکنه مشکلم از روی دکمه های شیلد هست… حالا دنبال کدیم که بهم پیشنهاد بدین استفاده کنم تا مشکلم حل بشه. ممنون بابت توجه شما

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

    • سلام
      پروژه شما دریافت شد و در حال بررسی هستم.
      از همین طریق اطلاع رسانی خواهد شد.

  • بسیار عالی بود. خوشحال می شوم در مجله دانش و آزمایش مقالات علمی و پروژه بفرستید چاپ شود. این مجاله برای معلمان و دانش اموزان است. محمدی وند – مدیر مسئول مجله دانش و آزمایش

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

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

      • سلام من میخوام وقتی یک پوش باتن رو فشار می دم یک کاری انجام بده اردوینو و بعد از اینکه دکمه رو رها کردم بازهم همون حالت وجود داشته باشه
        از دستور if هم نمیشه استفاده کرد اخه اونجوری وقتی دستم رو از روی کلید بردارم اون حالت از بین میره
        ممنون

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

  • سلام و خسته نباشید
    از اتصالات سخت افزاری تمامی پروژه ها کلیپ هم درست کننید عالی میشه
    از سایت فوق العادتون بسیار بسیار ممنونم

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

  • آیا امکانش هست این دماسنجو به کیت سیمکارت متصل کرد تا از طریق گوشی کنترلش کرد ؟
    امکان کنترل کردن دمای محیط با این وسیله وجود داره؟

    • با سلام
      بله این سنسور قابلیت اندازه گیری دما و اتصال به ماژول سیم کارت وجود دارد.

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

    • با سلام
      بله سنسور در دمای -۵۵ تا +۱۲۵ درجه سانتی گراد را اندازه گیری کرده و بایستی حد دمای محیط را بر اساس رنج سنسور در نظر گرفته و انتخاب نمایید.

  • سلام برای ساخت دستگاه جوجه کشی به ۲ دمای خشک و مربوط نیاز هست به علاوه اینکه بتوان دو دمای ست شده خشک و مرطوب هم به دستگاه داد که براساس تفاوت دمای ست شده با دمای سنسور حداقل ۶ بیت(رله) خروجی داشته باشیم. سوال من این هست که آیا این قابلیت درون این برد وجود دارد و زبان برنامه نویسی را بفرمائید ، ممنون

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

  • سلام من از این کیت میخوام برای کنترل دمای اکواریوم استفاده کنم . چطوری باید بهش فن معرفی کنم که دما به فرض به ۲۳ رسید فن خاموش و وقتی دما به ۲۵ رسید فن روشن بشه .. با تشکر

    • با سلام
      کاربر گرامی در متن آموزش تمامی این موارد کامل آموزش داده شده است. هر کدام از خط هایی که متوجه نشده اید را کپی کنید تا توضیحات بیشتری داده شود.