«Умный дом» на Arduino для бытовки



    Ничего необычного, просто очередной контроллер на Arduino. С датчиками, релюшками и веб-страничкой. Но и со своими особенностями и вполне конкретным практическим применением, хоть и довольно банальным — удалённое включение электроотопления на даче. Кавычки в заголовке не случайны, контроллер не является умным домом в текущем исполнении, но служит хорошей базовой заготовкой для него. (прим. — эта фраза добавлена 12.04.18 по результатам комментариев).

    Ключевые особенности:

    • Датчик параметров электросети — счётчик электроэнергии «Нева» по RS-485;
    • Удалённая модификация web-страницы управления, лежащей на SD-карте;
    • Надёжное включение группы датчиков температуры Dallas на длинных линиях;
    • Графики изменения параметров без привлечения облачных сервисов;
    • Отказоустойчивые решения (внешний вотчдог, ИБП, авторестарт роутера);
    • Защита изернет-шилда от зависаний при помехах от силовых реле;
    • Законченная конструкция в корпусе на DIN-рейку.

    Делал я эту систему не спеша, в качестве развлечения, время от времени забрасывая проект на месяцы… От идеи до реализации прошло каких-то полтора года :)

    Так как до этого вообще не имел дела с микроконтроллерами, то начал со стартового наборчика с алиэкспресса, поигрался со светодиодиками, кнопочками и датчиками, понял примерно что к чему, и начал сооружать контроллер для удалённого управления и мониторинга. Ну не прям «умный дом» конечно, но что-то около того.

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

    Однако задача по удалённому управлению нагрузкой оказалась совсем тривиальной. Ардуино плюс изернет-шилд, готовый скетч из интернета, и релюшки уже щёлкают от галочек на веб-страничке. Практическая цель была достигнута как-то очень быстро и просто. И это было скучно. Хотелось чего-то более интересного.

    Поставил себе вторую практическую цель — мониторить текущее потребление в дачной электросети. Приобрёл простенькие датчики тока для тестов, поигрался. Работало всё хорошо, но для боевой работы этот вариант не годился. Датчиков мощнее, чем на 5А, мне найти не удалось, а мне надо было на 25А минимум.

    И появилась у меня мысль использовать в качестве датчика электросети счётчик электроэнергии. И это была прекрасная мысль! И создал я устройство такое, и увидел, что это хорошо! Не без трудностей, но задачу эту я выполнил в итоге превосходно, о чём с чувством глубокого удовлетворения и поведаю ниже :).

    Функционал

    Первая (и пока последняя) боевая версия контроллера «умной бытовки» обладает таким функционалом:

    • Удалённое ручное управление включением силовых реле через браузер и контроль их текущего состояния;
    • Удалённый мониторинг параметров трёхфазной электросети (напряжение, ток, частота и ещё много всякой ненужной фигни, которую я потом отключил);
    • Удалённый мониторинг показаний двухтарифного счётчика электроэнергии;
    • Удалённый мониторинг группы датчиков температуры;
    • Логирование данных и регистрация событий на карту памяти;
    • Отображение в браузере данных со всех датчиков за выбранные сутки в виде графиков.

    Идеология

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

    Ардуино с изернет-шилдом является единственным веб-сервером в системе. Веб-страница с интерфейсом управления хранится на карте памяти изернет-шилда и передаётся в браузер при обращении его к заданному IP-адресу. Дальнейшее взаимодействие интерфейса пользователя с Ардуино осуществляется посредством java-скриптов, тела которых не встроены в веб-страницу, а хранятся на моём домашнем файловом хранилище с доступом в интернет. Такой подход и уменьшает вес веб-страницы, что ускоряет её чтение с SD-карты, и позволяет более быстро и просто модифицировать код скриптов.

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

    Текущие значения датчиков отображаются на странице и обновляются в реальном времени с частотой цикла loop, которая у меня равна примерно 1 Гц.

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

    Топология сети 

    На даче мобильный интернет Yota (usb-модем + wifi-роутер). Фиксированного IP-адреса нет, и возможности его получить тоже нет, даже за деньги. Да и даже динамического белого IP-адреса нет, поэтому DynDNS не применить. Только серый IP-адрес внутренней сети Yota. IPv6 Yota не поддерживает (по крайней мере на 2017 год это так). Поэтому способ достучаться до дачного роутера извне я нашёл только один — VPN.

    Дома (в городе) проводной интернет с белым фиксированным IP-адресом. Роутер, за ним сетевое хранилище. На этом домашнем роутере поднят VPN-сервер. Дачный же роутер настроен на поднятие VPN-туннеля по PPTP к домашнему роутеру.

    Контроллер на Ардуино подключен к LAN-порту дачного роутера и сидит за NAT, к нему проброшен 80-ый порт. Таким образом, получить доступ к Ардуино я могу только из своей VPN. Соответственно, домашняя локальная сеть и VPN у меня это два сегмента одной подсети, доступ там прямой. На своём рабочем офисном компе и на смартфоне настроил VPN-подключение и также получил доступ к Ардуино. Не очень удобно пользоваться, но работает. Да и безопасность относительная обеспечена — без авторизации в моей VPN никто чужой попасть на страницу управления контроллером не может.

    Узкое место — VPN-туннель до дачного роутера. Периодически падает. Причем рвётся именно связь по PPTP, доступ в интернет при этом остаётся. И самое противное, что при обрыве PPTP-соединения оно больше само не поднимается. Не спасает даже перезагрузка роутера. Только полный перезапуск его по питанию вместе с USB-модемом, и то не сразу. Нужно выключить, подождать минут 10, включить снова. Повезёт — хорошо, нет — следующая итерация. Причина, если верить техподдержке Zyxel, в блокировке пакетов PPTP сотовым оператором, так как одна сторона правильно шлёт, вторая правильно слушает, но данные не доходят (на обоих концах VPN-туннеля у меня роутеры Zyxel). Виновата вроде бы Yota, но добиться от них чего-то вразумительного невозможно. А может и не Yota.

    WatchDog 

    Для обеспечения относительно бесперебойной работы VPN использую костыль программный вотчдог — дачный роутер питается через силовое реле, управляемое Ардуиной, и как только VPN-сервер перестаёт пинговаться (пингует тоже Ардуина), то через 10 мин питание с роутера снимается на 10 мин, затем роутер вновь включается и ожидается установка PPTP-соединения в течение 5-ти минут. Если связи нет — следующая итерация. Иногда это соединение устойчиво работает неделями и даже месяцами, а иногда начинает рваться чуть ли ни ежедневно. Иного пути решения проблемы пока не видится совсем. Как я уже говорил, IPv6 Yota не поддерживает, белый IP физикам не даёт и не продаёт, другого провайдера с нормальными тарифами и безусловно безлимитным трификом нет. Впрочем, это решение хоть и костыльное, но задачу свою выполняет очень хорошо. Теперь у меня связь есть всегда, за очень редкими исключениями, когда я попадаю на момент перезагрузки.

    Кроме программного я также реализовал и аппаратный вотчдог. На всякий случай. Контроллер должен работать неделями и даже иногда месяцами в отсутствии меня, и не зависать. Как себя поведёт всё это хозяйство в большие минуса мне было неизвестно, поэтому подстраховался. Встроенный в Атмегу вотчдог меня не устроил тем, что совсем не работал на Ардуино Мега «из коробки», и чтобы заставить его работать нужно было основательно потрахаться. Эта проблема хорошо описана тут. Кроме того, максимальный интервал у него 8 секунд, что мне показалось недостаточным. Поэтому я применил специализированную микросхему сторожевого таймера TPL5000DGST, интервал которого задаётся комбинацией из трёх пинов и может достигать 64 секунд, что меня вполне устроило. Для этой микросхемы приобрел маленькую макетку, спаял и закрепил на разъёме с IO-портами Ардуины (фотка будет ниже в разделе про сборку). Тесты показали надёжную работу этого вотчдога, и мне было интересно, как часто он будет срабатывать в реальности. Для этого я добавил в код программы переменную, где хранится время и дата запуска программы, и эта информация выводится на веб-страничку управления. Практика показала, что в отличие от VPN, контроллер работает бесперебойно долго, и сторожевой таймер пока так ни разу и не пригодился (пока писал статью, вотчдог таки сработал впервые за всё время, всё же не зря сделал). Время непрерывной работы достигало 3-х с лишним месяцев и моглы бы быть и больше, если бы мне не нужно было время от времени что-то подкорячить в коде и перепрошить контроллер.

    Датчик параметров электросети — электросчётчик «Нева»


    Как я уже упоминал выше, в качестве датчика параметров электросети, на мой взгляд, нельзя найти ничего лучше и точнее, чем современный цифровой счётчик электроэнергии с интерфейсом внешнего доступа к данным. Я выбрал счётчик Нева питерской компании Тайпит с интерфейсом RS-485.

    Подчеркну, что электросчётчик с постоянно подключенными к нему проводами 485-го интерфейса официально использовать в качестве прибора учёта не разрешено (update: в комментариях подсказали, что таки разрешено). Поэтому в дачной электросети я ставлю два счётчика последовательно. Первый — официальный прибор учёта электроэнергии, опломбированный и зарегистрированный, расположен в уличном вводном щитке. Второй — мой датчик параметров электросети, неопломбированный и неучтённый, на который энергосбытовой компании уже наплевать, так как её не волнует всё то, что установлено после прибора учёта. Этот электросчётчик расположен уже в щитке внутри бытовки, и в этом же щитке находится и контроллер на Ардуино, но, об этом чуть позже.

    На даче у меня трёхфазная электросеть. В городе я имею возможность отлаживаться только на однофазной. Поэтому приобрёл два счётчика, трёхфазный Нева МТ-324 и однофазный Нева МТ-124. Первоначальную отладку контроллера делал на столе на трёхфазном счётчике с подключенной одной фазой, затем установил его штатно в дачный щиток в боевой режим работы. Отладку последующих модификаций софта делал уже на более дешёвом однофазном счётчике на столе:



    Для подключения счётчика к Ардуино требуется преобразователь уровней RS-485 в TTL:


    Также для работы со счётчиком нужен свободный последовательный порт на Ардуино. К сожалению, Arduino Uno имеет только один последовательный порт, заняв который под счётчик пришлось бы лишиться отладочного вывода текстовой информации (монитора порта), а без этого писать скетч нереально. Поэтому использую Arduino Mega, у которой сериальных портов несколько. Можно было бы реализовать второй последовательный порт софтово через цифровые порты Ардуино, но подходящей библиотеки с возможностью изменения других настроек порта, кроме скорости, я не нашёл. А настройки порта счётчика отличны от дефолтных: битрейт 9600, 7 бит данных, 1 стоповый бит, контроль чётности — even. Стандартный объект Serial в Ардуино, к счастью, позволяет выполнить эти настройки.

    Протокол обмена со счётчиком получить было относительно несложно — производитель счётчика в открытом доступе имеет программу чтения параметров под Windows, в которой тоже есть монитор порта. Для подключения счётчика к компьютеру использовал преобразователь интерфейсов MOXA 232/432/485USB. Некоторое время на визуальный анализ посылок — и основные команды я вычленил.

    Однако мне этого показалось недостаточно, и я обратился по e-mail к производителю. После месячной переписки с компанией Тайпит мне наконец удалось заполучить полный перечень команд с интерпретацией:

    Кодировка параметров MT3ХX E4S
    Кодировка параметров НЕВА MT124 AS OP(E4P)

    Дальше дело техники — написать под Ардуино цикл опроса параметров и вывести их для начала в монитор порта. Время одного цикла получилось около секунды. Однако в конечном варианте проекта с логированием данных на флэшку и опросом температурных датчиков это время выросло до 4-x секунд. Это меня уже совершенно не устраивало и пришлось погрузиться в оптимизацию. В итоге я вновь добился секундного интервала без потери функциональности. К слову, скетч я переписывал с нуля два или три раза, пока не нашёл правильную архитектуру и экономные алгоритмы.

    Программная реализация обмена со счётчиком

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

    Код написан для двух типов счётчиков одновременно, однофазного МТ-124 и трёхфазного МТ-324. Выбор типа счётчика происходит в программе автоматически по ответному слову инициализирующей команды.

    Код привожу как есть, без прекрас и дополнительных комментариев кроме тех, что писал сам для себя. И да, я не программист, и даже не учусь на него, поэтому пинать меня за качество кода не следует, но поучить как надо кодить можно: EnergyMeterNeva.ino

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

    В редкие моменты, когда электропитание на даче отключается и счётчик становится недоступен, текущее время я получаю от внутреннего таймера Ардуины. Когда электросчётчик работает и его данные доступны, внутренний таймер Ардуины я перепрописываю значением со счётчика на каждом витке loop. Когда счётчик отваливается — текущее время продолжает тикать на таймере Ардуины.

    Помимо чтения параметров счётчик, естественно, можно и программировать. То есть интерфейс работает и на чтение, и на запись. Однако я с такими сложностями добивался протокола команд чтения, что о просьбе протокола записи я даже не заикнулся производителю. Во-первых, мне это было ни к чему, разве что только время чуть сдвинуть. Во-вторых, подозреваю, что эти данные уже не являются открытыми, так как могут быть использованы в мошеннических целях.

    Температурные датчики

    Тест температурных датчиков с помощью скетча-примера я уже проводил отдельно раньше. Теперь оставалось только встроить их опрос в основной проект. Это не составило никакого труда. Все девять имеющихся у меня датчиков работали без проблем при параллельном включении по 1-Wire. Разброс показаний между ними составил около 0.5 градуса, что показывает бессмысленность использования их на максимальной точности в 0.0625 градуса. Датчики для теста собрал в пачку и завернул в несколько слоёв пупырчатого полиэтилена. Для большей точности пачку расположил вертикально и ждал сутки для полного выравнивания температуры. Показания всех датчиков так и не оказались одинаковыми.

    Однако загрублять точность конвертации температуры самих датчиков я тоже не стал. Проще округлить показания программно, а выгоды по времени опроса я бы не получил, так как придумал такой алгоритм, при котором время ожидания конвертации не является пустым бесполезным delay(750). Обычная логика работы с датчиками такая — сначала подача команды на запуск конвертации температуры, потом ожидание окончания конвертации (те самые 750 мс минимум), и уже затем вычитывание данных. Я сделал всё наоборот, что позволило мне исключить пустой интервал ожидания — сначала вычитываю данные из датчиков, а потом сразу запускаю конвертацию. И пока весь остальной код в цикле LOOP отработает, данные как раз успевают подготовиться для вычитывания на следующем витке. По времени данные с датчиков я получаю в этом случае чуть позже — цикл LOOP занимает примерно 1-1.5 секунды, но это совершенно не критично.

    Иногда со всех датчиков я получал данные «85» или «0». Что это за косяк, я так и не понял, поэтому сделал в коде проверку и исключил попадание таких данных в результат. Ещё обнаружился косяк у одного из датчиков — он не держал настройки при отключении питания. То ли флэшка его внутренняя дохлая, то ли ещё что. Поэтому в сетапе прописал настройку датчиков, и теперь по включению питания (если оно таки пропадает) все датчики гаранитрованно настроены.

    Адреса конкретных датчиков я получил с помощью скетча-примера, где-то нарытого и немного мной модифицированного: DS18x20_Temperature.ino

    После чего адреса я забил константами в массив и в основной программе обращался к датчикам уже сразу по их адресам: TempSensors_DS18B20.ino

    Для правильной работы датчиков на шине 1-Wire требуется установить подтяжечный резистор 4.7 кОм между линией данных и питанием. Мне было удобно припаять между пинами клеммной колодки SMD-резистор, но нашёл я у себя в подходящем корпусе только 5.1 кОм, его и поставил (он виден на фотке в разделе про сборку на нижней стороне платы). Работает всё хорошо.

    Датчики температуры у меня подключены электрически параллельно на одной длинной линии (+5, gnd и data), все 9 штук, но хитро. Физически кабели витой пары подключены звездой для удобства разводки датчиков по объекту. В каждом плече кабеля я использую две пары. Одна пара — это питание датчика. Вторая пара — это линия данных, которая идёт по одному проводу к датчику и возвращается от него же обратно по второму проводу. Таким образом получается возможным развести кабели звездой от щитка, но электрически это звезда только по питанию, а по данным это одна линия. Такой вариант подключения оказался более надёжен в работе на длинных линиях, при простом параллельном подключении было много сбоев при чтении данных. Вот эскиз такой схемы:



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

    Всего по бытовке разведено три кабеля, два — для внешних датчиков, на каждом по одному, и один для всех оставшихся семи внутренних. Эти семь внутренних датчиков подключены по той же схеме, но в пределах одного длинного кабеля и с короткими ответвлениями от него (см. нижнюю Т-образную конфигурацию на эскизе). Где-то хватило штатного полуметрового хвоста датчика для ответвления, где-то ответвлял с помощью такой же витой пары.

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

    Общая длина витой пары по бытовке составила примерно 25 метров. Куски для внешних датчиков — 5 и 10 метров, и десятиметровый внутренний кусок с ответвлениями на семь датчиков. Всё работает почти идеально. Лишь изредка проскакивают прочерки вместо значений температуры. Это значит, что данные с конкретного датчика были прочитаны некорректно. Но случается это настолько редко (замечаю раз в месяц может), что не доставляет никаких проблем.

    Удалённый доступ

    Для удалённого доступа к Ардуино был куплен Ethernet shield. При наличии встроенной библиотеки работа с ним, как и со всем остальным в Ардуино, оказалась довольно проста.

    Функционально схема работы у меня такая. На Ардуино поднят веб-сервер, который при обращении к нему клиента (браузера) генерирует веб-страничку с различной информацией. Автообновление данных на страничке реализуется посредством яваскрипта, опрашивающего по таймеру сервер.

    Также страничка имеет набор контролов для управления исполнительными механизмами, подключенными к Ардуино — силовыми реле, которые коммутируют нагрузку — электрообогреватели и освещение.

    С дизайном веб-странички я не парился, тем более что был необходим минимальный объём текстовых данных для её более быстрой загрузки, поэтому самый примитивный html и всё:



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

    Код страничики лежит в файле на карте памяти и загружается с неё при обращении к серверу. Для более быстрой и удобной модификации кода странички я встроил механизм её обновления в неё саму. Внизу, под блоком основных контролов есть текстовое поле и кнопка Отправить. В текстовое поле копирую новый html-код, жму кнопку, после чего java-скрипт производит отправку данных на веб-сервер контроллера, который сохраняет его сначала в буферный файл. Если передача произошла успешно, то основной файл подменяется буферным, страничка автоматически обновляется. Всё. Изменения приняты.

    Привожу фрагменты кода моей реализации этого механизма.
    В html-страничке встраиваем форму:

    <script type="text/javascript" src="http://domain/send_HTM.js"></script></pre>
    <pre style="font-size: 14px;"><form>
     <br><br>
     CONTROL.HTM:<br>
     <textarea cols="100" rows="20" wrap="off" id="htm"></textarea><br>
     <input type="button" value="Отправить" onclick="send_HTM();"><br>
     <div id="progress" style="display:none">
         <div id="label">Идёт отправка страницы:</div>
      <div style="width:800px;border:1px solid #000">
         <div id="bar" style="background:#00f;height:10px;width:0px"></div>
        </div>
    </div>
    </form>

    По кнопке «Отправить» запускается следующий ява-скрипт: send_HTM.js

    В скетче в функции обработки запросов веб-сервера по префиксам в запросе 'CONTROL.HTM' (старт отправки файла), 'htmlineN' (отправка строки №) и 'END_CONTROL.HTM' (конец отправки файла) определяем дальнейшие действия:

    File acceptHtmFile;
    ................
    if (fl_accept_htm) // префикс 'CONTROL.HTM'
    { 
     SD.remove(CTRL_HTM);
     acceptHtmFile = SD.open(CTRL_HTM, FILE_WRITE); // открываем файл на запись
     if (!acceptHtmFile)         // если файл открыть не удалось - ничего не пишем
     {
      #ifdef DEBUG_SD
      Serial.println("SD-card not found");
      #endif
      client.print("FAIL");
      client.stop();
     } 
     else client.print("OK_OPEN_FILE");
    
     acceptHtmMode = true;
     break;
    }
    if (fl_htmline) // префикс 'htmlineN'
    {
     int b = acceptHtmFile.println(tag);
     if (b == 0)
     {
      client.print("FAIL");
      acceptHtmMode = false;
      cntHtmModeIteration = 0;
     }
     else
     {
      client.print("OK");
     }
     cntHtmModeIteration = 0;
     break;
    }
    if (fl_endhtm) // префикс 'END_CONTROL.HTM'
    {
     SD.remove(CONTROL_HTM);
     acceptHtmFile.close();
     
     File htmlFile = SD.open(CONTROL_HTM, FILE_WRITE); // открываем на запись
     acceptHtmFile = SD.open(CTRL_HTM); // открываем на чтение
     for (int i = 0; i < acceptHtmFile.size(); i++)
     {
      digitalWrite(PIN_WATCHDOG_DONE, 1);
      htmlFile.write(acceptHtmFile.read());
      digitalWrite(PIN_WATCHDOG_DONE, 0);
     }
     acceptHtmFile.close();
     htmlFile.close();
     
     client.print("OK_CLOSE_FILE");
     acceptHtmMode = false;
     cntHtmModeIteration = 0;
     break;
    }

    Дефайны CONTROL_HTM и CTRL_HTM здесь это имена html-файлов. Первый — основной файл, второй — буферный. В массиве чаров tag лежит текст принятой строки, выделенный из запроса. Логика такова: при приёме данных они пишутся в буферный файл, по окончании приёма буферный файл переписывается в основной. Как просто переименовать файлы я так и не смог понять, в стандартной библиотеке SD такой функции нет, поэтому тупое посимвольное копирование, отнимающее кучу времени.

    Было бы удобным код веб-странички управления хранить не на карте памяти контроллера, а на клиентской машине, или загружать с какого-нибудь внешнего ресурса. Но запрет на кроссдоменные запросы не позволяет этого сделать. Яваскрипты могут отправлять свои запросы только тому северу, с которого были загружены сами. Тела яваскриптов при этом могут подгружаться откуда угодно, важно лишь только откуда была загружена страница с их вызовом.

    Логирование данных

    Ethernet shield имеет на борту слот карты памяти micro-SD. Именно из-за его наличия я и решил писать данные в лог-файлы. Для работы с картой памяти также имеется встроенная библиотека, и управлять записью-чтением файлов с ней вообще элементарно.

    Для экономии объёма данных алгоритм логирования я построил так, что запись происходит только тогда, когда данные изменяются более чем на заданный порог. Для температуры это 0.1°, для напряжения это 0.2В. В один файл пишутся данные за одни сутки. В ноль часов создаётся новый файл. Формат хранения я выбрал обычный текстовый, с разделителями, чтобы можно было быстро контролировать содержимое файлов при отладке, и была бы простая возможность загрузки в Excel.

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

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

    Графики

    В качестве движка для построения графиков я использую очень гибко настраиваемую javascript-библиотеку визуализации данных amchart. Библиотека бесплатная и доступна для скачивания и автономного использования. Эту библиотеку я также расположил на своём сетевом хранилище с постоянным доступом в интернет. Подключить и использовать её с дефолтными настройками не сложно, однако чтобы получить в итоге тот вид, который мне был нужен, пришлось немало повозиться. Помогло огромное количество примеров на сайте и наличие подробной документации.

    Для примера приведу свой яваскрипт отрисовки графиков. Сам по себе он бесполезен, так как работает только в совокупности и с веб-сервером, и с html-страницей, и, возможно, завязан на другие скрипты (дело было давно, всех деталей уже не помню). Но настройки внешнего вида моих графиков содержаться именно в нём и почерпнуть их оттуда можно: get_log.js

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

    Недостаток этой библиотеки я обнаружил только один — она не умеет (ну или я так и не понял как) по-человечески обновлять графики в реальном времени. Можно добавить новые данные к уже имеющимся, но перерисовка производится каждый раз полностью всего массива данных, и это сильно подтормаживает работу браузера. Впрочем, сама идеология чтения из Ардуины данных для отрисовки по запросу из браузера ущербна своей неоптимальностью, поэтому бороться за быстрое обновление в реальном времени смысла не было никакого.

    Правильным решением было бы организовать отдельный сервер хранения и визуализации данных, куда с Ардуины в реальном времени данные капали бы по чуть-чуть и складировались в БД, и откуда бы они могли быстро быть отданы пользователю в браузер для визуализации.

    Сейчас графики выглядят так (на примере дня, когда в бытовке никого нет и, соответственно, нет никакого энергопотребления). Когда возникают данные тока, масштаб автоматически устанавливается так, чтобы всё красиво влезало, и на вертикальной оси возникают и значения уровней тока:



    Графики отображаются на той же самой страничке, где происходит управление, прямо ниже основного блока контролов.

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

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

    Сборка

    С самого начала я поставил себе цель — сделать законченное устройство, а не просто макет с ворохом проводочков на столе:



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

    Для этого требовался динреечный корпус. Вначале думал разработать его и напечатать на 3D-принтере. Но, своего 3D-принтера у меня нет, а то, что печатают мои коллеги по работе на своих самосборных принтерах, меня совершенно не устраивало по качеству внешнего вида. Нашел в продаже готовые корпуса на DIN-рейку (разных размеров), выглядят хорошо, пользоваться удобно (разборные), да ещё и плата-слепыш под них специально имеется готовая.

    Купил самый большой корпус, чтобы в него вместилась не только Ардуино с изернет-шилдом, но еще и реле для коммутации нагрузки:









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



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





    Для подключения проводов к верхним контактам пришлось использовать загнутые штырьки, иначе не влезало в корпус:



    Изолирующие шайбы местами приходилось подрезать:



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





    Для одиночной релюшки не хватило точек опоры, поэтому повисла только на двух точках:



    Прикидочная сборка вместе с клеммными колодками:



    Потом поделка стала постепенно обрастать проводами. Плата была использована только для разводки питания и для подключений к клеммным колодкам. Для сигнальных связей использовал провод МС-16 (мне он больше нравится), для силовых он не проходил по напряжению (до 100 В), поэтому МГТФ:



    На лицевой панели закрепил светодиодики, токоограничивающие резисторы припаял прямо к ножкам светодиодов и закрыл термоусадкой:



    В итоге получилась вот такая бородатая начинка:



    А вот и платка с микросхемкой сторожевого таймера, приютилась в недрах моего творения, прямо над преобразователем уровней RS-485 — TTL:





    Вся конструкция разборная, всё можно снять, отсоединить и заменить без пайки, кроме платки с вотчдогом, она припаяна к пинам разъема, одетого на ряд IO-портов Ардуины.

    В коробочке:



    Отверстия под разъёмы Ардуины выпилил в пластиковой стенке корпуса. Сначала сделал отверстия точно по размерам разъёмов, но сборку в корпус нужно заводить по диагнонали (иначе просто никак) и разъёмы не проходили, пришлось расточить немного:



    Включение готового изделия на столе, всё заработало сразу:





    На лицевую панель вывел:

    • Четыре красных светодиода — индикация нагрузки;
    • Два зеленых — наличие связи со счётчиком и с VPN-сервером;
    • Два желтых — запасные;
    • Один желтый — индикация перезагрузки роутера;
    • Один красный — питание;
    • И кнопочка сброса.

    Для получения 5-ти вольт из 220-ти я использовал динреечный блок питания с подстройкой выходного уровня, питание подано непосредственно на микроконтроллер, минуя входной преобразователь из 7-12 в 5 вольт. Это было удобно по нескольким причинам. Во-первых, мощности встроенного преобразователя в какой-то момент стало не хватать, ток там ограничен. Во-вторых, питать реле всё равно нужно было 5-ю вольтами. В третьих, в щитке удобен динреечный форм-фактор с точки зрения монтажа. Поэтому вот:




    Испытания

    На столе всё было преверено, всё работало как надо, настала пора инсталлировать контроллер в щиток и проверить его в боевом режиме.

    Но сначала я подключил всё «на соплях», буквально затолкав всю требуху в другой щиток, слаботочный, чтобы протестировать работу термодатчиков в реальных условиях на длинных линиях, проложенных в одном кабель-канале с силовыми кабелями ~220В:



    Как можно заметить на фотке выше, доселе я пытался управлять перезагрузкой роутера по питанию с помощью «умной» розетки Senseit. Однако сей девайс безумной стоимостью в 5 тыс (на 2016 год) оказался на редкость глючным и капризным. За год использования не раз заставлял меня незапланированно приезжать на дачу в неурочное время, дабы вручную вывести это чудо инженерной и маркетинговой мысли из глубокого дауна в части GSM-связи. С переходом на свой Ардуино-контроллер, который оказался не в пример надёжнее, я с облегчением бросил это «профессиональное» барахло в красивой коробочке в ящик, и забыл про него.



    Тест прошёл успешно, сбоев не было, и можно было приступить к окончательной инсталляции в штатное место:



    Да-да, это щиток ABB TwinLine 800x300x225 IP55, стоимостью в 25 тыс. руб. без начинки (и начинка ещё на 15 тыс. примерно). И да, он установлен в бытовке 6х2. У всех свои тараканы. Да, собирал всю электрику сам. И бытовку строил тоже, да. Нет, я не электрик. И не строитель.



    В глубине щитка я расположил небольшой источник бесперебойного питания Powercom WOW 300, вон там горит его зелёный светодиод, а левее и выше — его вилка входного питания:



    Его хватает на ~40 минут автономной работы Ардуино-девайса, роутера с USB-модемом и вайфаем, и Full HD IP-камеры наружного наблюдения.

    А здесь видны белые вилки питания двух бесперебойных потребителей — блок питания Ардуино и слаботочный щиток, где расположен роутер и блок питания камеры наружного наблюдения. Эта линия идёт с разрывом через контактор, которым управляет Ардуино, как раз для того самого программного вотчдога, перезагружающего роутер по питанию в случае падения VPN (камера перезагружается заодно, хотя ей это и не надо). Сверху к контроллеру подключены линии витых пар от датчиков температуры:



    Надо сказать, что маленьким синим китайским релюшечкам я бы никогда не доверил коммутацию мощной нагрузки, несмотря на вроде бы позволяющие это делать параметры этих релюшек. Поэтому сразу же было заложено использование нормальных модульных контакторов Legrand кат.№ 4 125 01 с возможностью ручного управления. То есть релюшки внутри корпуса контроллера управляют контакторами, а контакторы уже управляют нагрузкой. Это надёжно. А вот питание роутера и камеры осуществляется только лишь через эту маленькую синюю китайскую релюшку, ток там небольшой, поэтому можно.

    При первом же боевом запуске меня ждало большое разочарование. На столе я испытал всё, кроме нагрузки. Зачем? Контакторы щёлкают, и так понятно, что нагрузку они коммутировать будут. Ан нет, надо было испытать. Мощные электроконвекторы привнесли в систему помеху в момент размыкания контактов, что приводило к гарантированному зависанию изернет-шилда. Причем вывести его из дауна было возможно только снятием питания, простой ресет не помогал. Погуглил — да, есть такая проблема у этой китайщины. И библиотека не обрабатывает эту ситуацию. То есть и железка хреновая, и софт не очень.

    Думал уже, что всё пропало. Даже заказал твёрдотельные реле, но они, сволочи, больше по высоте, и в мою конструкцию уже не поместились бы. Но потом подумал, что может быть всё же помеху можно подавить. Опять погуглил, нашёл специальные помехоподавляющие конденсаторы (т.н. конденсаторы типа X). Просто подключил их параллельно управляющей обмотке контакторов, и о чудо! Зависания пропали полностью. За вот уже год эксплуатации ни одного случая не зарегистрировано:







    А вот таким образом можно заглянуть внутрь коробки:





    Ну и законченный вид щитка с пластроном (заглушек вот в комплекте не дали):



    Для дебага и перепрошивки кабель USB подключен к контроллеру и хранится внутри щитка за закрытой дверцей (изернет на этой фотке временно не подключен):





    Система работает уже почти год, пережила морозы до 20 градусов без проблем.

    В целом я доволен результатом. Однако для более-менее функциональных задач Ардуино явно слабенький. Я уже не раз сталкивался с исчерпыванием памяти и приходилось кроить и оптимизировать. Да и скорость работы, особенно с картой памяти, меня совершенно не устраивает. Поэтому будущие реализации подобных поделок, если таковые потребуются, я бы хотел основывать на чём-то более мощном. Коллеги пиарят мне Raspberry Pi, хороший вариант, думаю.

    Кто-то может сказать «Сколько сложностей ради такой примитивной задачи», и, вероятно, будет прав. Для меня вся эта затея — хобби, с небольшим оправданием смысла. Поэтому искал развлечения во всём, где мог :)
    Поделиться публикацией
    Комментарии 80
      0
      Завидую белой завистью людям с правильно заточенными руками. У самого половина умного дома на соплях, всё собираюсь с мыслями, как этот винегрет в щит красиво запихнуть.

      А не залинкуете ли материал в нете по электрике, как порядок в щите наводить? А то изначально щит был собран местными кудесниками, потом ни раз самостоятельно рефакторился под меняющиеся нужды, в результате там бардак. А опыта и знаний как грамотно оформить щит нет.
        +1
        Ну, у меня нет такого материала. Правильно делать щиты не просто, этот щит у меня далеко не первый и учился я по гуглу долго. Да и он не сказать что совсем правильный. Ну, разве что могу посоветовать вот этот блог cs-cs.net/category/el-sh, оттуда много чего почерпнул конкретно по щитам ABB.
          +1
          cs-cs да, умеет свое дело.
          и пишет нормально, и рассказывает хорошо
        0
        Raspberry Pi вариант хороший, но надо следить за количеством чтений и особенно записи на microSD карточку, в неаккуратных циклах карточка умирает за считанные месяцы.
          0
          Вы могли бы немного подробней пожалуйста рассказать?
        0

        Собрано красиво и аккуратно) Я бы еще добавил искрогасящие цепочки на контакты китайских реле, по крайне мере те, что управляют контакторами. Контактор индуктивная нагрузка, она шустро убивает контакты реле. Для уменьшения помех на ардуино и шилды можно попробовать их экранировать от реле. Еще можно добавить защиту, типа TVS диодов, на длинные линии (термодатчики) и питание. Вообще это обширная тема по борьбе с ЭМП в промышленной аппаратуре...

          0
          Вместо rpi можно odroid еще попробовать.
          Еще интересный проект для похожих задач Onion Omega2, но это если не требуется кучи портов и приемлем Wi-Fi
            0
            У Омеги и ethernet наружу вполне вытаскивается — или родным шилдом (дорого), или самоделкой ( community.onion.io/topic/1964/omega-2-ethernet-without-ether-dock/12 ). Но аналоговых входов-выходов там нет как класса, что накладывает известные ограничения. Но никто не мешает подвесить на UART ардуину и разделить задачи между устройствами :).
            0

            Спасибо за хорошую статью.
            Я хочу поделиться своим негативным опытом использования китайских релешек. Не знаю как у Вас, но у меня через пол-года работы они стали "залипать", при чем нагрузка не большая — не более 5W. По этой причине я полностью от них отказался и заменил их симисторами с опторазвязкой.

              0

              Вот для того, чтобы реле не залипали, и ставят снабберные цепочки. Это конечно не избавляет от проблемы совсем, но заметно продлевает срок службы. Кстати симисторным ключам такие цепочки тоже нужны, может даже больше чем реле. Ну и конечно важно качество реле. У меня на нагрузку ~10Вт (чисто резистивную) уже несколько лет стоит реле TTI или TE, щелкает пару раз в час с 7 до 21 каждый день.

                  0
                  У меня лежат твёрдотельные реле в запасе. Начнут залипать — поменяю на них. Благо тут коробочку размерами побольше мне подсказали уже, если не влезет в мою — поменяю коробочку. Нагрузка у меня вся на переменном токе, так что норм.
                  0
                  Очень аккуратно собрано. Конструкция проработана. Особенно монтаж в корпус и разводка на плате.
                  Спасибо за полезный материал.
                    0
                    а почему нельзя постоянно использовать подключение к счетчику по RS-485? Это же штатный интерфейс, причем непломбируемый… Есть какое-то требование энергетиков? Относится ли это ограничение к импульсному выходу счетчика?
                      0
                      Пломбируемый. Под общей крышкой, закрывающей силовые клеммы. По крайней мере в конструкции именно этого типа счётчиков это так. Пруфов на запрет я не предоставлю, их у меня нет, для меня это очевидно само по себе, так как по этому интерфейсу счётчик можно программировать, а значит, вероятно, изменить какие-то значимые параметры, тариф, например, а может и калибровку изменить.

                      Но строго говоря да, я не знаю точно что этого делать нельзя. Вы правы.
                        0
                        под «программированием» счетчика имеется в виду включение режима раздельного счета при переходе на многотарифное потребление и выставление правильного времени (что пришлось бы делать 2 раза в год при переходе зима/лето). Изменить параметры счетчика, да даже сбросить показания — нельзя.
                        То, что клемма RS-485 под общей крышкой — печально. У моего квартирного сверху отдельная маленькая крышка.
                          0
                          Тоже хотел задать тот же вопрос. У меня счетчики МЗЭП/АГАТ в квартире и на участке, где строиться предстоит. На них клеммы под RS-232-подключения под отдельную планку выведены. Которая тоже может пломбироваться, но электросети подключаться туда не запрещают. Собственно и дома и на участке у меня эти планки сейчас «разблокированы» для подключения.
                            0
                            А программировать критичные для учета части и не получится. Кроме прочего, там ещё и пароль(цифровая подпись) требуется. Если бы можно было его так просто программировать, уже бы давно разобрали на детальки и отреверсили протокол обмена при записи. Но халявы нет и разработчики счетчиков знают своё дело. Секретом там является не протокол, а зашитая в счетчик цифровая подпись, поидее можно зашить свою подпись и пользоваться им в т.ч. и на запись. Воровать электроэнергию таким образом можно будет лишь до очередной проверки, когда подключатся программатором а там подпись не совпадёт. И то для этого надо будет вскрыть счетчик чтобы переписать флеш-память(с битами защиты от чтения отдельных блоков!) т.к. способа «сбросить настройки на дефолтные» у него нет.
                              0
                              Ну, значит я был не прав. Для меня сам факт пломбировки этих контактов на моём счётчике был однозначным свидетельством того, что нельзя. Значит, можно, это хорошо. Поправлю статью.
                          0
                          Красиво. Изящно. Респект за хорошие фотки, есть что перенять ))
                            0
                            Круто. Сам имею похожую жилую бытовку пока нет дома. Тоже пытаюсь удаленное управление и мониторинг внедрить. Почти все уже куплено, уже полгода-год валяется. Рад что есть такие же как я и более умные, у которых поучится можно. Спасибо.
                              –3

                              Лол, туча народу, которые называют "умный дом" систему мониторинья и ленивого Ж поднимания, забывая о том, что такая система ничего общего не имеет с этим. :D
                              По факту, никто даже рядом "не валялся" и не задумывался о последствиях (поддержания его работы, надежности, безопасности).

                                +2
                                Если кто не понял, в заголовке был сарказм, я думал что кавычек достаточно. Да и в тексте я об этом упоминал тоже.
                                  +1
                                  Хотя вот про последствия Вы не правы и явно не читали пост целиком.
                                  Надежность, отказоустойчивость и безопасность обеспечены, и я не просто «рядом не валялся», а потратил энное количество времени и денег для обеспечения этих критериев. Мой контроллер работает надёжно с лета прошлого года, безотказно и безопасно. Всё есть в статье.
                                    –4

                                    Ну дык какое отношение к "умному дому"?
                                    Скорее "дом игрушка".)
                                    А читать досконально про дуня поделки — увольте. Чего стоит одно описание "поднимать винт на втулке" а-ж на ТРИ фотографии. :D
                                    Хотя я согласен с вами, что подошли вы к делу добротно, не дешево (правда непонятно, зачем было тогда делать всё на дуни и вообще делать, проще купить готовые модули (и там кстати хоть какой-то намек на "умность", ибо есть логика взаимодействия модулей через софт).

                                      0
                                      Ну извините, что заставил Вас заглянуть туда где Вам не интересно. Написал в заголовке так именно потому, что все этим термином (умный дом) обзывают всё что угодно, только не умный дом. Я сам против этого, но есть тенденция и с этим ничего не поделать.

                                      Но зачем коментить то, что Вы не читали? Какой смысл? Тем более коммент не в тему. Если бы прочли пост — было бы понятно, зачем и почему я сделал всё именно так (это просто развлекалочка была, если что, но и с пользой — нигде не встречал чтобы кто-то данные со счетчика ардуиной читал). Я вот в упор понять не могу — не интересно, не читал, но откоментить «своё видение» того, что могло бы быть написано под таким заголовоком и под такими фотками надо. Для кого это?
                                        –2

                                        Зачем так агриться, если вы выше этого.) Любите шутить — любите читать отзывы/реакцию.

                                          +1
                                          Ну так я и читаю, и реагирую соответствующе. Покритикуйте содержимое поста — буду рад. Но тут, извините, наблюдается неадекватная реакция — комментить текст без его чтения. Блин, или это троллинг такой? Я попался :))) Ладно, понял, проехали :)
                                            0

                                            Ага, попался.)))
                                            Критиковать тут особо нечего, схем нет, но есть макетка с проводами и много картинок.
                                            Из имеющегося макс можно рекомендовать, не проводить низковольтные, логические/цифровые провода через силовую часть (реле).
                                            "Статья" смахивает на аля хвалебную, похвастать. Я вот только по этой причине на гиктаймс статьи не выкладываю. :D

                                              0
                                              Ну так да, похвастать, так и есть, это очевидно. Чё такого. Плюс поделиться решениями, в т.ч. новыми. По крайней мере многое придумал сам, если это оказался велосипед — ну бывает. А для чего ещё постить? Если есть польза от содержания для кого-то — цель поста достигнута. Народ вон пишет, что есть что перенять, значит не зря постил.

                                              А схем нет именно потому что тут нет уникальной схемотехники. Всё стандартно. Кому нужна схема того как релюшки к Ардуине подключать, этого добра и без меня полно. Я писал лишь о тех решениях, которые сам разработал.
                                                0
                                                нет уникальной схемотехники

                                                Ну вот видите, сами всё понимаете, а всё выше задавали мне вопросы.)


                                                А для чего ещё постить?

                                                Я давно уже на подобные статьи и такой вопрос отвечал (дежавю), что писать надо про что-то интересное, новое, экспериментальное (нестандартные подходы к решениям). Может пригодиться для обхода "граблей" технических и финансовых.
                                                Вот тут на днях я увидел такую поделку: https://store.artlebedev.ru/electronics/accessories/kulonus-1/, схемотехника стандартная (минимум деталей и даже проглядывается ошибка (надежности), НО какова реализация алгоритма!!! Ведь кто когда использовал подобное железо, знает о возможностях, ограничениях аппаратных и всё равно, сама идея так реализована, что кажется, что ВСЕ эти аппаратные проблемы решены. В общем цена за изделие не только маркетинг, а цена самой идеи.

                                                  0
                                                  Но пост не о схемотехнике! Новое, интересное и нестандартные подходы к решениям — у каждого свои оценки этих критериев. Для меня (и не только, так как поделка моя уже древняя и о ней знают многие) в моей затее есть и новое (счётчик как датчик параметров электросети), и интересное (сборка в коробочку — очень не многие могут похвастаться доведением до конечного вида своих поделок, так как вопросов всегда много — как, куда, из чего и т.п.) Пост больше в помощь начинающим в некоторых непростых вопросах. Гиктаймс читают далеко не только прошаренные профи, к которым я лично себя никогда не причислял и не претендовал на суперуникальность содержимого своих немногочисленных четырёх постов :).

                                                  А тем временем этот пост четвёртый среди лучших за сутки.
                                                    –1
                                                    сборка в коробочку — очень не многие могут похвастаться доведением до конечного вида

                                                    Конечно, коробочки красивые денег стоят, ща вот они все побегут в Леруа или какой нибудь ЧипДип и прифигеют.


                                                    А тем временем этот пост четвёртый среди лучших за сутки.

                                                    Хаха — это полностью противоречит:


                                                    не претендовал на суперуникальность содержимого своих немногочисленных четырёх постов

                                                    На гиктаймсе, последнее время, вообще с выбором статей не так всё хорошо и механика весьма убогая (по голосованиям (я вот например не могу голосовать, только "избранные" и как пологаю, таких армия), располагает к логическим последствиям (кривым результатам).
                                                    Ладно, я и так много времени провел в переписке с вами, т.е. любите пообщаться (и меня затянули). :D

                                      0
                                      Не уверен. очень неуверен. ждём грозы в ваших краях… достаточно тех проводков к датчикам чтобы в грозу особо удачную выпалить весь контроллер и разнести его на части физически.
                                      Ардуина… тех средств что вы потратили на начинку хватило бы на приличный промышленный контроллер начального уровня который с лёгкостью обеспечил бы ваш функционал, за исключением пожалуй веб-доступа в самой дешёвой модели. Как правило в промышленный контроллер установлены более мощный процессор, всевозможные защиты по входам в т.ч. от грозы, предусмотрены модули расширения входов/выходов и т.д. цена вопроса — 200-300$ если такое же по уровню делать самостоятельно, с учетом времени разработки выйдет многократно дороже.
                                      Пока лишь посоветую на датчики температуры на длинных(длиннее 10см) проводах реализовать грозозащиту супрессорами. Так хотябы только датчики в худшем случае придётся менять. Причем именно супрессоры. Как показывает практика — газоразрядные и варисторы слишком медленные, хотя и способны уменьшить количество джоулей прошедших через защиту и минимизировать ущерб, но увы электроника всеравно выгорает. Я понимаю что гроза более-менее серьёзная происходит раз в 5-10 лет но всё же обидно потерять ВСЁ из-за непредусмотренной грозозащиты в виде нескольких деталей.
                                        0
                                        Не ну насчёт грозы я тут согласен полностью. Эта тема посложнее темы про заземление будет. Не рассматривал грозозащиту вообще, просто не тот уровень этой поделки. Под безопасностью я имел ввиду пожаробезопасность — размещение всего в герметичном стальном щитке. А так да, если жахнет — будет повод изучить распбери, так что…

                                        Промышленные контроллеры — хорошо, но у меня цель была — поиграться с новой для меня игрушкой. То есть я сначала купил Ардуино, а потом стал думать чего из неё сделать полезное :)

                                        Про супрессоры спасибо, подумаю, мысль хорошая. А есть навскидку примеры схем? Сам пока не гуглил, просто мало ли есть на примете хороший ресурс.
                                          0

                                          В этом номере "Новостей Электроники" много про TVS и тому подобное. В основном про Littelfuse конечно, но суть вопроса не меняет, инфа полезная.

                                            0
                                            Спасибо. Посмотрел, полезно. То есть я так понял надо поставить по диоду на линию питания и на сигнальную линию относительно земли. На каждый датчик. Но у меня в бытовке нет заземления, не сделал ещё. И GND Ардуины не связан с корпусом щитка. Работать не будет без этого.
                                              0

                                              Да, без земли жить плохо. В вашем БП, скорее всего, в входном фильтре стоят 2 конденсатора, между фазой и землей и между нулем и землей. Таким образом на этой земле (общий провод вашей схемы) будет присутствовать потенциал в ~100В как относительно фазы, так и нуля. При наличии заземления, это точка будет иметь потенциал = 0. Это хорошо как в плане электробезопасности, так и в плане защиты аппаратуры от наводок.

                                                0
                                                Да, всё это надо сделать. Бытовка у меня пока временно стоят рядом с участком, буду её перетаскивать, тогда уж и сделаю.
                                                  0

                                                  Не совсем правильно написал выше, средняя точка между L и N соединена с выводом PE на блоке питания (или с его корпусом, если он из металла, как в компе, например), а с общим проводом схемы она соединяется через еще один Y-конденсатор, так что 100В будет на корпусе, если вы, скажем короб щита с PE соедините, а на схему просто будут лишние помехи лезть.

                                                0
                                                Когда есть земля это конечно хорошо, тогда сразу понятно где линейный потенциал и что надо защищать. Но и без земли есть много цепей которые надо защитить независимо. Например, все входы относительно общего провода. Нам не интересна земля, потенциал которой кстати может отличаться от общего провода схемы и добавить проблем. Для импульсных помех, таких как близкий разряд молнии или статика сама сеть является «заземлением» По сравнению с наведённым напряжением при грозовом разряде — 250В сети это как пальчиковая батарейка. И разделяющий трансформатор, за счет емкостной связи обмоток является проводником для разрядного импульса. Поэтому, кстати, горячая часть и низковольтная соеденины спец.конденсатором — случись что разряд пойдет через него а не пробъёт изоляцию обмоток(хоть они и рассчитаны на воздействие 5000В, но ВЧ составляющая сильно снижает способность диэлектриков держать напряжение).
                                                Так же надо расставлять и защитные диоды. Только надо учитывать особенность супрессоров — динамическое сопротивление у них конечно, поэтому в момент «срабатывания» на них может образоваться напряжение около двойного номинала самого защитного диода, если ничего не предпритнять то это напряжение несмотря на защиту может оказаться смертельным для электроники. Надо иметь это в виду. Если ставить защитные диоды по входам, например на 6В то надо иметь в виду что через них может пройти импульсом в 2 раза больше — 12В + индуктивность подводящих проводов к супрессору с точек отвода под защиту добавит напряжения. Поэтому надо стараться так чтобы на защищаемую цепь дорожки от супрессора уходили подальше от входных, с которых может прилететь. Всё-таки, токи там могут быть под сотни ампер в импульсах по нескольку наносекунд — а значит лишний сантиметр тонкой дорожки к супрессору от точек защищаемой цепи может сильно добавить проблем, но благо тут паразитная ёмкость может играть на руку. Если есть возможность зашунтировать вход конденсатором — это отличная идея.
                                      0
                                      А расскажите пожалуйста поподробнее про реализацию внешнего вотчдога?
                                      Подключение, использование…

                                        0
                                        Там все элементарно. Схема включения — как в pdf'е. Пины 1,2,3 задают интервал таймера, у меня это 64 сек — все три пина на +5. Пин 10 PGOD тоже на +5, считаем что у нас питание всегда гуд, но если кому надо можно использовать и эту функцию. Пин 9 RESET подключаем напрямик к пину RESET Ардуины, и от этого же провода подтяжечный резистор на +5 100 кОм или около того (точный номинал не критичен). Пины 6 и 7 не используются и просто висят в воздухе. Хотя я когда дебажил, то завёл их на порты Ардуины и смотрел что там и как работает, но в конечном итоге они не используются. Ну и самый главный пин 8 WAKE — на него с выходного порта Ардуины нужно подавать перепад из 0 в 1 не реже чем один раз в интервал (64 сек). Дефайним номер пина PIN_WATCHDOG_DONE и конфигурируем его как выходной в сетапе, а затем в цикле loop и в других циклах, которые могут исполнятся долго (например, чтение файла с карты памяти) дергаем выходной порт:
                                        digitalWrite(PIN_WATCHDOG_DONE, 0);
                                        digitalWrite(PIN_WATCHDOG_DONE, 1);
                                        Вот, всё.
                                      0
                                      Реализация идеи очень качественная. Подскажите не было проблем с Ethernet shield'ом? У них замечена проблема с одним резистором. Не пришлось плату колхозить?
                                        0
                                        Нет, с таким я не сталкивался. Хотя и подключал всегда плату только к роутерам, к свичам не приходилось.
                                        0
                                        Я смотрю, вы не любитель компромиссов. Тогда рекомендую попробовать опторазвязку всех входов-выходов. Радикальное решение от помех, гроз и наводок. Для управления реле достаточно копеечных оптопар. Для линий датчиков можно использовать двунаправленные оптические изоляторы. Есть даже изоляторы линий питания датчиков. И не забывать про разрядники на длинной стороне
                                          0
                                          Да, тоже хороший вариант, спасибо. Но я не силён в схемах с опторазвязками, мне это надо изучать.
                                          0
                                          вот тут можно посмотреть трюк как продлить железный AVR watchdog с помощью софт хака. Перевести watchdog в Interrupt Mode, считать количество срабатываний, наример WDTO_8S * 4 срабатывания дает 32 секунды. Потом переводить watchdog в Reset Mode и перегружать AVR
                                            0
                                            Отличная работа, видя, как сделан электрический щит в бытовке чувствуется правильный подход даже в простых вещах. Пожалуй, единственное, что пожелать — наклейки на корпус — чтобы даже неподготовленный человек мог взглянуть и понять, хорошо ли все с системой.
                                            Спасибо за выкладку кода работы со счетчиком Нева! Сам себе такой поставил, и скоро будет еще один проект применения этого счетчика для повышения разума бетонной коробки, именуемой домом. Кстати, насчет правомерности подключения и все такое — все можно делать, ибо в этих счетчиках есть кнопка под крышкой — которая замыкается при пломбировке и не дает изменить (записать) новые параметры тарифных планов и времени в счетчик. В принципе, в него и не надо ничего писать… Эти счетчики весьма интересны, и дорово, что вы связались с производителем для получения команд. Кто будет покупать — внимательно смотрите на маркировку — в магазинах с RS485 счетчикик такие редки! А возврат счетчика законом не предусмотрен.
                                            Если Тайпит нас всех тут услышит и откроет API для полноценной работы, эх, мечты, мечты…
                                            В китае можно купить порты USB для крепления на панель — тогда можно аккуратнее сделать корпус сбоку — меньше будут выпирать эти разные порты — USB выпаять нафиг, питание подавать через клеммник, как «у взрослых». Для Ethernet тоже есть panel mount socket, но можно и без них.
                                              0
                                              Я выпиливал дырки под разъёмы исключительно с целью ремонтопригодности конструкции. Сдохла Ардуина — вынул вставил новую, без перепаек и подготовок.
                                              0
                                              Ну, этот корпус не самый большой, однако…
                                              imageD12MG
                                                0
                                                Ну, я кроме ЧипиДипа нигде и не смотрел больше. Спасибо за информацию.
                                                  0

                                                  Просто оставлю это здесь: term.lt/DIN3PRO/
                                                  Я не создатель а пользователь.
                                                  Жаль что страница только на литовском:(

                                                    0
                                                    Похожий конструктив, да. Однако наполнение лишь кажется сложным. По сути это только термодатчики и управление кранами, так ведь? Их много, да, и это, наверное, основная сложность и достоинство того контроллера (хотя я вот не планирую в доме устраивать отопление котлами принципиально). Но алгоритмы там, мне кажется, простые. Ничего не сказано про удалённое управление, похоже он программируется только кнопками. Хотя есть изернет и сказано что можно подключить модуль. Как там это реализовано?
                                                      0

                                                      На самом деле это универсальный комбайн. Может управлять от от обычного котла на дереве до солнечных батарей, дизельного/газового или гранильного котла. Управление как через кнопки так и через интернет. С левой стороны есть ссылки на реальные системы в ReadOnly режиме. Очень понравился алгоритм управления тёплым полом. Ставится два датчика температуры один на воздух а другой в пол. Также интересен алгоритм изменения установленой температуры комнаты в зависимость от температуры на улице

                                                    0
                                                    Скажите, меня одного коробит от упоминания слова «умный» везде и всюду, и особенно «умный дом»? Нисколько не умаляю заслуги автора, тем не менее в данном случае функция, по сути, одна: дистанционное (удалённое) управление нагревателем, остальное несущественно. В большинстве «умных домов» аналогичная ситуация. Хорошо написано на эту тему здесь: Глупый дом
                                                    Цитата, не удержался:
                                                    Основная цель глупого дома — приносить деньги продавцам, изо всех сил притворяясь умным.
                                                      0
                                                      Не одного. Меня тоже. И не только. Но что поделать с массовой глупостью?
                                                        0
                                                        Прочитал бегло статью про Глупый дом. К сожалению, уровень автора не далёк от эпитета, которым назван дом в заголовке его статьи. Его основная мысль такова — маркетологи впаривают вам централизованные системы управления, это всё не нужно, поэтому купите всё по отдельности. Бред делитанта. Или скрытый маркетинг продавца какого-то оборудования. Вместо маленькой функции в пусть и пульте управления, но центральном, купите вентсистему за безумные деньги и будете бегать к её пульту. Вместо удобного алгоритма автоматики управления освещением — купите недешёвые диммеры и бегайте крутите всё вручную. Ну и всё в таком духе. Люди! Имейте свои мозги, не читайте всякий бред. Точнее читайте, но не надо на него ссылаться.
                                                          0
                                                          Читал давно, и немного по-другому воспринял главный посыл статьи. Очень во многом автор прав, и просто указывает читателю на вполне очевидные вещи.
                                                          0
                                                          Надо определится что назвать «умным». ИМХО, даже немного автоматизированный дом уже можно называть умным — по сравнению с обычным выключателем — нажал греет, нажал — не греет.
                                                          Но нет, кому-то даже реализованный ИИ с голосовым управлением многими функциями не покажется умным.
                                                          Может быть, умным назвать такой дом который следит за наружной температурой и за действиями пользователя который включает/отключает обогрев и через некоторое время обучения способен предугадывать действия пользователя?
                                                          Критерий умности системы?
                                                            0
                                                            Критерии умности, кмк, просты. Их всего три.

                                                            1. Выполнение различных действий по заданному алгоритму без участия человека (автоматически, по датчикам или иным источникам данных).

                                                            2. Единая система. Это может быть и централизованный сервер, и распределённые узлы управления. Но у всего должна иметься возможность связи со всем. Настройка алгоритмов, изменение режимов, программирование — всё должно осуществляться с единой консоли управления.

                                                            3. Работа как минимум с двумя различными функциями. Например, освещение и отопление. Или вентиляция и охрана. То есть с такими функциями, под которые невозможно купить обычную готовую систему с автоматикой.
                                                              0
                                                              Это всё обычная автоматизация а не «умность». Нет здесь отличительного признака умности дома.
                                                                0
                                                                Хм, ну ок, раскройте секрет. В чём же разница между умностью и автоматизацией?

                                                                Принятие решения — вот главный критерий ума. Но в любом случае он сводится к автоматизации и чётким алгоритмам.
                                                                  0
                                                                  Умный дом появится не раньше распространения ИИ. Принятие решений — это автоматизация. Температура больше уставки это уже критерий принятия решения, но умный дом это больше чем даже самая сложная автоматизация по чётким алгоритмам. Это прежде всего система подстраивающаяся под пользоватеЛЕЙ и НЕ ТРЕБУЮЩАЯ дополнительного программирования. Без центрального ИИ всё что мы можем так это разрабатывать «элементы умного дома» — исполнительные устройства и устройства ввода, всевозможные сенсоры и т.д.
                                                                    0
                                                                    Эвона куда Вы махнули. Но нет. В этом контексте это уже просто вопрос терминологии. Сейчас Умным домом называют не это. Хотя фантастику я тоже люблю смотреть.
                                                          0
                                                          Зачем костыль из внешнего WDT, если у ардуины есть свой аппаратный? Работает отлично, некоторые старые меги требуют обновления bootloader, но это делается за 5 мин.
                                                            0
                                                            Я же написал, у меня не работал. За 5 минут делается когда знаешь как. Я копаться в этом не хотел, и мне нужен был интервал не меньше минуты.
                                                            0
                                                            Да, я не обратил внимание на этот нюанс. У меня было две меги, на одной работал, на другой нет. Лечится, действительно, легко. Кроме того, бутлоадер может слететь в результате экспериментов и так, так что навык его восстановления пригодится.
                                                              0

                                                              А как состояние реле отслеживаете?

                                                                0
                                                                Этот момент в статье я не описал, так как это уже мелкие детали.
                                                                При загрузке веб-страницы, обновлении данных или при нажатии кнопки реле яваскрипт запрашивает массив различных данных для отображения, скетч их отдаёт. В массиве в том числе и текущее состояни реле.
                                                                  0

                                                                  Тест фактически оно никак не проверяется? Получается, что это просто состояние(значение ) порта.
                                                                  И то что реле залипло никак не отслеживается.

                                                                    0
                                                                    А, Вы про это. Да, именно так. Фактическое состояние реле никак не проверяется. Однако косвенно я слежу за этим визуально по изменению потребляемого тока в момент включения или выключения. Каждый конвектор потребляет не менее 6А, так что это всегда хорошо заметно. Так что факт, что отопительный прибор отключен, определяется однозначно и гарантированно.

                                                                    А, да, факт включения или выключения освещения я определяю также визуально, через камеру наружного наблюдения :).
                                                                +1
                                                                Отличнейшая статья, особенно для старта! Какой подход! Какая подача материала! Какая проработка, казалось бы не такого уж сложного, и чисто бытового проекта! Всем бы авторам так!
                                                                Жаль что я новичок на сайте и пока не имею возможности голосования. Заплюсовал бы :-)

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

                                                                Не увидел (пропустил?), как решается вопрос охлаждения? Или ни один из компонентов не греется?

                                                                ПОЖЕЛАНИЯ К БУДУЩИМ СТАТЬЯМ:
                                                                1) «изернет-шилд», «яваскрипт» — такая «русская транслитерация» портит общее хорошее впечатление от статьи. Не ленитесь лишний раз переключаться на английскую раскладку клавиатуры.
                                                                2) В раздел «Топология сети» просится наглядная цветная схема.
                                                                3) Необходимо добавить расчет endurance карты памяти.
                                                                4) Когда выбираете что-либо (например, библиотеку отрисовки графики в браузере), рассказывайте, какие были ещё варианты, и чем обоснован Ваш окончательный выбор. Это сэкономит время других пользователей на затратный метод проб и ошибок.
                                                                5) И не забывайте пользоваться проверкой правописания, хотя бы простейшим spell checker'ом. В статье есть ошибки.

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

                                                                Опять-таки в комментариях уже посоветовали — хорошенько изучить тему защиты от EMI & EMC.
                                                                Также могу порекомендовать хорошую книгу по защите от ESD (включая защиту от грозовых разрядов):
                                                                Кечиев Л. Н., Пожидаев Е. Д. Защита электронных средств от воздействия статического электричества. М.: Издательский Дом «Технологии», 2005. 352 с.
                                                                Поддерживаю совет использовать супрессоры вместо варисторов. Вот отличная статья на эту тему со сравнениями (анг.).

                                                                А вот чего я Вам НЕ советую, так это связываться с оптикой. Оптроны, светодиодные лампы и даже солнечные панели имеют относительно небольшой срок службы. Лучше посмотрите в сторону решений типа iCoupler от Analog Devices или других технологий изоляции.

                                                                Ну и, конечно, сделайте полноценную печатную плату, отказавшись от шилдов (в т.ч. ненадежных китайских) и кучи проводов и проводничков. Заодно и место освободиться под «вечные» твердотельные реле.
                                                                Загородный дом — это колебания температуры, влажности и т.п. Долговременная надежность и «пожизненная» стабильность заслуживают того, чтобы все компоненты были на высоте. Из институтского курса конструирования РЭА хорошо известно, что надежность изделия определяется самым слабым звеном. То, что система благополучно пережила год непрерывной эксплуатации, включая морозы до -20 градусов, это конечно хорошо. Но Вы ведь хотите, чтобы такое повторялось из года в год 5...10… лет, не так ли?

                                                                Поддерживаю стремление перейти к платформе ARM. Вы явно переросли Ардуино.

                                                                Не жалейте 25+15=40 т.р., потраченных на щиток. Качество бесценно! Один всемирно известный человек сказал: «Иконки на экране должны выглядеть так, чтобы каждый захотел их облизать» :-)
                                                                Полностью поддерживаю отказ от китайских релюшечек в пользу продукции Legrand.

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

                                                                Обязательно проработайте вопрос с заземлением. Нагрузка у Вас приличная как-никак.

                                                                Колпачки светодиодов, на мой взгляд, спорное решение. С одной стороны — выглядят красиво. С другой стороны страдает usability, т.к. сужается диаграмма направленности (проще говоря, хуже видно состояние светодиодов сбоку, например при устранении неисправностей в шкафу).

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

                                                                Не унижайте свой проект, называя его «поделкой». У Вас законченная конструкция, выполненная на весьма достойном уровне, особенно для первой работы с Ардуино, и учитывая чистосердечное признание: «Нет, я не электрик. И не строитель».

                                                                Ещё раз спасибо за прекрасную статью и доведённый до логического завершения проект. У Вас явный талант. С такими инженерами я за будущее этого мира спокоен :-)
                                                                  0
                                                                  Спасибо за такой детальный комментарий, сейчас я немного остыну, а то возгордился уже чересчур, и постараюсь ответить по всем пунктам.

                                                                  Вопрос охлаждения не решался никак, там действительно ничего не греется.

                                                                  Про «изернет-шилд» и «яваскрипт» меня уже нахлабучивали. Ну, не знаю. Я лично люблю английскую терминологию писать именно транслитерацией, так легче читается, когда это художественный текст. А текст, согласитесь, больше именно художественный, нежели технический.

                                                                  Схему топологии хотел сделать, честно. Но, поленился. Посчитал, что это как раз будет мало кому интересно в контексте этой статьи, так как в ней (в топологии) нет чего-то особенного.

                                                                  Расчёт выносливости карты памяти? Это что за зверь и как его готовить?

                                                                  По поводу вариантов выбора согласен, надо было бы написать. Вообще, не думал вначале писать пост об этом девайсе, так как не знал во что это выльется. Поэтому не вёл записей, а сейчас я уже просто много чего не помню. Я и фоткать-то начал только под конец, когда в коробку решил собирать. А там много забавного было до этого ещё… Что касается графиков, выбор был между Гугл чартом и Амчартом, другие и не рассматривал. Гугловские сильно ограничены в настройках, не подошли.

                                                                  Ошибки в тексте да, наверняка. Проверку не делал, каюсь.

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

                                                                  Слаботочный блок в щитке расположен на уровне локтя примерно, по фоткам непонятно это, да. Щиток висит под потолком. Так что норм.

                                                                  На светодиодах не колпачки. Это отражатели (рефлекторы), вот такие примерно conrad.su/images/180998.jpg. Вероятно опять неудачное фото. Так что с юзабилити там всё в порядке, видно со всех сторон.

                                                                  Насчёт поделки. Спасибо за высокую оценку, но сам я знаю себе цену и стараюсь быть максимально объективным. Это именно поделка. Никакой это не проект. Я вообще удивляюсь, что она работает так долго и не глючит. В процессе отладки у меня сдохла одна Ардуина, заглючил один шилд, перестала работать карта памяти и я расковыривал гнездо для починки, переставали контачить соединения шилда с основной платой, были проблемы с запуском шилда (возился с супервизором). В общем, дешёвое китайское железо, взятое изначально только потому, что ничего серьёзного я не планировал, а действительно хотел только поиграться. Проба пера, так сказать. Макетная плата, подвешенные в воздухе реле и вотчдог, невозможность нормально вынуть карту памяти — это всё атрибуты поделки. Проекты так не делают. Когда (и если) я буду делать действительно Умный дом — конструктив, железо и общий подход к проектированию будет совершенно иным.
                                                                    0
                                                                    Про «изернет-шилд» и «яваскрипт» меня уже нахлабучивали. Ну, не знаю. Я лично люблю английскую терминологию писать именно транслитерацией, так легче читается, когда это художественный текст. А текст, согласитесь, больше именно художественный, нежели технический.
                                                                    Возможно, я слишком люблю английский язык, и поэтому подобные «недоанглицизмы» режут глаз.
                                                                    А вот с тем, что текст художественный — согласиться не могу. То, что текст написан от первого лица не делает его художественным. Напротив, текст изобилует техническими терминами, т.к. описывает инженерную разработку.
                                                                    Впрочем, Вы автор, Вам решать. Я лишь могу прокомментировать, как, на мой взгляд, это выглядит со стороны и как воспринимается.
                                                                    Единственное, что осталось добавить, слова «изернет-шилд» и «яваскрипт» я увидел впервые, хотя ежедневно читаю различные источники информации по часу и более.

                                                                    Схему топологии хотел сделать, честно. Но, поленился. Посчитал, что это как раз будет мало кому интересно в контексте этой статьи, так как в ней (в топологии) нет чего-то особенного.
                                                                    Смысл схемы в том, что одного взгляда на неё достаточно, чтобы понять принцип. Схема избавляет от необходимости читать (длинный) текст. Это примерно как разница между алгоритмом программы и её исходным кодом.

                                                                    Расчёт выносливости карты памяти? Это что за зверь и как его готовить?
                                                                    Речь о том, чтобы рассчитать, сколько продержится в Вашем проекте карта памяти, пока не исчерпает свой ресурс циклов записи (wearing). Информацию по этой теме Вы без труда найдете в интернете без чьей-либо помощи.
                                                                    Для увеличения ресурса можно подумать в сторону FRAM или подобных технологий.

                                                                    Ошибки в тексте да, наверняка. Проверку не делал, каюсь.
                                                                    Желательно не ограничиваться лишь spell checker'ом, т.к. он проверяет только правильность отдельных слов. Такие вещи как, например, падежи ему не под силу.
                                                                    Что делать? Отдохните от текста пару-тройку суток, затем внимательно, буква за буквой вчитывайтесь в него. Если почувствуете, что устали (надело, утомило и т.п.) сразу же останавливайтесь, делайте перерыв, а когда наберетесь сил — продолжайте вычитку.
                                                                    Эту технику я изобрёл сам, пользовался ей при публикации своего проекта (50 страниц формата А4, ссылка есть в профиле). Ушло непозволительно долгие 2 месяца (в свободное время). Зато какой результат! Попробуйте найти там ошибки ;-)
                                                                    Но и этого мало. Чтобы текст читался стилистически благозвучно, его необходимо отдать для вычитки стороннему читателю, а ещё лучше сторонним читателям. Если таковых не найдёте, присылайте мне :-)

                                                                    Подписи на корпусе были запланированы, но что-то так и не придумал как их красиво выполнить.
                                                                    Могу посоветовать рассмотреть вариант гравировки надписей с последующим заполнением образовавшихся пустот контрастной краской. Где-то на сайте Dremel видел примеры.

                                                                    В процессе отладки у меня сдохла одна Ардуина...
                                                                    Ха, хорошо отделались! Я во время отладки умудрился спалить родной Атмеловский ISP программатор, 5 МК ATmega, и уже не помню сколько MOSFET транзисторов и предохранителей. Зато опять же, какой результат! Проект почти 10 лет работает в круглосуточном режиме без единого сбоя.

                                                                    дешёвое китайское железо, взятое изначально только потому, что ничего серьёзного я не планировал
                                                                    А вот от этого заклинаю Вас отказаться. Ваш подход и китайские товары — понятия несовместимые.

                                                                    Проба пера, так сказать.
                                                                    Моя «поделка» тоже была пробой пера. Но после того как я увидел результат и отзывы, это предопределило всю мою дальнейшую жизнь.

                                                                    Проекты так не делают.
                                                                    Представляю, какого класса будет Ваш настоящий проект после столь явно заниженной самооценки. Если бы у нас адекватно оценивался труд инженера, Вы без труда заработали на, скажем, уютный домик в Куршевеле :-)

                                                                    От всей души желаю Вам успеха и удачи во всех будущих начинаниях. Ни в коем случае не бросайте электронику! Это Ваше. You are heaven-born engineer.
                                                                  0
                                                                  Поделка ЗАМЕЧАТЕЛЬНАЯ! Главное упорство и большой труд. После набора такого опыта можно и сторонние проекты брать…
                                                                    0
                                                                    то через 10 мин питание с роутера снимается на 10 мин, затем роутер вновь включается и ожидается установка PPTP-соединения в течение 5-ти минут. Если связи нет — следующая итерация.

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

                                                                    Как я уже говорил, IPv6 Yota не поддерживает

                                                                    Можно получить настоящий, доступный извне, ipv6 адрес через туннельного брокера he.net. Работает даже через nat. Только если внешний ip от мобильного оператора каждый раз меняется, нужно будет скриптом его каждый раз на сервере брокера обновлять.

                                                                    Ну и я бы подобного уровня проект делал бы на микрокомпьютере вроде raspberrypi или прочих orangepi. Там полноценный linux со всеми вытекающими из этого плюсами. А по цене вышло бы так же, как arduino с шилдами.
                                                                      0
                                                                      Огромный респект за статью и за работу, проделанную со счетчиком! Обязательно добавлю протокол обмена в свой проект geektimes.ru/post/295109 (так как Modbus интерфейс у меня уже реализован). То что, реально, не хватало.
                                                                      Что бы я сделал (вообщем-то и сделал) по-другому:
                                                                      • Вебсервер на борту Ардуино: По моему убеждению, если и поднимать такой вебсервер, то роль его должна быть исключительно воспомогательная (например, конфигурирование). А для взаимодействия IoT с внешним миром придуманы более подходящие стандарты и протоколы. В том числе, очень легковесные, типа MQTT. Контроллер выступает в роли клиента. А дальше, он может присоединяться хоть к локальному серверу (брокеру), хоть к находящемуся в городской квартире с белым IP, хоть через NAT к облаку типа CloudMQTT. К этому же брокеру присоединяется ПО визуализации/статистики/управления (например OpenHab/Graphana) или даже просто мобильное приложение (Недавно открыл для себя HomeRemote — замечательное мобильное приложение + ПО дизайнера интерфейса, которое нормально работает с MQTT)
                                                                        Использование такой архитектуры позволяет отказаться как от VPN так и от дополнительного элемента ненадежности в виде Flash карты. (Из за Flash я отказался и от Raspberry PI — все-таки срок жизни их Flash карты получается сильно ограниченным, как ни настраивай малинку)
                                                                        Кроме того, для простых инсталляций, это позволяет вообще избежать любого сервера — бесплатный аккаунт на CloudMQTT + мобильное приложение — решают задачи удаленного мониторинга и управления. Если надо добавить автоматизации — NodeRed прекрасно решает эту задачу.
                                                                      • Вопросы защиты входов. Совершенно согласен с предыдущими комментаторами — это необходимо. Мы реализовали оптронную развязку для 16 дискретных входов и защиту на TWS диодах для всех аналоговых входов, Modbus, DMX, 1-wire шин.
                                                                      • Размещение в одном корпусе слаботочки и высоковольтных цепей — ИМХО плохая практика. Тут и наводки и вероятность что-то замкнуть.
                                                                        По-моему, так правильнее - мухи и котлеты отдельно


                                                                      • Ну и, конечно, Watchdog. Использовать встроенный в Мегу очень просто! Bootloader обновляется просто из Arduino IDE через программатор, сделаный из какой-нибудь Arduino UNO. И далее, работает железно. Тем более, что все новые Mega уже не имеют этой проблемы, а Arduino DUE (у которой намного больше памяти и ARM на борту) — никогда этой проблемы и не имело.

                                                                      В остальном — ну очень похоже.

                                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                      Самое читаемое