Електронний термометр на мікроконтролері pic своїми руками. Електронний термометр із виносним датчиком DS18B20 на мікроконтролері Attiny2313

Жарознижувальні засоби для дітей призначаються педіатром. Але бувають ситуації невідкладної допомоги при пропасниці, коли дитині потрібно дати ліки негайно. Тоді батьки беруть на себе відповідальність і застосовують жарознижувальні препарати. Що можна давати дітям грудного віку? Чим можна збити температуру у старших дітей? Які ліки найбезпечніші?

У цій статті проведемо огляд цифрового термометра, побудованого на мікроконтролер Attiny2313, забезпеченого цифровим виносним датчиком DS18B20. Межі виміру температури становить від -55 до +125 градусів Цельсія, крок виміру температури становить 0,1 градуса. Схема дуже проста, містить мінімум деталей і її легко можна зібрати своїми руками.

Опис роботи схеми термометра

Саморобний електронний термометр із виносним датчикомпобудований на всьому відомому. У ролі температурного датчика є мікросхема DS18B20 фірми Dallas. У схемі термометра можна використовувати до 8 цифрових датчиків. Мікроконтролер взаємодіє з DS18B20 за протоколом 1Wire.

Спочатку відбувається пошук та ініціалізація всіх підключених датчиків, потім з них відбувається зчитування температури з наступним виведенням на трирозрядний семисегментний індикатор HL1. Індикатор може бути застосований як із загальним катодом (ОК), так і із загальним анодом (ОА). Подібний індикатор також був застосований. Під кожен індикатор є прошивка. Вимірювати температуру можна як удома, так і на вулиці, для цього потрібно винести DS18B20 за вікно.

Для Attiny2313 необхідно виставити фьюзи наступним чином (для програми

Відразу хочеться відзначити, що друкована плата та конструкція були розроблені з розрахунком на те, щоб зробити компактний пристрій, що кріпиться на стіні.

Керування пристроєм здійснюється за допомогою однієї кнопки. Програма для мікроконтролера написана на Сі, має коментарі, і користувачі можуть модифікувати її під свої конкретні завдання, або ж розширити функціонал. Для керування РК індикатором використовується готова бібліотека Peter Fleury (архів для завантаження доступний у розділі завантажень). Додатково дані можуть відображатися в градусах Цельсія або Фаренгейта. Є кілька режимів керування підсвічуванням індикатора.

Також варто відзначити ще один важливий момент: пристрій може здійснювати бездротову передачу даних через Bluetooth за допомогою спеціального модуля (опціонально).

Принципова схема

З погляду схемотехніки пристрій нескладний, і ми розглянемо окремі елементи.

Джерело живлення термометра виконано на базі інтегрального регулятора напруги у стандартному включенні (з відповідними конденсаторами, що фільтрують). Регулятор напруги 3.3 AMS1117 включений до складу схеми, але застосовуватися може у разі використання Bluetooth модуля, т.к. найчастіше живлення таких модулів 3.3.

Індикатор, що використовується у пристрої, - це стандартний дворядковий індикатор на контролері HD44780. Транзистор призначений для управління підсвічуванням індикатора логічними сигналами з мікроконтролера або ШИМ сигналом з мікроконтоллера. Резистор R3 обмежує струм через базу транзистора, резистор R1 підтягує базу до нульового потенціалу.

Основа термометра - мікроконтролер, що працює на частоті 8 МГц і керує все навколишнім периферією.

Датчик DHT-11 - це недорогий датчик температури та відносної вологості, що використовується в проекті як вуличний датчик. Він не відрізняється високою швидкодією та точністю, проте знаходить своє застосування у радіоаматорських проектах через свою невисоку вартість. DHT-11 складається з ємнісного датчика вологості та термістора. Також датчик містить у собі простий АЦП для перетворення аналогових значень вологості та температури.

Основні характеристики:

  • низька вартість;
  • напруга живлення 3 - 5 В;
  • передавання даних по 1-Wire шині на відстані до 20 м;
  • визначення вологості 20-80% із 5% точністю;
  • максимальний споживаний струм 2.5 мА;
  • визначення температури 0 ... 50 ° з точністю 2%;
  • частота опитування не більше 1 Гц (не більше одного разу на 1 с);
  • розміри 15.5×12×5.5 мм;

Слід зазначити, що у продажу можна знайти датчик DHT-22, який має той самий інтерфейс, але найкращі характеристики.

Датчик підключається до мікроконтролера по шині 1-Wire (на схемі кнектор JP3) з використанням резистора, що підтягує, по лінії даних і блокуючого конденсатора по живленню.

Як внутрішній датчик використовується широко поширений аналоговий датчик температури LM35 IC5, який підключається до каналу 1 АЦП мікроконтролера.

Конектор J1 інтерфейсу внутрішньосхемного програмування мікроконтролера дозволяє швидко змінити програмний код або оновити програмне забезпечення. Для підключення термометра за інтерфейсом UART використовується конектор JP1. Кнопка керування SW1 підключена до входу зовнішнього переривання мікроконтролера, цей вхід підтягнутий до живлення внутрішнім резистором порту.

Bluetooth модуль для бездротової передачі даних, що на схемі позначений як IC3, GP-GC021 також підключається до інтерфейсу UART мікроконтролера і дозволяє передавати дані на ПК, мобільний телефон або web-сервер. На друкованій платі передбачено місце встановлення модуля. У розділі завантажень є опис модуля, процес взаємодії та команди.

РК індикатор встановлюється на лицьову частину друкованої плати в конектор, приховуючи таким чином встановлені на основній платі компоненти, і ми отримуємо компактний пристрій. Місце встановлення Bluetooth модуля знаходиться на тильній стороні друкованої плати (див. фото плати).

Зовнішній вигляд готової друкованої плати для термометра


Малюнок друкованої плати у САПР Eagle

Плата із встановленим Bluetooth модулем

Завантаження

Принципова схема та друкована плата (Eagle), ПЗ (вихідний код, прошивка) -
Бібліотека для роботи з РК індикатором на контролері HD44780
Технічний опис Bluetooth модуль GP-GC021 -


Це звичайний цифровий термометр, на просторах інтернету подібних девайсів дуже багато. Основа мікроконтролер PIC16F628A та цифровий датчик температури DS18S20 (DS18B20). Як індикатори застосовані світлодіодні 3-х розрядні індикатори зеленого кольору. Індикація динамічна. Термометр працює у всьому діапазоні температур датчика DS18S20, тобто. від -55 до +125 градусів.

Зібраний термометр на друкованій платі разом із індикатором. Датчик та живлення підключаються окремо. Якщо датчик не підключено, на індикаторі висвічується буква Е (Error). Жодних особливостей даний прилад не має. Діод VD1 служить для захисту від переполюсування джерела живлення.

Прилад може працювати як із датчиком DS18B20, так і з датчиком DS1820(DS18S20). Під кожен датчик використовується своє прошивка мікроконтролера. Нижче наведено варіант цього термометра з встановленим на друковану плату діодним мостом і стабілізатором 7805, тобто. для живлення цього пристрою достатньо підключити вторинну обмотку трансформатора до гнізда живлення. Крім того, на цій платі встановлено світлодіод, який швидко спалахує під час опитування мікроконтролером датчика температури. Світлодіод підключений між ніжкою RB3 (висновок 9) і масою, природно з резистором. Відсутність світлодіода на платі ніяк на роботу термометра не вплине.

Прилад зручно розмістити у будь-якій пластиковій коробці відповідних розмірів. Я розмістив його у корпусі мережевого блоку живлення (Адаптора) разом із трансформатором. Тобто. із коробки виходить лише роз'єм на датчик DS18B20, а сам корпус вставляється в мережу 220В.



Файл:
Розмір:
Вміст:

sm_termo.rar
38.3 КБ
Малюнки плат (LAY) та прошивки мікроконтролера.

Або його аналоги. Прилади мають хорошу точність, стійкість до перешкод, і, в порівнянні з аналоговими рішеннями, значно спрощують схему. Межі вимірюваних подібними датчиками температур зазвичай обмежені діапазоном від -55 до 125 ºС. Що робити, якщо потрібно виміряти температуру вище 125 °С? Очевидно, що потрібно використовувати аналогові датчики, температурний діапазон яких може досягати +300 °С. Слід зазначити, що у цьому випадку точність вимірів знизиться. Але часто при вимірі великих температур знати точне значення необов'язково, і похибка в кілька градусів буде прийнятною, а при відображенні на аналоговій шкалі, наприклад, на лінійці світлодіодів, зовсім непомітною.

Для нормальної роботи пристрою в температурі 0 ... 250 ° С, був обраний аналоговий датчик робочий діапазон якого становить -40 + 300 ° С. Його параметри ідеально підходять під вибраний температурний діапазон. За обробку даних відповідає мікроконтролер (МК). Звичайно, годиться і будь-який інший, але автору цей МК представляється одним з найдоступніших і найпопулярніших. Ф'юз біти залишені заводські. При розв'язанні задачі критерії точного виміру були відкладені на другий план. Похибка не більше кількох градусів цілком влаштовувала.

Цифрова індикація результатів вимірів

Для цифрового відображення даних використовується дисплей LCD. За бажанням пристрій можна модернізувати, доопрацювавши код програми. Вільних портів введення-виведення для цього достатньо. LCD дисплей підключено по 4-бітній шині (Малюнок 1). Старші розряди індикатора D4 – D7 підключені до молодших розрядів D0 – D4 мікроконтролера. Оскільки точних часових прив'язок в цьому пристрої немає, то немає і необхідності в зовнішньому кварцовому резонаторі. До портів PB6 та PB7 підключені керуючі висновки дисплея. Як бачимо, всі лінії управління дисплея виходять з одного боку корпусу МК, що спрощує трасування друкованої плати.

Обчислення значення температури

З Рисунку 1 видно, що аналоговий датчик температури підключений до входу АЦП мікроконтролера. При використанні операційного підсилювача похибка вимірювання була б меншою. Напруга на АЦП подається через дільник, утворений терморезистором та змінним резистором. Для кращої точності налаштування змінний резистор вибраний багатооборотним.

Таблиця 1. Залежність опору температури.

Температура ºС

Опір Ω

Побудувавши на підставі Таблиці 1 графік Mathcad (Малюнок 2), можна побачити залежність опору аналогового датчика від прикладеної температури. Вихідні дані таблиці взяті з технічного опису KTY84_130. Функція має практично лінійний характер лише з невеликим відхиленням на високих температурах.

При вимірюваній температурі 0 ºС опір терморезистора становить 498 Ом. Напруга на виході дільника дорівнює

  • U Д - напруга на датчику температури щодо землі,
  • U ПІТ - напруга живлення,
  • R Д - опір датчика температури,
  • R 1 - встановлений опір змінного резистора.

При температурі 0 ºС напруга на вході АЦП повинна становити 0.6 В. Для обчислення значення температури автор використовував таку формулу:


  • АЦП - 10-розрядний цифровий код АЦП, знятий з датчика,
  • U ОТС - відсікаюче значення (60), що дорівнює 0.6 при 0 ºС.

Діапазону вимірюваних температур від 0 ºС до 250 ºС відповідають вхідні напруги АЦП, що надходять з дільника, від 0.6 до 1.8 В. Опорна напруга АЦП становить 5 В, тому при зазначених значеннях цифровий код буде знаходиться в межах від 123 до 368. Це число міститься в конвертується в три розряди ASCII коду. Оскільки датчик KTY84_130 розрахований на максимальну температуру 300 ºС, краще залишити невеликий запас та обмежиться 250 ºС.

На малюнку 5 показано пристрій, зібраний на макетній платі. Код програми відкритий, і кожен може легко доопрацювати його під власні завдання.

Програмне забезпечення МК та віртуальна модель Proteus для LCD 16×2 -

Програмне забезпечення МК та віртуальна модель Proteus для LCD 8×2 -

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

Схема термометра на ATmega8 та DS18B20

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

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

Термометр за своїми характеристиками дуже простий і його можна використовувати тільки як термометр для вимірювання «кімнатної» температури. Використовувати в цій конструкції мікроконтролер з пам'яттю 8 кілобайт, звичайно марнотратно, можна застосувати мікроконтролер і простіше. Але річ у тому, що ця конструкція є основою для подальшого розвитку проекту з використанням цифрового датчика температури DS18B20. У наступній статті буде опублікована конструкція іншого термометра – на двох датчиках DS18B20, що дозволить вимірювати температуру не лише в кімнаті, а й за бортом. Природно, буде додано можливість вимірювати і негативну температуру. Надалі в конструкцію буде додано функцію термостата, годинник, можливість роботи з різними навантаженнями, що дозволить вже зібрати нескладну конструкцію – основу «розумного будинку». Ну а сьогодні перша стаття із цієї серії.

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

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

Як бачите, схема дуже проста, використовується лише необхідний мінімум деталей.
У схемі для індикації показань застосований семисегментний трирозрядний світлодіодний індикатор .

Напруга живлення конструкції - 5 вольт. Якщо ви застосуєте мікроконтролер з низьковольтним живленням , то можна і знизити напругу конструкції, але в цьому випадку, можливо доведеться зменшити номінал гасять опорів в сегментах індикатора. Приблизно номінали опорів можна брати:
- При харчуванні 5 вольт - 200-300 Ом
- При харчуванні 2,7 - 3 вольта - 100-150 Ом


Транзистори- Будь-які, малопотужні, структури NPN.
Датчик температури - DS18B20
Семисегментний індикатор - Будь-який трирозрядний із загальним катодом. Якщо ви захочете застосувати інші, із загальним анодом, тоді доведеться замінити транзистори на PNP та внести зміни до програми (замінити масив двійкових кодів для виведення цифр на індикатор). Я застосував індикатор червоного кольору свічення, і заразом, для наступної схеми, приготував такий же, але блакитного кольору свічення.

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



Розпинування мікроконтролера 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- Глобальний дозвіл переривань

Якщо виникнуть запитання, якщо щось викладено не зрозуміло чи є питання щодо програми, пишіть – відповім.

(2,4 KiB, 7 004 hits)

Підтримайте проект - поділіться посиланням, дякую!
Читайте також
Як виправити помилки з тунелем у Hamachi – жовтий трикутник та синій гурток Як виправити помилки з тунелем у Hamachi – жовтий трикутник та синій гурток Що робити, якщо GTA V гальмує? Що робити, якщо GTA V гальмує? Граємо по інтернету в ігри HOTSEAT (не за одним ПК, а по мережі) Граємо по інтернету в ігри HOTSEAT (не за одним ПК, а по мережі)