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

фото8

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


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

фото9

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

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

lm335

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

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


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

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

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

double temp = voltage*100 - 273.15;


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

Код скетча:

//

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

//

//

int ledpin=13;

int lm335=0;

void setup()

{

Serial.begin(9600);

pinMode(ledpin, OUTPUT);

}

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);

}