ትምህርት 42፡ የLM35 የሙቀት ዳሳሽ መጠቀም | የአርዱኢኖ ደረጃ በደረጃ ኮርስ
በዚህ ትምህርት ውስጥ፣ የLM35 የሙቀት ዳሳሽ ከአርዱኖ ጋር በመጠቀም የሙቀት መጠንን በሴልሺየስ፣ በፋራናይት እና በኬልቪን እንዴት መለካት እና ማሳየት እንደምንችል እንማራለን። ይህ ዳሳሽ ከሙቀት መጠኑ ጋር ተመጣጣኝ የሆነ ቮልቴጅ ያወጣል፣ ይህም በአርዱኖ ፕሮግራማችን ውስጥ ውሂቡን በቀላሉ እንድናነብ እና እንድናስኬድ ያስችለናል። በዚህ መማሪያ መጨረሻ ላይ፣ በፕሮጀክቶችዎ ውስጥ በሙቀት ላይ የተመሰረቱ ተግባራትን መተግበር ይችላሉ።

የLM35 የሙቀት ዳሳሽ ሶስት ፒኖች አሉት፡ የግራ ፒን ለኃይል አቅርቦት ነው፣ የመሃል ፒን ከሙቀት መጠኑ ጋር የሚዛመድ ቮልቴጅ ያወጣል፣ እና የቀኝ ፒን ለመሬት (ግራውንድ) ነው። ዳሳሹ ከ4 እስከ 30 ቮልት ባለው የቮልቴጅ ክልል ውስጥ ይሰራል እና በአንድ ዲግሪ ሴልሺየስ 10 ሚሊቮልት ያወጣል። ይህ ትክክለኛነት በተለያዩ አፕሊኬሽኖች ውስጥ ትክክለኛ የሙቀት መለኪያዎችን ለማግኘት ያስችላል።
ሃርድዌር ተብራርቷል
በዚህ ፕሮጀክት ውስጥ ዋናው አካል የLM35 የሙቀት ዳሳሽ ነው። ከሙቀት መጠኑ ጋር በሴልሺየስ ዲግሪ በመስመራዊ መልኩ የሚመጣጠን የአናሎግ ቮልቴጅ ውጤት ለማቅረብ የተነደፈ ነው። ዳሳሹ ከ-55°ሴ እስከ +150°ሴ ለተለያዩ የሙቀት መጠኖች ተስማሚ ነው፣ ይህም ለተለያዩ አካባቢዎች ሁለገብ ያደርገዋል።
LM35 አነስተኛ ኃይል (60 ማይክሮአምፕ) ይፈልጋል እና በሰፊ የቮልቴጅ ክልል ውስጥ ይሰራል። የውጤት እክል (output impedance) ዝቅተኛ ነው፣ ይህም ያለ ተጨማሪ ወረዳ በቀጥታ ከአርዱኖ አናሎግ ግቤት ፒኖች ጋር እንዲገናኝ ያስችለዋል። ይህ የንድፍ ቀላልነት LM35ን ለሙቀት መለኪያ ተግባራት እጅግ በጣም ጥሩ ምርጫ ያደርገዋል።
የዳታሼት ዝርዝሮች
| አምራች | ቴክሳስ ኢንስትሩመንትስ |
|---|---|
| የክፍል ቁጥር | LM35 |
| የሎጂክ/IO ቮልቴጅ | 4–30 ቮ |
| የውጤት ኤሌክትሪክ (በአንድ ቻናል) | 1 ሚኤ ከፍተኛ |
| የሙቀት ክልል | -55 እስከ +150 °ሴ |
| የውጤት ቮልቴጅ | 10 ሚቮ/°ሴ |
| ትክክለኛነት | ±0.5 °ሴ በ25 °ሴ |
| ፓኬጅ | TO-92 |
- ለትክክለኛ ንባቦች በ4ቮ እና 30ቮ መካከል ትክክለኛ የኃይል አቅርቦት ያረጋግጡ።
- የውጤት ቮልቴጅ ከሙቀት መጠን ጋር በቀጥታ ተመጣጣኝ ነው (10 ሚቮ/°ሴ)።
- ለመረጋጋት በኃይል ፒን አጠገብ የዲኮፕሊንግ ካፓሲተሮችን ይጠቀሙ።
- ጉዳትን ለማስቀረት ትክክለኛውን የፖላሪቲ አቅጣጫ ይጠብቁ።
- ተንሳፋፊ ግቤቶችን ለማስቀረት ጥሩ ግንኙነቶችን ያረጋግጡ፣ ምክንያቱም እነዚህ የተሳሳቱ ንባቦችን ሊያስከትሉ ይችላሉ።
የወልና (ዋየሪንግ) መመሪያዎች

የLM35 የሙቀት ዳሳሽን ለማገናኘት፣ የግራ ፒን (VCC) ከአርዱኖው 5V ውጤት ጋር ያገናኙ። የመሃል ፒን (ውጤት) ከአናሎግ ግቤት ፒን A0 ጋር መገናኘት አለበት፣ ይህንንም የሙቀት መጠኑን ለማንበብ እንጠቀማለን። በመጨረሻም፣ የቀኝ ፒን (መሬት) ከአርዱኖው የመሬት ፒኖች በአንዱ ጋር ያገናኙ። በስራ ጊዜ ችግሮችን ለማስቀረት ሁሉም ግንኙነቶች ደህንነታቸው የተጠበቀ መሆናቸውን ያረጋግጡ።
በሚያገናኙበት ጊዜ፣ LM35 በ4ቮ እና 30ቮ መካከል ባለው የአቅርቦት ቮልቴጅ መሰራት እንደሚችል ያስታውሱ፣ ነገር ግን 5ቮ መጠቀም ለአርዱኖ አፕሊኬሽኖች በቂ ነው። ያልተጠበቁ የሙቀት ንባቦችን ካዩ፣ ግንኙነቶቹን በድጋሚ ያረጋግጡ እና ዳሳሹ በትክክል ኃይል እያገኘ መሆኑን ያረጋግጡ።
የኮድ ምሳሌዎች እና ማብራሪያ
በአርዱኖ ኮድ ውስጥ፣ የLM35 ውጤት ቮልቴጅን ለማንበብ የአናሎግ ግቤት ፒንን በመለያ inPin እንገልጻለን፣ እሱም ወደ A0 ተዋቅሯል። በተጨማሪም፣ የዳሳሹን ውጤት በአንድ ዲግሪ ሴልሺየስ ለመወከል LM35_FACTOR የተባለ ቋሚ ወደ 0.01 እንገልጻለን።
const int inPin = A0; // መቀየር ይቻላል
const float LM35_FACTOR = 0.01; // አይቀየርም
ይህ ዝግጅት የሙቀት መጠኑን በቀጥታ እንድናነብ ያስችለናል። በመቀጠል፣ የሙቀት ውሂብን ወደ ሴሪያል ሞኒተር ማውጣት ለመጀመር በsetup() ተግባር ውስጥ የሴሪያል ግንኙነትን እንጀምራለን።
void setup() {
Serial.begin(9600);
Serial.println("ሮቦጃክስ LM35 ለአርዱኖ");
}
በloop() ተግባር ውስጥ፣ የሙቀት መጠኑን በተከታታይ እናነባለን እና በተለያዩ አሃዶች እናተምታለን። የprintTemperature() ተግባር የሚፈለገውን የሙቀት ቅርጸት ለመግለጽ የቁምፊ መለኪያ ይወስዳል፣ ይህም የሙቀት መጠኑን በሴልሺየስ፣ በፋራናይት ወይም በኬልቪን እንድናሳይ ያስችለናል።
void loop() {
printTemperature('C');
printTemperature('F');
printTemperature('K');
delay(1000); // 1000ሚሴ ይጠብቁ
}
በሙቀት መጠኑ ላይ ተመስርቶ እርምጃ ለመውሰድ፣ getTemperature() ተግባርን በመጠቀም የሙቀት መጠኑ የተወሰነ ገደብ እንደሚያልፍ ማረጋገጥ እንችላለን። ይህ ተግባር በተወሰነ የናሙና ብዛት ላይ አማካይ የሙቀት መጠንን ያሰላል።
ለተጨማሪ ዝርዝሮች፣ ለተሟላ የኮድ ማብራሪያ ተያያዥውን ቪዲዮ ይመልከቱ (በቪዲዮው 10፡15 ላይ)።
ማሳያ / ምን እንደሚጠበቅ
የLM35 ዳሳሽ በትክክል ሲገናኝ እና የአርዱኖ ኮድ ሲሰቀል፣ የሙቀት መጠኑን በሴልሺየስ፣ በፋራናይት እና በኬልቪን በሴሪያል ሞኒተር ላይ ሲታይ ማየት ይኖርዎታል። ሙቀትን በዳሳሹ ላይ ካደረጉ፣ የሙቀት ንባቦቹ በዚሁ መጠን ሲጨመሩ ያስተውላሉ።
የተሳሳተ የወልና አሰራር እንደ እጅግ ከፍተኛ ወይም ዝቅተኛ እሴቶች ያሉ ያልተረጋጋ የሙቀት ንባቦችን ሊያስከትል እንደሚችል ይገንዝቡ። እንደዚህ አይነት ችግሮችን ለማስቀረት ሁልጊዜ ዳሳሹ በትክክል መገናኘቱን ያረጋግጡ (በቪዲዮው 12፡30 ላይ)።
የቪዲዮ ጊዜ ምልክቶች
- 00፡00 - ስለ LM35 መግቢያ
- 02፡30 - የወልና መመሪያዎች
- 05፡00 - የኮድ ማብራሪያ
- 10፡15 - የሙቀት ንባቦች ማሳያ
- 12፡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
ፋይሎች📁
አንድ ፋይል የለም።