Код для поиска

Отображение температуры с LM35 на LCD1602 в Цельсиях, Фаренгейтах и Кельвинах

Отображение температуры с LM35 на LCD1602 в Цельсиях, Фаренгейтах и Кельвинах

В этом руководстве мы узнаем, как использовать температурный датчик LM35 для измерения температуры и отображения результатов на модуле LCD1602 в трех разных единицах: Цельсий, Фаренгейт и Кельвин. Этот проект — отличный способ объединить данные с датчиков с визуальным выводом, улучшая ваше понимание того, как датчики и дисплеи работают вместе в проектах на Arduino. Вы увидите, как правильно соединять компоненты и как реализовать код, необходимый для этой задачи.

LM35_с_LCD-1

Для начала мы будем использовать температурный датчик LM35, который является трехконтактным устройством. Он выдает аналоговое напряжение, соответствующее температуре в градусах Цельсия. LCD1602 будет использоваться для отображения показаний температуры. К концу урока у вас будет полностью функционирующая система отображения температуры. Для дальнейших разъяснений посмотрите видео (в видео на 00:55).

Аппаратное обеспечение объяснено

Основные компоненты этого проекта включают температурный датчик LM35 и дисплей LCD1602. LM35 работает, предоставляя выходное напряжение, которое линейно пропорционально температуре в градусах Цельсия, а именно 10 мВ/°C. Это упрощает преобразование показания напряжения в показание температуры с использованием простых вычислений в коде.

LCD1602 — это дисплей с символами 16x2, который может отображать два ряда текста. Он управляется через интерфейс I2C, который упрощает проводку, используя всего четыре соединения: VCC, GND, SDA (линия данных) и SCL (тактовая линия). Эта схема минимизирует количество выводов, необходимых для Arduino, что упрощает соединения и управление.

LM35_распиновка

Технические характеристики

Производитель Техасские Инструменты
Номер детали LM35
Логическое/входное напряжение 3-30 В
Выходное напряжение 10 мВ/°C
Диапазон температур от -55 до +150 °C
Точность ±0.5 °C (тип.)
Пакет ТО-46, ТО-220

  • Обеспечьте правильное питание, минимум 4 В для LM35.
  • При необходимости используйте подтягивающий резистор для линий SDA/SCL.
  • Сохраняйте проводку короткой, чтобы минимизировать шум.
  • Разделите блок питания с конденсаторами для стабильности.
  • Проверьте каждое соединение перед включением системы.

Инструкции по проводке

LM35_LCD1602_wiring_new

Чтобы подключить температурный сенсор 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 секунды между каждым отображением.

Полный код будет загружен ниже этой статьи, где вы сможете увидеть все функции и логику, реализованные для считывания температуры и соответствующего отображения.

Демонстрация / Чего ожидать

LM35_с_LCD-2

Когда вы запустите завершённый проект, ЖК-экран должен отображать показания температуры в Цельсиях, Фаренгейтах и Кельвинах, поочередно переключаясь между каждым дисплеем. Вы можете проверить реакцию сенсора, нагревая его, например, с помощью тепловой пушки, и наблюдая за изменениями температуры на экране (в видео на 09:15). Если сенсор подключен к источнику питания ниже рекомендованного напряжения, показания могут быть неточными, поэтому убедитесь, что он работает при минимальном напряжении 4В.

Временные метки видео

  • 00:00- Введение
  • 00:55- Обзор оборудования
  • 03:30- Инструкции по проводке
  • 06:15- Обзор кода
  • 09:15- Демонстрация

Изображения

LM35_pinout
LM35_pinout
LM35_LCD1602_wiring_new
LM35_LCD1602_wiring_new
LM35_with_LCD-2
LM35_with_LCD-2
LM35_with_LCD-1
LM35_with_LCD-1
326-On Lm35 Prints the temperature as C, F, or K on the LCD1602 or LCD2004
Язык: C++
/*
 * 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
}

Вещи, которые могут вам понадобиться

Ресурсы и ссылки

Файлы📁

Нет доступных файлов.