CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Практическое программирование 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, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
  • +2
  • 2 сентября 2009, 13:13
  • admin

Комментарии (13)

RSS свернуть / развернуть
+
0
отличный пост.
детально все расписано, но по существу.
avatar

realist

  • 3 сентября 2009, 16:18
+
0
спасибо :)
avatar

admin

  • 3 сентября 2009, 17:00
+
+1
на сколько скачут показания такого датчика?
у меня при подключении простого потенциометра данные прыгают в пределах 2-3%
а тут как?
avatar

realist

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

admin

  • 3 сентября 2009, 17:04
+
+1
Говорят в 328 чипе свой датчик температуры есть: code.google.com/p/tinkerit/wiki/SecretThermometer
avatar

boa

  • 24 декабря 2009, 16:16
+
0
только
The sensor isn't very accurate — the data sheet says ±10°
=)
avatar

admin

  • 24 декабря 2009, 17:06
+
+1
But once you've worked out the offset and correct for it, accuracy improves.

;)
avatar

boa

  • 24 декабря 2009, 17:51
+
0
приобрел www.seeedstudio.com/depot/temperature-sensor-with-steel-head-p-78.html?cPath=84_89 SEN118A2B
не могу понять как высчитать из напряжения температуру, поможете?)
avatar

DRc

  • 21 сентября 2010, 16:55
+
0
Объясните, пожалуйста.
Как так может быть?
www.robocraft.ru/uploads/images/b/8/3/a/1/7718e2e105.png
www.robocraft.ru/uploads/images/4/4/8/2/1/8f07aae017.jpg
Вы случаем датчик не перевернули, когда контакты подписывали?
avatar

allius25

  • 20 ноября 2013, 10:15
+
+1
www.robocraft.ru/uploads/images/b/8/3/a/1/7718e2e105.png — Bottom view — Вид снизу.
Всё правильно=)
avatar

Zoltberg

  • 20 ноября 2013, 13:07
+
0
А… ясно, понятно
avatar

allius25

  • 20 ноября 2013, 13:41
+
+1
Зачем в приведенном коде скетча ledPin = 13? и его инициализация на выход?
avatar

TotCambIKoka

  • 5 апреля 2016, 06:18
+
0
Спасибо, пофиксил!
avatar

admin

  • 5 апреля 2016, 11:53

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.