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

Сам пользуюсь сейчас LibrePCB, и вот в комментариях видел вопрос: а где брать компоненты для LibrePCB, если их там не нашлось?
Создать, конечно!

Создание нового компонента только на первый взгляд кажется сложным. но на самом деле всё довольно просто, если понять логику, как это там делается.
Например, нужно создать компонент модуля понижения напряжения DCDC:

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

Открываем Library Manager, создаем новую локальную библиотеку, и заходим в ее редактирование:
Нас встречают аж 6 разделов: Component categories, Symbols, Component, Package Categories, Packages, Devices.
И в каждой из них можно что‑то создавать (Ctrl‑N).

На самом деле всё просто: первые три отвечают за изображение на схеме, вторые три — на плате.
Каждая группа — «категория девайса, тип, и конкретика».

Component categories, внезапно — категории компонентов: в программе уже есть базовые категории, типа «транзисторы», «резисторы» и тому подобное, но можно создавать свои.
Например, вот этот самый модуль — он явно не относится ни к дискретным элементам, ни к микросхемам, и на development board тоже не тянет.
Поэтому можно создать специально для подобных категорию Modules. При создании там будет поле Root category — с его помощью можно строить иерархию категорий, но в данном случае можно оставить его пустым, и тогда будет создана корневая категория Modules.

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

Symbols — отвечают за изображение элементов на схеме. Если бы это был уже известный элемент, какой‑нибудь транзистор — не нужно было бы создавать новое изображение, но у нас новый модуль.
Тут также есть поле Category — к какой категории он будет относиться: кроме встроенных теперь там будет и наша новая категория Modules.

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

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

Следующий блок — footprint, проекция компонента на печатную плату.
Аналогично схемам — Package Categories — категория элементов.
Снова смотрим что есть, подходящего не находим — создаем Modules (но это категория для плат, а не для схем!).

Packages — самый важный этап, здесь задаем рисунок на плате: выводы, схематическое отображение размеров.
Рисовать не сложнее, чем в клетчатой тетради. Размер клетки регулируется, в том числе можно менять единицы измерения: mil или mm.

Дело в том, что почти вся электроника измеряется в mil, это дюймовая система.
Например, шаг стандартной гребенки штырьков — 100 mil, примерно 2.6 mm.
Шаг выводов микросхем, контактов реле, и многого всего другого — тоже так или иначе кратно mil: 50, 100, 200, 300...
Но при этом, поскольку Китай — страна метрическая, а плата модуля китайская — иногда бывает удобнее переключить сетку в mm, чтобы не ловить 787.4 mil, а просто взять 200 mm.

Процесс несложный: смотрим на плату модуля, измеряем расстояния между контактными отверстиями, переводим их в mil — и расставляем по сетке контактные площадки.
Для перевода достаточно умножить миллиметры на 39.37 и потом округлить в какую‑нибудь сторону до ближайшего «красивого» числа: например, те же самые 2.6 мм превращаются в 102.36, но таких размеров не бывает, бывает 100, а ошибка — явно результат неточности измерений.

И наоборот, если пересчет в mil дает разультат типа 787.40 — ближайшие «красивые» числа будут 750 и 800, ни то ни другое при обратном пересчете в mm явно не соответствует реальности, а значит тут скорее всего метрические 20 mm.

Для упрощения расчетов сделал себе скриптик: ввел mm — получил в mil:

#!/usr/bin/perl

print "Enter mm and press ENTER:\n> ";

while(my $str = <>){
  if($str =~ /([\d\.]+)/){
    my $mil = $1 * 39.37;
    printf("%.02f -> %.02f\n", $1, $mil);
    print "> ";
  }
}

После того как печатная проекция нарисована — создаем устройство в Devices: условно говоря, в одном и том же размере могут быть разные устройства, точно так же как в корпусе TO-92 могут быть разные транзисторы, микросхемы и так далее.
При создании устройства указывается, к какой категории оно относится, какой Symbol используется на схеме и как оно выглядит на плате.
Всё, теперь модуль можно добавлять в схему, и он появится при размещении ее на плате.

Точно такой же принцип — создание «реле»: ищем или создаем категории «Electromechanic devices», рисуем схематическое изображение «реле такого типа», потом создаем компонент «конкретно такое реле», потом изображаем его «на плате», и в итоге создаем device, которому соответствует конкретная схема и конкретная проекция на плате.

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