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

چگونه از LM35 برای اندازه‌گیری دما به سانتی‌گراد، فارنهایتر و کلوین استفاده کنیم

چگونه از LM35 برای اندازه‌گیری دما به سانتی‌گراد، فارنهایتر و کلوین استفاده کنیم

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

LM35 سه پایه دارد: پایه سمت چپ برای برق است که می‌تواند به یک منبع ولتاژ بین 4V و 30V متصل شود؛ پایه وسط ولتاژی متناسب با دما تولید می‌کند؛ و پایه سمت راست برای زمین است. حساس(حس کننده) برای هر درجه سلسیوس 10 میلی‌ولت خروجی می‌دهد که ما از آن برای محاسبه دما در شِفر (کود) آردوینویمان استفاده خواهیم کرد.

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

حساس(حس کننده) دما LM35 یک دستگاه دقیق است که خروجی ولتاژ آنالوگ مطابق با دما به سلسیوس فراهم می‌کند. این حساس(حس کننده) در دمایی بین -55°C تا 150°C با دقت ±0.5°C کار می‌کند. مصرف توان پایین آن معادل 60 میکروآمپر، آن را برای دستگاه‌های با باتری مناسب می‌سازد. امپدانس خروجی LM35 پایین است، که به آن اجازه می‌دهد بار را به طور مؤثر بدون افت ولتاژ قابل توجهی راه‌اندازی کند، که این موضوع برای حفظ دقت خوانش‌ها بسیار مهم است. این حساس(حس کننده) معمولاً در قالب TO-92 بسته‌بندی شده است، که ادغام آن در پروژه‌های مختلف را آسان می‌سازد.

جزئیات ورق داده

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

  • اطمینان حاصل کنید که منبع تغذیه مناسب بین ۴ ولت تا ۳۰ ولت باشد.
  • از وجود قطبیت معکوس در اتصالات قدرت احتیاط کنید.
  • از یک اتصال زمین پایدار استفاده کنید تا از اغتشاش (نویز) در خوانش‌ها جلوگیری کنید.
  • حساس(حس کننده) را از منابع گرمایی مستقیم دور نگه دارید تا از قرائت‌های نادرست جلوگیری شود.
  • یک فیلتر گذر پایین را در نظر بگیرید اگر در حال تجربه نوسانات در ولتاژ خروجی هستید.

دستورالعمل‌های سیم‌کشی

LM35_basic_wiring_bb

برای اتصال حساس(حس کننده) LM35، پایه چپ (VCC) را به منبع تغذیه 5V آردوینو وصل کنید. پایه راست (GND) باید به زمین (GND) آردوینو متصل شود. پایه وسط (خروجی) جایی است که داده‌های دما را می‌خوانید؛ این پایه را به پایه ورودی آنالوگ وصل کنید.A0روی آردوینو. این پیکربندی به آردوینو اجازه می‌دهد تا خروجی ولتاژ از LM35 را بخواند، که با دما مطابقت دارد. اگر نیاز است که سیم‌کشی را برای پیکربندی‌های مختلف تنظیم کنید، مطمئن شوید که مرجع پایه آنالوگ را در شِفر (کود) به‌روز کنید تا با پیکربندی جدید شما مطابقت داشته باشد. (در ویدیو در 03:15)

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

قطعه کدهای زیر نشان می‌دهند که چگونه دما را از LM35 خوانده و در واحدهای مختلف نمایش دهیم. ابتدا، پایه ورودی و فاکتور تبدیل LM35 را تعریف می‌کنیم:

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

در این بخش،inPinپایه آنالوگ متصل به خروجی LM35 را نشان می‌دهد، وLM35_FACTORتعریف می‌کند که تبدیل لازم برای تبدیل ولتاژ به دما در سلسیوس چیست. سپس، ارتباط سریالی را راه‌اندازی می‌کنیم:

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

اینجا،Serial.begin(9600)ارتباط سری را با نرخ بادی ۹۶۰۰ بیت در ثانیه راه‌اندازی می‌کند و به ما اجازه می‌دهد داده‌ها را به و از مانیتور سری ارسال و دریافت کنیم. تابع حلقه به طور مداوم دما را می‌خواند و آن را چاپ می‌کند:

void loop() {
  printTemperature('C');
  printTemperature('F');
  printTemperature('K'); 
  delay(1000);
}

در این حلقه، ما فراخوانی می‌کنیمprintTemperatureعملکرد برای هر واحد (درجه سلسیوس، درجه فارنهایت، کلوین) برای نمایش دماهای مربوطه در مانیتور سری.

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

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

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

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

تصاویر

LM35_basic_project
LM35_basic_project
LM35_basic_wiring_bb
LM35_basic_wiring_bb
LM35_pinout
LM35_pinout
323-How to use an LM35 to measure temperature in Celsius, Fahrenheit, and Kelvin
زبان: C++
/*
 * 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
 * 
 * Watch Video instruction for this code:https://youtu.be/S5IBc_epa1A
 * 
 * Full explanation of this code and wiring diagram is available at
 * my Arduino Course at Udemy.com here: http://robojax.com/L/?id=62

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

 * Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * 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:
  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);
}



/*
 * 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)
{
    float value;
    float averageTemperature =0;
    int sensorValue = analogRead(inPin);
    float voltage = sensorValue * (5.0 / 1023.0); 
    float temperature = voltage / LM35_FACTOR;
    for(int i=0; i< iteration; i++)
    {
      averageTemperature += temperature;
    }

    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 character 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)
{
    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");  
}

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

منابع و مراجع

فایل‌ها📁

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