Практическое программирование Arduino/Freeduino — Аналоговый датчик температуры – LM335


0. Начало
1. Цифровой ввод — кнопка
2. Аналоговый вывод — Fading
3. Аналоговый ввод – потенциометр
4. Аналоговый ввод – осциллограф
5. Генерация звука – пьезоизлучатель
6. Фоторезистор
7. Сенсор на светодиоде
8. Общение с Arduino — программирование работы с COM-портом

9. Аналоговый датчик температуры – LM335

Варианты измерения температуры:
1. термопара
2. терморезистор
3. аналоговый термодатчик
4. цифровой термодатчик

подробнее можно почитать здесь

Вариант использования терморезистора мы мельком рассмотрели здесь.
Сейчас же рассмотрим, как работать с аналоговыми датчиками температуры, на примере LM335.

LM335 – это недорогой (~ 40 рублей) температурный чувствительный элемент с диапазоном от -40 °C до +100°C и точностью в 1°C.

Даташит (datasheet – документация на элемент) на LM335 можно посмотреть здесь

Фактически, LM335 — это стабилитрон с нормированным Температурным Коэффициентом Напряжения (ТКU =10 мВ/K).

Т.е. изменение температуры датчика на 1 градус ведёт к изменению напряжения на 10mV.

Схема включения (соответствует типовой схеме включения стабилитрона):

Задавая ток через датчик в диапазоне от 0.45mA до 5mA (резистором R1), получаем напряжение на датчике, которое в десятках mV представляет абсолютную температуру в градусах Кельвина.

Как видим, используются только вторая и третья ножки датчика (если повернуть датчик к себе плоской стороной – то нумерация ножек будет идти слева-направо)

То есть, схему можно представить так:

Сопоставим напряжение на датчике и температуру, припоминая, что
0С = 273.15К
На датчике, при этом будет напряжение 2.7315V

ТКU =10 мВ/K => в 1V будет 100K

-40С = 233.15К
на датчике будет 2.3315V
+100С = 373.15К
на датчике будет 3.7315V

Получается – нам нужно только снять это напряжение на аналоговом входе (например, analog input 0) 🙂
Однако, функция analogRead, возвращает значение от 0 до 1023, причём 1023 соответствует величине Опорного Напряжения, задаваемого функцией analogReference и по умолчанию, составляющего 5V.
Т.о., чтобы узнать какое напряжение поступило к нам на вход – нужно выполнить простое преобразование:

double voltage = val*5.0/1024;

, где val – величина, полученная от analogRead
Далее остаётся только перевести это напряжение в градусы, а потом привести из градусов Кельвина в более привычные градусы Цельсия:

double temp = voltage*100 - 273.15;

в температуру переводим – просто умножая на 100

Код скетча:

//
// работа с температурным датчиком LM335
//
//

int lm335=0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  double val = analogRead(lm335);
  Serial.print("Analog 0: ");
  Serial.print(int(val));
  double voltage = val*5.0/1024;
  Serial.print(" : ");
  Serial.print(voltage);
  double temp = voltage*100 - 273.15;
  Serial.print(" : ");
  Serial.println(temp);
  delay(100);
}

В последнем столбце вывода получаем заветную температуру в градусах Цельсия 🙂

читать далее: 10. Подключаем мышку PS/2

Ссылки
1. Измерение температуры
2. Аналоговые датчики температуры и Arduino
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1244775272
http://www.yarst.org/T1.htm

По теме
Arduino, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)


0 комментариев на «“Практическое программирование Arduino/Freeduino — Аналоговый датчик температуры – LM335”»

  1. на сколько скачут показания такого датчика?
    у меня при подключении простого потенциометра данные прыгают в пределах 2-3%
    а тут как?

    • в статье есть скриншот Arduino IDE — там на мониторе последовательного порта данные так же скачут.
      Как видно по коду скетча замеры делаются каждые 100 ms. Эти колебания можно поправить, если ввести дополнительную переменную, в которой суммировать все показания за 1 (или более )секунд и расчитывать среднее значение 🙂

    • только

      The sensor isn’t very accurate — the data sheet says ±10°

      =)

    • But once you’ve worked out the offset and correct for it, accuracy improves.

      😉

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение