ЦИФРОВОЙ ИЗМЕРИТЕЛЬ ТЕМПЕРАТУРЫ

     простые интересные РАДИОСХЕМЫ сделанные своими руками

» ДАТАШИТ
Например: TDA2050


» РАДИОБЛОГИ
Как сделать простую подставку под ноутбук
Как переделать напряжение из 12 вольт в 9 и 6 В
Доктор фьюзов для AVR
50 Вт LED фонарь для поиска
Модернизация переговорного устройства домофона
О доработке и ремонте проигрывателей винила
Схема сирены сигнализации с аккумулятором
Самый маленький SMD RGB LED куб


Радиосхемы » Измерители

ЦИФРОВОЙ ИЗМЕРИТЕЛЬ ТЕМПЕРАТУРЫ

      
   Итак уважаемые товарищи, пляски с бубном над микроконтроллерами продолжаются. Удалось мне раздобыть датчик температуры именуемый как ds18b20 в корпусе ТО-92. Интерфейс у него 1-wire. Можно сказать, что к микроконтроллеру он подключается одним проводом. Выделена только одна ножка микроконтроллера и еще плюс две для питания. Еще нужен один резистор на 4,7 килоома. На одну ножку МК можно повесить сразу несколько датчиков. В программе можно присвоить им разные номера и опрашивать по очереди. К сожалению у меня только один, поэтому не было возможности опробовать такой вариант работы.



Электронный измеритель температуры на микроконтроллере (уменьшенная схема)

   В общем поставил перед собой задачу написать программу комнатного термометра. Еще чтоб отображалась минимальная и максимальная температура. В качестве индикатора - ЖК дисплей от Nokia1202. Контроллер – Atmega8. Создал новый проект в CodeVision. Частоту камня поставил 4 Мгц. В CodeVision есть уже готовые библиотеки для интерфейса 1-wire и датчика температуры ds18b20.

датчик температуры ds18b20

   В мастере по созданию проекта настроил 1-wire на ножку PD5 микроконтроллера. На самом деле можно указать любую свободную ножку. После в сам проект нужно подключить библиотеку 1-wire, датчика температуры, и, естественно, нашего дисплея.

#include <1wire.h>
#include <ds18b20.h>
#include <1100.h>


   После все это наше добро нужно инициализировать. Делаем это так:

w1_init();
lcd_init();
delay_ms(200);
lcd_init();


   Почему дважды lcd_init() ? Для надежности. Если конденсатор возле дисплея не успеет зарядится и команды инициализации пройдут мимо, то после паузи в 200 миллисекунд они повторяться вновь. А почему мы не инициализировали датчик? Здесь решил немного схитрить и поставить проверку. В случае если датчик не подключен, или не исправен, то на экране высветится надпись «Датчик не найден». Если проверка пройдет успешно и датчик инициализируется будет надпись «Найден датчик ds18b20». Выглядит это так:

if(ds18b20_init(0,0,50,DS18B20_12BIT_RES)){
print_string("Найден датчик",10,0);
print_string("DS18B20",20,1);
delay_ms(2000);
lcd_clear();
}
else{
print_string("Датчик не найден",0,0);
delay_ms(9000);
lcd_clear();
};


   Как понятно из выше написаного сама функция инициализации только вот эта строка:

ds18b20_init(0,0,50,DS18B20_12BIT_RES)

   Первая цифра в скобках это номер датчика. Как я писал выше изменяя этот номер можно на одну линию повесить до несколько датчиков. Вторая цифра – это минимальная температура измерения. Там стоит "0". Поскольку термометр комнатный, то минусовые температуры нам измерять не надо. Да и сам дисплей не очень будет дружить с минусовыми температурами. Замерзнет и не будет показывать. Третья цифра – это максимальная температура измерения. Такое интересное слово как DS18B20_12BIT_RES означает, что датчик работает в 12-битном режиме. Дальше считываем показания термодатчика и помещаем в переменную temper:

temper=ds18b20_temperature(0);

   После вычисляем десятки и остаток деления от десяти и выводим на дисплей. Как выводить цифры на дисплей описывать не буду, так как в предыдущих статьях все описано. На счет вывода минимальной и максимальной температуры тоже все просто. Сравниваем наш temper с другими двумя переменными, и если больше или меньше, то просто их заменяем. В конце ставим задержку на 1,5 секунды. Ну вроде и все.

ЦИФРОВОЙ ИЗМЕРИТЕЛЬ ТЕМПЕРАТУРЫ

   Еще пару слов на счет измерения минусовых температур. Как пишут более опытные коллеги, при минусовой температуре данные на дисплее будут отображаться не корректно. Нужно добавить такое условие:

if (temper>1000)
{
temper=4096-temper;
 }

   И знак минус конечно пририсовываем. Данный код тоже не смог нормально опробовать.

Видео работы электронного измерителя температуры


   Минимум удалось охладить датчик до 7 градусов Цельсия. Не совать же всю отладочную плату в морозильник:) Выкладываю также исходники проекта. Всем спасибо за внимание. Над датчиком издевался Бухарь.

   Форум по работе с Atmega8

   Обсудить статью ЦИФРОВОЙ ИЗМЕРИТЕЛЬ ТЕМПЕРАТУРЫ


Схемы наши, лайки ваши - всё по честному. Оцените:


ТРАНСФОРМАТОР ЭЛЕКТРОННЫЙ ПОНИЖАЮЩИЙ

     Схемотехника и особенности эксплуатации китайских электронных трансформаторов 220-12В.

СХЕМА ЭЛЕКТРОННОГО ТРАНСФОРМАТОРА ДЛЯ ГАЛОГЕННЫХ ЛАМП

СХЕМА ЭЛЕКТРОННОГО ТРАНСФОРМАТОРА ДЛЯ ГАЛОГЕННЫХ ЛАМП     Схема, фотографии и описание электронного трансформатора для галогенных ламп на примере стандартной китайской модели настольного светильника.

КОНДЕНСАТОРЫ

КОНДЕНСАТОРЫ     Конденсаторы в радиоэлектронике - работа, типы, принцип действия и область использования.

УПРАВЛЕНИЕ НАСОСОМ

УПРАВЛЕНИЕ НАСОСОМ     Схема и фото самодельного блока управления насосом на микроконтроллере ATtiy2313.


» ПОИСК СХЕМ

» РАДИОЭЛЕМЕНТЫ


Группа вконтакте Канал ютуб Группа в фэйсбук Мобильная версия © 2010-2018, "Радиосхемы". Все права защищены. Почта