Поймать небо за хвост: история ротора RaAm24
Пролог
«А давайте посмотрим на МКС в лицо!»
Было это в лохматом году.
Мы — группа RaAm24.
Кто мы? Радиолюбители, энтузиасты, люди с самыми разными образованиями и умениями. И есть в этом списке одно принципиальное упущение, которое нам потом аукнулось: инженеров среди нас не было.
Было только желание. А желание, как известно, либо приводит к великим открытиям, либо к сгоревшим контроллерам. Иногда и к тому, и к другому одновременно.
Идея родилась спонтанно, как и большинство идей, которые заканчиваются бессонными ночами. МКС регулярно проводила сеансы SSTV-трансляций, приуроченные к различным праздникам. Картинки передавались красивые: с видами Земли, портретами космонавтов, символикой миссий. И нам, конечно, захотелось их поймать.
«Что там сложного? — подумали мы. — Антенна, ноутбук, программа… Подумаешь, космос!»
Наивные.
Первые несколько сеансов прошли по классическому сценарию «ручного слежения». Один человек держит антенну, второй — ноутбук с программой «Орбитрон», третий — фонарик в зубах, потому что на улице быстро темнеет. Неудобно. Руки заняты. А картинка на экране — сплошной шум, в котором даже при большом желании невозможно разглядеть что-то похожее на космос.

Примерно после третьего такого «сеанса связи с собственными амбициями» в головы энтузиастов одновременно пришла мысль:
— А давайте сделаем ротор, который будет сам за ней следить.
Сказано — сделано. Вернее, сказано — пошли искать, что можно сломать в первую очередь.
Так началась история поворотного устройства, которое позже получило гордое название «Ротор RaAm24».

На этом этапе мы имели:
группу с горящими глазами;
ноутбук с «Орбитроном»;
опыт ручного слежения, который хотелось забыть как страшный сон;
полное отсутствие инженерных знаний;
и священную веру в то, что «мы же умные, разберемся».
Спойлер: разобрались. Но дорога к этому была усеяна сгоревшими платами, порванными нервами и одним GPS-компасом, который принял мученическую смерть в самом расцвете сил.
Глава 1
«Конструкторский угар, или как мы искали идеальный люфт»
Итак, решение принято: ротору быть. Осталось понять — какому.
В головах, не обремененных инженерным образованием, нарисовалась примерно такая картина: «Берем мотор, прикручиваем к антенне, подключаем к кнопке — и поехали». Реальность, как водится, оказалась сложнее.
Но мы были молоды, горячи и уверены, что SolidWorks — это не страшно.
Первая кровь: корпус
Кто-то из группы предложил: «А давайте сразу нормально сделаем — спроектируем в 3D, напечатаем, будет как заводское!»
Идея звучала прекрасно. Особенно в теории.
На практике это выглядело так: бесконечные вечера в SolidWorks, где мы постигали дзен «сопряжения деталей» и «допуски-посадки». Кто-то из нас даже начал разговаривать во сне на языке чертежей, но это уже детали.

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

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

Железный зверинец
С механикой мы решили не мелочиться.
За горизонтальный поворот отвечал шаговый мотор NEMA17 с понижающим редуктором. Почему NEMA17? Потому что кто-то сказал, что это «стандарт для таких вещей». Почему с редуктором? Потому что мы примерно представляли, что момент силы — это не про наши слабые руки.

За наклон (потому что МКС, зараза, не только по горизонту ползает, но и в зенит забирается) отвечала мощная робосерва. Мощная — это важно. Мы не хотели, чтобы антенна кивала, как китайский болванчик на приборной панели.
Кстати, про кивание. Антенна у нас конструкции «Яги» — штука полезная, но со своим характером. Она оказалась тяжелой спереди и легкой сзади, что в сочетании с сервой давало эффект голодного дятла: чуть что — клюет носом вниз. Мы, конечно, могли бы заняться серьезными инженерными расчетами центра масс, но мы же не инженеры, верно?
Поэтому пошли простым путем: решили сделать противовес.
Вариантов было много. Кто-то предложил привязать камень — благо на улице камней хватает. Кто-то — использовать гантель. Но тут в дело вмешался сосед.
Не тот сосед, который стучит по батареям, а другой — загадочный мужик с гаража, заставленного непонятным хламом. Увидев наши мучения, он изрек:
— Ща, погодите.
И выдал набор старых ржавых гирь от советских весов. Вы знаете, такие — чугунные, с цифрами, которые уже не разобрать, но вес ощутимый.

К одной стороне крепилась антенна, к другой — кусок советского наследия, который явно помнил еще менделеевские времена. Эстетика? Ноль. Функциональность? Искусство баланса было достигнуто. Антенна перестала клевать. Сосед получил благословение и ушел пить чай, чувствуя себя причастным к космической программе.
Мозги и душа
Контроллером выбрали Arduino Mega. Наугад. Просто потому, что у нее много ног, а вдруг пригодятся? (Спойлер: пригодились, но не все, зато мы спали спокойно).
Графический интерфейс и управление выпали на долю сенсорного экрана Nextion. И вот тут в игру вступил наш главный козырь — в группе нашелся человек с художественными наклонностями.

С этого момента процесс принял неожиданный поворот. Пока одни бились над тем, как заставить шаговый мотор поворачиваться ровно на один градус, художник с умным видом решал вопросы великой важности:
— Кнопка должна быть круглой.
— Почему?
— Потому что эстетично.
— А цвет?
— Красный. Красный — цвет опасности и космоса.
— Это кнопка «калибровка», какая там опасность?
— Ты ничего не понимаешь в искусстве.
Телеграм-канал группы в те дни напоминал филиал дизайн-студии, где между техническими схемами возникали многочасовые баталии о расположении элементов интерфейса. Спорили о форме, цвете, размере, о том, должна ли кнопка «Старт» моргать. Спорили с пеной у рта, скриншотами и ссылками на «лучшие практики UI/UX».

Но интерфейс был сделан. И он был красив. Это мы вам точно говорим.
Связь: прощай, кабельный ад!
От проводов мы отказались сразу. Нет, не из-за хай-тека. Просто за годы ручного слежения мы намотались на эти кабели столько раз, что выработали стойкую аллергию. Поэтому ротор и ноутбук общались через Bluetooth.
Пару метров — идеальная дальность, чтобы не спотыкаться, но и не искать ноутбук в сугробе.
Жертвы техническому прогрессу
Была у нас в проекте одна амбициозная идея — абсолютное позиционирование. Мы хотели, чтобы ротор всегда знал, куда он повернут, даже после выключения. Для этого купили GPS-антенну со встроенным компасом. Дорогую. Красивую. Многообещающую.
Она прожила недолго.
В процессе подключения и первых тестов она была предана всепоглощающему богу коротких замыканий. Как именно это случилось — история умалчивает. То ли руки кривые, то ли напряжение не то, то ли дух электромонтажа потребовал жертву.
Факт оставался фактом: компас умер, и мы остались без абсолютного позиционирования. Но об этом мы узнали позже. А пока — мы готовились к первому выходу в свет.
Мы были готовы к испытаниям. Или нам так казалось.
Глава 2
«Софт, мат и бессмертный дух Windows 10»
Итак, железо собрано. Моторы слушаются, серва кивает (теперь уже без дятловских замашек), противовес из советских гирь придает конструкции солидность и одновременно пугающий вид. Казалось бы, бери да пользуйся.
Но была одна маленькая деталь, о которой мы, в порыве конструкторского энтузиазма, как-то забыли: ротор должен знать, куда ему поворачиваться.
А для этого нужно было заставить подружиться три вещи: программу «Орбитрон», которая знает координаты МКС, нашу прошивку на Arduino, которая управляет моторами, и Bluetooth, который должен был стать посредником в этом сложном союзе.
Как выяснилось, подружить их — задача для дипломата экстра-класса. Или для санитара с большим запасом терпения.
Орбитрон: программа, которая знает всё, но молчит
«Орбитрон» — штука прекрасная. Она показывает траектории спутников, рассчитывает азимуты, углы места, время пролета. В общем, делает всё, что нужно радиолюбителю, кроме одного — она не умеет читать мысли.
У неё есть встроенные плагины для передачи целеуказаний на внешние устройства. Есть! Мы читали документацию, смотрели форумы, находили восторженные посты типа «всё работает из коробки».
Нам не повезло.
Мы сидели с этим софтом несколько вечеров. Нажимали кнопки, галочки, перезагружали, молились. Плагины отображались в меню, создавали видимость работы, но упорно отказывались отправлять данные на ротор. Они просто… молчали. Как партизаны на допросе.
— Может, версию переустановить?
— Переустановили.
— Может, драйвера?
— Обновили.
— Может, просто смириться и крутить руками?
— Зачем мы тогда ротор делали?!
Спор длился долго. Кто-то уже начал подумывать о написании собственного трекера с нуля. Кто-то — о переходе на Linux, где «всё работает через раз, но хоть как-то».
Но в один прекрасный (или не очень) вечер, после очередной переустановки, очередного перезапуска и очередной порции крепких выражений, которые, наверное, было слышно даже на МКС, плагин заработал.
Как? Почему? Мы не знаем до сих пор. Возможно, он просто устал от нашего упорства. Возможно, в тот момент сошлись звезды, уровень солнечной активности и наше коллективное желание наконец-то закончить этот этап. Факт оставался фактом: цифры азимута и угла места поползли из «Орбитрона» в Bluetooth.
Мы выдохнули. Но ненадолго.
Калибровка: транспортир и высшая математика от радиолюбителей
Теперь нужно было объяснить ротору, что такое «один градус».
Казалось бы: шаговый мотор, у него 200 шагов на оборот, редуктор с передаточным числом… ну, каким-то. Посчитал — и готово. Но нет.
Во-первых, редуктор у нас был не «заводской спецификации», а «такой, какой нашелся на АлиЭкспрессе». Передаточное число на нем было написано, но верить китайской маркировке мы уже давно перестали.
Во-вторых, люфты. О, эти люфты! Механика, собранная руками энтузиастов с помощью напильника и мата, имела свои представления о том, что такое «точность позиционирования».
Поэтому мы пошли классическим, проверенным веками методом: экспериментальным.
Вышли на улицу. Взяли транспортир. Ну и ноутбук, конечно, без него никуда.
Дальше происходило следующее: один человек отдавал команду «повернись на 10 градусов», второй смотрел на транспортир, третий фиксировал реальное отклонение, четвертый записывал разницу, пятый матерился, шестой предлагал всё бросить и пойти пить пиво.
Мы вычисляли количество шагов мотора на один реальный градус. Потом пересчитывали. Потом проверяли. Потом расходились на 5 градусов и начинали заново.
Это была эпопея, достойная пера. Мы чувствовали себя то древними астрономами, заново изобретающими угломерные инструменты, то сумасшедшими учеными из дешевого кино.
Но данные были получены. Поправочные коэффициенты внесены в прошивку. Ротор начал поворачиваться туда, куда ему говорили. Ну, почти. В пределах погрешности, которую мы решили называть «допустимой».
Жертвы номер два и три
В процессе бесконечных перепрошивок, тестов, подключений и отключений боги электроники потребовали новых жертв.
Первый пал Arduino Mega. Он просто перестал подавать признаки жизни после очередной перепрошивки. Без криков, без дыма — просто взял и умер. Может, не выдержал нашего мата. Может, устал от бесконечных экспериментов. Покоится с миром в коробке для умерших контроллеров.
Вторым — и это было больнее — стал драйвер шагового мотора. Тут уже было зрелищно. Короткое замыкание, искры, характерный запах, и драйвер отправился к праотцам, унося с собой часть нашей веры в человечество.
Мы курили. Долго. Потом заказали новые компоненты, залили горе чаем и продолжили.
Потому что, знаете, когда в проект вложено уже столько нервов, денег и времени, просто так не бросают.

Глава 3
«Полевые испытания, или как ветер рушит планы»
И вот настал день. Тот самый. Мы собрались, проверили всё по сто раз, зарядили ноутбук, прихватили термос с чаем (опыт предыдущих сеансов ручного слежения научил нас главному — без горячего чая на улице делать нечего) и вышли.
Погода встретила нас, как и полагается нормальной сибирской осени: солнце уже не грело, ветер обещал превратить процесс в испытание на прочность, но до настоящих морозов было еще далеко. Идеальные условия для того, чтобы проверить, насколько мы гениальные конструкторы.
Антенна, выходи из чата!
Ротор был установлен. Антенна гордо возвышалась на своей опоре, напоминая хищную птицу. Противовес из советских гирь придавал всей конструкции вид монументальный и слегка угрожающий.
Bluetooth работал исправно, связь между ротором и компьютером была устойчивой, провода не путались под ногами. Цивилизация, одним словом.
Мы запустили трекинг. «Орбитрон» показал, что МКС скоро появится из-за горизонта. Ротор замер в ожидании.
Феерия!
И вот оно началось.
Программа выдала команду. Bluetooth молниеносно передал данные. Arduino Mega (новый, купленный после героической гибели предшественника) принял сигнал, просчитал шаги, и… мотор ожил.
Антенна медленно, с достоинством древнего механизма, который наконец-то дождался своего часа, начала поворачиваться. Серая масса металла и пластика двинулась вслед за невидимой точкой в небе.
Мы стояли с открытыми ртами.
— Шевелится!
— Сама!
— Смотрите, она же его преследует!
— Тихо! Не спугните!
Это был момент чистого, незамутненного счастья. Чувство, которое испытывает человек, когда кусок железа, собранный кривыми руками, вдруг начинает делать то, что задумано. Без капризов, без истерик. Просто работает.
Мы чувствовали себя богами. Повелителями шаговых моторов. Архитекторами слежения. Мы победили!
Природа была не согласна
Примерно на третьей минуте пролета ветер, который до этого просто любопытствовал, решил принять активное участие в процессе.
Он дунул. Несильно так, для пробы. Антенна качнулась, но ротор упрямо вернул ее на место. Мы переглянулись с гордостью: «Видал? Наша не сдаётся!»
Ветер, видимо, обиделся.
Следующий порыв был серьезнее. Антенна дрогнула, мотор зажужжал, пытаясь удержать позицию, но… мы же не продумали фиксацию.
Да-да. В пылу конструкторского угара, пока мы спорили о цвете кнопок и калибровали шаги транспортиром, вопрос «а что будет, если ветер решит, что он главный?» как-то выпал из повестки.
И природа любезно напомнила нам об этом упущении.
Очередной порыв — и антенну плавно, но неумолимо развернуло в сторону.
Мы смотрели на это с чувством, которое трудно описать словами. Это смесь дзена, принятия неизбежного, и острого желания найти того, кто забыл про фиксацию, и придушить его этим же ротором.
Антенна больше не следила за МКС. Она просто смотрела туда, куда ей указал ветер. Свободная. Неподвластная нашим алгоритмам.
Расходы
Мы еще некоторое время пытались бороться. Кто-то предлагал встать и держать антенну руками (возвращаясь к истокам). Кто-то — срочно бежать за веревкой и привязывать конструкцию к забору. Кто-то просто молча смотрел в небо, переживая утрату иллюзий.
Ветер дул. МКС ушла за горизонт. Передавать было уже нечего.
Мы свернули оборудование, собрали гири и уехали домой.
Молчаливые. Задумчивые. С легким привкусом поражения и твердым пониманием: в следующей версии ротора фиксация будет продумана на этапе «напильник и мат», а не «ой, а мы не подумали».
Эпилог
«А была ли картинка?»
После полевых испытаний мы вернулись домой, переварили опыт, добавили программную фиксацию и снова были готовы покорять космос.
Наконец наступил день, когда всё совпало: погода была безветренная, МКС обещала сеанс SSTV-трансляции, ротор был откалиброван, фиксация работала, нервы собраны в кулак.
Мы вышли. Установили. Запустили. Ротор послушно повернулся, навелся на точку появления спутника и замер в ожидании.
— Всё, сейчас пойдет, — сказал кто-то из нас с уверенностью человека, который уже прошел через ад и вернулся.
МКС появилась на горизонте. Ротор начал слежение. Мы открыли программу приема SSTV и приготовились ловить картинку.
Шум. Только шум.
Никакого сигнала. Ни писка, ни свиста, ни намека на изображение. Тишина. Полная. Абсолютная.
— Может, частота не та?
— Та, всё проверили.
— Может, антенну не туда повернуло?
— Нет, ротор же работает, смотрите, она за спутником идет.
Мы смотрели на экран, на котором вместо долгожданной картинки красовалась только мертвая тишина спектра. МКС пролетала над нами, мы её видели, мы за ней следили, но она молчала.
После пролета полезли в интернет.
Оказалось, что в тот день передачи не было. Технические причины. Перенос сеанса. Что-то там у них на орбите случилось. Может, космонавт в это время был в открытом космосе.
Мы сидели и смотрели на потухший экран.
P.S
Ротор RaAm24 работает. Он поворачивается, следит за спутниками, слушается команд. Мы научились его калибровать, настраивать, фиксировать от ветра. Это настоящая рабочая конструкция, которую мы собрали своими руками.
Картинку с МКС мы поймали. Это было дело времени.
Главное, что мы поняли за эти месяцы: в радиолюбительстве важны не только гири, транспортиры и шаговые моторы. Важен сам процесс. Когда энтузиасты собираются вместе, чтобы сделать то, что кажется невозможным, и у них это получается — пусть не с первого раза, пусть со сгоревшими платами и порванными нервами, но получается.
И когда в следующий раз космонавт выйдет на связь, мы будем готовы.
А пока — спасибо соседу за гири, китайским производителям за NEMA17, а группе RaAm24 — за то, что не бросили эту затею на этапе «а давайте привяжем камень».
Космос подождет. Он никуда не денется.

