Отображение температуры с LM35 на LCD1602 в Цельсиях, Фаренгейтах и Кельвинах
В этом руководстве мы узнаем, как использовать температурный датчик LM35 для измерения температуры и отображения результатов на модуле LCD1602 в трех разных единицах: Цельсий, Фаренгейт и Кельвин. Этот проект — отличный способ объединить данные с датчиков с визуальным выводом, улучшая ваше понимание того, как датчики и дисплеи работают вместе в проектах на Arduino. Вы увидите, как правильно соединять компоненты и как реализовать код, необходимый для этой задачи.
Для начала мы будем использовать температурный датчик LM35, который является трехконтактным устройством. Он выдает аналоговое напряжение, соответствующее температуре в градусах Цельсия. LCD1602 будет использоваться для отображения показаний температуры. К концу урока у вас будет полностью функционирующая система отображения температуры. Для дальнейших разъяснений посмотрите видео (в видео на 00:55).
Аппаратное обеспечение объяснено
Основные компоненты этого проекта включают температурный датчик LM35 и дисплей LCD1602. LM35 работает, предоставляя выходное напряжение, которое линейно пропорционально температуре в градусах Цельсия, а именно 10 мВ/°C. Это упрощает преобразование показания напряжения в показание температуры с использованием простых вычислений в коде.
LCD1602 — это дисплей с символами 16x2, который может отображать два ряда текста. Он управляется через интерфейс I2C, который упрощает проводку, используя всего четыре соединения: VCC, GND, SDA (линия данных) и SCL (тактовая линия). Эта схема минимизирует количество выводов, необходимых для Arduino, что упрощает соединения и управление.
Технические характеристики
| Производитель | Техасские Инструменты |
|---|---|
| Номер детали | LM35 |
| Логическое/входное напряжение | 3-30 В |
| Выходное напряжение | 10 мВ/°C |
| Диапазон температур | от -55 до +150 °C |
| Точность | ±0.5 °C (тип.) |
| Пакет | ТО-46, ТО-220 |
- Обеспечьте правильное питание, минимум 4 В для LM35.
- При необходимости используйте подтягивающий резистор для линий SDA/SCL.
- Сохраняйте проводку короткой, чтобы минимизировать шум.
- Разделите блок питания с конденсаторами для стабильности.
- Проверьте каждое соединение перед включением системы.
Инструкции по проводке

Чтобы подключить температурный сенсор LM35, соедините левый вывод с источником питания 5В от Arduino, который определен в коде какVCC2Средний контакт, который является выходным, должен быть подключен к аналоговому входному контакту.A0на Arduino. Наконец, подключите правый контакт LM35 к земле.
Для модуля LCD1602 подключите контакт земли к земле Arduino. Контакт VCC должен быть подключен к выходу 5V Arduino. Датчиковая линия (SDA) должна быть подключена к аналоговому контакту.A4, в то время как линия тактового сигнала (SCL) должна подключаться кA5Эта настройка позволяет Arduino общаться с ЖК-дисплеем, используя протокол I2C.
Примеры кода и руководство
В коде мы определяем входной контакт для сенсора LM35 и настраиваем ЖК-дисплей с его адресом I2C. Функция настройки инициализирует последовательную связь и ЖК-дисплей. Следующий фрагмент показывает, как инициализировать контакты:
const int inPin = A0; // Pin for LM35 output
const int VCC2 = 2; // Pin for LM35 VCC
const int iteration = 1000; // Number of readings for averaging
Здесь,inPinустановлено наA0, где считывается выход LM35.VCC2пин определен для питания LM35, иiterationиспользуется для усреднения показаний температуры.
Далее у нас есть главный цикл, который обрабатывает показания температуры и отображает их на ЖК-дисплее. Каждый тип температуры отображается последовательно с задержкой:
lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');
delay(2000);
Этот блок кода вызываетlcdDisplayфункция для отображения температуры в Цельсиях, Фаренгейтах и Кельвинах, с паузой в 2 секунды между каждым отображением.
Полный код будет загружен ниже этой статьи, где вы сможете увидеть все функции и логику, реализованные для считывания температуры и соответствующего отображения.
Демонстрация / Чего ожидать
Когда вы запустите завершённый проект, ЖК-экран должен отображать показания температуры в Цельсиях, Фаренгейтах и Кельвинах, поочередно переключаясь между каждым дисплеем. Вы можете проверить реакцию сенсора, нагревая его, например, с помощью тепловой пушки, и наблюдая за изменениями температуры на экране (в видео на 09:15). Если сенсор подключен к источнику питания ниже рекомендованного напряжения, показания могут быть неточными, поэтому убедитесь, что он работает при минимальном напряжении 4В.
Временные метки видео
- 00:00- Введение
- 00:55- Обзор оборудования
- 03:30- Инструкции по проводке
- 06:15- Обзор кода
- 09:15- Демонстрация
/*
* This Arduino sketch is to use LM35 to measure temperature.
* Prints the temperature as C, F, or K on the LCD1602 or LCD2004 with I2C module (4 wires).
*
* Watch video instructions for this code: https://youtu.be/XpMtQVCMIRA
*
* Written by Ahmad Shamshiri on May 12, 2020 at 19:53 in Ajax, Ontario, Canada
* in Ajax, Ontario, Canada. www.robojax.com
*
or make a donation using PayPal: http://robojax.com/L/?id=64
* * 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 VCC2 =2;
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change
// start of settings for LCD1602 with I2C
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x26, 16, 2);
// end of settings for LCD1602 with I2C
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
Serial.println("Robojax LM35 with LCD for Arduino");
pinMode(VCC2,OUTPUT);
digitalWrite(VCC2, HIGH);
lcd.begin();
lcd.backlight();
lcd.print("Robojax LM35");
lcd.setCursor(0,1);
lcd.print("Temp: ");
}
// the loop routine runs over and over again forever:
void loop() {
//robojax.com LM35 with LCD Code for Arduino
lcdDisplay(getTemperature('C'),'C');
delay(2000);
lcdDisplay(getTemperature('F'),'F');
delay(2000);
lcdDisplay(getTemperature('K'),'K');
delay(2000);
if(getTemperature('C') >87)
{
// do something here (watch video)
}
// printTemperature('C');
// Serial.println();
// printTemperature('F');
// Serial.println();
// printTemperature('K');
// Serial.println();
// Serial.println();
// Serial.print(" Temperature: ");
// printDegree();
// Serial.print(getTemperature('C'));
// Serial.println();
delay(100);
}
/*
* 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)
{
float value;
float averageTemperature =0;
int sensorValue = analogRead(inPin);
float voltage = sensorValue * (5.0 / 1023.0);
float temperature = voltage / LM35_FACTOR;
for(int i=0; i< iteration; i++)
{
averageTemperature += temperature;
}
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)
{
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");
}
/*
* lcdDisplay(float value,char symbol)
* displays value and title on LCD1602
* How to use:
* lcdDisplay(35.3,'C');
*/
void lcdDisplay(float value,char symbol)
{
// Robojax.com LCD1602 for LM35 Demo
for(int i=7; i<16;i++)
{
lcd.setCursor(i,1);
lcd.write(254);
}
lcd.setCursor (7,1); //
lcd.print(value);
lcd.print((char)223);
if(symbol =='F')
{
lcd.print("F");
}else if(symbol =='K')
{
lcd.print("K");
}else{
lcd.print("C");
}
// Robojax.com LCD1602 for LM35 Demo
}
Вещи, которые могут вам понадобиться
-
АмазонкаPurchase LM35 from Amazonamzn.to
-
eBayPurchase LM35 from eBayebay.us
Ресурсы и ссылки
-
Технический паспортLM35 Datasheetti.com
-
ВнешнийLM35 datasheet (PDF)ti.com
-
Внутренний
Файлы📁
Нет доступных файлов.