Датчик температуры DS18B20. Набираем комплектуху для самодельных, именных часов проекта Super Clock. Продолжение. Много фоток, ссылок, текста. ОСТОРОЖНО ТРАФИК!

Опубликовал | 22.10.2017

  • Цена: сейчас $3.71 (покупал за 176,47 руб. с доставкой)

Продолжу рассказ про проект часов Super Clock. Набираем радиодетали. Рассмотрим подробнее устройство. Кому интересно прошу под кат.

Итак, матрицы я купил. Посмотрим что ещё нужно для часов.

Схема часов лист 1

Первоначально в схеме в качестве датчика температур использовался DS18B20
Вот его я и купил у этого продавца

Подтверждение платежа

Товар пришёл в антистатическом пакетике, упакованным в стандартный, почтовый, пакет из бумаги с пупыркой с обратной стороны

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

Подключение

«Сердцем» часов является ATMEGA32A-AU 05.11.2016 мне удалось купить 2 шт. за 101,38 руб. Что составило цену 50,70 руб. за 1 штуку.
Этого товара в продаже сейчас нет, но тогда мне это обошлось в US $0.79 за штуку при бесплатной доставке
Самая дешёвая, что я сейчас вижу, это наверно эта, если брать поштучно 121 рубль за штуку с доставкой

Подтверждение факта покупки
Схема часов лист 2

Микроконтроллер управляет анодами матриц, через сдвиговый регистр 74HC595
Их я покупал за 33,37 руб., за 10 шт. 04.10.2016 ну или US $0.52 за 10 шт. (если верить истории покупок)
Товара в настоящее время не существует на странице продавца
Купить его наверное можно вот тут, если брать так-же 10 шт. Но это почти в 2 раза дороже чем брал я в прошлом году

Факт покупки

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

За время в этих часах отвечают Часы Реального Времени DS3231
На момент покупки самым выгодным было взять эту микросхему в составе модуля для arduino — выходило дешевле и бонусом гнездо под батарейку
Покупал я их 04.10.2016, и тогда с доставкой мне они обошлись в US $0.43 за штуку
Сейчас самые дешёвые US $1.63 с доставкой тут
Тогда я отдал за свои по 27,60 руб. за штуку
Брал 4 штуки за110,37 руб.

Факт покупки

Товар прибыл в антистатических, запаянных пакетиках

Батарейки нет
На платке есть чем ещё поживиться кроме микросхемы часов (если использовать модуль как донора)

Вид с другой стороны:

Товар прибыл вовремя (уже не помню на сколько «вовремя»), но спора я не открывал, товар годный (рабочий) с этой платы использовал гнездо под батарейку и саму микросхему часов. А ещё с неё очень удачно можно забрать угловой разъём соединения, для подключения датчика давления BMP180. Ну и ещё, с неё можно потянуть светодиод. Остальное я, за ненадобностью, не трогал

Модуль датчика давления BMP180
Я его покупал дважды у этого продавца 15.11.2016 и 23.11.2016 и покупка от 23 обошлась дешевле :)
15.11.2016 мне товар обошёлся в 170,21 руб., а 23.11.2016 я заплатил 163,61 руб.
Хотя товар был по одной цене если в баксах US $2.48
Сейчас-же, он и в баксах подешевел US $2.24, что в рублях на сегодняшний день составляет 132,75 руб.
А если поискать, то сейчас этот товар можно купить ещё дешевле например тут

Факт покупки

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

Но, так как для соединения с платой часов я использовал угловой разъём с модуля DS3231, этот разъём был за ненадобностью


Размер платки модуля 21 на 18 мм
Напряжение питания 1,8V — 6V
Платка модуля имеет свой регулятор напряжения, а так-же резисторы подтяжки напряжения к линии I2C
По этому в схеме часов лист 1 указано, при использовании BMP180 другие резисторы подтяжки по этой линии — снять. Например при использовании микросхемы часов DS3231 без этого модуля резисторы должны быть, а при установке этого модуля их необходимо убрать с платы
Датчик достаточно чувствительный на изменение давления. Достаточно его поднять или опустить и часы это отображают.
Так-же в нём присутствует датчик температуры
Так что с подключённым этим датчиком, температура внутри помещения уже будет отображаться часами

Датчик температуры и влажности DHT22/AM2302
Товар, который я тогда покупал в настоящее время отсутствует самый дешёвый что я нашёл тут
Я покупал 2 шт.
Было это 06.10.2016 тогда это мне обошлось по $2.44 за штуку
В рублях это вышло за 2 шт. 314,78 руб.

Подтверждение покупки

Датчики пришли в целлофановом пакете с застёжкой



Даташит тут

С этими датчиками на часах были определённые проблемы, обсуждалось начиная отсюда
Датчик занижал показания влажности
Сложно сказать, что является причиной, но разные датчики на одних и тех-же часах показывают разные данные и порой сильно заниженные
Датчики купленные у продавца, которые я брал год назад — работают более или менее правдоподобно, но того продавца уже нет на али
Так что лотерея…

Bluetooth Модуль HC-05
Покупал несколько раз тут

Что там ещё по схеме?
Транзисторы BC817?
Они у меня были, нужно 9 штук
Lm1117-3,3?
Тоже — выдернул с карты
Бузер (пищалка) с генератором частоты — купил на рынке
Резисторы — прикупил недостающие
Диоды индикаторные — СМД, зелёненькие — прикупил, красные на модуле часов есть
Батарейку, гнездо СМД под неё — на рынке в Ростове на Дону
Разъёмчики — валялись — были
Кнопки в местном магазе РОДИОДЕТАЛИ подобрал (есть у нас такой — нам везёт в этом плане)
Управление жестами — не заработало у меня нормально
Постоянно от бегущей индикации переходило в режим отражения бегущей строки, по этому даже там где есть — пришлось отключить.
Разъём mini USB — был
Ну, что поехали?

Лирическое отступление — про мотивацию
Вообще, часов было несколько
Мне в предыдущем обзоре высказывали своё мнение, что часы — должны быть часами, а не универсал-комбайном
В принципе, — согласен.
Но, тогда я хотел, загодя, подготовиться и сделать хороший подарок брату.
Живёт он в Подмосковье, он уже состоявшийся мужчина (уже ближе к полтиннику) и испугать его каким либо подарком — сложно
А вот самодельным изделием, да ещё с календарём-напоминалкой порадовать можно было
В эти часы можно внести правки в тексте исходника программы, после чего, скомпилировать прошивку со своими правками под микроконтроллер часов. Зашить эту прошивку в микроконтроллер, и часы начнут в нужные для тебя дни поздравлять тебя, твою семью и родственников с друзьями со знаменательными для вас датами.
Это казалось прикольным
Ведь всё что ты покупаешь — «не знает» что у тебя сегодня знаменательная дата — а эти часы в этом плане становятся «как родные!»
Короче проект понравился!
Вот только с программированием…
Казалось-бы чего проще — возьми карандаш и рисуй — будь художником!
Но, художником нужно просто быть
Так и с программированием — если не твоё…
Это пугало
Но, глаза боятся, а руки делают
А для начала нужно было хотя-бы собрать железо, прошить стоковой прошивкой от АВТОРА и посмотреть как оно будет
И вариантов было несколько, благо время позволяло — занялся этим вопросом сильно загодя
Вот кстати:

Все платы, кроме верхней, — работали — отладочные варианты для проверки

Как я делал часы
Итак, с рисованием плат у меня полегче чем с рисованием карандашом
Конечно, для настоящего «рисования» плат — необходимы знания (я это понимаю)
Но для моего бытового уровня то что у меня получается — мне хватает
Если понимать принцип работы и не совершать совсем грубых ошибок при проектировании плат — как правило — прокатывает
По этому будем считать — что «умею»
Получилась вот такая платка:

Т.к. детали почти все сосредоточены на слое Ф1 (когда припаяются матрицы — добраться на противоположный слой будет проблематично, по этому всё на этом слое), по этому слой Ф2, можно отключить, чтоб не мозолил глаза
Я понимаю влияние ёмкостно/индукционных наводок от множества параллельно друг другу идущих дорожек
Но с этим типом матриц лучше наверно не получится
По этому — прошу не пинать…

Рядом с АТмегой располагается шестипиновый разъём, это разъём для программатора

Ну, так получилось, что раньше я имел дела с АТмегами (8,16,168,32) и для прошивки был собран простейший программатор «пять проводков» с резисторами
И как тогда прицепил к нему разъём «в рядок», то так он у меня до се и остался — переводить его на стандартный разъём — нет нужды, да и платы ловчее рисовать с таким.
Прошиваю я PonyProg. — делаю это настолько редко, что мне этой программы достаточно
LPT порт у меня есть, на компьютере старая любимая XP
А как это сделать выше озвученной программой вот тут, человек, который меня втянул во всё это безобразие, — сделал понятную инструкцию
Там-же есть ссылка где взять эту программу и как её настроить.

Так вот на том разъёме, что на плате контакты сверху в низ по рисунку будут:
1 питание +5v,
2 — масса (минус),
3 — RESET,
4 — SCK,
5 — MISO,
6 — MOSI — что очевидно по маркировке АТмеги
Для запитования АТМЕГИ можно использовать разъём miniUSB с противоположной стороны платы, соединение 2 пина разъёма GND (массы) с программатором — обязательно.

ВАЖНО!
Два вот этих выделенных резистора на плате, что есть по схеме R3, R5 должны быть установлены, если не установлен BMP180 и необходимо убрать, если в часах установлен BMP180

Т.е. запустить часы без BMP180 можно, но нужно поставить резисторы подтяжки напряжения в линию I2C

Допустим, плата вытравлена. Переходы — запаяны, прозвонены (проверены). Детали смонтированы, проверены (перепроверены). Плата отмыта. Матрицы впаяны… И что дальше?

Для запуска часов потребуются: АТМЕГА, сдвиговые регистры, транзисторы, резисторы, часы реального времени с батарейкой и сетевым питанием — LM1117, кнопки управления, конденсаторы (для фильтрации питания), не забыть до впаивания матриц — припаять бузер (пищалку) — иначе потом не добраться (кстати пищалка должна пищать при подачи на неё питания), ну, и хотя-бы проводки — для подачи питания.
Блютуз модуль, датчик влажности, даже датчик давления — всё это — можно не ставить.
А так всего выше озвученного достаточно для пуска и проверки — остальное можно допаять после пуска
Часы должны пойти. Бегущая строка, при старте, должна «бежать». Кнопки должны реагировать. Засветов быть не должно.

Где брать прошивку
Прошивку брать тут
Если мне память не изменяет, до версии 2.10 — автор делил прошивки на «с BMP180» (с датчиком давления) и «без BMP180»
По этому в посте два архива m32_2.08.rar — без датчика и m32_2.08+.rar — с датчиком
Начиная с версии 2.10 — прошивки включают в состав входящих в конфигурацию часов модулей — датчик давления
О чём речь?
О том, что залив прошивку 2.08+ в конфигурацию без датчика давления — мега будет не находить датчика и ругаться на это светя ошибку.
В то-же время если устройство будет подключено, но прошивка будет БЕЗ — возможен (наверное) конфликт оборудования по линии I2C, хотя я не проверял что будет, но удивляться в случае зависания или выпадения информации об ошибке — не стоит, прошивку нужно лить согласно подключённых частей устройства

НО!
Скачав архив, вы получите весь исходник ФАЙЛЫ ПРОШИВКИ В АРХИВЕ НЕОБХОДИМО ИСКАТЬ ПО АДРЕСУ: m32_2.08.rarm32_2.08DebugExe
Т.е. скомпилированные файлы прошивки всегда лежат в папке Exe, которая в свою очередь лежит в папке Debug, которая лежит в папке проекта m32_2.08

В указанной папке лежат три файла:
Super_Clock.eep
Super_Clock.hex
Super_Clock.rom
Я в МЕГУ заливаю Super_Clock.hex, устанавливаю фьюзы, а потом поверх лью Super_Clock.eep
Super_Clock.eep — порой бывает нужно перезалить, т.к. без этого файла часы отказываются работать.

После внесения изменений и правок, и компиляции — свежескомпилированная прошивка всегда будет находится в проекте по адресу DebugExe
В архиве АВТОРА всегда есть скомпилированные файлы прошивки — адрес где их искать я указал

Как настроить ПОНИПРОГ я давал выше ссылку на инструкцию моего друга
А дальше так: в ДЕВАЙС ФЭМЕЛИ указываем AVR micro, в СЕЛЕКТ ДЕВАЙС ТАЙП выставляем ATmega 32
Приколу ради пробуем считать мегу — процесс должен пройти — что покажет что компьютер видит мегу
Можно её стереть кнопочкой с ластиком (хуже не будет)
Потом: FileOpen Device File — выбираем адрес m32_2.08DebugExe — из выпадающего списка выбираем тип файла hex — выделяем файл Super Clock — кнопка Открыть — кнопка Write device — соглашаемся на всплывающее предупреждение — ждём когда закончится процесс

Далее я выставляю фьюзы
Для этого проекта фьюзы: High — D1; Low – 24.
Заходим в Калькулятор фьюзов AVR
Вводим значения High — D1; Low – 24.
Получаем куда нужно поставить галочки:

В ПОНИПРОГ давим Cmmand, в выпадающем окне выбираем Security and Configuration Bits…
Выставляем галочки как указано в калькуляторе, проверяем (семь раз, когда отрежем — будет поздно)

Проверив, давим кнопку Write

Поверх этого всего зальём настройки
FileOpen Data (EEPROM) File… — выбираем адрес m32_2.08DebugExe — из выпадающего списка выбираем тип файла eep — выделяем файл Super Clock — кнопка Открыть — кнопка Write Data Memory (EEPROM)
Ждём когда закончится процесс

Эту операцию — периодически приходится повторять, без неё бывают артефакты на экране или например у меня не запускался БЛЮТУЗ — перезалил настройки спасло
В этом проекте как правило: что-то не пошло — перезалей настройки
После этой операции — часы, при подаче питания, должны заработать
Если нет модуля блютуз — часы будут при передёргивании питания ТРИ РАЗА ругаться на его отсуствие
Через три раза передёргивания питания — им надоедает это делать, они перестают сообщать про БЛЮТУЗ ЭРРОР
Всё выше описанное помогает проверить основную конфигурацию часов.
Ну, например, если есть всё, кроме модуля Bluetooth, датчика температуры и влажности DHT22/AM2302, датчика давления BMP180, датчика температур DS18B20
Если есть всё, то залейте m32_3.3.7z

Как я переделывал прошивку под себя
Сделать «свою» прошивку можно при помощи программы CodeVisionAVR 3.12
Взять её можно например тут
Устанавливаем CodeVisionAVR 3.12
Далее, распаковываем архив с прошивкой, заходим в папку и находим файл Super_Clock.prj, открываем его
Получаем вот такую картину:

Попробуем что либо изменить «под себя»
В крайнем левом разделе мы видим файлы проекта
Посмотрим что у нас например в файле DS1307.h

Опа! Выясняется, что скорее всего на прошивке, залитой из проекта АВТОРА — часы «тикать» не станут…
Необходимо 9 строку файла привести к виду:
#define DS3231
Как написано выше «раскомментировать» (убрать два слэша перед этой строкой)
Только в этом случае часики начнут работать
Так, что там у нас ещё…
Зайдём в файл interface.h

Что тут…
Ага, если в часах имеется BMP180 (датчик давления) — оставляем как есть
Если нет — нужно «закомментировать»
Дальше — есть два варианта отображения обработки данных давления
В виде графика — на мой взгляд более информативно, т.к. видна динамика изменений и можно строить краткосрочный прогноз.
И в виде самого прогноза в четырёх градациях: ясно, облачно, осадки, ураган с установкой пороговых значений от нормы
Практика показала, что тот прогноз в виду того что не отслеживает динамики изменений давления — очень часто врёт — график намного информативнее и не делает прогноза (не констатирует текущее состояние) и потому не ошибается
По этому эти настройки у себя я оставляю без изменений
Строка: нормальное давление для текущего расположения часов позволяет ввести корецию относительно нормального давления, в зависимости от высоты.
С изменением высоты — меняется значение «нормального давления» — для графика — это не важно
Что там у нас ещё?

Строки 47 и 48 — время перехода на «ночной режим» и выход из него
Указываешь время перехода в часах
Этими-же установками определяется время срабатывания «кукушки» — почасового сигнала, в период «ночного режима» — «кукушка» молчит
У меня время перехода выставлено 22 — 7
Строки 50 и 52, позволяют выставить яркость
Я себе яркость выставлял через программу связи с компьютером через блютуз, есть какие-то ограничения минимальных значений по яркости — читал в форуме сейчас уже не помню
То-ли 60, то-ли 30
Можно определить «методом тыка»
Максималка 254

Ещё, интересная закладочка Symbols.h

Тут вот в чём прикол
Мне лично «перечёркнутые» нули — не нравятся
Я не программист, и в своей обычной жизни, я сталкиваюсь или с цифрами, или с буквами
И ноли и буквы О в моей жизни — выглядят одинаково
А что это цифра или буква я понимаю интуитивно и из контекста
А когда постоянно вылазят непривычные символы — это раздражает!
По этому для себя я все символы, ноли и буквы «О» привожу к виду:
0x3E, 0x41, 0x41, 0x41, 0x3E,
Да простят меня все те, кто против такого святотатства…
И главное не забываем это сделать и в 106 строке — то-же

Как сделать часы индивидуальными
Так как научить часы своим знаменательным датам и событиям
Делается это в файле holiday.c ( праздники-с :) )

Заходим в файл
Здесь все даты расписаны таким образом
Дата — 4 цифры (первые две дата, две вторые месяц)
Событие — надпись в кавычках
25 января (2501) — Татьянин день
Сегодня 22 ноября
Этой даты в файле нет
Давайте её создадим
Чтоб было проще — скопируем «Татьянин день», и вставим его в список, а потом отредактируем дату, поставив 2210, а потом в кавычках вместо «Татьяниного дня» напишем какую ни будь хрень…

Реальную хрень!

Теперь, например, 2 февраля у моей супруги день рождения
Эта дата занята

Причём для кого как, а вот победа в Сталинградской битве для меня СОБЫТИЕ и его естественно я хочу оставить в СВОИХ часах
Но и день рождение жены — это ПРАЗДНИК
Как их совместить в часах?
Редактируем надпись в кавычках, подставляя там, где нужно, чтоб были цифры годовщины сочетание %u
Так как события два, каждому событию по своей %u в нужном месте
А чтоб программа высчитала правильно годы обоих событий — ей нужно указать два года от которых вести исчисление

У нас в этом событии указан одни год 1943
А нам нужно, согласно последовательности указанных событий, указать два года
Выделяем ,calc_anniversary(1943) ( с запятой впереди)
Дублируем выражение перед выделенным и изменяем год на год отсчёта первого события

Попробуем создать не просто событие, а событие с указанием годовщины
26 марта у малых днюха
Этой даты нет в списке

Естественно её нужно делать с привязкой к году
Копируем какую либо дату с указанием года
Вставляем её меж других дат (меж 25 и 27 марта), не нарушая хронологии, не забывая про строчку интервала меж ними

И редактируем саму дату, потом текст, потом год отсчёта

Вот таким образом «обучаем» часы вашим датам и событиям

ВАЖНО!, если внимательно посмотреть файл Symbols.h, то можно увидеть, что в русском алфавите нет буквы Ё ни заглавной, ни строчной
Й — есть обе, а Ё нет — это нужно учитывать создавая свои сообщения
В изменениях от 02,02 — мной была сознательно внесена ё, а не е в слове ещё
А как это отобразят часы — посмотрите ниже в видео проверки

Ну что, проверим что получилось?
Давим на клавиатуре Shift+F9
Программа компилирует прошивку с заданными нами изменениями в папку проекта по адресу m32_3.3DebugExe и по результату выдаёт сообщение

В нём можно увидеть сколько свободной памяти останется в МЕГЕ, после внесения нами наших изменений

Процесс прошивки заснял на видео:

Проверяем всё-ли получилось ли у нас правильно

Традиция
А в это время Катя мечтала о рыбе

Как обещал, фото вскрытых часов после года стояния на кухне в открытом типе корпуса


Пыль есть, но не сказал-бы, что катастрофически много

ПРОДОЛЖЕНИЕ СЛЕДУЕТ,,,

Планирую купить +1 Добавить в избранное +1