Сенсор присутствия: корпус и три платы

На этот раз делаем сенсор присутствия для опасных промышленных зон. В нагрузку берёмся за реализацию требований функциональной безопасности PL и SIL. Кто сказал, что AI не может делать функционально безопасные устройства? Сейчас проверим.

Мой предыдущий проект был достаточно простым. Но таки осталось чувство некоторой избыточности работы. И да, я понял, что меня тормозило. Тормозил старый шаблонный подход и использование коммерческих инструментов. Это были Altium, таблицы Excel, SolidWorks. Все они навязывали свой пользовательский интерфейс со своим представлением о рабочих процессах. Внезапно времена поменялись, и рабочие процессы вместе с ними.
Я открыл скрытый потенциал KiCAD и FreeCAD.

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

Теперь сенсор объединяет радар, многозонные ToF-датчики и ИК-термометры. Эти каналы наблюдают разные признаки: движение и микродвижения, объём над фоном пустой сцены и тепловое пятно. Объединение оценок и окончательное решение о присутствии принимает алгоритм прошивки.

Архитектура системы

Архитектуру разработал AI после обсуждения моих ограничений. Ограничений было много. Главным ограничением была цена. Вторым ограничением была простота технологического процесса изготовления. Т. е. покупаем на LCSC и делаем на JLCPCB. Минимум дополнительных сложных конструктивных элементов типа линз и рефлекторов. Дальше была доступность комплектации. Потом ремонтопригодность. Удобство диагностики. Модульность и автономность. Работа от −20 °C. Иммунитет к EMI и т. д. и т. п.

Структурная схема сенсора присутствия для опасных промышленных зон
Структурная схема сенсора присутствия для опасных промышленных зон

На диаграмме показаны функциональные блоки и их связи:

  • PS_Power_v1: вход 24 В, DC/DC 5 В, служебный CAN-трансивер, внешний сторож и реле с контролем обратной связи.

  • PS_Logic_v1: STM32H743, радар BGT60TR13C, IMU, микрофон, Flash, криптографический сопроцессор, microSD, ESP32-C6 для служебного Wi-Fi, USB и SWD. Питание — через BQ25185 с power path и SY8089; предусмотрен Li-ion 1S.

  • Две PS_ToF_v1: на каждой VL53L8CX и MLX90632, подключённые к своей шине I2C. ToF и ИК одной платки разделяют шлейф и шину; это не четыре полностью независимых тракта.

Ах да, забыл: нам же еще нужно обеспечить определенный уровень PL/SIL

Риски анализирует сам разработчик. Смотри, например, Machinery Regulation (EU) 2023/1230, Annex III → Part B → General principles → пункт 1 — "manufacturer shall ensure that a risk assessment is carried out."

Вот карта рисков, которые я увидел и с которыми решил бороться.

Карта рисков, защитных мер и границ защиты сенсора
Карта рисков, защитных мер и границ защиты сенсора

Если на диаграмме слишком мелко, то вот десять сценариев:

  1. Пропуск человека, неподвижной цели или цели в слепой зоне.

  2. Общие внешние воздействия: засветка, загрязнение, запотевание.

  3. Сбои МК и ПО: самодиагностика ядра/памяти и зависание при продолжающейся работе таймеров.

  4. Застывший управляющий вывод или пробой ключа реле.

  5. Сварка рабочего контакта реле.

  6. Обрыв или замыкание межплатных соединений.

  7. Нарушения питания и электромагнитные помехи.

  8. Слишком позднее снятие разрешения.

  9. Изменение положения сенсора, удар или намеренный разворот.

  10. Подмена прошивки и отключение диагностических механизмов.

Схемы нового поколения

Электроника сенсора состоит из трех проектов KiCad:
- плата питания и релейного выхода,
- плата процессора,
- выносная платка ToF/ИК, которых в сенсоре две.

Платы соединяются шлейфами. Все схемы созданы AI. Я только слегка перемещал компоненты, чтобы было более эстетично.

Стоит оценить, как AI разжёвывает, что и для чего стоит. Я такого на схемах никогда не видел. И кто говорит, что AI умеет только воспроизводить уже сделанное?
Хотя, если по-честному, то схемы такие AI создал не сразу: около десятка раз приходилось указывать на ошибки. Но все же способность AI быстро распределять сигналы на таких замороченных в плане мультиплексирования функций чипах, как STM32, просто завораживает. И это не всё. Он потом уже в процессе трассировки сам перекидывал сигналы на пинах микроконтроллера, чтобы упростить трассировку!

Плата питания и релейного выхода

PS_Power_v1 принимает 24 В и выдаёт наружу релейный сигнал разрешения работы. Вход защищён полимерным предохранителем 1,1 А, ключом от переполюсовки на P-канальном полевом транзисторе и TVS-диодом SMAJ33A. Понижающий преобразователь XL1509-5.0 даёт 5 В (до 2 А) этой плате и по шлейфу — плате процессора. Служебный CAN сделан на ATA6563 с защитой PESD2CAN; разделённую терминацию включает DIP-переключатель.

Катушка реле HFA2 стоит между двумя ключами. Верхний, P-канальный, открывает сигнал RELAY_EN. Затвор нижнего, N-канального, заряжает двухступенчатая накачка от меандра RELAY_PULSE, поэтому застывший уровень на выводе микроконтроллера катушку не удержит. Когда импульсы прекращаются, реле отпускает примерно за 16 мс. Внешний оконный сторож TPS3430 своим выходом прямо опускает затвор нижнего ключа; прошивка обязана дёргать его вход не чаще раза в 120 мс и не реже раза в 710 мс. Затвор микроконтроллер читает через 1 МОм: срабатывание сторожа видно, а управлять затвором нельзя. Зеркальный NC-контакт реле читается напрямую, напряжение внешней цепи безопасности снимается через два последовательных резистора по 49,9 кОм.

Плата питания: преобразователь, сторож, реле и служебный CAN
Плата питания: преобразователь, сторож, реле и служебный CAN

Я слегка опешил от такого решения и сказал проверить. И AI проверил. Он нарисовал мне модель в ngspice, встроенном в KiCad 10. Схема снята с листа без изменений, вместо микроконтроллера и питания — источники, модели транзисторов и диодов составлены по даташитам. При меандре 10 кГц на затворе 3,3 В, ток катушки 29 мА. После последнего импульса ток падает ниже уровня отпускания за 6,8…9,9 мс, к этому добавляется до 10 мс механики реле.

Модель драйвера реле для моделирования в ngspice
Модель драйвера реле для моделирования в ngspice

Плата процессора

У PS_Logic_v1 четыре листа схемы — питание, микроконтроллер, датчики и связь.

  • Питание. Зарядка с power path BQ25185 стоит между шиной 5 В и преобразователем SY8089 (3,3 В, 2 А), поэтому сенсор может работать от одной ячейки Li-ion. LDO RT9013 даёт 1,8 В радару; когда радар не нужен, микроконтроллер снимает эту шину целиком. Делители контроля 24 В, 5 В, внешней цепи и аккумулятора стоят у входов АЦП.

  • Микроконтроллер STM32H743VIT6, развязка по DS12110 и AN4938. Ёмкости кварцев пересчитаны по AN2867, часовой кварц взят с CL = 6 пФ: у прежнего почти не оставалось запаса по усилению генератора. Отладка — SWD на разъёме 2 × 5 с шагом 1,27 мм; ещё на листе три светодиода и DIP-переключатель адреса узла и старта из загрузчика.

  • Датчики. Радар BGT60TR13C питается от 1,8 В, у каждого его домена питания свой ферритовый фильтр, как в руководстве Infineon UG091722. С SPI микроконтроллера (3,3 В) его связывают два преобразователя уровня SN74AVC4T245. По предельным задержкам SPI сходится до 41 МГц, во всём диапазоне температур гарантированно — 25 МГц. Здесь же IMU LSM6DSV16X на своей шине SPI, флеш W25Q128 для журнала, криптоэлемент ATECC608B на отдельной шине I2C, PDM-микрофон IM69D130 и два разъёма шлейфов платок ToF — на I2C1 и I2C2.

  • Связь. USB-C с защитой USBLC6, microSD с ключом питания TPS22919 (зависшую карту возвращает к жизни только снятие питания) и модуль Wi-Fi ESP32-C6 по SDIO с выводами для его прошивки через UART.

Плата процессора: питание, аккумулятор и контроль напряжений
Плата процессора: питание, аккумулятор и контроль напряжений
Плата процессора: STM32, память, криптография и разъёмы ToF
Плата процессора: STM32, память, криптография и разъёмы ToF
Плата процессора: радар, IMU, микрофон и их питание
Плата процессора: радар, IMU, микрофон и их питание
Плата процессора: служебный Wi-Fi, USB и microSD
Плата процессора: служебный Wi-Fi, USB и microSD

Выносная платка ToF и ИК

У PS_ToF_v1 один лист. VL53L8CX работает по I2C; его питание AVDD коммутирует ключ TPS22919, 1,8 В даёт RT9013. LSF0204 согласует I2C, LPn и INT между 1,8 и 3,3 В. Без питания выводы LSF0204 в высоком импедансе, и выключенная платка не подпитывается через подтяжки платы процессора. MLX90632 питается всегда и сидит на той же шине I2C, на стороне 3,3 В. Разъём шлейфа 2 × 5 разведён симметрично относительно поворота на 180°: перевёрнутая розетка ничего не замыкает, платка просто не отвечает.

Платка ToF и ИК: VL53L8CX, MLX90632, питание и преобразователи уровней
Платка ToF и ИК: VL53L8CX, MLX90632, питание и преобразователи уровней

Печатные платы

Стек слоев печатных плат и технологические нормы AI прочитал сам на JLCPCB и вставил в проекты KiCAD. Контуры тоже сам AI нарисовал. Поэтому не спрашивайте меня, как работать в KiCAD. Я в нем практически не работал.

Плата процессора

70 × 25 мм, 6 слоёв, стек JLC06101H-3313 толщиной 1,03 мм. F.Cu и B.Cu — сигналы и детали, In1 и In4 — сплошная земля, In2 — сигналы с заливкой земли, In3 — питание: заливка +3,3 В, шина +5 В и дорожки 1,8 В к доменам радара. Все переходные — 0,3/0,45 мм; на 6 слоях переходные в площадках заливаются смолой и закрываются медью без доплаты. Плата разведена вручную с автоматической доводкой. Медные слои — в сравнении разводок в разделе о трассировке.

Плата логики в 3D-рендере KiCad, оборот вокруг вертикали
Плата логики в 3D-рендере KiCad

Та же плата в трассировке лучей KiCad: дорожки видны под маской. Плата стоит радаром вверх, как в корпусе, и делает оборот за 12 с.

Плата питания и релейного выхода

70 × 40 мм, 2 слоя, 1,6 мм. На F.Cu — все детали, почти вся разводка и заливка земли, на B.Cu — земляной полигон с короткими перемычками. Силовые контуры преобразователя XL1509 сделаны полигонами на F.Cu, горячий контур около 6 × 7 мм лежит на одном слое. Дорожки цепи безопасности — не тоньше 0,6 мм, с зазором 0,5 мм до любой другой цепи. Плату развёл автотрассировщик, затем она доведена вручную. За петлю токов DC/DC волноваться не надо. AI сам мне сказал, как ее правильно трассировать и чтобы я не прововал рядом с ней вести сигналы.

Плата питания: оба медных слоя
Плата питания

PS_Power_v1: два слоя, F.Cu и B.Cu.

Плата питания в 3D-рендере KiCad, оборот вокруг вертикали
Плата питания в 3D-рендере KiCad

Плата питания стоит клеммниками вниз; самая крупная деталь на ней — реле HFA2.

Выносная платка ToF и ИК

18 × 11 мм, 4 слоя, 1,0 мм, детали с двух сторон. In1 — сплошная земля, In2 — сигналы и заливка +1,8 В. MLX90632 стоит на «полуострове» за прорезью, а через перешеек над прорезью заливка внешних слоёв не идёт: так датчик температуры меньше греется от VL53L8CX (до 215 мВт) и LDO. Платку развёл автотрассировщик.

Платка ToF и ИК: все четыре медных слоя
Платка ToF и ИК

PS_ToF_v1: четыре слоя, F.Cu, In1.Cu, In2.Cu, B.Cu; В сенсоре используются две одинаковые платки, поэтому достаточно одного изображения их разводки.

Платка ToF и ИК в 3D-рендере KiCad, оборот вокруг вертикали
Платка ToF и ИК в 3D-рендере KiCad

Платка повёрнута MLX90632 вверх, VL53L8CX стоит на той же стороне ниже. На обратной стороне — штыревой разъём шлейфа 2 × 5.

Как устроены расстановщик и трассировщик

KiCAD был выбран из-за открытости его API и текстового формата исходников. Попытка делать автоматизацию в Altium окончилась неудачей. Привет бинарным форматам.

Поначалу была идея взять некие плагины для KiCAD для автотрассировки и использовать их каким-то образом. Но нет, AI таким путем не идёт. Ему легче самому написать автотрассировщик и авторасстановщик. И он это сделал.

Алгоритмическая основа трассировщика — известные алгоритмы A* и PathFinder. Не советую использовать всякие трассировщики online. В режиме диалога AI сделает гораздо эффективней.

Расстановка. Сначала скрипт, созданный AI, по заданному плану последовательно ставит обвязку рядом с нужными выводами микросхем. Перебираются позиции на сетке, разрешённые стороны платы и повороты; выбирается ближайший допустимый вариант либо вариант с меньшей суммой длин связей. Проверяются периметры компонентов, запретные зоны и отступы. Крупные узлы и разъёмы задаются заранее. Затем скрипт раздвигает тесно стоящие детали: отталкивание при недостаточном зазоре, слабое притяжение к исходной позиции и привязка к сетке.

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

Трассировка. Другой скрипт ищет путь по сетке в восьми направлениях с переходами между слоями. Алгоритм A* учитывает длину, цену слоя, переходных и препятствий. PathFinder разрешает конфликты: занятые несколькими цепями области дорожают, цепи перекладываются повторными проходами. После этого еще один скрипт спрямляет дорожки до отрезков 0/45/90° и проверяет зазоры по точной геометрии.

Трассировка платы логики с нуля: запись настоящего прогона
Трассировка платы логики с нуля: запись настоящего прогона

Причем AI вычислил, какие операции трассировки самые затратные по времени, и реализовал их на C. Скомпилировал и подключил к скриптам в виде dll.

Сравнение: автоматическая и полуручная разводка платы процессора

В один момент у меня кончился лимит, и я день просидел без AI. Решил по старой памяти руками потрассировать. И вот что получилось.

Результат автоматической трассировки:

Плата логики до ручной переразводки

Результат ручная трассировки с автоматической доводкой:

Текущая плата логики: ручная разводка с автоматической доводкой

Количественное сравнение:

Показатель

Автоматизированный вариант

Ручной + доводка

Изменение

Переходные отверстия, шт.

450

391

−59 (−13,11 %)

Общая длина дорожек, мм

2 721,384

2 622,039

−99,345 (−3,65 %)

Отрезки дорожек, шт.

2017

1656

−361

Площадки, шт.

696

696

0

Несоединённые связи

0

0

0

Переходных я сделал меньше на 13 %. Но тут надо учитывать, что человек при трассировке плохо нативно чувствует кросс-связи сигналов. Не факт, что, уменьшив переходные и увеличив протяженность параллельных участков, я не ухудшил характеристики сигналов. Длину-то дорожек я почти не сократил.

Геометрия полей зрения сенсоров

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

Разрез: вертикальные поля зрения радара, ToF и ИК
Разрез: вертикальные поля зрения радара, ToF и ИК
Корпус сенсора с платой процессора и двумя платками ToF, полупрозрачный
Корпус сенсора с платой процессора и двумя платками ToF

Корпус мы с AI нарисовали в FreeCAD часа за два. Получилось интересно.

Вот как описывает это творение AI:
Корпус — вертикальная призма, наклонные участки только у окон. Радом радара — дно местного углубления в лицевой грани: поликарбонат 1,5 мм параллельно плате ровно в 5 мм от радара (два полуволновых промежутка на 60 ГГц). Окна ToF — два скоса по нижнему ребру, каждый параллелен своей платке: внутреннее окно 1 мм стоит в 0,5 мм от VL53L8CX. Поверх скосов — пластины 0,3 мм в кармане заподлицо. Над MLX90632 в них вставка из HDPE: поликарбонат и стекло в диапазоне 8…14 мкм непрозрачны. Задняя часть корпуса с платами уходит в вырез стены и крепится с обратной стороны.

Уф..., ну человек еще был нужен в этом процессе. Пока нужен ...

Комментарии (19)


  1. Void-Cowboy
    02.10.2026 06:45

    интересная статья

    у меня немного прикладной вопрос - много слышу про FreeCAD в последнее время но как его не открою (если текущая версия вообще запускается то) то какая-то шляпа
    на чем именно вы запускали если не секрет?


    1. Brazil Автор
      02.10.2026 06:45

      FreeCAD я скачал из перевой ссылки Google.
      В самом FreeCAD не работал. Агенты как-то его самостоятельно крутят, открывают окна, что-то там делают. Дописывают скрипты.


      1. Void-Cowboy
        02.10.2026 06:45

        ааааааааа

        тогда уж и блендер подойдет

        дивный новый мир)))


    1. Grad6
      02.10.2026 06:45

      старенький ноут с вин10. отлично идет.


    1. olartamonov
      02.10.2026 06:45

      Раньше он действительно был ужасен тормозами и падениями, но последние версии, после 1.0, вполне работоспособны (хотя и причиняют боль достаточно регулярно). В общем, ставьте 1.1.x.


  1. progchip666
    02.10.2026 06:45

    Забыли упомянуть в статье какой ИИ использовали или я читал невнимательно?


    1. Brazil Автор
      02.10.2026 06:45

      В основном Claude Opus 5.5
      Fable 5.1не сильно умнее было, но сильно дороже.
      У GPT 6 Astra тоже не заметил решающего преимущества перед Opus 5.5


      1. progchip666
        02.10.2026 06:45

        Спасибо за информацию.


      1. yva45
        02.10.2026 06:45

        Я так понял вы не cloude план использовали (типа там max 20x), а какой-то сервис с оплатой за токены? Если не секрет, во сколько токенов/денег обошлось?


        1. almaz_emb
          02.10.2026 06:45

          Присоединяюсь к вопросу.

          Есть ли финансовый профит от использования зарубежного искусственного интеллекта вместо отечественного замкадовского естественного интеллекта?

          Навскидку, три платы по 2, 4 и 6 слоев плюс корпус мой фрилансер спроектировал бы часов за 40, не более. При ставке 1.2к вышло бы до 48к рублей.

          P.S. То, как прогрессируют ИИ конечно впечатляет. Погуглил для интереса, возможно ли подобное для связки Deepseek + Altium. Как будто бы реализуемо: дипсиком разработать плату в кикаде, а потом импортнуть в Альтиум?


  1. progchip666
    02.10.2026 06:45

    Получилось интересно

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


    1. Brazil Автор
      02.10.2026 06:45

      В Китае выходные 4 дня. Поэтому проект еще не сдал в производство.
      Когда сделают, напишу.


      1. progchip666
        02.10.2026 06:45

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


        1. RezonanS1
          02.10.2026 06:45

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


          1. progchip666
            02.10.2026 06:45

            Спасибо, я искал местный посредников и все они показались мне какими то мутноватыми. Посмотреть на Али не догадался!


  1. progchip666
    02.10.2026 06:45

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


  1. Radon17
    02.10.2026 06:45

    Подскажите пожалуйста какой MCP использовался для рисования схем.


  1. Ampfinion
    02.10.2026 06:45

    Тоже очень интересны результаты испытаний.

    Похоже, что разработчики станут ненужными значительно быстрее, чем казалось.

    Из критики схемотехники: сразу бросилось в глаза прямое управление (разряд) затвором от логического выхода сторожевика. Да, у этого транзистора ёмкость затвора 32 пФ – это не существенно и работать будет. Но если такое переносить на более мощные полевики, то надо учитывать, что бы не выбить выход сторожевика (20 мА) энергией затвора. Не просто так для мощных полевиков драйверы имеют выход на единицы ампер.

    При отработке первого экземпляра, обратите внимание на работу АЦП МК при изменении состояния светодиодов, подключенных непосредственно к портам этого МК. На некоторых STM32 замечено влияние.

    Кстати, ещё бы провести анализ по возможности сокращения номенклатуры элементной базы. В серии позволяет сильно снижать цену.


  1. svpcom
    02.10.2026 06:45

    А как делались связка claude с KiCAD и FreeCAD? Писался MCP сервер? Как claude получал и парсил картинки от них? Можно поподробнее рассказать про процесс настройки нейронки - про то какие использовались промпты, доп. модули, скиллы и тд?