Переводим 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):
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-карта не смонтировалась автоматически. Такое возможно, если у вас установлено какое-то десктоп-окружение:
# если смонтировалась:
sudo umount /dev/...
Записываем образ:
… и проверяем:
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:
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_ethernet_enabled=0
FR_net_wifi_enabled=1
FR_net_wifi_ssid='OpenWrt'
FR_net_wifi_key='s3cr3t'
Понятное дело, SSID и пароль указываем свои. Если планируется подключение по Ethernet, то оно настраивается тем же образом, см комментарии в файле.
Демонтируем раздел:
Достаем SD-карту, вставляем в Orange Pi, включаем. В веб-интерфейсе вашего роутера где-то в разделе «DHCP Leases» появится новое устройство с именем orangepi3-lts и выданным ему IP-адресом. В него можно зайти по SSH с логином orangepi
и паролем orangepi
.
Собираем прошивку для микроконтроллера. На Orange Pi выполняем команды:
make clean
make menuconfig
Настраиваем следующим образом:
Нажимаем Q
, подтверждаем сохранение настроек. Далее говорим:
Будет создан файл out/klipper.bin. Переименовываем файл в Robin_nano_4.bin и закидываем на SD-карту 3D-принтера. Вставляем SD-карту в принтер, включаем. Происходит обновление прошивки, процесс отображается на дисплее устройства. По завершении выключаем принтер. В случае успеха файл прошивки на SD-карте будет переименован в Robin_nano_4.cur.
Примечание: Вы всегда можете вернуться на стоковую прошивку — см раз и два. Должен однако отметить, что как хорошо это работает на практике я не проверял.
Систему можно перенести на eMMC одноплатника командой:
В теории, SD менее устойчив к вибрациям, чем eMMC. Однако в нашей задаче, не то, чтобы проблема хоть как-то проявлялась для SD. Есть еще точка зрения, что eMMC дольше служат. Но мне не встречалось серьезных исследований, подтверждающих это (как минимум, нужно учесть влияние кэша ФС). В то же время, eMMC имеет вполне конкретные недостатки. Во-первых, на Orange Pi доступно лишь 8 Гб eMMC, из которых больше половины отхапает система. Во-вторых, что eMMC, что SD имеют какой-то срок службы. Когда портится SD, вы просто вставляете новую карту, тогда как eMMC нужно перепаивать. Я лично предпочел оставить систему на SD-карте.
Выключаем одноплатник:
Теперь предстоит поместить его в 3D-принтер. Я пришел к такому варианту:
Крепление одноплатника было нарисовано в OpenSCAD и напечатано PETG. Разумеется, его лучше напечатать заранее. Исходники крепления и файл STL вы найдете в этом архиве.
Снимаем боковую крышку 3D-принтера и находим большую ненужную пищалку. На фото она находится на столе справа. Пищалку снимаем, на ее месте будет стоять крепление для одноплатника. Удобно, что крепежные отверстия, а также отверстие для проводов уже предусмотрены. Не придется ничего сверлить.
Также снимаем большой кулер и под ним находим Wi-Fi модуль. На фото модуль находится на столе слева. Он не понадобится, так как Wi-Fi есть в одноплатнике. Зато нам понадобится UART, предусмотрительно разведенный под этот модуль.
Плату 3D-принтера (MKS Nano4 v3.1) соединяем с Orange Pi таким образом:
Внизу иллюстрации показан разъем, где раньше стоял Wi-Fi модуль. Большой кулер возвращаем на место.
USB блок питания для 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 Кб):
Как видно из скриншота, веб-интерфейс также доступен в 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: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-группе.