Цветная печать двумя хотэндами с сервоприводом

Подписаться на 3Dtoday
fix0id
Идет загрузка
Загрузка
21.04.17
8104
64
печатает на Prusa i3
Техничка
156
988e6890d9951e0b85bcc7901144200b.jpg
Приветствую!
Пару месяцев назад я решил, что мне жизненно необходимо научить свою Прюшу печатать двумя филаментами. Не откладывая в долгий ящик, распечатал Y-адаптер, подключил второй экструдер, и после непродолжительной настройки принтер выдал что-то цветное. Долго в таком виде он не остался, меня напрягала необходимость печатать каждый раз остров для прокачки пластика при смене цвета. Несмотря на очевидную дешевизну такого подхода (необходимо найти пару фитингов, дополнительную боуден трубку и еще один шаговик), я почти сразу от него отказался и кроме калибровочной инь-яни ничего и не распечатал.
Следом я решил попробовать печать двумя хотэндами на одной каретке, тут меня постигло еще большее разочарование. Из неактивного хотэнда подтекал пластик и оседал прыщами при любом соприкосновении с распечаткой, что драматически влияло на качество.
В поисках альтернативы, я наткнулся на Dondolo, в котором неактивный хотэнд при помощи серво привода убирается из зоны печати, также во избежание подтёков пластика выход хотэнда физически запирается при помощи препятствия. Данная идея мне очень понравилась, но у меня не директ экструдер, а боуден, в связи с чем я решил сделать нечто подобное, но под комплектующие, что у меня уже были.
Данным постом я не претендую на открытие Америки, но хочу рассказать в виде небольшой инструкции, как реализовать данную схему. Ниже речь идет о манипуляциях с Prusa i3 подобным принтером с боуден подачей филамента, хотэндом E3D v6 и прошивкой Marlin-1.1.0-RC8.

0. Необходимые компоненты

- ($3.6) второй хотэнд;
- ($1.0) вентилятор для охлаждения радиатора хотэнда (3010S);
- ($0.8) дополнительная боуден трубка;

- ($1.2) драйвер шагового двигателя;
- ($8.2) дополнительный шаговый двигатель;
- провода для подключения двигателя;
- ($6.0) дополнительный экструдер;

- держатель хотэндов (печатается, модель прилагается);
- ($2.0) подшипник 608zz – 1 шт.;

- винт М3х10 – 2 шт.;
- винт M4x5 – 1 шт.;
- винт M4x20 – 2 шт.;
- винт M4x25 – 4 шт.;
- винт М4х40 – 2 шт.;
- шайба кузовная M4 – 3 шт.;
- гайка M4 – 8 шт;

- ($4.7) серво привод (EMAX ES08MAII) + 3-хжильный провод для подключения;
- еще провода;
- ($0.5) банка из под лимонада/пива/кваса;

Также, если у вас уже есть нагревательный стол и обдув детали, то вам придется освободить один из силовых выходов D8 – D10, соответственно для организации обдува понадобится:
- ($0.6) (опционально) ключ на полевом транзисторе для организации обдува детали (MOSFET модуль);
- ($5.0) (опционально) вентиляторы охлаждения детали (в моем случае 2 турбины AV5015)
- (опционально) воздуховоды для охлаждения детали (печатается, модель прилагается)

Итого выходит, где-то на $34.

1. Внесение изменений в прошивку

Файл Configuration.h

Необходимо определить силовые выходы D10 – D8 (EEB или EEF). Строка по умолчанию: #define MOTHERBOARD BOARD_RAMPS_14_EFB , Меняем на:#define MOTHERBOARD BOARD_RAMPS_14_EEB //extruder, extruder, bed
Далее – указать количество экструдеров. Строка по умолчанию: #define EXTRUDERS 1 , Меняем на: #define EXTRUDERS 2
Указание на наличие датчика температуры на втором хотэнде и его тип. Строка по умолчанию: #define TEMP_SENSOR_1 0 , Меняем на: #define TEMP_SENSOR_1 1
Также необходимо указать на наличие сервомотора
Строка по умолчанию: #define NUM_SERVOS 0 , Меняем на: #define NUM_SERVOS 1

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

#define SWITCHING_HOTENDS
#if ENABLED(SWITCHING_HOTENDS)
#define SWITCHING_HOTENDS_SERVO_NR 0 // servo num
#define SWITCHING_HOTENDS_SERVO_ANGLES { 120, 0 } // Angles for E0, E1
#endif

120 и 0 – углы, на которые следует поворачиваться сервоприводу при переключении между хотэндами. Если при работе сервопривод начнет издавать характерный треск, значит у него не выходит повернуться на заданный угол, из-за погрешности стыков распечатанных деталей, тогда следует уменьшить разницу в значениях на 1-2 градуса (например 120 и 2 соответственно, как это сделал я).

Файл Marlin_ main.cpp

Ищем « void invalid_ extruder_ error» Добавляем перед этой функцией или после нее следующий код:

#if ENABLED(SWITCHING_HOTENDS)
inline void move_hotends_servo(uint8_t e) {
const int angles[2] = SWITCHING_HOTENDS_SERVO_ANGLES;
MOVE_SERVO(SWITCHING_HOTENDS_SERVO_NR, angles[e]);
}
#endif

Несколькими строками ниже должна начаться функция tool_change, необходимо найти следующую строку: «void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool no_move/*=false*/) {». В функции описывается поведение для разных случаев многоцветной печати (миксирующие хотэнды, раздельные головки, печать одним экструдером и сервой), все это очень занимательно, но нужно добавить наш случай.
Следует перед строкой «# if ENABLED( SWITCHING_ EXTRUDER)» добавить следующий код:

#if ENABLED(SWITCHING_HOTENDS)
float z_raise = 0.5;
destination[Z_AXIS] += z_raise;
planner.buffer_line_kinematic(destination, planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
stepper.synchronize();

move_hotends_servo(active_extruder);
delay(500);
destination[Z_AXIS] -= z_raise;
planner.buffer_line_kinematic(destination, planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
stepper. synchronize ();
# endif

Готово, компилируем и заливаем прошивку в микроконтроллер.

2. Подключение электроники
ed7460213d1955588675816a7a981f70.png
D10 - нагревательный элемент первого хотэнда; D9 - нагревательный элемент первого хотэнда; D8 – нагревательный стол; D11,5 V, GND – сервопривод (в моем рампсе от чего-то на пине 5v у D11 пина нет напряжения, я подключился в другой свободный 5v пин);E1 (2 B,2 A,1 A,1 B) – двигатель 2-го экструдера; Чуть ниже драйвер второго хотэнда; T0( GND, A13) – термистор первого хотэнда, T1( GND, A14) – термистор стола, T2( GND, A15) – термистор второго хотэнда, D4, GND - MOSFET модуль для подключения вентилятора обдува детали
8944c7843a5b468fd85d1eab362fe04e.jpg
V+, V- - вентилятор(ы) обдува модели; VIN, GND –блок питания; SIG –к выходу D4 RAMPS.

3. Сборка держателя хотэндов
Модель: http://www.thingiverse.com/thing:2260178. Хочу заметить, что модель я делал исходя из комплектующих, что у меня были в наличии, в интернете есть и другие модели, например: http://www.thingiverse.com/thing:1412102
31d7fb9fa65f87e3f1a0168de12d2cca.JPG
bda8719eaa7faa97b88df15a8628b4e4.JPG
8d101e817083ed8f53c9918cbb4e2bf1.JPG
3699be3363b714cf9a17be428cd9982a.JPG
88903b14edae527ba66836375abdfcf4.JPG
4. Настройка Слайсера, подготовка модели к печати (На примере Cura 15.04.6 RU).
4.1. Указываем на наличие второго экструдера
4.2. Задаем смещение второго хотэнда относительно первого. Меню «Принтер» - «Настройки принтера…». Смещения необходимо подобрать опытным путем, в случае использования модели держателя из статьи, предлагаю оттолкнуться от указанных на скриншоте.
15d5064d98fd5512811ea7bead403c04.png
4.3. Скачиваем калибровочную модель (http://www.thingiverse.com/thing:533814);
4.4. Загружаем оба STL файла из архива в слайсер;
4.5. Жмем правой кнопкой по модели и выбираем «Объединить двойную экструзию»
d9ec9dac51c09f95c024a1b2a98f8fee.png
4.6. Не забываем настроить обдув модели. У меня при включении турбин более чем на 45% хотэнды переставали справляться с нагревом.
97ded3b9d211bbf577247f53ec81f85c.png
4.7. устанавливаем остальные настройки по своему вкусу и сохраняем .gcode для печати.

5. Калибровка принтера
Делаем паузу и проверяем, все, что сделали до этого момента с самого начала.
Печатаем калибровочную модель и радуемся ;)
1ba956af98455e51966061ae05e44884.JPG
Повторяем пункты 4.2 и 4.7, и так по кругу до тех пор, пока не добьемся правильной геометрии.
b918c58afcd03adb97f4118b937688e8.JPG
7. Апгрейд готов.
Спасибо за внимание!

В заключение несколько фотографий
Модель лягушки (http://www.thingiverse.com/thing:329436). Слева лягуха, что я печатал головкой с двумя хотэндами без сервы. Видно, что из неактивного хотэнда постоянно вытекал пластик и цеплялся за модель, не спасал даже щит вокруг.
96b5bfe1e12384a576123f0fe1522d6f.jpg
823e3f6c9f1c568c4461081250bd309a.jpg
Такая же история с штурмовиком (слева печать в два хотэнда, справа 2 хотэнда с сервой).
b5ec269e03a7dab1e7bc3c6d0864f599.JPG
Подписаться на 3Dtoday
156
Комментарии к статье

Комментарии

21 Апр 10:06
7
огонь, вот молодчина!
4 Июн 14:18
0
21 Апр 10:09
4
Бомбезно! А линки на товары добавить вообще шик будет!
И еще, а что если на кертке предусмотреть какие-нибудь шторки. Т.е. сопло отодвинулось и кончик прикрыт шторкой. Просмотрел.
И не видно регулировки высоты относительно друг друга хотэндов.
21 Апр 10:27
4
линки вечером скину.
шторки есть, из банки сделаны. На фото и видео видно, там такие крылышки по бокам. Не самое удачное решение, но я в каретке предусмотрел отверстия в разных местах, надо подумать над шторками еще будет.
С регулировкой в прошивке я не справился, как не колдовал, смещалась нет так. По этому пришлось высоту регулировать в ручную.
21 Апр 10:37
1
Я уже заметил.
По этому пришлось высоту регулировать в ручную.
Вот и я о чем.
А так спасибо, все собирался на нечто подобное. Не хватает только шаговика.
21 Апр 10:42
3
Понял, я уже переделал модель для легкой регулировки. На днях постараюсь выложить на сингиверсе и сюда тоже напишу.
21 Апр 20:40
2
4 Июн 14:19
0
Про калибровку XYZ немного тут: http://3dtoday.ru/blogs/fix0id/marlin-112-color-printing-became-closer/
21 Апр 10:18
8
Поздравляю. Ты изобрел Пикасо 250. :D
21 Апр 10:51
1
Дондоло же
21 Апр 11:00
1
Принцип один :D
21 Апр 13:09
3
Да, но за почти 35 баксов. Уже бегу колхозить такое на свой ЗАВ.
21 Апр 13:10
1
Тоже вариант :) Но по мне - громоздко как-то. Напиши потом, как вышло.
21 Апр 18:25
0
У меня Макс плюс. Стол форматом А4. Влезет.
21 Апр 10:46
1
Отличная статья!
Спасибо!
21 Апр 10:55
1
а почему бы не сделать такое же, но как в ультимейкере? серву в горизонтальное положение и экструдеры будут ходить вверх вниз. :)
21 Апр 11:08
1
Все конечно здорово, а как обстоят дела со стабильностью ??? головы четко встают в нужное место ? есть люфты ?

И еще, мне в таких конструкциях не очень нравятся сервы - у них ресурс не такой большой (там коллекторный двигатель и контактный датчик) как например у ШД... в определенный момент (самый не подходящий) серва скажет упс...

А так, здорово, есть хороший вариант и есть развитие, СПАСИБО !
21 Апр 11:18
1
Не замечал люфтов, работает четко. Я думаю, серва проживет достаточное время, у меня же не конвейер цветных изделий :) Нужно время, чтобы понять.

В крайних положениях качающаяся каретка упирается в барьеры + серва включена все время для удержания положения. Можно сделать не зубчатую передачу конечно, а рычагом, тогда упор будет с двух сторон.
21 Апр 23:04
0
Сервы разные бывают:)
22 Апр 12:40
0
Да. В идеале сделать сердечник такой дугой и по 2 обмотки с каждой стороны фиксированные. Ну и схему с 2 мосфетами, одна от низкого уровня включает свое поле, друга от высокого. И люфвтов не будет и скорость переключения молниеносная. С другой стороны тот же скажем аккуатор и пазы.
21 Апр 11:36
1
Неплохо. А сколько получился общий вес каретки?
21 Апр 12:07
2
Думаю, что намного легче чем с директом!
21 Апр 14:58
1
Директ это уже другая история.
P.S. Как по мне, на Пруше стол ощутимо тяжелее каретки даже для директа. Только стекло 200х200х4 весит 400 грамм. И не надо ставить на директ топовые по мощности движки. Даже в том же размере нема17 можно взять шаговик на 26Ncm массой 220гр (есть варианты еще легче).
21 Апр 20:58
1
Сразу не взвешивал, разбирать лень еще раз.
Пластика грамм на 90, подшипник - 11г., хотэнды - 2*40г., вентиляторы обдува радиаторов хотэндов - 2* 7,5г. винтики все потянут грамм на 100, турбины обдува, грамм по 30 каждая и серва - где-то 25 грамм.
ИТОГО:380 грамм, примерно
21 Апр 12:07
2
Хорошая реализация. Тоже интересен вес.
21 Апр 12:13
3
Дондоло собирал, идея понравилась, сейчас делаю под боуден аналогичное, пока на этапе моделирования. А тут бац- и Вы с готовым :D. Но свой вариант я пожалуй всё равно доделаю, там немного другая идея, более компактная каретка должна получиться.
21 Апр 12:23
1
Будет интересно посмотреть
Также, если прошивку иначе будете править, тоже поделитесь :)
21 Апр 14:56
1
Поясните пожалуйста один момент:
#if ENABLED(SWITCHING_HOTENDS)
float z_raise = 0.5;
destination[Z_AXIS] += z_raise;
planner.buffer_line_kinematic(destination, planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
stepper.synchronize();

move_hotends_servo(active_extruder);
delay(500);
destination[Z_AXIS] -= z_raise;
planner.buffer_line_kinematic(destination, planner.max_feedrate_mm_s[Z_AXIS], active_extruder);
stepper. synchronize ();
# endif
В программировании я не шарю, с прошивками дружить пытаюсь, но не всегда выходит :D. Я так понял здесь вы задали поднятие по Z на 0.5 при смене, а остальное?
21 Апр 21:33
0
Да, сначала задаем высоту подъема, чтобы сопла не чиркали по модели при смене,
далее увеличиваем значение элемента Z_AXIS массива destination на данную величину (a += x - альтернативная запись a = a + x)
Потом гоним головку вверх, дергаем сервой, чуть ждем и возвращаемся назад.

В теории в этом месте можно было при опускании учитывать разницу в высоте сопел, но что-то у меня пошло не так, когда я пытался это сделать.
21 Апр 12:44
2
Такая же идея была, думал, удачная или нет. Теперь вижу что удачная :)
21 Апр 13:43
4
Эту статью надо прям в FAQ в образец как писать статьи. Пользы 100%, тема раскрыта 100%, последовательность описания 100%, осталось место для размышлений 100%...
21 Апр 13:54
1
Опа! Обалдень! Лайк! Действительно очень круто запарился, отлично получилось!:D
21 Апр 14:29
1
Во всех отношениях отличная статья: и идею показали, и показали пример аппаратной и программной реализации, и грамотно всё изложено.
Спасибо!
21 Апр 15:23
1
в интернете есть и другие модели, например: http://www.thingiverse.com/thing:1412102
Куда компактнее получилось, чем по этой ссылке.

А вывести на одну вертикаль оба сопла не получается? Слишком громоздко?
21 Апр 17:00
3
Чтобы вывести на одну вертикаль без усложнения механики необходимо:
- или поднимать ось вращения до схождения центрального вектора и векторов от оси с концам хотэндов, что приведет к увеличению вертикальных размеров;
- или увеличивать угол вращения, что создаст неудобства к подаче филамента, если вообще не приведет к пересечению трубок боуден, трубки будут болтаться и повысится шанс того, что они за что-то зацепятся. Еще это приведет к необходимости ставить более длинные трубки.
1f0851ed4b3f6dd93a1bd6837557f3d3.png
5ea18a13f21b04a1281a2a21566fd58e.png


Можно было сделать передаточный механизм, добавляющий к вращению еще и качение, но это усложнило бы конструкцию.
21 Апр 18:36
0
Поздравляю с успехом, Fix0id !
Что-то я нигде не увидел утирательной башни.

хотелось бы услышать Ваши соображения насчёт ретрактов и "сопливчика".
21 Апр 20:37
0
Спасибо!
Ретракт при смене сопла на 10 мм, скорость 80мм/с

А башня не нужна, тк из неактивного сопла ничего не вытекает, оно прикрывается куском банки Пепси :0)
Посмотрите на фото и видео ушки по бокам.

"Сопливчик", это что?:)
21 Апр 21:24
1
"Сопливчик", это что?
Я так понимаю, это поролоновая губка или силиконовая щетка которая стирает грязь с сопла.

В вашей конструкции можно попробовать прицепить небольшие губки на кусках банки, чтобы при смене сопел все вытиралось автоматически.
21 Апр 21:29
0
ааа, я думал приложить кусочки поролона и обмотать их термоскотчем, но тогда нужно использовать что-то жестче, чем банка.
В любом случае ушки в том виде, что сейчас - временное решение.
21 Апр 21:05
0
Вот я и нашёл того кто читает мои сонные мысли!! (тут должен быть подозревающий что-то смайл, но я его не нашёл)
21 Апр 23:02
0
МОлодец, спасибо за подробное излжение
22 Апр 08:30
0
супер!
22 Апр 16:57
0
Если не трудно, просьба выложить рабочие файлы. В солидворксе, или другие. Спасибо за проделанную работу. Хочется переделать под свой принтер. Заранее спасибо.
23 Апр 23:11
0
Скинул вам в личку, fusion 360
22 Апр 17:39
0
В избранное сразу
Спасибо!
23 Апр 13:25
0
В избранное. Кстати, никто не знает, как это заставить на смузи работать?)
23 Апр 15:16
0
Скажите, а как фиксируются механизм в крайних положениях
23 Апр 23:12
0
Качающаяся часть упирается в барьеры в крайних положениях, и серва включенная держит положение.
23 Апр 23:43
1
Из моего опыта моделиста, серва долго жить не будет
28 Апр 09:53
0
+1

В закрытой камере серва умирает очень быстро. Плюс у сервы есть эффект "рысканья", из-за чего зубчатая передача с сервы на качели обречена на провал в качестве печати (стабильность угла у сервы никакая )
26 Апр 12:14
0
А если сервопривод заменить соленоидом или магнитным замком?
Сделать пружинку которая будет удерживать головки в промежуточном состоянии, и два соленоида (магнитных замка) на каждой голове + металлическая планка по центру. В зависимости от того какая голова нужна подаем напряжение на нужный магнит и он прилипает к центральной планке, сняли напругу головки вернулись в промежуточное положение. Мне кажется так будет надежнее и точнее и даже возможно быстрее.
26 Апр 13:06
0
Можно подумать над магнитом, тем более я их штук 7 вытащил из обычных принтеров.
Изначально я все таки стремился реализовать данный подход самым простым способом с наименьшими затратами и приемлемым результатом, так что над кареткой долго не думал :)
23 Апр 23:01
0
del
24 Апр 22:56
0
Не могли бы вы адаптировать модель под винты M3 ? :)
26 Апр 13:07
0
При всем уважении, М4 винты в любом стоймаркете за копейки продаются, в том же Леруа вообще на вес
28 Апр 11:39
1
Что, если переключать головки не сервой, а упираясь в рычаг? Сделать справа и слева от головки рычаги. Когда нужно включить правый хотэнд - двигаем головку вправо, она упирается в рычаг и опускается правая головка. Когда нужно опустить левый хотэнд- двигаем головку влево, упираемся в рычаг и опускается левая головка. Тогда серва становится не нужна, и уменьшается вес головки на вес сервы. Плюс увеличивается надёжность, так как серва может сломаться. Фиксацию в крайних положениях можно сделать пружинкой или магнитами. Как думаете?
28 Апр 12:01
0
можно двумя магнитами гонять рычаг, я уже думал над этим, все упирается в свободное время. Решение с сервой и зубчатой передачей лежало на поверхности, по этому я решил сначала его реализовать, чтобы в принципе работало, а уже потом допиливать :)
29 Апр 11:31
2
Вот нарисовал картинку:



Описание: http://3dtoday.ru/questions/switching-heads-3d-printer-without-the-servos/

Как?
29 Апр 08:48
0
Добрый день! Подскажите пожалуйста почему модуль вентиляторов и терморезистор 2 экструдера подцеплен на D4 ? Или я что-то упустил или не понял. И чем был обусловлен выбор A13 для драйвера 2 экструдера?
29 Апр 13:46
0
Доброго дня. Там форматирование дурацкое вышло в описании.
Читать следует так:

Чуть ниже драйвер второго экструдера;
T0( GND, A13) – термистор первого хотэнда,
T1( GND, A14) – термистор стола,
T2( GND, A15) – термистор второго хотэнда,
D4, GND - MOSFET модуль для подключения вентилятора обдува детали
1 Май 01:09
0
И еще вопрос, не могли бы вы выложить исходники? Дело в том, что я поклонник щупов и являюсь свидетелем секты AUTO_BED_LEVELING, в настоящий момент щуп на серве. Хотелось бы его вкорячить также и в новую голову (скорее всего с другой стороны каретки)
1 Май 19:00
0
скинул в личку
3 Май 07:50
0
классный проект, захотелось использовать в d-bot, который сейчас собираю, быть может и со мной поделитесь исходниками. Спасибо.
3 Май 08:02
1
В личку скинул

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

3Dtoday за 60 секунд от 22 августа

В создании ледяной пещеры парка «Зарядье» использовались технологии 3D-печати

Российская компания 3DQuality выпустила настольный 3D-сканер 3DQ Scan

Московские чиновники закупают «золотые» 3D-принтеры и оргтехнику для детей-инвалидов

Топ 10 проблем, с которыми мы столкнулись при тестировании фотополимеров

Тонкости тонкостей Simplify3D 4.0