воскресенье, 19 апреля 2020 г.

EggBot из 101Hero

После приобретения Ender 3 Pro вместо примитивного 101Hero, возникла идея использвоать высвободившиеся запчасти подо что-то [бес]полезное. А тут как раз пришло время красить яйца, и вгляд упал на EggDuino-подобные поделки. Вот, например, с Thingiverse, там как раз моторы 28byj-48, которые шли в комплекте с принтером.

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

Поэтому сейчас взял за основу вот эту модель, она расчитана на двигатели Nema 17, высвободившиеся при апгрейде родных моторов Ender 3 Pro с шагом 1.8 градуса на аналогичные с шагом 0.9 (что, к слову, дало заметный глазом рост качества печати). Кроме того, был закуплен сервопривод MG90S.

И вот, что получилось:

От оригинальной модели с thingiverse осталась только "рука", держащая маркер, остальное было нарисовано самостоятельно. Да и то, к руке есть претензия - она сильно высокая, я бы ее укоротил на сантиметр-два (но это уже будет в следующем году - праздник кончился и EggBot ушел в коробку к остальному хламу).

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

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

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

Левая на фото сторона яйцекрутилки использует пружину от родного экструдера Ender 3 Pro (я его сразу заменил на Titan), правая - жестко закреплена на моторе.

Чертежи своих деталей не привожу - их и без меня много. А вот про сборку исходников напишу подробно.

Исходных текстов с прошивкой для Arduino очень много, но мне нужна была универсальная, поддерживающая одновременно и моторы 28byj-48 (для старой версии эггбота), и нормальные Nema 17. Такая была найдена: https://github.com/russhughes/EggDuino

Вот схема подключения моторов и серво к контроллеру:

То есть, сервопривод подключается к концевикам оси Z (на картинке верхние слева), а моторы, управляющие поворотом яйца и пером - к моторам оси Х и У.
В исходниках используется пин для Engraver. Ввиду его отсутствия - выставляю пин от концевика У.

В случае использования Nema 17 с 4 контактами, используются левые 4 провода в разъеме. "Шишечку" на разъеме, мешающую его вставлению рекомендуею откусить кусачками.
Если после подключения Nema 17 вместо вращения слышны щелчки и он дергается на месте - надо поменять местами два крайних провода в его разъеме.

Чтобы собрать прошику для контроллера от 101Hero и моторов NEMA 17, достаточно поменять определения пинов в исходнике и закомментировать несколько строк (для 28byj-48 требуется поменять чуть больше, инструкцию я не приведу, так как просто уже не помню, что менял - но можно начать с тех же изменений, что я привожу ниже).

Номера пинов берем из исходников Marlin, приведу здесь все, просто чтобы было:
C 0.43 KB
  1. #define X_STOP_PIN         18
  2. #define Y_STOP_PIN         19
  3. #define Z_STOP_PIN         20
  4. #define X_STEP_PIN         15
  5. #define X_DIR_PIN          21
  6. #define Y_STEP_PIN         22
  7. #define Y_DIR_PIN          23
  8. #define Z_STEP_PIN          3
  9. #define Z_DIR_PIN           2
  10. #define E0_STEP_PIN         1
  11. #define E0_DIR_PIN          0
  12. #define X_ENABLE_PIN     14
  13. #define Y_ENABLE_PIN     14
  14. #define Z_ENABLE_PIN     26

В файле EggDuino.ino комментируем все 3 строки #define BOARD_ХХХ
C 0.07 KB
  1. //#define BOARD_ULN2003
  2. //#define BOARD_ZAGGO
  3. //#define BOARD_CNCSHIELD

В нем же перед комментарием "//make Objects" вставляем определения пинов:
C 0.41 KB
  1. //Rotational Stepper:
  2. #define step1 15
  3. #define dir1 21
  4. #define enableRotMotor 14
  5. #define rotMicrostep 16  //MicrostepMode, only 1,2,4,8,16 allowed, because of Integer-Math in this Sketch
  6. //Pen Stepper:
  7. #define step2 22
  8. #define dir2 23
  9. #define enablePenMotor 14
  10. #define penMicrostep 16 //MicrostepMode, only 1,2,4,8,16 allowed, because of Integer-Math in this Sketch
  11. #define servoPin 20
  12. #define engraverPin 19

В файле Helper_Functions.ino в функции initHardware() необходимо закомментировать или удалить строку:
C 0.02 KB
  1.     SPMCSR &= ~SELFPRGEN;
Нам она не нужна (и с ней проект не соберется).

После чего проект загружаем в Arduino IDE, удостоверяемся, что выбрана платформа Sanguino, процессор ATmega 1284/1284р, собираем и заливаем.

После заливки можно подключиться к устройству по СОМ порту со скоростью 9600 и попробовать напечатать что-нибудь. Должно появиться сообщение о непонятой команде.

После печати деталей и сборке - можно приступить к рисованию. Для этого необходимо загрузить Inkscape + плагин для Eggbot, например, отсюда в самом низу страницы, распаковать, и отредактировать файл \share\extensions\ebb_serial.py: 
В функции findPort() заменить строку "EBBport = None" на свой COM порт, например, так:
Python 0.25 KB
  1. def findPort():
  2.     #Find a single EiBotBoard connected to a USB port.
  3.     try:
  4.         from serial.tools.list_ports import comports
  5.     except ImportError:
  6.         comports = None    
  7.         return None
  8.     if comports:
  9.         comPortsList = list(comports())
  10.         EBBport = "COM6"
(изменена последняя строка данного примера на COM6, остальные - не трогаем).

В случае, если моторы Nema 17 с шагом 1.8 градуса, как у меня - область для рисования в Inkscape будет 3200 на 800 пикселей. Если вдруг оказались двигатели с шагом 0.9 градуса - область печати станет 6400 на 1600, и все картинки надо будет увеличить вдвое или выставить в исходниках rotMicrostep и penMicrostep в 8.

А теперь о проблемах, с которыми пришлось столкнуться.

1. При печати возникает ощущение, что EggBot требует калибровки. Это ложное ощущение. Nema 17 с шагом 1.8 градуса требует ровно 360/1.8 == 200 шагов на полный оборот. Так как у нас в коде стоит microstep == 16, получается 200*16=3200 шагов на полный оборот. То есть, горизонтальная линия в Inkscape длиной в 3200 пикселей будет равна полному обороту яйца.
Если попробовать вручную во вкладке Manual плагина EggBot сделать Walk Motor 1 (pen) на 3200 шагов и затем на -3200 шагов и перо не вернется в ту же точку - значит проблема в проскальзывании яйца. Чтобы яйцо не скользило - зафиксируйте его крепче с помощью пружины и нескользящих прокладок. 
А вот если используется 28byj-48 - тут требуется "поиграться" с шириной картинки или с #define rotStepsPerRev в исходниках. У меня нормальная печать была при масштабировании картинки до 4076 пикселей в ширину. Сколько был масштаб в высоту - не помню.

2. При печати заливки - заливка "сползает" с каждым рядом к одному из краев яиц на примерно одинаковое расстояние. Тут у меня было две проблемы - сперва оказалось, что "рука", держащая перо прокручивалась на валу. Помогло затягивание фиксирующего винта, и заодно использование резинки для волос, как описно в комментариях тут: https://3dtoday.ru/blogs/provlax/budget-3d-printing-eizabeth-pro-mini/
А вторая проблема - низкое напряжение на подстроечном резисторе контроллера. Резисторы были выставлены под 28byj-48, а я поставил более мощный Nema 17, который в Ender 3 шел на экструдер, и ему просто не хватало тока. Что интересно, шаги пропускались только в одном направлении, поэтому картинка всегда "сползала" только к одному концу яйца.