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

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


» РАДИОБЛОГИ
Сверхтонкие конденсаторы большой ёмкости
Тритиевые батареи
Стабилизатор тока для светодиодов двух выводной
Литий-ионные аккумуляторы стандарта 21700 (2170)
Беспроводной осциллограф из смартфона
Рекорд эффективности светодиодов от Nichia
Совет по заработку для радиолюбителей
Звуковой модуль для игрушек
Сбербанк Онлайн или как «не остаться без штанов»
Как я делал Гаусс-ган, а получился шокер

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

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

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

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


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


МУЗЫКАЛЬНЫЙ ЦЕНТР СВОИМИ РУКАМИ

МУЗЫКАЛЬНЫЙ ЦЕНТР СВОИМИ РУКАМИ     Продолжение статьи об изготовлении хорошего музыкального центра из старой цифровой автомагнитолы.

СХЕМА ФОТОДАТЧИКА

СХЕМА ФОТОДАТЧИКА     Принципиальная схема простого фотодатчика - фото готового устройства и описание работы.

УНЧ СВОИМИ РУКАМИ

УНЧ СВОИМИ РУКАМИ     Схема и фотографии самодельного усилителя низкой частоты для компьютера.

ПРЕОБРАЗОВАТЕЛЬ НАПРЯЖЕНИЯ НА ПОЛЕВОМ ТРАНЗИСТОРЕ

     Схема проверенного повышающего преобразователя напряжения 12В, собранного на полевом транзисторе BUZ12.


» ПОИСК СХЕМ


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

» ТРЕКЕР GPS



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