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

حساس(حس کننده) دما LM35 دارای سه پایه است: پایه سمت چپ برای تغذیه، پایه وسط ولتاژی متناسب با دما را خروجی میدهد و پایه سمت راست برای زمین است. این حساس(حس کننده) در محدوده ولتاژ ۴ تا ۳۰ ولت کار میکند و خروجی آن ۱۰ میلی ولت به ازای هر درجه سلسیوس است. این دقت امکان اندازهگیری دقیق دما را در کاربردهای مختلف فراهم میکند.
سختافزار توضیح داده شده
اجزای اصلی این پروژه حساس(حس کننده) دما LM35 است. این حساس(حس کننده) به گونهای طراحی شده که خروجی ولتاژ آن بهطور خطی نسبت به دما به درجۀ سلسیوس تغییر کند. این حساس(حس کننده) برای دامنه وسیعی از دماها، از -55 درجه سانتیگراد تا +150 درجه سانتیگراد، مناسب است و آن را برای محیطهای مختلف کاربردی میسازد.
LM35 به حداقل قدرت (60 میکروآمپر) نیاز دارد و در دامنه وسیعی از ولتاژها کار میکند. امپدانس خروجی آن پایین است و این امکان را میدهد که به طور مستقیم با پایههای ورودی آنالوگ آردوینو بدون مدار اضافی ارتباط برقرار کند. این سادگی در طراحی باعث میشود LM35 انتخابی عالی برای وظایف اندازهگیری دما باشد.
جزئیات برگه داده
| تولیدکننده | تگزاس اینسترومنتس |
|---|---|
| شماره قطعه | ایام۳۵ |
| ولتاژ منطقی/ورودی و خروجی | ۴-۳۰ ولت |
| جریان خروجی (به ازای هر کانال) | ۱ میلیآمپر حداکثر |
| دامنه دما | -55 تا +150 درجه سانتیگراد |
| ولتاژ خروجی | ۱۰ میلیولت بر درجه سلسیوس |
| دقت | ±0.5 °C در 25 °C |
| بسته | TO-92 |
- تأمین منبع تغذیه مناسب بین 4 ولت و 30 ولت برای دقت در قرائتها.
- ولتاژ خروجی مستقیماً متناسب با دما است (10 میلیولت/درجه سانتیگراد).
- از خازنهای تفکیککننده در نزدیکی پایه تغذیه برای تثبیت استفاده کنید.
- در اتصال، قطبیت صحیح را حفظ کنید تا از آسیب جلوگیری شود.
- اطمینان حاصل کنید که اتصالات خوب هستند تا از ورودیهای شناور جلوگیری شود، زیرا این میتواند باعث خوانشهای نادرست شود.
دستورات سیمکشی

برای اتصال حساس(حس کننده) دما 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- دستورالعملهای سیمکشی
- ۰۵:۰۰- توضیح شِفر (کود)
- ۱۰:۱۵- نمایش قرائتهای دما
- ۱۲:۳۰- مسائل رایج و عیبیابی
++
/*
* 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");
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازونPurchase LM35 from Amazonamzn.to
-
ایبیPurchase LM35 from eBayebay.us
منابع و مراجع
-
برگه مشخصاتLM35 Datasheetti.com
فایلها📁
هیچ فایلی موجود نیست.