Lekcja 42: Użycie czujnika temperatury LM35 | Kurs Arduino Krok po Kroku
W tej lekcji nauczymy się, jak używać czujnika temperatury LM35 z Arduino do mierzenia i wyświetlania temperatury w stopniach Celsjusza, Fahrenheita i Kelvina. Czujnik ten generuje napięcie proporcjonalne do temperatury, co pozwala nam łatwo odczytywać i przetwarzać dane w programie Arduino. Po ukończeniu tego samouczka będziesz w stanie implementować działania oparte na temperaturze w swoich projektach.

Czujnik temperatury LM35 ma trzy piny: lewy pin służy do zasilania, środkowy pin generuje napięcie odpowiadające temperaturze, a prawy pin jest podłączony do masy. Czujnik działa w zakresie napięcia od 4 do 30 woltów i zapewnia wyjście 10 miliwoltów na stopień Celsjusza. Ta precyzja pozwala na dokładne odczyty temperatury w różnych zastosowaniach.
Omówienie sprzętu
Głównym elementem tego projektu jest czujnik temperatury LM35. Został zaprojektowany tak, aby zapewnić analogowe wyjście napięciowe, które jest liniowo proporcjonalne do temperatury w stopniach Celsjusza. Czujnik nadaje się do szerokiego zakresu temperatur, od -55°C do +150°C, co czyni go wszechstronnym w różnych środowiskach.
Czujnik LM35 wymaga minimalnej mocy (60 mikroamperów) i działa w szerokim zakresie napięć. Jego impedancja wyjściowa jest niska, co pozwala na bezpośrednie podłączenie do analogowych pinów wejściowych Arduino bez dodatkowych układów. Ta prostota konstrukcji sprawia, że LM35 jest doskonałym wyborem do zadań pomiaru temperatury.
Szczegóły z karty katalogowej
| Producent | Texas Instruments |
|---|---|
| Numer części | LM35 |
| Napięcie logiczne/IO | 4–30 V |
| Prąd wyjściowy (na kanał) | 1 mA maks. |
| Zakres temperatury | -55 do +150 °C |
| Napięcie wyjściowe | 10 mV/°C |
| Dokładność | ±0,5 °C przy 25 °C |
| Obudowa | TO-92 |
- Zapewnij prawidłowe zasilanie między 4 V a 30 V dla dokładnych odczytów.
- Napięcie wyjściowe jest wprost proporcjonalne do temperatury (10 mV/°C).
- Użyj kondensatorów odsprzęgających w pobliżu pinu zasilania dla stabilizacji.
- Zachowaj prawidłową polaryzację podczas podłączania, aby uniknąć uszkodzeń.
- Zapewnij dobre połączenia, aby uniknąć pływających wejść, które mogą powodować błędne odczyty.
Instrukcje podłączenia

Aby podłączyć czujnik temperatury LM35, podłącz lewy pin (VCC) do wyjścia 5V na Arduino. Środkowy pin (Output) należy podłączyć do analogowego pinu wejściowego A0, którego użyjemy do odczytu temperatury. Na koniec podłącz prawy pin (Ground) do jednego z pinów masy na Arduino. Upewnij się, że wszystkie połączenia są pewne, aby zapobiec problemom podczas pracy.
Podczas podłączania pamiętaj, że LM35 może być zasilany napięciem od 4 V do 30 V, ale użycie 5 V jest wystarczające dla aplikacji Arduino. Jeśli zauważysz nieoczekiwane odczyty temperatury, sprawdź ponownie połączenia i upewnij się, że czujnik jest prawidłowo zasilany.
Przykłady kodu i omówienie
W kodzie Arduino definiujemy analogowy pin wejściowy do odczytu napięcia wyjściowego LM35 z identyfikatorem inPin, który jest ustawiony na A0. Dodatkowo definiujemy stałą LM35_FACTOR ustawioną na 0,01, aby reprezentować wyjście czujnika na stopień Celsjusza.
const int inPin = A0; // można zmienić
const float LM35_FACTOR = 0.01; // nie zmieniać
Ta konfiguracja pozwala nam w prosty sposób odczytywać temperaturę. Następnie inicjalizujemy komunikację szeregową w funkcji setup(), aby rozpocząć wysyłanie danych o temperaturze do monitora szeregowego.
void setup() {
Serial.begin(9600);
Serial.println("Robojax LM35 dla Arduino");
}
W funkcji loop() ciągle odczytujemy temperaturę i wyświetlamy ją w różnych jednostkach. Funkcja printTemperature() przyjmuje parametr znakowy, aby określić żądany format temperatury, co pozwala nam wyświetlać temperaturę w stopniach Celsjusza, Fahrenheita lub Kelvina.
void loop() {
printTemperature('C');
printTemperature('F');
printTemperature('K');
delay(1000); // Czekaj 1000 ms
}
Aby podjąć działanie na podstawie temperatury, możemy sprawdzić, czy temperatura przekracza określony próg, używając funkcji getTemperature(). Funkcja ta oblicza średnią temperaturę z określonej liczby próbek.
Aby uzyskać więcej szczegółów, obejrzyj powiązane wideo z pełnym omówieniem kodu (w filmie o 10:15).
Demonstracja / Czego się spodziewać
Gdy czujnik LM35 jest prawidłowo podłączony, a kod Arduino został wgrany, powinieneś zobaczyć temperaturę wyświetlaną w stopniach Celsjusza, Fahrenheita i Kelvina na monitorze szeregowym. Jeśli przyłożysz ciepło do czujnika, zauważysz, że odczyty temperatury odpowiednio wzrosną.
Należy pamiętać, że nieprawidłowe podłączenie może prowadzić do nieregularnych odczytów temperatury, takich jak bardzo wysokie lub niskie wartości. Zawsze upewnij się, że czujnik jest podłączony prawidłowo, aby uniknąć takich problemów (w filmie o 12:30).
Znaczniki czasowe wideo
- 00:00 - Wprowadzenie do LM35
- 02:30 - Instrukcje podłączenia
- 05:00 - Wyjaśnienie kodu
- 10:15 - Demonstracja odczytów temperatury
- 12:30 - Typowe problemy i rozwiązywanie problemów
++
/*
* 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");
}
Rzeczy, których możesz potrzebować
-
AmazonPurchase LM35 from Amazonamzn.to
-
AllegroPurchase LM35 from eBayebay.us
Zasoby i odniesienia
-
Karta katalogowaLM35 Datasheetti.com
Pliki📁
Brak dostępnych plików.