Термометр на микроконтроллере attiny2313 своими руками

Электронный термометр на Attiny 2313 с LCD дисплеем

Статья будет короткой, так как ничего особенного в этом девайсе нет, разве что удалось засунуть работу с датчиком DHT22 и LCD дисплеем в 2 Кб памяти. Устройство было собрано прошлой зимой, статью писал в личном блоге в это же время, но решил выложить и здесь.

Началось все с того, что на работе мы постоянно спорили по поводу температуры и влажности в комнате, а от этого зависело включение отопительных приборов, так как аргументировать без измерительного прибора было невозможно, я решил его собрать для лагеря «мерзляков», к которым относился и я. Сидеть зимой при температуре в помещении ниже 19 градусов было совсем не комфортно.

Звезды совпали для создания устройства выходного дня, новогодние праздники на носу, в загашнике лежит новая Attiny 2313 в DIP корпусе, DHT — 22 и 8×2 LCD 1602 дисплей. Взял я breadboard, быстро все соединил и принялся писать прошивку. Кстати для отладки я использовал LCD 16 x 2, так как у него пины расположены в один ряд и его проще соединять на монтажной плате. Я изначально хотел сделать работу от двух сенсоров внутренний — DHT22, внешний DS18B20, но памяти программ катастрофически не хватало, пришлось отказаться от идеи с внешним датчиком. В итоге написана прошивка только для работы с DHT — 22. Микроконтроллер тактируется от внутреннего осциллятора на 8МГц, но кто же запрещает внешний кварцевый резонатор? Фьюз биты по умолчанию, главное выбрать осциллятор и частоту 8МГц. Вот так выглядела отладочная модель:

6de76f

Но постоянно загружать правки программы в реальное железо мне быстро надоело и я создал компьютерную модель в программе Proteus 8.

6b046a

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

883b32

Печатную плату я пока не проектировал, начал сборку на распаячной плате, так как в этом проекте минимум соединений. Микропрограмма написана на языке Си в Atmel Studio 7. Исходный код и файл симуляции схемы можно найти в моем репозитории на GitHub.
Устройство собрано на скорую руку на макетной плате навесным монтажом.

Далее все было засунуто в корпус Z-70:

feb2c4

Устройство питается от внешнего блока питания-«кубика» с выходным напряжением 5В, разъем питания — mini USB.

Источник

Термометр на ATTINY2313+DS18B20 доработанный

4a4919

При перегрузке портов МК, яркость свечения индикатора может снизиться, а также можно пожечь ножки микроконтроллера. Несколько лет назад я собирал термометр на ATtiny2313+DS18B20 по схеме с интернета. Схема была без ключевых транзисторов. При температуре 18 градусов, цифра «1» светилась ярко, а цифра «8» светилась заметно тусклее, надеюсь всем понятно почему всё происходит именно так. Поэтому я пообещал себе в будущем не перегружать ножки МК. Вот кстати фотка того термометра, собранного по схеме из инета, думаю что в комментариях не нуждается:

bcb3de

Также хотелось сделать несколько доработок:
* вывести на индикатор символ градуса (десятые доли градуса мне были не так критичны);
* затактировать микроконтроллер от внешнего кварца, так как протокол «1-Wire», который использует датчик, критичен к формированию временнЫх интервалов (тайм-слотов), поэтому молиться о стабильности встроенного тактового генератора мне не хотелось;
* ввести в программу проверку контрольной суммы, при несовпадении контрольной суммы выводить на индикатор: «Crc»;
* добавить в схему диод (для защиты схемы от переполюсовки питания);
* при подаче питания в течении 1 секунды засветить все сегменты (так называемый тест сегментов).

Проект я написал в среде AVR Studio 5, функции работы с датчиком нашёл где-то в инете, а остальное переписал на свой лад, обильно снабдив комментраиями исходный код. В конце статьи есть ссылка на скачивание прошивки и исходника.

Семисегментный индикатор я использовал на 3 знакоместа, сегменты с общим анодом. Также в архиве (в конце статьи) есть прошивки под индикатор с общим катодом. Общие выводы сегментов я подключил сразу к двум выводам МК, соединённым параллельно. Таким образом, каждый общий вывод сегментного индикатора использует 2 ножки МК для повышения нагрузочной способности выводов.

ff4e18

Микроконтроллер я использовал ATtiny2313A (также можно использовать ATtiny2313 или ATtiny2313L), задействовал практически все свободные ножки (за исключением ножки сброса). Если собирать термометр на ATmega8, то можно соединять параллельно по 3 или по 4 ножки для повышения нагрузочной способности портов.

910958

Прилагаю фотографии собранного термометра. Корпуса покачто нет, так как термометр будет встраиваться в корпус ПК.

7f2b8e

a69f85

f30f89

bfb3dc

a4563e

Индикация.
Не подключен датчик температуры, либо короткое замыкание на линии данных:
722c16

Ошибка контрольной суммы (CRC):
32cd4a

Подключен датчик температуры, температура от 0 до 9 градусов:
a1e0fe

Подключен датчик температуры, температура от 10 до 99 градусов:
efd0a6

Подключен датчик температуры, температура от 100 до 125 градусов:
9f2c8a

Частота динамической индикации — несколько килогерц, благодаря чему мерцание на глаз не заметно даже при броском взгляде на индикатор.
Для желающих повторить конструкцию я скомпилировал несколько прошивок под разные кварцы: 4 МГц, 8 МГц, 10 МГц, 12 МГц, 16 МГц.
Также сделал прошивки под индикаторы с общим анодом (ОА), и с общим катодом (ОК). Все прошивки в архиве (см. ниже).

г.Вельск, Апрель 2014г.
P.S. Первоначально материал разместил тут.

UPD. Обновил прошивку. Мелкие исправления, мелкие плюшечки. Из основного — stdint типы данных, гибкая настройка ног под сегменты. Все изменения описаны в шапке исходника.
В связи с большим наплывом желающих выкинуть кварц из схемы, и не читающих зачем он в схеме нужен, отключил комментарии.

Источник

Термометр на ATtiny2313 и DS18B20 (ATtiny2313, С)

ico time31.10.2011 ico comment4 комментария

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

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

16 1

На схеме показан второй вариант включения термодатчика, если он не захотеть работать по однопроводной шине (что встречается очень редко). Обратите внимание, что подтягивающий резистор на 11 выводе должен быть именно 4,7кОм. Уменьшение или увеличение может привести к нестабильной работе датчика в случае включения по однопроводной схеме.

Как видим эта схема отличается от подобных отсутствием транзисторов на управление сегментов. Таким образом схема упростилась на 4 транзистора и 4 резистора, по сравнению с аналогичными схемами. Тут некоторые скажут: «так нельзя — большая нагрузка на порты. ». Читаемdatasheet на сей контроллер «DC Current per I/O Pin — 40.0 mA«. У нас 8 сегментов в каждом символе, по 5 мА каждый — получается 40мА.

Теперь посмотрим графики из того же описания:

16 3

16 4

Из графиков видно, что ток может достигать и 60 мА и даже 80 мА на пин. Ну не будем увлекаться — нам 5 мА на сегмент (40мА на символ) хватит с головой! Ограничительные резисторы подобраны для получения тока около 5 мА на сегмент. В моей схеме стоят 470 Ом. Яркость сегментов при этом отличная. Так, чё-то я увлёкся теорией.

Печатную плату рисовал исходя их соображений «как можно меньше, но как можно проще». Поэтому она получилась с несколькими перемычками…

16 5

На рисунке есть место под кварц — это для небольшой универсальности — у меня было несколько штук AT90S2313, у которых нет внутреннего генератора. КРЕНка применена в корпусе SOT-89. Защитные стабилитроны BZX79-C5V1 в корпусе DO-35. Конденсаторы в фильтре питания — 10mkF * 16V танталовые (других не нашлось), размера 3528 (SMD-B). Я их обычно не ставлю, а вместо них — 1mkF * 50V размера 1206.Глюков связанных с питанием не замечено.

Ну и далее фотки платы:

пустая плата, изготовленная «лазерным утюгом»

16 6

собранная плата: вид со стороны проводников (не хватает стабилизатора)

16 7

вид со стороны элементов (не запаян индикатор)

16 8

Далее запаиваем индикатор и программируем:

16 9

Проект собран по кускам, что-то из готовых проектов из Интернета, что-то дописано мной… Оригинальной идеей стала динамическая индикация. Проблема заключалась в том, что во время общения с датчиком температуры DS18B20 возникали моменты, когда «сканирование» индикации останавливалось. Поэтому обновление индикатора сделано не по прерываниям, а в главном цикле программы, и ещё вставлено кой-где в процедуре общения с датчиком… Плюсом данного способа стала высокая частота обновления, что исключило проблему мерцания.

Чуть не забыл — фьюзы для нормальной работы термометра:

16 10

Итак, прошили, включили… Хм… работает.

16 11

Итак как видим получилось довольно простое (куда уж проще. ) устройство, которое по размерам не превышает размер индикатора. Кроме всего ещё и точность высокая: по описанию датчика — «±0.5°C accuracy from –10°C to +85°C». Как показала практика точность гораздо выше — около ±0,1°C. Сверял 10 экземпляров с лабораторным термометром, прошедшим метрологический контроль…

Автор Юрий. Е-mail: hardlock (пёсик) bk Сайт автора.

Источник

Часы с термометром на Attiny

1554804891 obschij vid chasy

1554804951 obschij vid temper

Всем привет и хорошего дня или вечера. На этот раз я поделюсь инструкцией по изготовлению комнатных часов с термометром. Вычислительным центром часов будет Attiny85, собранная на плате от Digispark. Для отображения часов – Oled дисплей. Термометр – всем известный ds18b20. Для питания возьмем li-ion 18650 (их можно добыть из старого аккумулятора от ноутбука). И добавим отображения уровня заряда аккумулятора. Как и во всех предыдущих моих часах, мы обойдемся без модуля RTC (real time clock).

Соберем все что необходимо:

1554804940 shema korpusa

1554804956 razvertka

Переходим к Attiny.

Шаг 2 Attiny + Oled.
Как я уже говорил, сердцем нашей самоделки будет Attiny 85. Лучше всего приобрести эту микросхему, сразу распаянную на плате вместе со стабилизатором напряжения и обвязкой. Хорошо подходит Digispark Attiny85. Выбирайте версию с micro-USB на плате. Другие модификации платы не подойдут по размеру. Бывает, что эта плата продается с уже распаянными разъемами Dupon «папа». Если это так, отпаиваем все разъемы. Набираем цветных проводов. Нам нужно сантиметров по 10 разного цвета. Припаиваем их в Attiny и записываем какой провод, какому выводу соответствует. К выводам P0 и P2 надо припаять по два провода. Вторая пара нужна для подключения Oled экрана. Получаем следующее:

1554804920 attiny pripajannye provoda

Я записал следующую схему по проводам:

1554804920 vyvod provodov attiny

1554804941 oled licevaja

Будьте аккуратнее припайке, не повредите паяльником шлейф на дисплее:

1554804949 oled obratnaja storona

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

1554804915 attiny i oled sklennye vmeste

Спаиваем Digispark Attiny и Oled дисплей вместе согласно схеме (цвета проводов у вас могут отличаться, главное не напутайте с выводами):

1554804952 provoda oled

Для удобства и порядку собираем все провода вместе. Можно скрутить их изолентой, чтоб не путались:

1554804871 attiny i oled spajannye

На конце всех проводов крепим разъем Dupont «мама», вставляем в изоляторы и сматываем все вместе изолентой чтобы получился разъем. Также записываем распиновку разъема:

1554804962 raspinovka razema

Распиновка должна быть такой, так как в дальнейшем мы будем подключать к разъему провод для прошивки или остальные эленты часов.
Вклеиваем полученную конструкцию в корпус, при это не забываем склеить и сам корпус, оставив одну стону не склеенной, для дальнейших манипуляций:

1554804888 ustanovka v korpus

При вклеивании обратите внимание, чтобы экран располагался ровно:

1554804887 vkleenyj jekran

Шаг 3 Питание.
Для питания будем использовать два Li-ion элемента. Тип 18650. Можно их приобрести отдельно. В этом случаем, спаиваем их параллельно, изолируем и выводим коннектор для подключения и последующей зарядки:

1554804900 2h18650

У многих есть старые ноутбуки. Они ли уже не работают или работаю через раз. Даже если аккумулятор у ноутбука уже плохой и не подходит для использования по назначению, его можно использовать для разного рода самоделок. В нашем случае для часов. Берем аккумулятор от ноутбука:

1554804932 akkum nouta

Главное, чтобы он был Li-ion. Аккуратно разбираем его, вам необходимо раскрыть пластиковый корпус, так чтобы не повредить элемент внутри. Чаще всего аккумулятор разделен по два включенных параллельно элемента. Достаем их и отделяем одну пару от остальных:

1554804955 jelementy akkuma

Припаиваться лучше всего к контактным площадкам:

1554804870 akkumy mesto pajki

Приклеиваем эту пару на заднюю стеку часов:

1554804950 vkleenye akkumy

Шаг 4 Определение заряда аккумуляторов.
Удобной функцией часов будет индикация заряда аккумулятора. Определять степень заряда будем по напряжению. Минимальное напряжение для этих аккумуляторов – 2.4 В. Разряжать дальше его нельзя. Максимально напряжение – 4.2 В.

Измерение напряжения на аналоговом порту всегда производится относительно какого-то другого напряжения. Мы не можем использовать вывод AREF микроконтроллера, служащий для задания опорного напряжения. Измерять напряжение относительно напряжения питания – тоже невозможно (соотношение всегда будет одинаковое). Поэтому мы будет определять напряжение в соотношении с внутренним опорным напряжением или Vbg (Bandgap reference voltage). Оно составляет 1.1 В. Теперь нужно рассчитать делитель напряжения для нашего аккумулятора, так чтобы при максимальном заряде (4.2 В) на делителе было (1.1 В). Рассчитать можно по формуле:

1554804914 delitel formula

1554804913 delitel shema

R1 возьмем номиналом 10 КОм. Тогда R2 получаем 3.55 КОм, ближайший подходящий из стандартных номиналов 3.3 КОм, его и возьмем. Замер производиться между внутренним напряжением и GND, поэтому резистор 3.3 КОм припаиваем к минусу, а 10 КОм к плюсу. Размещаем резисторы на аккумуляторе, выводим провод от делителя.

1554804884 delitel naprjazh

Изолируем все контакты, во избежание КЗ:

1554804905 izoljacija delitelja

Провод от делителя будем подключать к PB4.

Шаг 5 Измерение температуры.
Отличным дополнение часов служит измерение комнатной температуры. Воспользуемся интегральным датчиком температуры DS18B20. Для работы с ним требуется всего один провод (очень кстати при использовании Attiny 85). Все замеры производит сам, не напрягает центральный контролер (тоже отлично памяти у Attiny 85и так мало), нам нужно только подавать команды и получать результаты. Есть несколько различных схем подключения этого датчика, мы воспользуемся оптимальным для данного случая, на мой взгляд, вариантом. С использование внешнего питания и резистором на 4.7 КОм:

1554804909 ds18b20 vneshnee

Припаиваем небольшие провода, и крепим разъемы

1554804958 ds18b20

Провод от датчика DQ подключаем к PB 3.

Шаг 6 Кнопка.
Выводов у нас и мало, а требований к часам много. Для установки времени будем использовать одну кнопку. На большее мы рассчитывать не можем. Припаиваем провода к кнопке, один контакт от нее к GND. Совмещаем с нашим датчиком температуры:

1554804875 ds18b20 knopka

Второй контакт от кнопки подключаем к PB 1.

Шаг 7 Подготовка среды разработки.
Для дальнейшей работы со скетчем, а также его редактирования и заливки нам потребуется Arduino IDE. Скачиваем эту программу с официального сайта :

Теперь добавим поддержку Attiny 85 в среду. Открываем Arduion IDE и идем по пути:
Файл — Настройки — «Additional Boards Manager URLs» вставьте ссылку:

Жмем OК.
Переходи в:
Инструменты — Плата — Boards Manager вводим Attiny и кликаем на «attiny by David A. Mellis». Жмем «Install» и уходим ставим кофе.
А теперь про библиотеки. Их нужно две:

Скачав эти архивы, распаковываем их в папку «libraries», которую легко найти пройдя по пути установки Arduino IDE.

Шаг 8 Программатор.
Digispark Attiny 85 – отличная плата. Предназначена для подключения к USB компьютера. И может программироваться через него же. Но Attiny при этом использует программный USB, который в свою очередь занимает 2 КБ из 8 КБ памяти. Нам это не подходит, и поэтому мы будем прошивать Attiny 85 посредством интерфейса ISP. И здесь нам понадобиться ISP- программатор. Если его нет – не беда. Берем Arduino. В моем случаем Arduino UNO:

1554804910 arduino uno

Вы можете взять любую другую совместимую плату из линейки Arduino. Подключаем к компьютеру, открываем Arduino IDE, выбираем com-порт, к которому подключена Arduino плата, открываем скетч, находящийся в примерах, Arduino ISP и заливаем его в плату. Также нам понадобиться провод для быстрого подключения к Attiny.

1554804929 provod dlja proschivki

D11 – P0
D12 – P1
D13 – P2
D10 – P5

Не забудьте про питание Attiny.

Шаг 9 Редактирование и заливка скетча.

Перед заливкой необходимо отредактировать скетч.
Интегральный датчик ds18b20, как говорилось ранее, работает по протоколу One Wire. Каждый датчик имеет свой уникальный 64 разрядный адрес. Вам необходимо найти адрес своего датчика и записать в скетч. Открываем Arduino IDE идем по пути:
Файл – Примеры – Dallas Temperature – OneWireSearch.

Заливаем скетч в Arduino. Открываем монитор порта. Вы должны увидеть адреса всех подключенных датчиков и их показания температуры. Записываем ваш адрес. Открываем мой скетч и меняем адрес на свой в строке:

Для корректировки хода часов служит следующая постоянная:

Чем больше это значение, тем медленнее идут часы.
Для контроля предусмотрен вывод секунд на экран:

Шаг 10 Окончательная сборка и запуск.
Отключаем программатор и подключаем датчик, питание и кнопку:

1554804888 razmeschaem vnutri

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

Источник

Термометр на Attiny2313 и DS18B20

Это устройство можно применить для контроля температуры окружающей среды или конкретного устройства, как например у автора для компьютера с полностью пассивным охлаждением.

Чтобы было удобно контролировать температуру процессора, нужно было по быстрому собрать термометр. Всяческие программы типа «Everest», «Aida», и прочие мне не подходили по одной простой причине: хотелось контролировать температуру даже при выключенном мониторе. Или даже при полностью отключенном мониторе. Было решено собрать термометр на основе цифрового датчика DS18B20, дешёвого микроконтроллера AVR (Attiny2313), и семисегментного индикатора. Сначала я хотел повторить схему термометра по одному из вариантов, предложенных в интернете. Но после анализа схем, размещённых в интернете, я пришёл к выводу, что придётся изобретать свой «велосипед».

Bluetooth BK8000L

Bluetooth приемник BK8000L, модуль передачи звука, Отзывы: ***работает! всё хорошо. можно брать.***

GVDA 600 Ture RMS AC DC NCV

цифровой мультиметр Ture RMS

Также хотелось сделать несколько доработок:
* вывести на индикатор символ градуса (десятые доли градуса мне были не так критичны);
* затактировать микроконтроллер от внешнего кварца, так как протокол «1-Wire», который использует датчик, критичен к формированию временных интервалов (тайм-слотов), поэтому молиться о стабильности встроенного тактового генератора мне не хотелось;
* ввести в программу проверку контрольной суммы, при несовпадении контрольной суммы выводить на индикатор: «Crc»;
* добавить в схему диод (для защиты схемы от переполюсовки питания);
* при подаче питания в течении 1 секунды засветить все сегменты (так называемый тест сегментов).

Проект я написан в среде AVR Studio 5, функции работы с датчиком нашёл где-то в инете, а остальное переписал на свой лад, обильно снабдив комментариями исходный код. В конце статьи есть ссылка на скачивание прошивки и исходника.

Семисегментный индикатор я использован на 3 знакоместа, сегменты с общим анодом. Также в архиве (в конце статьи) есть прошивки под индикатор с общим катодом. Общие выводы сегментов я подключил сразу к двум выводам МК, соединённым параллельно. Таким образом, каждый общий вывод сегментного индикатора использует 2 ножки МК для повышения нагрузочной способности выводов.

Микроконтроллер я использован ATtiny2313A (также можно использовать ATtiny2313 или ATtiny2313L), задействовал практически все свободные ножки (за исключением ножки сброса). Если собирать термометр на ATmega8, то можно соединять параллельно по 3 или по 4 ножки для повышения нагрузочной способности портов.

3515

7f2b8e1

a4563e

Частота динамической индикации — несколько килогерц, благодаря чему мерцание на глаз не заметно даже при броском взгляде на индикатор.
Для желающих повторить конструкцию я скомпилировал несколько прошивок под разные кварцы: 4 МГц, 8 МГц, 10 МГц, 12 МГц, 16 МГц.
Также сделал прошивки под индикаторы с общим анодом (ОА), и с общим катодом (ОК). Все прошивки в архиве (см. ниже).

Источник

Поделиться с друзьями
admin
Здоровая спина
Adblock
detector