Термометр с самописцем на atmega8

Цифровой термометр на ATMega8

Добрый день! Хочу поделиться с сообществом своей реализацией цифрового бытового термометра на контроллере ATMega8 и датчиках DS18x20.

Вступление
Немного предистории…
Это не первая конструкция электронного термометра, собранного мною. Несколько ранее (когда я был знаком только с PIC контроллерами) я собрал бытовой термометр на PIC16F628, датчиках DS18S20 и 2-х строчном ЖК индикаторе на основе контроллера HD44780. Программу писал, на C с использованием среды PIC C Compiler. Использовал готовые библиотеки кода для общения с датчиками и LCD дисплеем. Электронную схему выполнил на макетке, все детали в DIP корпусах.

Этот термометр до сих пор исправно работает (установлен на кухне) и показывает температуру «за бортом» и на балконе.
Спустя некоторое время, после знакомства с AVR и освоения ЛУТ технологии в связке с SMD компонентами у меня и зародилась идея создать более компактную и более дешевую версию такого цифрового термометра.
Вот что из этого получилось.

Постановка задачи
Исходное задание звучит так:

  • Измерение температуры датчиками DS18B20 и DS18S20 одновременно.
  • Подключения нескольких датчиков на одну шину 1-Wire для многоточечных измерений температуры.
  • Дешевый индикатор, видимый в темноте.
  • Компактный корпус.
  • Удобство подключения проводов от датчиков и источника питания.
  • Внешний источник питания 5В для простоты реализации.
  • Отображение целого значения температуры в °С (т.к. у нас всего 2 разряда на индикаторе).

Итак, условие о применении любых датчиков серии DS18x20 возникло из-за того, что у меня в наличии как раз остались один DS18S20 и один DS18B20. Как выяснилось, покопавшись в сети, прошивок термометров, работающих одновременно с этими двумя датчиками нету. (возможно плохо искал, но тем не менее). Почитав даташиты на эти датчики, стало понятно, что представление температуры в них выполнено по разному. Значит будем создавать свой универсальный код микроконтроллера! Об этом подробнее в программной части.
Выбор дешевого индикатора, который бы еще и светился сводится, конечно же, к применению семисегментного. Тут альтернативы нет.
Выбор компактного корпуса у меня занял некоторое время. Свой выбор я остановил на обычной телефонной евророзетке с двумя разъемами RJ11.

Конструкция
Схема электрическая принципиальная:

Размеры телефонной розетки наложили жесткие ограничения на размер печатной платы. Поэтому всю разводку электрической схемы на дорожках выполнить не удалось — пришлось применять некоторое количество коротких отрезков провода МГТФ. Также я отказался от применения внешнего кварцевого резонатора и использовал внутренний RC генератор 1МГц.
Два разъема RJ11 служат для подключения внешнего источника питания и выносного датчика температуры DS18x20. Причем оба разъема равнозначны и их нельзя перепутать, т.к. цепи питания и шина 1-Wire разнесены на разные контакты (получилась небольшая защита от «дурака»). Блок питания и выносной датчик (можно и не один) подключаются обычными телефонными 4-х жильными проводами с разъемом RJ11. Датчики DS18x20 необходимо хорошенько изолировать от воздействия окружающей среды при работе на открытом воздухе. В своей конструкции я вывел 2-ой датчик температуры из корпуса прибора наружу на коротком проводнике (измерение температуры в комнате).
Далее приведу фото получившейся конструкции:

Для индикации минусовой температуры служит отдельный светодиод. Первоначально я хотел поставить прямоугольный советский светодиод (не помню марку, вроде КИПМО какой-то), но мощность излучения оставляла желать лучшего… Поэтому я его заменил на SMD светодиод красного свечения:

Программная часть
Код писался в CV AVR. Использовал библиотеку «ds18b20.h». Использовалась динамическая индикация. Переключение между индикаторами происходит программно по прерыванию таймера.
Полностью приводить код не буду. Покажу только главный цикл:

Внимание! Прошивка и исходный код написаны для индикатора с общим катодом.
Некоторые пояснения по коду:
Временное отключение прерываний в коде связано с тем, что необходимо точно соблюсти временные интервалы при работе с датчиками 1-Wire. В моменты, когда прерывания отключаются также теряется динамическая индикация светодиодного индикатора, поэтому на это время индикатор нужно гасить.

Для более детального изучения работы с температурными датчиками DS18x20 обратитесь к даташитам. Также имеется пример работы с ними в среде CV AVR.

Заключение
Демонстрация работы:

Все замечания и предложения приветствуются. Надеюсь, для кого-нибудь данная статья окажется полезной.
Также, привожу все файлы (схема, плата, исх. код) проекта.
Даташит на DS18S20.
Даташит на DS18B20.

p.s. На видео и некоторых фото не видно второго датчика температуры. Первоначально он был внутри корпуса, позже я вывел его наружу для более точного измерения температуры окружающего воздуха.

  • ATMega8,
  • AVR,
  • Dallas,
  • DS18x20
  • +1
  • 07 октября 2011, 20:23
  • serge_wddm
  • 3

Комментарии ( 47 )

  • Vga
  • 07 октября 2011, 20:38
  • N1X
  • 07 октября 2011, 20:48
  • en1gma
  • 07 октября 2011, 22:14
  • ursadon
  • 07 октября 2011, 21:00

Видимо, потому что не требуется включать мозги (и калибровать заодно).

Ну, мозги там тоже включать особо не надо. А вот калибровать — да, меня останавливает именно это.

Кстати, я тут тоже собираюсь термометр делать. На LM75A. 😀

«В жизни каждого эмбеддера наступает момент, когда он понимает, что ему пора сделать термометр. »

Термометр с самописцем на ATmega8

Описание устройства

В этом разделе будет разобран проект, в котором AVR придется решать такие характерные для микроконтроллера задачи, как измерение и контроль температуры, кнопочный ввод и индикация показаний, хранение данных в архиве, передача информации в компьютер и т.д. Все операции производятся под управлением ОСРВ. Вместе с этим будут рассмотрены примеры использования шины TWI (на примере EEPROM AT24C512) и однопроводного интерфейса 1-Wire (датчик температуры DS18B20). Отдельно рассмотрена терминальная программа со стороны компьютера (на языке Delphi), которая производит считывание архива и ряда других параметров устройства через COM-порт.


Рис.1 Принципиальная схема термометра

Принципиальная схема устройства приведена на рис.1. Его основное назначение – это сбор и передача показаний температуры в компьютер для их дальнейшей обработки. Дополнительно имеется функция поддержание температуры на одном уровне.

Для измерения температуры используется цифровой датчик DS18B20 с однопроводным интерфейсом 1-Wire. Он подключается к линии PB1 микроконтроллера через разъем X2. Архив данных размером 64 кб хранится во внешней EEPROM–памяти AT24C512. Обмен данными с микросхемой ведется через шину TWI (выводы SCL, SDA). Для взаимодействия с пользователем предусмотрены индикатор MT-10T на 10 знакомест и 4 кнопки управления. Кнопки подключены непосредственно к выводам PD2…PD5, а индикатор для своей работы задействует еще 6 линий (управляющие сигналы PD6, PD7 и 4-разрядные данные PC0…PC3). Подстроечный резистор R6 служит для регулировки контрастности изображения. Связь с компьютером осуществляется по двум линиям канала RS-232 (разъем X1). Это выход передатчика RXD и вход приемника TXD. Микросхема MAX232 необходима для согласования ТТЛ-уровней микроконтроллера с логическими уровнями стандарта RS-232 (3…12 В лог.1, -3…-12 В лог.0). В случае если устройство используется как термостат, с вывода PB0 через разъем X4 снимается управляющий сигнал для коммутации теплового элемента. Он имеет высокий уровень, когда нагрузка должна быть подключена и низкий, если ее необходимо обесточить. Защитные сопротивления R2 и R3 служат для снижения последствий короткого замыкания на линиях PB0, PB1. На X4 подается напряжение 4…5 В от внешнего источника питания, способного обеспечить ток до 30 мА (собственное энергопотребление прибора без нагрузки на X4 не превышает 8…10 мА). Резервный источник питания VB1 (3.6…4.8 В) позволяет сохранить работоспособность и не потерять ход времени при перебоях напряжения. Разъем X2 служит для внутрисхемного программирования.

Читайте также  Обманка штатного одометра


Рис.2 Алгоритм работы

Сразу после включения устройство переходит к измерению температуры. В этом режиме с периодичностью 1 с считываются показаний датчика и отображение их на индикаторе вместе со временем (рис.2а). Предел измерения температуры -55…+125 С. Нажатие на кнопку SB4 запускает самописец. Каждый замер температуры, при этом, переносится в буфер архива. По истечению 1 минуты (собрано 60 замеров) содержимое буфера переносится во внешнюю память DD2. В режиме самописца с частотой 1 Гц мигает символ градуса в крайнем правом разряде индикатора. Повторное нажатие SB4 останавливает процесс записи.

В течение всего времени постоянно ведется контроль попадания температуры в интервал, ограниченный верхним и нижним значениями величины. При достижении верхнего предела на выходе PB0 DD3 формируется низкий логический уровень (сигнал отключения нагрузки). Далее температура падает до того момента, пока не достигнет нижнего предела и на выход PB0 снова будет подано напряжение. Десятичная точка в крайнем правом разряде индицирует состояние вывода управления нагрузкой (отображается, когда на выводе PB0 уровень лог.1).

Нажатие кнопки SB1 заставит устройство перейти в режим меню, где можно настроить верхний “thi” (рис.1б) и нижний “tlo” (рис.2в) пределы температуры, а также текущее время “tmr” (рис.2г). Значения пределов “thi” и “tlo” изменяютсья кнопками SB2, SB3 в сторону уменьшения и увеличения соответственно. В момент отображения “tmr” кнопка SB2 отвечает за установку часов, а SB3 за установку минут. Нажатие и удержание SB2 и SB3 в течение примерно 2 с приводит к увеличению скорости перебора параметра до 12 изменений в секунду. Значения “thi”, “tlo” могут находиться в диапазоне -50…+120 С (шаг 1 С), “tmr” – от 0ч00м до 23ч59м.

Когда происходит сеанс связи с компьютером и терминальная программа берет управление на себя, на дисплее выводится надпись соединения “CONNECt” (рис.2д). Измерение и контроль температуры прекращаются, опрос кнопок не производится до тех пор, пока не произойдет переход к обычному режиму работы.

Управляющая ОСРВ

Операционная система размещается в основном файле проекта “TermoRTOS.asm”. ОСРВ распределяет процессорное время и разделяет ресурсы памяти между пятью задачами, которые и обеспечивают логику работы устройства. Все задачи находится в отдельных файлах, и подключаются с помощью директивы .include в начале программы.

После сброса микроконтроллера, происходит отчистка SRAM и инициализация стека для каждой задачи. Глубина стека выбрана для всех задач одинаковой и составляет 30 б. Текущий указатель стека каждой задачи сохраняется в ячейках памяти sp1:sp1+1…sp5:sp5+1. Переключение задач происходит в обработчике прерывания service_TOVF0 по переполнению счетного регистра таймера-счетчика TCNT0. Сам таймер-счетчик 0 работает в единственно возможном для него режиме Normal. Интервал времени TTOV0, оставшийся до следующего переполнения при этом:
TTOV0 = ((256-TCNT0 )*N)/Fclk,
где N-коэффициент деления предделителя частоты таймера-счетчика 0.

При Fclk = 3686400 Гц и N=1024, получим TTOV0 ≈ 277,8*(256 -TCNT0) мкс. Изменяя значения TCNT0 в диапазоне 0…0xFF можно отмерять различные интервалы в пределах 71111,1…277,8 мкс.

Во время переключения контекста ОСРВ определяет также длительность следующей задачи. Из ячеек tmr1… tmr5 извлекается числа, которые необходимо загрузить в TCNT0, чтобы получить необходимую длительность времени до следующего прерывания.

Рассмотрим подробнее, как происходит переключение задач. Допустим, прерывание возникает в процессе выполнения задачи 1. В этом случае после сохранения SREG и рабочих регистров в стеке задачи 1, производится сохранение самого указателя стека задачи 1 в ячейки sp1:sp1+1 (SPH копируется в sp1, а SPL в sp1+1). Далее из ячеек sp2:sp2+1 извлекается 2-байтовое значение указателя стека следующей в списке задачи 2 и загружается в SPH:SPL. С этого момента программа находится в адресном пространстве новой задачи. Перед выходом из прерывания восстанавливаются рабочие регистры и SREG задачи 2, а в регистр TCNT0 заносится значение из ячейки tmr2=184. Задача 2 будет выполняться 277,8*(256-184) = 20000 мкс, пока не наступит очередное прерывание по переполнению таймера-счетчика 0 и ОСРВ произведет переключение на задачу 3 и т.д.

Сведения о проекте приведены в табл.1. Каждая из 5 задач занимается обслуживанием собственного интерфейса и не оказывает прямого влияние на остальные задачи системы. Взаимодействие между компонентами программы происходит через глобальные переменные ОСРВ, размещенные в регистрах R5…R21. Для обработки данных все задачи получают в распоряжение свой собственный комплект РОНов R22…R31. Номер текущей задачи (1…5) хранится в регистре tsknum.

Термометр с самописцем на atmega8

Двухканальный термометр на AtMega8

Автор: Nusik1975
Опубликовано 15.05.2012
Создано при помощи КотоРед.

Понадобился мне термометр, который одновременно показывает температуру на улице и дома. В Интернете полно схем, которые реализованы с использованием датчика DS18B20, и даже не одного, а нескольких… Но во всех термометрах, схемы которых я нашел, был только один семисегментный индикатор с 2, 3 или 4 разрядами. Вывод температуры на него с двух и более датчиков производится попеременным переключением индикации. Аналогичный термометр прослужил мне некоторое время. Но мне показалось это неудобным. Было принято решение использовать 2 трехразрядных семисегментника, чтобы температура с каждого из двух датчиков выводилась на свой дисплей. Но готовых решений в Интернете я не нашел, поэтому пришлось самому сделать то, что требуется. Конечно, можно изготовить два отдельных термометра и разместить их в одном корпусе… Но это нерационально.

В моем двухканальном термометре используется 2 датчика DS18B20-один для улицы и второй для дома. Датчики эти привлекают достаточной точностью показаний и неприхотливостью. Применен микроконтроллер AtMega8А в корпусе TQFP32 (других под рукой не оказалось), и семисегментные трехразрядные индикаторы с общим анодом CPD05231UR2/A. Они достаточно яркие при небольшом токе потребления. Транзисторы в цепях анодов являются ключевыми, дабы не превышать максимальные токи для портов МК.

Схема устройства (нажмите для увеличения)

Схема питания стандартна – стабилизатор 7805. В качестве источника питания применил зарядное устройство от сотового телефона Siemens. Оно дает на выходе примерно 7,5 вольт, что достаточно для нормальной работы стабилизатора 7805.

Печатная плата у меня получилась двусторонней, разрабатывалась под конкретный корпус. На одной стороне размещен стабилизатор, 2 семисегментника, разъем питания, электролитический конденсатор, разъем для программирования и подтягивающий резистор на 4,7 кОм для нормальной работы датчиков. Все остальные детали размещены на другой стороне платы. Конечно, можно использовать микроконтроллер и в DIP-корпусе, но тогда придется нарисовать свою печатную плату, ориентируясь на названия портов микроконтроллера.

Один датчик (комнатный) установлен сбоку корпуса, а второй-на улице. Для правильности показаний уличный датчик нужно установить так, чтобы на него не падал солнечный свет и не попадали атмосферные осадки. Желательно его ставить с северной стороны дома, где солнышка мало. Я его разместил в воронке, сделанной из пол-литровой пластиковой бутылки, обрезав ее. Предварительно надо загерметизировать контакты датчика. У меня это выглядит так (кликабельно):

Датчик закреплен с внешней стороны балкона.

Тактовая частота МК выбрана 8 МГц. Кварц я не использовал-нет необходимости. Частоту внутреннего генератора выставляем фьюзами, как на картинке:

Читайте также  Программные таймер и счетчик

Картинка дана для программы CodeVision AVR.

Для выставления фьюзов в других программах я пользуюсь универсальным правилом. Считываем фьюзы нового МК и смотрим на фьюз RSTDISBL. Если на нем нет галочки (как в CodeVision и как на скриншоте), то все галочки ставим также. А вот если на этом фьюзе есть галочка, то все фьюзы нужно выставить инверсно, то есть наоборот. Фьюз RSTDISBL никогда не трогайте. Если его изменить, то прошивка МК станет невозможна.

Прошить микроконтроллер можно любым программатором AVR. Я постоянно пользуюсь программатором STK200. Мне он нравится своей простотой, развязкой от LPT-порта и скоростью прошивки чипов.

Микроконтроллер можно применить с любыми буквами. Если используете МК в DIP-корпусе, будьте внимательны при разводке платы. Семисегментные индикаторы можно применить любые трехразрядные (или 4-х разрядные) с общим анодом. Резисторы R4-R11 являются токоограничительными, ими можно подобрать яркость свечения индикаторов, не забывая о максимальном токе в 20 мА на порт микроконтроллера. Транзисторы BC857B можно заменить аналогичными с проводимостью PNP. Так как отладкой я занимался непосредственно в железе, был установлен разъем для ISP-программирования.

Вот что получилось в итоге.

Термометр на стене.

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

Термометр на ATmega8 и датчике DS18B20

Схема термометра на ATmega8 и DS18B20
Микроконтроллер ATmega8
Цифровой термометр DS18B20
Семисегментный светодиодный индикатор
Алгоритм программы термометра
Программа цифрового термометра на DS18B20

Схема и программа очень простого цифрового термометра с использованием микроконтроллера ATmega8 и датчика температуры DS18B20. Термометр позволяет измерять температуру от 0 до 99 градусов с точностью до 0,5 градусов с разрешением 0,1 градуса

Термометр по своим характеристикам очень прост, и его можно использовать только как термометр для измерения «комнатной» температуры. Использовать в этой конструкции микроконтроллер с памятью 8 килобайт конечно расточительно, можно применить микроконтроллер и попроще. Но дело в том, что эта конструкция — основа для дальнейшего развития проекта с использованием цифрового датчика температуры DS18B20. В следующей статье будет опубликована конструкция другого термометра — на двух датчиках DS18B20, что позволит измерять температуру не только в комнате, но и «за бортом». Естественно, будет добавлена возможность измерять и отрицательные температуру. В дальнейшем в конструкцию будет добавлена функция термостата, часы, возможность работы с различными нагрузками, что позволит уже собрать несложную конструкцию — основу «умного дома». Ну а сегодня первая статья из этой серии.

Схема термометра на ATmega8 и датчике температуры DS18B20

Давайте посмотрим на схему термометра:

Как видите, схема очень проста, используется только необходимый минимум деталей.
В схеме, для индикации показаний, применен семисегментный трехразрядный светодиодный индикатор (описание и подключение семисегментных индикаторов к микроконтроллеру).

Напряжение питания конструкции — 5 вольт. Если вы примените микроконтроллер с низковольтным питанием (линейка микроконтроллеров ATmega), то можно и понизить питающее напряжение конструкции, но в этом случае, возможно придется уменьшить номинал гасящих сопротивлений в сегментах индикатора. Приблизительно номиналы сопротивлений можно брать:
— при питании 5 вольт — 200-300 Ом
— при питании 2,7 — 3 вольта — 100-150 Ом
(здесь вы можете ознакомиться с расчетом гасящих сопротивлений для семисегментных индикаторов)
(здесь вы можете ознакомиться с маркировкой микроконтроллеров)
Транзисторы — любые, маломощные, структуры NPN.
Датчик температуры — DS18B20 (ознакомиться с датчиком температуры DS18B20)
Семисегментный индикатор — любой трехразрядный с общим катодом. Если вы захотите применить другие, с общим анодом, тогда придется заменить транзисторы на PNP и внести изменения в программу (заменить массив двоичных кодов для вывода цифр на индикатор). Я применил индикатор красного цвета свечения, и заодно, для следующей схемы, приготовил такой-же, но голубого цвета свечения.

Детали термометра на микроконтроллере ATmega и DS18B20

Микроконтроллер ATmega8:

Распиновка микроконтроллера ATmega8:

Трехразрядный семисегментный индикатор FYT-5631AUR-21:
Распиновка семисегментного индикатора:

Датчик температуры DS18B20:

Транзисторы BC547C:

Алгоритм работы программы термометра на ATmega и DS18B20

Все установки микроконтроллера заводские, FUSE-биты трогать не надо.

Для работы программы задействовано два таймера/счетчика микроконтроллера:
восьмиразрядный Т0
шестнадцатиразрядный Т1
С помощью восьмиразрядного таймера Т0 настроенного на вызов прерывания по переполнению, с внутренней частотой СК/8 (период 2 миллисекунды) организован:
— расчет текущей температуры
— динамический вывод результатов измерения температуры датчиком DS18B20
С помощью шестнадцатиразрядного таймера Т1 настроенного на вызов прерывания по переполнению, с внутренней частотой СК/64 (период 4 секунды) организованно:
— подача команды датчику DS18B20 на измерение температуры
— считывание измеренной температуры с датчика
В принципе, можно задействовать и один восьмиразрядный таймер/счетчик, также настроенный на вызов прерывания по переполнению, с внутренней частотой СК/8, и всю работу схемы организовать в процессе обработки прерывания. Но дело в том, что смысла в этом нет — датчику DS18B20 необходимо чуть меньше 1 секунды (при 12-ти битном разрешении) для конвертирования (определения) температуры, т.е., чаще чем 1 раз в секунду мы не сможем обновлять данные температуры. Кроме того, столь частое обновление температуры приведет к нагреву датчика и, соответственно, к искажению реальных данных. Использование второго счетчика позволяет отдельно задавать промежутки времени измерения температуры.

Вот так выглядит основная часть программы в Algorithm Builder:

SP — настройка начального адреса стека

Timer 0 — настройка таймера T0:

Timer 1 — настройка таймера Т1:

TIMSK — настройка прерываний от таймеров:

Init_Display — подпрограмма настройки разрядов портов, участвующих в динамической индикации вывода данных на трехразрядный семисегментный индикатор

1 —> I — глобальное разрешение прерываний

— далее программа уходит в бесконечный цикл, и вся работа программы происходит при вызове прерываний от таймеров.

Если возникнут вопросы, если что-то изложено не понятно или есть вопросы по программе, пишите — отвечу.

Программа термометра в HEX файле (2,4 KiB, 7 685 hits)

Программа термометра в Algorithm Builder (7,1 KiB, 5 437 hits)

Второй вариант программы, без 4-х секундной задержки измерения температуры. Температура измеряется непрерывно (интервал менее 1 секунды)

Термометр 2 — HEX файл (2,4 KiB, 4 466 hits)

Термометр 2 в AlgorithmBuilder (11,1 KiB, 4 194 hits)

(17 голосов, оценка: 4,76 из 5)

Радиолюбитель

Последние комментарии

  • Алексей на Расчет фильтров нижних и верхних частот
  • ДЕМЬЯН на Регулируемый блок питания 0-12 В на транзисторах
  • ДЕМЬЯН на Регулируемый блок питания 0-12 В на транзисторах
  • Pit на Компьютер – осциллограф, генератор, анализатор спектра
  • Владислав на Новогодние схемы

Радиодетали – почтой

USB термометр на микроконтроллере ATmega8

Конкурс начинающих радиолюбителей
“Моя радиолюбительская конструкция”

USB термометр на микроконтроллере ATmega8

Схема и программное обеспечение простого USB термометра на микроконтроллере ATmega8, который может собрать своими руками и начинающий радиолюбитель

Читайте также  Пирометр. что это такое?

Конкурсная конструкция начинающего радиолюбителя:
“USB термометр на микроконтроллере ATmega8″

Здравствуйте уважаемые друзья и гости сайта!
Представляю на ваш суд вторую конкурсную работу.
Автор конструкции – Григорьев Илья Сергеевич.

USB термометр на микроконтроллере ATmega8

Всем добрый день! Захотелось мне собрать термометр для того, чтобы знать температуру или дома или за окном. Сторона у меня солнечная и обычный термометр очень врет, нагреваясь.
Стал рыть интернет. Как всегда много ненужного, слишком сложного, затратного.
Наконец, я нашел схему по душе, по которой и стал делать ЮСБ термометр.


Для сборки нам понадобятся:
♦ МС Атмега 8 и кроватка для нее на 28 ног
♦ Датчик температуры DS18B20
♦ Резисторы(у меня 0.5Вт):
— 10к
— 4,7к
— 68ом *2шт
— 1,5к
— 200ом
♦ Кондеры
— 22пФ *2шт
— 100мкФ на 16В электролит
♦ 2 стабилитрона на 3.6В
♦ Кварцевый резонатор 12MHz
♦ Светодиод
♦ Кусок одностороннего текстолита 5*5см

Начинаем все с разметки на текстолите, потом вырезаем
Кстати, раньше я долго мучился вырезанием нужных кусков канцелярским ножиком, было это долго, муторно… недавно я заказал на ebay отрезные алмазные круги для дремеля. За секунду…вввжик и отрезано!

10штук вот таких кругов 100 рублей (для поиска- 10X 20mm Emery Diamond Coated Double Side Cutting Discs with 2 Joint Lever).

Затем, печатаем на журнале схему, потом утюгом нагреваем, далее отмачиваем:


Потом травим, оттираем тонер, сверлим:


И потом начинаем собирать:


Atmega 8-16PU в кроватке:


Отмываем плату от флюса, т.к. я использовал активный да и очень вид портит:


Далее я взялся за датчик. Я решил сделать 2 датчика. Первый будет короткий и находиться в комнате. Второй я сделаю длинным и выставлю его на улицу.


Вставляем датчик в разъем, согласно распиновке.

Теперь нам надо прошить Атмегу. Берем ранее изготовленный мной программатор на фт232рл и заливаем прошивку.
В SinaProg нам надо выставить фьюзы:


ОБЯЗАТЕЛЬНО! Перед подключением проверяем плату на наличие КЗ.

Вставляем плату в юсб и у нас сразу же появляется неизвестное устройство:


Заходим в диспетчер устройств, находим неизвестное устройство и обновляем дрова.
Во время установки появится окно, где выбираем – “Все равно установить этот драйвер”
После этого в диспетчере устройств появится новое устройство:


А светодиод начнет хаотично моргать. Это значит, что работа устройства корректна!
Далее запускаем программу для отслеживания температуры.

Если начнет появляться многократно ошибка unable to write to C:/temp/USBThermometer_config.ini то заходим на диск С, включаем видимыми все папки и если есть папка temp, то создаем там блокнот, называем его USBThermometer_config и меняем ему расширение на .ini . Если нет папки, то создаем сначала ее. После этого у меня ошибка исчезала. Если папку создавали, то чтобы она не мешала можно скрыть ее.

Программа простая, понятная.
Основное окно:


Мини-окно, можно использовать как гаджет:


Вот и все. У меня на все было потрачено совсем немного денег и времени! Датчик в районе 90р и почти вся мелочь у меня уже была. Теперь у меня есть домашний, электронный термометр с возможностью измерения температуры дома и на улице.

Даташит датчика температуры DS18B20 на русском:

Скачать даташит DS18B20 (1.1 MiB, 1,736 hits)

Скачать схему термометра (56.9 KiB, 1,801 hits)

Плата термометра в формате LAY:

Скачать плату термометра (31.3 KiB, 1,476 hits)

Прошивка микроконтроллера HEX:

Скачать прошивку (5.6 KiB, 1,705 hits)

Программа на компьютер +ini:

Скачать программу +ini (443.5 KiB, 2,197 hits)

Скачать драйвера (26.9 KiB, 1,534 hits)

Уважаемые друзья и гости сайта!

Не забывайте высказывать свое мнение по конкурсным работам и принимайте участие в обсуждениях на форуме сайта. Спасибо.

Приставка к компьютеру — термометр и гигрометр на микроконтроллере Atmega8. Схема

На протяжении тысячелетий люди пытались предсказать погоду. В настоящее время становятся все более популярными метеорологические станции, позволяющие спрогнозировать погоду на следующий день.

Неотъемлемой функцией даже самой простой метеостанции является измерение температуры и влажности. Эти параметры также очень важны и в других ситуациях, например, при хранении продуктов питания.

Схема, приведенная в данной статье, представляет собой USB приставку к компьютеру, позволяющая измерять температуру и влажность воздуха.

Измерение температуры происходит в диапазоне от -40 до 80°C с разрешением 0,1°C и точностью 0,2°C. Влажность измеряется в диапазоне от 0 до 100% с разрешением 0,1% и точностью 2%.

Устройство собрано на миниатюрной печатной плате с преобладанием элементов поверхностного монтажа (SMD), благодаря чему оно может быть использовано как адаптер для ноутбука или настольного компьютера.

Ниже представлена принципиальная схема термометра/гигрометра. Основа устройства — микроконтроллер ATmega8, работающий от внешнего кварцевого резонатора с частотой 7,3728 МГц. Такая тактовая частота позволяет полностью избежать ошибок передачи данных по UART.

Для измерения температуры и влажности использован цифровой датчик DHT22, обеспечивающий измерение температуры в диапазоне -40 … + 80°C с разрешением 0,1°C и погрешностью 0,2° C и влажности в диапазоне 0 … 100% с разрешением 0,1% и погрешностью 2%.

Отображение измеренных данных выводиться через USB на компьютер. Для упрощения связи используется виртуальный RS232 порт. Поскольку питание адаптера осуществляется от USB, в схему введена фильтрация с помощью индуктивности L1 и конденсатора C5.

Ниже показана печатная плата. На плату устанавливается микроконтроллер ATmega8-16AU в корпусе TQFP32 и микросхема FT232RL в корпусе SSOP28, монтаж которой требует некоторого навыка.

Все линии, необходимые для программирования микроконтроллера, выведены на разъем XS1, благодаря чему отпадает необходимость программировать микроконтроллер перед пайкой.

Фьюзы микроконтроллера: High Byte: 0xD9, Low Byte: 0xFD.

После подключения устройства к компьютеру оно будет определено как адаптер USB / RS232. Чтобы изменить имя устройства по умолчанию, измените его и сохраните в EEPROM чипа FT232. Для этого можно воспользоваться утилитой «FT prog».

После установки и запуска утилиты «FT prog» выберите «Devices» — «Scan and Parse». Будет отображено содержимое памяти FT232, модель используемой системы и некоторые другие детали.

В «Device Tree» разверните вкладку «USB String cluster service» и в поле «Product Description» введите новое имя устройства, например, «Термометр с гигрометром USB».

После установки соответствующего имени, необходимо запрограммировать EEPROM. Для этого выберите «Devices» — «Program». В появившемся окне нажмите кнопку «Program». Теперь каждый раз при подключении адаптера он будет распознан как «Термометр с гигрометром USB»

При первом включении программы нужно зайти в настройки, щелкнув правой кнопкой мыши на окно программы и определить порт, к которому подключена приставка и настроить отображения информации в системном трее. Тут так же есть возможность отключить отображение информации или выбрать периодичность ее показа.

После настройки следует нажать кнопку «Сохранить параметры», а затем щелкнуть значок USB-порта. При последующих запусках программа сама откроет порт по умолчанию и будет работать с предыдущими настройками.

Скачать файлы (99,6 KiB, скачано: 710)