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

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


» ТРЕКЕР GPS


» РАДИОБЛОГИ
Как сделать усилитель из платы от телевизора
Детектор электромагнитных волн на базе детекторного приемника
Усилитель из старого магнитофона
Ремонт новогодней гирлянды своими руками
Ремонт микроволновки LG своими руками
Точный индикатор напряжения из 34063api
Суперконденсаторы для запуска двигателей
Ремонт стиральной машины Индезит WITL86


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

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

      
   Итак уважаемые товарищи, пляски с бубном над микроконтроллерами продолжаются. Удалось мне раздобыть датчик температуры именуемый как 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

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


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


РАСЧЁТ КПД ПРЕОБРАЗОВАТЕЛЯ

     Коэффициент полезного действия преобразователей напряжения - теоретические основы.

ПРОСЛУШИВАНИЕ МОБИЛЬНЫХ ТЕЛЕФОНОВ

     Статья о том, как распознать прослушивание своего мобильного телефона.

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

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

ВЕТРОГЕНЕРАТОР СВОИМИ РУКАМИ

ВЕТРОГЕНЕРАТОР СВОИМИ РУКАМИ     Делаем простой роторный ветрогенератор. Фотографии и чертежи.


» ПОИСК СХЕМ


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


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