Собираю я коммутационный шкаф для обсерватории. Собираю очень долго. Не потому что я, как обычно у меня заведено, жду пол года перед тем, как сесть за проблему, решаемую за час. О нет. Потому что, и правда, множество мелких проблем не дают мне полноценно ввести в эксплуатацию мини-компьютер и платы реле обсерватории.
Что такое шкаф коммутации моей обсерватории
Достаточно примитивная, с одной стороны, задача дать мне возможность удалённо включать и выключать нагрузки, обрастает, по мере выполнения, всё новыми и новыми подзадачами. Замечу, что "удалённо" в данном случае может оказаться как непосредственно в обсерватории, так и из дома в 30 метров от сарая, так и из любой точки мира, где есть инет. Причём не важно, мобила, планшет, ноут или smart-tv. Лишь бы был боль-мень современный браузер на webkit'е.
Итак, задача номер раз - это собственно коммутация. Через веб я должен иметь возможность включить и выключить питание астрографа, allsky камере, открыть и закрыть крышу (включить мотор лебёдки в одну и другую сторону), прервать и вновь восстановить USB соединение от компа обсерватории к астрографу и т.п.
Далее пошло-поехало. Раз есть комп, то надо нагрузить его, чтобы он не скучал. Вешаем на него 3G свисток, который, кроме как даёт резервный инет, к тому же работает как SMS-шлюз. Вешаем туда же термодатчики, АЦП длял контроля напруги на аккумуляторах, вешаем AllSky и ИК-термометр неба. Вешаем туда же энкодер монтировки. Вебки добавляем.
Веб-морда (frontend или "фронт") сейчас выглядит так:
А вот так сейчас выглядит сам шкаф коммутации:
Большая плата реле - основные 16 каналов. Два мелких реле по 4 канала - коммутация двух USB от компа к двум астрографам.
Подробно о компонентах
Мы живём в интересное и уникальное время (а когда было иначе? Какое время не интересно и не уникально?). Время, когда каждый с телефона / планшета / компьютера, на край в инет-кафе, если фин. возможности слабы, может "нагуглить" практически всё что угодно. Обладая небольшим опытом поиска можно найти ответ на практически любой вопрос, кроме разве что вопроса о смысле жизни. Но не о нём речь. Речь о технических вопросах.
Ещё один важный аспект современного инета, на мой взгляд, заключается в фразе "всё уже украдено до нас". О нет, я не про кражи и грабежи. Я про всё. Буквально всё уже было, всё уже обсуждено и куда не плюнь, найти уникальность можно, но надо постараться. Что ж, возможно, это минус, но в технической сфере, когда ты возишься с какой-то железкой и ни-фи-га не получается, сесть в поезд подобного чужого опыта оказывается ох как полезно! Все эти "гугл-ответы", "mail.ru ответы", многочисленные форумы, сайты вроде stackoverflow.com и прочие. Людей очень много и они задают вопросы от совершенно тупых, до неслабо замороченных. Думать, практически не нужно. Остаётся лишь гуглить и копипастить.
Но вернёмся к нашим баранам. К шкафу коммутации.
Orange Pi
Как я уже писал выше, его основной является мини-комп. Требования к нему достаточно простые. Это компактность, экономия электроэнергии, относительно большие возможности (не роутер), максимальная стандартность окружения. Я уже был знаком с Raspberry Pi ("малина") - он управляет моим "чуть умным домом". И в обсерваторию стоило бы купить старого проверенного друга, нежели заводить новых двух. Но цены... что дешевеет сейчас? К сожалению, не импорт. Не "малина". Так что я взял её клон - Orange Pi.
Хорошая по описанию плата. Много памяти и хороший проц. Декларируют совместимость с малиной. Цена приятная. Очень складно о ней пели, вот я и купил. Я даже где-то краем глаза прочёл, что к ней подходит дистрибутив от оригинальной малины, тем самым окончательно убедив себя, что это, и правда, полный клон Raspberry, что мне понадобится лишь скопировать рабочие решения, а не тратить время, заново разбираясь как зажечь чёртов светодиод на GPIO...
... по моей бурной преамбуле вы, скорее всего, уже догадались, что повозиться с апельсином пришлось. Во-первых, мне досталась бракованная плата. Началась переписка с китайцем. В процессе которой оказалось, что оранж вовсе не raspberry, в котором уже всё настроено. Что Orange нужно конфигурить и подстраивать под навесное оборудование. Что плата-то моя не бракованная, просто нужно подобрать нужные параметры, и тогда неработающий Ethernet включится и жизнь мини-компьютера наладится. Он сможет качааааать из того самого инета.
Те самые GPIO (general purpose input / output - порты ввода/вывода общего назначения), как оказалось, адресуются иначе, распиновка другая, нежели в малине.
А сейчас ещё выяснилось, что езернет заработал, но выключились два из трёх USB-порта. "Обычное дело", - ответил мне гугл. "Так бывает с оранжем сплошь и рядом", - добавил он. Нужно или использовать хаб, или разбираться дальше с настройками во время загрузки. ПЦ. Пока что я навесил хаб, найдя в этом небольшой плюс - портов стало 7 и у него отдельное питание. Питание, к слову сказать, беру от 12В шины через DC/DC на 5В. Так что два преобразователя - это плюс. Меньше нагрузка на каждый.
Плата реле
Чес-слово, я не понял прикола. Я про свою с виду отличную плату аж на 16 реле. Китаец поставил ULN2803, молодец. Он буферизировал оптопары (?), при этом инвертировав сигнал управления. И вроде как не проблема, реле коммутирующее с общим и NC / NO клемами. Можно подключить нагрузки так, что включенное реле будет отключать нагрузку. Тем самым ещё раз инвертировать инвертор и придав задуманную логику коммутации. Но косяк есть. Даже два косяка.
Первая проблема достаточно мелкая, однако актуальная в моей обсерватории. Каждая включенная релюха хавает около 40 мА, множим на 16, добавляем всякого навесного, выходит неслабо. В покое, с полностью выключенным оборудованием обсерватории (включенные реле) платка будет хавать почти 8 Вт. Если б у меня было сетевое электричество, я б и не думал о такой малой цифре. Но уже давно живу "без провода", на солнечных батареях и научился считать каждый ватт. 10 Вт ни за что - это недопустимая роскошь.
Вторая проблема, увы, серьёзней. Дело не в призрачной экономии энергии или совсем уж далёкой экономии ресурса реле. Дело в загрузке / перезагрузке малины. Во время запуска малина выключает GPIO. Это логично и правильно. Вот только реле при этом включатся. Все! Крыша хочет открыться, крыша хочет закрыться. Комп включиться, астрографы - охладить камеры до -100500 градусов и т.п. Мягко говоря, нехорошо. Недопустимо.
Я было заказал другие платы. Две по 8 уже проверенных в деле. Без подобных приколов с инвертором на входе. Да пока посылка шла, успел повесить ещё одну ULN2803, чем привёл коммутацию в норму. Точнее сказать, на 16-канальную плату понадобилось 2 микрухи по 8 каналов каждая. Благо они у меня лежали в шкафу.
Wifi
Так как имеющийся в обсерватории комп не имеет Ethernet порта, а покупать USB-Ethernet не хотелось, то я воткнул в апельсин, имеющийся в наличии, D-Link WiFi свисток и, по аналогии с тем, как настроено у меня в доме на малине, превратил Orange в WiFi точку доступа. Тут всё относительно просто... Ставишь себе hostapd, там минимум настроек типа названия сети и пароля. Ставишь адрес и ...
... и вот тут опять китаец меня удивил. Правда другой, D-Link. А я ему тааак доверял :)
[318651.190687] Registered led device: rt2800usb-phy1::radio [318651.190798] Registered led device: rt2800usb-phy1::assoc [318651.190910] Registered led device: rt2800usb-phy1::quality [318651.191044] usbcore: registered new interface driver rt2800usb [318712.160485] phy1 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
Попробовал погуглить, много рецептов на дебиан. Есть и на федору, да всё не ту. На "взрослую". Так что буду или свисток другой искать, или чёт ещё придумывать. Пока вопрос связи компа обсерватории с общей сетью подвис в воздухе.
Термодатчики и АЦП
Я несколько удивлён, что разработчики Raspberry Pi на разъём расширения не развели ноги АЦП проца. Это как-то нелепо. А, быть может в используемом ими процессоре нет АЦП? Тоже не верится. Устройство, нацеленное на автоматизацию, отбрасывает целый спектр аналоговых датчиков, допуская их использование только через i2c микруху АЦП или как-то иначе, но не напрямую.
Для дома я докупил к малине платку расширения с той самой микрухой АЦП. Но стоила она дорого, качество у неё так себе. Так что для этого проекта я купил самую мелкую и самую дешёвую атмегу с usb-uart. Ей оказался китайский клон Arduino Nano с CH340 (микруха usb-uart) на борту.
10 минут гугленья и у меня есть рабочий пример, сканирующий доступные DS18b20 датчики и через тот самый UART, раз в секунду транслирующий их ID и считанную с них температуру. В тот же последовательный порт сия ардуина транслирует то, зачем она была куплена - считанные с АЦП значения. Пока что с одного, но без проблем последовательно можно считывать аж с 8 портов.
Для контроля 12В аккума собрал делитель из двух имеющихся резисторов 4к7 и 1к. Произвёл один замер и оказалось, что 490 попугаев - это 13.3В. Предполагая достаточную для моей задачи линейность АЦП, в отображение ввёл корректирующий коэффициент 490 / 13.3 на 1В.
Программка на атмеге здесь: http://oleg.milantiev.com/soft/arduino/helper.ino
Пример данных от проги:
Locating devices... Found 1 devices. Parasite power is: OFF Device 0 Address: 28FFDE349115013C ds18b20[28FFDE349115013C]=18.3 ADC[0]=490
Эту часть я собрал достаточно быстро. Примеров полно, задача тривиальна и копипастна. А вот дальше...
... дальше эти данные надо подхватить на малине-апельсине и засунуть их в базу для дальнейшего использования. Простая задача "прочти строку с порта /dev/ttyUSB0, проанализируй регуляркой и разобрав закинь в mysql-таблицу" вылилась в кропотливое изучение и найденный баг используемого в этой плате USB-UART переходника.
Часа через два гугленья, проб и матюков я остановился на рабочем решении на ... перле. Чес-слово, язык этот вроде как при смерти, но почему-то только этот пример заработал и получил данные. Ещё minicom, программка такая, данные получала без ошибок. Все остальные поставляли какой-то мусор, как я не настраивал порт.
Программа на перле здесь: http://oleg.milantiev.com/soft/arduino/reader.pl
Можно было бы записывать данные ежесекундно. Точнее, так быстро, как они поступают с порта. Однако я сделал агрегацию до 1 минуты. Есть мысль, дабы уменьшить шум АЦП и термометра, усреднять значения за минуту и в базу записываь их. Быть может потом. Итак, данные от ардуины получены. В базу положены. Дальше веб сам разберётся, что с ними делать.
Perl-демона закрутил в бесконечный цикл чтения из порта. А самого демона запустил через supervisord. Это user-level аналог системного init.
Фрагмент /etc/supervisord.conf:
[program:arduino-reader] command=/usr/bin/perl /root/arduino/reader.pl ; the program (relative use process_name=reader.pl ; process_name expr (default %(program_name)s) numprocs=1 ; number of processes copies to start (def 1) directory=/tmp ; directory to cwd to before exec (def no cwd) autostart=true ; start at supervisord start (default: true) autorestart=true ; retstart at unexpected quit (default: true)
AllSky на кэноне
Не буду вдаваться в подробности, скажу лишь, что AllSky камеру я реализовал на б/у-шном кэноне с б/у-шным сверхширокоугольным объективом. Картинка класс! Не то, что с противной QHY5, как у меня было раньше. Управление с апельсина через прогу gphoto2. Она может настраивать многие параметры кэнона, может делать снимок в раве или jpg, скачивать, переименовывать и т.п. Вроде как может и видео писать. Буду разбираться и с этим.
Потом кадр конвертируется в жпег, если был в раве через dcraw. Далее через imagemagick можно развернуть его как надо, кропнуть до 1:1 пропорций (круг 360 градусов), добавить надписей всяких. В перспективе хочу ресолвить кадр, искать на нём звёзды и делать выводы относительно дальнейшей съёмки.
Про AllSky напишу отдельный текст, когда проект выйдет на уровень штатной эксплуатации.
ИК-термометр неба
Оказывается, есть прямая зависимость между наличием облаков на небе и температурой, точнее даже разницей температур неба и окружающего воздуха. Я купил микруху ИК-термометра на платке с i2c UART переходником. Чтобы не возиться с замороченной и не стандартной реализацией протокола i2c в этом этой микрухе ИК-термометра.
.... когда подключу, тогда опишу "тернии" .... Пока всё выглядит ровно... теоретически (много многоточий, потому как нет особо веры в непогрешимость китайской электроники).
Погодная станция
В планах. Мне нужно знать направление и силу ветра. Влажность и давление. Нужно выбрать датчики и подключить их к апельсину. Пока что в планах.
Энкодеры (дытчики положения) монтировок
USB-com переходники в составе Crius SE платки подключены к USB шине. Подробней о проекте на его странице. Здесь лишь отмечу, что данные о положении телескопов используются для принятия решения о возможности парковки крыши и для грубой привязки монтировки к небу. Эта часть проекта ещё не реализована. |