Search Code

Somo la 42: Kutumia Sensor ya Joto ya LM35 | Kozi ya Arduino Hatua kwa Hatua

Somo la 42: Kutumia Sensor ya Joto ya LM35 | Kozi ya Arduino Hatua kwa Hatua

Katika somo hili, tutajifunza jinsi ya kutumia kihisi joto cha LM35 na Arduino kupima na kuonyesha joto kwa Selsiasi, Fahrenheit, na Kelvin. Kihisi hiki hutoa voltage inayolingana na joto, ikituruhusu kusoma na kuchakata data kwa urahisi katika programu yetu ya Arduino. Kufikia mwisho wa mafunzo haya, utaweza kutekeleza vitendo vinavyotegemea joto katika miradi yako.

Kihisi joto cha LM35 kina pini tatu: pini ya kushoto ni ya usambazaji wa nguvu, pini ya kati hutoa voltage inayolingana na joto, na pini ya kulia ni ya ardhi. Kihisi hufanya kazi ndani ya anuwai ya voltage ya 4 hadi 30 volti na hutoa pato la millivolti 10 kwa kila digrii Selsiasi. Usahihi huu unaruhusu usomaji sahihi wa joto katika matumizi mbalimbali.

Vifaa Vimeelezwa

Kijenzi kikuu katika mradi huu ni kihisi joto cha LM35. Kimeundwa kutoa pato la voltage ya analogi inayolingana moja kwa moja na joto katika digrii Selsiasi. Kihisi kinafaa kwa anuwai pana ya joto, kutoka -55°C hadi +150°C, na kuifanya iwe hodari kwa mazingira tofauti.

LM35_pinout

LM35 inahitaji nguvu ndogo (mikroamp 60) na hufanya kazi katika anuwai pana ya voltage. Uwezo wake wa pato ni wa chini, unaoruhusu kuunganishwa moja kwa moja na pini za pembejeo za analogi za Arduino bila saketi za ziada. Urahisi huu wa muundo unafanya LM35 kuwa chaguo bora kwa kazi za kupima joto.

Maelezo ya Datasheet

Mtengenezaji Texas Instruments
Nambari ya sehemu LM35
Voltage ya mantiki/IO 4–30 V
Pato la sasa (kwa kila chaneli) 1 mA max
Anuwai ya joto -55 hadi +150 °C
Voltage ya pato 10 mV/°C
Usahihi ±0.5 °C kwa 25 °C
Kifurushi TO-92

 

  • Hakikisha usambazaji sahihi wa nguvu kati ya 4V na 30V kwa usomaji sahihi.
  • Voltage ya pato inalingana moja kwa moja na joto (10 mV/°C).
  • Tumia capacitors za kutenganisha karibu na pini ya nguvu kwa utulivu.
  • Dumisha polarity sahihi wakati wa kuunganisha ili kuepuka uharibifu.
  • Hakikisha miunganisho mizuri ili kuepuka pembejeo zinazoelea, ambazo zinaweza kusababisha usomaji usio sahihi.

Maagizo ya Uunganishaji

LM35_basic_wiring_bb

Ili kuunganisha kihisi joto cha LM35, unganisha pini ya kushoto (VCC) kwenye pato la 5V kwenye Arduino. Pini ya kati (Pato) inapaswa kuunganishwa kwenye pini ya pembejeo ya analogi A0, ambayo tutatumia kusoma joto. Hatimaye, unganisha pini ya kulia (Ardhi) kwenye moja ya pini za ardhi kwenye Arduino. Hakikisha miunganisho yote ni salama ili kuzuia matatizo yoyote wakati wa operesheni.

Wakati wa kuunganisha, kumbuka kwamba LM35 inaweza kuendeshwa kwa voltage ya usambazaji kati ya 4V na 30V, lakini kutumia 5V kunatosha kwa matumizi ya Arduino. Ukiona usomaji wa joto usiotarajiwa, angalia mara mbili miunganisho na uhakikishe kihisi kina nguvu ipasavyo.

Mifano ya Msimbo na Maelekezo

Katika msimbo wa Arduino, tunafafanua pini ya pembejeo ya analogi kwa kusoma voltage ya pato ya LM35 kwa kitambulisho inPin, ambacho kimewekwa kuwa A0. Zaidi ya hayo, tunafafanua kiwango cha mara kwa mara LM35_FACTOR kilichowekwa kuwa 0.01 kuwakilisha pato la kihisi kwa kila digrii Selsiasi.

const int inPin = A0; // inaweza kubadilishwa
const float LM35_FACTOR = 0.01; // usibadilishe

Mpangilio huu unaturuhusu kusoma joto kwa njia rahisi. Ifuatayo, tunaanzisha mawasiliano ya mfululizo katika kazi ya setup() kuanza kutoa data ya joto kwenye kichunguzi cha mfululizo.

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

Ndani ya kazi ya loop(), tunaendelea kusoma joto na kuchapisha kwa vitengo tofauti. Kazi ya printTemperature() inachukua kigezo cha herufi kubainisha muundo wa joto unaotakiwa, ikituruhusu kuonyesha joto kwa Selsiasi, Fahrenheit, au Kelvin.

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

Ili kuchukua hatua kulingana na joto, tunaweza kuangalia ikiwa joto linazidi kiwango fulani kwa kutumia kazi ya getTemperature(). Kazi hii huhesabu wastani wa joto kwa idadi maalum ya sampuli.

Kwa maelezo zaidi, tazama video inayohusiana kwa maelekezo kamili ya msimbo (katika video saa 10:15).

Maonyesho / Nini cha Kutarajia

Wakati kihisi cha LM35 kimeunganishwa vizuri na msimbo wa Arduino umepakiwa, unapaswa kuona joto likionyeshwa kwa Selsiasi, Fahrenheit, na Kelvin kwenye kichunguzi cha mfululizo. Ukitumia joto kwenye kihisi, utaona usomaji wa joto ukiongezeka ipasavyo.

Jua kwamba uunganishaji usio sahihi unaweza kusababisha usomaji wa joto usio wa kawaida, kama vile thamani za juu sana au za chini sana. Hakikisha kihisi kimeunganishwa kwa usahihi ili kuepuka matatizo kama hayo (katika video saa 12:30).

Vidokezo vya Muda wa Video

  • 00:00 - Utangulizi wa LM35
  • 02:30 - Maagizo ya Uunganishaji
  • 05:00 - Maelezo ya Msimbo
  • 10:15 - Maonyesho ya Usomaji wa Joto
  • 12:30 - Matatizo ya Kawaida na Urekebishaji

Bilder

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
Språk: 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");
}

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Inga filer tillgängliga.