شِفر (کود) جستجو

درس ۴۲: استفاده از حساس(حس کننده) دما LM35 | دوره آموزشی آردوینو به صورت مرحله به مرحله

درس ۴۲: استفاده از حساس(حس کننده) دما LM35 | دوره آموزشی آردوینو به صورت مرحله به مرحله

در این درس، یاد خواهیم گرفت که چگونه از حساس(حس کننده) دمای LM35 با یک آردوینو برای اندازه‌گیری و نمایش دما به درجه سلسیوس، فارنهایت و کلوین استفاده کنیم. این حساس(حس کننده) ولتاژی را تولید می‌کند که به دما متناسب است و به ما امکان می‌دهد به راحتی داده‌ها را در برنامه آردوینو خود بخوانیم و پردازش کنیم. تا پایان این آموزش، قادر خواهید بود اقداماتی مبتنی بر دما را در پروژه‌های خود پیاده‌سازی کنید.

حساس(حس کننده) دما LM35 دارای سه پایه است: پایه سمت چپ برای تغذیه، پایه وسط ولتاژی متناسب با دما را خروجی می‌دهد و پایه سمت راست برای زمین است. این حساس(حس کننده) در محدوده ولتاژ ۴ تا ۳۰ ولت کار می‌کند و خروجی آن ۱۰ میلی ولت به ازای هر درجه سلسیوس است. این دقت امکان اندازه‌گیری دقیق دما را در کاربردهای مختلف فراهم می‌کند.

سخت‌افزار توضیح داده شده

اجزای اصلی این پروژه حساس(حس کننده) دما LM35 است. این حساس(حس کننده) به گونه‌ای طراحی شده که خروجی ولتاژ آن به‌طور خطی نسبت به دما به درجۀ سلسیوس تغییر کند. این حساس(حس کننده) برای دامنه وسیعی از دماها، از -55 درجه سانتی‌گراد تا +150 درجه سانتی‌گراد، مناسب است و آن را برای محیط‌های مختلف کاربردی می‌سازد.

LM35_pinout

LM35 به حداقل قدرت (60 میکروآمپر) نیاز دارد و در دامنه وسیعی از ولتاژها کار می‌کند. امپدانس خروجی آن پایین است و این امکان را می‌دهد که به طور مستقیم با پایه‌های ورودی آنالوگ آردوینو بدون مدار اضافی ارتباط برقرار کند. این سادگی در طراحی باعث می‌شود LM35 انتخابی عالی برای وظایف اندازه‌گیری دما باشد.

جزئیات برگه داده

تولیدکننده تگزاس اینسترومنتس
شماره قطعه ای‌ام۳۵
ولتاژ منطقی/ورودی و خروجی ۴-۳۰ ولت
جریان خروجی (به ازای هر کانال) ۱ میلی‌آمپر حداکثر
دامنه دما -55 تا +150 درجه سانتی‌گراد
ولتاژ خروجی ۱۰ میلی‌ولت بر درجه سلسیوس
دقت ±0.5 °C در 25 °C
بسته TO-92

  • تأمین منبع تغذیه مناسب بین 4 ولت و 30 ولت برای دقت در قرائت‌ها.
  • ولتاژ خروجی مستقیماً متناسب با دما است (10 میلی‌ولت/درجه سانتی‌گراد).
  • از خازن‌های تفکیک‌کننده در نزدیکی پایه تغذیه برای تثبیت استفاده کنید.
  • در اتصال، قطبیت صحیح را حفظ کنید تا از آسیب جلوگیری شود.
  • اطمینان حاصل کنید که اتصالات خوب هستند تا از ورودی‌های شناور جلوگیری شود، زیرا این می‌تواند باعث خوانش‌های نادرست شود.

دستورات سیم‌کشی

LM35_basic_wiring_bb

برای اتصال حساس(حس کننده) دما LM35، پایه سمت چپ (VCC) را به خروجی ۵ ولت آردوینو متصل کنید. پایه میانی (خروجی) باید به پایه ورودی آنالوگ متصل شود.A0که ما برای خواندن دما استفاده خواهیم کرد. در نهایت، پایه صحیح (زمین) را به یکی از پایه‌های زمین روی آردوینو متصل کنید. اطمینان حاصل کنید که تمام اتصالات محکم هستند تا از بروز هر گونه مشکل در حین کار جلوگیری شود.

هنگام اتصال، به یاد داشته باشید که LM35 می‌تواند با ولتاژ تامین بین 4 ولت و 30 ولت تغذیه شود، اما استفاده از 5 ولت برای برنامه‌های آردوینو کافی است. اگر دماهای غیرمنتظره‌ای مشاهده کردید، اتصالات را دوباره بررسی کنید و اطمینان حاصل کنید که حساس(حس کننده) به درستی تغذیه می‌شود.

مثال‌های شِفر (کود) و راهنمایی

در شِفر (کود) آردوینو، پایه ورودی آنالوگ را برای خواندن ولتاژ خروجی LM35 با شناسه تعریف می‌کنیم.inPin، که قرار استA0علاوه بر این، ما یک ثابت را تعریف می‌کنیمLM35_FACTORتنظیم به 0.01 برای نشان دادن خروجی حساس(حس کننده) به ازای هر درجه سلسیوس.

const int inPin = A0; // can change
const float LM35_FACTOR = 0.01; // do not change

این تنظیم به ما اجازه می‌دهد تا دما را به روشی ساده بخوانیم. سپس، ارتباط سری را در حالت اولیه قرار می‌دهیم.setup()عملکردی برای آغاز خروجی دادن داده‌های دما به مانیتور سری.

void setup() {
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
}

درونloop()تابع، ما به طور مداوم دما را خوانده و آن را در واحدهای مختلف چاپ می‌کنیم.printTemperature()تابع یک پارامتر کاراکتری می‌گیرد تا فرمت دمای مورد نظر را مشخص کند و به ما اجازه می‌دهد دما را به صورت سلسیوس، فارنهایت یا کلوین نمایش دهیم.

void loop() {
  printTemperature('C');
  printTemperature('F');
  printTemperature('K');
  delay(1000); // Wait for 1000ms
}

برای اقدام بر اساس دما، می‌توانیم بررسی کنیم که آیا دما از یک آستانه خاص فراتر می‌رود یا خیر با استفاده ازgetTemperature()این تابع دمای میانگین را بر اساس تعداد مشخصی از نمونه‌ها محاسبه می‌کند.

برای جزئیات بیشتر، ویدیوی مرتبط را برای یک مرور کامل شِفر (کود) مشاهده کنید (در ویدیو در ۱۰:۱۵).

نمایش / چه انتظاری باید داشت

وقتی حساس(حس کننده) LM35 به درستی متصل شده و شِفر (کود) آردوینو بارگذاری شود، باید دما را در مقیاس‌های سلسیوس، فارنهایت و کلوین در مانیتور سری مشاهده کنید. اگر به حساس(حس کننده) گرما اعمال کنید، تغییرات دما را مطابق با آن مشاهده خواهید کرد.

به یاد داشته باشید که سیم‌کشی نادرست ممکن است منجر به خوانش‌های دمای نامنظم شود، مانند مقادیر بسیار بالا یا پایین. همیشه اطمینان حاصل کنید که حساس(حس کننده) به درستی متصل شده است تا از بروز چنین مشکلاتی جلوگیری شود (در ویدیو در :30).

نشانه‌های زمانی ویدئو

  • ۰۰:۰۰- مقدمه‌ای بر LM35
  • 02:30- دستورالعمل‌های سیم‌کشی
  • ۰۵:۰۰- توضیح شِفر (کود)
  • ۱۰:۱۵- نمایش قرائت‌های دما
  • ۱۲:۳۰- مسائل رایج و عیب‌یابی

تصاویر

LM35_basic_project
LM35_basic_project
LM35_basic_wiring_bb
LM35_basic_wiring_bb
LM35_pinout
LM35_pinout
503-Lesson 42: Using an LM35 Temperature Sensor with Arduino
زبان: C++
++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 42: Introduction to LM35
 * This Arduino sketch is to use LM35 to measure temperature
 * This code has two ways to get temperature
 * 1-To print the temperature either in C, F or K on the serial monitor
 * 2-To return the value in C, F and K
 *


  Please watch video instruction here https://youtu.be/DRIC4wDu878
 This code is available at http://robojax.com/course1/?vid=lecture37
 
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339

 * Written by Ahmad Shamshiri on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 * in Ajax, Ontario, Canada. www.robojax.com
 *


 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.


*/

const int inPin =A0;//can change
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
  delay(500);
}

// the loop routine runs over and over again forever:
void loop() {
 //robojax.com LM35 Code for Arduino
  printTemperature('C');
  Serial.println();
  printTemperature('F');
  Serial.println();
  printTemperature('K');
  Serial.println();
  Serial.println();
//  Serial.print(" Temperature: ");
//  printDegree();
//  Serial.print(getTemperature('C'));
if(getTemperature('C') >87)
{
 // do something here (watch video)
}
//  Serial.println();
  delay(1000);//Wait for 1000ms (change it if you want)
}

/*
 * getTemperature()
 * @brief gets the average temperature
 * @param average temperature
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return returns one of the values above
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
float getTemperature(char type)
{
	// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
    float value,voltage,temperature;//define variables
    int sensorValue;
    float averageTemperature =0;

    for(int i=0; i< iteration; i++)
    {
      sensorValue = analogRead(inPin);//read analog value
      voltage = sensorValue * (5.0 / 1023.0); //convert it to voltage
      temperature = voltage / LM35_FACTOR; //convert voltage to temperature
      averageTemperature += temperature;//add
    }

    averageTemperature /=iteration;
  if(type =='F')
   {
    value = averageTemperature *9/5 + 32;//convert to Fahrenheit
   }else if(type =='K')
   {
    value = averageTemperature + 273.15;//convert to Kelvin
   }else{
    value = averageTemperature;// return Celsius
   }
    return value ;
}//getTemperature()

/*
 * printTemperature()
 * @brief prints  temperature on serial monitor
 * @param charact type
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return none
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 */
void printTemperature(char type)
{
	// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
    float value;
    float temp = getTemperature(type);
   Serial.print(temp);
    printDegree();
  if(type =='F')
   {
     Serial.print("F");
    }else if(type =='K')
   {
     Serial.print("K");
   }else{
     Serial.print("C");
   }

}//printTemperature()

/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
void printDegree()
{
    Serial.print("\\xC2");
    Serial.print("\\xB0");
}

مواردی که ممکن است به آن‌ها نیاز داشته باشید

منابع و مراجع

فایل‌ها📁

هیچ فایلی موجود نیست.