3.7. Работа с аналоговым датчиком температуры
Рассмотрим простой пример работы с датчиком температуры ТМР36, упомянутым в предыдущем разделе. Вы можете выбрать любой аналоговый датчик из приведенного ранее списка или взять какой-нибудь другой. Последовательность действий, описанная далее, практически одинакова для любого аналогового датчика.
Для начала подсоедините к плате Arduino Uno RGB-светодиод, как в главе 2, и датчик температуры к выходу A0 (рис. 3.8).
На основе этой схемы создадим простую систему, сигнализирующую об изменении температуры. RGB-светодиод будет гореть зеленым, когда температура находится в пределах допустимого диапазона, красным, когда станет жарко, и синим, когда становится холодно.

Рис. 3.8. Схема подключения датчика температуры
- 74 -
Прежде всего, определите приемлемый для вас температурный диапазон. Используя программу из листинга 3.1, определите аналоговые значения для верхнего и нижнего порогов температуры. Для меня нижний порог комфортной температуры составляет 20°С, что соответствует аналоговому значению 143. У вас эта цифра может быть другой. Следите за показаниями в мониторе последовательного порта при наступлении нижнего и верхнего предела температуры. Эти значения можно получить из графика на рис. 3.7 или из формулы, связывающей температуру (в °С) с входным напряжением (в мВ):
Температура (°С)х10 = Напряжение (мВ)- 500.
Напряжение 700 мВ соответствует температуре 20°С. Расчет по формуле (или просто анализ показаний монитора последовательного порта) дает для 22°С цифровое значение 147, для 18°С- 139. Эти величины выберем для нижнего и верхнего значений комфортной температуры, чтобы изменять цвет светодиода. Функция analogRead() будет считывать показания датчика температуры, digitalWrite() устанавливать цвет светодиода.
Совет Рекомендую вам не копировать листинг 3.2, а попробовать написать текст программы самостоятельно, чтобы убедиться в своих силах. Сравните свой результат с приведенным далее.
Листинг 3.2. Программа температурного оповещателя - tempalert.ino
// Температурный оповещатель
// Контакт
const int BLED=9; // Контакт 9 для вывода BLUE RGB-светодиода
const int GLED=10; // Контакт 9 для вывода GREEN RGB-светодиода
const int RLED=11; // Контакт 9 для вывода RED RGB-светодиода
const int TEMP=0; // A0 для подключения датчика температуры
const int LOWER_BOUND=139; // Нижний порог
const int UPPER_BOUND=147; // Верхний порог
int val = 0; // Переменная для чтения аналогового значения
void setup()
{
pinMode(BLED, OUTPUT); // Сконфигурировать BLUE контакт светодиода как выход
pinMode(GLED, OUTPUT); // - - GREEN - -
pinMode(RLED, OUTPUT); // - - RED - -
}
void loop()
{
val = analogRead(TEMP);
- 75 -
if (val < LOWER_BOUND)
{
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
digitalWrite(BLED, HIGH);
}
else if (val > UPPER_BOUND)
{
digitalWrite(RLED, HIGH);
digitalWrite(GLED, LOW);
digitalWrite(BLED, LOW);
}
else
{
digitalWrite(RLED, LOW);
digitalWrite(GLED, HIGH);
digitalWrite(BLED, LOW);
}
}
В коде листинга 3.2 нет ничего принципиально нового, он сочетает в себе все изложенное ранее о системах, взаимодействующих с окружающей средой и платой Arduino.