Руководство по датчикам температуры LM35, LM335 и LM34 с Arduino

В этом руководстве показано, как использовать датчики температуры LM35 (LM35DZ), LM335 и LM34 с платой Arduino. Мы покажем, как подключить датчики и написать код для получения показаний температуры. В завершение мы создадим пример проекта для отображения показаний датчика на OLED-дисплее.

LM35 LM35DZ LM34 LM335 Arduino плата OLED температура Цельсий Фаренгейт показания

Знакомство с датчиками температуры LM35, LM335 и LM34

LM35, LM335 и LM34 — это линейные датчики температуры, которые выдают напряжение, пропорциональное значению температуры.

Датчик температуры

Выходное напряжение

Линейность

LM35 (LM35DZ)

пропорционально температуре в Цельсиях (°C)

10 мВ/°C

LM335

пропорционально температуре в Кельвинах (°K)

10 мВ/°K

LM34

пропорционально температуре в Фаренгейтах (°F)

10 мВ/°F

Эти датчики работают аналогичным образом, но откалиброваны по-разному для выдачи напряжения, пропорционального различным единицам измерения температуры.

LM35 выдаёт 10 мВ на каждый градус Цельсия повышения температуры. Аналогичным образом LM335 выдаёт 10 мВ на каждый градус Кельвина повышения температуры, а LM34 выдаёт 10 мВ на каждый градус Фаренгейта повышения температуры.

Например, если LM35 выдаёт напряжение 345 мВ, это означает, что значение температуры составляет 34,5 °C.

Для получения дополнительной информации об этих датчиках вы можете обратиться к их техническим описаниям (datasheet):

Где купить?

Вы можете перейти на Maker Advisor, чтобы найти лучшую цену на датчики температуры в различных магазинах:

Распиновка LM35 (LM35DZ)

LM35 имеет всего три вывода: VCC, Vout и GND.

Распиновка LM35 LM35DZ. Выводы: VCC, Vout и GND

Ниже приведены соединения, которые необходимо выполнить между LM35 и Arduino:

LM35 / LM34

Arduino

VCC

5V

Vout

Любой аналоговый пин

GND

GND

Примечание: если вы используете датчик температуры LM34, его распиновка совпадает с распиновкой LM35.

Распиновка LM335

Распиновка датчика температуры LM335 немного отличается.

Распиновка LM335 LM335Z. Выводы: VCC, Vout и GND

LM335

Arduino

Adj

Не подключать

Vout

Любой аналоговый пин (подтянуть резистором 2 кОм)

GND

GND

Вывод Adj можно использовать для калибровки датчика и получения более точных показаний температуры. В этом руководстве мы не будем использовать этот вывод, поэтому он должен оставаться неподключённым.

Схема подключения

Следуйте одной и той же схеме подключения, если вы используете датчик температуры LM35 или LM34. Если вы используете LM335, следуйте немного другой схеме.

LM35 и LM34 с Arduino

LM35 / LM35DZ и LM34 — схема подключения к Arduino

LM335 с Arduino

LM335 — схема подключения к Arduino

Код — Чтение температуры

LM35 LM35DZ LM34 LM335 Arduino плата OLED подключение

Следующий код считывает температуру с датчика LM35 и отображает показания в мониторе порта (Serial Monitor). Этот код также совместим с LM335 и LM34 — вам просто нужно раскомментировать некоторые строки в коде, чтобы использовать нужный датчик.

/*
 * Rui Santos
 * Complete Project Details https://RandomNerdTutorials.com
 */

const int sensorPin = A0;
float sensorValue;
float voltageOut;

float temperatureC;
float temperatureF;

// uncomment if using LM335
//float temperatureK;

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  voltageOut = (sensorValue * 5000) / 1024;

  // calculate temperature for LM35 (LM35DZ)
  temperatureC = voltageOut / 10;
  temperatureF = (temperatureC * 1.8) + 32;

  // calculate temperature for LM335
  //temperatureK = voltageOut / 10;
  //temperatureC = temperatureK - 273;
  //temperatureF = (temperatureC * 1.8) + 32;

  // calculate temperature for LM34
  //temperatureF = voltageOut / 10;
  //temperatureC = (temperatureF - 32.0)*(5.0/9.0);

  Serial.print("Temperature(ºC): ");
  Serial.print(temperatureC);
  Serial.print("  Temperature(ºF): ");
  Serial.print(temperatureF);
  Serial.print("  Voltage(mV): ");
  Serial.println(voltageOut);
  delay(1000);
}

Просмотреть исходный код

Как работает код

Вы начинаете с определения пина, к которому подключён выход датчика. Это должен быть аналоговый пин. Мы используем пин A0, но вы можете использовать любой другой аналоговый пин.

const int sensorPin = A0;

Определите переменную, которая будет хранить аналоговое значение, считанное с датчика:

float sensorValue;

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

float voltageOut;

Затем создайте переменные, которые будут хранить значение температуры. Здесь мы создаём переменные temperatureC и temperatureF для хранения температуры в градусах Цельсия и Фаренгейта соответственно.

float temperatureC;
float temperatureF;

Если вы используете датчик LM335, вам также потребуется переменная для хранения температуры в Кельвинах. Поэтому, если вы используете этот датчик, вам нужно раскомментировать следующую строку:

//float temperatureK;

В setup() объявите sensorPin как вход:

pinMode(sensorPin, INPUT);

Инициализируйте последовательное соединение (Serial) со скоростью 9600 бод. Вам нужно инициализировать последовательное соединение, чтобы отображать показания в мониторе порта (Serial Monitor):

Serial.begin(9600);

В loop() считайте значение, поступающее от датчика, и сохраните его в переменной voltageOut. Для чтения аналогового значения с Arduino достаточно использовать функцию analogRead() и передать в качестве аргумента пин, который вы хотите считать.

voltageOut = analogRead(sensorPin);

Как упоминалось ранее, эти датчики выдают значение напряжения, пропорциональное температуре.

Аналоговые значения, считываемые Arduino, могут иметь значение от 0 до 1024, где 0 соответствует 0 В, а 1024 — 5 В. Таким образом, мы можем легко получить выходное напряжение датчика в мВ.

voltageOut = (sensorValue * 5000) / 1024

В случае датчика LM35 мы видели, что 10 мВ соответствует повышению температуры на один градус Цельсия. Таким образом, температура в градусах Цельсия соответствует напряжению, считанному с датчика в мВ, делённому на 10 мВ.

temperatureC = voltageOut / 10;

Чтобы получить температуру в градусах Фаренгейта, нам просто нужно использовать формулу преобразования Цельсий -> Фаренгейт:

temperatureF = (temperatureC * 1.8) + 32;

Если вы используете LM335 или LM34, для получения температуры применяются те же вычисления. Вам просто нужно помнить, что LM335 возвращает температуру в градусах Кельвина, а LM34 — в градусах Фаренгейта. Затем вы можете преобразовать значения в другие единицы, если это необходимо.

Наконец, выведите показания датчиков в монитор порта (Serial Monitor) в градусах Цельсия и Фаренгейта.

Serial.print("Temperature(ºC): ");
Serial.print(temperatureC);
Serial.print("  Temperature(ºF): ");
Serial.print(temperatureF);

В целях отладки мы также выводим напряжение.

Serial.print("  Voltage(mV): ");
Serial.println(voltageOut);

Цикл loop() повторяется каждую секунду.

delay(1000);

Демонстрация

Загрузите код в Arduino IDE. Не забудьте выбрать правильную плату и COM-порт в меню Tools.

После этого откройте монитор порта (Serial Monitor) со скоростью 9600 бод. Вы должны получать новые показания температуры каждую секунду. Вы можете накрыть датчик пальцем, чтобы увидеть, как значения температуры увеличиваются.

LM35/LM35DZ, LM335 и LM34 — показания температуры в мониторе порта Arduino IDE Serial Monitor

Показания температуры на OLED-дисплее

В этом разделе мы покажем вам, как отобразить показания датчика на OLED-дисплее.

Подробное руководство по использованию OLED-дисплея с Arduino смотрите в следующей статье:

Необходимые компоненты

Для этого проекта вам понадобятся следующие компоненты:

Вы можете воспользоваться приведёнными выше ссылками или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Схема подключения

Подключите все компоненты, как показано на следующей схеме:

Arduino LM35/LM35DZ OLED-дисплей — схема подключения

Установка библиотек для OLED

Для управления OLED-дисплеем вам нужны библиотеки adafruit_SSD1306.h и adafruit_GFX.h. Следуйте приведённым ниже инструкциям для установки этих библиотек.

  1. Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Должен открыться менеджер библиотек (Library Manager).

  2. Введите «SSD1306» в поле поиска и установите библиотеку SSD1306 от Adafruit.

Установка библиотеки SSD1306 OLED для Arduino UNO
  1. После установки библиотеки SSD1306 от Adafruit введите «GFX» в поле поиска и установите эту библиотеку.

Установка библиотеки GFX для Arduino UNO
  1. После установки библиотек перезапустите Arduino IDE.

Код — Отображение показаний на OLED

После сборки схемы и установки необходимых библиотек загрузите следующий код на плату Arduino.

/*
 * Rui Santos
 * Complete Project Details https://RandomNerdTutorials.com
 */

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int sensorPin = A0;
float sensorValue;
float voltageOut;

float temperatureC;
float temperatureF;

// uncomment if using LM335
//float temperatureK;

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }

  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  voltageOut = (sensorValue * 5000) / 1024;

  // calculate temperature for LM35 (LM35DZ)
  temperatureC = voltageOut / 10;
  temperatureF = (temperatureC * 1.8) + 32;

  // calculate temperature for LM335
  //temperatureK = voltageOut / 10;
  //temperatureC = temperatureK - 273;
  //temperatureF = (temperatureC * 1.8) + 32;

  // calculate temperature for LM34
  //temperatureF = voltageOut / 10;
  //temperatureC = (temperatureF - 32.0)*(5.0/9.0);

  Serial.print("Temperature(ºC): ");
  Serial.print(temperatureC);
  Serial.print("  Temperature(ºF): ");
  Serial.print(temperatureF);

  // clear display
  display.clearDisplay();

  // display temperature Celsius
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(temperatureC);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");

  // display temperature Fahrenheit
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(temperatureF);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("F");

  display.display();
  delay(1000);
 }

Просмотреть исходный код

Демонстрация

Поздравляем! Вы завершили проект. Теперь вы можете проверить показания датчика на OLED-дисплее. Новые показания температуры отображаются каждую секунду.

LM35 LM35DZ LM34 LM335 Arduino плата OLED-дисплей показания температуры

Заключение

LM35, LM335 и LM34 — это линейные датчики температуры, которые выдают напряжение, пропорциональное значению температуры. Они могут питаться от пина 5V Arduino, а для считывания напряжения используется аналоговый пин.

Считывание напряжения с датчика не сложнее, чем использование функции analogRead() на пине датчика. Затем достаточно выполнить простое вычисление, чтобы получить температуру в нужных единицах измерения.

Мы надеемся, что это руководство оказалось для вас полезным. У нас есть другие руководства по датчикам и модулям Arduino, которые могут вам понравиться: