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

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

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

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

  • Резистор 10 [кОм]
  • Резистор 220 [Ом]
  • Термистор
  • Светодиод

Собираем схему

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

Программируем Arduino

// Указываем номер порта для датчика температуры (А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 вашим друзьям. До скорых встреч!

Измеритель температуры с Arduino: 8 комментариев

    1. Ответ для саша: Это значения напряжения на аналоговом входе от 0 до 1023. К сожалению, для идущего в комплекте с Arduino термистора, не удалось найти нормального datasheet. Обычно в них приведены пределы нормальной работы термисторов и таблица (график) сопротивления термистора в зависимости от температуры. То есть, имея эти данные — можно было бы построить по ним функцию зависимости R от T и заставить Arduino пересчитывать эти показания в градусы Целься например.

      Проблему можно решить покупкой термистора в хорошем магазине электроники — там обычно есть даташит.

      Примеры по двигателю постараюсь в течении августа выложить. Пока не удаётся совладать с хитрыми винтиками у жёстких дисков — обычной отвёрткой взял 5 винтиков из 6 — последний оказался героически сильно затянут. В итоге отломал отвёртку 🙂

    2. В мечтах сделать робота. Набор с лего уже достал. Осталось разобраться с двигателем — изучить это дело, ну и сделать какую-то передачу от двигателя к колёсам.

    1. Ответ для саша: В маленьких диапазонах температур можно считать что дельта U = дельта T. Ведь вид зависимости сопротивления от температуры — экспоненциальный для всех типов термисторов и термо-проводников

    1. Ответ для Maxi: График построен в экселе. Я использовал модуль для работы с SD-картами и записывал считанные данные в эксель файл, который потом скопировал с флэшки, открыл на компьютере и сам построил график. Посмотрите эту статью — http://www.zhitenev.ru/arduino-rabotaem-s-sd-kartami/ — там описан процесс и реализация этого устройства.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *