Потихоньку, поковырявшись в скудной документации и коде на крестах, написал простой терминальный монитор. Уже закинул код на гитхаб (а также, как обычно, битбакет, сосфорж и гитлаб).
Поток данных от датчика потрясает избыточностью.
Я убил пару часов, чтобы понять, как запоминать пороговые настройки, а потом обратил внимание на то, что они вообще не нужны: все данные есть в стандартном отчете, а уж посчитать, превышает ли некое значение порог, я могу и сам.
Фактически, можно было бы даже CRC не проверять и не слать ACK (для поллинга достаточно периодически засылать "\x01\n", даже не подтверждая целостности данных).
Данные идут довольно-таки редко — оно и понятно: бешеные вычисления были возложены не на компьютер, а на микроконтроллер. С другой стороны, если бы не так, пришлось бы все калибровки выдумывать самому, и процесс затянулся бы на годы!
Датчик ветра греется где-то до 60°C, а из-за того, что он довольно-таки массивный, инерционность у него очень высокая: чуть ли не в полминуты! Кратковременные порывы ветра он будет сильно занижать, и по сути выдавать усредненную за некоторый интервал времени скорость ветра.
Датчик освещенности (для определения день/ночь) смотрит вниз, т.е. при помещении этой штуки на битумную крышу он будет прилично врать. Там же, внизу, находится датчик измерения температуры окружающей среды. Понятно, что ночью измерения будут проводиться, но все равно какое-то время, пока крыша остынет, показания будут очень сильно врать!

Ковыряясь в коде и документации я потихоньку разобрался с принципом работы всех узлов (разве что есть сомнения по поводу датчика дождя, но, скорее всего, он работает по емкостному принципу). Теперь остается дописать серверную часть, чтобы регулярно получаемые данные отсылать клиенту, а потом и самую неудобную — клиентскую — часть, которая должна будет как-то обрабатывать эти данные (скажем, усреднять за минуту и считать статистику) и сохранять в БД (наверное, даже 1 раза в 15 минут хватит, не знаю пока). Возможно, логгер надо будет общий сделать: чтобы и фитсы с all-sky сохранять (и им в шапку писать данные по температурам и влажности). В любом случае, пройдут еще годы, прежде чем появится какая-то практическая польза от этих железяк (например, в процентах считать облачность по данным болтвудовского датчика; но сдается мне, что проще будет в all-sky звезды считать…).
Благодаря помощи [profile] alextutubalin, код утилиты для работы с all-sky теперь полностью свободен. Я добавил дебайеризацию посредством libraw. Вот такие jpeg'и теперь может генерировать сетевой клиент (помимо сохранения "сырых данных" в tiff, fits и raw dump):

Камеру можно будет водрузить на ее законное место, временная заглушка для информационных панелей уже будет работать, останется настроить сервер БД для хранения данных (чтобы иметь возможность оценить небо в любой момент времени из архивных данных).
Еще остается подключить болтвудовский датчик, но это не так критично, как нормальный all-sky.
В "дебайеризатор" я добавил мониторинг на inotify+poll на событие IN_CLOSE_WRITE (файл модифицирован и закрыт) — теперь файлы автоматом преобразуются в цветные картинки, как только обновятся.
К сожалению, лицензия "дебайеризатора" не позволяет выложить модифицированный исходный код. Вся надежда на libraw.

Как все это будет смонтировано. Решили воткнуть компьютерный БП (чтобы было и 12В, и 5В с хорошим током) и кубитрак в электрощиток подкупольного Цейсса. К кубитраку по USB присоединить преобразователь интерфейсов all-sky и болтвудовского датчика (я, кстати, не то слово как офонарел, узнав, что самопал обойдется максимум тысяч в 10 рублей, а цена этого без разтаможки и накладных — почти 2 килобакса!). В итоге получится эдакий сборщик информации, с которого можно будет брать последние данные любым компьютером саовской сети. Для хранения уже есть сервер, надо будет к нему прилепить веб-морду, чтобы можно было скачивать толпой архивные данные.
Итак, поковырявшись немного с libraw, я плюнул: разобраться в недрах такого бешеного количества кода просто нереально! Поэтому пока выбираю более медленную, но все-таки работающую "Self Similarity Driven Demosaicking". В принципе, цветопередача получается вполне нормальная, я вывел на монитор эту картинку и после обработки получил:
img

Саму утилиту тоже чуть подправил: добавил простой "калькулятор экспозиций" (надо его по звездному небу проверить, в комнате он давал сходимость на 3-5 итерациях).
Еще )
Итак, повторение-матючение закончилось, и я написал простой интерфейс управления фотоаппаратом посредством STM32F103: код на гитхабе. Заодно обновил материалы здесь.
Рабочее место

Для выполнения минимальных действий нужно не так-то и много команд. Но сначала — как подключить объектив.
Продолжение )
Вчера я доделал "астровидеогид-2" — сервис, захватывающий видеосигнал при помощи ffmpeg и выдающий кадры по запросу в сокет (или в ответ на обычные POST/GET-запросы). В дальнейшем туда же можно будет добавить модуль обработки отснятых кадров.
Доработка заключалась в том, что периодически ffmpeg отваливался на assert'е:
Assertion atomic_int_get_gcc(&s->buffers_queued) >= 1 failed at libavdevice/v4l2.c:516

Простой "сторож" (заменитель respawn в inittab) делает fork и, если потомок умирает, повторяет процедуру. На ЛОРе мне подсказали, как правильно запускать fork, чтобы дочерний процесс автоматически умирал при смерти родительского, и что ждать смерти дочернего можно простой функцией wait, а не велосипедом на kill...

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

Вот так просто выглядит интерфейс:
2015.07.30_14:56:54
Видеопоток через вебсокеты

вебсокеты дают около 7-8 кадров в секунду (jpeg, 640x480); потоковое вещание jpeg'ами — около 13-15 кадров в секунду (потолок я искусственно ограничиваю паузами по 50мс между окончанием загрузки очередного кадра и запросом последующего).
Я уже давно (наверное, как минимум года три назад) хотел использовать вебсокеты в веб-мордах управления железяками. На днях сделал некоторые наброски. Вот что получилось:
2014.10.15_19:07:33
Зачатки интерфейса

Текст без картинок )
Что-то этот простой тип микроконтроллеров прямо-таки пробудил во мне творчество! Очередной поделкой на них стала система управления шаговыми двигателями. Вчера я написал простую однозадачную управлялку пятью шаговиками (единовременно может двигаться только один ШД: у всех пяти двигателей общие DIR и STP[CLK] и индивидуальные EN). А сегодня развил идею и сделал многозадачную управлялку тремя шаговиками (можно еще повесить, но т.к. наружу торчит лишь три разных таймера, то пришлось бы мудрить, объединяя оба варианта). Все складываю в общий репозиторий stm8samples на сосфорже, т.к. для каждой подобной мелочевки заводить отдельную репу — перебор.
Ну, а реализована основная часть на двухдолларовой макетке с ибея на основе STM8S105K4T6C и долларового переходничка USB<->TTL оттуда же. Для затравки приведу еще картинку (набросал сегодня утром):
STM8-board
Схема макетки на STM8S105.

Подробности )

Ну и как же не похвастаться напоследок: в субботу выдался такой замечательный теплый день, что я весь день провозился с машиной. Смонтировал в багажник светодиодные ленты, чтобы лучше видно было в темноте, а еще воткнул две 12-вольтных розетки по бокам от полки (чтобы из салона можно было иметь к ним доступ) — теперь подзарядить всякую фигню сзади будет совершенно несложно.
Сегодня целый день провозился с реализацией простого интерфейса управления подвижкой 8MT175-150 при помощи подключаемого к компьютеру по USB драйвера SMSD-1.5. Одной из "особенностей" документации к драйверу была досадная "очепятка" в протоколе управления.
Теперь остается разобраться с узлом крепления диагонального зеркала (да и само зеркало заалюминировать), и можно будет собирать и юстировать наш БТА-комбайн для измерения поправок АСУ и оценки качества поверхности главного зеркала.
И не могу не похвастаться )

September 2017

S M T W T F S
     1 2
3456789
1011 12 13141516
17181920 212223
24252627282930

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 04:24 am
Powered by Dreamwidth Studios