Измерение температуры с помощью термически-зависимого сопротивления (термистора) не всегда выглядит хорошей идеи, но отлично подходит для определения относительного изменения температуры. Схема подключения к Arduino, практический пример использования и некоторые функции встроенной библиотеки Arduino представлены этой статье.
В прошлом посте я рассказал что такое делитель напряжения, мы научились его рассчитывать и узнали где его используют. Сегодня мы применим наши знания на деле, а именно – сделаем измеритель температуры, который будет выводить на экран монитора текущее значение температуры в условных единицах, а также, в определённых пределах – с ростом температуры мы заставим гореть светодиод ярче, а при понижении температуры – тусклее и тусклее. Поехали!
Для этого нам понадобятся следующие компоненты нашего Arduino
Необходимые компоненты
- Резистор 10 [кОм]
- Резистор 220 [Ом]
- Термистор
- Светодиод
Собираем схему
Схема подключения представлена выше, контакт A подключаем к 5 вольтовому разъёму Arduino, контакт B к земле, а контакт b к первому аналоговому разъёму Arduino (A0). Вместо первого резистора (R1) подключаем термистор, а второй (R2) так и оставляем – резистор на 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 вашим друзьям. До скорых встреч!
класс!
по оси y какие ед. измерения в графике, вижу трёхзназные числа?
илья, waiting for примеры с двигателем 🙂
ещё эта среда http://www.openframeworks.cc работает с ардуино 🙂
Ответ для саша: Это значения напряжения на аналоговом входе от 0 до 1023. К сожалению, для идущего в комплекте с Arduino термистора, не удалось найти нормального datasheet. Обычно в них приведены пределы нормальной работы термисторов и таблица (график) сопротивления термистора в зависимости от температуры. То есть, имея эти данные – можно было бы построить по ним функцию зависимости R от T и заставить Arduino пересчитывать эти показания в градусы Целься например.
Проблему можно решить покупкой термистора в хорошем магазине электроники – там обычно есть даташит.
Примеры по двигателю постараюсь в течении августа выложить. Пока не удаётся совладать с хитрыми винтиками у жёстких дисков – обычной отвёрткой взял 5 винтиков из 6 – последний оказался героически сильно затянут. В итоге отломал отвёртку 🙂
В мечтах сделать робота. Набор с лего уже достал. Осталось разобраться с двигателем – изучить это дело, ну и сделать какую-то передачу от двигателя к колёсам.
чёткая статья, ед. только смутили 🙂
конечно давай мехатрона делай 🙂
Ответ для саша: В маленьких диапазонах температур можно считать что дельта U = дельта T. Ведь вид зависимости сопротивления от температуры – экспоненциальный для всех типов термисторов и термо-проводников
как Вы построили график из данных, приходящих с ком порта?
Ответ для Maxi: График построен в экселе. Я использовал модуль для работы с SD-картами и записывал считанные данные в эксель файл, который потом скопировал с флэшки, открыл на компьютере и сам построил график. Посмотрите эту статью – http://www.zhitenev.ru/arduino-rabotaem-s-sd-kartami/ – там описан процесс и реализация этого устройства.