Search Code

Lekcija 42: Korištenje LM35 temperaturnog senzora | Arduino korak po korak kurs

Lekcija 42: Korištenje LM35 temperaturnog senzora | Arduino korak po korak kurs

U ovoj lekciji naučit ćemo kako koristiti LM35 temperaturni senzor s Arduinom za mjerenje i prikaz temperature u Celzijusima, Fahrenheitima i Kelvinima. Ovaj senzor izlazi napon koji je proporcionalan temperaturi, što nam omogućava da lako čitamo i obrađujemo podatke u našem Arduino programu. Do kraja ovog tutorijala, moći ćete implementirati akcije zasnovane na temperaturi u svojim projektima.

LM35 temperaturni senzor ima tri pina: lijevi pin je za napajanje, srednji pin izlazi napon koji odgovara temperaturi, a desni pin je za uzemljenje. Senzor radi unutar raspona napona od 4 do 30 volti i pruža izlaz od 10 milivolti po stepenu Celzijusa. Ova preciznost omogućava tačna očitavanja temperature u različitim aplikacijama.

Objašnjenje hardvera

Glavna komponenta u ovom projektu je LM35 temperaturni senzor. Dizajniran je da pruži analogni naponski izlaz koji je linearno proporcionalan temperaturi u stepenima Celzijusa. Senzor je pogodan za širok raspon temperatura, od -55°C do +150°C, što ga čini svestranim za različita okruženja.

LM35_pinout

LM35 zahtijeva minimalnu snagu (60 mikroampera) i radi u širokom rasponu napona. Njegova izlazna impedansa je niska, što mu omogućava direktno povezivanje s analognim ulaznim pinovima Arduina bez dodatnih krugova. Ova jednostavnost dizajna čini LM35 odličnim izborom za zadatke mjerenja temperature.

Detalji iz tehničke dokumentacije

Proizvođač Texas Instruments
Broj dijela LM35
Logički/IO napon 4–30 V
Izlazna struja (po kanalu) 1 mA max
Temperaturni raspon -55 do +150 °C
Izlazni napon 10 mV/°C
Tačnost ±0.5 °C na 25 °C
Pakovanje TO-92

 

  • Osigurajte ispravno napajanje između 4V i 30V za tačna očitavanja.
  • Izlazni napon je direktno proporcionalan temperaturi (10 mV/°C).
  • Koristite kondenzatore za odvajanje blizu pina za napajanje radi stabilizacije.
  • Održavajte ispravan polaritet prilikom povezivanja kako biste izbjegli oštećenja.
  • Osigurajte dobre veze kako biste izbjegli plutajuće ulaze, koji mogu uzrokovati pogrešna očitavanja.

Upute za povezivanje

LM35_basic_wiring_bb

Za povezivanje LM35 temperaturnog senzora, spojite lijevi pin (VCC) na 5V izlaz na Arduinu. Srednji pin (Izlaz) treba spojiti na analogni ulazni pin A0, koji ćemo koristiti za čitanje temperature. Na kraju, spojite desni pin (Uzemljenje) na jedan od pinova za uzemljenje na Arduinu. Osigurajte da su sve veze sigurne kako biste spriječili bilo kakve probleme tokom rada.

Prilikom povezivanja, zapamtite da se LM35 može napajati naponom između 4V i 30V, ali korištenje 5V je dovoljno za Arduino aplikacije. Ako vidite neočekivana očitavanja temperature, provjerite veze i osigurajte da je senzor ispravno napajan.

Primjeri koda i objašnjenje

U Arduino kodu, definiramo analogni ulazni pin za čitanje izlaznog napona LM35 s identifikatorom inPin, koji je postavljen na A0. Dodatno, definiramo konstantu LM35_FACTOR postavljenu na 0.01 koja predstavlja izlaz senzora po stepenu Celzijusa.

const int inPin = A0; // može se promijeniti
const float LM35_FACTOR = 0.01; // ne mijenjati

Ova postavka nam omogućava da čitamo temperaturu na jednostavan način. Zatim, inicijaliziramo serijsku komunikaciju u setup() funkciji kako bismo počeli slati podatke o temperaturi na serijski monitor.

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

Unutar loop() funkcije, kontinuirano čitamo temperaturu i ispisujemo je u različitim jedinicama. Funkcija printTemperature() prima karakter parametar za specificiranje željenog formata temperature, što nam omogućava da prikažemo temperaturu u Celzijusima, Fahrenheitima ili Kelvinima.

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

Za poduzimanje akcije na osnovu temperature, možemo provjeriti da li temperatura prelazi određeni prag koristeći funkciju getTemperature(). Ova funkcija izračunava prosječnu temperaturu preko specificiranog broja uzoraka.

Za više detalja, pogledajte povezani video za potpuno objašnjenje koda (u videu na 10:15).

Demonstracija / Šta očekivati

Kada je LM35 senzor ispravno povezan i Arduino kod je uploadan, trebali biste vidjeti temperaturu prikazanu u Celzijusima, Fahrenheitima i Kelvinima na serijskom monitoru. Ako primijenite toplinu na senzor, primijetit ćete da se očitavanja temperature povećavaju u skladu s tim.

Budite svjesni da nepravilno povezivanje može dovesti do nestalnih očitavanja temperature, kao što su ekstremno visoke ili niske vrijednosti. Uvijek osigurajte da je senzor ispravno povezan kako biste izbjegli takve probleme (u videu na 12:30).

Vremenske oznake videa

  • 00:00 - Uvod u LM35
  • 02:30 - Upute za povezivanje
  • 05:00 - Objašnjenje koda
  • 10:15 - Demonstracija očitavanja temperature
  • 12:30 - Uobičajeni problemi i rješavanje problema

Images

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

Things you might need

Resources & references

Files📁

No files available.