پنج شنبه, شهریور 29, 1403
ادامه منو

    دماسنج با سنسور LM35 و میکرو AVR

    در این پست از سایت اِمیک, شما با ساخت یک دماسنج با استفاده از سنسور پرکاربرد و معروف LM35 اشنا خواهید شد. سنسور LM35  یک سنسور انالوگ می باشد, به این معنی که با تغییرات دمای محیط ولتاژ انالوگی در خروجی ان ایجاد می شود که با اندازه گیری ان توسط ADC میکروکنترلر می توانیم دمای محیط را اندازه گیری کنیم . در صورتی که با ADC و راه اندازی ان در میکرو AVR اشنا نیستید ” این پست “ را مطالعه کنید .

    اشنایی با سنسور LM35 :

    همانطور که گفته شد LM35 یک سنسور انالوگ می باشد که دما را برحسب درجه سانتی گراد به صورت کالیبره شده در خروجی به صورت ولتاژ نمایش می دهد. ای سنسور دارای دقت بسیار مناسبی می باشد و با توجه به قابلیت های ان دارای قیمت مناسبی هم می باشد . سنسور LM35 دارای تغییرات ولتاژ خروجی خطی نسبت به تغییرات دما می باشد و نیاز به کالیبراسیون ندارد.

    ویژگی ها:

    •  کالیبره شده برای درجه سانتی گراد (سلسیوس)
    •  تغییرات خطی ولتاژ خروجی به ازای هر درجه، ۱۰mV
    •  در دمای ۲۵ درجه سانتی گراد دارای دقت ۰٫۵ درجه
    •  محدوده اندازه گیری بین -۵۵ تا ۱۵۰ درجه سانتی گراد
    •  مناسب برای کاربرد های کنترل از راه دور
    •  کم هزینه با توجه به ویژگی ها
    •  محدوده عملکرد ولتاژی بین ۴ تا ۳۰ ولت
    •  جریان درین کمتر از ۶ میکرو آمپر
    •  ایجاد گرمای بسیار کم توسط خود سنسور(اتلاف گرمایی)، حدود ۰٫۰۸ درجه سانتی گراد
    •  امپدانس خروجی کم، برای بار یک میلی آمپر حدود ۰٫۱ اهم

     

    شماتیک پروژه :

    در این پروژه ما توسط  مبدل انالوگ به دیجیتال (ADC) میکرو ولتاژهای خروجی سنسور LM35 را اندازه گیری می کنیم و با قرار دادن این مقادیر در یک نسبت ساده انها را به مقادیر دما تبدیل می کنیم و بر روی LCD کاراکتری نمایش می دهیم . شماتیک به صورت زیر است :

    برنامه پروژه :

    در کدویزارد میکرو ATmega16 را انتخاب کنید و فرکانس ان را 1 مگاهرتز قرار دهید, پورت D را برای اتصال به LCD خروجی کنید و تنظیمات LCD کاراکتری را برای اتصال به پورت D انجام دهید. ADC میکرو را فعال کنید و در نهایت کدهای این پروژه به صورت زیر است :

    برای نمایش مقادیر دما بر روی LCD کاراکتری لازم است که ابتدا این مقادیر به رشته ای از کاراکتر تبدیل شوند تا بتوانیم انها را بر روی LCD نمایش دهیم برای این کار از دستور sprintf استفاده می کنیم . این دستور یکی از توابع کتابخانه stdio می باشد, بنابراین برای استفاده از ان لازم است که در ابتدای برنامه این کتابخانه را فراخوانی کنیم .

    همانطور که می دانید دستور read_adc عددی بین 0 تا 1023 با توجه به ولتاژ انالوگ ما از پین های میکرو می خواند (در صورتی که تیک Use 8 bits را نزده باشیم), و از انجایی که در دیتاشیت LM35 گفته شده که به ازای هر درجه سانتیگراد، ۱۰ میلی ولت تغییرات در خروجی سنسور داریم بنابراین می توانیم با یک تناسب ولتاژ خواند شده از سنسور را به مقادیر دما تبدیل کنیم, این کار در خط 40 برنامه انجام شده و با تقسیم مقادیر خوانده شده از ADC  بر 2.054 ولتاژ ما به مقادیر دما تبدیل می شود .

    توجه : زمانی که از دستور sprintf در کدویژن استفاده می کنیم باید از مسیر

    گزینه ی s}Printf Features}  را روی  float, width, precision  قرار دهیم .

    کلیپ شبیه سازی :

     

    دانلود فایل ها

    پسورد فایل زیپ : www.emic.ir

     

     

    نظر یادتون نره…

    عابد رازانی
    عابد رازانیhttps://emic.ir/
    فارغ التحصیل کارشناسی الکترونیک از دانشکده باهنر شیراز و علاقمند به برنامه نویسی و طراحی مدارات الکترونیکی, در حال حاضر به تولید محتوای آموزشی و طراحی و انجام پروژه مشغول هستم.

    36 نظرات

    1. سلام مهندس عابد وقت بخیر 🌹
      مهندس این پروژه رو در عمل که میبندم جواب نمیده و مقدار ۴۷۸ درجه رو نشون میده ولی داخل پروتئوس همه چیز گل و بل بل هست نمیدونم دلیلش چیه اینقدر باهاش ور رفتم دیگه دیوانه شدم لطفا راهنمایی بفرمایید ، تمام نکاتی که در بالا گفتید رو رعایت کردم ولی تغییری ایجاد نشد

    2. سلام پروژتون عالی بود فقط وقتی که بالای دمای 28میره 1درجه اختلاف می یافته باید برای رفع این کار چه کرد .

    3. سلام . من این پروژه رو به صورت عملی و هم بصورت شبیه ساز بستم تو شبیه سازی جواب گرفتم ولی تو عملی دما رو درست نشان میده چی کار کنم ممنون میشم کمکم کند .

    4. سلام خسته نباشید. من این برنامه رو ت کدوبژن ابلود کردم ت بروتئوس درستع ولی نمایشگر کار نمیکنه هیچ مشکلی هم نداره
      میشع راهنمایی کنید.ممنون

    5. سلام
      می‌خوام دما رو روی سگمنت نشون بدم. چه تغییری باید بدم؟
      سگمنت هر نوعی باشه فرقی ندارد… یک رقمی یا دو رقمی یا سه رقمی فرقی ندارن برام…

    6. سلام مهندس خسته نباشید. ببخشید اگه بخوایم مثلا به جای ال سی دی از یک فن استاده کنیم که در صورت افزایش دما فن شروع به کار کند باید چی کار کنیم .
      ممنون میشم اگه راهنمایی کنید

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

      • سلام, فایل هگز موجود در فایل های انتهای مطلب را روی میکرو پروگرام کنید و برنامه را تغییر ندهید. این پروژه را من در عمل تست کردم و بخوبی جواب داده پس باید بررسی کنید که چه اشتباهی انجام داده اید

    8. سلام خسته نباشید پروژه انجام دادم ولی مشکلی که هست دما ثابت نشون می ده (498) به گفته شما سنسور را هم عوض کردم ولی مشکل حل نشده ممنون می شم اگه کمکم کنید.

    9. سلام خسته نباشید دوتا مشکل داشتم یکی سنسور تو پروتئوس ورودی نشون نمیده و اینکه عددشم بالا و پایین نمیره روی عدد t=498.1.c می مونه

    10. سلام دمتون گرم بابت پروژه من کد های برنامه را نوشتم واز توضیحات خوبتون استفاده کردم برای ساخت یک فیلم اموزشی که نشان استادم بدم و خیلی هم عالی شد بازم ممنون

    11. با سلام
      بنده دیتاشیت این سنسور را مطالعه نموده و مطلبی مبنی بر ضریب 2.054 جهت محاسبه دما ندیدم.
      لطفاً مبنا و مأخذ این فرمول را ارائه بفرمایید.
      با تشکر

    12. سلام من این پروژه رو انجام دادم ولی دما نشون داده نمیشه فقط بصورت T=1f c نشون داده میشه .
      مشکل چیه ؟
      و اینکه میشه راجع به خط 41 کد بیشتر توضیح بدید؟

      • سلام, نکته ای که در انتهای مطلب در مورد دستور sprintf گفته شده را انجام بدید
        در توضیحات گفته شده که باید مقادیر دمایی که محاسبه کردیم را برای نمایش روی ال سی دی کاراکتری به کاراکتر تبدیل کنیم که دستور sprintf این کار را انجام میدهد

    13. سلام ممنون از پروژه فوق العاده تون
      اگه ما بخوایم به میکرو بگیم مثلا ” توی دمای 20 درجه این کار رو انجام بده (مثلا یه پین رو روشن کن)”
      باید چجور دستور بنویسیم

    ارسال دیدگاه

    لطفا نظر خود را وارد کنید!
    لطفا نام خود را اینجا وارد کنید

    spot_img