Кодты іздеу

Сабақ 42: LM35 температура датчигін қолдану | Arduino қадамдық курсы

Сабақ 42: LM35 температура датчигін қолдану | Arduino қадамдық курсы

Бұл сабақта біз LM35 температура сенсорын Arduino-мен қалай қолдануды үйренеміз, температураны Цельсий, Фаренгейт және Кельвин бойынша өлшеп, көрсету үшін. Бұл сенсор температураға пропорционалды кернеу шығарады, бұл бізге Arduino бағдарламамызда деректерді оңай оқуға және өңдеуге мүмкіндік береді. Осы оқулықтың соңында сіз жобаларыңызда температураға негізделген әрекеттерді жүзеге асыра аласыз.

LM35 температура сенсоры үш түйреуіштен тұрады: сол жақ түйреуіш қуат көзіне арналған, ортаңғы түйреуіш температураға сәйкес кернеу шығарады, ал оң жақ түйреуіш жерге (ground) қосылады. Сенсор 4-тен 30 вольтқа дейінгі кернеу диапазонында жұмыс істейді және Цельсий градусына 10 милливольт шығыс береді. Бұл дәлдік әртүрлі қолданбаларда температураны дәл оқуға мүмкіндік береді.

Аппараттық құрал түсіндірмесі

Бұл жобаның негізгі компоненті - LM35 температура сенсоры. Ол Цельсий градусындағы температураға сызықтық пропорционалды аналогтық кернеу шығысын қамтамасыз етуге арналған. Сенсор -55°C-тан +150°C-қа дейінгі кең температура диапазонына жарамды, бұл оны әртүрлі орталар үшін әмбебап етеді.

LM35_pinout

LM35 аз қуатты қажет етеді (60 микроампер) және кең кернеу диапазонында жұмыс істейді. Оның шығыс кедергісі төмен, бұл оны қосымша схемаларсыз Arduino-ның аналогтық кіріс түйреуіштеріне тікелей қосуға мүмкіндік береді. Бұл дизайнның қарапайымдылығы LM35-ті температураны өлшеу тапсырмалары үшін тамаша таңдау етеді.

Деректер парағының мәліметтері

Өндіруші Texas Instruments
Бөлшек нөмірі LM35
Логика/IO кернеуі 4–30 В
Шығыс тогы (арна үшін) 1 мА макс
Температура диапазоны -55-тен +150 °C-қа дейін
Шығыс кернеуі 10 мВ/°C
Дәлдік ±0.5 °C 25 °C температурада
Қаптама TO-92

 

  • Дәл көрсеткіштер үшін 4В пен 30В аралығындағы дұрыс қуат көзін қамтамасыз етіңіз.
  • Шығыс кернеуі температураға тікелей пропорционалды (10 мВ/°C).
  • Тұрақтандыру үшін қуат түйреуішінің жанында разрядтау конденсаторларын қолданыңыз.
  • Зақымдануды болдырмау үшін қосу кезінде полярлықты дұрыс сақтаңыз.
  • Қате көрсеткіштерге әкелетін жүзбелі кірістерді болдырмау үшін жақсы қосылымдарды қамтамасыз етіңіз.

Сым қосу нұсқаулары

LM35_basic_wiring_bb

LM35 температура сенсорын қосу үшін сол жақ түйреуішті (VCC) Arduino-дағы 5V шығысына қосыңыз. Ортаңғы түйреуіш (Output) A0 аналогтық кіріс түйреуішіне қосылуы керек, оны біз температураны оқу үшін қолданамыз. Соңында, оң жақ түйреуішті (Ground) Arduino-дағы жер түйреуіштерінің біріне қосыңыз. Жұмыс кезінде ақауларды болдырмау үшін барлық қосылымдардың сенімді екеніне көз жеткізіңіз.

Сым қосу кезінде LM35 4В пен 30В аралығындағы қуат кернеуімен жұмыс істей алатынын есте сақтаңыз, бірақ Arduino қолданбалары үшін 5В жеткілікті. Күтпеген температура көрсеткіштерін көрсеңіз, қосылымдарды қайта тексеріп, сенсордың дұрыс қуатталып тұрғанына көз жеткізіңіз.

Код мысалдары және түсіндірме

Arduino кодында біз 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("Robojax LM35 for Arduino");
}

loop() функциясының ішінде біз температураны үздіксіз оқып, оны әртүрлі бірліктерде басып шығарамыз. printTemperature() функциясы қажетті температура форматын көрсету үшін таңба параметрін қабылдайды, бұл температураны Цельсий, Фаренгейт немесе Кельвин бойынша көрсетуге мүмкіндік береді.

void loop() {
  printTemperature('C');
  printTemperature('F');
  printTemperature('K');
  delay(1000); // 1000мс күту
}

Температураға негізделген әрекет жасау үшін getTemperature() функциясын қолданып, температураның белгілі бір шектен асып кеткенін тексере аламыз. Бұл функция көрсетілген үлгілер саны бойынша орташа температураны есептейді.

Қосымша мәліметтер алу үшін толық кодты түсіндіруді қараңыз (бейнеде 10:15).

Демонстрация / Не күтуге болады

LM35 сенсоры дұрыс қосылғанда және Arduino коды жүктелгенде, сериялық мониторда температура Цельсий, Фаренгейт және Кельвин бойынша көрсетілуі керек. Сенсорға жылу қолдансаңыз, температура көрсеткіштерінің сәйкесінше жоғарылағанын байқайсыз.

Дұрыс емес сым қосу температураның тұрақсыз көрсеткіштеріне, мысалы, өте жоғары немесе төмен мәндерге әкелуі мүмкін екенін ескеріңіз. Мұндай мәселелерді болдырмау үшін сенсордың дұрыс қосылғанына әрқашан көз жеткізіңіз (бейнеде 12:30).

Бейне уақыт белгілері

  • 00:00 - LM35-ке кіріспе
  • 02:30 - Сым қосу нұсқаулары
  • 05:00 - Кодты түсіндіру
  • 10:15 - Температура көрсеткіштерінің демонстрациясы
  • 12:30 - Жиі кездесетін мәселелер және ақаулықтарды жою

Суреттер

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
Тіл: 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");
}

Сізге қажет болуы мүмкін нәрселер

Ресурстар мен сілтемелер

Файлдар📁

Файлдар жоқ.