Переводим Flying Bear Ghost 6 на Klipper

2 декабря 2024

Flying Bear Ghost 6 работает на модифицированной прошивке Marlin. В целом, она работает неплохо. Однако многие 3D-печатники в последнее время отдают предпочтение Klipper. Утверждается, что эта прошивка работает еще лучше, и что перевести FBG6 на нее не так уж трудно. Но стоит ли оно того? Есть только один способ выяснить.

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

Первым делом познакомимся с действующими лицами, чтобы далее по тексту не возвращаться к этому вопросу:

  • Klipper — прошивка для 3D-принтера. Состоит из двух частей. Первая прошивается на микроконтроллер. Она управляет драйверами шаговых двигателей, температурой стола и сопла, и всяким таким. Вторая часть управляет первой частью с компьютера (часто одноплатного), а также предоставляет интерфейс для пользовательского кода;
  • Moonraker — приложение, предоставляющее Web API к Klipper;
  • Fluidd — один из Web UI к Klipper, работает с ним через Moonraker;
  • KIAUH — Klipper Installation And Update Helper. Набор скриптов для простой установки Klipper, Moonraker, Fluidd и прочих компонентов;

Все перечисленное является open-source и распространяется под GPL 3.0.

Для перевода 3D-принтера на Klipper понадобится одноплатник. Популярным выбором является Orange Pi 3 LTS из-за его открытости, невысокой стоимости, адекватной вычислительной мощности и встроенного Wi-Fi. Orange Pi 3 LTS, радиаторы и блок питания обошлись мне в популярном онлайн-магазине в 56$. Б/у одноплатники встречаются и по 30$.

На одноплатник нужно поставить Linux. Я воспользовался готовой сборкой KlipOr за авторством silver-alx. Как вариант, можно поставить голый Armbian, после чего склонировать KIAUH, и с его помощью установить Klipper, Moonraker и Fluidd. Насколько я понимаю, эффект будет тот же.

Скачиваем и распаковываем образ (я все делал под Xubuntu 24.04 LTS):

sudo apt install p7zip-full
wget https://github.com/silver-alx/sbc/ПУТЬ_ДО_НУЖНОГО_ОБРАЗА.7z
7z x Orangepi3-lts_3.1.0_debian_bookworm_server_linux5.16.17.7z
cd Orangepi3-lts_3.1.0_debian_bookworm_server_linux5.16.17/
# проверяем контрольную сумму образа
sha256sum *.img
cat *.sha

Образ нужно записать на SD-карту. В некоторых источниках сообщается, что «апельсинка» не работает с картами объемом более 32 Гб. У меня не было желания проверять это экспериментально, поэтому я выбрал карту поменьше.

Перед записью проверяем, что SD-карта не смонтировалась автоматически. Такое возможно, если у вас установлено какое-то десктоп-окружение:

df -h
# если смонтировалась:
sudo umount /dev/...

Записываем образ:

sudo dd if=./ИМЯ_НУЖНОГО_ОБРАЗА.img of=/dev/mmcblk0 bs=1M

… и проверяем:

$ ls -la /dev/mmc*
brw-rw---- 1 root disk 179, 0 Nov 26 21:50 /dev/mmcblk0
brw-rw---- 1 root disk 179, 1 Nov 26 21:50 /dev/mmcblk0p1
brw-rw---- 1 root disk 179, 2 Nov 26 21:50 /dev/mmcblk0p2

Настраиваем подключение по Wi-Fi:

mkdir ~/mnt_boot
sudo mount -t vfat /dev/mmcblk0p1 /home/eax/mnt_boot \
  -o rw,uid=$(id -u),gid=$(id -g)
cd ~/mnt_boot/
mv orangepi_first_run.txt.template orangepi_first_run.txt
vim orangepi_first_run.txt

Меняем следующие строчки:

FR_net_change_defaults=1
FR_net_ethernet_enabled=0
FR_net_wifi_enabled=1
FR_net_wifi_ssid='OpenWrt'
FR_net_wifi_key='s3cr3t'

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

Демонтируем раздел:

sudo umount /dev/mmcblk0p1

Достаем SD-карту, вставляем в Orange Pi, включаем. В веб-интерфейсе вашего роутера где-то в разделе «DHCP Leases» появится новое устройство с именем orangepi3-lts и выданным ему IP-адресом. В него можно зайти по SSH с логином orangepi и паролем orangepi.

Собираем прошивку для микроконтроллера. На Orange Pi выполняем команды:

cd ~/klipper
make clean
make menuconfig

Настраиваем следующим образом:

Настройки прошивки Klipper для Flying Bear Ghost 6

Нажимаем Q, подтверждаем сохранение настроек. Далее говорим:

make

Будет создан файл out/klipper.bin. Переименовываем файл в Robin_nano_4.bin и закидываем на SD-карту 3D-принтера. Вставляем SD-карту в принтер, включаем. Происходит обновление прошивки, процесс отображается на дисплее устройства. По завершении выключаем принтер. В случае успеха файл прошивки на SD-карте будет переименован в Robin_nano_4.cur.

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

Систему можно перенести на eMMC одноплатника командой:

sudo nand-sata-install

В теории, SD менее устойчив к вибрациям, чем eMMC. Однако в нашей задаче, не то, чтобы проблема хоть как-то проявлялась для SD. Есть еще точка зрения, что eMMC дольше служат. Но мне не встречалось серьезных исследований, подтверждающих это (как минимум, нужно учесть влияние кэша ФС). В то же время, eMMC имеет вполне конкретные недостатки. Во-первых, на Orange Pi доступно лишь 8 Гб eMMC, из которых больше половины отхапает система. Во-вторых, что eMMC, что SD имеют какой-то срок службы. Когда портится SD, вы просто вставляете новую карту, тогда как eMMC нужно перепаивать. Я лично предпочел оставить систему на SD-карте.

Выключаем одноплатник:

sudo shutdown -P now

Теперь предстоит поместить его в 3D-принтер. Я пришел к такому варианту:

Переделка Flying Bear Ghost 6 под Klipper

Крепление одноплатника было нарисовано в OpenSCAD и напечатано PETG. Разумеется, его лучше напечатать заранее. Исходники крепления и файл STL вы найдете в этом архиве.

Снимаем боковую крышку 3D-принтера и находим большую ненужную пищалку. На фото она находится на столе справа. Пищалку снимаем, на ее месте будет стоять крепление для одноплатника. Удобно, что крепежные отверстия, а также отверстие для проводов уже предусмотрены. Не придется ничего сверлить.

Также снимаем большой кулер и под ним находим Wi-Fi модуль. На фото модуль находится на столе слева. Он не понадобится, так как Wi-Fi есть в одноплатнике. Зато нам понадобится UART, предусмотрительно разведенный под этот модуль.

Плату 3D-принтера (MKS Nano4 v3.1) соединяем с Orange Pi таким образом:

UART соединение между Orange Pi и MKS Nano4

Внизу иллюстрации показан разъем, где раньше стоял Wi-Fi модуль. Большой кулер возвращаем на место.

USB блок питания для Orange Pi я подключил к 220 В таким образом:

Соединения блока питания Orange Pi с линией 220 В

Здесь был сделан отвод от провода 220 В, идущего к родному БП на 24 В 12.5 А. В корпусе 3D-принтера USB блок питания я закрепил на двухстороннем скотче. БП заявлен как на 18 Вт, при том, что под нагрузкой Orange Pi потребляет <5 Вт. Должно хватить на подключение веб-камеры и прочей периферии в будущем.

Важно! Тачскрин FBG6 с Klipper так просто работать не будет. Сообщается, что их можно подружить, однако это сложно и имеет мало практического смысла. С тем же успехом принтером можно управлять со смартфона через Fluidd. Пока мы внутри, дисплей можно снять и поставить на его место заглушку. Для этого лучше напечатать ее заранее. Б/у дисплей можно продать на барахолке за ~20$.

Встречал мнение, что одноплатник нельзя размещать в камере для 3D-печати и что для него нужно освободить место в камере для электроники. На самом деле, варианты эквивалентны, поскольку термоизоляция между камерами отсутствует. Заинтересованным читателям предлагается убедиться в этом инструментально, в качестве упражнения. Также отсек для электроники не защищен ни от пыли, ни от ошметков пластика.

Действительно неплохое решение заключается в том, чтобы нарастить корпус 3D-принтера снизу на ~10 см. То есть, добавить подвал. В подвал необходимо переместить всю электронику, а не только Orange Pi с его БП. Но это непростая и не совсем дешевая модификация, и насколько реально она продлевает срок службы электроники — вопрос дискуссионный. Как владельцы FBG6 добавляют подвалы можно посмотреть здесь и здесь.

Забегая вперед, скажу, что печатал под Klipper крупные модели на 12+ часов в закрытой камере и не наблюдал проблем с перегревом или чем-то еще. Температура в камере не превышает 40°C, а температура процессора на одноплатнике не превышает 65°C. Это нормальные, рабочие температуры. Они не представляют опасности ни для железа, ни для крепления из PETG.

Закончив установку одноплатника, включаем 3D-принтер. Если все сделано правильно, спустя примерно 30 секунд должна загореться светодиодная лента. Открываем веб-браузер и вводим IP-адрес принтера.

Должны попасть во Fluidd (кликабельно, PNG 3072x1920, 893 Кб):

Klipper с веб-интерфейсом Fluidd на Flying Bear Ghost 6

Как видно из скриншота, веб-интерфейс также доступен в OrcaSlicer. Чтобы это работало, в свойствах подключения к принтеру меняем тип хоста на Octo/Klipper. Также открываем свойства принтера, в разделе Advanced находим G-code flavor, меняем на Klipper. Без этого будет работать, но в логах вы получите ошибки вроде «Invalid M204 command».

Во Fluidd в меню слева находим «Конфигурация», открываем файл printer.cfg. Полностью заменяем его содержимое вот этим printer.cfg. Если у вас стоковый FBG6 и вы переводите его на Klipper по данной статье, то в моем конфиге ничего менять не нужно, все уже настроено. Нажимаем «Сохранить и перезапустить».

Обязательно перепроверяем уровень стола. Для этого сначала паркуем голову и стол (это разные кнопки), а затем нажимаем TOOLS → BED_SCREWS_ADJUST. Далее проходим калибровку ПИД. Сначала запускаем макрос PID_B для стола. Выполнение макроса занимает около 10 минут. На графиках с температурами наблюдаем пилообразные кривые.

По окончании работы в окне «Консоль» появится что-то вроде:

14:35:21 $ PID_B
14:45:53 // PID parameters: pid_Kp=64.303 pid_Ki=1.280 pid_Kd=807.807
         // The SAVE_CONFIG command will update the printer config file
         // with these parameters and restart the printer.

Выполняем предложенную команду (она кликабельна), повторяем с макросом PID_E для сопла. Можно проверить, что в конце printer.cfg изменилась секция SAVE_CONFIG. Она выглядит похоже на закомментированный отрывок (строки начинаются с #*#), что многих сбивает с толку. Klipper в самом деле использует сохраненные таким образом значения.

Дополнение: Во Fluidd в разделе «Настройки» → «Обновление ПО» рекомендую выключить «Уведомлять об обновлениях», чтобы не было соблазна обновиться через Fluidd. Обновляться следует штатными средствами системы и через KIAUH, с последующей перезагрузкой. Иначе все может сломаться, я проверял.

Поздравляю, перевод 3D-принтера на Klipper завершен. Можно печатать.

Klipper является очень гибкой и расширяемой штукой. Так можно подключить веб-камеру, датчик автоуровня BLTouch, а также управлять 3D-принтером через Telegram-бота. Но если сравнивать Klipper без ничего со стоковой прошивкой FBG6, то для себя я вижу следующие преимущества.

Во-первых, температуры стали похожи на правильные. Раньше если я хотел температуру сопла 230°C, то указывал в слайсере 250°C. Здесь 230°C — это взаправду 230°C. Во-вторых, загрузка моделей по Wi-Fi стала работать быстрее и теперь работает всегда, а не в 99% случаев. В-третьих, заметно уменьшилось эхо благодаря input shaping. А ведь мы его не калибровали, воспользовавшись чужими настройками. Еще в Klipper’е есть алгоритм pressure advance, который также повышает качество печати.

Конечно, есть и недостатки. Во-первых, нужно потратить деньги на одноплатник и один вечер свободного времени. Во-вторых, 3D-принтер загружается медленне. Marlin’у требовалось ~10 секунд на загрузку, тогда как Klipper’у нужно ~30 секунд. И в-третьих, пользоваться Fluidd со смартфона субъективно не так удобно, как стоковым тачскрином. К счастью, такой сценарий возникает в основном при смене филамента. В остальное время делать у принтера нечего.

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

Метки: , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.