Домашняя масляная майнинг-ферма

Специальный корреспондент
Собака

Собака

Пресс-служба
Команда форума
Private Club
Регистрация
13/10/15
Сообщения
50.276
Репутация
61.575
Реакции
268.922
RUB
0
a36e0949f642c4cbdda5a48e60c7ae0d.png

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

[H3]Постановка задачи[/H3]
В далеком и безмятежном 2019 году я планировал обустройство небольшой мастерской для мелких работ на слабо утепленной лоджии. Можно было бы обойтись простым обогревателем, но мне захотелось сделать что-то интересное и красивое. Как известно, оборудование для майнинга выделяет много тепла, и я решил собрать майнинг-ферму, которая помимо непосредственно майнинга решала бы и вопрос отопления помещения. Так как лоджия небольшая (всего 3 м²) и основную площадь на ней займет рабочая зона, то для фермы остается место только в узком шкафу вдоль стены, который так же предстоит спроектировать и собрать.
d574965b4c795ec690b813b616362dce.png

Мои требования к майнинг-ферме:
  • Соответствовала габаритам шкафа вдоль стены
  • Отапливала лоджию до комфортной температуры зимой и по возможности отводила производимое тепло на улицу летом
  • Была относительно тихой, чтобы находится в помещении было комфортно
  • Не была жестко привязана к конкретному майнинговому оборудованию, предусматривала возможность установки как видеокарт так и асиков
  • Имела аккуратный закрытии корпус и не боялась пыли
  • Имела возможность удаленного управления и мониторинга состояния
  • Была прибыльной (окупала электроэнергию и приносила доход) с учетом цен на момент начала проекта
Важное замечание по вопросу рентабельности. Как ни странно, прибыльность не является основной целью данного проекта. Я хотел сделать интересный проект, при работе над котором я получил бы новые навыки, а результат радовал глаз и вписывался в интерьер. Если бы моей целью была только прибыль, следовало бы собрать простой риг из видеокарт на деревянном каркасе и разместить в Иркутском гараже.
[H3]Релевантные навыки перед началом проекта[/H3]
  • Базовый опыт разработки на С++, без интереса к низкоуровневым оптимизациям
  • Опыт в электронике уровня знания закона Ома и правил Кирхгофа
  • Нулевой опыт в проектировании печатных плат
  • Опыт работы с Arduino-подобными контроллерами на уровне понимания базовых примеров (мигать светодиодом, управлять двигателем, работать с разными модулями, для которых есть готовые библиотеки)
  • Опыт работы с 3D-принтером и навык моделирования на уровне рисования несложных угловатых моделей в SketchUp
  • Нулевой опыт в работе с ЧПУ станками
  • Нулевой опыт в проектировании мебели
[H3]Концепт[/H3]
[H4]Выбор железа[/H4]
На текущий момент, можно упрощенно сказать что криптовалюты предусматривающие майнинг, а точнее их алгоритмы разделились на два типа: для которых существуют асики, и те для которых их нет (или есть, но по той или иной причине они не получили широкого распространения). Более подробно о том, почему так получилось можно почитать например вот в статье. Таким образом, есть два основных типа оборудования:
  • ASIC. Специализированное устройство, предназначенное для майнинга на заданном алгоритме, преимущественно для SHA-256 (Bitcoin), но бывают и для некоторых других. Некоторые имеют встроенный блок питания, а некоторые требуют внешний.
  • GPU. Видеокарты используются для майнинга большинства тех монет, для которых нет асиков. Не могут работать автономно, и должны быть подключены к материнской плате компьютера.
Я выбрал видеокарты, так как они все же более гибкие в плане выбора алгоритма и монеты для майнинга, но я хочу оставить гипотетическую возможность их замены на асики. Таким образом, для меня минимальный комплект оборудования состоит из:
  • Видеокарт с райзерами (удлинители шины PCI-E)
  • Материнской платы (с минимальным процессором и памятью)
  • Блока питания соответствующей мощности
Жесткий диск или SSD не обязательны, система вполне может грузиться с USB флешки.
[H4]Выбор способа охлаждения[/H4]
Обычно майнинг фермы имеют воздушное охлаждение и поэтому сильно шумят. Мне же нужно сделать ферму, которая была бы не шумнее хорошего компьютера и не боялась пыли в воздухе. Альтернативной воздушному охлаждению является жидкостное. Наиболее распространены 2 подхода к его реализации:
  • Системы жидкостного охлаждения (СЖО). На самые горячие части компьютера (процессор, видеокарта) вместо кулеров устанавливаются водоблоки, через которые циркулирует подкрашенная дистиллированная вода с антикоррозийными присадками. Активно применяется в мощных геймерских ПК.
  • Иммерсионное охлаждение. Оборудование полностью погружается в емкость с диэлектрической жидкостью. Существуют готовые решения в виде ванн для майнинга.
Разумеется, в обоих случаях жидкость сама по себе не решает проблему охлаждения. Она является теплоносителем, который так же нужно охлаждать, однако это дает большую гибкость в построении системы. Например, жидкость можно пропускать через крупный радиатор, и в некоторых случаях даже обойтись без вентиляторов. Так же, радиатор может быть размещен за пределами помещения, например на фасаде дома, как внешний блок кондиционера, что особенно эффективно в холодное время года.
Мне известны примеры создания ферм с водоблоками для каждой видеокарты, однако по ряду причин я выбрал метод иммерсионного охлаждения. Вот мои рассуждения:
  • Водоблоки ощутимо дороже хорошего иммерсионного масла, в моем случае разница в цене получалась почти двукратной
  • Водоблоки охлаждают только ту часть оборудования, к которой они прилегают, иммерсионное охлаждение же более равномерное
  • При водяном охлаждении есть риск замыкания при малейшей утечке воды
  • Водоблоки не универсальны. Обычно, конкретный водоблок подходит только к конкретной видеокарте конкретного производителя, и не для каждой видеокарты можно найти в продаже водоблок. Разумеется, водоблоки видеокарт не подходят для асиков. Так же, я не видел водоблоков для блоков питания а они тоже шумят и греются. В ванну же с иммерсионной жидкостью можно опустить все, что в нее влезет по габаритам.
[H3]Выбор иммерсионной жидкости[/H3]
Теперь предстоит выбрать иммерсионную жидкость, в которую будет погружаться оборудование. Я рассматривал следующие варианты:
  • Дистиллированная вода. В теории, чистая вода является диэлектриком, однако на практике обеспечить ее чистоту и отсутствие примесей очень сложно. Как и обычная вода, она может замерзнуть а так же достаточно быстро испаряется.
  • "Сухая вода", например , и его аналоги. Предназначена для пожаротушения в дата-центрах, но теоретически может использоваться и для иммерсионного охлаждения, есть со стендов на выставках, где такая возможность демонстрируется, но в целом это экзотичный вариант. На хабре есть целая , о проблемах использования такой жидкости для охлаждения.
  • Минеральные масла. В отличие от воды, они обычно более устойчивы в своих свойствах. При низкой температуре они густеют и застывают, но в в отличие от воды, они не превращаются в лед и не разрывают трубы. Когда-то на хабре была про комп в аквариуме с подсолнечным маслом, но существуют и специализированные масла для иммерсионного охлаждения. Недостатками масла по сравнению с водой являются меньшая теплоемкость, большая вязкость и сложность с очисткой оборудования после извлечения.
В итоге, я выбрал минеральное масло STE Oil Crystal Plus 70T так как нашел в интернете много проектов с его применением. Стоимость литра зависит от приобретаемого объема, и в моем случае она составила примерно 550 рублей. Существуют и более дешевые аналоги, но я решил не рисковать. Заявленные свойства этого масла:
  • Бесцветное, без ощутимого запаха.
  • Разумеется диэлектрическое (не проводит ток)
  • Не токсично, продавец заявляет, что им можно лечить желудок
  • Не агрессивно к металлам, пластиковым деталям и изоляции проводов
  • Вязкость, по ощущениям, сопоставима с подсолнечным маслом и зависит от температуры (чем ниже, тем более вязкое)
  • Температура вспышки 198 °C
  • Температура застывания -60 °C
Заявленные температуры меня полностью устраивают, потому что предельная температура работы видеокарт составляет 80 °C а температура воздуха в моем городе обычно не опускается ниже -30 °C.
Итак, я выбрал видеокарты и иммерсионный майнинг в масле, таким образом моя ферма будет состоять из следующих основных элементов:
  • Емкости с иммерсионным маслом (аквариума)
  • Видеокарт и блока питания внутри аквариума
  • Материнской платы над аквариумом
  • Радиатора отопления, который обеспечит прогрев помещения в холодный сезон
  • Уличного радиатора с вентилятором для отвода избытков тепла на улицу
  • Трубопровода, связывающего аквариум с радиаторами
  • Циркуляционного насоса
  • Моторизованных кранов для управления потоками теплоносителя через радиаторы
  • Датчиков потока, температуры и прочих сенсоров
  • Контроллера, который будет снимать показания датчиков, управлять кранами и включать/выключать материнскую плату. Так же контроллер должен передавать в облако телеметрию и обеспечивать возможность удаленного управления
  • Простого интерфейса контроллера в виде монохромного дисплея и кнопки-энкодера для отображения данных с датчиков и локального управления
[H3]Проектирование и реализация[/H3]
[H4]Шкаф[/H4]
Для максимально эффективного использования пространства небольшой лоджии как мастерской, я решил спроектировать шкаф, в котором помимо аквариума фермы со всем сопутствующим оборудованием и трубопроводом были бы предусмотрены так же ящики для хранения инструментов. Шкаф планировался встраиваемым, т.е. его ширина почти равна ширине стены от двери до окна, а небольшие зазоры по краям будут закрыты декоративным уголком. Так же его особенностью является большая высота при глубине всего 15 см, поэтому для устойчивости он будет закреплен к стене в нескольких местах.
Ранее я не имел опыта проектирования мебели, но это оказалось не так уж и сложно. Я бы сказал, что для создания подобного шкафа достаточно лишь знать, какие существуют виды мебельного крепежа (конфирматы, эксцентрики, межсекционные стяжки), фурнитура (петли, газлифты) и какой зазор нужно предусмотреть между фасадами ящиков. Проектирование осуществлялось в программе SketchUp с использованием плагина "Универсальная панель". Он позволяет экспортировать список использованных деталей со всеми их характеристиками (название, размеры и наличие кромок) для последующего заказа. В качестве материала выбрана белая ЛДСП толщиной 16мм. Результат проектирования показан на фото ниже.
efc461921abb193e17224c47077f1fde.png

Нормально распилить лист ЛДСП в домашних условиях, и тем более нанести кромку очень сложно, поэтому я обратился в мебельную компанию. Спецификой моего заказа было то, что у трех деталей имеется вырез в виде прямоугольника со скругленными краями, получаемый фрезеровкой, на который затем наносится кромка. Не все компании делают такую фрезеровку, поэтому не рекомендую прибегать к таким решениям. Так же стоит упомянуть услугу "присадка отверстий", когда помимо распила, мебельщики на промышленном оборудовании сверлят в полученных деталях отверстия для фурнитуры и крепежа, но я обошелся без нее и сверили все своими силами.
Описывать подробно сборку не буду, скажу лишь то, что из инструментов мне вполне хватило хорошего шуруповерта, сверла для конфирматов, специального кондуктора для сверления отверстий под петли и пары уголков для фиксации деталей, напечатанных на 3D принтере.
Еще одна особенность шкафа - светодиодная подсветка в каждом ящике, автоматически включающаяся при его открывании, но про нее я подробнее расскажу в одной из следующих статей.
[H4]Аквариум[/H4]
Мне требовалось изготовить емкость для заливки иммерсионного масла и размещения там оборудования, которая удовлетворяла бы следующим требованиям:
  • Точно соответствовала заданным размерам, так как она размещается внутри шкафа впритык к его стенкам
  • Была устойчива к высокой температуре масла
  • Была прозрачной для визуального контроля оборудования и для красоты
Этим требованиям вполне удовлетворяют стеклянные аквариумы, однако купить готовый я не мог из-за специфичности требуемых размеров, поэтому я решил изготовить его самостоятельно. Проектирование такого аквариума элементарно, достаточно лишь учесть необходимые зазоры между стеклами для слоя герметика и выбрать достаточную толщину стекла. Эти параметры легко рассчитать в .
Иногда аквариумы делают из специального осветленного стекла, но я выбрал обычное силикатное стекло толщиной 10 мм. Его плюс - низкая цена и повсеместная доступность, минус - ощутимый зеленый оттенок, который особенно заметен при такой толщине. Посчитав необходимые размеры деталей, я заказал их резку со шлифовкой кромки в стекольной компании.
Получив стеклянные детали, мне предстояло их склеить с применением специального аквариумного герметика. Для фиксации стенок на время застывания герметика я изготовил небольшой стенд с напечатанными на 3D принтере держателями, зафиксированными на листе ДСП и небольшие проставки для обеспечения зазора между стеклами.
9bc2cd697da4243c08e37cc6a8e52072.png

Заливка швов герметиком не была бы такой сложной, если бы не специфичная форма аквариума. Из-за маленького расстояния между фронтальной и тыльной стенкой мне было очень трудно орудовать пистолетом с герметиком внутри, и в итоге первая попытка заливки провалилась. Радость от процесса отскребания полузастывшего герметика от стекла и рук сложно передать словами. Ко второй попытке я приготовил для тюбика специальный угловой носик, напечатанный на принтере и наконец справился с задачей. Для полного застывания герметика потребовалось 10 дней. После этого, я поместил для красоты на дно аквариума зеркало, и успешно установил аквариум в шкаф.
02ad5126cf18d917db23b1dafc309093.png

[H4]Оборудование для майнинга[/H4]
Как я уже было сказано, я выбрал в качестве оборудования для майнинга видеокарты, с гипотетической возможностью замены на асики. В этом разделе я расскажу о выборе конкретного железа и способе его размещения в аквариуме.
[H3]Видеокарты[/H3]
При выборе видеокарт для майнинга, помимо их основного показателя - хешрейта нужно учитывать доступный объем видеопамяти, потому что для некоторых алгоритмов (например Ethash) требуется держать в памяти так называемый , размер которого медленно растет. В частности, в декабре 2020 у Ethereum его размер превысил 4 Gb, что ощутимо снизило эффективность видеокарт с меньшим объемом памяти. Поэтому, я выбирал карты с объемом памяти 8 Gb. Карты AMD и Nvidia немного отличаются по эффективности на разных алгоритмах и потенциалу разгона, поэтому для диверсификации я приобрел карты сразу двух моделей:
  • 6 шт. MSI AMD RX 580 8 Gb Mining Edition
  • 6 шт. MSI NVIDIA P104-100 (майнинг-версия карты GTX 1070). Формально имеют 4 Gb памяти, но могут быть перепрошиты для использования фактически имеющихся на плате 8 Gb видеопамяти
Особенностями майнинг-версий видеокарт являются меньшее число видеовыходов, короткая гарантия и минимальная упаковка, но при этом их цена ниже, чем у обычных карт. Мои RX 580 и P104-100 имеют схожий дизайн, но немного отличаются по габаритам (P104-100 немного шире и выше).
[H3]Материнская плата[/H3]
Существуют специальные модели материнских плат для майнинга, которые отличаются большим кол-вом слотов PCI-E и некоторыми оптимизациями в BIOS. Я выбрал модель ASUS B250 MINING EXPERT. В качестве процессора поставил дешевый Intel Celeron G3900, производительности которого достаточно для управления майнингом. Так же я установил два недорогих модуля оперативной памяти DDR-4 по 4 Gb каждый, хотя по факту хватило бы и одного модуля.
[H4]Блок питания[/H4]
Я рассчитал, что для питания видеокарт и материнской платы мне потребуется БП мощностью как минимум 1500 Вт, а для перспективной замены на асики лучше с запасом до 2500 Вт. Обычные компьютерные блоки питания как правило имеют мощность от 300 до 1000 Вт, и иногда БП требуемой мощности получают из двух одинаковых блоков, соединенными с помощью специального синхронизатора. Другим решением является использование мощных серверных блоков питания, мощность которых обычно варьируется от 1500 до 3000 Вт. Серверные БП рассчитаны на непрерывную работу под нагрузкой, имеют высокий КПД и очень надежны но у них есть своя специфика - они выдают только напряжение 12 Вольт, тогда как для материнской платы и видеокарт требуются и другие напряжения (+3.3 В, +5 В, -12 В). Для материнской платы это решается установкой специального DC-DC преобразователя (так называемого Pico PSU), а для питания райзеров видеокарт используют отдельные преобразователи на 5 Вольт (зависит от типа райзеров). В итоге я выбрал серверный блок питания HP мощностью 2450 Вт, известный в майнинговом сообществе как "лыжа" из-за своей вытянутой формы.
[H3]Райзеры[/H3]
Райзером называется удлинитель шины PCI-E x1-x16, который позволяет разместить видеокарты не на самой материнской плате а на определенном расстоянии от нее. Существуют шлейфовые райзера, но в майнинге наиболее распространены райзера с дополнительным питанием, в которых для передачи данных используется кабель USB 3.0 (правда исключительно как шлейф для соединения двух частей райзера - воткнуть его в USB порт материнки нельзя). Различаются по типу разъема питания и конфигурации имеющихся на них преобразователей напряжения. Я использовал райзеры версии 006, в которых дополнительное питание подается через разъем Molex.
[H4]Система подвеса[/H4]
Система подвеса обеспечивает компактное расположение оборудование внутри узкого аквариума и предусматривает возможность его подъема для технического обслуживания. Основой являются две направляющие в виде металлических квадратных профилей 20х20 мм, расположенных над аквариумом. На их нижнюю сторону наклеена RGB светодиодная лента для подсветки. Направляющие могут подниматься и опускаться благодаря мебельным телескопическим механизмам с обоих концов. В центре направляющие соединяются перемычкой, к которой закреплен стальной трос в оплетке, уходящий вверх, в пространство за фальшпанелью шкафа, где через систему блоков он соединяется с линейным приводом, который отвечает за их спуск и подъем.
35042e811daa38e1a47391c829e205dd.png

Видеокарты соединяются в пары спина-к-спине с небольшим зазором и подвешиваются при помощи специальных держателей, надеваемых сверху на направляющие. Они напечатаны из ABS пластика и покрашены черной краской из баллончика. Так же, у каждой видеокарты к плате райзера сбоку прикреплен небольшой понижающий DC-DC преобразователь, обеспечивающий его напряжением 5 В.
Аналогично крепится и блок питания, но его крепеж удлинен при помощи резьбовых штанг, что бы он располагался под видеокартами. Вдоль блока питания так же располагается штанга, к которой крепятся клеммы питания для подключения видеокарт.
При необходимости, видеокарты могут быть заменены на асик, извлеченный из корпуса и разобранный на отдельные платы, для которых нужно будет изготовить свои держатели, а БП, учитывая запас по мощности вероятно и менять не придется.
Материнская плата же размещается в небольшой нише над аквариумом. Размещать ее в масле не было смысла - в процессе работы она почти не шумит и не греется.
ddfeb87c9d38ad741c9fa31fb1bac89b.png

[H3]Софт[/H3]
Для управления процессом майнинга, в материнку втыкается флешка с системой HiveOS, в которой через дашборд можно запускать или останавливать процесс майнинга, мониторить оборудование и осуществить разгон видеокарт. Эта система позволяет настроить остановку майнинга или выключение при перегреве, однако для эффективного управления фермой этого мало, по следующим причинам:
  • Если при перегреве майнинг останавливается, то в режиме ожидания карты все равно продолжают потреблять энергию, что делает процесс охлаждения малоэффективным
  • Если при перегреве система выключается, то материнка теряет связь с сервером и после остывания не сможет сама себя включить
  • Материнка плохо подходит для получения информации с датчиков и управления моторизованными кранами
Поэтому было принято решение разработать отдельный контроллер, который помимо работы с датчиками и приводами будет буквально через оптопару замыкать контакты кнопки включения материнки (а так же тумблер включения БП). О нем я расскажу чуть позже.
[H4]Трубопровод[/H4]
Трубопровод связывает аквариум с контурами охлаждения. У правого и у левого торца аквариума расположены два патрубка, по правому горячее масло уходит к радиаторам, а по левому, охлаждённое возвращается обратно. Таким образом в аквариуме обеспечивается течение масла слева-направо. На торцах обоих патрубков установлены датчики температуры DS18B20 и небольшие сетки для защиты от случайного попадания мусора в трубопровод.
В нижнем отсеке шкафа имеется специальный ящик, в котором располагается циркуляционный насос (обычный насос для системы теплого пола мощностью 70 Вт) и по паре моторизованный кран - датчик скорости потока для обоих контуров охлаждения. Планируется, что контроллер сможет плавно управлять кранами, а датчики обеспечат ему обратную связь.
fc42921a4a871a8459136a0e8fc8a712.png

Для трубопровода использовались полипропиленовые трубы, предназначенные для горячей воды, которые должны выдерживать температуру до 95 °C. Их монтаж очень прост - они режутся при помощи специального ручного инструмента и спаиваются недорогим электрическим паяльником.
[H4]Радиатор отопления помещения[/H4]
Первый контур охлаждения представлен обычным 12-секционным радиатором отопления, расположенным в нише под окном. Я выбрал алюминиевый радиатор, потому что он обладает лучшей теплоотдачей по сравнению с чугунными и биметаллическими, а их преимущество в устойчивости к коррозии и высокому давлению в моем случае роли не играет.
2bf3972bb490ad893e3c15064e4f4368.png

Нишу радиатора я закрыл листом ДСП, на которую в декоративных целях приклеил тонкий ламинат, а выемку под радиатор прикрыл пластиковой решеткой.
[H4]Уличный радиатор[/H4]
Вторым контуром охлаждения является уличный радиатор, дополнительно оборудованный вентилятором. Его дизайн навеян видом внешнего блока обычного кондиционера. Для изготовления корпуса я выбрал алюминиевый композит - листовой материал из двух слоев тонкого алюминия, между которыми находится толстый слой пластика. В природе композит встречается в виде вентфасадов на домах и в рекламных вывесках, поэтому найти компанию, занимающуюся его резкой было не трудно. Так же, композит можно фрезеровать под изгиб, но я заказал отдельные детали, которые соединил между собой винтами при помощи 3D-печатных стоек из ABS пластика. Внутри же располагаются два автомобильных радиатора и 10-дюймовый вентилятор. Изначально планировалось, что один радиатор будет использоваться майнинг-фермой а второй будет охлаждать антифриз для другого компьютера с жидкостным охлаждением, но потом я передумал и подключил его к ферме, параллельно первому.
9b6ce4547806c1e39bb8f8981575deb2.png
bd4345fcfc5b1bbbd3c180e4d32a8fd3.png

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

К трубопроводу фермы радиаторы подключаются гибкими автомобильными шлангами, защищенными от внешней среды кабельными гофрами. Шумность вентилятора на средних оборотах меньше, чем шум от расположенного рядом внешнего блока обычного кондиционера.
075acbcf12eeccaaa7cd6aa7e5f4176c.png

[H4]Контроллер[/H4]
Основными задачами контроллера являются запуск и остановка майнинга (путем включения и выключения материнской платы и БП), управление потоком через контуры охлаждения, получение информации с датчиков и ее передача в облако.
[H3]Электроника[/H3]
В качестве контроллера я выбрал отладочную плату с микроконтроллером STM32F103 известную как "Blue Pill". Можно сказать, что для меня это "ардуинка на максималках", она значительно превосходит по характеристикам широко распространённую Arduino Nano и ее аналоги (на хабре есть с их сравнением). В качестве альтернативы я рассматривал платы с контроллером ESP32 (имеют встроенный BT/WiFi, которые мне не нужны, ведь я собираюсь использовать подключение по Ethernet) и Arduino Mega (слегка избыточна для моих задач). Сейчас бы я наверно выбрал плату Raspberry Pi Pico, но на тот момент она еще не была доступна. Конечно, наиболее трушным вариантом было бы не использовать отладочные платы а распаивать голый контроллер, но не имея опыта в электронике я не стал рисковать и поэтому старался максимально использовать готовые модули. Принципиальная схема платы контроллера показана на рисунке ниже.
9752c081e773d0528d73257f0d2c9bc3.png

Перечислю компоненты по столбцам сверху-вниз, слева-направо:
  • Модули понижающих DC-DC преобразователей на 5 и 3.3 Вольта для питания контроллера и периферии
  • Модуль твердотельного реле, отвечающего за включение/выключение циркуляционного насоса
  • OLED дисплей для отображения информации, подключается по интерфейсу I2C
  • Мощный драйвер L298N для управления линейным приводом, поднимающим и опускающим из аквариума оборудование. Так как логический уровень этого модуля 5 В, а у контроллера логика 3.3 Вольта, то перед ним устанавливается модуль с конвертерами уровня.
  • Микросхема L293D для управления двумя моторизованными кранами. У них имеются сигнальные выходы, которые при полном открытии/закрытии замыкаются на землю. Так же для управления микросхемой применен конвертер уровней.
  • Датчики температуры DS18B20, установленные на входном и выходном патрубке, а так же на корпусе циркуляционного насоса. Подключаются по шине 1-Wire.
  • Светодиодная RGB лента на направляющих для подсветки оборудования. Каждый канал управляется через MOSFET транзистор IRL510. Низкое пороговое напряжение этих транзисторов позволяет обойтись без преобразователей уровня.
  • Плата STM32 Blue Pill. Для отладки предусмотрен вывод лога по интерфейсу UART, но из-за нехватки пинов при этом отключается цепь управления зеленого и синего канала подсветки. Переключение осуществляется джамперами на плате.
  • Датчики скорости потока для обоих контуров охлаждения. Работают по принципу подсчета импульсов и подключены к пинам с поддержкой аппаратных прерываний.
  • Энкодер с кнопкой для локального управления контроллером.
  • Ethernet-модуль для связи с облаком. Подключается по интерфейсу SPI.
  • Контакты кнопок включения материнской платы и блока питания, их замыкание осуществляется через оптопары. Питаются напряжением 5 В, включаемым через биполярные транзисторы.
Печатная плата была разработана в бесплатном редакторе EasyEDA, и заказана на JLCPCB. Она стоила немного дороже чем обычно из-за своей вытянутой формы, обусловленной высотой пространства за фальшпанелью над аквариумом. Это мой первый опыт в проектировании печатных плат, и в процессе я старался следовать советам из статьи. Позже, изучив тему глубже я могу сказать, что на моей плате не хватает разделения аналоговой и цифровой земли, описанного например , хотя негативных эффектов от этого я пока не заметил, вероятно из-за небольшого тока у аналоговых потребителей и того факта, что модули понижающих преобразователей уже имеют на выходе конденсаторы.
fed219316b20cdde42328cf3a743824e.png
1a9ab71ab881e7a878c2198f8fadb149.png

[H3]Программирование[/H3]
Для программирования контроллера я использовал фреймворк , что бы не выходить из зоны комфорта иметь возможность использовать множество Arduino-совместимых библиотек, написанных для модулей, которые я использую. Код разрабатывался в среде Visual Studio Code с плагином PlatformIO.
Одним из требований к контроллеру является возможность удаленного управления и мониторинга телеметрии. Конечно, такой функционал можно сделать в виде веб-сервера на самой плате, но на мой взгляд это решение является велосипедом и проигрывает по многим аспектам использованию специальных облачных сервисов для IoT устройств. Я рассматривал разные сервисы, такие как , и , но в конце концов мой выбор пал на обновленный , в котором помимо неплохого мобильного приложения добавили веб-дашборды.
Кратко расскажу о том, как работает Blynk. Основой его концепцией являются так называемые "виртуальные пины", по сути это просто переменные заданного типа (число, строка и др.), которые средствами библиотеки синхронизуются с сервером. Например, что бы передать на сервер температуру масла, контроллер периодически записывает в специально созданный для этого виртуальный пин значение с датчика, оно сохраняется на сервере Blynk, и для его мониторинга я создаю на дашборде соответствующий виджет (простая строка, шкала, временной график), привязанный к этому пину. Аналогичным образом виртуальным пином можно управлять из дашборда - например с помощью виджета-кнопки, тогда уже сама плата сможет обработать изменение его состояния - так например реализована кнопка выключения майнинга.
bc79783c351d67f2c3ff041194c5ca16.png

Blynk так же решает задачу обмена данными между контроллером и материнкой. Это реализовано путем запуска на старте HiveOS моего Python-скрипта, который собирает телеметрию о процессе майнинга (хешрейт, температуры видеокарт и пр.) и периодически отсылает ее на сервер Blynk. Контроллер ее получает, и таким образом имеет доступ ко всей информации о состоянии системы, а не только ту, которую имеет от своих датчиков.
Перечислю основные реализованные на данный момент функции контроллера:
  • Удаленное включение/выключение майнинга, передача телеметрии
  • Контроль за температурой оборудования, его полное выключение при перегреве и автоматическое включение после остывания
  • Перезагрузка оборудования при ошибках и зависаниях
  • Индикация температуры масла через изменение цвета RGB-ленты на направляющих
  • Управление моторизованными кранами и подъемным приводом через локальное меню
aa8ed6c1f14abfa3826264fd3f250c0c.png

[H3]Интерфейс[/H3]
Помимо описанного выше дашборда в мобильном приложении Blynk и его веб-версии, у контроллера имеется простой физический интерфейс, представленный двухстрочным OLED-дисплеем и энкодером со встроенной кнопкой. При включении, на нем циклично отображаются экраны со всей доступной телеметрией (температуры масла и видеокарт, текущая монета, хешрейт, время с момента загрузки и пр.), а при нажатии на кнопку энкодера открывается меню для ручного управления (включение/выключение, перезагрузка, краны, привод, насос и пр.). После 10 мин работы дисплей автоматически выключается, но активируется от любого поворота энкодера.
Панель с дисплеем и энкодером сделана из остатков листа композита, использованного для изготовления корпуса уличного радиатора. Я вырезал ее на своем фрезерном станочке CNC 3018 и зашлифовал краску до голого алюминия. Так же я вырезал небольшое стеклышко для дисплея из светло-синего оргстекла. Вырез же в фальшпанели был заказан у мебельщиков. Для крепления панели, в вырез устанавливается небольшая проставка, напечатанная на 3D принтере из синего PLA.
09a71d867d1056b37163b17041310ec4.png
fef006b18e61c6a7e9609713286fe1eb.png
7b0990dc75e996821061c2140f4bddf5.png

[H3]Запуск и доработка[/H3]
Когда сборка всей конструкции была завершена, мне предстояло залить в систему масло и запустить ее. Просто налить масло в аквариум было нельзя - циркуляционный насос не смог бы подсосать его через входной патрубок, поэтому я закачал в систему масло из канистры при помощи небольшого насоса высокого давления. Удалил воздух из радиатора, закрыв кран Маевского, когда из него начало течь масло.
1f960d94d58038a3e4c7b44829ab5580.png

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

Затем, при помощи привода я погрузил видеокарты и блок питания в аквариум. Не смотря на то, что иммерсионное масло очевидно диэлектрическое, процесс погружения дорогого оборудования в жидкость был достаточно волнительный и нервозный. Лишь после того, как кулеры весело и бесшумно закрутились в масле я выдохнул с облегчением.
11c765043ae475bd435790bb11923d9b.png

Когда майнинг начался, я приступил к процессу разгона видеокарт, цель которого - увеличение хешрейта и уменьшение нагрева при сохранении стабильности работы. Это отдельная тема, подробно описывать его не буду, можно лишь упрощенно сказать что он сводится к подбору параметров (частота ядра, памяти и др.) и последующей оценке производительности и стабильности системы. Сложность в том, что универсальных параметров для конкретной модели видеокарты нет, и оптимальные значения нужно подбирать для каждой конкретной карточки индивидуально, методом проб и ошибок.
f3d5089f875b42860115960081ac9628.png

К сожалению на этапе проектирования мне не хватало навыков моделирования термодинамических систем, поэтому я до момента запуска не понимал, является ли моя система охлаждения недостаточной или избыточной. Практика показала, что скорее недостаточной - внешний блок с обдувом приходится задействовать на постоянной основе. Зато внутренний радиатор отлично справляется с подогревом помещения, что особенно приятно в межсезонье. Летом же система часто перегревалась, в самые жаркие дни я ставил напротив аквариума обычный бытовой напольный вентилятор, однако он скопытился спустя примерно месяц дневной эксплуатации, благо, его удалось сдать по гарантии. Тогда для улучшения охлаждения я добавил еще один контур - теплообменник, через который отдельный насос гоняет обычную воду, которую я залил в 30-литровые канистры из-под масла. По мере нагрева воды в канистре я переставлял шланги на другую, и пока новая нагревалась, старая успевала частично остыть.
3c7d252eefa32dd13cefe276a0150151.png

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

Помимо этого, , я установил на радиатор сборки из 80-миллиметровых кулеров по 10 сверху и 10 снизу. При напряжении питания 12 Вольт они достаточно тихие, и слышны только если к ним приблизиться в упор.
191a24754abff2aff1d8f0e8a29202d3.png

UPD Меня часто спрашивают, как кулеры видеокарт ведут себя в масле. Работают нормально, и при их отключении нагрев видеокарт немного увеличивается. Предположу, что кулеры помогают немного перемешать масло окружающее чипы карт.
[H3]Итоги[/H3]
Не смотря на то, что на проект ушло 2 года работы в фоновом режиме, я считаю его цель достигнутой. Я сделал обогреватель, который отлично отапливает комнату и получил интересный элемент интерьера.
Построенная система охлаждения в целом справляется со своей задачей в холодное время года и межсезонье, а летом может работать при использовании дополнительного водяного охлаждения. Но это касается майнинга в режиме 24/7, если же летом майнить только ночью, то и без дополнительный усилий имеющаяся система охлаждения вполне решает свои задачи.
Не буду подробно описывать финансовые аспекты этого проекта, потому что повторять его сейчас все равно было бы бессмысленно, даже не из-за дефицита видеокарт или роста курса доллара а из-за скорого перехода валюты Ethereum на , после чего перспективы майнинга на GPU будут весьма туманны. Тем не менее, проект полностью окупился и даже помог мне остаться на плаву в наше непростое время.
Главным же результатом этого проекта я считаю полученные навыки и опыт в новых для меня отраслях. Как показали недавние события, все бренно в этом мире. Сегодня валюта может обесцениться, завтра квартира сгорит. Навыки не подвержены изменениям курса валюты и не привязаны к материальным ресурсам. Если поддерживать их актуальность, то они останутся со мной пока я жив.
1e2f045d07d4815f790131756f362d94.png













 
Сверху Снизу