Как написать программу для 3д принтера

от admin

Приручаем динозавров, или как я писал свой собственный host controller для лаборатории 3D-печати

В этой статье я хочу рассказать о своем опыте разработки свободного ПО для управления 3D принтерами на Qt5, проблемах и особенностях общения с RepRap’ами и прочим радостям.

Результатом этого опыта стал RepRaptor — минималистичный свободный host-controller для 3D принтеров.

Всех интересующихся приглашаю под кат.

Немного предыстории

За последний год я сильно заинтересовался 3D печатью, и не просто 3D печатью, а ее свободной составляющей — проектом RepRap. Руководство ВУЗа поддержало начинания, и в течении этого года моими и единомышленников усилиями в МГТУ МИРЭА открылась лаборатория 3D печати.
Очень скоро возникла проблема — существующее в экосистеме ПО имело недостатки, которые сильно мешали работе. Поэтому было решено эти проблемы ликвидировать, создав свое ПО.

  • Они все написаны на интерпретируемых языках, открытие и разбор файлов занимают на слабом железе иногда и по 10 минут;
  • Те из них, что написаны на Mono еще и периодически падают, и обрекают кучу пластика на безвременную кончину (Виновато тут, скорее всего, не само Mono, а минимальное внимание к сборкам на ней от авторов);
  • В интерфейс вынесено мало кодов, зато встречается совсем уж избыточный функционал (прошу прощение за свой минимализм);

Почему Qt?

Как это все исправить? Довольно просто — написать хост на языке, который будет работать быстрее, и сделать его максимально простым. Сказано — сделано. Для разработки был выбран Qt, и не случайно. Этот замечательный фреймворк не только распространяется свободно, но и позволяет писать кроссплатформеные приложения без сопровождающей мультиплатформу в C++ боли, а так же не так давно периодически используемый мной QSerialPort стал официальной частью фреймворка.

Кроме того, я не знаю ни одной IDE, такой же быстрой и удобной для меня, как QtCreator.

Так как все окна, да и сам Ui в целом делался с помощью .ui файлов в WSIWYG редакторе Qt — я опущу все, связанное непосредственно с интерфейсом. Смотреть будем «под капот».

С чего начать, или как разговаривают принтеры

Общаться необходимо работать с целым зоопарком разнообразных плат (Melzi, RAMPS 1.4, Teensylu, Gen7 1.5.1 и т.д.), благо сообщество проекта RepRap уже давно определилось с протоколом и списком команд. Для общения с любой платой используется серийный порт и протокол G-code.

В своей лаборатории 3D печати мы с товарищами используем прошивку Repetier, которая, на ряду с прошивками Marlin и Teacup поддерживает большинство стандартных кодов.

Первое разочарование — протокол

Спецификация серийных портов RS-232 обширна и интересна, но, к сожалению редко где используется на полную. При эмуляции серийного порта по USB, очень часто к микроконтроллеру подключаются только линии TX и RX, отвечающие за передачу данных. Линии, такие как DTR (сброс при подключении), обычно не используются, и это печально.

  1. Принтер сообщает о простое строчкой wait;
  2. Хост отправляет команду G-Code, кончающуюся переносом строки;
  3. Принтер подтверждает прием команды строчкой Ok <номер строки>.

Выглядит это примерно так:

Где cs — вычисленная контрольная для строки.

Как правило кодогенераторы, преобразующие 3D модели в G-Code для печати контрольных сумм не генерируют, а оставляют это на усмотрение хоста.

У принтера есть буффер, размер которого в большинстве случаев составляет 16 команд.

Реализация протокола

Qt имеет отличную функцию для облегчения жизни разработчику — сигналы и слоты.
Сигнал — это новое для C++ понятие. Сигнал объявляется в классе подобно слоту:

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

Вызывается сигнал из любого метода родительского класса, и очень просто:

После такого вызова все слоты, присоединённые к этому сигналу будут вызваны при первой возможности в порядке присоединения, и им передастся значение 100.
Что такое слот? Коротко — это самый обычный метод, объявленный слотом

Соединяются сигнал со слотом тоже очень просто:

Есть и ограничение — у сигнала и слота обязательно должен совпадать передаваемый тип.

Учитывая сигналы и слоты можно очень легко написать асинхронный приемник\передатчик для связи по серийному порту.

Самая простая часть — чтение.

Для реализации связи по серийному порту используется упомянутый выше QSerialPort (экземпляр которого назовем «printer»), имеющий сигнал readyRead(), вызывающийся каждый раз, когда на порт приходит информация. Все что от нас требуется — это создать в своем классе слот, который мы и будем вызывать при появлении этого сигнала, соединить их, и ждать. Что же мы будем читать? Как уже описано выше, в первую очередь нас интересуют ответы ok и wait. Так как наш код исполняется асинхронно, а у принтера есть буфер — нам надо где-то сохранить колличество строчек ок, которые мы приняли, чтобы при отправлении знать, сколько мы можем отправить. Хранить их будет в переменной «readyRecieve».

Отлично, с приемом разобрались. А что у нас с отправкой? Вот тут и видим дефект протокола. Никакой аппаратной команды для обозначения готовности к приему данных у нас нет, а значит нету и соответствующего сигнала у нашего QSerialPort. Значит отправлять будем по таймеру. Таймер в Qt работает до безобразия просто и удобно — мы создаем экземпляр класса QTimer, соединяем его сигнал timeout() с нашим слотом, который будет выполнятся по этому таймеру, а после этого запускаем его — timer.start(ms). В последствии было выяснено, что в зависимости от производительности ПК оптимальный промежуток находится от 1 до 5 мс. Кстати, если указать таймеру промежуток 0, то выполнятся он будет как только у Qt появится свободная минутка.

Еще стоит упомянуть, что отправляем мы либо команду от пользователя, либо файл. Так как разбор файла сводится к заурядной загрузки файла в массив, а так же фильтровании линий целиком из комментариев (чтобы не отправлять лишнее на принтер и не захламлять память), я решил опустить эту часть. Массив строк из файла называется gcode.

Ну вот, с серийным портом разобрались? Еще нет. Еще нам надо отловить ошибки. Для этого вновь прибегнем к сигналам и слотам, на этот раз будем слушать сигнал error(SerialPort::SerialPortError error) от нашего экземпляра QSerialPort:

Неаккуратное обращение с принтером расстраивает динозаврика, %username%.

Делаем наш хост умнее

Выносим кнопки команд

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

Иконок пока нет, но они обязательно появятся в последующих релизах. Реализация большинства этих кнопок весьма простая:

Метод injectCommand, способ работы которого мы уже узнали ранее, в реализации отправщика кода тоже весьма прост:

Получаем дополнительные данные

RepRap — это суровый DIY. Настолько суровый, что случается всякое:

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


Под температуру определим отдельную группу элементов

Как же ее узнать? Во время нагрева, принтер перестает принимать команды, и вместо ok или wait начинает присылать температуру. Строка температуры выглядит так:

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

Как реализована многопоточность в Qt? Очень удобно. Есть несколько способов создать отдельный поток. Полноценный способ — создать поток с помощью QThread, но нам не нужен полноценный поток для простого разбора строки, так что будем использовать другой способ — передадим нашу функцию разбора вместе с аргументам объекту QFuture, и будем за ним следить. Делается это так — для начала нам необходимо создать экземпляр QFutureWatcher, класса, который следит за QFuture, и сообщает нам о его состоянии. Затем надо написать нашу функцию разбора. Так как функция может вернуть только одну переменную, я решил создать специальный тип для передачи температуры:

И функция разбора:

Теперь осталось только отдать эту функцию потоку при удобном случае (вставляем дополнительную проверку в автомат функции приема):

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

Вот и все, теперь каждый раз, когда принтер сообщает нам о температуре — мы разбираем эту строку и красиво отображаем ее в интерфейсе.

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

Кто-то возможно скажет, что эти проверки излишние, но когда ты управляешь принтером с Asus EEEPC 900AX, и хочешь одновременно читать хабр — это необходимость.

Печать с SD карты

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

  • Получать список файлов
  • Выбирать файл
  • Поставить файл на печать
  • Поставить печать на паузу
  • Сообщать о прогрессе

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

Флаг нужен, так как наш метод чтения вызывается для каждой строки.

За одно для открытия диалога будем посылать сигнал. Самому же себе. Да, соединять можно даже сигналы со слотами одного и того же объекта.

Слот, который мы подключаем к этому сигналу:

После этого надо перевести интерфейс в режим печати. Я сделал это путем введения дополнительного флага sdprinting. Статус печати с SD карты проверяется в схожей манере с температурой.

Софт — в массы

Как бы сильно я не любил GitHub — далеко не все любят собирать софт сами. Не смотря на кроссплатформенность Qt — это фреймворк, а не среда для кросс-компиляции. А это значит, помимо бинариков под платформу Linux-amd64 нужны еще бинарики под Linux-i386, Windows 32 и OSX 64. Что ж, с первыми двумя все просто — достаточно добавить нужные наборы в QtCreator. А как быть с Windows 32 и OSX 64? С последней — никак. Я пытался, но я умываю руки. Единственный способ собрать что-то под OSX — делать это на OSX. К сожалению, легально это сделать не возможно.

Debian и его пакеты

Очень хотелось собрать пакет под любимый Linux Mint, на котором и ведется разработка. По началу я хотел собрать пакеты для PPA, но в итоге пришел к тому, что собирать надо со статическими библиотеками Qt, а потому пакеты на первое время собирать пришлось руками. Почему статическая линковка? Все очень просто — даже в Ubuntu 14.04, на которой основан Mint в источниках имеется только Qt 5.2.1. В ходе тестов первых двух релизов на разных системах выявились баги QSerialPort, исправленные в новых версиях, а потому было принято решение поставлять все с последними версиями. К тому же, вики Qt говорит, что статически линкованые библиотеки несколько быстрее работают.

Руками пакет собирается весьма просто — он должен содержать дерево каталогов файловой системы Debian, в котором размещены все файлы, которые мы собираемся установить. Написав .desktop файл для того, чтобы получить пункт в меню на конечной системе, я написал небольшой bash скрипт для сборки нужной мне версии пакетов:

Все, что он делает — это создает дерево каталогов, копирует иконки и .desktop файл, а после этого генерирует описание пакета для пакетного менеджера, вставляя нужную версию.

Windows и MXE

Одно дело — собирать пакеты под свою ОС, другое дело — под чужую. Тут необходим тулчеин — набор инструментов для сборки. Благо под Windows есть отличный MinGW, а для Linux есть не менее отличный MXE — менеджер окружения для кросс-компиляции с использованием свободных библиотек.

Установка до смешного простая — клонируем MXE и говорим ему, какие нам библиотеки нужны:

После этого можно смело идти пить кофе — сборка всего этого добра занимает приличное время.

После того, как сборка окончена — можно написать скрипт сборки проекта под Windows автоматически:

Просто и сердито. Работоспособность легко проверяется в Wine:

Выводы

Когда я это начинал — я надеялся написать простую отправлялку G-code файлов, которая ничего больше бы не делала, а справится планировал за вечер. Но, как это часто бывает — проект вышел за рамки изначального плана, и теперь представляет из себя нечто большее. Впереди еще много чего предстоит сделать — хотя бы тот же графический редактор EEPROM, которого так не хватает, а так же поддержка контрольных сумм.

Однако уже сейчас RepRaptor позволяет мне спокойно использовать свой ASUS EEEPC как стабильный хост для принтера, чего не мог достичь ни один другой хост из тех, что я пробовал. Ну и знания Qt у меня определенно улучшились, и все равно еще есть место для оптимизаций.

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

Как написать программу для 3д принтера

  • Они все написаны на интерпретируемых языках, открытие и разбор файлов занимают на слабом железе иногда и по 10 минут;
  • Те из них, что написаны на Mono еще и периодически падают, и обрекают кучу пластика на безвременную кончину (Виновато тут, скорее всего, не само Mono, а минимальное внимание к сборкам на ней от авторов);
  • В интерфейс вынесено мало кодов, зато встречается совсем уж избыточный функционал (прошу прощение за свой минимализм);

  1. Принтер сообщает о простое строчкой wait;
  2. Хост отправляет команду G-Code, кончающуюся переносом строки;
  3. Принтер подтверждает прием команды строчкой Ok <номер строки>.


Под температуру определим отдельную группу элементов

  • Получать список файлов
  • Выбирать файл
  • Поставить файл на печать
  • Поставить печать на паузу
  • Сообщать о прогрессе
Debian и его пакеты
Windows и MXE

Программы для 3D печати и 3D принтера

  • Создать математическое описание объекта – объёмную модель;
  • Объяснить устройству, как её печатать – в какой момент времени в какую точку добавить материал и как его отвердить.
  • Твердотельные;
  • Поверхностные – сеть.
Kissslicer

Slic3r

CraftWare

  • Работа с моделью;
  • Работа с поддержками и заполнением пустот;
  • Слайсер – нарезка модели для печати.
123D Catch

3D Slash

TinkerCAD

3DTin

Blender 3D

Топ бесплатных программ для 3D печати в 2021 году

Топ бесплатных программ для 3D печати в 2021 году

Рабочий процесс 3D печати

  • ПО для трехмерного моделирования/дизайна/САПР;
  • ПО для редактирования, просмотра и восстановления файлов STL;
  • Программы-слайсеры;
  • Хост 3D принтера.

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

PrusaSlicer

Топ бесплатных программ для 3D печати в 2021 годуЭто программное обеспечение основано на базе Slic3r и в отличие от прототипа завоевал большую популярность среди пользователей. Главным отличием является большой список настраиваемых параметров и дополнительные функции, делающие работу более удобной.

MatterControl 2.0

Топ бесплатных программ для 3D печати в 2021 годуMatterControl — это CAD программа для моделирования,слайсер и одновременной хост для 3D принтера. Благодаря функциям хоста вы можете напрямую контролировать печать при подключении принтера через USB. Также программа позволяет нарезать файлы формата STL для экспорта на SD-карту для автономной печати и конечно же, создавать проекты в отдельном разделе программного обеспечения САПР.

3DPinterOS

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

KISSlicer

Топ бесплатных программ для 3D печати в 2021 годуАббревиатура этого приложения “Keep It Simple Slicer” может смутить неопытных пользователей. На самом деле это довольно сложный инструмент для 3D печати. Противоречивые отзывы пользователей тем не менее позволяют сделать вывод о том, что программа популярна и имеет достаточный функционал для работы с 3D принтерами.

Slic3r

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

SliceCrafter

Топ бесплатных программ для 3D печати в 2021 годуБраузерный слайсер от разработчиков IceSL.С помощью программы можно быстро загрузить STL файлы, нарезать их, а затем подготовить G-код к печати. В браузерной программе можно воспользоваться практически всеми опциями, которые предлагает IceSL.

IceSL

Топ бесплатных программ для 3D печати в 2021 годуПрограмма IceSL — отличный инструмент для 3D моделирования и печати. Несколько рабочих окон позволяют редактировать модель напрямую через скрипт на языке Lua, выбирать разные настройки для нарезки модели, а также просматривать полученный результат в режиме реального времени. Несмотря на кажущуюся сложность работы с ПО, IceSL дает возможность изящного параметрического моделирования.

OctoPrint

Топ бесплатных программ для 3D печати в 2021 годуЭта программа является хостом для 3D принтеров, который позволяет контролировать печать и менять настройки. ПО также дает возможность дистанционного управления принтером с помощью Wi-Fi модуля, подключенного к устройству.

Repetier-Host

Топ бесплатных программ для 3D печати в 2021 годуЛюбимый хост разработчиков Rep-Rap — Repetier является высокопроизводительным программным обеспечением для управления печатью и подготовки файлов.

AstroPrint

Топ бесплатных программ для 3D печати в 2021 годуКак и 3DPrinterOS эта программа является облачным решением для контроля и управления вашими 3D принтерами. Также, с помощью AstroPrint можно менять настройки слайсера, управлять профилями принтера и материала. Бесплатная учетная запись позволяет сохранять информацию для печати, а также иметь доступ ко всем настройкам через браузер или мобильное приложение AstroPrint.

3D-Tool Free Viewer

Топ бесплатных программ для 3D печати в 2021 году3D-Tool Free Viewer предназначена для поверки структурной целостности файлов STL и возможности печати документа на вашем принтере. Дополнительные функции, например “Поперечное сечение”позволяют также заглянуть внутрь 3D модели и оценить некоторые параметры.

MakePrintable

Топ бесплатных программ для 3D печати в 2021 годуЭтот полезный веб-сервис позволяет проверить файлы STL а наличие ошибок и исправить критические значения,которые могут повлиять на печать. В отличие от других бесплатных программ, MakePrintable дает возможность полного контроля процесса. Вы можете выбрать уровень качества печати, сделать сетку пустотелой, исправить количество полигонов и даже объединить несколько мишеней в одну.

Meshmixer

Топ бесплатных программ для 3D печати в 2021 годуПрограмма Meshmixer — это супер современное и бесплатное программное обеспечение из семейства Autodesk для 3D печати для просмотра, проверки, редактирования и восстановления STL файлов. Эта программа помогает выявить потенциальные проблемы и автоматически устранить их. Например, программа идентифицирует недостаточную толщину стенок.

Читать:
Как пройти трен лабиринт

MeshLab

Топ бесплатных программ для 3D печати в 2021 годуMeshLab — это приложение с открытым исходным кодом, которое позволяет редактировать файлы формата STL, а также имеет инструменты для работы с трехмерными треугольными сетками. Возможности софта помогают проверять, визуализировать, восстанавливать и преобразовывать сетки, и даже объединять модели в твердые тела и заделывать дыры.

NetFabb

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

  • NetFabb Standard позволяет быстро подготовить модель к печати;
  • NetFabb Premium с расширенными возможностями для создания решеток, поддержек и автоматической упаковки деталей;
  • NetFabb Ultimate позволяет вычислить сбои в сборке, предоставляет инструменты для моделирования, настраиваемые стратегии траектории инструмента, а также помогает автоматизировать процесс подготовки модели к 3D печати;
  • NetFabb Simulation помогает моделировать определенные технологии печати металлом до начала производства.

Лучшее бесплатное программное обеспечение для 3D моделирования и 3D печати

3D Builder

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

Figuro

Топ бесплатных программ для 3D печати в 2021 годуЭтот браузерный софт для моделирования сочетает в себе доступность TinkerCAD и мощность более совершенных инструментов для 3D моделирования. Программа подойдет для тех, кто хочет улучшить свои навыки в проектировании, при этом не сильно углубляясь в детали.

Fusion 360

Топ бесплатных программ для 3D печати в 2021 годуFusion 360 — это профессиональная CAD программа для 3D моделирования. В отличие от других ПО, софт позволяет охватить весь процесс планирования, тестирования и трехмерного дизайна.

FreeCAD

Топ бесплатных программ для 3D печати в 2021 годуМногофункциональное программное обеспечение САПР позволяет отлично развить дизайнерские навыки. ПО для параметрического моделирования создает модели в соответствии с заданными параметрами. Большим преимуществом является возможность перетаскивания и управления объектами непосредственно с помощью мыши.

OpenSCAD

Топ бесплатных программ для 3D печати в 2021 годуВ отличие от других представленных программ, OpenSCAD больше фокусируется на CAD аспекте 3D моделирования. Софт работает как 3D-камиллятор, который считывает файл сценария, описывающий 3D модель, а затем преобразует объект в 3D модель.

Blender

Топ бесплатных программ для 3D печати в 2021 году

OnShape

Топ бесплатных программ для 3D печати в 2021 годуOnShape — мощная браузерная программа для САПР, которая предназначена для профессиональных пользователей. Софт позволяет организовать совместную работу над проектом и хранить данные в облаке.

Руководство по разработке 3D-моделей для FDM-принтеров

3D-печать набирает популярность семимильными шагами, а 3D-принтеры становятся всё более и более доступными. Это означает, что люди всё больше и больше перестают пользоваться сторонними услугами 3D-печати, а сами присоединяются к 3D-моделированию и пользуются собственными FDM-принтерами.

А это в свою очередь означает, что людям требуется всё больше и больше высококачественных моделей, которые можно распечатать в домашних условиях, и это с учетом того, что не каждая модель может быть создана по технологии FDM. Поэтому возникает вопрос: как сделать так, чтобы разрабатываемая модель была реализуемой по FDM-технологии 3D-печати?

Что такое FDM-принтер?

Перед тем как вы приступите к созданию моделей для FDM-принтеров, вы должны понять, как они работают. 3D-принтеры реализуют так называемую аддитивную технологию, то есть материал при создании объекта добавляется в соответствии с 3D-моделью. Такая технология отличается от традиционной субтрактивной, когда материал удаляется, а то, что остается, — и есть конечный продукт.

Моделирование методом наплавления (Fused Deposition Modeling — FDM) — технология, наиболее часто используемая в домашних 3D-принтерах. В таких принтерах применяется специальная нить, которая подается через сопло, где расплавляется до жидкого состояния и затем слой за слоем выкладывается на платформу печати, на которой моментально охлаждается и застывает. Процесс расплавления и выкладывания нити исходного материала продолжается до тех пор, пока не образуется требуемый объект.

American_Sports_Car_Model.jpg

Почему при моделировании следует учитывать условия FDM-процесса?

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

Rock-Espresso-Cup.jpg

Что делает модель распечатываемой по FDM-технологии?

Чтобы модель можно было реализовать по FDM-технологии, следует иметь в виду несколько общих принципов.

    Дизайн под правильные материалы. В домашних принтерах наиболее часто используются филаменты из акрилонитрилбутадиенстирола (ABS) и полилактида (PLA). При создании любых моделей важно помнить о свойствах этих материалов, потому что с учетом этих свойств может потребоваться та или иная подгонка элементов. Например, изготовленный из PLA простой крючок на стену, чтобы вешать на него одежду, в определенных местах должен быть толще того крючка, который изготовлен промышленным способом из керамики, – только тогда можно рассчитывать, что он окажется достаточно прочным, чтобы выдержать нагрузки. Кроме того, важно учитывать температуру плавления используемого филамента. Нет никаких проблем, чтобы распечатать на FDM-принтере форму для выпечки, но только вот температура плавления у ABS составляет 150 °C, а у PLA – 105 °C, так что испечется совсем не то, что нужно.

В файлах .STL содержится информация о геометрии поверхности без учета окраски и текстуры 3D-объекта.

В файлах .OBJ содержится информация о поверхности, специальный MAT-индекс и данные по текстуре.

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

2printaka.jpg

Рекомендуемая минимальная толщина стенок модели зависит от толщины конкретного слоя при печати, а также от особенностей дизайна (размеров, массы, которую модель должна держать, и т.п.), но 1 мм и толще, как правило, подходит для большинства случаев FDM-печати.

Минимальное расстояние между прилегающими деталями для большинства FDM-принтеров должно составлять 0,4 мм, но чем больше, тем лучше.

Уменьшить количество полигонов и размер файла можно с помощью таких программ, как Blender или Meshmixer

Проверить модель на наличие нежелательных дыр можно с помощью таких программ, как Solid Inspector (бесплатный плагин для Sketchup), которые укажут на все сомнительные в этом смысле места. Есть еще программа Netfabb, которая сама закроет в модели все имеющиеся огрехи в макетной сетке.

Помните: материал имеет значение!

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

Следуйте Правилу 45, сокращая потребность в материале для подпорок.

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

Комбинируйте несколько файлов в один, в котором объекты находятся друг от друга на расстоянии 2 мм. Пользователь в таком случае сможет распечатать все за один заход. Помните, что в FDM-принтерах все объекты должны опираться на платформу, поэтому убедитесь, что начальная вертикальная координата у всех одинакова.

Следуйте этим указаниям, и они помогут вам уверенно идти к успеху в деле FDM-печати!

Основы G-кода для 3D печати: список и руководство

G-код — это язык программирования для числового программного управления (ЧПУ). Другими словами, это язык, на котором говорит компьютер, управляющий машиной, и он передает все команды, необходимые для движения и других действий.

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

Тем не менее, если вы хотите глубже понять 3D-печать, важно изучить основы G-кода. Эти знания позволят вам лучше диагностировать и контролировать процессы 3D печати, а также настроить прошивку 3D принтера, такую как RepRap или Marlin.

В этой статье мы расскажем об основах G-кода, в том числе о том, как читать, понимать и писать команды, даже если вы новичок в программировании!

Что такое G-код?

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

Хотя термин "G-код" используется для обозначения языка программирования в целом, это также один из двух типов команд, используемых в 3D-печати: "основные" и "вспомогательные" команды.

Основные командные строки отвечают за типы движения в 3D-принтере. Такие команды обозначаются буквой "G". Помимо управления движением по трем положительным осям, выполняемым печатающей головкой, они также отвечают за экструзию нити.

С другой стороны, разные команды заставляют машину выполнять не геометрические задачи. В 3D-печати такие задачи включают команды нагрева сопла и станины, а также управление вентилятором и т.п. Вспомогательные команды обозначаются буквой "M".

Синтаксис G-кода

Каждая строка с G-код командами имеет определенный синтаксис. Каждая строка соответствует только одной команде, что может привести к очень длинным кодам.

Первым аргументом любой строки является сам код команды. Как вы видели, это может быть код типа "G" или "M", за которым следует номер, идентифицирующий команду. Например, "G0" соответствует команде линейного перемещения.

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

Комментарии в G-коде

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

Программистам часто необходимо включать объяснения на понятном языке, чтобы другие программисты могли понять определенные строки или участки кода. Также может случиться так, что вы забудете, почему вы написали что-то определенным образом, в результате чего вам будет трудно снова разобраться. Для решения этой проблемы используются комментарии к коду. Комментарии включают все (в той же строке) после точки с запятой и полностью игнорируются машиной при выполнении G-кода. Таким образом, они предназначены исключительно для глаз программистов.

Важные команды для 3D печати

Хотя существуют буквально сотни команд G-кода, в следующих нескольких разделах мы рассмотрим самые основные и важные из них. Как только вы освоитесь, вы сможете самостоятельно изучить и другие команды.

G0 и G1: линейное движение

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

Однако обе команды работают одинаково. Параметры для G0 или G1 включают конечные положения для всех осей X, Y и Z, степень экструзии, выполняемую во время перемещения, и скорость, определяемую скоростью подачи в заданных единицах.

Пример

G1 X90 Y50 Z0.5 F3000 E1 сообщает 3D принтеру двигаться по прямой линии (G1) к конечным координатам X = 90 мм, Y = 50 мм, Z = 0,5 мм при скорости подачи (F) 3000 мм / мин. и выдавливании (E) 1 мм материала в экструдере.

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

G90 и G91: абсолютное и относительное позиционирование

Команды G90 и G91 сообщают машине, как интерпретировать координаты, используемые для движения. G90 устанавливает "абсолютное позиционирование", которое обычно используется по умолчанию, а G91 — "относительное позиционирование".

Ни одна из команд не требует каких-либо параметров, и установка одного автоматически отменяет другой. Позиционирование работает довольно просто, так что давайте сразу перейдем к делу.

Пример

Допустим, мы хотим переместить печатающую головку на X = 30 в строке. В режиме абсолютного позиционирования это будет выглядеть так:

Этот простой ход скажет принтеру переместить печатающую головку так, чтобы она располагалась на X = 30. Теперь, для перемещения относительного позиционирования, нам нужно знать, где печатающая головка находится в данный момент. Предположим, что это X = 10:

G91 сначала указывает 3D принтеру интерпретировать координаты относительно текущего положения (X = 10). Зная это, достаточно просто нужно переместиться на 20 мм в положительном направлении оси X, таким образом достигнув X = 30, как нам хотелось бы.

G28 и G29: автоматическое возвращение "в нуль" и калибровка стола

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

Перемещение "в нуль" важно не только для ориентации устройства, но и для предотвращения выхода печатающей головки за границы. Команда G28 обычно выполняется перед каждым началом 3D печати.

Конкретная ось может быть индивидуально перемещена в исходное положение путем включения X, Y или Z в качестве параметров. В противном случае только G28 обеспечит перемещение в нуль по всем осям.

Пример

Другая команда, G29, запускает последовательность автоматической калибровки стола. Существует множество различных методов выравнивания стола перед 3D печатью. Обычно эта операция обеспечивается прошивкой, а не конечными пользователями. По этой причине мы не будем вдаваться в подробности, касающиеся методов и параметров команд. Просто знайте, что G29 обычно отправляется после автоматического возврата в исходное положение (G28). В результате должна выполняться автоматическая калибровка стола, которая определяется прошивкой.

G29; выполнить последовательность автоматического выравнивания станины

M104, M109, M140 и M190: установка температуры

Это важные команды, которые, опять же, не связаны с движением.

Для запуска команда M104 устанавливает целевую температуру, которую должен достичь хот-энд, и удерживает ее до тех пор, пока не будет указано иное.

Некоторые из параметров включают фактическое значение температуры (S) и печатающую головку (T) для нагрева.

Пример

Эта командная строка указывает 3D принтеру нагреть хот-энд до 210 ° C. После установки целевой температуры принтер продолжит выполнение следующей командной строки, нагревая хотэнд.

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

Установка температуры стола очень похожа, но вместо этого утсанавливается с помощью команд M140 и M190:

M106 и M107: Управление вентилятором

Еще одна важная команда для 3D принтеров: команды M106 и M107 обеспечивают управление вентилятором.

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

Параметр скорости должен иметь значение от 0 до 255. Значение 255 обеспечивает 100% мощности, и любое число в этом диапазоне будет указывать соответствующий процент в процентах.

Пример

Несколько вентиляторов с регулируемой скоростью можно определить с помощью параметров индекса (P), поскольку каждому вентилятору присваивается индекс встроенным ПО.

Наконец, команда M107 отключит указанный вентилятор. Если индексный параметр не указан, обычно отключается частичный охлаждающий вентилятор.

Структура программы

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

Стоит отметить, что если вы используете текстовый редактор для открытия файла G-кода, созданного с помощью 3D-слайсера, возможно, он не сразу запустится с G- или M-командами. Например, такой слайсер, как Cura или Simplify3D, запускает код, включая некоторые параметры процесса печати, определенные ранее в комментариях. Эти линии не влияют на печать, а вместо этого представляют собой краткий справочник по таким параметрам, как, например, высота слоя.

Этап 1: Инициализация

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

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

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

Некоторые процедуры инициализации (например, тот, который используется PrusaSlicer) включают в себя процесс очистки сопла или печать одной прямой линии перед переходом к процессу 3D печати.

Этап 2: 3D печать

Вот где начинается волшебство. Если вы посмотрите на нарезанный на слои файл G-кода, вы осознаете, что на самом деле невозможно понять, что на самом деле делает сопло.

3D печать — это послойный процесс, поэтому вы обнаружите, что этот этап включает в себя множество движений в плоскости XY при печати одного слоя. Как только это будет сделано, одно крошечное движение в направлении Z определит начало следующего слоя.

Вот пример того, как команды G-кода могут выглядеть на этапе 3D печати:

Этап 3: перезагрузка 3D принтера

Наконец, когда 3D печать завершена, некоторые последние строки команд G-кода переводят принтер в состояние по умолчанию.

Например, сопло может перейти в заранее определенное положение, нагреватели хот энда и стола выключены, а двигатели отключены.

Ввод и вывод данных через терминал

До сих пор мы говорили только о том, что компьютер отправляет на 3D принтер команды G-кода (обычно передаются через SD-карту). Однако это не единственный способ коммуникации.

Некоторые программные продукты для управления 3D принтером, такие как Pronterface и OctoPrint, позволяет напрямую взаимодействовать с 3D-принтером, и в этом случае вы можете вводить команды вручную.

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

Например, команда M105 "сообщить о температурах" извлечет текущие температуры сопла и слоя (которые затем могут отображаться чем-то вроде OctoPrint).

Эта связь также очень полезна для просмотра и изменения настроек EEPROM, которые жестко запрограммированы на уровне прошивки. Такие параметры, как шаги двигателя / мм, максимальная скорость подачи или ПИД-регулятор, можно визуализировать с помощью M503 ("настройки отчета"), изменить вручную, а затем сохранить с помощью M500 ("сохранить настройки").

Написание G-кода

К настоящему времени вы должны быть в состоянии читать и понимать G-код намного лучше. Рекомендуем посмотреть в сторону следующих вариантов для углубления своих знаний:

    — отличный инструмент для проверки ваших навыков, поскольку вы можете писать команды G-кода и соответственно имитировать их. На самом деле это очень весело!
  • просмотр экспортированных файлов G-кода из слайсеров также должен дать вам некоторое представление о том, как G-код работает для 3D печати.
  • в качестве справочника по командам можно использовать информацию с официального сайта Marlin.

Совместимость

Мы надеемся, что с пониманием команд G-кода вы станете более продвинутым пользователем 3D принтера. Хотя G-код — не самый сложный компьютерный язык, он все же требует практики и изучения.

Прежде чем завершить эту статью, возможно, стоит немного поговорить о совместимости G-кода.

Существует много типов прошивок для 3D печати, и каждый может иметь разные "разновидности" G-кода. Это может привести к серьезным проблемам совместимости, поскольку команды, работающие на одной машине, могут не работать на другой.

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

Надеемся, что вам понравилось это краткое руководство. Удачного кодинга и 3D печати!

Похожие статьи