Схеми термометрів на pic контролерах. Електронний термометр з виносним датчиком DS18B20 на мікроконтролері Attiny2313. Термометр на ATmega8 і датчику температури DS18B20

Вирішив я зробити двоканальний термометр, тільки не звичайний, а з датчиком для вулиці. Ідея, звичайно, не нова, на ринку вже є подібні термометри промислового виробництва. Так як у мене були напрацювання по підключенню радіомодулів до мікроконтролеру, я почав розробляти свій варіант бездротового термометра.

Для вимірювання температури я використав поширені датчики DS18B20, для відображення показань застосував не менш популярний. Радіомодулі і алгоритм передачі даних я розглядав раніше в статті про

Нижче представлена \u200b\u200bсхема датчика на мікроконтролері PIC12F675.

Після подачі живлення мікроконтролер зчитує значення температури з датчика BK1 і відправляє ці дані на радіопередавач A1, після чого відбувається перехід в сплячий режим. Пробудження мікроконтролера відбувається по перериванню, яке генерується зміною рівня на лінії GP0. До цієї лінії підключена RC ланцюжок на елементах R2 і C4, яка виконують функцію таймера. При виході із сплячого режиму на лінії GP0 встановлюється низький логічний рівень, тим самим конденсатор C4 розряджається. Перед відходом в "сон" лінія налаштовується на вхід, конденсатор починає заряджатися через резистор R4, при досягненні порогового напруги (близько 1,2В) відбувається переривання і пробудження мікроконтролера. При зазначених на схемі номіналах R2, C4 період пробудження становить приблизно 5 хвилин. Встановивши перемичку JP1, можна скоротити період до 5,5 секунд. Шляхом підбору конденсатора і резистора можна налаштовувати бажаний час періоду, але при цьому треба враховувати струм заряду конденсатора, в плані енергоспоживання.

Значення температури по радіоканалу передається у вигляді пакету з 3-х байт, останній байт представляє собою контрольну суму перших 2-х байт. Алгоритм передачі даних, який я використовую, в принципі дозволяє обходитися без контрольної суми, ймовірність прийому неправильних даних низька. Швидкість передачі становить 3,3 Кбіт / сек. Щоразу після вимірювання температури відсилається 3 пакети байтів, пауза між пакетами становить 10 мс, такий варіант передачі я застосував для збільшення надійності отримання даних приймачем. Це пов'язано з тим, що приймальня сторона перериває прийом сигналу на 4-5 мс, під час вимірювання температури з внутрішнього (домашнього) датчика.

В якості харчування використовується батарея 6F22 на 9В ( "Крона"), модуль радіопередавача A1 харчується безпосередньо від батареї. Для живлення мікроконтролера використовується мікропотужний стабілізатор напруги DA1 (MCP1702) на 5В, власний струм споживання стабілізатора складає всього 1-2 мкА, максимальний струм навантаження до 250 мА. Стабілізатор MCP1702 можна замінити на LP2950, \u200b\u200bструм споживання якого вище і становить 75 мкА. Звичайні стабілізатори напруги типу L78хх мають великий струм споживання в кілька міліампер, тому не годяться для апаратури на батарейках. Струм споживання пристрою в сплячому режимі змінюється з часом у міру заряду конденсатора С4, перші 2,5 хвилини споживання становить 10 мкА, наступні 2,5 хвилини ток плавно збільшується, до моменту виходу із сплячого режиму. Дане явище виникає через наявність струмів перемикання вхідного буфера мікроконтролера.

Хочу зазначити, що при низьких температурах ємність батарей зменшується швидше, не всі типи батарейок можна використовувати в таких умовах. Кращими показниками при негативних температурах володіють літієві батарейки, далі йдуть Ni-Mh акумулятори, лужні батарейки займають третю позицію, сольові елементи не придатні для таких умов.

Нижче представлена \u200b\u200bсхема термометра на мікроконтролері PIC16F628A.


Дисплей HG1, датчик BK1 і мікроконтролер живляться напругою 3,3 В від стабілізатора DA2. Таке значення було вибрано в зв'язку з характеристиками дисплея, максимальна напруга живлення якого становить 3,3, крім цього відпадає необхідність в узгодженні рівнів напруги між лініями введення / виведення дисплея і мікроконтролера. Модуль приймача A1 харчується від стабілізатора DA1, з вихідним напругою 5В. Резистори R6, R7 встановлені для узгодження рівнів напруги.

Мікроконтролер DD1 зчитує значення температури з датчика BK1 кожні 2 секунди, паралельно приймає сигнал з приймача, при отриманні пакету байтів від передавача спалахує світлодіод HL1. У верхній частині дисплея відображається напис "Дім", під якою виводиться значення температури з внутрішнього (домашнього) датчика, нижче відображається напис "Вулиця" і температура, отримана від датчика. Після прийому даних по радіоканалу, мікроконтролер запускає таймер, який веде відлік часу для контролю отримання даних. Якщо дані не були отримані за період відліку таймера, замість показань температури, на дисплеї висвічується символи тире "- - - - -". Час відліку можна задати в межах 1-15 хвилин з кроком в одну хвилину. Для цього, перед програмуванням мікроконтролерів, необхідно записати число від 1 до 15 в клітинку EEPROM з адресою 0x00. За замовчуванням встановлюється період в 7 хвилин. При несправності датчиків BK1, для обох пристроїв, замість значення відповідної температури, виводиться напис "ERROR". Кнопка SB1 управляє підсвічуванням дисплея, за замовчуванням підсвічування включена. Кнопка SB2 призначена для регулювання контрастності дисплея, так як у різних екземплярів вона може відрізнятися.

Для живлення пристрою підійде нестабілізований джерело живлення з вихідною напругою 8-12В. Обидва пристрої розміщені в пластикових корпусах. Антена для радіомодулів виконана у вигляді відрізка одножильного проводу довжиною 17 см (чверть довжини хвилі несучої частоти).





Конструкція 2-х канального термометра на PIC16F628A і DS18B20, призначеного для домашнього застосування, зацікавила, як простих радіоаматорів, так і тих у кого є автомобіль.

Для застосування в автомобілі конструкція термометра зазнала ряд змін, як схемотехнических, так і програмних. Напис "Дім" була замінена на "Салон", а в нижньому рядку дисплея тепер виводиться напруга бортової мережі автомобіля. При реалізації функції вимірювання напруги бортової мережі виникли труднощі, пов'язані з відсутністю у застосованого мікроконтролера цифро-аналогового перетворювача (АЦП). Зате в мікроконтролері є модуль компараторів, який і був використаний для вимірювання бортового напруги. За допомогою модуля компараторов виявилося можливим вимірювати напругу в діапазоні вхідних напруг від 5,6В до 16В з дискретністю вимірювання 0,7 В. Це найоптимальніший варіант для вирішення поставленого завдання без заміни мікроконтролера. Знаючи напруги бортової мережі можна оцінити стан акумуляторної батареї. Відразу при включенні пристрою (за допомогою замка запалювання або іншим способом) вимірює бортового напруги. Якщо величина бортового напруга виявилася менше ніж 10,5 автомобільний термометр-вольтметр сповістить звуковим сигналом (протягом 1,5с.) І одночасно виведе внизу екрана повідомлення "Аккум - розряджений" приблизно на 3 ... 4 с. Далі в нижньому рядку буде відображатися поточне значення бортового напруги. Якщо величина напруги буде менше 5,6В на індикаторі буде відображатися повідомлення "Напруга<6B ", А якщо більше 16В -"Напруга\u003e 16B ".

Опис схеми:

В якості керуючого контролера D1 використовується мікроконтролер фірми Microchip PIC16F628A, що працює в цьому пристрої від внутрішнього тактового генератора (4МГц).

Виведення інформації про величину виміряних температур і напрузі бортової мережі автомобіля мікроконтролер здійснює на LCD індикатор E1 від мобільного телефону Nokia3310. Передача цієї інформації здійснюється по послідовному интерфейсному каналу типу SPI. Обмін інформацією між мікроконтролером і дисплеєм односторонньому, дані передаються тільки від мікроконтролера до індикатора.

Резистори R11 ... R15, спільно з вхідними вбудованими захисними ланцюгами індикатора, забезпечують узгодження рівнів сигналів керування, що надходять на індикатор.

Харчування індикатора здійснюється від параметричного стабілізатора напруги, що забезпечує значення напруги живлення індикатора близько +3,3. Стабілізатор напруги виконаний на стабілітроні V5, резистори R10 і конденсаторі фільтра С8. Харчування на стабілізатор надходить від джерела стабілізованої напруги +5 В. Вимірювання температур із цифровими датчиками температури U1 і U2 фірми Maxim DS18B20. Ці датчики мають заводське калібрування і дозволяють вимірювати температуру навколишнього середовища від -55 до + 125 ° С, причому в інтервалі -10 ... + 85 ° С виробник гарантує абсолютну похибка вимірювання не гірше ± 0,5 ° С. На кордонах діапазону вимірюваних температур точність погіршується до ± 2 ° С.Індікація показань термометра у всьому діапазоні вимірюваних температур виконується з дискретністю ± 0.1 ° C.

Обмін даними і командами між мікро контролером D1 і датчиками температури U1 і U2 здійснюється за допомогою послідовного интерфейсного каналу 1-Wire. Для спрощення програмного забезпечення датчики підключені на окремі входи мікроконтролера. Протокол обміну при цьому по шині 1-Wire спрощується: не потрібно адресація датчиків і їх попередня ініціалізація.

Резистори R4, R6 є навантажувальними резісторомі для ліній інтерфейсу 1-Wire. Резистори R5, R7 виконують функцію захисту внутрішнього джерела живлення термометра при короткому замиканні ланцюгів годувань датчиків.

Роз'єм Х3 використовується для внутрисхемного програмування мікроконтролера D1. Його необхідно встановлювати в разі використання мікроконтролера в SMD виконанні або коли мікроконтролер в DIP корпусі безпосередньо упаюється в плату, а не встановлюється в панельку. Роз'єм Х3 забезпечує безпосереднє підключення програматора PICKIT2 до термометру.

П'езоізлучатель SP1 забезпечує висновок звукових сигналів, що оповіщають про розрядці акумуляторної батареї.

Внутрішня схема харчування автомобільного термометра реалізована наступним чином: - з роз'єму Х4 бортове напруга надходить через діод V1 і резистор R3 на мікросхему інтегрального стабілізатора напруги U3 типу 7805.

Дана мікросхема з напруги бортової мережі формує стабілізовану напругу +5 В для живлення мікроконтролера, параметричного стабілізатора індикатора і цифрових датчиків температури;

Діод V1 перешкоджає проходженню імпульсних перешкод негативного напруги в ланцюзі харчування термометра, захищає пристрій при неправильній подачі живлення на пристрій (переполюсовка харчування), а також спільно з конденсатором С1 перешкоджає перезапуску мікроконтролера пристрою при провалах напруги бортової мережі при включенні стартера автомобіля або інших енергоємних споживачів електроенергії автомобіля; - Резистор R3 спільно з обмежувальним діодом (супрессором) V2 захищає внутрішні ланцюга термометра від перенапруг, що виникають від впливу імпульсних перешкод.

Вузол формування аналогового сигналу, необхідного для вимірювання напруги бортової мережі, зібраний на резистивном делителе напруги R1, R2, конденсаторі C2 помехоподовляющего фільтра (R1, C2), і діодах V3, V4, що захищають спільно з резистором R1 аналоговий вхід мікроконтролера від перенапруг.

Бажано для підвищення точності вимірювання напруги резистори R1 і R2 використовувати з 1% точністю, але так, як дискретність вимірювання дуже велика (0,7 В) - ця умова не обов'язково.

Потужність резистора R3 повинна бути не менше 0,5 Вт, а потужність сталевих резисторів може бути 0,125Вт для вивідних і 0,1 Вт для SMD резисторів

Дослідний зразок автомобільного термометра був зібраний на односторонній друкованій платі:

Увага друкована плата і монтаж дослідного зразка виконані за схемою - Shema_avto_termo_3310_pic16f628.spl, файл якої наведено нижче. Відмінність від представленої вище схеми тільки в оформленні та в позиційних позначеннях елементів.

Інформацію про температуру в кімнаті і на вулиці (або в салоні автомобіля і за бортом) можна отримати за допомогою одного мікроконтролера, двох датчиків і одного 4-х цифрового світлодіодного індикатора. Межі вимірювання від - 55.0 до +125.0 градусів Цельсія з точністю відображення 0.1. Потрібно тільки пам'ятати, що конструктори обіцяють похибка датчиків не більше ± 0.5 градуса в діапазоні від -10 до +85.

Процес індикації виглядає наступним чином: 5 секунд показується температура першого датчика - 3 секунди все загашено - 5 секунд температура другого датчика - 3 секунди перерву - і знову спочатку. На лівому крайньому індикаторі горить один сегмент - перший датчик, два сегмента - другий датчик. У разі обриву датчика або його відсутності буде світитися надпис «OFF».

Номер датчик не буде світитися в двох випадках: якщо температура негативна (світитиметься мінус) і якщо температура вище 100 градусів (світитиметься 1хх.х). На фотографіях датчиків не видно, вони тимчасово припаяні з боку провідників.

Датчики управляються портами RA4 і RA6 по послідовному інтерфейсу 1 Wire (Q1 і Q2). Датчики приєднуються до плати за допомогою три провідникового неекранованого дроту діаметром 0.35 мм.

Резистор R1 і R15 обов'язково 4,7 кОм. R4 в межах 4,7-10к; R7-R14 - 270-360 Ом; R2, R3, R5, R6 - 1 3к. Транзистори будь n-p-n. Харчування 4,5 - 5 вольт, струм< 60мА.

Прошивка для мікроконтролера PIC16F628A і розводка друкованої плати в форматі LAY і PDF доступні по.


C цією схемою також часто переглядають:

Термометр на мікроконтролері PIC16F628A і DS18B20 (DS18S20) - стаття з докладним описом схеми запам'ятовує термометра і, до того ж, - логічне продовження раніше опублікованої мною статті на яндекс сайті pichobbi.narod.ru. Цей термометр досить непогано себе зарекомендував, і було прийнято рішення трохи його модернізувати. У цій статті розповім, які зміни внесені в схему і робочу програму, опишу нові функції. Стаття буде корисна новачкам. Пізніше переробив поточну версію термометра в.

Термометр на мікроконтролері PIC16F628A і DS18B20 (DS18S20) вміє:

  • вимірювати і відображати температуру в діапазоні:
    -55 ...- 10 і +100 ... + 125 з точністю 1 градус (ds18b20 і ds18s20)
    -в діапазоні -9,9 ... + 99,9 з точністю 0,1 градус (ds18b20)
    -в діапазоні -9,5 ... + 99,5 з точністю 0,5 градус (ds18s20);
  • Автоматично визначати датчик DS18B20 або DS18S20;
  • Автоматично перевіряти датчик на аварію;
  • Запам'ятовувати максимальну і мінімальну виміряні температури.

Також в термометрі передбачена легка заміна 7 сегментного індикатора з ОК на індикатор з ОА. Організовано щадна процедура запису в EEPROM пам'ять мікроконтролера. Вольтметр, який непогано себе зарекомендував, описаний в цій статті -.

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

Принципова схема термометра показана на малюнку 1

Малюнок 1 - Принципова схема термометра на PIC16F628A + ds18b20 / ds18s20

Описувати всю принципову схему термометра не стану, так як вона досить проста, зупинюся лише на особливостях.

Як мікроконтролера застосовується PIC16F628A фірми Microchip. Це недорогий контролер і до того ж не дефіцитний.

Для вимірювання температури використовуються цифрові датчики DS18B20 або DS18S20 фірми Maxim. Ці датчики не дорогі, малі за розміром і інформація про виміряної температурі передається в цифровому вигляді. Таке рішення дозволяє, не тривожитися про перерізіпроводів, про їх довжині та інше. датчики DS18B20,DS18S20 здатні працювати в діапазоні температур від -55 ... +125 ° С.

Температура виводиться на 7-ми сегментний 3-х розрядний LED індикатор із загальним катодом (ОК) або з (ОА).

Для виведення на індикатор максимальної та мінімальної виміряних температур потрібна кнопка SB1. Для скидання пам'яті так само потрібна кнопка SB1

Кнопкою SA1 можна оперативно перемикати датчики (вулиця, будинок).

Jamper необхідний для перемикання загального проводу для LED індикатора. ВАЖЛИВО!Якщо індикатор з ОК - то ставимо jamper на нижнє за схемою становище, а транзистори VT1-VT3 упаюємо p-n-p провідності. Якщо LED індикатор з ОА, то jamper переводимо в верхнє за схемою положення, а транзистори VT1-VT3 упаюємо n-p-n провідності.

У таблиці 1 можна ознайомитися з усім переліком деталей і можливої \u200b\u200bїх заміною на аналог.

Таблиця 1 - Перелік деталей для зборки термометра
позиційне позначення Найменування Аналог / заміна
С1, С2 Конденсатор керамічний - 0,1мкФх50В -
С3 Конденсатор електролітичний - 220мкФх10В
DD1 мікроконтролер PIC16F628A PIC16F648A
DD2, DD3 Датчик температури DS18B20 або DS18S20
GB1 Три пальчикових батарейки 1,5 В
HG1 7-ми сегментний LED індикатор KEM-5631-ASR (OK) Будь-який інший малопотужний для динамічної індикації та відповідний по підключенню.
R1, R3, R14, R15 Резистор 0,125Вт 5,1 Ом SMD типорозмір 0805
R2, R16 Резистор 0,125Вт 5,1 кОм SMD типорозмір 0805
R4, R13 Резистор 0,125Вт 4,7 кОм SMD типорозмір 0805
R17-R19 Резистор 0,125Вт 4,3 кОм SMD типорозмір 0805
R5-R12 Резистор 0,125Вт 330 Ом SMD типорозмір 0805
SA1 Будь-який відповідний перемикач
SB1 кнопка тактова
VT1-VT3 Транзистор BC556B для індикатора з ОК / транзистор BC546B для індикатора з ОА KT3107 / КТ3102
XT1 Клеммник на 3 контакту.

Для первісної налагодження роботи цифрового термометра застосовувалася віртуальна модель, побудована в протеус. На малюнку 2 можна побачити спрощену модель в протеус

Малюнок 2 - Модель термометра на мікроконтролері PIC16F628A в Proteus'e

На малюнку 3-4 показана друкована плата цифрового термометра

Малюнок 3 - Друкована плата термометра на мікроконтролері PIC16F628A (низ) не в масштабі.

Малюнок 4 - Друкована плата термометра на мікроконтролері PIC16F628A (верх) не в масштабі.

Термометр, зібраний робочих деталей починає працювати відразу і в налагодженні не потребує.

Результат роботи малюнки 5-7.

Малюнок 5 - Зовнішній вигляд термометра

Малюнок 6 - Зовнішній вигляд термометра

Малюнок 7 - Зовнішній вигляд термометра

ВАЖЛИВО!У прошивку термометра нЕ вшита реклама можна користуватися собі на втіху.

Поправки, внесені в робочу програму:

1 автоматичне визначення датчика DS18B20 або DS18S20;

2. знижено час перезапису в EEPROM (якщо виповнилося умова для перезапису) з 5 хвилин, до 1 хвилини.

3. збільшена частота мерехтіння точки;

Більш докладний опис роботи термометра можна подивитися в документі, який можна завантажити в кінці цієї статті. Якщо завантажувати немає бажання, то на сайті www.pichobbi.narod.ru також відмінно розписана робота пристрою.

Готова плата відмінно помістилася в китайський будильник (малюнки 8, 9).

Малюнок 8 - Вся начинка в китайському будильнику

Малюнок 9 - Вся начинка в китайському будильнику

Відео - Робота термометра на PIC16F628A

На МК. Серцем його є мікроконтролер PIC16F628A. У схемі термометра використовується 4-х значний або 2 + 2 світлодіодний індикатор із загальним анодом. Датчик температури використовується типу DS18B20, і в моєму випадку показання датчика відображаються з точністю 0,5 * С. Термометр має межі вимірювання теемператури від -55 до + 125 ° С, що достатньо на всі випадки життя. Для харчування термометра була використана звичайна зарядка від мобіли на ІП з транзистором 13001.

Принципова схема термометра на мікроконтролері PIC16F628A:

Для прошивки PIC16F628A я використовував програму ProgCode, встановивши її на комп'ютер і зібравши програматор ProgCode за відомою схемою:

Позначення висновків використовуваного мікроконтролера і цокольовка деяких інших аналогічних МК:

Програма ProgCode та інструкції з фотографіями покрокової прошивки знаходяться в архіві на форумі. Там же і всі необхідні для цієї схеми файли. У програмі відкриваємо і натискаємо на кнопку "записати все". У моєму виготовленому пристрої, як видно з фотографій, зібрано 2 термометра відразу в одному корпусі, верхній індикатор показує температуру вдома, нижній - на вулиці. Розміщується він в будь-якому місці приміщення і з'єднується з датчиком гнучким проводом в екрані. Матеріал надав ansel73. Прошивку редагував: [) Єнісей