![]() |
![]() |
|||||||||||||||
WaterClock
Автор: Plant Присоединяюсь к поздравлениям и желаю развития сего благого начинания...
-Опять часы!!! Скажете Вы. Отчасти правы. Одно лишь Но. Эти часы, кроме обычной информации, показывают температуру воды. И не просто воды, а морской воды. Температуру тёплого (пока ещё ) Чёрного моря…
Для жителей приморских городов довольно обычен вопрос: –Как вода ? Ответ- тёплая, холодная, так себе… Но хотелось бы более точного определения, т.к. для одних тёплая- это не менее 23 С, для других и 19 град.- это хорошо. Можно зайти в интернет и там поковыряться , но сей интернет не всегда под боком, и не всегда правдив в этом вопросе. Разлёт может составлять до 4х градусов- лично проверял. Вот и появилась идея сделать часы-термометр, которые смогут отображать температуру морской воды. Расположенные в людном месте они должны помочь с этим извечным летним вопросом- как вода?
Как это работает? ![]() Проект состоит из трёх основных блоков:
Принцип действия системы такой. «Береговой» модуль раз в 30 мин(сейчас т тестовом режиме 7 мин) опрашивает датчики температуры, обрабатывает . Полученный результат выводится на дисплей и отправляется на сервер. На сервере формируется текстовый файл, в котором указаны температура воды, воздуха и время обновления. Теперь подробнее о работе каждого блока. Центральным элементом блока является МК ATmega8 (IC1). Он управляет работой всех основных узлов устройства. Периодически (раз в 10 мин) процессор опрашивает термодатчики, подключенные к контактам разъёма CON_6. Результат выводится на дисплей DIS1. Формат отображаемой информации показан на рисунке. Back counter- обратный отсчёт. Показывает, сколько условных единиц осталось до очередного опроса. Период отсчёта меняется программно в зависимости от предделителя счётчика Т0. Далее отображается температура воды и температура воздуха. На второй строчке индицируется статус отправки данных по сети интернет. Если после предыдущего замера температур датчиков данные были отправлены на сервер, то индицируется TX complete. Если данные не отправлены ( нет интернета , сбой) то на индикаторе появится надпись No connect или Bad connect. Процесс опроса датчиков и отправки данных можно активировать в любой момент нажатием кнопки KEY, расположенной на задней панели прибора.
На схеме есть обведённая облась RF-module. Этой части в устройстве нет. Она относится к «городскому»блоку. В остальном схемотехнически блоки идентичны. Взаимосвязь устройства с сетью интернет осуществляет микросхема U1 (W5500) фирмы Wiznet. Краткий обзор этой микросхемы и её отличия от предшественниц можно прочитать здесь .( https://habrahabr.ru/post/220723/) . В документации на МС не указаны некоторые особенности по организации режимов работы (клиент, сервер). Но оказалось, что в этом плане она совместима с W5100, где не плохо этот вопрос «разжёван». Остановлюсь чуть по подробней с особенностью работы с этой МС. Всё управление проПосле включения питания примерно (не ранее ) через 1мс необходимо повести «софтовый» сброс- записью в регистр MR_reg значения h80. Через 1 мс МС окончательно, бесповоротно и полностью сброшена и готова к дальнейшим трудовым подвигам. Далее необходимо загрузить значения IP, IP шлюза , маски подсети, и MAC- адрес. После этого устройство начинает отзываться на запросы ping. Так выглядит подпрограмма начальной инициализации: ![]() Данные для загрузки «берутся» из еепрома МК. Под свои нужды не планируется частое изменение основных параметров (IP, MAC), поэтому не стал вводить всякие тернистости в виде WEB-интерфейса.
Расположение переменных в памяти еепром МК: ![]() Выделено:
Красный- «свой» IP Желтый – шлюз Синий – подсеть Зелёный- MAC Устройство работает в режиме клиента. В документации на МС W5500 не описан этот режим, но как оказалось, принцип идентичен с чипом W5100. Там это представлено так: ![]() После некоторого количества проб и ошибок, этот алгоритм был реализован в подпрограмме Client (закладка client) с подробными комментариями. После установки соединения на сервер отправляется посылка следующего вида: GET /test/write_fail.php?temp1=$61&temp2=$62&pass=0000 HTTP/1.1 Видно, что обращение происходит к файлу write_fail.php. Входными данными являются температура воды (temp1), температура воздуха (temp2), и пароль (pass). С температурами всё понятно, а вот пароль необходим для того, чтобы не было соблазна ввести данные через строку браузера. Если пароля нет или он не верен, данные приняты не будут, а сам сервер немного поругается. Сам файл write_fail.php (изменено расширение на .тхт). Как происходят вставки данных о температуре в тело запроса? GET /test/write_fail.php?temp1=19&temp2=21&pass=0000 HTTP/1.1 19;21;17:43 21-09-2014 Где 19- температура воды Когда данные отправлены, и сервер ответил HTTP 200 OK Т. Е . данные доставлены, на дисплей выводится сообщение TX complete. Данные текстового файла выводятся на сайт. (на усмотрение модераторов)
Теперь «городской»модуль. Back counter- обратный счётчик в условных временных единицах. Показывает, сколько примерно осталось времени до следующего запроса данных. Остальная информация на дисплее надеюсь, понятна. После того, как данные получены, информация о температуре воды передаётся на табло по радиоканалу. Инициировать запрос на сервер можно в любой момент- нажатием на кнопку, расположенной на задней панели устройства.
Сам запрос: GET /test/temper_feo.txt HTTP/1.1 На запрос сервер отвечает HTTP 200 OK 16.5;21;17:43 21-09-2014 Содержимое текстового файла следует после заголовка через 2 знака переноса строки. Знак переноса строки –это 2 байта: h0d,h0a. Алгоритм выделения данных примерно такой. Если сервер на запрос ответил HTTP 200 OK (запрашиваемый файл существует), программа начинает искать в теле ответа 2 последовательных знака переноса –h0d, h0a, h0d, h0a. (подпрограмма recive в закладке Wiz_PP). Если переносы найдены, то за ними идут нужные нам данные. Далее ищем знак «;». Всё что до него- это температура воды, после него и до пробела- это температура воздуха. Т.к. нас не интересует температура воздуха, мы её не «выделяем». После определения температуры воды, ищем знак пробела. Следующее за ним- это время и дата обновления. Всё это делается в подпрограмме test (закладка wiz_PP). В результате интересующие нас данные разложены по полочкам. После этого данные о температуре отправляются на табло по радиоканалу. Радиоканал организован на МС TRC102 (IC4). Выходная мощность этой МС на частоте 868мГц примерно равна 3-4мВт. Это маловато, учитывая что табло и «городской» модуль не будут находиться в условиях прямой видимости. Для поднятия мощности передатчика и увеличения расстояния между модулем и табло применён УВЧ на транзисторе VT2, позволяющий увеличить мощность до 40-50мВт. После каскада усиления высокочастотный сигнал поступает на антенну, подключенную к разъему X1. Антенной может служить отрезок провода длиной 8 см. Для проверки работы передатчика, а также точной установки частоты передачи на модуле предусмотрен тестовый режим. Для входа в тестовый режим надо на выключенном модуле нажать кнопку на задней панели, и её удерживая подать питание. На дисплее отобразиться текущий канал, а передатчик включиться в режим немодулированной передачи. Контроль значения частоты производится частотомером. При каждом нажатии на кнопку значение частоты будет меняться с шагом ~ 8-10 кГц (по кругу). В принципе, значение может быть любым, главное чтобы частоты на модуле и на табло совпадали (см. ниже). Для сохранения установленного значения необходимо нажать и удерживать кнопку более 2х секунд. Значение сохраниться в еепроме МК, а сам модуль перейдёт в рабочий режим. Собраная плата городского модуля сторона 1, сторона 2 Табло. Схема табло разделена на 2 части. Это схема одной цифры, схема процессорного блока, (тоже разбита на две части, CPU и LED). Табло питается от источника напряжения 16V 2A. Выбор именно этого номинала исходил из того, чтобы можно было включить в одном звене 4 последовательных светодиода. Падение напряжения на одном зелёном светодиоде составляет 3,5вольта. На четырёх- 4 х 3,5=14В. Под лад этому рассчитаны все токоограничивающие резисторы в цепях светодиодов. Плата процессорного блока фото 1, фото 2, фото 3 С двух сторон этот участок печатной платы закрыт термоизоляционным материалом. В итоге опорный генератор RTC заключён в термостат. Сигнал с датчика температуры поступает на компаратор (Ic5), и далее на транзистор VT1. Что касаемо установки времени.
ТТХ описанных компонентов проекта. Вывешивал за окно. Метров со 100 в хороший солнечный день цифры хорошо видны. P.S. Сейчас я бы добавил количество светодиодов массивов, образующих символы «вода» и «воздух». Дело в том, что яркость свечения зелёного светодиода заметно больше, чем синего и оранжевого. Место, где оборвало трубу. Когда штормило, этого щебня не было... Внутри этой муфты датчик DS18B20
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
|||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |