Сообщество - TECHNO BROTHER
Добавить пост

TECHNO BROTHER

1 633 поста 12 506 подписчиков

Популярные теги в сообществе:

Аксессуар созданный командой Zackees помогает велосипедистам сигнализировать о поворотах другим участникам дорожного движения

Источник: Наука и Технологии

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля?

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост



Статьи про инди-разработку игр — это всегда интересно и занимательно. Но статьи про разработку игр с нуля, без каких-либо игровых движков — ещё интереснее! У меня есть небольшой фетиш, заключающийся в разработке минимально играбельных 3D-демок, которые нормально работали бы даже на железе 20-летней давности. Полтора года назад, в мае 2022 года, я написал демку гоночной игры с очень знакомым всем нам сеттингом — жигули, девятки, десятки, и всё это даже с тюнингом! В этой статье я расскажу вам о разработке 3D-игр практически с нуля: рендерер, менеджер ресурсов, загрузка уровней и граф сцены, 3D-звук, ввод и интеграция физического движка. Интересна подробнейшая статья формата "старого Пикабу" о разработке игры с нуля? Тогда добро пожаловать!

❯ Предыстория


На момент написания статьи, я всё ещё остаюсь достаточно юным — буквально 5 дней назад мне исполнилось 22 года. Но если откатиться на 4 года назад и вспомнить момент наступления моего совершеннолетия, то на ум приходят сразу два значимых события: отец приходит в один день и говорит «открывай юлито, будем смотреть авто за 40 тыщ рублей». Понятное дело, что за эту сумму (~700$ по тому курсу) особо не разгуляешься, поэтому мой выбор пал на карбюраторную «семерочку», свою ровесницу (2001 год) синего цвета. Приехали с батькой смотреть на машину, обкатали и приняли решение — надо брать!

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост



С тех пор я ездил на своем «тазе» и горя не знал — машинка не ломалась, ни разу не подводила, вложений в себя не требовала, а я начал все больше увлекаться автомобилями и изучать тематический материал. Со временем я полюбил и другие российские модели автомобилей, но особенно мне нравился АвтоВАЗ. В один момент, вспомнив про популярный и провальный некогдаLada Racing Club, мне захотелось написать «гоночки на жигулях» самому, причём полностью с нуля. А поскольку нормального арта для города у меня не было, игру я решил назвать просто и понятно: «Ралли-кубок ТАЗов» :)

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост


Поём всем Хабром!

Но с чего начинать писать такой объемный проект самому? Тут нам, конечно же, нужен план. У меня уже был готовый самопальный 3D-фреймворк для игрушек, который я использовал в одной из прошлых демок: арена-шутер от первого лица с модельками из модов для Quake. Фреймворк был вполне рабочим, но требовал некоторой доработки для использования в «кубке тазов».

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост



На момент начала разработки гоночки у меня уже были готовы следующие фишки:

  • Рендерер: Direct3D9, причём полностью FFP — для того, чтобы игра запускалась даже на встройках Intel, где нормальной поддержки шейдеров до HD-серии вообще не было. Практически все текстурные техники работали через комбайнеры — дальний предок пиксельных шейдеров, где программист оперировал целыми стадиями пиксельного конвейера, а не писал программу напрямую, что накладывало множество ограничений. Поддерживались: многослойные материалы, однопроходной сплат-маппинг для плавного текстурирования ландшафтов, отражения в кубмапах, плавный морфинг (вершинная анимация) с линейной интерполяцией между кадрами, MSAA (это заслуга GAPI), отсечение невидимой геометрии по пирамиде видимости и примитивный альфа-блендинг с ручной сортировкой.

  • Звук: 3D-звук на DirectSound с позиционированием относительно источника звука, ускорением и т. п. Тут моей заслуги особо нет, кроме загрузчика wav-файлов я ничего не писал.

  • Ввод: WinAPI + DirectInput. Клавиатура опрашивалась с помощью классического GetAsyncKeyState, в то время как геймпады с помощью DirectInput. Была и абстракция осей ввода — дабы не адаптировать управление под кучу разных контроллеров.

  • Менеджер ресурсов: достаточно примитивен. К менеджеру ресурсов я отнесу и загрузчики — фреймворк поддерживал модели в форматах SMD (не анимированные меши, формат Half-life) и MD2 (анимированные меши, формат Quake 2, строго один материал на один меш), звуки — wav и простенький самопальный формат конфигов. Стандартный набор: трекинг ресурсов на слабых ссылках, пул ассетов для исключения дублирующейся загрузки и т. п.


Фреймворк выдавал не слишком крутую графику:

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост



Зато был очень простым «под капотом», имел довольно неплохую расширяемую архитектуру и в целом, на нем можно было запилить что-то прикольное. Где-то за неделю я запилил вот такую демку шутера от первого лица:

Игрушка даже на VIA UniChrome работала — последователе всем известного S3 Savage/S3 Virge!

Минимальное приложение выглядело примерно так:

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост

Приведённый выше код нарисует модельку с текстурой перед лицом игрока. Всё просто и понятно. Однако, как это всё работает «под капотом»? Давайте попробуем разобраться:

❯ Основа и рендерер


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

Game.Initialize(new GameApp());

Game.Current.Run();

Как я уже говорил выше, сам по себе рендерер построен на базе графического API Direct3D9. Выбор DX9 обусловлен его распространенностью на железе прошлых лет, хорошей совместимостью (DX9 легко запускается на железе времен DX8 и даже DX7) и иногда лучшей производительностью на видеочипах от ATI. По сути, всё начинается с создания контекста или устройства в терминологии DirectX: в параметрах создания контекста указывается ширина и высота вторичного буфера, желаемый уровень сглаживания MSAA, видеорежим и частота желаемая частота обновления экрана.

https://pastebin.com/uba62bhu

При создании контекста есть свои нюансы, которые необходимо учитывать — например, большинство встроенных видеокарт не поддерживают аппаратную обработку вершин (D3DCREATE_HARDWARE_VERTEXPROCESSING), из-за чего создание контекста будет заканчиваться ошибкой без соответствующего флага, разные видеокарты поддерживают разные форматы буфера глубины и трафарета (сейчас видеокарты нативно даже 24х-битный RGB для рендертаргетов не умеют использовать, только выравненный XRGB), а видеокарты до GF5xxx-GF6xxx не поддерживали Pure режим D3D, который предполагает, что программист возлагает всю обработку ошибок на себя, при этом количество проверок в самом GAPI уменьшается, благодаря чему мы получаем небольшой выигрыш в производительности.

Важно так же отметить такой аспект, как управление ресурсами. К ресурсам видеокарты в терминологии старых GAPI относятся текстуры и буферы (как вершинные, так и индексные). В OpenGL особо нет такого понятия, как Device Lost. Если пользователь сворачивает ваше приложение из полноэкранного режима, или, например, видеодрайвер крашится — то GL сам должен позаботится о перезагрузке ресурсов обратно в видеопамять (исключение — Android и iOS, на мобилках контекст не уничтожится, но ресурсы будут выгружены и их хендлы станут некорректными). У D3D есть событие Lost, которое вызывается при потенциальной потере контекста — и его тоже нужно грамотно обрабатывать. Поэтому в D3D есть несколько пулов:

  • Managed: D3D9 сам сохраняет копию текстуры или геометрии в ОЗУ, а затем при потере контекста пересоздаёт аппаратные буферы и перезагружает нужные данные сам.

  • Default: данные загружаются напрямую в видеопамять (в терминологии D3D — AGP memory), или, если видеопамяти не хватает — в ОЗУ, если видеокарта, конечно, поддерживает Shared Memory Architecture.

  • System: загрузка ресурсов только в ОЗУ. Этот пул обычно не используется в играх — слишком медленно.


И грузить данные желательно в пул Default. Иначе при относительно большом количестве ресурсов, игра начнет «жрать» ОЗУ не в себя (пример — Civilization 5). При потере контекста, ресурсы нужно перезагружать с диска «на горячую»!

Переходим к самому важному — отрисовке геометрии. Для задания внешнего вида объектов на экране, используются так называемые материалы, которые содержат в себе данные о том, какая текстура должна быть наложена на объект, насколько объект отражает свет, какая техника должна использоваться и т. п. В современных движках система материалов обычно гибкая, поскольку шейдеры могут принимать самые разные параметры. В нашем случае шейдеров нет вообще, набор параметров фиксирован и зависит от видеокарты: стандартные техники типа повершинного затенения по Фонгу/Гуро, цвет объекта, туман и т. п.

Формат материалов в фреймворке выглядит вот так:

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост

Однако даже без шейдеров была возможность сделать относительно гибкую систему материалов — с помощью комбайнеров, как это делала Quake 3. Самые первые 3D-ускорители не поддерживали смешивание нескольких текстур за один вызов отрисовки, поэтому некоторые игры шли на ухищрение: к примеру Quake вручную сортировал геометрию по отдаленности без использования буфера глубины, он просто… накладывал альфа-блендингом ту же самую геометрию с затененной текстурой освещения (лайтмапа). Это называется многопроходной рендеринг. Комбайнеры, которые появились ближе к концу 90-х, позволяли смешивать несколько текстур с помощью различных операций (Add, Sub, Mul, Xor и т. п.), а также умножать финальный цвет на определенный коэффициент. Именно комбайнеры я использовал в своём фреймворке для реализации некоторых относительно сложных эффектов — например, плавное смешивание текстур на ландшафте:

https://pastebin.com/X6vA76CU

Основная проблема комбайнеров — каша из стейтов, поэтому код выглядит не особо презентабельно. Входная текстура-маска выглядит вот так:

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост



Переходим к отрисовке. По сути, за рисование полигональной геометрии отвечает один метод — DrawMesh, с несколькими перегрузками (в идеале — основной должен принимать матрицу трансформации, а остальные принимать обычные World-space координаты, из которых будет построена матрица трансформации). В оригинале метод рисует геометрию с помощью DIPUP, поскольку практически вся геометрия в игре была анимирована (и анимация, само собой, обрабатывалась для каждой вершины софтварно, на ЦПУ, поэтому я не видел разницы между перезаливкой геометрии на GPU каждый кадр и DIPUP), однако в одном из бранчей фреймворка я переписал отрисовку статику на обычный DIP. Обратите внимание, что DIPUP для комплексной геометрии на старых GPU будет слишком медленным — когда-то этим страдал графический движок Irrlicht.

https://pastebin.com/L0GYCkmt

В более позднем бранче добавилось отсечение по дистанции от «глаз» игрока и по пирамиде видимости.

Переходим к анимации. Есть три основных метода анимации геометрии в играх:

  • Скиннинг: анимация вершин относительно скелета модели. Очень хорошо подходит для различных персонажей. Весь скелет является иерархией, где каждый элемент трансформируется относительно позиции родителя, что позволяет легко интегрировать «скелетку» в граф-сцены самого движка (Unity — самый яркий пример). Иногда скелетку используют и для «неоживленных» предметов — например, анимация подвески авто.

  • Морфинг: классический способ анимации суть которого заключается в «запекании» всех кадров в виде множества мешей. Затем игра интерполирует вершины между кадрами анимации, благодаря чему достигается эффект плавности.

  • Object-Transform: классический метод иерархической анимации, очень похож на скиннинг, только трансформируются не сами вершины, а привязанные к ним объекты. Применялась, например, во многих играх на PS1 и в GTA III (замечали отсутствие плавности в местах сочленений персонажей — это и есть OT).


Я не умею нормально работать с скиннингом моделей в 3D-редакторах и обычно не юзаю скиннинг в своих игрушках — для небольших демок хватает обычного морфинга с интерполяцией. Если интерполяцию не использовать, то анимация будет выглядеть топорно (в Quake 1 при отключении CVar'а такая и была):

https://pastebin.com/Y5r9eDAk

Работа с анимациями выглядела вот так:

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост

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

❯ Звук и ввод


Реализация звука в играх задача не шибко сложная, если дело не доходит до программной реализации микшера, 3D-позиционирования и различных эффектов. Большинству игр хватает обычного не-сжатого wav, звук в котором хранится в виде PCM-потока.

В качестве API для звука я выбрал DirectSound. Очень удобное API, хотя сейчас его фактически вытеснил XAudio. DirectSound поддерживает любые звуковые карты, сам занимается микшированием звука, а в некоторых старичках типа AC97 умеет даже аппаратное ускорение! На современных машинах обычно микширование реализовано полностью софтварно, дабы не упираться в количество каналов/память на борту звукового адаптера, но в прошлом это помогало снизить нагрузку на процессор.

В DirectSound есть два основных объекта: сам IDirectSound8, представляющий интерфейс к звуковой карте и управлению её ресурсами и буфер — который может быть подкреплен как собственными данными, так и данными из другого буфера. В играх, они делятся на три базовых понятия:

  • Слушатель: описание позиции и иных параметров «слушателя» — позиции ушей в игровом мире. Обычно позиция слушателя совпадает с позицией игрока.

  • Источник: описание источника звука в 3D-пространстве. Например, если мимо нас проносится машина, то звуковому API необходимо знать позицию, ускорение и дальность звука, дабы правильно скорректировать звук в пространстве.

  • Поток: поток, который содержит в себе звук. Может быть как обычным буфером, куда звук уже предварительно загружен, так и потоковым буфером, куда загружается часть музыки или другого длинного трека.


Переходим к реализации примитивного звука:

https://pastebin.com/jrG2iaiT

Теперь мы можем воспроизводить звуки в нашей игре!

Однако, нам нужно чтобы пользователь мог взаимодействовать с нашей игрой. Для этого в разных системах есть различные API для взаимодействия с устройствами ввода. В случае Windows — это DirectInput для обычных USB-геймпадов и рулей, и XInput для геймпадов, совместимых с Xbox 360/Xbox One. Нажатия с клавиатуры можно обрабатывать двумя способами: с помощью событий WM_KEYDOWN и WM_KEYUP и функции WinAPI GetAsyncKeyState.

Пока что мне нужна только клавиатура и мышь:

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост

В идеале обработку ввода лучше абстрагировать от физических устройств взаимодействия. Для этого вводятся понятия осей, кнопок действий и т. п. Желательно сразу продумать, как игра будет работать с геймпадом и уже затем назначать кнопкам на клавиатуре действия абстрактного геймпада.

Ну что ж, самый базовый фреймворк для игр у нас есть. Пора переходить к написанию самой игры!

❯ Редактор уровней


Поскольку у фреймворка нет какого-либо своего графа сцены, я реализовываю механизм загрузки уровней в каждой игре с нуля — под конкретные нужды. В какой-то игре нужен стриминг для открытого мира, в другой — быстрая загрузка уровней, где есть множество объектов с разными параметрами. Изначально я использовал Blender в качестве редактора уровней и экспортировал карты небольшим скриптом, который сохранял основные параметры в файл.

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

Граф сцены и графом то не назовешь — это просто линейный список объектов, которые присутствуют на сцене. Каждый объект наследуется от базового абстрактного типа Entity, если это «невидимый» объект, или PhysicsEntity, если объект должен интегрироваться с физическим движком. У базового объекта есть только имя и флаг выборки в редакторе.

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост

Вообще, для редактирования уровней можно хоть редактор Unity использовать, предварительно написав экспортер в самопальный формат. Однако я решил реализовать свой редактор: как обычное Windows Forms приложение + панель, в которую движок рендерит картинку. В его реализации нет ничего необычного: он точно также загружает уровень, как и основная игра, но при этом не создаёт игрока и ботов и имеет свободную камеру.

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост



Формат уровней примитивный донельзя. В процессе разработки небольших игрушек я обычно следую принципу KISS и не люблю распыляться сложными сериализаторами/десериализаторами и прочими заморочками, реализовывая лишь самые необходимый функционал. Формат карт — текстовый, одна линия на один объект:

p ferns 0 0 10.8 0 0 0 1

Где p — «класс» объекта, в случае p — это Prop, «декорация».
ferns — модель пропа. При этом сами пропы описаны в отдельных текстовых файлах, где в виде key-value значений хранятся настройки коллизии, материала, текстуры и т. п.
XYZ — позиция в мире.
XYZ — поворот в мировых координатах, задаётся в углах Эйлера (это только для статики, которая не подвержена Gimbal Lock, под капотом вся работа идёт с кватернионами).

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост

❯ Физика автомобилей


После того, как граф сцены был готов, я приступил к реализации физики автомобилей. Но как я уже говорил, физический движок я использовал готовый — т. е. вся работа по резолвингу столкновений, распаралелливанию вычислений и Joint'ам сводилась чисто к нему. Я лишь использовав физику колеса, реализовал поведение машинки, внеся в него некоторые изменения: в основном — вынес в публичные свойства параметры трения колеса.

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост



Само колесо реализовано по классическому принципу рейкастинга — колесо пускает под себя лучи и определяет трение относительно поверхности, на котором стоит, при этом двигая остальное тело используя собственное ускорение. Сейчас в играх для более точной симуляции используется Pacejka Magic Formula — формула, позволяющая рассчитать физически корректное поведение покрышки с различными диаметрами.

Поскольку класс сущности машинки слишком большой и требует контроля самых разных аспектов (коробка передач, аспекты тюнинга, отрисовка и материалы), я вынес часть физики в отдельный класс CarPhysics:

https://pastebin.com/k9KXtreT

Как можно видеть из метода Move, наша машинка полноприводная и имеет две управляющие оси (передние, само собой). Конфигурацию привода легко можно модифицировать в будущем.
Коллизия кузова машинки — обычный OBB прямоугольник, ну или «коробка».

А вот как это работает на практике:

Пока что гонки на утюгах. Но ездит же. :))
Но с кем мы гоняемся?

❯ Боты


Я не стал называть этот раздел ИИ — боты в игре слишком примитивные. Здесь нет никакого поиска пути, боты просто ездят по заранее отмеченным точкам на карте, которые называются
вейпоинтами. Это стандартная практика во многих гонках, однако её реализация отличается от игры к игре. Вообще, для гонок есть несколько общеизвестных практик реализации навигации противников:

  • Вейпоинты с поиском путей: довольно комплексный метод, который позволяет сделать, например, гонки в открытом городе, где боты сами смогут находить путь к чекпоинтам. Подобный способ используется для гонок в GTA, например. Строго говоря, сам по себе поиск путей — это тоже набор чекпоинтов и преград, поэтому для такого метода навигации необходимо довольно большое количество информации (пути для трафика, светофоры и т. п).

  • Вручную раставленые вейпоинты: классика. Левелдизайнер вручную расставляет вейпоинты и задает им параметры: например, на этом повороте нужно притормозить, а на этой прямой можно поддать газку.

  • Заранее записанные пути: способ с вейпоинтами, где разработчики сначала сами катаются по трассе, стараясь выбить лучшее время, а затем используют записанный набор вейпоинтов для противников.


При этом некоторые разработчики не стесняются красивых фейков: реализация реалистичного входа в поворот с крутой физикой может быть сложной, особенно когда боты «тупые», поэтому в некоторых играх ботам намеренно подкручивали управляемость или максимальную скорость. Помните, как быстро нагоняли соперники в NFS Underground? Вот то-то же. :)

Некоторые могут вообще записать фейковый трек, по которым машина будет просто скользить, без учета физики авто. Но «беспалевные» реализации этого способа я пока не видел.
По настоящему «трушный» способ — это когда противники используют всё те же способы, которые использует игрок — т. е. также «нажимают» на виртуальные кнопки и управляют осями автомобиля. Кроме того, частенько каждому сопернику подмешивают дополнительный фактор, куда он будет ехать — иначе машинки будут толпиться друг за другом и будет выглядеть не интересно.
Я использую классические вейпоинты с подсказками.

Сначала нам необходимо получить угол между машинкой игрока и вейпоинтом. Для этого нам нужно перевести координаты текущего вейпоинта в локальные координаты машинки с учетом её поворота (т. е. относительно неё и её Forward-вектора). Поскольку поворот автомобиля считается в кватернионах, нам нужно помножить матрицу поворота на матрицу позиции машинки в мире и умножить позицию вейпоинта используя полученную инвертированную матрицу. Звучит сложно, на деле легко:

private Vector3 WorldToLocalSpace(Vector3 worldPoint)

{

Matrix transform = Matrix.Invert(Matrix.RotationQuaternion(Rigidbody.Rotation) * Matrix.Translation(Rigidbody.Position));

Vector4 vector4 = Vector4.Transform(new Vector4(worldPoint, 1f), transform);

return new Vector3(vector4.X, vector4.Y, vector4.Z);

}

Если очень условно, то это выражение эквивалентно a — b с учетом поворота. Поскольку мы вычислили локальные координаты вейпоинта, нам остаётся только вычислить угол между ними с помощью классического atan2 и перевести радианы в градусы:

private float AngleBetween(Vector3 v1) {

return (float) Math.Atan2((double) v1.X, (double) v1.Z) * 57.29578f;

}

Полностью логика бота выглядит так:

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост

Легко и просто, да?

❯ Гараж и гонки


Какой интерес в гонках без… гонок? Поскольку у меня не было особо ассетов для создания пригорода, я решил сделать пересеченную местность. А на пересеченной местности у нас есть как кольцевые гонки, так и спринт — от точки до точки.

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

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

https://pastebin.com/dakm4AvbПараллельно с гаражом, была проработана система тюнячек — они тоже описывались в простых текстовых файлах и так или иначе влияли на ходовые качества машины. Правда, визуального тюнинга не было предусмотрена — некому моделлить апгрейды. :(

Сам написал, сам погонял: Как я написал 3D-гонки «на жигулях» за неделю, полностью с нуля? Gamedev, Инди, Игры, Программирование, Графика, Directx, Видеокарта, Железо, Жигули, АвтоВАЗ, Лада, Windows, Видео, YouTube, Длиннопост



Сами гонки можно было начать, обратившись к RaceManager и передав структуру RaceParameters:

public struct RaceParameters {

public string Name;

public string Mode;

public int NumOpponents;

public int Difficulty;

public int Prize;

public int ProgressAffection;

}


После этого, игра загружала уровень, создавала ботов на месте spawnPoint (игрок оказывался, как обычно, последним) и запускала гонку.

https://pastebin.com/mgQJjyJL

А затем каждый кадр просчитывала позиции каждого участника гонки:

https://pastebin.com/0ExwDZaY'

Всё! Логикой движения и всем остальным заправляли уже боты. Хотя, там и был костыль на первых этапах, который помечает флаг конца гонки, в остальном — функционал гоночек рабочий. :)

Вот мы и дошли до этапа, когда простенькая, но рабочая демка игры у нас уже есть! Игра запускается на GF4, однако работает не совсем корректно — но оптимизировать её под видеокарты тех лет не составит труда (в основном — пережать текстуры, убрать некоторые техники на комбайнерах и запечь статические пропы в батчи).

❯ Заключение


Вот так я и написал гоночки за неделю. Время разработки демки с нуля до состояния, которое вы видите в статье — всего неделю. Да, за это время реально написать прототип гоночной игры. И я ведь знаю, что в комментариях игру будут сравнивать с Lada Racing Club и шутить о сроках её разработки — ведь в этом и суть! Слишком мало реально прикольных ламповых гоночек на жигулях. Вот что у меня получилось в итоге:

Исходниками игры я конечно же поделюсь: тык на GitHub.
А вот линки на загрузку демки:

Гоночки

Шутан

Ну а для меня это был своеобразный челлендж. И я его выполнил — у меня получилась рабочая демка на выходе! Я вижу что вам, моим читателям, интересна тематика самопальной разработки игр. Судя по комментариям, вам нравится тематика геймдева, программирования графики и разработки игр. Темой одной из следующих статей может стать описание архитектуры графических ускорителей конца 90х, история их API (без D3D) и написание 3D-игры для 3dfx Voodoo с нуля, на базе Glide!

Кроме того, я хотел бы рассказать о графическом API известного многим «3D декселератора» S3 Virge. Интересна ли вам такая рубрика? Пишите в комментариях!

Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, , чтобы не пропустить новые статьи каждую неделю!

Показать полностью 16 5

Сопло для микрогорелки

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 1.

Не всегда и не везде хорош принцип «выше-быстрее-сильнее» - и в домашней мастерской случаются задачи для миниатюрного инструмента. Взять те же горелки. В большинстве случаев безусловное – Больше!, Мощнее! но точная пайка мелочей твердым припоем, но работа с электролизером небольшой мощности, ювелирное дело, работа со стеклом. Здесь, речь пойдет именно о стеклодувном применении небольшого стационарного электролизера.

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

Кислород-водородный факел очень горячий и жёсткий. Стекло он расплавляет быстро и до совершенно жидкого состояния. В стеклодувном деле гремучий газ удобен или как высококалорийная добавка к газовоздушным горелкам, или в виде самостоятельного факела очень маленького размера, еще не продавливающего, не разбрызгивающего стекло. Такая горелка с микросоплом, а речь идет о диаметрах от 0,1 мм, может преотлично питаться гремучим газом от простого электролизера относительно небольшой настольной мощности. В комплекте с простой «подогревной» горелкой с широким мягким низкотемпературным пламенем (газовоздушная - инжекционная, радиационная), для первичного разогрева стеклянной работы и предотвращения термоударов, микрогорелка на гремучем газе позволяет легко и с высоким качеством спаивать даже довольно крупные детали. 

Микрогорелки с электролизерами используются традиционно и, как правило, вынуждено. У аппаратов небольшой мощности, производительности хватает только на них. Обычно, в качестве сопла для такой горелки используется игла от медицинского шприца – выбор объяснимый легкодоступностью, но неважный в теплотехническом смысле. Игла шприца – тонкостенная трубочка из плохо проводящей тепло нержавеющей стали. Малейший локальный перегрев и она оплавляется кислород-водородным пламенем. Напротив, в качестве сопла для такой горелки следует предпочесть толстостенный капилляр из медных сплавов. В крайнем случае, иглу можно обмотать нетонкой медной проволокой и тщательно пропаять серебром.

Медные или латунные капилляры, диаметром от ~0.15 мм сейчас вполне доступны, но еще один несложный вариант изготовления микросопла – сверление. Теория говорит - для достижения спокойного ламинарного потока газа и выраженного иглоподобного факела, длина сопла должна быть не короче 3…5 её диаметров. Так, для диаметра отверстия 0,3 мм, глубина сверления может быть всего 1 мм. Более того, тонкие глубокие отверстия могут представлять затруднения в эксплуатации – сложно прочищаться при неизбежных засорах. Практика показала – сверление неглубокого отверстия спиральным сверлом 0,3 мм. в бронзе и латуни, не представляет сложности. Сверла недороги и доступны. 

Что потребовалось для работы.

Набор некрупного слесарного инструмента, мелочи. В работе использовался сверлильный станок, электролизер для пайки твердым припоем, УЗ мойка.

К делу.

Здесь, описано изготовление сменного наконечника с соплом для имеющейся микрогорелки. Для основания подобрал медную 7 мм трубку, аналогичную штатной. На трубке-заготовке уже имелся изгиб, хотя и выполненный не вполне хорошо – без внутренней набивки, а потому несколько сплющенный. Заготовка была признана удовлетворительной. Примерив и разметив, отрезал нужную часть роликовым резаком (Фото 2).

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 2. Резка трубки роликовым резаком.

Роликовый резак продавливает мягкую медь – для выравнивания образующегося сужения пришлось поработать круглым надфилем и наждачкой.

Для сопла подобрал латунную заготовку. Латунь, превосходный материал для такого применения – легко обрабатывается, хорошо паяется мягкими и твердыми припоями, имеет малый КТР (коэффициент термического расширения).

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 3. Заготовка сопла – латунная, запрессованная в плату, стойка от старого водяного счетчика.

Длинную стойку спилил у основания ювелирным лобзиком. Длинна – с запасом, для удобства предварительной обработки. Утолщенная часть с внутренней резьбой чуть великовата.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 4. Подгонка толщины сопла до плотной его посадки в трубку-основание. В сверлильном станке.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 5. Примерка заготовки сопла.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 6. Обрезка технологической части заготовки. Длина оставленного такая, чтобы полнотелого стержня (от внутренней резьбы М3) осталось 5…7 мм. С запасом. В работе снова ювелирный лобзик. Пилочка №4.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 7. «Торцевание» заготовки сопла после пилки лобзика. В том же сверлильном станке, на кусочке наждачной бумаги положенной на березовый брусочек. Заодно и притупил острую кромку.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

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

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 9. Сверло Ø3 мм. зажал в миниатюрный патрон, заготовку сопла – в патрон сверлильного станка. Обороты средние. Сверление наоборот, неподвижным сверлом, позволяет относительно точно сделать соосное отверстие.

Канавки на сверле невеликие, при работе нужно часто извлекать инструмент для удаления стружки. Случается удачно приобрести сверла несколько конической формы, особенно склонные ломаться. Отчасти помогает смачивание спиртом.

В ответственных случаях канал сопла следует отполировать, например, толстой ниткой натертой пастой ГОИ. В случаях особо ответственных, заднюю часть канала, примерно на ¾ делают еще и слегка конической, специальной разверткой. Практика, однако, показала, для гремучего газа и предложенных диаметров сопла, обычного сверления довольно вполне.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 11. Изготовленное сопло на штатном месте. Рядом, слева, неудачный вариант с каналом из медицинской иглы. При пайке его закупорил избыток припоя.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 12. Пайка твердым, серебряным припоем.

От пластинки фабричного ювелирного припоя ножницами отрезал полоску и зажал в обратном пинцете. Флюс – бура. Вносить ее удобно раскалив нетолстую стальную проволочину и макнув в порошок. Налипшую подплавленную буру перенес на раскаленные детали, убрав факел – сдувает. Нагревал место пайки гремучим газом из электролизера. Дидимовые стеклодувные очки защищают глаза и вырезают натриевое «содовое свечение» - место пайки хорошо видно.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 13. Остывший спаянный наконечник отмыл от остатков стекловидной буры в сильно разбавленной серной кислоте. Для активизации процесса применил УЗ мойку. После кислоты – два цикла промывки в чистой воде.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 14. Спаянные детали. Хорошо видно последствие маленькой аварии – подплавилась и осела медная трубка, сопло провалилось, хотя и не утратило функциональности. Не столь изящно как хотелось но удовлетворительно.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 15. Подгонка основания наконечника к присоединительной законцовке. В сверлильном станке, средней наждачкой, с регулярными промерами штангенциркулем.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 16. Впаивание подогнанного наконечника с соплом в законцовку. Применил мягкий безсвинцовый припой олово-медь-серебро и кислый флюс-пасту для огневой пайки.

Нагрев обычной инжекционной горелкой на пропане. По остыванию – немедленная отмывка от остатков флюса в теплой воде. Сначала вручную, старой зубной щеткой, затем несколько циклов в УЗ мойке.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 17. Готовый сменный наконечник с присоединительной законцовкой и накидной гайкой.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 18. Два наконечника микрогорелки – старый, Ø 0,7 мм. из медного капилляра впаянного медно-фосфорным припоем, новый Ø 0,3 мм.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 19. Вид на микрогорелку с новым наконечником и соплом 0,3 мм.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 20. Факел горящего гремучего газа с соплом 0,3 мм. Горелка отрегулирована на самый малый, возможный до гашения, расход газа.

Сопло для микрогорелки Рукоделие с процессом, Своими руками, Хобби, Горелка, Электролизер, Электролиз, Длиннопост

Фото 21. Работа сопла 0,3 мм, с самым большим, до срыва факела, расходом гремучего газа.

К слову, диаметр 0,3 мм. глубокого отверстия, теоретически, является «предельным» для гремучего газа – с таким соплом, до некоторой степени, можно быть уверенным в отсутствии обратного удара.

Babay Mazay, май, 2022 г.

Показать полностью 20

Электролизер. Осушитель гремучего газа - модернизация. Мелочи

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 1.

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

Собирая свой аппарат для домашней мастерской, поторопился сделать осушитель из куска стальной водопроводной трубы с патрубками-вводами, предполагая засыпать его силикагелем и пропускать газ снизу вверх через слой-столб гранул. Однако, в переписке вовремя получил совет своего наставника и вдохновителя, владельца довольно мощного самодельного электролизера, прототипа моего. Как оказалось, газ после реактора и водяного затвора довольно влажный, а силикагель работает хорошо но увы, не особенно долго. Пропуская его через засыпку, получаем высокую эффективность, но и необходимость весьма часто извлекать осушающий реагент для регенерации. Увы, приходится довольствоваться компромиссом – извлекать из газа только часть влаги, при этом разбирать осушитель и прокаливать силикагель приходится много реже.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Рис. 2. Схема обычного осушителя (слева) и предложенная Ю. Н. Бондаренко, с ограниченной степенью осушения (справа), показаны на рисунке.

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

В мой уже готовый осушитель (Фото 1, по центру), такой перфорированный канал легко не встроить, но кое что сделать удалось.

Что понадобилось для работы.

Набор слесарного инструмента, мелочи.

К делу. 

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 3. Мой осушитель, а это нижняя широкая часть, снабжен на макушке сухим фильтром – верхняя часть потоньше.

Короткий входной штуцер вварен внизу глубокой узкой шахты (Фото 5) и добраться до него сложно. Здесь, применил зеркальный вариант частичного осушения (Рис. 2) – газ будет омывать извлекаемый перфорированный осушительный патрон. Вариант получился вполне удобный во многих отношениях, настраивать степень осушения в нем легче легкого.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Рис. 4. Варианты осушителя с частичным извлечением влаги из проходящего газа. Слева – Ю. Н. Бондаренко, справа – авторский.

Итак, общий принцип выработан, материал – пластик. Здесь не нужна значительная прочность, важна лишь стойкость к влаге и щелочи. Оглядевшись по сторонам, в качестве корпуса патрона применил обрезок серенькой канализационной трубы Ø50 мм. Верхнюю и нижнюю крышку сделал из обрезков 0,5 л ПЭТ бутылки от минеральной воды, причем в нижней части патрона применил верхнюю половинку бутылки. Ее сужение - горлышко с пробкой позволило иметь внизу зазор для прохода газа и миновать торчащий внутрь штуцер (Фото 5).

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 5. Входной штуцер в металлическом корпусе осушителя. На дне.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 6. Пластиковый осушительный патрон в сборе.

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

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 7. Небольшое количество силикагеля можно приобрести в магазинах для домашних животных, сегодня он часто используется как наполнитель для кошачьих лотков.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 8. Просушка силикагеля перед снаряжением аппарата.

Операция в принципе лишняя – индикаторные гранулы девственно голубые (при увлажнении они становятся розовыми). Тем не менее, работа была проделана для тренировки. Силикагель засыпал нетолстым слоем 1…1,5 см толщиной в стопку металлических лоточков и поместил в самодельную электропечь. Настроил термоконтроллер на 180 ̊ С и четыре часа работы. Вынул после охлаждения до 60 ̊ С.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 9. Засыпал просушенный силикагель в пластиковый перфорированный патрон, установил его в стальной корпус осушителя, собрал фланец.

Силикагеля в патрон поместилось около 1.5 л. Бронзовый пробковый краник разобрал, промыл растворителем от старой смазки, отшлифовал наждачкой 2000 конус пробки, удалил остатки шлифовки смазал консистентной смазкой, собрал.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 10. Кислород-водородный факел почти прозрачен, а окраску ему придают примеси. Обычно это оранжевый цвет натрия из щелочи электролита.

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

К слову об осушении. В электролизерах фабричных, осушение часто не проводится вовсе либо проводится но не силикагелем. Нередко в качестве осушителя применяют концентрированную серную кислоту (Н2SO4) барботируя (пробулькивая) через нее гремучий газ. Она работает долго. Реактив относительно недорогой и ходовой – электролит из любого автомагазина который нетрудно упарить в эмалированной посуде до появления белого пара. Концентрированная серная кислота пассивирует черную сталь, ее возят по железной дороге в стальных цистернах, то есть теоретически можно применить аппарат – копию водяного затвора. Однако, в процессе работы концентрированная кислота постепенно превращается в разбавленную и вероятно станет реагировать с железом. Опять же, мы уже знаем что частички щелочи вместе с парами воды проникают по «системе» вплоть до сопла горелки и с кислотой они будут реагировать. С одной стороны они гарантированно отсекутся, с другой – кислота постепенно превращается в соль. Ее придется периодически обновлять полностью.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 11. Горелку работавшую до этого счастливого дня без фильтров, пользуясь случаем тоже почистил и чуток доработал.

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

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 12. Просушил части горелки, собрал.

Кроме прочего, с ручки ободрал веселенькую термоусадку, заменил шток игольчатого краника на лучший, уплотнил его. Появился новый металлический маховичок взамен яркой пластмасски. В целом - суровый челябинский стимпанк.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 13. Еще одну проблему – нестояние без подпорки водяного затвора с полукруглым баллонным дном, нейтрализовал пользуясь короткой оттепелью. Подобрал заготовки из старых хвойных дощечек, прострогал, отпилил.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 14. Собрал из подготовленных деревяшек подставку. На столярный ПВА и гвоздики.

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 15. Разобрал угол от хлама и перенес-перевёз в него тяжелые аппараты.

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

Электролизер. Осушитель гремучего газа - модернизация. Мелочи Рукоделие с процессом, Своими руками, Хобби, Мастерская, Электролиз, Электролизер, Длиннопост

Фото 16. Вид на место, в том числе и для стеклодувных работ. Над столом вытяжка, поверхность застелена листом паронита.

Babay Mazay, февраль, 2023 г.

Показать полностью 16

Технология производства специальных микросборок в СССР, 1986 год

Силовой трансформатор для контактной сварки. Намотка фольгой

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 1.

Редко когда бывает – чтобы вопиюще спроектированный прибор, отлично работал и чудо как хорошо вписывался в конструкции, правда, в несколько ином, чем планировалось, качестве. В самом деле, высоковольтный трансформатор от микроволновой печи - огромный ток холостого хода, людоедская индукция в вызывающе заваренном насмерть  сердечнике… Зато удешевление производства и экономия материалов. Интересно, что как не старались конструкторы, в вышедших из строя печах этот трансформатор почти всегда цел – надо полагать, в конструкции есть элементы еще более ненадежные.

А вот для некрупной настольной точечной сварки – лучше его, не придумать - габаритная мощность до киловатта при очень скромных размерах и массе, да и добыть удается незадорого, а нередко и вовсе даром. Работает секунды – дрянные параметры не успевают показать себя во всей красе, опять же легко перематывать – витков немного, провод толстый, сердечник разшелушивать на пластинки а потом собирать не нужно. Два витка нетонкого провода уже будут неплохо работать. Однако, однако. Кабель круглого сечения и невеликое окно для сильноточной «вторички» оставляют маловато вариантов, больше нескольких витков солидного провода, даже с самодельной, во имя экономии места, изоляцией, не продернуть. Такому аппарату по зубам либо совсем мелочи, либо заготовки чуть помассивнее, но сварочный клюв и соединительные провода должны быть очень короткими и весьма нетонкими. В то время как некоторые некрупные операции удобно делать выносным «пинцетом», хотя бы на полуметровом кабеле с его потерями.

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

Мой исходный сварочный трансформатор-заготовка намотан самодельным кабелем около 20 (?) мм2. 2 витка, короткие и жесткие выводы (Фото 2).

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 2. Исходный сварочный трансформатор. 2 витка – около 1.7 В, при огромном токе.

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

Что понадобилось для работы.

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

К делу.

Старую вторичную обмотку по возможности аккуратно демонтировал – распаял самодельные клеммы и наконечники горелкой, собрал припой, удалил провод (Фото 3).

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 3. Первозданный вид, почти что «жемчужина, понимаешь, несверленная».

Обмерил сердечник и определил высоту (ширину) ленты с учетом изоляции. Увы, слишком сильно рассчитывать на плотную укладку не приходится – жесткий кабель, складки изоляции. Попытаемся по возможности свести их к минимуму, рассчитать максимальную длину заготовки провода и намотать сколько влезет. Исходный трансформатор (Фото 2) неплохо работал с коротенькими эрзац-электродами из 3,3 мм медной жилы. Любое увеличение сечения или количества витков «вторички» ощутимо улучшит его свойства.

Моя заготовка для самодельного провода-шины – небольшой рулон медной отожженной фольги, доставшейся по случаю (Фото 4).

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 4. Медная фольга 0,2 мм. Слегка помятая, судя по мягкости и пятнам окиси – отожженная.

По магнитопроводу определил максимальную вероятную длину шины, накинул запас для некоротких выводов. Местами мятую фольгу, по возможности, выровнял, расстелив на ровной поверхности и с усилием прошелся по ней гладким цилиндром – литровой стеклянной банкой (Фото 5).

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 5. Выравнивание медной заготовки-фольги.

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 6. Выровненный рулон развернул, разметил и отрезал нужный кусок.

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

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 7. Нарезанные из медной фольги ленточки – заготовки шины. 10 штук х 24 мм х 0,2 мм = 48 мм2.

На самом деле получилось еще несколько больше – значения округлял в меньшую сторону. То есть – «не менее» 48 мм2.

Суперзадача – изолировать витки шины друг от друга. Увы, обычные намоточные приемы, вроде киперной ленты или бумажных полос с бахромой здесь не годятся и придется заранее изолировать весь намоточный провод. Здесь, применил термотрубку подходящего диаметра (Фото 8). Кроме прочего, она неплохо скользит даже без дополнительной смазки, что полезно при плотной намотке-продевании.

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 8. Изоляция самодельной шины термотрубкой.

Сложив стопку лент, скрепил их в нескольких местах прищепками, примял острые торчащие углы на торце шины и в несколько приемов натянул термотрубку. Строительным феном с широким наконечником последовательно усадил термотрубку на меди. Левой рукой в нетонкой матерчатой перчатке, при необходимости выравнивал стопку лент по ширине, приминал волны.

Намотка изолированной шиной по ширине окна особенностей не имеет, за исключением, разве что, первого вывода. Разумеется, нужно правильно определить и выполнить направление намотки, совпадающее с таковым, у обмотки первичной. Контрольной, может быть пробная намотка из нескольких витков любого изолированного провода (Фото 9).

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 9. Пробная намотка для контроля правильности направления намотки.

Выполнена куском двухжильного сетевого шнура. После подачи на сетевую обмотку стандартных ~220В на пробной обмотке должно появиться соответствующее виткам (примерно помноженное на 0,8) переменное же, напряжение.

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 10. Вывод начала вторичной обмотки. Шина изогнута под углом 90 градусов, вверх. Вид спереди.

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 11. Вывод начала вторичной обмотки. Вид сбоку. Сформованный руками, затем его аккуратно сплющил киянкой и изолировал от стали и сетевой обмотки.

Силовой трансформатор для контактной сварки. Намотка фольгой Рукоделие с процессом, Своими руками, Хобби, Электроника, Электрика, Сварка, Контактная сварка, Точечная сварка, Самоделки, Длиннопост

Фото 12. Готовый перемотанный трансформатор для контактной сварки.

Увы, в действительности, витков влезло меньше ожидаемого из-за трудноустранимых образующихся при намотке складок на самой ленте и изоляции. Тем не менее, получилось три витка сечением 48 мм2, с длинными мягкими выводами. При сетевом напряжении ~220В они дают чуть больше ~2,5 В. На такую обмотку с выводами около 20 см, ушло 1.2 метра самодельной шины.

Простейший сварочный клюв на основе такого трансформатора.

Babay Mazay, август, 2022 г.

Показать полностью 12

Поднимаем сотовую сеть NMT-450 в домашних условиях

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Приветствую всех!

30 мая 2017 года в Котласе, что в Архангельской области, была отключена последняя в мире базовая станция NMT-450. Вместе с этим навсегда ушёл в историю не только этот стандарт, но и аналоговая сотовая связь общего пользования в принципе.

И вот, шесть с лишним лет спустя мне стало интересно: а реально ли попробовать оживить такую сеть, увидеть в работе раритетные телефоны и попробовать с них позвонить?

Итак, в сегодняшней статье разберёмся, как в домашних условиях запустить базовую станцию NMT-450. Узнаем, как работают такие сети и как сделать так, чтобы оно точно заработало.

❯ О чём я?


Многие из нас всё ещё помнят антикварные сотовые телефоны такого стандарта. Трубки были аналоговыми, SIM-карт не было, данные программировались оператором.

Сеть эту очень любили в дальних районах нашей необъятной: NMTшные трубки ловили сеть даже там, где более поздний GSM не мог совершить даже экстренный вызов. Можно было спокойно звонить где-то с опушки леса, причём сигнал был весьма и весьма уверенным. Тем не менее, система обладала целой кучей недостатков, присущих всем аналоговым сотовым сетям, так что в итоге данный стандарт навсегда ушёл в историю.

Ну что же, сегодня постараемся вернуться в те годы и попробовать запустить те самые телефоны. Причём для этого вам не понадобится ни SDR, ни другое дорогое оборудование.

❯ Как так-то?


Самое время разобраться, как же возможно запустить такую сеть без специфического оборудования.

Есть такой проект как Osmocom-analog. Его автор реализовал целый ряд аналоговых сотовых сетей (а также ряд других интересных штук типа эмуляции акустического модема), включая и предмет нашего обзора. Причём для их запуска достаточно иметь только аналоговый передатчик и такой же приёмник, ничего больше не понадобится.

Вообще, стоит учитывать, что автор данного проекта немец, так что большая часть проекта посвящена их национальным немецким сотовым сетям — A-Netz, B-Netz и C-Netz, так что в реализации других стандартов могут быть баги. Тем не менее, стоит отдать должное, что в плане работы с аналоговой сотовой связью этот софт, пожалуй, лучшее, что существует на момент создания данного поста. Так что будем использовать именно его.

Теперь очередь трансивера. И по сути именно его частотами и обусловлен мой выбор сети NMT-450. Всё дело в том, что на такой частоте умеют вещать рации диапазона UHF. Достаточно даже дешёвых китайских бубнилок, чтобы сеть успешно заработала. Конечно, есть некоторые ограничения (например, из-за того, что у нас всего один канал, можно будет единовременно подключить всего один аппарат), но для опытов этого хватит сполна.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

А вот и рации. Это Joker TK-450S, одна из самых популярных моделей радиостанций такого диапазона наравне с аппаратами от Kenwood. Они как раз поддерживают нужные нам частоты.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

А вот пример тех, какие не подойдут. Эти рации имеют стандарт PMR и на нужных нам частотах вещать не умеет.

❯ Обзор оборудования


Итак, посмотрим на телефоны, которые сегодня будем пытаться оживлять.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Первым у нас на очереди Nokia 640, он же THF-13. Из всех телефонов NMT-450 он был едва ли не самым популярным. По виду это типичный древний телефон тех времён.

Увы, аккумулятор его сдох, а от зарядки он не работает, так что в статье он фигурировать не будет. Предвосхищая вопросы некоторых: от ЛБП стартовать он тоже отказался, хотя я некогда запускал его от живого аккумулятора, и он работал.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Следом идёт Benefon Spica. Аппараты этой фирмы были не менее крутыми, хорошо ловили сеть и тоже пользовались большим успехом. Хотя, конечно, самым легендарным аппаратом этой фирмы был Benefon Delta с семисегментным ЖКИ, которого у меня, правда, нет.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Кстати, уже в те годы у некоторых телефонов были импульсные блоки питания вместо трансформаторных.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Не менее отличительной чертой тех трубок были вот такие чехлы, позволяющие носить аппарат на поясе.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

И, наконец, самый интересный из сегодняшних девайсов, Nokia 720, он же TMF-4SP. Это так называемый автомобильный телефон, предназначенный главным образом для использования в машине. Тем не менее, у него был аккумулятор, а заодно и ручка для переноски, так что можно было пользоваться им и так.

Существовала также его версия без трубки, с гнездом для телефонной линии. Так можно было подключить стационарный телефон там, где нет линии, а GSM не ловит. Причём передача была чисто аналоговой, так что, например, там могли без серьёзных проблем работать модемы. Для аппарата на фото также был адаптер линии, втыкающийся в гнездо трубки.

Сам аппарат состоит из базового блока TMF-4SP и трубки HSN-5K (отчего некоторые путают этот девайс, называя его Nokia HSN-5K. На деле же эта трубка используется не только в этой модели телефона). Сбоку имеется антенна, которая при установке в автомобиле заменялась на внешнюю, установленную на крыше и подключенную к аппарату коаксиальным кабелем.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

А вот обратная сторона базового блока. Весь девайс сделан из металла и весит пару килограммов. Даже сейчас он выглядит и ощущается очень круто. Сложно найти атрибут аутентичнее для создания атмосферы девяностых с крутыми парнями в пиджаках, серьёзным бизнесом и тому подобными атрибутами.

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

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост
Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

А вот и внутренности. Трубку разбирать я не стал, а вот базовый блок весьма интересен. На плате куча ВЧ-элементов, усилитель мощности, релюшка (что именно коммутируется, мне неведомо), кварцевые генераторы, микропроцессор. Сама труба общается с базой по проприетарному протоколу MBUS, по сути это полудуплексный UART с пятивольтовыми уровнями. На том же протоколе работали старые дата-кабели Nokia.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

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

❯ Как работает NMT-450


Перед началом опытов поговорим об устройстве данного стандарта.

NMT расшифровывается как Nordic Mobile Telephone ввиду его изобретения в скандинавских странах. Позже он разошёлся по миру и широко использовался в Европе, России и на Ближнем Востоке.

По своей структуре NMT сильно похож на более поздние системы связи — он состоит из центра коммутации, БС и самих телефонов. Существовало две полосы частот — NMT-450 и NMT-900. Наибольшее распространение получил первый, так что именно его мы и будем рассматривать.
Как ясно из названия, рабочая его частота лежит в районе 450 МГЦ. Стандарт имеет 181 канал (462,500 — 467,500 МГц) с частотной модуляцией, при этом частота приёма на 10 МГц меньше частоты передачи. Каждый из каналов может быть как голосовым, так и управляющим, именно поэтому для минимальной БС требуется всего один трансивер.

NMT был первым стандартом сотовой связи с автоматическим роумингом, работало это за счёт того, что телефон при регистрации в сети сразу сообщал центру коммутации о своём новом местоположении.

❯ Программирование трубок


Мне всегда было интересно узнать, как же заносились данные об абоненте в телефон, ведь там не было ни SIM, ни каких-то других модулей. Запросы в духе «nmt-450 mobiles dealer configuration» ничего интересного не выдали.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

В итоге поиск по тематическим группам вывел меня на некий сайт "Unofficial NMT". Сам сайт уже давно умер, но осталась его почти полная копия в Web Archive. Именно там удалось найти уйму информации по теме, включая сервис-мануалы, распиновки разъёмов, некоторую информацию по ПО.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

В сервис-мануалах нашлись и скриншоты используемого для этих целей софта. В случае с Nokia это WinTesla, применяющаяся для конфигурации целого модельного ряда старых телефонов, нужно только добавить DLLку с поддержкой нужного аппарата. Именно там и задаются все нужные коды.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Сам софт, разумеется, был с защитой от копирования в виде аппаратного ключа (PKD), а телефон подрубался к компьютеру кабелем MBUS->RS-232, схема которого тоже имеется на сайте. Увы, самой WinTesla там нет, но её вполне реально найти на просторах вместе с патчем.
В случае с некоторыми другими телефонами, например, Motorola, всё было сложнее, так как для подключения к ПК использовались специальные адаптеры для проприетарного интерфейса (уже с МК внутри, а не просто схемы на нескольких транзисторах).

❯ Безопасность


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

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Позже это дело прикрыли, введя так называемые SIS-коды, использовавшиеся в стандарте NMT-450i. Тем не менее, фрикинг сотовых телефонов всё равно не умер, так как появилась возможность считать код, получив ненадолго доступ к самому аппарату. Впрочем, количество взломов всё же упало до вполне приемлемых уровней.

❯ Ставим софт


Ну что же, время приступать к экспериментам. Начнём с софта. Для его запуска понадобится компьютер с Linux или виртуальная машина с ним же. Использовать Live CD не рекомендую, так как могут быть проблемы с записью или воспроизведением звука. Если будете ставить на ВМ, лучше выбрать Virtualbox.


На всякий случай я выложу уже готовый софт в конце статьи.

❯ Первый запуск

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Итак, открываем папку src/nmt и там запускаем нашу БС:

./nmt -k 1 -Y SE,2


О параметрах поговорим чуть позже, сначала же убедимся, что софт корректно работает.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Если всё было сделано правильно, то на экране появятся флаги скандинавских стран в ASCII-графике, а из динамиков компьютера послышится нечто вроде «У-лю-лю-лю-лю». Если это так, то с запуском софта у вас всё получилось.

❯ Подключаем рации


Хотя некоторые утверждают обратное, подключать рации напрямую ко входу компьютера нельзя: он весьма чувствительный, отчего сигнал с рации может его перегрузить или вовсе сжечь. Аналогично и для входа радиостанции.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Чтобы подключить приёмник и передатчик к компьютеру, необходимо согласовать уровни. Я использовал простейшую схему на двух потенциометрах.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

Всё крайне просто: на один крайний контакт потенциометра подаётся сигнал, на другой подключается земля, с подвижного контакта снимается сигнал.

Далее включаем на компьютере музыку, настраиваем обе рации на один канал и крутим потенциометр для передатчика, добиваясь того, чтобы звук был хорошо слышен. Аналогично и для приёмника: запускаем какое-то приложение для звукозаписи типа Audacity и таким же образом регулируем уровень сигнала, говоря в рацию.

❯ Код региона


Отдельно стоит упомянуть код страны сети. Если он выбран неправильно, то БС исправно заработает, но телефон видеть эту сеть не будет.

Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост
Поднимаем сотовую сеть NMT-450 в домашних условиях Сотовая связь, Техника, Электроника, Мобильные телефоны, Timeweb, Гаджеты, Видео, YouTube, Длиннопост

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

❯ Запуск


Итак, самое время пробовать.

Включаем телефон и рации, втыкаем провода. Само собой, на компьютере необходимо отрубить все системные уведомления, слушать музыку на этой машине во время экспериментов тоже нельзя (сами представляете, что будет твориться в эфире). Передающую рацию настраиваем на 463,000 МГц, принимающую — на 453,000 МГц. Запускаем софт всё той же командой. Параметр k — канал (в данном случае первый, на который и настроены рации, если выбрать другой, то придётся выставить иную частоту). Параметр Y — как раз тот самый региональный код. Две латинские буквы — код страны, цифра после запятой — идентификатор соты.


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

На видео я пробовал подрубить внешние антенны, но, как видно, помогло это мало.

А вот и та самая Nokia. На ней это всё тоже отлично работает.

❯ Звонки


Чтобы при вызове слушать не музыку, а попробовать поговорить, надо подключить вторую звуковую карту.

Для начала выполним следующую команду:

arecord -l

Будет выведен список звуковых карт в системе.
Далее запускаем сеть следующей командой:

nmt -k 1 -Y SE,2 -c hw:XXX,YYY

Здесь XXX — номер звуковой карты, а YYY — номер устройства. Скорее всего, у вас будет нечто вроде hw:2,0. После этого можно будет подрубить к компьютеру наушники и микрофон и принимать звонки на ПК.

Звуковая карта 0,0 используется при этом для самой связи с рациями, так что задействовать для звонков её нельзя.

❯ SMS


Некоторые модели телефонов имеют возможность принимать и отправлять SMS. Реализовано это следующим образом. При отправке сообщения телефон совершает звонок на номер SMS-центра и обменивается с ним информацией. При получении — наоборот, вызов поступает на сам аппарат. Таким образом, можно запустить SMS-центр хоть на обычном компьютере с модемом и, например, отправлять e-mail с телефона, даже если оператор SMS в принципе не поддерживает.

Данный софт тоже имеет возможность отправлять сообщения. Для работы с ними необходимо указать номер SMS-центра 767, а если это невозможно, то запустить софт с параметром S, где указать нужный номер. Узнать его можно отправкой произвольного сообщение на произвольный номер и наблюдением, куда совершается звонок.

Далее необходимо выполнить следующую команду:

echo "1234,1234567,SMSTestSMS" >/tmp/nmt_sms_deliver

Первое число — номер отправителя, второе — номер получателя, далее идёт сам текст сообщения.

❯ Вот как-то так


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

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

❯ Ссылки

Показать полностью 22 2

Что надо успеть за выходные

Выспаться, провести генеральную уборку, посмотреть все новые сериалы и позаниматься спортом. Потом расстроиться, что время прошло зря. Есть альтернатива: сесть за руль и махнуть в путешествие. Как минимум, его вы всегда будете вспоминать с улыбкой. Собрали несколько нестандартных маршрутов.

ПОЕХАЛИ

Ответ на пост «В США роботы с ИИ начали делать маникюр. Работа занимает всего 10 мин, а стоит в 6 раз дешевле, чем услуги живого мастера-человека»

Теперь для них остался один вариант для бизнеса.

Отличная работа, все прочитано!