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

a36e0949f642c4cbdda5a48e60c7ae0d.png

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

Короткий FAQ по майнингу

Что такое майнинг?

Здесь я не буду рассказывать про блокчейн и принцип Proof-of-work, про это достаточно информации в интернете. Для понимания статьи, достаточно знать лишь то, что с внешней стороны майнинг выглядит как длительная (по возможности — непрерывная) работа компьютера (как правило специфичной конфигурации, с большим кол-вом видеокарт) или специализированного устройства (ASIC). Для непрерывности процесса майнинга, нужно обеспечить стабильность электропитания, доступа в интернет и не допускать перегрева оборудования. Цель майнинга — получение криптовалюты, объем получаемой криптовалюты в большинстве случаев прямо зависит от мощности оборудования и его эффективности. Криптовалюта может быть продана за реальные деньги.

Майнинг легален?

В последние годы, в новостях часто мелькают заголовки про подпольные майнинг-фермы, и у некоторых читателей может сложиться впечатление что майнинг это что-то нелегальное, однако преступным в таких ситуациях является не сам майнинг, а исключительно сопутствующая кража электроэнергии (самовольное подключение к электросети или несогласованное использование мощностей предприятия). В России, на момент написания статьи, майнинг не запрещен. Юридический статус криптовалюты — другой вопрос, но и тут явных запретов на покупку и продажу крипты пока нет.

Майнинг выгоден?

Ответ на этот вопрос может измениться в любой момент, он зависит многих факторов:

  • Эффективность конкретного оборудования для конкретного алгоритма в расчёте на единицу мощности

  • Стоимость оборудования и его предполагаемый срок окупаемости

  • Стоимость электроэнергии для конкретного потребителя

  • Стоимость добываемой криптовалюты, на момент ее продажи

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

Постановка задачи

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

d574965b4c795ec690b813b616362dce.png

Мои требования к майнинг-ферме:

  • Соответствовала габаритам шкафа вдоль стены

  • Отапливала лоджию до комфортной температуры зимой и по возможности отводила производимое тепло на улицу летом

  • Была относительно тихой, что бы находится в помещении было комфортно

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

  • Имела аккуратный закрытии корпус и не боялась пыли

  • Имела возможность удаленного управления и мониторинга состояния

Была прибыльной (окупала электроэнергию и приносила доход) с учетом цен на момент начала проекта

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

Релевантные навыки перед началом проекта

  • Базовый опыт разработки на С++, без интереса к низкоуровневым оптимизациям

  • Опыт в электронике уровня знания закона Ома и правил Кирхгофа

  • Нулевой опыт в проектировании печатных плат

  • Опыт работы с Arduino-подобными контроллерами на уровне понимания базовых примеров (мигать светодиодом, управлять двигателем, работать с разными модулями, для которых есть готовые библиотеки)

  • Опыт работы с 3D-принтером и навык моделирования на уровне рисования несложных угловатых моделей в SketchUp

  • Нулевой опыт в работе с ЧПУ станками

  • Нулевой опыт в проектировании мебели

Концепт

Выбор железа

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

  • ASIC. Специализированное устройство, предназначенное для майнинга на заданном алгоритме, преимущественно для SHA-256 (Bitcoin), но бывают и для некоторых других. Некоторые имеют встроенный блок питания, а некоторые требуют внешний.

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

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

  • Видеокарт с райзерами (удлинители шины шины PCI-E)

  • Материнской платы (с минимальным процессором и памятью)

  • Блока питания соответствующей мощности

Жесткий диск или SSD не обязательны, система вполне может грузиться с USB флешки.

Выбор способа охлаждения

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

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

  • Иммерсионное охлаждение. Оборудование полностью погружается в емкость с диэлектрической жидкостью. Существуют готовые решения в виде ванн для майнинга.

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

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

  • Водоблоки ощутимо дороже хорошего иммерсионного масла, в моем случае разница в цене получалась почти двукратной

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

  • При водяном охлаждении есть риск замыкания при малейшей утечке воды

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

Выбор иммерсионной жидкости

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

  • Дистиллированная вода. В теории, чистая вода является диэлектриком, однако на практике обеспечить ее чистоту и отсутствие примесей очень сложно. Как и обычная вода, она может замерзнуть, а так же достаточно быстро испаряется.

  • «Сухая вода», например Novec 1230, и его аналоги. Предназначена для пожаротушения в дата-центрах, но теоретически может использоваться и для иммерсионного охлаждения, есть ролики со стендов на выставках, где такая возможность демонстрируется. На хабре есть целая статья, о проблемах использования такой жидкости для охлаждения. В ней, помимо прочего, автор указывал на нестойкость это жидкости к ультрафиолету, что потребовало бы полностью закрытого корпуса, а это противоречит моим требованиям к эстетике решения.

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

В итоге, я выбрал минеральное масло STE Oil Crystal Plus 70T так как нашел в интернете много проектов с его применением. Стоимость литра зависит от приобретаемого объема, и в моем случае она составила примерно 550 рублей. Существуют и более дешевые аналоги, но я решил не рисковать. Заявленные свойства этого масла:

  • Бесцветное, без ощутимого запаха.

  • Разумеется диэлектрическое (не проводит ток)

  • Не токсично, продавец заявляет, что им можно лечить желудок

  • Не агрессивно к металлам, пластиковым деталям и изоляции проводов

  • Вязкость, по ощущениям, сопоставима с подсолнечным маслом и зависит от температуры (чем ниже, тем более вязкое)

  • Температура вспышки 198 °C

  • Температура застывания -60 °C

Заявленные температуры меня полностью устраивают, потому что предельная температура работы видеокарт составляет 80 °C, а температура воздуха в моем городе обычно не опускается ниже -30 °C.

Итак, я выбрал видеокарты и иммерсионный майнинг в масле, таким образом моя ферма будет состоять из следующих основных элементов:

  • Емкости с иммерсионным маслом (аквариума)

  • Видеокарт и блока питания внутри аквариума

  • Материнской платы над аквариумом

  • Радиатора отопления, который обеспечит прогрев помещения в холодный сезон

  • Уличного радиатора с вентилятором для отвода избытков тепла на улицу

  • Трубопровода, связывающего аквариум с радиаторами

  • Циркуляционного насоса

  • Моторизованных кранов для управления потоками теплоносителя через радиаторы

  • Датчиков потока, температуры и прочих сенсоров

  • Контроллера, который будет снимать показания датчиков, управлять кранами и включать/выключать материнскую плату. Так же контроллер должен передавать в облако телеметрию и обеспечивать возможность удаленного управления

  • Простого интерфейса контроллера в виде монохромного дисплея и кнопки-энкодера для отображения данных с датчиков и локального управления

Проектирование и реализация

Шкаф

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

Ранее я не имел опыта проектирования мебели, но это оказалось не так уж и сложно. Я бы сказал, что для создания подобного шкафа достаточно лишь знать, какие существуют виды мебельного крепежа (конфирматы, эксцентрики, межсекционные стяжки), фурнитура (петли, газлифты) и какой зазор нужно предусмотреть между фасадами ящиков. Проектирование осуществлялось в программе SketchUp с использованием плагина «Универсальная панель». Он позволяет экспортировать список использованных деталей со всеми их характеристиками (название, размеры и наличие кромок) для последующего заказа. В качестве материала выбрана белая ЛДСП толщиной 16 мм. Результат проектирования показан на фото ниже.

efc461921abb193e17224c47077f1fde.png

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

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

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

Аквариум

Мне требовалось изготовить емкость для заливки иммерсионного масла и размещения там оборудования, которая удовлетворяла бы следующим требованиям:

  • Точно соответствовала заданным размерам, так как она размещается внутри шкафа впритык к его стенкам

  • Была устойчива к высокой температуре масла

  • Была прозрачной для визуального контроля оборудования и для красоты

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

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

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

9bc2cd697da4243c08e37cc6a8e52072.png

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

02ad5126cf18d917db23b1dafc309093.png

Оборудование для майнинга

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

Видеокарты

При выборе видеокарт для майнинга, помимо их основного показателя — хешрейта нужно учитывать доступный объем видеопамяти, потому что для некоторых алгоритмов (например Ethash) требуется держать в памяти так называемый DAG-файл, размер которого медленно растет. В частности, в декабре 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 немного шире и выше).

Материнская плата

Существуют специальные модели материнских плат для майнинга, которые отличаются большим кол-вом слотов PCI-E и некоторыми оптимизациями в BIOS. Я выбрал модель ASUS B250 MINING EXPERT. В качестве процессора поставил дешевый Intel Celeron G3900, производительности которого достаточно для управления майнингом. Так же я установил два недорогих модуля оперативной памяти DDR-4 по 4 Gb каждый, хотя по факту хватило бы и одного модуля.

Блок питания

Я рассчитал, что для питания видеокарт и материнской платы мне потребуется БП мощностью как минимум 1500 Вт, а для перспективной замены на асики лучше с запасом до 2500 Вт. Обычные компьютерные блоки питания как правило имеют мощность от 300 до 1000 Вт, и иногда БП требуемой мощности получают из двух одинаковых блоков, соединенными с помощью специального синхронизатора. Другим решением является использование мощных серверных блоков питания, мощность которых обычно варьируется от 1500 до 3000 Вт. Серверные БП рассчитаны на непрерывную работу под нагрузкой, имеют высокий КПД и очень надежны, но у них есть своя специфика — они выдают только напряжение 12 Вольт, тогда как для материнской платы и видеокарт требуются и другие напряжения (+3.3 В, +5 В, -12 В). Для материнской платы это решается установкой специального DC-DC преобразователя (так называемого Pico PSU), а для питания райзеров видеокарт используют отдельные преобразователи на 5 Вольт (зависит от типа райзеров). В итоге я выбрал серверный блок питания HP мощностью 2450 Вт, известный в майнинговом сообществе как «лыжа» из-за своей вытянутой формы.

Райзеры

Райзером называется удлинитель шины PCI-E x1-x16, который позволяет разместить видеокарты не на самой материнской плате, а на определенном расстоянии от нее. Существуют шлейфовые райзера, но в майнинге наиболее распространены райзера с дополнительным питанием, в которых для передачи данных используется кабель USB 3.0 (правда исключительно как шлейф для соединения двух частей райзера — воткнуть его в USB порт материнки нельзя). Различаются по типу разъема питания и конфигурации имеющихся на них преобразователей напряжения. Я использовал райзеры версии 006, в которых дополнительное питание подается через разъем Molex.

Система подвеса

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

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

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

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

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

ddfeb87c9d38ad741c9fa31fb1bac89b.png

Софт

Для управления процессом майнинга, в материнку втыкается флешка с системой HiveOS, в которой через дашборд можно запускать или останавливать процесс майнинга, мониторить оборудование и осуществить разгон видеокарт. Эта система позволяет настроить остановку майнинга или выключение при перегреве, однако для эффективного управления фермой этого мало, по следующим причинам:

  • Если при перегреве майнинг останавливается, то в режиме ожидания карты все равно продолжают потреблять энергию, что делает процесс охлаждения малоэффективным

  • Если при перегреве система выключается, то материнка теряет связь с сервером и после остывания не сможет сама себя включить

  • Материнка плохо подходит для получения информации с датчиков и управления моторизованными кранами

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

Трубопровод

Трубопровод связывает аквариум с контурами охлаждения. У правого и у левого торца аквариума расположены два патрубка, по правому горячее масло уходит к радиаторам, а по левому, охлаждённое возвращается обратно. Таким образом в аквариуме обеспечивается течение масла слева-направо. На торцах обоих патрубков установлены датчики температуры DS18B20 и небольшие сетки для защиты от случайного попадания мусора в трубопровод.

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

fc42921a4a871a8459136a0e8fc8a712.png

Для трубопровода использовались полипропиленовые трубы, предназначенные для горячей воды, которые должны выдерживать температуру до 95 °C. Их монтаж очень прост — они режутся при помощи специального ручного инструмента и спаиваются недорогим электрическим паяльником.

Радиатор отопления помещения

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

2bf3972bb490ad893e3c15064e4f4368.png

Нишу радиатора я закрыл листом ДСП, на которую в декоративных целях приклеил тонкий ламинат, а выемку под радиатор прикрыл пластиковой решеткой.

Уличный радиатор

Вторым контуром охлаждения является уличный радиатор, дополнительно оборудованный вентилятором. Его дизайн навеян видом внешнего блока обычного кондиционера. Для изготовления корпуса я выбрал алюминиевый композит — листовой материал из двух слоев тонкого алюминия, между которыми находится толстый слой пластика. В природе композит встречается в виде вентфасадов на домах и в рекламных вывесках, по этому найти компанию, занимающуюся его резкой было не трудно. Так же, композит можно фрезеровать под изгиб, но я заказал отдельные детали, которые соединил между собой винтами при помощи 3D — печатных стоек из ABS пластика. Внутри же располагаются два автомобильных радиатора и 10-дюймовый вентилятор. Изначально планировалось, что один радиатор будет использоваться майнинг-фермой, а второй будет охлаждать антифриз для другого компьютера с жидкостным охлаждением, но потом я передумал и подключил его к ферме, параллельно первому.

9b6ce4547806c1e39bb8f8981575deb2.pngbd4345fcfc5b1bbbd3c180e4d32a8fd3.png

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

45d851c4e75c5bb6116f9fe6f7ca460f.png

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

075acbcf12eeccaaa7cd6aa7e5f4176c.png

Контроллер

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

Электроника

В качестве контроллера я выбрал отладочную плату с микроконтроллером 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.png1a9ab71ab881e7a878c2198f8fadb149.png

Программирование

Для программирования контроллера я использовал фреймворк STM32duino, что бы не выходить из зоны комфорта иметь возможность использовать множество Arduino-совместимых библиотек, написанных для модулей, которые я использую. Код разрабатывался в среде Visual Studio Code с плагином PlatformIO.

Одним из требований к контроллеру является возможность удаленного управления и мониторинга телеметрии. Конечно, такой функционал можно сделать в виде веб-сервера на самой плате, но на мой взгляд это решение является велосипедом и проигрывает по многим аспектам использованию специальных облачных сервисов для IoT устройств. Я рассматривал разные сервисы, такие как Arduino IoT Cloud, ThingsBoard и thinger.io, но в конце концов мой выбор пал на обновленный Blynk, в котором помимо неплохого мобильного приложения добавили веб-дашборды.

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

bc79783c351d67f2c3ff041194c5ca16.png

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

Перечислю основные реализованные на данный момент функции контроллера:

  • Удаленное включение/выключение майнинга, передача телеметрии

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

  • Перезагрузка оборудования при ошибках и зависаниях

  • Индикация температуры масла через изменение цвета RGB-ленты на направляющих

  • Управление моторизованными кранами и подъемным приводом через локальное

    © Habrahabr.ru