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

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


» РАДИОБЛОГИ
Цветомузыка на микросхеме индикаторе уровня
Генератор импульсов на микросхеме К174ХА11
Реставрация лабораторного БП
Зарубежные схемы FM трансмиттеров
Почему светодиоды надо питать током?
Последнее интервью Никола Теслы
Керамические конденсаторы К10-83
Использование старых спутниковых тюнеров
Шуруповёрт: вторая жизнь
Генератор импульсов с независимой регулировкой длительности и скважности

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

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

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

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


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


ДЕНЬГИ ВСЕМ РАДИОЛЮБИТЕЛЯМ

деньги для всех     Ознакомьтесь с простой возможностью небольшого заработка на своём радиолюбительском творчестве.


СОЛНЕЧНОЕ ЗАРЯДНОЕ УСТРОЙСТВО

СОЛНЕЧНОЕ ЗАРЯДНОЕ УСТРОЙСТВО     Зарядное устройство для мобильника из фотоэлементов.

УСИЛИТЕЛЬ В МАШИНУ

УСИЛИТЕЛЬ В МАШИНУ     Высококачественный автомобильный усилительный комплекс для меломанов и любителей звука погромче.

ЖУЧЕК

ЖУЧЕК     Простой маломощный жучек для начинающих шпионов - схема и фотографии конструкции.


» ПОИСК СХЕМ



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

» МИКРОНАУШНИКИ

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