Измеритель температуры с Arduino

Измерение температуры с помощью термически-зависимого сопротивления (термистора) не всегда выглядит хорошей идеи, но отлично подходит для определения относительного изменения температуры. Схема подключения к Arduino, практический пример использования и некоторые функции встроенной библиотеки Arduino представлены этой статье.

В прошлом посте я рассказал что такое делитель напряжения, мы научились его рассчитывать и узнали где его используют. Сегодня мы применим наши знания на деле, а именно – сделаем измеритель температуры, который будет выводить на экран монитора текущее значение температуры в условных единицах, а также, в определённых пределах – с ростом температуры мы заставим гореть светодиод ярче, а при понижении температуры – тусклее и тусклее. Поехали!

Для этого нам понадобятся следующие компоненты нашего Arduino

Необходимые компоненты

  • Резистор 10 [кОм]
  • Резистор 220 [Ом]
  • Термистор
  • Светодиод
Схема включения делителя напряжения

Схема включения делителя напряжения

Схема подключения представлена выше, контакт A подключаем к 5 вольтовому разъёму Arduino, контакт B к земле, а контакт b к первому аналоговому разъёму Arduino (A0). Вместо первого резистора (R1) подключаем термистор, а второй (R2) так и оставляем – резистор на 10 [кОм]. Кроме того, нам необходимо ещё подключить светодиод – запитываем его из 11 порта и соединяем через резистор 220 [Ом] с землёй.

// Указываем номер порта для датчика температуры (А0)
int tempPin = 0;
// Указываем номер порта для светодиода
int ledPin = 11;

//  Описываем настройки программы
void setup() {
  // Устанавливаем порт ledPin как выход
  pinMode(ledPin, OUTPUT);

  // Запускаем чтение данных с сериал порта со скоростью 9600 бод\сек (стандартная скорость)
  Serial.begin(9600);
}

//  Описываем цикл программы
void loop() {
  // Считываем значение с аналогового порта
  int temp = analogRead(tempPin);
  // Выводим на монитор считанное значение (ctrl+shift+M для просмотра консоли)
  Serial.println(temp);
  // Делаем задержку на 1 секунду
  delay(1000);

  // "обрезаем" значения температуры в пределах от 316 до 336. Всё что меньше нижнего предела станет равно 316, а всё что больше - 336
  temp = constrain(temp, 316, 336);
  // Соотносим шкалы: при значении переменной temp 316 - значение ledLevel будет равно 0, ну а при 336 - 255.
  int ledLevel = map(temp, 316, 336, 0, 255);

  // Передаём значение на светодиод
  analogWrite(ledPin, ledLevel);
}

Вот и всё! Таким образом, мы каждую секунду будем получать циферку в консоли (ctrl+shift+M), соответствующую изменению температуры, и в определённом интервале температуры наш светодиод будет гореть тем интенсивнее (или не гореть вообще), чем ближе температура к верхней границе этого интервала.

Аналогичным образом можно сделать простой ночник, который будет регулировать яркость светодиода в зависимости от освещённости в комнате. Всё что надо будет для этого поменять, так это заменить термистор на фоторезистор, и в функции map пере обозначить соответствие шкал – при увеличении освещённости – уменьшать к нулю яркость светодиода, и наоборот.

А какие результаты получились у вас? Пишите ваши комментарии, вопросы, пожелания и предложения в комментариях к этому посту – я обязательно на них отвечу.  И не забывайте рассказать о серии моих постов об Arduino вашим друзьям. До скорых встреч!

7 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
11 лет назад

класс!
по оси y какие ед. измерения в графике, вижу трёхзназные числа?
илья, waiting for примеры с двигателем 🙂
ещё эта среда http://www.openframeworks.cc работает с ардуино 🙂

11 лет назад

чёткая статья, ед. только смутили 🙂

конечно давай мехатрона делай 🙂

Maxi
11 лет назад

как Вы построили график из данных, приходящих с ком порта?