Привет! Я люблю выращивать острый перчик халапеньо в домашних условиях, но есть небольшая проблема в моем домашнем «садоводстве»: я периодически забываю его поливать. Почему бы не делегировать напоминания о поливе своему умному дому, а в перспективе и автоматизировать полив — подумал я. И чтобы реализовать данную задумку, для начала нужно разработать и собрать датчик влажности почвы. А что из этого получилось — читайте далее.
❯ Начало
Для начала нужно разобраться с тем, чего мы хотим и как это делать. Затем подумаем об аппаратной части датчика, чтобы она была экономически оправдана и проста в реализации. И преимущественно я буду собирать датчик из тех компонентов, которые у меня есть в наличии.
После непродолжительного обдумывания вырисовывается следующий перечень основных компонентов для реализации нашего DIY-проекта:
Теперь поговорим о питании, в датчике я решил использовать батарейный вариант питания с двумя элементами типа АА. Данный вариант опробован в моей метеостанции и это отличный и долгоиграющий вариант питания. При периодичности отправки данных датчиком каждые два часа питания от двух элементов АА должно хватить на пару лет.
В качестве вычислительной платформы, как видно из таблицы, я буду использовать модуль ESP-02S с чипом ESP8285 — отличный вариант, который я использую в своих IoT-устройствах.
В качестве датчика влажности почвы я использую ёмкостный сенсор HW-390 на базе таймера TLC555. В отличие от более дешевого резистивного датчика, ёмкостной надежнее, так как не имеет прямого контакта измерительных электродов с почвой, соответственно, нет коррозии и других сопутствующих проблем — думаю, это очевидно.
Также стоит обратить внимание на используемый тип таймера при покупке датчика. В нашей схеме напряжение питания соответствует уровню в 3 вольта, поэтому необходимо убедиться, что в датчике используется таймер TLC555, у которого более широкий диапазон питания — от 2 до 15 В.
Использование АЦП ADS1115. У ESP-02S имеется один аналоговый вход (ADC/АЦП), который мы не сможем использовать для подключения аналогового выхода датчика, так как он задействован для внутренних механизмов замера питающего напряжения ядра, а оно нам нужно для мониторинга уровня заряда батареи питания. Поэтому простым и недорогим решением будет использование дополнительного I2C-модуля с АЦП ADS1115.
Замер микроклимата на поверхности почвы. Изначально я не планировал использование дополнительных датчиков в данном устройстве, кроме датчика влажности почвы, но позже подумал о масштабировании и решил, что было бы хорошо ещё и мониторить температуру и влажность на поверхности почвы, например, для использования нашего устройства в системах автоматизации теплиц. Тем более добавление нового датчика не сильно влияет на экономику проекта — ни в техническом, ни в экономическом плане.
❯ Железо и схемы
Давайте перейдём ближе к схеме. Сама принципиальная схема довольно проста, а модульность элементов позволит собрать её даже начинающим DIY-щикам. На скорую руку набросал принципиальную схему, которую вы можете наблюдать ниже:
Принципиальная схема датчика влажности почвы
На схеме вы можете видеть, кроме описанного в таблице набора компонентов, дополнительные элементы: кнопки (SW1 и SW2) и светодиод. Кнопка SW1 нужна для перехода в режим конфигурации, а светодиод — для индикации режима.
При использовании модуля ESP-02S есть небольшая проблема: модуль изначально не может работать в режиме DeepSleep, а он нам крайне необходим при батарейном питании для экономичной работы датчика. Однако есть решение, как это исправить, и ниже оно показано на фото:
Модуль ESP-02S с подпаянным выводом
Проблема в том, что на модуле ESP-02S не выведен GPIO16, а он как раз является выходом RTC-таймера, который должен выводить устройство из режима глубокого сна. Поэтому на фото вы видите, как я подпаял тонкую жилу медного провода к данному контакту. Далее он будет соединён с контактом RST. И для изоляции и фиксации данного соединения я использую термоклей.
И для большей энергоэффективности питание всех датчиков подаётся через пин GPIO4, который отключается при переходе в режим глубокого сна (Deep Sleep).
❯ Корпус устройства
Корпус датчика, как обычно, проектировался во FreeCAD. Постарался сделать максимально красиво и компактно. Ниже представлены рендеры моего творчества:
Корпус датчика. Тыловая часть
Корпус датчика. Фронтальная часть
Далее корпус был напечатан на моём 3D-принтере FlashForge 5M. Ниже представлен скриншот из слайсера для оценки расхода филамента:
Скриншот из слайсера
Модель корпуса печаталась из пластика PETG и с конфигурацией толщины слоя 0,24 мм. Ниже представлен результат печати:
Результат печати
На фото представлен один из вариантов печати. Для доработки корпуса мне пришлось выполнить шесть итераций печати.
❯ Сборка устройства
Сборка достаточно проста. Само собой, я за переиспользование электронных компонентов, поэтому и в этом проекте я использую б/у элементы, а именно микропереключатели (кнопки), которые я взял из старой сломанной компьютерной мыши, а зелёный светодиод — из сломанного сетевого коммутатора. Также хорошо подходят для проекта провода из старого LPT-кабеля.
Для начала давайте прикрутим модуль датчиков для мониторинга микроклимата на поверхности почвы. Для работы датчика в корпусе предусмотрена специальная решётка:
Модуль датчиков для мониторинга микроклимата
Установка модуля датчиков для мониторинга микроклимата
Как можно видеть на фото, так были установлены микропереключатели и светодиод. Их установка выполняется просто — они запрессованы в корпус небольшим усилием, но при этом держатся достаточно надёжно.
А до этого выполнялась примерка датчика влажности почвы, и это выглядело так:
Датчик влажности почвы
И чтобы освободить пространство внутри корпуса, в дальнейшем разъем с датчика был удален легким взмахом паяльника.
Соединяем всё согласно представленной выше принципиальной схеме:
Сборка схемы датчика влажности почвы
Закрываем весь этот электронный ужас бэкенд крышкой — и в результате получаем следующее:
Датчик в собранном виде
И, само собой, перед сборкой устройства нам необходимо загрузить прошивку — о ней и пойдёт речь дальше.
❯ Дела программные. Микро ПО и интеграция в Home Assistant
Микропрограмма, она же прошивка. Здесь всё стабильно: микропрограмма нашего датчика реализована на базе моей прошивки для IoT. Идеально подходит прошивка для метеостанции из прошлой статьи с небольшими изменениями — её и будем использовать. DIY-вариант написан в популярной среде разработки Arduino IDE, ссылка на исходный код прошивки будет указана в конце статьи.
Затрону лишь некоторые моменты использования датчика почвы в прошивке. Замер аналогового сигнала выполняется с помощью АЦП ADS1115, для работы с которым я использовал первую попавшуюся библиотеку ADS1115_WE. Сам датчик имеет обратную зависимость выходного сигнала от измеряемой влажности почвы: то есть если влажность высокая, то уровень выходного сигнала приближается к нулю, и наоборот. Ниже представлена функция замера и преобразования сигнала с датчика:
Где с помощью метода ADC.getResult_V() мы получаем данные с АЦП по каналу A0 в вольтах. Преобразование полученного сигнала выполняется с помощью аналога функции map():
Соответственно, функция soil_hum() возвращает уже преобразованное значение датчика в процентах. Чтобы инвертировать шкалу влажности почвы, мы просто в аргумент out_min передаём значение 100, а в out_max — 0. Значение 1.72 — это калибровочное значение, уровень сигнала сухого датчика. Оно и будет точкой отсчёта.
Для мониторинга уровня заряда батареи используется встроенный метод:
voltage = ESP.getVcc() * 0.001;
Чтобы это работало, нужно перевести режим работы встроенного АЦП на замер напряжения шины питания:
ADC_MODE(ADC_VCC);
В данном режиме нет необходимости подключать аналоговый вход к элементам питания.
Первоначальная прошивка выполняется стандартными средствами среды разработки Arduino IDE и RS232-программатора, а последующие обновления — через веб-интерфейс датчика в режиме конфигурации. Остальные стандартные пользовательские настройки устройства выполняются с помощью встроенного веб-интерфейса. Ниже представлены скриншоты нескольких ключевых страниц:
Страница входа
По умолчанию пароль — admin, далее вы можете изменить стандартный пароль на свой в соответствующем разделе меню.
Главная страница датчика влажности почвы
Для экономии заряда батареи работа устройства ограничена по времени 15 минутами, далее устройство перезагрузится и перейдёт в режим глубокого сна. На основной странице отображены данные датчиков в реальном времени и конфигурация таймера сна — он же отвечает за периодичность отправки данных, если эта функция включена в настройках.
Конфигурация передачи данных
На данной странице выполняются настройки передачи данных — она же отвечает за интеграцию с умным домом Home Assistant. Связь с умным домом выполняется по протоколу MQTT, а за автоматическую интеграцию устройства отвечает метод MQTT Discovery.
Интеграция в Home Assistant
Для экономии вашего времени, с вашего позволения, здесь, пожалуй, я не буду расписывать в подробностях, что и как, — это уже было много раз описано в прошлых статьях. Я лишь приведу несколько скриншотов из Home Assistant:
Список автоматически интегрированных устройств
Здесь вы можете наблюдать список автоматически интегрированных устройств, среди которых находится и наш датчик.
Датчик влажности почвы
А вот и наш датчик во всей красе, где мы видим его данные, которые можно использовать в сценариях автоматизации. Также здесь реализован переход в веб-интерфейс устройства, если по каким-то причинам вы не помните его адрес. Веб-интерфейс устройства доступен только в режиме конфигурации.
Тест работы на тестовом растении
Выше размещено фото теста на сухой почве, чтобы наглядно объяснить переход датчика в режим конфигурации.
Правая кнопка отвечает за функцию сброса, а левая — за режим конфигурации. Как я уже упоминал выше, светодиод отвечает за индикацию режима. Для перехода в режим конфигурации необходимо нажать левую кнопку и, не отпуская её, кратковременно нажать правую. Не отпуская левую кнопку, дождитесь мигания зелёного светодиода. Всё, режим конфигурации активирован. Если вам нужно просто отправить данные, кратковременно нажмите правую кнопку.
❯ Итоги
Давайте подведём итоги. За небольшую стоимость и удовольствие от разработки мы получили датчик, с помощью которого Home Assistant сообщит мне, что я плохой садовод и что пора бы полить перец. А для долгих поездок стоит подумать о системе автополива — но это уже совсем другая история. А портативность и автономность питания позволяет применить данный датчик для автоматизации теплиц, ведь в нём уже предусмотрены датчики для мониторинга микроклимата на поверхности почвы, что позволяет реализовать целый измерительный кластер.
Кстати, насчет автономности. Ниже представлены фото с замерами токов потребления в разных режимах работы:
Ток потребления в режиме передачи данных
Ток потребления в режиме сна
Если датчик будет использовать литиевые батареи при режиме отправки данных каждые два часа, то расчётное время работы на одном комплекте батарей составит 7–8 лет. Конечно, это фантастические сроки, но если устройство проработает на одном комплекте батарей 1–2 года, то это вполне удовлетворительные сроки.
На этой позитивной ноте можно и завершать статью. Спасибо, что дочитали.
И, как всегда, если у вас есть желание что-то добавить, обсудить, осудить, похвалить или поделиться опытом — добро пожаловать в комментарии! Всем успехов!
Когда-то давно я уже рассказывал про такой артефакт из конца восьмидесятых как домофон «Сезам» с тремя ручками. Несмотря на то, что сегодняшний девайс никак не связан с домофонами, он имеет к тому устройству самое прямое отношение.
Итак, сегодня мы рассмотрим и заставим работать неизвестную советскую мини-АТС. Узнаем, при чём тут вообще домофоны, выясним, кто производил эти устройства и посмотрим на всё это в действии. Как водится, будем много интересного.
❯ Суть такова
Если вы ещё не читали пост про «Сезам» и всё, что с ним связано, то рекомендую сделать это сейчас: так будет намного интереснее.
Так вот. Почти год назад я уже как-то рассказывал, что помимо той самой панели с тремя ручками были и другие, куда более редкие. Если с одноабонентской всё понятно, то вот остальные модификации вызывали немалый интерес. Электроника всех таких сезамов состояла из двух ящиков: аналогового, с начинкой как у того, что мы разобрали и запустили, и цифрового, с блоком коммутации. Всё это время я не оставлял попыток где-то найти такой ящик (а в идеале и комплект цифрового сезама) и запустить его.
И вот однажды на вторичке внезапно попалась некая «мини-АТС Сезам» в до боли знакомом ящике с платой с кучей реле внутри. Подумав, что это и есть какая-то разновидность коммутатора от сезама, я заказал этот лот.
По прибытии оказалось, что продавец всё-таки был прав, а ящик этот — действительно АТС, а не блок от домофона. Тем не менее, штука эта меня очень заинтересовала, так что я решил, что про неё всё-таки стоит рассказать.
❯ Немного про мини-АТС в СССР
Вообще, девайсов, которые мы сейчас называем мини-АТС (сравнительно небольших размеров и на не очень большое количество номеров, обычно на МК или хотя бы на микросхемах логики), в те годы было немного, а ведомственные телефонные станции обычно выглядели примерно так:
АТС на небольшое количество номеров, занимавших места поменьше, чем огромный шкаф, выпускалось очень мало.
Но всё же несколько моделей существовало. Например, вот такой девайс «Орион-1»:
Также существовали и разные схемы самодельных таких устройств, чтобы, например, установить телефоны в квартире или на даче.
❯ Обзор оборудования
Ну а пока что взглянем на наш ящик.
А вот и он. Ну прямо точь-в-точь ящик от домофона.
Сбоку сломанный тумблер питания.
Откинем крышку.
Внутри аппарат очень похож на тот самый ящик от сезама. В точности такое же исполнение с платой в разъёме РППГ-2-48, очень похожий корпус блока питания. Есть, конечно, пара отличий в расположении креплений, но они несущественны. Учитывая, что никакой другой аппаратуры в подобном корпусе я не видел, думаю, связь между этой штукой и ящиком от домофона самая что ни на есть прямая.
Блок питания.
Предупреждающий знак нанесён краской. Чуть ниже дата изготовления — 14 сентября 1989.
Тот самый разъём РППГ.
Сверху подходят двадцать пар проводов, идущих к абонентам. Снизу провода от БП. Какого-то выхода на городские линии в данной АТС не предусмотрено.
Помимо шнура питания из устройства торчит отрезок кабеля ТПП (к слову говоря, сезамы подключались тоже им).
На каждой паре насажен кембрик с номером абонента.
Заводская табличка тоже сделана краской. Товарищи, занимающиеся советской техникой, без понятия, что за логотип.
❯ Плата
Рассмотрим поподробнее начинку прибора.
В компоновке платы угадывается всё тот же разработчик, что и у позднего сезама. На плате имеется логотип как на крышке ящика и децимальный номер — ИГРК7.102.054.
Собрано всё на семи микросхемах.
Реле РЭС34, паспорт РС4.524.370-2301. Два десятка таких коммутируют абонентские линии.
Ещё несколько реле отвечают за импульсный набор и подачу сигнала вызова и зуммера.
На радиаторе два мощных транзистора.
Сзади пара перемычек и конденсатор КМ. Также виден тот самый логотип.
❯ Первый запуск
В отличие от ящика от домофона, АТС построена на микросхемах 155 серии. При всех их недостатках они были куда более надёжные, чем их КМОП-собратья 176 и 561. Поэтому можно было надеяться, что аппарат жив, максимум требует замены конденсаторов.
Подключаем парочку телефонов, подаём питание.
Попробуем позвонить. Снимаем трубку, слышим в ней гудок. Набираем номер пары, к которой подключен второй телефон. Щёлканье реле, КПВ в трубке, и второй телефон звонит. Отлично, всё работает! Даже не пришлось что-то перепаивать.
Ничего не показалось знакомым?
Именно такой же тон звучит при вызове на позднем домофоне «Сезам». Как нетрудно догадаться, схема генератора писка здесь абсолютно идентична.
❯ Так кто же был производителем сезама?
Как мы помним, некогда я выяснил, что производителем этих домофонов был, вероятно, питерский завод «Магнетон».
Именно его логотип обнаружился на задней стенке переговорного устройства.
Но АТС, к моему удивлению, имела совсем другой логотип. Его происхождение обнаружилось совершенно неожиданно: в чатике про электросвязь мне скинули ссылку на сайт, где упоминались и домофоны, и АТС:
Всё сходится: домофон «Сезам» и мини-АТС «Сезам» и вправду были произведены одной и той же фирмой. Сам же Кооператив Сезам базировался на том самом заводе «Магнетон». Так что теперь можно сказать, что загадка производителя этих устройств решена окончательно.
❯ Что же в итоге?
Итак, ящик от индикаторного сезама я так и не достал. Несмотря на это, я стал обладателем ещё одного очень редкого экспоната.
АТС мне понравилась не только причастностью к раритетной домофонии и необычным исполнением, но и максимально простой конструкцией: на плате всего семь корпусов логики 155 серии. Ни в одной из встреченных схем самодельных АТС настолько минималистичной схемотехники я не встречал.
Сама же компания «Теле-М» до сих пор жива и работает, о чём говорит рабочий сайт и всё ещё активное ООО. Ради интереса я написал им на указанную на сайте почту, где поинтересовался насчёт наличия какой-то информации о домофонах «Сезам» разных моделей и годов, однако, увы, никто мне так и не ответил.
Всё началось довольно тихо — без шоу-программ и футуристичных роботов на сцене. В 2017-м исследователи Google опубликовали статью с до смешного скромным названием: Attention is All You Need. Тогда мало кто понял, что именно в этот момент случилось новое «деление эпох»: теперь у ИИ было чёткое «до» и «после».
Сегодня почти весь генеративный ИИ — от ChatGPT до Midjourney, от Gemini до Claude — внутри себя основан на трансформерах. А фундамент всей этой революции оказался… ну прямо скажем, совсем не похожим на научную фантастику. Просто скалярное произведение двух векторов — действие из школьной линейной алгебры
Ни новая экзотическая архитектура памяти. Ни сверхсложная логика вывода. Даже не попытка повторить человеческий мозг.
Просто умножили числа друг на друга и сложили. И всё изменилось.
Но чтобы понять, почему такая простая вещь взорвала всю индустрию, надо вспомнить — во что нейросети упирались раньше.
❯ Большой тупик RNN и CNN: когда старое просто больше не работает
Ещё недавно обработка текста в машинах очень напоминала чтение по-старинке: слово за словом, слева направо, будто кто-то водил пальцем по книге. Главные герои здесь были RNN — рекуррентные нейронные сети.
На бумаге они выглядели почти идеально: каждое новое слово обновляло своего рода «внутреннюю память» — проглотил одно слово, подвинулся вперёд вместе с новым состоянием. Получалась цепочка памяти:
первое слово влияет на второе,
второе тащит за собой третье,
и так почти до конца предложения.
Ключевое слово тут — почти. Рекуррентные сети очень быстро забывали, о чём речь была много слов назад. Нарисуйте себе цепочку из ведёрок воды: доливаешь впереди — постепенно вытекает позади. Сеть буквально теряла начало длинных предложений (математики скажут: градиенты исчезали). LSTM и GRU пытались починить это место, но получился скорее костыль: подробно помнить они стали чуть дольше, но проблема с корнями осталась.
Параллельно в NLP подоспели сверточные сети (CNN), которые пришли из распознавания картинок. Они работали похитрее: вместо того чтобы читать текст по одной букве или слову за раз, CNN сканировали сразу несколько соседних словечек. Эдакие шаблоны вроде:
прилагательное + существительное;
короткие выражения вроде «наконец-то приехал».
Ничего себе! Но была загвоздка: их взгляд был слишком узким — CNN видели только маленькие фрагменты текста вокруг каждого слова. Чтобы понять связь между словами «я» в начале строки и «тебя» в конце абзаца приходилось городить сложную лестницу слоев… а это грузило систему так, что контекст всё равно рвался на части.
Вывод назревал сам собой: проблема не в том, что сеть слишком маленькая или глубокая; дело именно в том КАК она читает последовательности.
Нужен был другой подход.
❯ Новый подход: не эстафета, а мгновенный чат
И вот трансформеры сорвали покровы! Вместо того чтобы передавать информацию по цепочке (как записку через весь класс), каждому слову разрешили оглянуться и посмотреть сразу на все остальные слова предложения или даже документа. Эдакий общий раунд знакомств за секунду!
Это и есть тот самый Attention — внимание слегка переосмысленное для компьютеров.
Чтобы его описать проще всего представить аукцион:
Каждое слово одновременно:
задаёт вопрос («что мне нужно?»)
рассказывает про себя («кто я такой внутри этого текста?»)
предлагает своё содержание (приглашает других узнать о себе).
Три составляющих — Query (ищу!), Key (я такой-то!), Value (вот моя информация!).
Например:
Глагол может шепнуть всему тексту: «Я ищу свой объект действия!»
Или существительное заявит о себе: «Я стою тут во втором падеже»
Задача сводится к простому вопросу: какие слова реально должны друг для друга быть важными прямо здесь и сейчас?
Вот тут-то на сцену выходит та самая операция из школьной программы…
Центральная операция attention выглядит так:
На первый взгляд — ничего особенного.
❯ Как скалярное произведение стало проводником смысла
Скалярное произведение двух векторов показывает, как сильно они «смотрят» в одну сторону. Простыми словами для NLP:
Чем смысл у двух слов ближе — тем больше их числовые представления совпадают по направлению;
Чем дальше друг другу по смыслу — тем меньше пересечения;
Связанные токены мгновенно находят друг друга через высокое значение произведения.
Модель буквально спрашивает: совпадает ли мой запрос с твоим описанием? Если да — внимание возрастает лет до небес!
Удивительно простая идея работает так мощно именно потому что язык полон таких скрытых перекрёстных связей.
❯ Почему сразу не взять расстояние?
Могли бы брать L2-норму…
На первый взгляд ведь что логичнее: чем более похожи слова — тем ближе точки-векторы друг к другу в пространстве! Почему же attention выбрал скалярное произведение?
Во-первых — скорость! Посчитать расстояние между двумя точками требует квадратов да ещё корень извлечь… а видеокарты гораздо быстрее перемножают да складывают числа миллиардами раз в секунду (это как говорить c GPU на его родном языке).
Во-вторых — само поведение attention’а сильно от выбора функции близости: нам нужно не просто заметить связи («близко-далеко»), а часто прям-таки выделить единственный нужный кусок текста с почти безумной уверенностью! Скаляры могут при правильном обучении давать ОГРОМНЫЙ разброс значений — идеальное топливо для резкой фокусировки внимания.
Но любая магия имеет свою цену
❯ Когда математика начинает ломать обучение
Появилась неожиданная проблема. Почти физическая — если размерность ваших векторов растёт (а мы ж любим большие пространства признаков!), то дисперсия их произведений начинает разноситься всё сильнее («выстреливает», сказали бы инженеры). Плюсуйте сюда Softmax…
А Softmax — штука опасная: взял набор чисел , превратил их чисто экспонентой во вполне реальные вероятности (пусть вас не смущает простота операции). Стоит одному числу хоть чуть-чуть перекочевать наверх остальных — всё превращается почти в 1/0; модель вдруг убеждается окончательно сама в себе… и перестаёт учиться дальше вообще.
Лекарство? Делить результат attention’а на корень из размерности пространства признаков. Так можно держать модель от перегрева и бодро продолжать тренироваться без закипания мозговых батарей!
❯ Multi-head Attention или почему хорошего внимания много не бывает
Но в реальной жизни редко бывает однозначность. Одно предложение… десятки разных смысловых связей! Вот возьмите фразу:
«Кот поймал мышь, потому что он был голоден».
Слово «он» связано одновременно
с котом,
со смыслом голода,
с грамматическим строем предложения…
Одна схема внимания тут точно не потянет! Поэтому у трансформеров множество «голов». Каждая учится ловить свой тип связи:
одна отвечает за синтаксис,
другая ловит семантику,
третья замечает эмоции или дальние закономерности,
четвёртая может выискивать редкие зависимости далеко через текст…
А потом результат каждой головы аккуратно складывается обратно в единую картину мира!
❯ Проклятие квадратичной сложности
Есть правда обратная сторона всей этой крутизны… Внимание приходится сравнивать каждый токен с каждым другим токеном (всё равно что каждому гостю вечера поговорить хотя бы пару минут с каждым другим); двадцать друзей — 400 разговоров; тысяча токенов? Миллион сравнений!
GPU всё ещё мощны… но не бесконечно мощны! Именно отсюда нескончаемые поиски новых трюков типа FlashAttention или sparse-attention — чтобы умудриться смотреть далеко вперёд без катастрофического перегруза памяти…
❯ Итоги
Самое удивительное во всей истории attention вот что: индустрия годами пыталась придумывать суперинтеллектуальные схемы и хитрые приёмники памяти или управляемые ячейки данных… а победила простейшая операция из школьной алгебры (которая идеально ложится на цифровые нутра современных видеокарт).
Скалярное произведение стало практически мостом между математикой смысла языка И мебелью современных вычислений! Благодаря этому техника наконец начала видеть структуру текста сразу целиком — как будто взглянуть сверху одним махом вместо того чтобы идти вслепую шаг за шагом…
Вот такой вот переворот произошёл почти незаметно.
Итак, я рассказал про трансмиссию и про шасси. Сегодня речь пойдёт о кузове. Это, пожалуй, самая сложная часть проекта. Вот казалось бы, мотор и трансмиссия — куча сложных деталей, но в моём распоряжении для этого есть нужные станки и оснастка, кроме того, я знаю, как это делать. А вот для кузова нет ничего. Дело в том, что обычно для изготовления кузовных панелей используется различное довольно специфическое оборудование, которого ни у частного лица вроде меня, ни в университетских мастерских, конечно же, нет. И в этой статье я расскажу, какой выход я нашёл из этой ситуации. Вам интересно, что объединяет бумажных кошечек и суровый металл? Тогда приятного чтения.
Но сначала рассмотрим, как вообще производят элементы кузова. Есть, по сути, два стула пути - заводской и кустарный. Заводской, в принципе, относительно понятен — делаются штампы под каждую отдельную деталь, их устанавливают на прессовое оборудование, помещают между ними лист металла и — хлоп — панель готова.
Разумеется, что на самом деле это непростой процесс, в основном из-за изготовления штампов. Они очень дорогие в изготовлении и должны выдерживать сотни тысяч рабочих циклов. Хотя и тут есть исключения, например, для автомобилей ЗИС-110 штампы были изготовлены из сплава цинка с алюминием [1]. Это находится где-то на границе применимости для домашней мастерской. Сплавы типа ЦАМ-а довольно доступны и легкоплавки, при наличии 3D-принтера можно сделать форму и получить штампы методом литья. Теоретически, по крайней мере.
В другой интересной литературе нашлась информация об изготовлении штампов даже из дерева для мелкосерийного производства [2]. Это уже ближе к кустарным технологиям, но всё ещё не то, так как всё равно их надо как-то изготовить (вручную или на ЧПУ фрезере, например), а потом ещё и найти подходящий пресс. Стоит ли заморачиваться для штамповки одного экземпляра? Ответ очевиден.
Однако может быть что-то вроде штамповки всё же возможно в домашних условиях? В принципе да — я нашёл несколько роликов, где предлагалось изготавливать детали для радиоуправляемых моделей штамповкой в тисках или просто молотком с матрицей и пуансоном напечатанными на 3D-принтере. Ниже — одно из таких видео.
Я опробовал этот метод на днище коробки передач, что и описал в предыдущей статье, однако для больших деталей, вроде крыльев, этот метод на мой взгляд не очень подходит потому, что размеры штампов вырастут до неприличных, материал заготовки должен быть алюминий, а бесплатного алюминия таких размеров у меня не водилось, в отличие от бесплатной стали. Кроме того, алюминий скверно паяется и при необходимости соединить его с другими панелями я обзавёлся бы дополнительной проблемой.
Какие ещё можно применить технологии для придания формы тонколистовому металлу? Из глубины веков ведёт свою историю методика обработки железа молотком. Раньше этим путём делали доспехи (да и сейчас делают), а в наши дни могут и какой-нибудь элемент кузова забабахать. Правда, тут тоже есть варианты. Можно по хардкору, только молоток, наковальня, различные стойки, кузнечный горн и песчаная подушка, а можно со всякими новомодными штуками вроде английского колеса, шринкера со стретчером, вальцев и прочих девайсов. Результат будет одним и тем же, но требования к мастеру и трудозатраты несопоставимы.
Учитывая то, что опыта художественного выстукивания у меня нет и не было, как и времени для этого процесса, такой метод мне не подошёл. По большому счету, у меня и места для него подходящего не было, так как даже в цехе университета вряд ли стали бы терпеть постоянный длительный шум. Во всяком случае, вопросы бы возникли, а я старался делать свои работы без лишнего афиширования, хотя напрямую мне их никто не запрещал. Что же касается подходящего оборудования, то в нашей мастерской его, конечно же не было потому, что там таких работ не производят. То есть и этот путь для меня был закрыт.
Значит техническое задание вырисовывалось как изготовление изогнутых панелей кузова без какого-либо специального оборудования для обработки металла давлением (сложнее молотка), но при этом не требующее особых навыков. Я долго искал различные варианты и как-то набрёл на пост про бумажные низкополигональные модели. Вы, наверное, видели такие — это когда из бумаги делается выкройка полигонов с клапанами и потом всё это аккуратно склеивается вместе. И я понял — вот! Это моё! Достаточно только заменить бумагу на железо, а склейку на пайку и всё! Потом пройтись по этому сглаживающим алгоритмом (молотком с полукруглой головкой) для скругления полигонов и по лучшим традициям перекупов, обильно замазать автошпаклевкой. После обработки поверхности наждачкой можно будет сказать, что муха не сидела и дедушка только за хлебом ездил.
Пример такой модели. Все ведь любят котиков? Источник
Ок, нужна только 3D-модель кузова. Я поискал в сети и на тот момент ничего в открытом доступе не нашёл. Это меня сильно огорчило. Опять же, платить за не вполне понятный результат (чёрт его знает, а сработает ли моя технология) мне не хотелось, поэтому я решил сделать модель самому. Значит надо было решать, как делать. Тут путей великое множество. Например, можно было использовать чертёжный CAD такой как тот же КОМПАС или SOLIDWORKS, но, признаться честно я не знаю его настолько хорошо, чтобы суметь правильно отрисовать там машину. По той же причине отпал и Blender. Казалось бы, я опять зашёл в тупик, но оставался ещё один вполне приемлемый вариант — сделать натурную модель кузова и отсканировать её.
Опыт трёхмерного сканирования у меня имелся, притом двумя разными способами. Во-первых, фотограмметрия. Для этого нужно сделать большое количество фотографий объекта с разных ракурсов и затем загрузить их в специальный софт, который уже и выдаст трёхмерную модель из облака точек. Я, помнится, использовал связку Meshroom и Meshlab, но это было давно и неправда. А ещё раньше был бесплатный Autodesk ReCap, который делал всё в облаке, но потом бесплатным он быть перестал.
Пример не самого удачного результата скана методом фотограмметрии. Фигурка, правда, мелковата. Я пытался было приводить скан в порядок, но забросил. С большими объектами выходит лучше, но не без проблем. На мой взгляд, метод довольно капризный, требует большого количества фотографий и «мануальной терапии»
Во-вторых, сканировать можно и при помощи Kinect от Xbox. Я игрался для этого с программой Skanect. Сейчас этот софт вроде бы уже угас (хотя существуют хорошие бесплатные альтернативы, например, RTAB-Map), но тогда был вполне рабочий.
Первый способ неудобен тем, что он очень чувствителен к освещению. Желательно, чтобы оно было равномерным со всех сторон. Также крайне желательно, чтобы камера снимала с одними и теми же настройками. Наилучшие результаты у меня получались на улице в облачный день. Дома традиционно получалось плохо. В Бильбао с облачной погодой всё нормально, но чтобы скан нормально получился, кузов надо бы подвесить, чтобы и низ нормально обработать, что создаёт проблемы с местом (где я это буду делать?) и ветром (пришлось бы ждать штиля). Ждать у моря погоды не хотелось, поэтому я решил, что Skanect мне подходит лучше. Вот только беда, что бесплатная версия ограничена 5000 полигонов, что мало. Но мне повезло, и один мой хороший испанский знакомый подогнал мне лицензию, за что ему большое спасибо!
Но это я несколько забегаю вперёд. Сначала мне нужно было сделать то, что я, собственно, и буду сканировать, то есть модель кузова. Как её делать? В случае реальных машин любят использовать глину, но очень сомневаюсь, что это хороший вариант для дома — результат выйдет неподъёмный. Поэтому я решил делать из картона с элементами папье-маше.
Модель кузова автомобиля из глины. Фото моё, заезжая экспозиция, посвящённая автомобилям, в музее Гуггенхайма, Бильбао
Смысл весьма прост — есть чертёж с несколькими видами машины, по ним делается выкройка, распечатывается и вырезается из картона нужный элемент. Из этих кусков картона склеивается силовой каркас кузова. Процесс очень напоминает сборку модели корабля. Сначала клеим киль и шпангоуты, потом набираем обшивку. Так и тут. Только в качестве шпангоутов идёт гофрированный картон от старых коробок, а на обшивку не доски, а рулонный гофрокартон, который обычно покупают для защиты поверхностей. Чтобы убрать щели сверху можно наклеить бумагу. Склейка силовых элементов и обшивки производилась клеевым пистолетом на термосопли. Бумага клеилась на ПВА.
Первым делом, я вырезал лист днища, его я закрепил к раме кабельными стяжками
Далее я приклеил боковины капота. Плоская часть сверху — для жёсткости
За кадром осталось, что я добавил «шпангоуты» и «киль» верхней части капота. В качестве «киля» — вон тот рог — круглая деревянная рейка. Затем всё было обтянуто картоном и обрезано по месту
Добавил боковины кузова. Тут отчётливо видно, что «Эмка» — единорог
Тут, наверное, стоит заметить, что в ходе процесса сборки этой модели кузова я постепенно начал представлять, как всё будет на самом деле, то есть, примерно оценивать сложность работ. Ведь что я делал? Я брал довольно плоские куски картона, гнул и клеил их друг к другу. Для больших панелей кузова будет справедлива та же самая операция и с металлом. Только вместо склейки — пайка. Исходя из уже увиденного, можно понять, что боковые панели кузова, а также капот (как боковины, так и крышка) не будут особенно сложны в изготовлении. Вероятно, понадобятся только шаблоны для правильного изгиба и в некоторых местах, наверное, мини-шпангоуты а-ля рёбра жёсткости (например на капоте).
На крышу наклеен плоский лист-основа, на котором закреплен опять же «корабельный» набор для образования правильной формы обшивки. Кроме этого на боковины наклеен дополнительный слой картона снизу, там у реальной машины профиль имеет небольшую ступеньку, и приклеены основы для задних крыльев
Оклейка крыши
Изготовление заднего крыла. Колесо закрыто временным элементом, придающим жесткость на период склейки
А вот и обещанные элементы папье-маше. Ими я сглаживал неровности и закрывал щели
Наиболее сложными в изготовлении поверхностями окажутся те, которые имеют наибольший радиус изгиба. Меня прежде всего заботили крылья, хотя скругления крыши тоже весьма круты.
Основа переднего крыла. Виден шаблон его профиля
Формирование поверхности крыльев. Видно, что здесь колёса тоже закрыты временным силовым элементом
Готовый кузов, оклеенный в нужных местах папье-маше
Кузов, вид сзади. Тут должно быть запасное колесо, но для скана в нём нет необходимости
Преимуществом такого подхода явилось то, что можно было сразу проверить, как всё работает, например, не задевают ли колёса за крылья при большом ходе подвески или повороте. Также можно было просто вносить некоторые изменения в общий вид машины, просто по месту.
Я уверен, что всё это можно было сделать и в CAD, и может быть я бы даже потратил меньше времени на изучение нужных функций и само черчение вместе взятое, но на самом деле мне было в кайф делать то, что я делал, ведь это можно потрогать, окинуть это взглядом инженера и сказать «какой же я молодец!». А 3D-модель — это что-то эфемерное и таких эмоций не доставляет.
Когда я наконец завершил работу над кузовом, настала пора его сканировать. Однако делать это с моей натурной моделью как есть было бы плохой идеей, ведь окна создадут пустоты внутри скана и огромную кучу мусора и разнообразных артефактов. Поэтому окна я заклеил изнутри таким образом, что создавалось впечатление утопленного вглубь стекла. Заклеивал через отверстие внизу кузова, которое было ранее вырезано под двигатель. Затем и это отверстие было закрыто.
После этого я подвесил кузов к люстре в гостиной и стал вальсировать вокруг него с Kinect. В принципе, все было просто, нужно было без резких движений заснять объект со всех сторон. Как это было — видно в ролике ниже.
Skanect экспортирует в нескольких различных форматах, но подходит любая сетка. Я использовал STL. Его я позже загнал в Meshmixer, где убрал ненужное и залатал дыры. Там же я подготовил модель переднего крыла, которое и послужило полем для первых экспериментов.
Исходный скан
Модель с залатанными дырами
Вырезанное переднее крыло с уменьшенным количеством полигонов
Я считаю, что скан получился очень неплохим и последующее редактирование привели его в хорошую форму. То есть, хотя бы для этого этапа выбранная технология подошла. Теперь предстояло получить выкройку крыла. Возможно, самый известный софт для этого — Pepakura. Однако, она не бесплатная и тут никто со мной лицензией не поделился. Честно говоря, я уже запамятовал, чем конкретно я пользовался. Возможно, это был онлайн-сервис PaperMaker (картинка ниже именно оттуда), может что-то другое. В любом случае есть несколько бесплатных альтернатив, например аддон к Блендеру.
Выкройки переднего крыла, сделанные в PaperMaker (скрин сделан специально для статьи в целях иллюстрации, скринов оригинального процесса не сохранилось)
Получив выкройку, я первым делом склеил модель из бумаги, чтобы убедиться в правильности размера и вообще в выполнимости операции. Первый образец получился меньше и я пересчитал масштаб и склеил вторую версию крыла. Убедившись, что на этот раз всё верно, я приступил к изготовлению элементов выкройки — уже из железа толщиной 0.5 мм. Такое железо имело ряд преимуществ: первое — оно у меня было, второе — оно довольно легко поддавалось изгибу и резанию. И это было важно, так как для этого я использовал ножницы по металлу — хорошая замена эспандеру. После этого я приступил к пайке полученных частей. Выдержку из этого процесса можно наблюдать на следующем видео. Оно довольно скучное (можно смело проматывать), но зато даёт представление об объёме работы, необходимом для изготовления одного крыла. Сколько точно времени у меня ушло на одно крыло не скажу, но точно это измерялось часами.
Для пайки я использовал китайский аналог припоя ПОС60 с температурой плавления около 185 градусов Цельсия. Местами я использовал другой припой, его состава я точно не знаю, но что-то близкое к чистому олову. Низкая температура плавления была важна, так как паял я хоть и не медь, но материал будущего крыла очень неплохо отводил тепло.
Собранное крыло выглядело коряво, как, впрочем и должно. Теперь самый интересный момент — сглаживание. Именно он должен был решить, удастся ли моя затея или нет. Я раздобыл самый большой молоток с наименьшим радиусом скругления головки, который можно было найти в наших универовских мастерских. Также я достал обрезок какого-то офигенно большого стального кругляка в качестве наковальни и ещё нашел пару слоёв трёхмиллиметровой резины, необходимой для имитации песчаной подушки, то есть для вытягивания моих полигонов. После чего оставалось лишь сделать дело.
Так выглядит спаянное крыло до обработки молотком
Крыло, правда, противоположное, после обработки молотком и шлифовки
Слева видно разошедшийся спай, но это не беда — как разошёлся, так и припаяем обратно
Получилось в принципе, более-менее удобоваримо. Конечно, далеко не все паяные соединения выстояли, кое-где оторвало соединительные клапаны (место их изгиба иногда было ослаблено), кое-где оторвалась пайка (где была плохой изначально), но это всё были мелочи и паяльник всё исправил. Я остался доволен результатом, тем более, что он всё равно был промежуточным. Мне сложно сказать, какие минимальные радиусы изгиба можно получить таким методом, думаю, что это будет ограничено больше тем насколько сложно будет паяль мелкие полигоны. В моём случае минимальный радиус изгиба (там, где это действительно дуга) — около 25 мм, что на мой взгляд, достаточно для большинства мест в кузове моей машины, благо, на самом деле мест, где нужен действительно крутой изгиб не так много. В основном, как это и показала моя картонная модель, зачастую достаточно цельных листов. Кроме всего перечисленного мне приходили в голову мысли, что иногда треугольные полигоны — не лучший вариант для изготовления выкройки, однако мне неизвестно как можно было сделать это лучше, а написать специальный софт для построения таких выкроек я не способен.
Для дальнейшей обработки крыла нужно было работать с капотом и днищем. Успел я сделать только днище, потом сроки моего пребывания в университете подошли к концу, так как к тому моменту я уже успешно защитился.
Машина с установленным листом днища. Его пришлось делать из двух частей, так как на цельный не было достаточно длинной заготовки
Кроме мероприятий с крыльями и листом днища, я успел сделать ещё пару любопытных, на мой взгляд элементов, которые с некоторой натяжкой можно отнести к кузову. Это корпуса фар и чехол для запасного колеса (я сделал пять колёс, если вы помните мою предыдущую статью). На этих детальках я опробовал технологию ротационной вытяжки, к которой давно хотел приложить руку, но оборудование не позволяло. Технология очень простая. Есть оправка круглой формы, которая повторяет деталь, которую мы хотим получить. Она зажимается в токарный станок и к ней вращающимся центром или чем-то другим плотно прижимается тонкая листовая заготовка. Всё это благополучно раскручивается и далее на вращающуюся заготовку давят, в принципе, чем угодно, это может быть ролик, или просто металлический штырь с гладким концом (лучше полированным). Материал заготовки начинает вытягиваться и «облегает» оправку. В результате из листа получается деталь вращения с тонкими стенками. Если бы сова была плоской, то ротационная вытяжка была бы идеальным способом натянуть её на глобус.
Оправки я делал из ДСП и дерева. На самом деле, не очень важно из чего они, если это не массовое производство — в моём случае износ минимальный, а изготовление не представляет никаких сложностей.
Оправка для чехла колеса
А вот материал заготовки важен. Лучше всего подойдёт что-то пластичное, вроде меди или чистого алюминия. Однако для чехла подходящей цветной заготовки не было и я использовал железо. Его бы стоило отжечь перед обработкой для размягчения, но у меня нечем было такую большую заготовку отжигать, поэтому делал как есть.
И получилось вот так
После вышло немного разгладить. Слева вторая половинка, если правильно помню, крышка корпуса ПК
Обрезка лишнего. Болгарка зажата в тисках и я вручную кручу заготовку. Плита не поверочная, не беспокойтесь
Итоговый чехол. Пришлось нарастить небольшой бортик на каждой половинке, но результат оказался неплох
Опять я сделал какую-то шляпу. На самом деле это — заготовка для корпуса фары
Ещё несколько заготовок и оправка, которую я использовал для их изготовления. Штыри в оправке упирались в кулачки токарного патрона и помогали передавать крутящий момент, так как операция очень силовая
На этом этапе машина повисла в воздухе более чем на два года, и я начал возвращаться к ней только сейчас, да и то работы проходят очень небыстро, ведь количество свободного времени существенно сократилось. Тем не менее, по поводу опробованных технологий я могу уверенно заявить, что с их помощью вполне можно изготовить весь кузов моей модели, что и будет сделано через некоторое время. Правда, по прошествии четырёх лет с начала этого проекта мне пришлось пересмотреть его цель (да, она у проекта изначально была, я не просто так хотел себе ретромашину), а вместе с ней и несколько изменить общий вид автомобиля под новые требования. Однако, об этом я расскажу в следующий раз, чтобы не утомлять вас чрезмерным количеством букв.
Список литературы:
[1] Л.М. Шугуров, Автомобили России и СССР Количество страниц: 400; ISBN. 5-87483-004-9
Что может пойти не так, если в надежном криптографическом алгоритме цифровой подписи вместо случайного числа использовать константу? Для компании Sony эта невнимательность обернулась полной компрометацией мастер-ключа PlayStation 3. История безопасности консолей полна таких поучительных примеров: от переполнения буфера из-за слишком длинной клички лошади в игре Zelda – до глитч-атак на цепи питания. Давайте разберем, какие инженерные уроки можно извлечь из тридцатилетней гонки вооружений между хакерами и платформодержателями.
Безопасность видеоигр всегда была игрой на опережение. По мере эволюции консоли превращались в полноценные компьютеры с многоуровневыми барьерами защиты, но на каждый хитроумный замок неизменно находился тот, кто твердо вознамерился его вскрыть.
Сам я с детства обожаю видеоигры, но никогда не задумывался о подобных вещах, пока не стал инженером и не погрузился в сферу систем контроля безопасности. По своей сути консоли – это встраиваемые системы. История того, как их защиту создавали, ломали и собирали заново, полна ценных уроков, которые применимы далеко за пределами наших гостиных.
В этой статье мы проследим эволюцию безопасности игровых консолей: от эпохи зарождения индустрии, когда защиты практически не существовало как класса, через десятилетия непрерывной гонки вооружений до современных систем, где применяются те же передовые методы, что и в высокозащищенных коммерческих устройствах. И конечно, мы увидим, как вопреки всем барьерам исследователи и энтузиасты раз за разом находили лазейки в коде и железе.
В основном я сосредоточусь на стационарных домашних приставках, сделав исключение лишь для гибридной Nintendo Switch, которая стоит на стыке двух миров. Чтобы не растягивать статью до размеров энциклопедии, я не стану описывать абсолютно все известные уязвимости и эксплойты. Вместо этого мы разберем самые знаковые и показательные примеры. По той же причине мы опустим глубокие технические тонкости некоторых атак, но для тех, кто захочет докопаться до самой сути, я оставил ссылки на детальные разборы.
Мне хочется показать, как развивались подходы к безопасности в игровой индустрии и какие выводы мы можем из этого сделать. Ведь в конечном счете неважно, проектируете ли вы игровую консоль, медицинский прибор или промышленный контроллер, – модели угроз могут различаться, но базовые инженерные вызовы остаются на удивление схожими.
Итак, поехали!
❯ Дикий Запад: эпоха незапертых дверей
Первые домашние системы, такие как Atari 2600 (1977 год), вообще не имели защиты. В самом железе не было никаких механизмов проверки подлинности ПО на картридже. Любой чип ПЗУ, подключенный к нужному разъему, запускался без лишних вопросов. Единственный барьер лежал в чисто практической и экономической плоскости: для производства картриджей требовалось промышленное оборудование.
Atari 2600 – первая по-настоящему массовая домашняя консоль, полностью лишенная каких-либо защитных механизмов
В эпоху Atari 2600 в индустрии царили порядки Дикого Запада. Никакой цифровой подписи кода, никаких криптографических проверок и даже намека на региональные ограничения (хотя различия между телевизионными стандартами NTSC, PAL и SECAM все же сказывались на совместимости).
Сторонние издатели вроде знаменитой Activision создавались бывшими инженерами самой Atari, которые просто уходили из компании, чтобы делать собственные игры, – технически им никто не мог помешать. Atari оставалось уповать лишь на судебные иски: никаких аппаратных или программных мер контроля у нее просто не было.
Все изменилось в 1985 году с выходом Nintendo Entertainment System (NES). Японская компания предприняла первую серьезную попытку ограничить запуск стороннего ПО на аппаратном уровне. Как это было устроено и долго ли продержалась новая броня?
❯ Чипы аппаратной блокировки и легендарная система 10NES
Памятуя о разрушительном кризисе индустрии видеоигр 1983 года, который во многом случился из-за засилья низкосортного игрового хлама, Nintendo снабдила консоль NES специальной микросхемой защиты – 10NES (позже получившей название CIC, Checking Integrated Circuit). Такие чипы устанавливались и в консоль, и во все лицензионные картриджи.
Микросхемы 10NES в консоли NES и на плате картриджа
Работа чипа строилась по принципу взаимной аутентификации «запрос – ответ»: микросхема внутри приставки связывалась с аналогичным чипом в картридже. Если авторизация не происходила, консоль банально перезагружалась каждую секунду, из-за чего на телевизоре тоскливо мигал пустой экран. Эта болезнь NES знакома многим.
Принципиальная схема подключения микросхем 10NES
Самое забавное, что оба чипа были абсолютно одинаковыми 4-битными микроконтроллерами Sharp SM590 с идентичной прошивкой. Их роли зависели лишь от разводки контакта CONF (см. схему): чип в консоли работал в режиме «ведущего» (CONF=1), а в картридже – в режиме «ведомого» (CONF=0).
При включении питания чипы синхронизировались по общей тактовой частоте и шине данных, начиная обмениваться псевдослучайными битовыми последовательностями, которые генерировал внутренний сдвиговый регистр. «Мастер» в консоли задавал такты и непрерывно сравнивал ответные биты картриджа со своей собственной расчетной последовательностью. Пока передача шла синхронно – что гарантировало наличие оригинального чипа 10NES с той же программой, – игра запускалась успешно. Но стоило значениям разойтись хотя бы на бит, «мастер» тут же ронял уровень сигнала на линии сброса, уводя консоль в циклическую перезагрузку.
Обратите внимание: никаких секретных криптографических ключей здесь не было и в помине. Оба чипа работали по одному алгоритму, и вся защита строилась исключительно на том, что алгоритм держался в тайне, а считать прошивку напрямую с кремниевого кристалла было невероятно трудно. Это «безопасность через сокрытие» в ее чистейшем, дистиллированном виде!
Тем не менее это был первый массовый пример аппаратной верификации ПО в потребительской электронике. На какое-то время Nintendo действительно перекрыла кислород пиратам. Но ключевое слово здесь – «какое-то», ведь секрет 10NES разгадали на удивление быстро...
Компания Tengen, дочернее издательство Atari, умудрилась рассекретить логику работы чипа и создала собственный клон под кодовым именем Rabbit для выпуска нелицензионных картриджей. Да-да, вы все правильно поняли: Atari взломала Nintendo! Это вылилось в историческое судебное разбирательство Atari Games Corp. против Nintendo of America (1992 год).
Тем временем простые энтузиасты-любители выяснили, что чип CIC в консоли можно нейтрализовать грубым физическим путем. Достаточно было вскрыть приставку и перекусить одну-единственную ножку микросхемы, чтобы та больше никогда не могла прижимать к земле линию сброса. После этого консоль послушно запускала любые картриджи.
Сторонние производители пошли еще дальше: они подавали короткий импульс высокого напряжения, который «оглушал» CIC в момент проверки, не давая ему вовремя сбросить систему. Это был ранний и довольно грубый пример атаки методом внедрения сбоев – аппаратного трюка, который спустя годы поможет взломать защищенную цепочку загрузки Xbox 360.
Nintendo использовала технологию CIC на протяжении трех поколений своих картриджных платформ – NES, Super NES и Nintendo 64, усложняя защиту с каждым разом. Однако коренной недостаток архитектуры никуда не делся: консоль проверяла лишь физическое присутствие чипа-компаньона, но никак не валидировала код самой игры. Разобравшись в протоколе, хакер мог легко скопировать или обмануть чип. Лишь в 2001 году с выходом GameCube, отказавшись от картриджей в пользу проприетарных дисков miniDVD, японский гигант окончательно сдал CIC в архив.
На стыке веков сформировался классический цикл, который будет повторяться десятилетиями: инженеры создают преграду на основе эксклюзивности железа или сокрытия алгоритмов, хакеры разбирают её по винтикам, а затем находят изящный способ обхода. Но вот на арену вышли оптические носители – как изменились правила игры с их появлением?
❯ Оптические диски и эпоха модчипов
Легендарная PlayStation (1994 год) ознаменовала переход от картриджей к компакт-дискам. В Sony понимали, что удешевление пишущих CD-приводов превращает пиратство в смертельную угрозу для бизнеса. Решением стала хитроумная система защиты: прошивка привода искала на диске особый региональный сигнал аутентификации SCEx, закодированный на нестандартной «волнистой» дорожке у самого внутреннего кольца носителя. При этом регион диска должен был строго соответствовать региону приставки. По сути, защита держалась на специфическом физическом формате, который бытовые рекордеры физически не могли воспроизвести при записи.
Это породило совершенно новый вектор атаки и дало мощный толчок развитию индустрии так называемых модчипов. Типичный модчип для PlayStation представлял собой крошечный микроконтроллер, который впаивался в материнскую плату консоли и имитировал сигнал SCEx, заставляя привод без лишних вопросов глотать болванки и игры из других регионов.
Модчип, припаянный к материнской плате оригинальной PlayStation
Уже в первый год после запуска консоли рынок наводнили десятки версий модчипов. Для их установки требовалось всего лишь припаять пару проводков к контрольным точкам на плате.
Кроме чиповки существовал и легендарный метод «горячей замены» – swap trick. Пользователь запускал лицензионную игру, предварительно зажав датчик открытия крышки спичкой или зубочисткой, и сразу после проверки подлинности быстро менял ее на пиратскую болванку.
Главный урок этого раунда борьбы очевиден: вся безопасность PlayStation сводилась исключительно к валидации самого носителя. Процессор никак не проверял подлинность кода, отправляемого в память, и слепо запускал всё, что отдавал привод. Достаточно было обойти проверку диска – и система сдавалась без боя.
В вышедшей в 2000 году PlayStation 2 планку защиты приподняли, сделав авторизацию диска сложнее, но и ее в итоге взломали модчипами и тем же свапом. Такой зацикленный на носителях подход к безопасности был общим для всей индустрии: Sega Saturn опиралась на аналогичные дисковые проверки, да и Nintendo GameCube верила в неприступность своего формата miniDVD. Ни одна консоль тех лет не утруждала себя проверкой подписи кода – безопасность заканчивалась у лазерной головки привода. Чип верил всему, что проскочило мимо контроля диска.
Особняком стоит Sega Dreamcast. Её создатели попытались защититься комплекснее: проприетарный оптический формат GD-ROM они дополнили аппаратным скремблированием кода. Но случился курьез: система была скомпрометирована из-за поддержки малоизвестного формата MIL-CD. Энтузиасты научились использовать эту уязвимость в логике автозапуска и воссоздали алгоритм сжатия исполняемых файлов, открыв консоль для обычных CD-R.
Стало очевидно: защищать носитель – тупиковый путь. Пришло время защищать сам код.
❯ Эра криптографии: цифровая подпись кода на страже консолей
Вышедшая в 2001 году первая Xbox создавалась на базе стандартного компьютерного железа (модифицированный процессор Pentium III, видеочип Nvidia, обычный жесткий диск) под управлением урезанной версии Windows 2000. Microsoft одной из первых внедрила полноценную криптографическую цепочку доверия. Всё начиналось со скрытого загрузочного блока внутри южного моста MCPX. Этот блок расшифровывал и проверял внешний загрузчик, тот, в свою очередь, делал то же самое с ядром ОС, а уже ядро контролировало цифровые подписи запускаемых игр.
Одним из первых и наиболее авторитетных исследователей, разобравших систему безопасности Xbox по кирпичикам, стал легендарный Эндрю bunnie Хуанг. Он подробно описал свои открытия в меморандуме Массачусетского технологического института (MIT) в 2002 году, а позже выпустил книгу «Взлом Xbox: введение в реверс-инжиниринг» – кстати, она находится в свободном доступе, так что обязательно почитайте!
Хуанг доказал, что скрытое ПЗУ загрузчика Xbox можно скопировать, напрямую подключившись к шине HyperTransport. Код загрузки передавался по ней в абсолютно открытом виде! Хакеру не пришлось растворять корпус чипа кислотой ради кремния: понадобился лишь физический доступ к плате и самодельный сниффер трафика на базе ПЛИС.
Шина HyperTransport на материнской плате Xbox
Чтение встроенной памяти полностью разрушило ауру секретности вокруг аппаратного корня доверия приставки. Исследователи мгновенно воссоздали алгоритмы расшифровки и вытащили секретные ключи, что позволило досконально проанализировать все этапы старта системы. Логическим итогом стало создание альтернативных чистых загрузчиков вроде Cromwell.
Цифровая подпись взвинтила планку защищенности до небес. Но у нее был фатальный изъян: она бессильна против банальных уязвимостей переполнения памяти в самом авторизованном коде!
❯ Переполнение буфера и верная лошадка Эпона
Файлы игровых сохранений неожиданно стали идеальной лазейкой. Ряд популярных тайтлов для первого Xbox – MechAssault, Splinter Cell и 007: Agent Under Fire – грешили тем, что их парсеры сохранений не проверяли длину загружаемых данных. Специально модифицированный файл сохранения приводил к переполнению буфера, что позволяло внедрить и запустить сторонний код прямо во время работы игры. А поскольку игры на Xbox работали в режиме ядра, уязвимость в одной-единственной игре давала хакеру безраздельный контроль над всей системой.
Подобные чисто программные методы обхода защиты получили название софтмодов.
Аналогичный сценарий повторился на Nintendo Wii в 2006 году. Знаменитый эксплойт Twilight Hack задействовал переполнение буфера стека в игре The Legend of Zelda: Twilight Princess. Для атаки требовалось загрузить подготовленное сохранение, где верной лошадке Линка по имени Эпона дали непомерно длинную кличку. Уязвимость позволяла запускать пользовательские программы со стандартной SD-карты, что положило начало установке оболочки Homebrew Channel на миллионы консолей. Позже появились более глубокие инструменты, такие как BootMii, перехватывавшие управление еще на ранних этапах старта железа.
Урок был предельно ясен: глупо выстраивать неприступную цепочку загрузки, если доверенное приложение беззаботно обрабатывает любые внешние данные. Это просто смещает вектор атаки. Седьмое поколение консолей попыталось решить эту проблему комплексно, но наступило на другие, куда более интересные грабли.
❯ Когда ломается безопасная загрузка
Системы седьмого поколения – PlayStation 3 (2006 г.), Xbox 360 (2005 г.) и Wii (2006 г.) – сделали упор на асимметричную криптографию для жесткого контроля подписей кода. Консоль должна была выполнять только те файлы, которые подписаны секретным закрытым ключом производителя. Идея казалась безупречной, но вот ее техническое воплощение подкачало.
Одной из первых и наиболее изощренных атак на безопасную загрузку Xbox 360 стал знаменитый SMC/JTAG-хак, объединивший сразу несколько брешей. Для запуска неподписанного кода хакеры заливали во флеш-память NAND модифицированный образ консоли, содержащий измененную микропрограмму SMC-контроллера, а также старые версии загрузчика и уязвимого ядра операционной системы. Затем через аппаратный интерфейс JTAG выполнение перенаправлялось напрямую в это уязвимое ядро.
Конструктивный просчет Microsoft состоял в том, что интерфейс отладки JTAG оставался активным на доли секунды в процессе включения. Кроме того, прошивка контроллера SMC слепо признавалась доверенной и фактически находилась вне цепочки проверки, а слабая защита от перехода на старые версии прошивки создавала почву для даунгрейда. Со временем Microsoft закрыла эту лазейку программным обновлением, усилив противодействие откатам ПО и заблокировав запуск старого уязвимого ядра.
Однако в 2011 году хакеры GliGli и Tiros представили куда более фундаментальное аппаратное решение: метод Reset Glitch Hack (RGH). Суть RGH заключалась в передаче на процессор импульса сброса с ювелирно выверенным таймингом (что часто сочеталось с искусственным замедлением тактового генератора). В результате этого микросбоя процессор просто отбрасывал этап верификации хеш-суммы загрузчика, позволяя запуститься модифицированному коду следующей стадии. Эта классическая атака с внедрением сбоев легко реализовывалась с помощью копеечного чипа (на фото ниже) и принципиально не поддавалась программному лечению. Исправить уязвимость Microsoft смогла лишь в новых аппаратных ревизиях Xbox 360.
Аппаратная модификация Xbox Reset Glitch Hack для внедрения сбоев
История PlayStation 3 дает еще более ценный урок, но уже в области криптографии. Для защиты системного ПО Sony использовала цифровые подписи на эллиптических кривых (ECDSA). Этот алгоритм жестко требует, чтобы в процессе формирования каждой подписи использовалось новое, абсолютно случайное и непредсказуемое число (так называемый nonce). Стоит использовать этот параметр повторно – и закрытый криптографический ключ вычисляется математически на основе самих подписей. Беда разработчиков Sony крылась даже не в слабом генераторе случайных чисел: они умудрились забить в код генерации константу. То есть абсолютно одинаковое число использовалось для всех подписей до единой! Именно этот грандиозный промах раскрыла хакерская группа fail0verflow в декабре 2010 года на конференции 27C3, в докладе под говорящим названием «PS3 epic fail». Извлечь закрытый ключ из любых двух подписанных файлов оказалось детской задачей.
На волне этого открытия хакер Джордж Хоц (geohot) выложил приватный ключ шифрования Sony в открытый доступ. Отныне любой желающий мог собирать и подписывать самодельные утилиты и игры, а консоль послушно запускала их, признавая аутентичными. Sony инициировала громкое судебное разбирательство, которое позже закончилось перемирием, но исправить саму проблему по воздуху было практически невозможно: скомпрометированный мастер-ключ был аппаратно зашит в корень доверия приставки и отозвать его обычным патчем не представлялось возможным.
Этот кейс вошел в учебники как классический пример фатального провала криптографии. Зарекомендовавший себя математический алгоритм пал жертвой небрежной реализации. Истинная качественная энтропия играет первостепенную роль во многих сферах программирования, в особенности – в шифровании информации.
Противостояние хакеров и инженеров превратилось в бесконечный образовательный процесс для всех участников гонки. Нападающие раздвигают границы возможного, а защитники анализируют прошлые промахи, чтобы сделать выводы на будущее. Но помог ли этот колоссальный опыт сделать современные системы неуязвимыми?
❯ Гарантирует ли усиленная броня стопроцентную безопасность?
Первая версия гибридной консоли Nintendo Switch (2017 год) построена на базе однокристальной системы Nvidia Tegra X1. Безопасная загрузка устройства опиралась на встроенную память BootROM – обычная практика для современных мобильных чипов. Однако уже в 2018 году исследовательница Кейт Темкин вместе с коллегами из команды ReSwitched обнародовали уязвимость fusée gelée (CVE-2018-6242). Это было переполнение дескрипторного буфера в обработчике режима восстановления по USB (RCM), прописанном прямо в BootROM.
Для запуска утилиты требовалось сущая ерунда: обычная скрепка или кусочек проволоки для замыкания двух контактов в разъеме правого джойкона (что вводило приставку в режим восстановления USB) и кабель подключения к ПК или специальному донглу. Отправив по USB сверхдлинный управляющий запрос, злоумышленники переполняли буфер, перетирали обратный адрес обработчика RCM на стеке и перенаправляли исполнение кода на произвольные инструкции, загруженные в ОЗУ (SRAM), – причем происходило это еще до того, как консоль хотя бы пыталась проверить цифровую подпись ПО.
Из-за того, что уязвимость крылась в масочном ПЗУ (mask ROM), прошитом в кристалл на этапе производства процессора, закрыть брешь программными патчами на миллионах проданных Switch было физически невозможно. Любая консоль на первом чипе Tegra X1 уязвима перед fusée gelée пожизненно. Исправить положение Nintendo смогла лишь выпуском более свежих аппаратных ревизий на обновленном чипе Tegra X1+ (кодовое имя Mariko).
К слову, подобные промахи при проектировании аппаратного корня доверия периодически находят и за рамками игровой индустрии. Яркий пример из промышленной сферы – критическая брешь, обнаруженная в чипах NXP i.MX6.
Что касается PlayStation 4 (2013), то на сегодняшний день публичной информации о взломе ее аппаратного корня доверия нет. Зато исследователи не раз делились рабочими эксплойтами удаленного выполнения кода (RCE), позволяющими разворачивать стороннее ПО на уже загруженной системе.
Например, один из классических алгоритмов основывался на уязвимости в движке WebKit, что давало возможность выполнять код внутри интернет-браузера консоли. Следом активировался вспомогательный эксплойт ядра, помогавший вырваться из песочницы наружу и получить полный контроль на системном уровне. Другой недавней масштабной угрозой стал метод PPPwn, нацеленный на сетевой стек Ethernet/PPPoE консоли, где ошибка реализации протокола позволяла удаленно выполнять команды с правами ядра.
Поскольку все эти атаки велись по программному вектору, а не по физическому железу, Sony оперативно парировала угрозы регулярными обновлениями прошивки. С каждой новой версией ПО японцы планомерно сокращали плоскость атаки и закрывали известные науке лазейки.
Позади у нас тридцать лет непрекращающихся взломов, написания хитрых эксплойтов, глитч-атак на системы питания и выуживания приватных ключей. Какой же урок мы можем вынести из этого противостояния?
❯ Чему нас учат тридцать лет истории безопасности консолей
Посмотрите на современные консоли – PlayStation 5, Xbox One или семейство Xbox Series. В них задействован полный арсенал средств защиты, который только можно вообразить для первоклассных встраиваемых систем: безопасный старт, сквозное шифрование накопителей, изоляция процессов на базе гипервизоров и стабильная система облачных обновлений для мгновенной установки заплаток. Тем не менее практика показывает, что при должном запасе времени, мотивации и ресурсов у исследователей любая, пусть даже трижды сложная система рано или поздно пасует перед взломом.
Так, для PS5 уже существуют детально задокументированные уязвимости и связанные цепочки атак. Яркие примеры – цепочка эксплойтов через BD-J (Java-контент для Blu-ray дисков), связывающая воедино пять самостоятельных багов ради выполнения сторонних программ, и Byepervisor – публично доступный эксплойт для обхода гипервизора PS5 на ранних прошивках версий 1.xx–2.xx.
На фронте платформ Microsoft тоже неспокойно: исследование 2024 года показало реалистичность эксплуатации уязвимостей ядра SystemOS как на Xbox One, так и на семействе Xbox Series. А в 2026 году была представлена атака Bliss, которая с помощью целевых импульсов напряжения на BootROM оригинальной Xbox One позволила запускать неподписанный код на любом уровне системы.
С годами платформодержатели осознали: одних технических барьеров мало. Защиту нужно подкреплять жесткой сетевой привязкой к экосистеме сервисов. Классический пример: взлом материнской платы PS4 мгновенно ставит крест на доступе к сервисам сети PlayStation Network. Для миллионов геймеров, дорожащих мультиплеером, такая цена перевешивает любые сомнительные плюсы запуска неподписанного софта.
Итоговый вывод прост: безопасность – это не отдельная фича, которую можно наспех добавить к готовому продукту, а свойство его внутренней архитектуры. Наиболее живучими оказываются те системы, проектировщики которых неукоснительно руководствовались двумя базовыми концепциями: эшелонированной обороной (defense in depth) и безопасностью на уровне проектирования (security by design). И разумеется, эти концепции должны гармонировать с реальной моделью угроз, стоящих перед устройством.
Надеюсь, этот хронологический экскурс в мир безопасности консолей показался вам интересным.
Статья является переводом. Автор оригинала: Sergio Prado
В версии игры DOOM 1.1 и выше существует возможность запустить отображение игры на четырех экранах. В результате имеем основной центральный вид и дополнительные: слева, справа и карту. Одним словом — панорамное отображение.
Данный функционал просуществовал некоторое количество подверсий. Затем либо намеренно (а зачем — такой шарм игре?), либо, скорее всего, случайно был «выпилен» и исчез. Мы используем версию DOOM 1.1 — речь идет об игре под MS-DOS. Для этого три компьютера связываются в сеть, и игра запускается с определенными параметрами.
Описанное в статье не является новостью — просто очень хотелось это повторить. Мне не хватало воплощённых технических подробностей. Использованные оригинальные источники приведены в конце статьи.
❯ Конфигурация и настройки
Использованы три компьютера под управлением MS‑DOS 6.22. Это обычные, ничем не примечательные компьютеры пятнадцатилетней давности — я даже не привожу их тривиальные аппаратные конфигурации, дело не в них. Можно использовать четыре рабочие станции, но у меня уже не было места на столе, а возможность демонстрации карты осуществлена при помощи нажатия клавиши «Табуляция». Главное — реализована гипотетическая возможность.
Подопытные объединены в сеть при помощи роутера.
Красным кружком — входящий сетевой сигнал, синим — три исходящих, на три рабочие станции
Чтобы не возиться с каждым компьютером отдельно, загрузка осуществляется прямо с роутера, при помощи TFTP (Trivial File Transfer Protocol). Само-собой, на роутер был отправлен заранее приготовленный образ, содержащий:
Операционную систему MS-DOS 6.22;
Пакетный драйвер для сетевой карты, обеспечивающий работу сети в MS-DOS;
PDIPX — резидентная программа, для взаимодействия с пакетным драйвером и сетевой картой, необходимая для сетевой работы DOOM через IPX-протокол;
Пакет Mtcp https://www.brutman.com/mTCP/, который обеспечивает работу сети под MS-DOS, в частности присвоение IP-адреса, маски и шлюза через DHCP-протокол;
Драйвер монтирования флеш-накопителя в MS-DOS.
Такая получилась своеобразная виртуальная «дискетка», содержащая все необходимое. В процессе загрузки монтировалась флешка, содержащая запускаемый экземпляр игры. Сделано это было один раз и тиражировалось на все три рабочие станции. Так гораздо удобнее отлаживать — меняешь конфигурацию в одном месте и загружаешь сразу на трех машинах.
Загрузка каждой рабочей станции выглядит так:
Выбираем первый образ
Приведу результаты последовательно:
Загрузка пакетного драйвера сетевой карты Realtek 8139
dhcp.exe, присвоение динамического ip-адреса сетевому адаптеру и задание переменной окружения для работы MTCP.
И пинг для проверки работы сети
После этих манипуляций мы имеем загруженную операционную систему MS-DOS с такой картиной распределения памяти:
Далее самое волнительное — как запустить DOOM с панорамным отображением.
Моё рассуждение примитивное: если есть возможность запуска игры с определенными параметрами, это должно быть описано в соответствующей документации. «Надо читать readme.exe», — сказал я себе и взялся за дело.
Приведу обе страницы, в которых ни слова о ключах нужного нам запуска. Речь — о мультиплеере и только. В остальных разделах тоже ни слова.
Вот и скажите, откуда узнать об отсутствующих нужных нам ключах? Ну нет в официальной документации. Это вызывает недоумение. В поисковике нашел следующее:
Первая строчка означает запуск центральной части игрового экрана с тремя участвующими нодами; две последующих — соответственно вид слева и вид справа. Но только не годятся эти параметры для версии 1.1.
Правильные строки нужного нам запуска и это видно в результирующем ролике следующие:
doom - net 3 doom - net 3 -left doom - net 3 -right
Объяснить с
Вот теперь можно и поиграть. Это иллюстративный ролик, в котором отмечена сама возможность такого запуска. Мы видим центральный экран, вид по бокам и карту, которую я периодически включал и отключал. Надо сказать — да, это удобно. Мне был интересен сам факт такого запуска; у меня, почему-то, были зверские подтормаживания игрового процесса, но это уже частности. Нужно проверить физическое состояние кабелей, роутер, посмотреть скорость работы сети. Предлагаю взглянуть на результат.
Вышеописанная «фича» мне кажется недооценённой. Как Вы считаете? Есть ли у Вас опыт запуска подобных механизмов? Возможно, приходилось работать за двумя мониторами в MS-DOS, и если да, то какое было аппаратно-программное обеспечение и какие задачи при этом решались? Использовали или хотя бы видели двухголовую видеокарту на шине ISA?
Оставим в покое антикитерский механизм, являющийся одним из самых древних аналоговых вычислительных устройств и на всех порах влетаем в 20 век, где одной из наиболее востребованных и трудоемких вычислительных задач являлось решение систем линейных алгебраических уравнений. В эпоху научно-технической революции советские НИИ, в особенности «Счетмаш» под руководством В.Б. Ушакова создали серию надежных и простых аналоговых машин для решения дифференциальных уравнений в реальном времени. «Машина нелинейная» МН-7 — это первая известная ламповая настольная АВМ в СССР. Она содержала 16 операционных усилителей и позволяла решать дифференциальные уравнения 6-го порядка.
Эта машина пущена в серию в 1955 году, а уже в 1959 году на выставке в Нью-Йорке была представлена первая в мире полупроводниковая АВМ МН-10, разработанная годом ранее. Правда отмечается, что из-за стабильности характеристик первых серийных транзисторов сама МН-10 в серию пошла только в 70-х годах в виде модификации МН-10М.
Во второй половине 70-х годов в НИИСчетмаше был разработан аналоговый вычислительный комплекс третьего поколения АВК-3 в составе трех моделей: АВК-31 (АВМ небольшой мощности), АВК-32 (АВМ средней мощности) и АВК-33 (АВМ большой мощности). Все модели имели 10-вольтовую шкалу, в них широко использовались интегральные микросхемы малой и средней степени интеграции, что обеспечило сравнительно небольшую стоимость аппаратуры и ее высокую надежность.
Эквивалентное быстродействие АВК-31 составило 100 млн. операций в секунду для уравнений 6 порядка. У АВК-32 — 320 млн операций в секунду для уравнений до 20 порядка, а АВК-33 – 960 млн. операций в секунду для уравнений до 60 порядка. И это все при том, что в 70-е годы мэйнфреймы предоставляли в лучшем случае десятки млн. операций в секунду, а понятие «персональная ЭВМ» только зарождалось. Всё это способствовало популярности недорогих, но эффективных аналоговых машин. К слову, АВК-31 все еще периодически встречается на просторах авито. Это значит что за всё время их было сделано немало.
Наконец, в начале 80-х годов в стенах Инженерного центра МИФИ рождается Аналоговый вычислительный комплекс АВК-6 — весьма миниатюрный настольный аналоговый компьютер.
❯ Персональный аналоговый компьютер
Итак, перед нами персональный аналоговый компьютер АВК-6. Выполнен он в виде настольного прибора, объединяющего в одном корпусе мини-АВМ, индикаторно-измерительную систему и источник питания.
Аналоговый компьютер АВК-6, сменные модули и книга-методичка
Один из главных разработчиков машины и соавтор книги «Персональный аналоговый компьютер» — Владимир Алексеевич Федоров, вспоминает:
В 1975-1976 гг. появился первый образец-предшественник АВК-4 — макет АВМ МЭМ-2, в которой впервые была реализована возможность программирования по структурной модели объекта (включала линейный и нелинейный блоки).
В 1978-1979 гг. был разработан и в 1980г. запущен в производство на экспериментально-опытном заводе (ЭОЗ) «Квант» МИФИ комплекс АВК-4.
В 1981-1982 гг. был разработан и запущен в производство в 1983 г. на ЭОЗ «Квант» МИФИ комплекс АВК-6.
С 1985 г. АВК-6 в достаточно больших объемах выпускался Киевским радиозаводом (КРЗ). Разработчиком всех изделий было студенческое конструкторско-исследовательское бюро кафедры автоматики МИФИ (СКИБ-А). Руководитель СКИБ-А и главный идеолог разработки — доцент Алексаков Габриэль Николаевич, преподававший в МИФИ теорию автоматического управления (ТАУ) и основы автоматики, (уникальная личность, умер в 2007 г.).
Общий вид АВК-4. В верхнем углу виден логотип СКИБ МИФИ. За фото спасибо Виктору Боеву из музея МТУСИ
Слева расположены блоки индикаторно — измерительной системы (ИИС):
электронно-лучевой индикатор,
генератор системы синхронных сигналов и электронный коммутатор,
служебный модуль.
Это позволяло проводить исследования имея только сам компьютер, без необходимости подключения к нему каких-либо внешних измерительных приборов. При этом все остальные настольные АВМ не обладают такой самодостаточностью. Тот же АВК-31 оснащен только стрелочной головкой — полученные сигналы нужно выводить на внешний осциллограф.
Наличие встроенной системы контрольно-измерительных приборов (осциллограф, генератор, вольтметр, измеритель длительности, а также коммутатор, позволяющий сформировать на экране «измерительные линейки»), было одним из главных требований.
Центральная часть АВК-6 — это сборочная панель, рассчитанная на установку шести сменных решающих модулей, из которых по структурной математической модели формируется аналоговый процессор — мини-АВМ. Справа расположен источник питания.
Выпускался прибор на четырех заводах: Киевский Радиозавод (КРЗ), Опытный завод «КВАНТ» при МИФИ, Ахтырский завод «Промсвязь» и Фрунзенский радиозавод. Всего было выпущено до 2500 машин. При этом, если вы посмотрите любую фотографию АВК-6 из интернета, то почти со 100% вероятностью на ней будет АВК с аббревиатурой КРЗ.
АВК-6 на выставке в Лейпциге с золотой медалью и дипломом. Из архива Федорова В.А.
Разработанные комплексы демонстрировались на многих зарубежных выставках (Англия, Болгария, Сингапур и др.) Авторы-разработчики АВК-4, АВК-6, АВК-6Д и их компонентов были отмечены в 1980-х годах медалями ВДНХ СССР (золотой, серебряной и двумя бронзовыми). Владимир Алексеевич вспоминает:
В 1985 г. я в качестве стендиста с АВК-6 в составе делегации СССР принимал участие в осенней Лейпцигской выставке-ярмарке (ГДР), на которой комплекс был отмечен Золотой медалью и Дипломом.
❯ А за океаном и в Европе
Не надо думать что, мол «в СССР не было нормальных компьютеров, вот и занимались какой-то ерундой». Аналоговые вычислительные машины в 60–80-е годы были самым быстрым и эффективным инструментом для моделирования динамических систем во всем мире. И в «загнивающем западе» они активно применялись.
Американская фирма Electronic Associates Inc. (EAI) , основанная в 1945 году, уже с 1952 года начала производство аналоговых компьютеров. В 1959 году EAI представила PACE TR-10 — транзисторный аналоговый компьютер. Это был настольный компьютер модульного типа размером 38 x 40 x 60 см и ценой около 4000 долларов.
На смену ему пришел EAI 680 — гибридная система на 120 сменных модулей, с различными генераторами сигналов и сервопотенциометрами. Машины EAI использовались NASA для разработки космических зондов и моделирования физических систем.
В Европе тоже не дремали. Немецкая Telefunken в 1959 году выпускает RAT 700 — полностью транзисторный аналоговый компьютер. Модульная конструкция со сменной коммутационной панелью, размеры 68 x 54 x 48 см, вес 85 кг — и это считалось настольным решением. Машина быстро распространилась в университетах и небольших исследовательских институтах, закрепив за Telefunken статус ведущего немецкого производителя аналоговых вычислительных машин. В 1960 году появляется RAT 700/2 с 15 операционными усилителями и сменными панелями для быстрой смены программ. А вершиной немецкой аналоговой школы стал Telefunken RA 770 — машина с точностью 0,1%. В какой-то степени она тоже настольная, просто у нее стол — встроенный.. и весит она 550 кг...
Были и доступные варианты. Heathkit, легендарный производитель наборов для сборки, в 1960 году представил модель EC-1 — самый дешевый универсальный аналоговый компьютер на рынке всего за 199,95 долларов. В нем было девять ламповых усилителей постоянного тока, а сборка занимала 25–30 часов. Для студента или инженера-энтузиаста начала 60-х это было окно в мир вычислительной техники.
Ну и, наконец, Comdyna GP-6 — машина, появившаяся в конце 1960-х и выпускавшаяся аж до 2004 года. Более 35 лет на конвейере... GP-6 активно использовался в университетах для обучения системам управления и решения дифференциальных уравнений.
Так что аналоговые компьютеры были вовсе не «советской экзотикой». И в США, и в Европе инженеры прекрасно понимали: для задач моделирования в реальном времени аналоговая машина дает фору любому мэйнфрейму той эпохи. И пока цифровые ЭВМ набирали обороты, аналоговые машины уверенно решали свои задачи — от ракетных траекторий до химических реакций. В этом смысле советский АВК-6 был ровно таким же инструментом, как TR-10, RAT 700 или GP-6.
❯ Анатомия АВК-6
Первое включение. Ожидаем увидеть точку...
При первом включении прибора на индикаторе вместо ровной точки мы видим эллипс — это 100% помехи от источника питания. Его принципиальная схема выглядит следующим образом:
Он выдает нестабилизированные ±10В на всякое разное, ±15В для питания операционных усилителей и еще ±5В для питания микросхем цифровой логики.
Главное тут — сразу смотреть все линии осциллографом, потому что мультиметр не покажет помехи... И точно — на линиях ±15В нужные напряжения вроде бы есть, но приправлены помехами с размахом больше 1В!
-15В±1В :)
Подкидываем свежие конденсаторы C9 и C10 взамен умерших, приправим керамикой и вуаля — питание очистилось, а на осциллографе — ровная точка. Внезапно, ремонт прибора в целом, завершен. В процессе дальнейшего изучения функциональности, нашелся ряд «уставших» потенциометров на сменных модулях, но на них не будем заострять внимание.
❯ Индикаторно-измерительная система
Как я сказал ранее — уникальность АВК-6 заключается в его самодостаточности.
Индикаторно-измерительная система. После ремонта бублик исчез до точки
Для непосредственного наблюдения за результатом, прибор оснащен миниатюрным XY-индикатором на базе трубки 6ЛО1И (1). Это немного, но позволяло однозначно наблюдать форму характеристик. Подаются сигналы на аттенюаторы (4). Прибор оснащен тремя 4-х канальными коммутаторами (2), позволяющими одновременно выводить сразу до 4-х сигналов! Скрытые в нише потенциометры позволяли скорректировать положение луча, а также отрегулировать его яркость и фокус.
Для подачи управляющих и возмущающих воздействий имеется генератор сигналов различной формы (3) — меандр, треугольник, синус и косинус с частотой от 0.1 до 1100Гц. Для контроля текущей частоты на панели выводится индикатор измерителя периода (4). А размах сигнала можно проконтролировать вольтметром (5).
Для сборки сложных систем прибор оснащен двумя десяти-входовыми сумматорами (6). Восемь инверсных входов и два прямых как раз и позволяют моделировать системы 6-го порядка. Дополнительно присутствуют сигналы опорных напряжений и пара делителей (7)
❯ Основной комплект сменных блоков
Сменные решающие блоки АВК-6 выполнены в едином конструктиве, что позволяет устанавливать их на любую позицию монтажного поля в зависимости от вида структурной модели. Функциональная организация АВК-6 подсказывает пользователю оптимальный способ коммутации преобразователей при наборе модели.
Линейный блок
Линейный сменный блок
Предназначен для интегрирования во времени входных сигналов — напряжений амплитудой до 10В. На фальшпанели воспроизведен структурный инвариант линейных моделей.
Предусмотрены три режима работы — ввод начальных условий, непрерывное интегрирование и периодическое интегрирование с установкой начальных условий. Начальное значение изменяется от -10 до +10В, время интегрирования — от 10мс до 100с. Можно отрегулировать коэффициент передачи и коэффициенты обратных связей.
Логично предположить, что при подаче на вход меандра, на выходе будет равномерное нарастание сигнала. А если подключить два блока подряд, то на выходе второго будет формироваться парабола:
Процесс интегрирования меандра одним интегратором(прямая) и двумя(парабола)
Нелинейный блок
Нелинейный сменный блок
Этот блок предназначен для моделирования нелинейных функций одной переменной — однозначных монотонных и немонотонных, многозначных и петлевых.
Согласно фальшпанели — в блоке имеется трехвходовый сумматор, с регулируемыми коэффициентами по боковым прямому и инверсному входам, усилитель, а также нелинейный преобразователь, статической характеристикой которого можно управлять в пяти степенях свободы:
Но я же не просто так восстанавливал двухкоординатный самописец Endim 622, верно? Подкидываем к нему сигналы X и Y, и перо начинает рисовать на бумаге форму нашего кривого сигнала. Частоты сигнала в 1Гц более чем достаточно. В процессе я крутил ручки, поэтому каждый оборот графопостроитель мне фиксировал всё новую и новую траекторию.
Блок Умножение-деление
Сменный блок Умножение-Деление
Этот блок предполагается использовать при моделировании систем с переменными параметрами, оптимальных систем, поверхностей в трехмерном пространстве, алгоритмов обработки сигналов и т.п.
Функционально в блоке имеются:
Операция умножения Y = A x B x 0.1
Операция деления Y = (A / B ) x 10
Операция взятия по модулю Y = A mod B
Два трех-входовых сумматора Y = A + B - C
И четыре пассивных делителя сигналов
При этом отдельные компоненты расположены так, чтобы схему можно было собрать почти целиком только скобами-перемычками, по минимуму используя длинные провода.
Подавая на входы умножителя и делителя синус и косинус мы получим синус удвоенной частоты на выходе умножителя и тангенс на выходе делителя.
Умножение
Блок умножения. источник [1] К сожалению, в интернете даже фотографии этого модуля не встречаются
Этот блок целесообразно использовать при моделировании нелинейных динамических процессов и исследованиях оптимальных и экстремальных САУ. Здесь имеются преобразователь «модуль», двухвходовые сумматоры с регулируемыми коэффициентами передачи, преобразователь «Умножение», а также генератор трех синхронных сигналов прямоугольной, треугольной и синусоидальной форм. Он относится к стандартному набору, но даже у разработчика в архивах не нашлось его фотографии...
❯ Музыкальная пауза
В комментариях под клипами про аналоговый компьютер меня просто завалили вопросами «А он может использоваться в роли синтезатора??». Что ж, кто я такой чтобы отказывать любимой публике. Я уже делал подобный эксперимент в эпоху релейного компьютера — тактируя его от MIDI-клавиатуры
Пришло время повторить эксперимент еще раз, для чего я собрал переходник с MIDI на AUX.
MIDI-протокол на физическом уровне представляет собой токовую петлю и асинхронную передачу данных на скорости 31.25кбод. схема 8-N-1. С помощью оптопары преобразуем её в uart уровни и подаем на вход МК. В покое клавиатура отправляет статусный байт FCh, которым отрубается любая генерация. Пакет данных составляет три байта: «команда-нота-сила нажатия» и формируется при нажатии(команда=90h) и отпускании(команда=80h) клавиши. Последняя нажатая клавиша управляет частотой ШИМ-таймера, который, при этом, умеет выдавать один из трех сигналов:
меандр (с регулировкой заполнения),
треугольник (с регулировкой соотношения фронтов)
синус.
Синус генерируются через таблицу, которая заполняется на старте прошивки. в ней хранится только 16 отсчетов — четверть волны. системный таймер работает на частоте нота*64. и по своему прерыванию, вычисляет новое значение для ШИМ и обновляет его для ШИМ таймера. последний работает на частоте в 160кГц — при камне в 16МГц, получим ровно 100 отсчетов — тогда таблица должна быть в процентах. На ножке установлена RC-цепочка фильтра и выходной конденсатор.
Приставка одноголосная, но благодаря работе на прерываниях — все работает стабильно. Выход таймера через RC-фильтр и разделительный конденсатор отправляется на вход АВК.
Подключаем выход приставки к одному или нескольким входам сменных блоков, собираем что-нибудь эдакое и погнали:
❯ Расширенный набор блоков
Помимо основного набора сменных модулей, в книге приведен и ряд других, значительно расширяющих возможности компьютера:
Блок преобразования координат
Этот блок предназначен для наблюдения проекций трехмерных изображений на экране индикатора и их регистрации при помощи дополнительных регистрирующих приборов.
Сменный блок преобразования координат
В состав блока входят проектор трехмерного изображения на плоскость индикатора, позволяющий вращать его вокруг оси абсцисс и ординат независимо друг от друга.
Преобразование координат происходит по в соответствии с формулами
Помимо проектора на схеме присутствует 4 блока делителя, трехвходовый сумматор и генератор лестничной функции.
Блок Импульсный
Импульный сменный блок. Из архива Федорова В.А.
Этот блок предназначен для аналогового моделирования процессов в импульсных и цифровых системах 1-го порядка. Для моделирования систем 2-го порядка и выше, предусмотрена синхронная работа до шести импульсных блоков вместе.
Блок спектрального анализа
Этот блок предназначен для исследования спектрального состава сигналов и частотных характеристик системы, а также для изучения алгоритмов спектрального анализа. Он объединяет ступенчатый аттенюатор, фильтр нижних частот и резонансный фильтр,
Сменный блок спектрального анализа. Из архива Федорова В.А.
Управляемая линия задержки
Функционально блок объединяет управляемую линию задержки, умножитель аналоговых сигналов и регулируемый источник опорных напряжений 1В и 10В.
Из личного архива Федорова В.А.
А внутри у него 8-разрядный АЦП типа К1113ПВ1, 4Кбайт ОЗУ КР537РУ10 и ЦАП К591ПА1. Соответственно входной сигнал переводится в цифровую форму и пишется в кольцевой буфер. Указатель записи — это счетчик. Указатель чтения определяется как указатель записи плюс оцифрованное значение ручки потенциометра. Спустя регулируемое количество тактов это значение попадет в ЦАП и выйдет наружу. Вот такая штука для аналогового синтеза была бы очень кстати. Впрочем ничто не мешает её повторить.
Блок случайных сигналов
Блок случайных сигналов. источник [1] Возможно что модуль существовал только в проекте
Этот блок предназначен для изучения теории вероятностей и случайных процессов, а также исследования реальных систем и их моделей при случайных воздействиях. Сиречь — фаззинг. В составе блока два независимых генератора случайных сигналов 1, генератор периодических детерминированных сигналов 2, устройство выборки-хранения 3, нелинейные преобразователи 4 и 5, а также фильтры нижних (7) и верхних (8) частот.
❯ Учебный процесс
Первая в СССР учебная лаборатория по курсу ТАУ, укомплектованная комплексами АВК-4 была создана на кафедре автоматики МИФИ в 1981 году. В 1986 она была переоснащена компьютерами АВК-6.
Фото лаборатории с АВК-4. Из архива Федорова В.А.
На фото можно видеть макетный образец демонстрационного комплекса АВК-6, предназначенного для преподавателя, укомплектованного индикатором из переделанного цветного телевизора, на который выводится то же изображение, что и на встроенном индикаторе.
❯ Особая точка: Устойчивый фокус
В книге «Персональный аналоговый компьютер» приводится множество различных лабораторных работ по исследованию теории автоматического управления.
Исследование особой точки типа устойчивый фокус
Структурные схемы весьма понятны — здесь нам нужны два линейных блока, соединенные последовательно. С генератора подается меандр на прямой вход сумматора. На инвертирующие входы через делители a и b подаются выходные сигналы блоков. Отдельные точки схемы подаются на вход X и Y индикатора через коммутатор.
И вот наш устойчивый фокус
И на индикаторе появляется центровочный крестик, идущие в разнос автоколебания, а также фазовая траектория в форме раскручивающейся спирали — что говорит о том что с этими параметрами система неустойчива.
❯ Аттрактор Лоренца
Фазовые плоскости — это конечно хорошо, но как насчет визуализации Хаоса? Я просто обязан попытаться нарисовать у себя на АВК и на графопостроителе аттрактор Лоренца!
Я вижу три интегральных звена и... два умножителя. При том что лично у меня блок — только один, а значит имеющимся набором я это повторить не смогу! Впрочем... ничто не мешает нам сделать свой собственный блок умножителя, взяв за основу какую-нибудь доступную микросхему аналогового умножителя — например AD633. При своей стоимости в 20 баксов это был единственный найденный мной вариант с доступностью «в наличии».
Сменный модуль дифференциального умножителя
Модуль мог бы и вовсе содержать только два корпуса микросхем, но я решил поставить светодиодные схемы, подсвечивающие верхнюю и нижнюю границы сигнала. Микросхема имеет 4 входа — точно как на схеме. Соединительные пины берем от разъемов 2РМ — как в оригинале. Верхнюю панель я планировал напечатать из серого пластика, но внезапно оказалось что направляющие торчат выше уровня платы, с значит нужно точить оригинальные втулки. Иначе не соберется. Пока оставим так. Наконец, собираем схему и не забыв пропустить x,y,z сигналы через преобразователь координат наблюдаем со всех сторон настоящий хаос на нашем экране:
А точнее — не наблюдаем. Это не аттрактор. Это система просто падает в какие-то автоколебания в пространстве и сколько бы я не подбирал коэффициенты — добиться колец внутри колец, как в настоящем аттракторе Лоренца, мне не удалось. Либо такие коэффициенты здесь не выставить, либо какой-то из сменных блоков всё же сбоит.
❯ Дальнейшее развитие
Всего было поставлено до 2500 машин в более чем 200 ВУЗов страны. Естественно, одной только Теорией Автоматического Управления дело не ограничилось:
Развитие шло по пути создания новых блоков-модулей с натурными объектами или их моделями, ориентированных на другие учебные дисциплины (кроме ТАУ). Были разработаны сменные блоки для изучения электротехники, аналоговой и цифровой схемотехники, основ управления ядерными реакторами, ядерного приборостроения, электропривода и др.
Сменный модуль Р (Реактор)
Отдельного внимания заслуживает специализированный сменный модуль Р (реактор). Он обеспечивает моделирование широкого круга задач по изучению нейтронно-физических процессов в ядерном реакторе, исследованию его динамических характеристик, проектированию систем контроля и управления ядерным реактором.
Сменный модуль Р (реактор). Фото из архива Федорова В.А.
Структурная модель нейтронной кинетики следующая: две цепи обратной связи интегратора объединяют в одну общую, выходной переменной которой является сумма скоростей накопления ядер-предшественников запаздывающих нейтронов.
На основе этого модуля легко реализуются различные варианты организации вычислителей реактивности
Термостат
Использовался для моделирования системы управления электрическими печами сопротивления.
Термостат. Из архива Федорова В.А.
слева сверху мы видим трех-входовый сумматор с прямым и двумя инверсным входами, выходное значение которого можно умножить на 250 или 2500.
Чуть ниже располагается ОУ в дифференциальном включении. На каждом плече по два входа, один дает усиление 1:1, второй — 1:10.
Справа располагается блок термостата, включающий в себя датчик температуры с чувствительностью 0.1В/С. Можно предположить что максимальная температура тут — 100 градусов, так как выше питания датчик всё равно не прыгнет.
Модуль связи с IBM PC
Был также создан модуль связи АВК-6 с цифровым персональным компьютером типа IBM PC. К сожалению, в трудные 1990-е эти разработки не удалось довести до промышленного производства и они были изготовлены в единичных экземплярах.
АВК-6 с модулем связи с компьютером. Фото из архива Федорова В.А.
❯ Вместо заключения
На этом наша экскурсия в мир аналоговых вычислений подошла к концу. В современном мире они давно утратили свое превосходство перед цифрой. Основной недостаток этих систем — это даже не производительность — эксперименты с нейроморфными процессорами на мемристорах тут с вами могут поспорить. Проблема в фиксированной схемотехнике. Магия GPU в умножителе общего назначения, в который можно подать всё что угодно. А в нейроморфном процессоре схема натурально запекается в кремнии и становится неизменной.
С точки зрения обучения студентов ТАУ — аналоговые компьютеры были потрясающим инструментом, способным в реальном времени показать что происходит в системе. Никакой Matlab Simulink не даст такой тактильной отдачи, как ручка потенциометра.
Я выражаю огромную благодарность доценту кафедры автоматики МИФИ Владимиру Алексеевичу Федорову за представленные материалы и историческую справку.
Литература
Алексаков Г.К., Гаврилин В.В. Федоров В.А. Персональный аналоговый компьютер
Год назад я уже рассказывал про то, как работает мониторинг пассажирского транспорта и какое оборудование там используется. Но в комментариях мне подсказали, что рассмотренные устройства хоть и используются во многих городах до сих пор, но всё же являются довольно древними.
Прошло больше года, и вот ко мне в руки попал девайс следующего поколения, куда более навороченный. Что же он умеет? Сейчас и узнаем. Заодно выясним, как он устроен, почему новый в коробке прибор может быть сходу нерабочим и как вернуть его к жизни. Как водится, будет много интересного.
❯ Суть такова
Уже практически десять лет весь городской транспорт должен быть оборудован системой ГЛОНАСС. Само собой, за это время успело смениться уже несколько поколений таких устройств.
Когда-то давно я уже рассказывал про «Орбиту» и древний «Гранит».
Но, как мне сообщили, несмотря на то, что такие штуки ещё кое-где используются (например, на фото вполне себе рабочий «Орбита-Навигатор» в кабине челябинского автобуса), во многих местах эти приборы уже считаются устаревшими.
И вот у меня оказался уже куда более новый экземпляр. Этот прибор аналогично имеет на борту GPS-трекер, речевой информатор и контроллер маршрутных табло, однако теперь к этим функциям добавилось кое-что ещё. Теперь аппарат умеет работать с видеокамерами (правда, всего лишь как монитор, про то, что за устройства используются для видеонаблюдения на транспорте, расскажу в другой раз), а также выполнен в совершенно другом исполнении, куда более соответствующем автомобильной промышленности.
Что интересно, ни одного фото, где такой девайс стоит в кабине, я не нашёл. То ли они не получили такого распространения, то ли причина в чём-то другом.
❯ Обзор оборудования
Достался этот девайс мне совершенно случайно: на вторичке попалось объявление о продаже целой кучи таких абсолютно новых, причём по очень молодёжной цене. Сразу заказал пару штук, интереса ради.
Итак, поставляется прибор вот в такой коробке.
Ну, или вот в такой.
Сбоку такие наклейки.
В коробке сам девайс, инструкция, жгут, кронштейн и держатель предохранителя.
А вот и прибор.
С первого взгляда его довольно легко спутать с дешёвым китайским навигатором.
Но довольно специфический разъём на задней части даёт понять, что перед нами что-то интересное.
Снизу аудиоразъём, кнопка Reset и корпусные саморезы, один из которых закрыт пломбой.
Под крышечкой разъёмы для симки, карты памяти microSD и microUSB для настройки и перепрошивки.
На конце куча зачищенных проводов и разъём RCA для подключения аналоговой видеокамеры.
Тангента. Если в «Орбите» использовалась таковая от рации Motorola, то тут своя разработка.
Помимо микрофона используется она и как пульт: сенсорного экрана у устройства нет.
Сбоку кнопка SOS.
Подключается она через вот такую коробочку. Внутри неё ничего интересного — переходная плата с двумя разъёмами, и всё.
Как и многие другие отрасли, мониторинг транспорта не обходится без изоленты. Правда, почему-то чёрной, а не синей.
Ответная часть от разъёма. Модель её — AMP 953122.
Тип и серия таких коннекторов мне неизвестны, но могу сказать, что это весьма специфический соединитель, разработанный специально для использования в автомобильной промышленности. Точно такие же видел на немалом количестве блоков от разных авто.
Кронштейн и крючок для тангенты.
Держатель предохранителя, при помощи которого предполагается подключать девайс к бортовой сети.
❯ Итак, оно не работает
Ну что же, попробуем запустить наш девайс.
Здесь мы видим первое отличие от ранее рассмотренных приборов: если в тех надо было просто подать питание, то тут девайс активируется при наличии напряжения на дискретном входе зажигания.
Сделано это специально для того, чтобы при заглушенном двигателе прибор автоматически выключался. На автотранспорте этот провод подключается после замка, на трамваях и троллейбусах — к реверсу или выключателю управления или низковольтных цепей.
Итак, подключаем БП: красно-синий и красный провод к плюсу, чёрный к минусу. Серо-красный и серо-зелёный (+5 В для камер) и красно-белый (выход +12 В) изолируем, чтобы ничего не закоротить. Подаём питание — ничего не происходит. Девайс упорно прикидывается кирпичом и не реагирует ни на нажатие кнопок, ни на постукивание об стену.
❯ Первый запуск
С одним не повезло. Но мы же помним, что таких приборов я взял пару?
Со вторым экземпляром мне повезло больше. Он успешно загрузился и даже пустил в меню.
В целом это меню очень похоже на то, что мы видели на девайсах прошлых поколений. Похоже, его структура стандартизирована.
Служебные сообщения.
Выбор маршрута автоинформатора.
Настройки и сведения о системе.
❯ Внутренности
Второй девайс оказался живым. Но что же там с первым? Самое время заглянуть внутрь.
Откручиваем саморезы, отщёлкиваем защёлки и разбираем девайс. Разделять половинки надо очень аккуратно, так как шлейф матрицы очень тонкий и короткий и легко обрывается.
Матрица имеет маркировку HV070WSA-100. Это LVDS-дисплей с разрешением 1024*600.
Вообще, при виде этого устройства ожидаешь увидеть внутри начинку типичного GPS-навигатора (возможно, на Android или WinCE), но на самом деле внутри всё куда проще и одновременно интереснее. Вся электроника разместилась на плате довольно скромных размеров, расположенной на задней крышке.
Из других компонентов хорошо видны конденсатор по питанию, динамик, аккумулятор, антенна сотового модема.
Аккумулятор LP603449LC-PCM-LD/-A17623 1100mAh. За годы хранения он успел выйти из строя и вздуться.
Оно и неудивительно: аппарат лежал без дела больше девяти лет.
3G-модем Telit UL865-EUR.
Салонный усилитель TDA8932BTW.
Обратная сторона платы.
Здесь расположились разъёмы и цепи питания. Справа виднеется керамическая спутниковая антенна.
Под средним экраном находится видеопроцессор Intersil TW8834.
Как видно из даташита (к сожалению, доступен только урезанный, нормальный есть лишь под NDA и нигде не слит), этот чип обрабатывает композитный видеосигнал и выводит его на дисплей с интерфейсом RGB или LVDS.
Также в даташите упоминается некий «Font Based On Screen Display», отчего логично предположить, что отрисовкой уже ранее виденных нами меню занимается не управляющий микроконтроллер, а этот же чип.
К слову, о контроллере.
Под последним экраном скрываются ещё два чипа: EN71NS128C0 и STA8088EXG. Первый из них — это многокристалльная микросхема памяти (128 Мбит Flash и 64 Мбит ОЗУ). А вот второй интереснее — это специализированный чип GPS-приёмника на базе ARM9. Как говорит сам производитель, предназначен такой контроллер специально для построения на его базе различных трекеров и систем телематики.
Рядом две микросхемы в SOIC-8. Это SN65HVD22DR, драйверы RS-485.
И, наконец, CC2540, модем Bluetooth.
❯ Прошивка
С элементной базой разобрались. Проверка мультиметром показала, что все напряжения питания поднимаются, а коротких замыканий нигде нет. Это давало надежду, что аппаратных проблем в устройстве нет. Попробуем его перепрошить.
Подключаем девайс с компьютеру. Прибор определяется, причём даже не как неопознанное USB-устройство. Уже неплохо.
Заливаем прошивку, и аппарат внезапно оживает. Но радость была недолгой, дальше заставки загрузка не шла.
А это лог загрузки, который прибор посылает в COM-порт. Как видно, девайс пробует загружаться, но после этого что-то происходит и приложение вылетает.
❯ Так что же с ним не так?
Проведя несколько опытов, смог всё же заставить этот прибор включиться. Для этого надо было подключить девайс кабелем к компьютеру, подать питание, дождаться появления заставки, после чего отключить его от ПК, жмякнуть Reset и наблюдать успешную загрузку. Странно, очень странно.
На этом все мои предположения насчёт природы этого глюка исчерпались, поэтому пришлось применить звонок другу. У «Сантэл-Навигации» оказалась очень хорошая поддержка (вот прямо огромное уважение им за это), вместо требования прислать официальный запрос на бланке предприятия или обратиться в сервисный центр мне было сообщено, что если перепрошивка проблему не решила, то, скорее всего, дело в помершем аккумуляторе.
Отпаял плату защиты аккумулятора, подкинул живую ячейку. После подключения девайс наконец заработал. Отлично!
Ещё скриншоты интерфейса
❯ ОС
Я встречал упоминания, что прибор этот работает на Linux, но, судя по тому, что я увидел внутри, здесь используется скорее какая-то RTOS.
В РЭ в качестве ОС указана некая «OS20+». Скорее всего, речь тут идёт про OS20, проприетарную RTOS от STMicroelectronics, на базе чипа от которой и построен этот девайс.
❯ Что же в итоге?
Как видно, этот девайс, несмотря на схожее назначение, оказался совершенно другим, причём намного более простым, чем я ожидал. Довольно неожиданно было встретить проблему с аккумулятором, больше свойственную телефонам и планшетам, чем подобным устройствам. К слову, более древние экземпляры прекрасно работали без батареи вообще. Также аппарат в своей новой версии оказался собран на компонентах, изначально предназначенных для использования на автотранспорте, а многие косяки предыдущих моделей были в нём исправлены. Но, к сожалению, судя по вот таким комментариям, особой надёжности ему это не добавило.
Также у меня были идеи, что на каком-то транспорте, отличном от коммерческого, этот девайс можно использовать как GPS-трекер и монитор камер заднего вида. Но, к сожалению, низкая частота кадров (порядка 2 Гц) делает это невозможным.