Рассмотрим как выводить данные с аналогового датчика на примере датчика температуры LM335. LM335 – это недорогой температурный чувствительный элемент с диапазоном от -40 °C до +100°C и точностью в 1°C. Данные на этот элемент представлены на рисунке 14
Фактически, 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
Получается – нам нужно только снять это напряжение на аналоговом входе (например,с помощью функции 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);
}