Подсветка 3d принтера своими руками

Добавил пользователь Дмитрий К.
Обновлено: 06.09.2024

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

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

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

Два пути сборки 3D-принтера своими руками. Плюсы и минусы самостоятельной сборки

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

Есть два пути сборки 3D-принтера своими руками:

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

Полностью самостоятельная сборка - усложненный вариант без инструкции и с большей ответственностью

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

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

Теперь перейдём ближе к теме и посмотрим, какие конкретно плюсы и минусы есть у самодельного принтера.

Плюсы

Более низкая стоимость в сравнении с готовыми вариантами

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

Цены на 3D-принтеры начинаются с 12 тыс. рублей, и в первых рядах наиболее выгодных позиций стоят именно наборы для сборки.

Кстати, ознакомиться с такими комплектами на нашем сайте можно здесь: Наборы для сборки

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

Возможность кастомизации

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

Ценный опыт и знания

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

Теперь перейдём к минусам.

Минусы

Процесс сборки

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

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

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

Настройка принтера

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

Выбор прототипа 3D-принтера для сборки своими руками

Кинематика

Наиболее распространены в использовании филаментные и фотополимерные принтеры, однако в подавляющем большинстве случаев для сборки принтера своими руками выбираются FDM-принтеры, использующие в печати расплавленный пластик (филамент). Поэтому и рассматривать для сборки будем именно FDM-принтер.

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

Теперь по конструкции. По большему счету все принтеры различаются за счёт кинематики движения. Это может быть кинематика H-bot, CoreXY, Delta, конструкции с подвижным столом (Prusa, Felix, Cube) и др. Однако наиболее распространенной, в частности, для самостоятельной сборки, является кинематика 3D-принтера типа Mendel. Ее мы и рассмотрим.

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

Принтер на фото: Anycubic Mega-S

Для самостоятельной сборки можно выбрать в качестве прототипа принтеры типа Mendel или Prusa, информации по которым вполне достаточно в различных источниках в Интернете.

Принтер типа Mendel

Электронная база принтера

На данный момент есть множество разнообразных способов снабдить принтер электронными “мозгами”, однако наиболее распространённый вариант это использовать плату Arduino (в частности, Arduino Mega 2560), установленную на специальный “шилд” (что-то вроде материнской платы, только для 3D-принтера) вкупе с драйверами мотором и др.

Arduino Mega 2560

Для прошивки понадобятся среды Arduino IDE и Marlin (последняя и является по сути конституцией принтера, задающей правила его работы). Для дальнейшей настройки удобно использовать программу Pronterface (о ней поговорим ближе к концу статьи).

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

Итак, предположим, вы выбрали мастер-модель и определились с прошивкой. Теперь перейдем к конструкции принтера.

Детали самодельного 3D-принтера. Приобретение запчастей для сборки принтера своими руками

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

Однако даже при выборе готового комплекта не будет лишним прочесть этот пункт для общего развития в теме. Итак, приступим:

Корпус (рама, каркас)

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

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

А вот и пример рамы из фанеры

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

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

Приобрести шпильки можно практически в любом строительном магазине или рынке.

Рама принтера, собранная целиком из шпилек

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


В предыдущих двух частях я рассказал о том как делал GUI, заводил управление шаговым двигателем и организовывал работу с файлами на USB-флэшке.

Сегодня я напишу о процессе печати, выводе печатаемых слоев на экран засветки и об оставшихся, не таких существенных вещах:

4. Вывод изображений слоев на дисплей засветки

4.1 Вывод изображений на УФ-дисплей

Как вообще микроконтроллер, у которого нет специализированной периферии, смогли заставить рефрешить изображение на матрице высокого разрешения со скоростью 74 миллиона пикселя в секунду (разрешение 2560х1440, 20 кадров в секунду) по интерфейсу MIPI? Ответ: с помощью FPGA с подключенной к ней 16-мегабайтной SDRAM и двух микросхем интерфейса MIPI — SSD2828. Две микросхемы стоят потому, что дисплей логически разделен на две половины, каждая из которых обслуживается по своему отдельному каналу, получается два дисплея в одном.

Изображение для вывода на дисплей хранится в одном из 4 банков SDRAM, микросхема FPGA занимается обслуживанием SDRAM и выводом изображения из нее в SSD2828. FPGA генерирует для SSD2828 сигналы вертикальной и горизонтальной синхронизации и гонит
непрерывный поток значений цвета для пикселей по 24 линиям (8R 8G 8B) в каждую из SSD2828. Частота кадров получается около 20 Гц.

Данные изображения внутри пакета представляются в битовом формате: 1 — пиксель светится, 0 — пиксель затемнен. Увы, это полностью исключает возможность организации полутонового размытия краев печатаемых слоев — антиалиасинга. Чтобы организовать такой способ размытия необходимо переписывать конфигурацию (прошивку) FPGA, к чему я пока не готов. Слишком давно и не очень долго я работал с FPGA, придется практически заново все осваивать.

Микросхемы SSD2828 так же подключены к микроконтроллеру по SPI. Это нужно для того, чтобы при включении сконфигурировать их регистры, перевести их в спящий или активный режим.
Имеются еще несколько линий между микроконтроллером и FPGA/SSD2828 — сигнал сброса (Reset) и сигналы выбора активного чипа (Chip Select) на каждую из микросхем.

Вообще, эта схема работы довольно далека от оптимальной, на мой взгляд. Было бы, например, логичнее подключить FPGA к микроконтроллеру по параллельному интерфейсу внешней памяти, данные передавались бы гораздо быстрее, чем по SPI с ограничением по частоте в 20 МГц (при повышении частоты FPGA уже перестает нормально принимать данные). Плюс ко всему сигнал сброса заведен не на физический вход Reset FPGA, а как обычный логический сигнал, то есть аппаратного сброса по нему у FPGA не происходит. И это тоже сыграло злую шутку, о которой будет ниже.

Все это я выяснил, разбираясь в исходниках производителя. Функции работы с FPGA я перенес из их исходников как есть, пока еще не до конца понимал как оно все работает. К счастью, китайцы откомментировали свой код в достаточной степени (на китайском языке), чтобы можно было разобраться без больших сложностей.

4.2 Чтение слоев из файла для печати

Ок, с выводом готового изображения более-менее разобрались, теперь я расскажу немного про то как эти изображения добываются из файлов, подготовленных к печати. Файлы форматов .pws, .photons, .photon, .cbddlp — это, по сути, куча изображений слоев. Такой формат пошел, насколько я знаю, от китайской компании Chitu, которая и придумала делать платы с такой схемой (мкроконтроллер — FPGA — SDRAM — SSD2828). Предположим, нужно напечатать модель высотой 30 мм с толщиной каждого слоя 0.05 мм. Программа-слайсер нарезает эту модель на слои указанной толщины и для каждого из них формирует его изображение.

Таким образом получается 30/0.05=600 изображений разрешением 1440х2560. Эти изображения упаковываются в выходной файл, туда же вписывается заголовок со всеми параметрами и такой файл уже и попадает в принтер. Изображения слоев имеют глубину цвета 1 бит и сжимаются алгоритмом RLE по одному байту, в котором старший бит указывает значение цвета, а семь младших битов — число повторов. Такой способ позволяет сжимать изображение слоя с 460 КБ до примерно 30-50. Принтер считывает сжатый слой, разжимает его и отправляет построчно в FPGA.

У производителя это происходит следующим образом:

  1. Читается один байт из файла и распаковывается в байтовый массив — если очередной бит равен 1, то и очередному байту присваивается значение 1, иначе значение 0. Так повторяется пока не будет заполнен весь байтовый массив, размер которого равен числу пикселей в строке дисплея (1440), то есть все значения для строки дисплея.
  2. Этот байтовый массив передается в функцию, которая упаковывает его опять в битовый массив размером 1440 бит (180 байт).
  3. Полученный битовый массив передается в FPGA как данные для строки в составе пакета.

Так вот, китайцы при формировании байтового массива внутри цикла проверяли достигнут ли конец первой половины, если не достигнут, то значение писалось по указателю *p, а иначе по указателю *(p+48). Эта проверка для каждого из 1440 значений, да еще и модификация указателя для половины из них, явно не способствовали скорости работы цикла. Я разбил этот один цикл на два отдельных — в первом заполняется первая половина массива, после этого цикла указатель увеличивается на 48 и начинается второй цикл для второй половины массива. В оригинальном исполнении слой читался и выводился на дисплей за 1.9 секунды, одна только эта модификация снизила время чтения и вывода до 1.2 секунд.

Еще одно изменение касалось передачи данных в FPGA. В оригинальных исходниках она происходит через DMA, но после старта трансфера по DMA функция ожидает его завершения и только после этого начинает декодировать и формировать новую строку изображения. Я убрал это ожидание, так что следующая строка формируется пока данные предыдущей строки передаются. Это уменьшило время еще на 0.3 сек, до 0.9 на слой. И это при компиляции без оптимизации, если скомпилировать с полной оптимизацией, то время уменьшается до примерно 0.53 сек, что уже вполне приемлемо. Из этих 0.53 сек примерно 0.22 сек занимает вычисление CRC16 и около 0,19 сек — формирование битового массива из байтового перед передачей. А вот сама передача всех строк в FPGA занимает около 0.4 секунды и с этим, скорее всего, уже ничего не сделать — тут все упирается в ограничение максимально допустимой для FPGA частоты SPI.

Если бы самому заняться написанием конфигурации FPGA, то можно было бы отдать ей и разжатие RLE, и это могло бы на порядок ускорить вывод слоя, но как сделано так сделано…

И да, я же собирался написать о косяке, связанном с тем, что FPGA не сбрасывается аппаратно по сигналу сброса от микроконтроллера. Так вот, когда я уже научился выводить изображения слоев, доделал сам процесс печати, то столкнулся с непонятным багом — один раз из 5-10 печать запускалась с полностью засвеченным дисплеем. Я вижу в отладчике, что слои читаются корректно, данные в FPGA отправляются какие надо, FPGA подтверждает корректность CRC. То есть все работает, а вместо рисунка слоя — полностью белый дисплей. Явно виноваты или FPGA или SSD2828. Еще раз перепроверил инициализацию SSD2828 — все нормально, все регистры в них инициализируются нужными значениями, это видно при контрольном чтении значений из них. Тогда я уже полез в плату осциллографом. И выяснил, что когда происходит такой сбой, FPGA никакие данные в SDRAM не пишет. Сигнал WE, разрешающий запись, стоит в неактивном уровне как вкопанный. И я бы, наверное, долго бился с этим глюком, если бы не знакомый, который посоветовал попробовать перед сбросом дать в FPGA явную команду отключения вывода изображения, чтобы в момент сброса гарантированно не было обращений от FPGA к SDRAM. Я попробовал — и все заработало! Больше этот баг ни разу не проявил себя. В конечном итоге мы с ним пришли к выводу, что корка (IP-core) контроллера SDRAM внутри FPGA имплементирована не совсем правильно, сброс и инициализация контроллера SDRAM происходит нормально не во всех случаях. Что-то мешает правильному сбросу если в этот момент происходит обращение к данным в SDRAM. Вот так…

4.3 Пользовательский интерфейс во время печати файла

После того как пользователь выбрал файл и запустил его печать появляется вот такой экран:


Это довольно стандартный экран для подобных фотополимерных принтеров.

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


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

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

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

5. Всякая мелочь типа управления засветкой и вентиляторами, загрузки и сохранения настроек и т.п.

На плате есть 3 коммутируемых через мощные MOSFET выхода — один для УФ-светодиодов засветки и два для вентиляторов (охлаждение диодов засветки и охлаждение дисплея, например). Тут ничего интересного — выходы микроконтроллера подключены к затворам этих транзисторов и управлять ими так же просто, как мигать светодиодом. Для высокой точности выдерживаемого времени засветки она включается в основном цикле через функцию, задающую время работы:


А выключается из миллисекундного прерывания таймера по достижению счетчика работы засветки нуля:

5.1 Настройки, загрузки из файла и сохранение в EEPROM

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

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

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

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

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

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


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

После успешного парсинга файла новые настройки сразу же применяются и сохраняются в EPROM.

Счетчики часов наработки компонентов принтера обновляются в EPROM только по окончании или прерывании печати файла.

6. Дополнительные возможности для комфорта и удобства

6.1 Часы с календарем

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

Время, число и месяц отображаются слева вверху на главном экране:


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

6.2 Блокировка экрана от случайных нажатий во время печати

Это было сделано по просьбе одного из знакомых. Ну, почему бы и нет, может быть полезным в некоторых случаях. Блокировка включается и отключается длительным нажатием (~2.5 сек) на заголовке экрана печати. Когда блокировка активна, в правом верхнем углу отображается красный замочек. При окончании печати блокировка автоматически отключается.

6.3 Уменьшение тока двигателя в режиме удержания, отключение двигателя по простою

6.4 Скринсейвер

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


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


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

6.5 Проверка засветки и дисплея


6.6 Настройки


Конечно же, здесь можно выставить время и дату (раз уж есть часы) в открывающемся отдельно экране:


Ввод числовых значений производится в специальном экране:


Тут я реализовал все те возможности, которых мне не хватало в других принтерах.

6.7 И последнее — экран с информацией о принтере


Этот экран доступен прямо из главного меню. Самое важное тут — это версия прошивки/FPGA и счетчики наработки. Внизу еще притулилась информация об авторе интерфейса и адрес репозитория на Гитхабе. Автор интерфейса — это задел на будущее. Если я все же сделаю возможность конфигурации интерфейса через простой текстовый файл, то там будет возможность указать имя автора.

Конец

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

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

Жду вопросы и замечания, и спасибо за интерес к этим статьям.

— Часть 1: 1. Пользовательский интерфейс.
— Часть 2: 2. Работа с файловой системой на USB-флэшке. 3. Управление шаговым двигателем для движения платформы.
— Часть 3: 4. Вывод изображений слоев на дисплей засветки. 5. Всякая мелочь типа управления засветкой и вентиляторами, загрузки и сохранения настроек и т.п. 6. Дополнительные возможности для комфорта и удобства.

image

… или как я изобретал собственные велосипеды с преферансами и гейшами на свой вкус — писал с нуля прошивку для фотополимерного принтера. На данный момент прошивка уже вполне работоспособна.

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

Для лучшего понимания дам очень короткое описание работы фотополимерных LCD 3D-принтеров для тех, кто с ними не знаком:

Предыстория

Лет 5 назад я заинтересовался 3D-печатью. Не в профессиональном плане, а просто стало любопытно что же это такое, что она может и как работает. Сначала был приобретен FDM-принтер, один из самых бюджетных на тот момент — Anet A8. И в общем-то мне понравилось, учитывая, что чудес от него я не ждал. На нем я до сих пор иногда печатаю что-то утилитарное — какие-нибудь крепления, подставки, корпуса. А затем мне стало интересно пощупать фотополимерную печать с ее потрясающей детализацией, но тогда фотополимерные принтеры назвать бюджетными было никак нельзя. И вот пару лет назад я все-таки созрел на покупку одного из них — Anycubic Photon S. Уже и цены были не такими высокими, и я смог себе позволить потратить энную сумму просто для удовлетворения любопытства.

Но по мере освоения принтера я начал замечать недостатки в работе принтера. Нельзя настроить это, сложно изменить то, не работает так как хотелось бы и т.д. В частности, например, мой принтер не умел работать с каталогами на флэшке, не поддерживал кириллические имена файлов, скорость движения платформы в определенных случаях была не той, что бы меня устроила. Я даже дизассемблировал прошивку и начал разбираться с ее внутренностями. Реализовал работу с кириллицей в именах файлов, изменил процесс вывода на интерфейсный экран (ускорил), переделал работу с языками. Но все это было несерьезно, нужно было иметь исходники, чтобы можно было нормально переделать все что хотелось. А исходники никто из производителей почему-то не дает. И вот несколько месяцев назад я узнал, что есть такой набор для фотополимерного принтера от довольно известного в сфере 3D-печати производителя — MKS DLP. В набор входят: сама материнская плата, дисплей засветки с защитным стеклом (5.5", 2560х1440) и интерфейсный дисплей с сенсорной панелью (3.5", 480х320). И для этого набора идут открытые исходники и схема — бери и переделывай как угодно! И я приобрел этот набор, рассчитывая изменить в исходниках то, что мне не нравится.

Когда я получил комплект и скачал с гитхаба исходники, приготовившись их слегка модифицировать, у меня случился легкий шок. Ну, во-первых их родная прошивка оказалась в принципе работоспособна, но это и все, что можно сказать о ней хорошего. Недостатков в ней полно и печатать с ней было бы очень не комфортно. Уже на этапе проб родной прошивки у меня начала закрадываться мысль, что модифицировать придется не так уж слегка. А когда я открыл их проект с исходниками… Во-первых, это жуткая мешанина Ардуины и библиотек CMSIS и HAL от ST (плата построена на микроконтроллере STM32F407). Во-вторых, в проект впихнута полная версия Marlin 3D. Кто не знает — Marlin 3D — это проект для управления FDM 3D-принтерами. Он поддерживает работу до 6 шаговыми двигателями, несколькими нагревателями с контролем температуры, кучи концевиков, парсинг G-кода с построением траекторий движения осей и много-много чего еще. Больше 3 МБ исходников. И сюда он был целиком впихнут только ради управления одним шаговым двигателем. Причем это управление было сделано совершенно без заморочек — в текстовой строке формировался G-код движения оси и эта строка передавалась на вход парсера Мерлина. Ну это как если бы взяли целиком автомобиль для того, чтобы использовать одну из его фар для освещения. Вообще создалось впечатление, что производитель взял исходники от своих плат для FDM-принтеров и просто сверху прикостылял код для работы с фотополимерной частью.

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

Итак, что мы имеем:

  • комплект MKS DLP, в который входят: материнская плата, интерфейсный дисплей 3.5" 480х320 и дисплей засветки 5.5" 2560х1440
  • родные исходники от производителя
  • схема материнской платы (без названий активных и номиналов пассивных компонентов)
  • вход питания 12-24 вольта
  • USB A разъем для подключения флэшки/картридера
  • коммутируемые выходы питания для засветки и двух вентиляторов
  • драйвер шагового двигателя A4988 и разъем для подключения двигателя
  • два разъема для подключения концевиков оси Z — верхнего и нижнего
  • разъем для подключения модуля WiFi
  • микросхема FLASH-памяти W25Q64
  • микросхема EEPROM-памяти AT24C16

Для инициализации периферии я использовал программу STM32CUBE MX. Но не использовал напрямую полученный из него результат, а вставлял нужные куски в свои исходники. При работе с периферией использовал библиотеки HAL от ST, а там, где нужно было получить максимальную скорость — работал с регистрами напрямую.

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

  1. Пользовательский интерфейс.
  2. Работа с файловой системой на USB-флэшке.
  3. Управление шаговым двигателем для движения платформы.
  4. Вывод изображений слоев на дисплей засветки.
  5. Всякая мелочь типа управления засветкой и вентиляторами, загрузки и сохранения настроек и т.п.
  6. Дополнительные возможности для комфорта и удобства.

1. Пользовательский интерфейс

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

1.1 Шрифты

Например, взять тот же шрифт 5х8. Если битовые данные хранятся по строкам, то для каждой строки получается избыток 3 бита. Или 3 байта на символ:

image

Или шрифт 7х12 с хранением данных по колонкам, тогда получается избыток данных 4 бита на колонку или 3.5 байта на символ:

image

В моей библиотеке битовые данные непрерывны для символа и выравнивание по границе байта идет только в конце символа.

Вот процедура нахождения в массиве данных символа:


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

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

Например, на фото ниже голубой текст и верхняя белая строка отрисованы моей библиотекой, а белая нижняя — стандартной ардуино-подобной библиотекой из родных исходников:

image

Голубой текст отрисовался в несколько раз быстрее, чем нижняя белая строка.

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

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

1.2 Вывод изображений интерфейса

Со сжатием вариантов немного — все более-менее хорошо сжимающие изображения алгоритмы требуют или прилично оперативки (по меркам микроконтроллера) или прилично времени на разжатие. Картинки же должны выводиться, разжимаясь на лету, и желательно чтобы картинка при выводе не уподоблялась ползущему прогресс-бару. Поэтому я остановился на RLE-сжатии — 1 байт кодирует количество повторов, а два следующих за ним — цвет. Для этого так же была написана утилита, преобразующая файлы .bmp в сжатые таким образом изображения. Заголовок состоит всего из 4 байт — по 2 байта на ширину и высоту изображения. В среднем фоновые изображения сжимаются таким способом в 5-7 раз, сильно зависит от размера одноцветных участков (чего и следовало ожидать). Например вот такая картинка сжалась с исходных 307 КБ до 74 КБ:

image

А вот такая — до 23 КБ с тех же 307:



Да, кстати, дизайнер из меня еще более фиговый, чем программист.

Меня такой результат устроил. Декодирование и вывод изображений происходит очень быстро — примерно 40 миллисекунд на полное фоновое изображение. Так что на таком варианте я и остановился.

1.3 Основа GUI

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

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

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

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

В конечном итоге я пришел к такой схеме: интерфейс состоит из двух основных типов элементов — экранов и кнопок.

Экран — это своего рода полноэкранный контейнер для кнопок. У экрана есть следующие свойства:

  • фоновое изображение
  • цвет фона
  • способ отрисовки фона — заливка фоновым цветом или вывод изображения
  • текст заголовка
  • цвет текста заголовка
  • шрифт текста заголовка
  • указатель на родительский экран (в который нужно вернуться при закрытии этого)
  • массив указателей на кнопки
  • указатель на процедуру обработки событий (вызывается периодически в основном цикле программы)
  • указатель на процедуру отрисовки экрана

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

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

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


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

1.4 Мультиязычность


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


При изменении языка происходит просто изменение указателя с массива текстов на старом языке на массив с текстами на новом языке:


Все тексты в исходниках — в кодировке UTF-8. С этими кодировками тоже пришлось повозиться. Тексты — в UTF-8, кириллица файлов — в Unicode-16, некоторые строки — в обычном ANSI. Тянуть в прошивку целый набор библиотек для поддержки многобайтовых кодировок не хотелось, поэтому было написано несколько функций для преобразований из кодировки в кодировку и для операций с текстами в разных кодировках, например, добавить к концу строки Unicode16 строку в UTF-8.
Добавление нового языка теперь свелось к созданию таблицы текстов на нем и к изменению значения константы LNG_LANGS_COUNT. Правда, остается вопрос со шрифтами, если в новом языке используются символы помимо кириллицы и латинницы… Сейчас я поддерживаю в исходниках русский и гуглопереведенный английский.

1.5 Хранение изображений и прочих ресурсов

Для хранения больших ресурсов на плате имеется SPI-флэш на 8 мегабайт W25Q64. Изначально я хотел поступить как всегда — задать смещение для каждого ресурса внутри флэши и сохранять их туда как просто бинарные данные. Но потом понял, что проблемы с таким способом мне гарантированно обеспечены как только количество сохраняемых ресурсов перевалит за пару десятков и мне захочется изменить, например, какую-то картинку, которая сохранена шестой по порядку. Если ее размер увеличится, то придется сдвигать адреса всех следующих ресурсов и перезаписывать их заново. Или оставлять после каждого ресурса запасное пространство неизвестного размера — кто его знает как может измениться какой-то из ресурсов. Да в гробу я видал эту возню :) Поэтому я плюнул и организовал на этой флэши файловую систему. К тому времени у меня уже работала файловая система для USB на основе библиотеки FatFS, так что мне было достаточно просто написать отдельные низкоуровневые функции чтения/записи секторов. Одно только меня слегка расстроило — размер стираемого сектора в этой микросхеме аж целых 4 КБ. Это во-первых приводит к тому, что файлы будут занимать место порциями по 4 КБ (записал файл 200 байт — он занял 4 КБ флэши), а во-вторых буфер в структуре каждого файлового указателя будет отъедать те же 4 КБ оперативки, которой в микроконтроллере не так уж много — 192 КБ. Можно было бы, конечно, извратиться и написать низкоуровневые функции так, чтобы они могли писать и читать и меньшими порциями, рапортуя о размере сектора, например, 512 байт. Но это замедлило бы работу с флэш, так что оставил размер сектора 4 КБ. Так что обращение к любому ресурсу осуществляется просто по имени его файла, что оказалось очень удобным. На данный момент, например, количество хранимых ресурсов перевалило уже за 90. И их обновление я сделал максимально простым — обновляемые (или новые) ресурсы записываются на USB-флэшку в определенный каталог, флэшка вставляется в плату, плата перезагружается в сервисный режим (во время включения или перезагрузки нажать и держать правый верхний угол дисплея) и автоматически копирует все найденные в этом каталоге файлы с USB-флэшки в SPI-флэш.


Продолжение следует.

По интерфейсу вышла, пожалуй, самая объемная часть. Если эта статья окажется интересной сообществу, то во вторую часть постараюсь вместить все остальное.

Ну и буду рад вопросам и замечаниям.

Ссылки


Комплект MKS DLP на Алиэкспресс
Исходники оригинальной прошивки от производителя на Гитхабе
Схемы от производителя двух версий платы на Гитхабе
Мои исходники на Гитхабе

Не все начинающие печатники могут позволить себе новый 3D-принтер . Во-первых, это дорого. Во-вторых, нужно понимать, что конкретно данная модель подойдет наверняка. Устройство печати – это не популярный смартфон в магазине. Его не получится пощупать, запустить и попробовать в деле. Вот и выходит, что единственный бюджетный путь в мир трехмерной печати – это сбор 3Д-принтера своими руками.

Почему выгодно собрать 3D-принтер своими руками

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

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

  1. Цена. Свой принтер обойдется на порядок дешевле, чем аналог из магазина. Средняя цена готового устройства находится в пределах ?20 000–30 000. Кит-комплект для сборки девайса из Китая встанет в ?12 000–15 000. Причем это будет пустая базовая версия, которую еще нужно будет дорабатывать. Собирая принтер самостоятельно, пользователь потратит в 2–4 раза меньшую сумму денег.
  2. Постепенная сборка, настройка и отладка собственной техники дает множество плюсов. В частности, пользователь учится всему процессу печати. Он познает каждый шаг. Понимает, какое действия последует при заданных параметрах. Может быстро найти проблему и устранить ее.
  3. Те юзеры, которые владеют покупными и самодельными моделями принтеров, могут с уверенностью сказать, что качество печати между ними не сильно различается. Конечно, если у печатника относительно прямые руки.
  4. Апгрейд. Собственноручно сделанный принтер легко обновлять и совершенствовать. Он печатает запасные и новые детали сам для себя. Таким образом снимается часть бюджета, плюс идет практика и оттачивание навыка.
  5. При должной сноровке можно сделать принтер с большей печатной областью. Тогда разница в стоимости между готовым устройством и самоделкой вырастет на порядок.

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

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

Чертежи для сборки принтера с нуля: самые лучшие схемы

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

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

фото заготовки для 3д принтера

3д модель корпуса

чертеж корпуса принтера

Принтер открытого типа. Это известная схема принтера Graber I3. В ее основе лежит рама из фанеры, к которой крепится подвижная ось Z. Направляющие для принтера закрепляют на вертикальный П-образный каркас. Блок питания и управления можно разместить на задней части неподвижной платформы. Некоторые умельцы устанавливают крепление для катушки филамента на верхнюю часть рамы. Однако такое расположение может незначительно влиять на качество печати. LCD-дисплей находится на передней части устройства.

фото корпуса

схема

схема

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

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

Пример по связке электрики и электронике:

  • управляющая плата Arduino mega 2560;
  • шилд-плата Ramps 1.4 – для соединения всех элементов в цепь;
  • шаговые двигатели Nema17 17HS4401;
  • печатная головка E3D V6;
  • LCD-дисплей LCD 2004.

Указанные компоненты отлично работают между собой, без конфликтов и подвисаний.

схема подключения

Пошаговая инструкция, как сделать 3D-принтер в домашних условиях

Общий алгоритм взят на основе коммерческой модели Prusa I3 Steel. Этот FDM-принтер довольно прост, при этом схема сборки подойдет как для новичка, так и для профи. На основе данного алгоритма можно собрать самодельный аппарат, не боясь пропустить что-либо важное.

  1. Сборка каркаса или рамы. Это П-образный скелет, который состоит из двух вертикальных и одной поперечной балки. Также в нижней части основания может быть соединительная плашка для усиления жесткости конструкции. Перпендикулярно вертикальным стойкам прикручивают ножки, чтобы рама могла уверенно стоять на плоскости.
  2. Собираем каретку нагревательной платформы. Укрепляем каркас под будущий стол. Вкручиваем направляющие валы. Устанавливаем каретку на валы.
  3. Собираем каретки для оси X и Y. Ставим направляющие на вертикальных стойках. Надеваем валы на правую каретку оси Y, после чего фиксируем основную каретку по оси X. Закрепляем валы в левой каретке Y.
  4. Монтируем двигатели оси X. Ставим муфты на вал. Сначала муфты, потом двигатель под ось X. Устанавливаем ремни. Натягиваем их на двигатели.
  5. Устанавливаем концевики на все оси.
  6. Интегрируем электронику. Основной чип Arduino и шилд Ramps. Пока не коммутируем платы между собой. Монтируем LCD-дисплей.
  7. Ставим нагревательную платформу. После чего можно приступать к монтажу экструдера.
  8. Теперь пристраиваем блок питания. Его можно закрепить в задней части устройства. Заводим питание электрики на клеммы.
  9. Выставляем джамперы и драйверы на Ramps. Здесь важно соблюдать положение установки. Джампер устанавливают строго в одном направлении, а именно, подстроечным резистором в противоположную сторону от разъема питания.
  10. Коммутируем электрику. Схема установки показана выше.
  11. Ставим вентиляторы и кулеры. Заводим питание на них.

Это общая схема монтажа принтера в домашних условиях. После его отстройки нужно провести калибровку и первичную настройку.

Подготовка к эксплуатации

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

Это общая схема подготовки печатного устройства к работе.

Ошибки и способы их избежать

Есть ряд ошибок, которые допускают начинающие 3D-мейкеры при сборке, настройке и самой печати. Рассмотрим их:

  1. Изготовление каркаса кустарным образом. Заготовки для рамы выпиливают обычной ножовкой. Таким способом не получится достичь точных размеров. Появятся зазоры. Части элементов конструкции будут болтаться, люфтить. Все это скажется на качестве печати. Не стоит дешевить на данном пункте. Лучше заказать все детали рамы в лазерной мастерской. Такой резак сделает выверенные детали для рамы с минимальными допусками.
  2. Использование тонкого материала для рамы. Для построения каркаса берут фанеру, оргстекло, акрил, МДФ. При этом их толщина должна быть не менее 6 мм. В противном случае конструкция может дать трещину. Через этот казус прошел не один десяток печатников.
  3. Для снижения шума и вибрации, которые исходят от двигателей, стоит использовать резиновые прокладки-демпферы. Это могут быть силиконовые ножки, которые продают для стиральных машин в хозяйственных магазинах. Также это скажется на качестве изготавливаемой модели.
  4. Отсутствие системы охлаждения. Сильная нагрузка на блок питания, отсутствие вентиляции в области подогреваемой платформы – все это может привести к подвисаниям печати. Не стоит экономить на охлаждении.
  5. Заказ дешевых компонентов. Не нужно экономить на электрике! Если выйдет из строя хотя бы один моторчик, работа встанет. Это особенно губительно скажется на работе тех 3D-мейкеров, кто делает модели на заказ.
  6. Выставлять завышенные настройки. Некоторые печатники ставят самую высокую скорость печати. Они наивно полагают, что это не скажется на качестве конечной продукции. Рекомендуем экспериментировать с разными материалами и настройками, чтобы найти золотую середину. Не нужно сразу же загонять принтер. Испортите гору пластика в пустую.

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

Интересно! Естественно, в процессе сборки и первичной настройки пользователь будет сталкиваться с другими трудностями. Но все их можно решить, если не торопиться и делать все последовательно.

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

Читайте также: