Электроника и железло

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