Open Fab Lab Wiki Кулибин 1212 — Сайт русскоязычного фаблаб-сообщества

Кулибин 1212

Материал из Сайт русскоязычного фаблаб-сообщества
Перейти к: навигация, поиск
Станок "Кулибин 1212". Бормашина, ее крепление и столик не входят в стандартный комплект поставки.

Сайт производителя: www.mntc.ru

Это модификация станка Кулибин, выпущенная ограниченной серией в 2013 году:

  • Более надежное крепление муфт, соединяющих валы двигателей с ходовыми винтами
  • 5 приводов вместо 6
  • 13 больших уголков с отверстиями вместо 12
  • Точность шага 1/400 оборота вместо 1/50
  • Синхронное перемещение по всем осям вместо поочередного (как было на 0409)
  • Возможность подключения концевых датчиков и различных видов прямой и обратной связи
  • Возможность работы с контроллером на языке Python
  • Совместимость с бесплатными CAD и CAM программами
  • Станок управляется USB-контроллером модели 1212
  • Возможность пользовательской прошивки Arduino-совместимого контроллера
  • Возможность управления любым количеством станков с одного компьютера
  • Добавлена совместимость с операционными системами Win7x64, Win8

Содержание

Работы выполняемые на станке

  1. Фрезерование, гравировка, шлифовка и сверление (нужна бормашина)
  2. Электрохимическая и анодно-механическая обработка (см. установку ЭХ-3)
  3. Выжигание
  4. Резка пеноматериалов в 2D и 4D (для последнего нужно немного попрограммировать)
  5. Плоттерное рисование

Состав набора

Наименование Количество
Шаговый двигатель SM200 5
Уголок 380мм 13
Каретка 5
Ходовые винты (шпильки) 5
Муфта 5
Гайка ходовая 5
Отвертка 1
Хомут червячный 5
Фторопласт 80 х 10мм 10
Фторопласт малый 6
Болт М6 х 10 5
Болт М6 х 12 26
Болт М6 х 16 2
Шайба М6 4
Винт М3 х 8 20
Гайка М6 27
CD 1
Блок питания 12В 1
Кабель USB 1
Контроллер 1212 1

Сборка линейного шагового привода осуществляется как и в предыдущих моделях. Отличие состоит в креплении муфты, соединяющей вал шагового двигателя и ходовой винт.

Mufta.jpg

Для работы со станком Вам понадобится установить интерпретатор языка Python (рекомендуемая версия 2.6 на которой все тестировалось) и библиотеку pyserial.

Установка и настройка ПО

  • Сначала ничего ни к чему не подключайте. Действуйте строго по инструкции!
  • Для начала работы нам надо установить язык программирования Python 2.6, скачать который можно тут. В Linux python, как правило, уже присутствует, надо установить только оболочку IDLE через центр ПО. Настоятельно рекомендуем скачать и изучить самоучитель по python. Тогда вам будет гораздо понятнее все происходящее далее, и вы сможете получить максимум пользы и удовольствия от нашего конструктора. Чтобы мы могли обмениваться данными с контроллером, установите Pyserial - выберите версию для вашей ОС, основанную на Python 2
  • Скопируйте файл kulibin1212.py в корневую папку установленного Python. Например у меня это папка C:/Python26/
  • Подключите блок питания к розетке и контроллеру.
  • Если у Вас ОС Windows 7 64 бита, то перезагрузите компьютер. При загрузке удерживайте клавишу F8 чтобы вызвать меню. Выберите там "Отключение принудительной проверки драйверов."
  • Подключите контроллер к компьютеру USB-кабелем. Если драйвер не установится автоматически, воспользуйтесь этой статьей.
  • Найдите в самом начале файла kulibin1212.py строку Portnum = 6 и исправьте на свой номер порта (например, если контроллер определился на порту

COM2, то исправьте на Portnum = 2) и сохраните файл.

  • Запустите IDLE (Пуск > Программы > Python 2.6 > IDLE(Python GUI))
  • В меню File > Open откройте файл kulibin1212.py
  • Для запуска программы нажмите F5. После запуска программа проводит калибровку микроконтроллера. Если контроллер обнаружен и все поршло успешно, то появится "ОК" и курсор для приема команд.
  • Наберите тестовую команду, например move(10) и нажмите Enter - станок должен сдвинуться на 10 мм по оси X.

Возможности программы kulibin1212.py

Команда move()

move(dx=0,dy=0,dz=0)

Команда move(x,y,z) позволяет синхронно перемещать один или несколько двигателей. Примеры использования этой команды:

move(10)
move(0,0,5)
move(-1.22,34,92.7)

Написание собственных программ на python

Вообще, python - очень интересный язык, заслуживающий внимания сам по себе. Совсем недаром на нем работают Яндекс, фаблабы и космические аппараты. Мы же ограничимся простым примером. Создается файл в том же IDLE командой File > New Window

from kulibin import *
for x in range(10):
	move(0,10)
	move(10,0)
	move(0,-10)
	move(-10,0)
	move(0,0,-0.25)

Это фрезерование квадратика в 10 проходов и заглублением каждый раз на 0,25 мм. Можно запустить этот пример на высоких оборотах шпинделя с двухперой фрезой для обработки алюминия. Для запуска нажмем F5. IDLE предложит сохранить файл перед запуском, и разумно с ним согласиться. При этом уместно дать файлу расширение .py Тогда ваш myfile.py может быть вызван в будущих программах командой from myfile import * подобно тому как мы недавно сделали с самой программой Кулибина.

Команда setcoord()

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

setcoord(x=0,y=0,z=0,a=0,e=0)

Примеры:

setcoord() #установить все координаты в ноль
setcoord(3,0,2) #установить x=3, y=0, z=2

Команда ExecuteGC()

Исполняет G-код из файла. В программе kulibin1212.py версии 1.0 исполняется только команда G1 (линейное перемещение в абсолютных координатах). G-коды это команды управления станком. Последовательно считывая их из файла и выполняя он изготавливает изделие.

Создайте в папке с программой kulibin1212.py файл test.gc и в нем напишите:

G1 X0 Y20 Z0
G1 X20 Y20 Z0
G1 X20 Y0 Z0
G1 X0 Y0 Z0

Это координаты углов квадрата. Сохранив файл, наберите (там же где и move) команду:

setcoord(0,0,0)

Этим мы скажем станку, что текущее положение считается нулевым. А затем наберем команду:

ExecuteGC("test.gc")

Файл должен исполниться - при этом перемещения инструмента будут повторять указанную в файле траекторию.

Вот более сложный G-код - звездочка:

G1 X26.075 Y17.7875 Z1
G1 X26.075 Y17.7875 Z0
G1 X20.9125 Y12.675 Z0
G1 X22.1875 Y5.525 Z0
G1 X15.7375 Y8.8625 Z0
G1 X9.3375 Y5.4375 Z0
G1 X10.5125 Y12.6 Z0
G1 X5.275 Y17.625 Z0
G1 X12.45 Y18.725 Z0
G1 X15.6125 Y25.2625 Z0
G1 X18.875 Y18.775 Z0
G1 X26.075 Y17.7875 Z0
G1 X26.075 Y17.7875 Z1

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

Типовые операции

Фрезерование плоской детали по контуру

Flatdetail.png

1. Создадим или откроем готовую плоскую деталь в трехмерном редакторе FreeCAD.

Freecadcontour.png

2. Выделим ее, нажимая Ctrl+клик пока вся деталь не окажется подсвеченной.

3. В меню выберем Файл > Экспорт... В открывшемся диалоге укажем имя файла и выберем тип файла Mesh formats(...). При этом имя файла и путь к нему не должны содержать кириллицы.

4. Теперь надо сменить формат файла с двоичного (по умолчанию) на текстовый, воспринимаемый PyCAM. Для этого пересохраним его. Выбираем в списке рабочих столов FreeCADMesh Design

Meshdesign.png

5. Импортируем сеть (mesh) из нашего прежде сохраненного файла, получившего расширение *.STL.

Freecadimport.png

6. Сразу же сохраняем ее при помощи соседней кнопочки, выбирая формат ASCII STL (*.stl). Файл теперь в порядке.

7. Открываем программу PyCAM и заходим в Settings > Preferences, где нас в первую очередь интересует параметр Safety Height. Это высота на которой инструмент может перемещаться не задевая заготовку. Обращаем внимание, что эта высота отсчитывается от нуля программы, а не от поверхности заготовки.

8. В меню File > Open Model выбираем наш пересохраненный файл. Он появляется в окошке визуализации! На вкладке Model программы PyCAM присутствуют инструменты для сдвига и масштабирования модели, если нужно.

9. Заходим на вкладку Tools и конфигурируем наш инструмент. Например, для цилиндрической фрезы диаметром 3 мм все выглядит так:

Tool.png

10. Заходим на вкладку Processes и выбираем процесс Carve Contour. Как видим, в настройках Path Strategy у него строит Contour (follow), то есть обход фрезой контура детали, что нам и надо. Справа мы видим параметр Max. Step Down - максимальную глубину снимаемого материала за один проход. Для 3 мм двухперой фрезы и оргстекла неплохо работало на 2 мм, а вот по алюминию я больше 0,5 мм поставить не рискнул.

11. На вкладке Tasks (задачи) снимаем галочки со всех задач и создаем свою "Контурная вырезка" с такими вот параметрами:

Contour2d.png

12. Нажимаем кнопку Generate All - и вот она - наша траектория:

Pycamcontour.png

13. Убедившись, что она хороша (или при необходимости переделав что-нибудь), заходим на вкладку Toolpaths и жмем Export All чтобы сохранить ее в файл с расширением *.ngc

14. Запускаем IDLE (Пуск > Программы > Python 2.6 > IDLE(Python GUI)) и ведем с ним краткий диалог:

Idledialog.png

После нажатия кнопки Enter станок приступает к работе, комментируя происходящее на экране.

Frezeruem2d.jpg

Деталь готова! Как видно, самолетики совершенно идентичны, не считая скруглений во внутренних углах, которые фреза в силу своей формы не могла не оставить.

Sam2.jpg

Думаю, Вы тоже обратили внимание на сложность всего этого процесса, особенно избыточную в плане пересохранения файлов. Поэтому буду рад если найдутся желающие помочь в деле интеграции CAM-алгоритмов прямо в рабочую среду FreeCAD. Если таковые найдутся, пишите на openfablab@gmail.com

Фрезерование детали с площадками разной высоты

1. Создадим деталь с плоскостями различной высоты во FreeCAD

Шкив.jpg

Шаги 2 - 6 такие же, как и в случае фрезерования плоской детали. Видно, что после конвертации в STL фланец несколько потерял в своем качестве. Пока я не знаю где находятся соответствующие настройки экcпорта во FreeCAD, позволяющие разбивать модель на более мелкие фрагменты. Пока это можно при небходимости обойти рисуя и экспортируя большие модели, а потом уменьшая их уже в PyCAM.

Шкивстл.jpg

Шаги 7 - 9 тоже такие же, как и в случае фрезерования плоской детали. Я собираюсь использовать в этом опыте 10-миллиметровый МДФ, поэтому указываю Safety Height равной 13 мм. Инструмент используем тот же самый - в нашем случае - 3 мм цилиндрическую фрезу.

Фланец в PyCAM.jpg

10. Здесь начинаются отличия от 2D обработки. Будем обрабатывать двумя процессами - сначала грубо снимем основную массу материала с плоскостей, а затем пройдем по контурам, чтобы сделать их гладкими и красивыми. Для этого настроим процессы Remove material и Carve Contour. В первом из них параметр Overlap означает насколько перекрываются соседние проходы фрезы. Material allowance - припуск материала, оставляемый на чистовую обработку.

Фланец - режимы.jpg

11. Для каждого процесса обработки зададим границы. По ширине я сделал все их на 4 мм шире модели, чтобы дать возможность фрезе обходить ее по кругу. Границы для первого процесса я назвал "Чтобы не выпала" и поставил нижнюю границу на 1 мм выше дна модели - чтобы обработка шла не до конца и оставался миллиметровый слой, удерживающий деталь на месте для последующей обработки.

Чтобы не выпала.jpg

Границы для второго процесса проходят точно по дну модели и называются, соответственно, "Чтобы выпала".

Чтобы выпала.jpg

12. Теперь заходим на вкладку задач. Удалим все, которые там есть и сконфигурируем свои собственные.

Задачи.jpg

13. Нажимаем Generate All и уходим на обед пока сгенерируются траектории (иногда этот процесс бывает долгим, но все же конечным).

Вот полученная траектория для черновой обработки:

Траектория1.jpg

А вот для чистовой:

Траектория2.jpg

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

14. Заходим на вкладку Toolpaths, убеждаемся что траектории стоят в нужном порядке (если что не так - меняем порядок кнопками справа) и жмем Export All чтобы сохранить группу траекторий в файл с расширением *.ngc.

15. Тем временем установим заготовку для детали. Я использовал оргстекло в качестве удобного крепления и жертвенного слоя, приклеив к нему МДФ небольшим (!) количеством суперклея.

Заготовка для фланца.JPG

16. Теперь надо привязать систему координат G-кодов к реальной заготовке. Запускаем IDLE (Пуск > Программы > Python 2.6 > IDLE(Python GUI)) и набираем команду подключения файла управления станком:

from kulibin1212 import *

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

Касание фрезой жертвенного слоя.JPG

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

move(0,0,13) 

После чего командами move(x,y) установим фрезу приблизительно над центром будущей детали.

Фреза в нулевой точке.JPG

И введем команду инициализации координат, которые мы теперь знаем:

setcoord(0,0,13)

17. Запускаем исполнение G-кода:

ExecuteGC("Z:/flanets.ngc")

Фрезерование МДФ.JPG

МДФ оказался весьма неудобным материалом - дал много каких-то лохмотьев и пыли. После очистки от них, деталь выглядела так:

DSCN0252.JPG

И тем не менее, на выходе - материальный фланец, не слишком отличающийся от своего виртуального собрата :)

Готовый фланец.JPG

Более того - несмотря на всю неказистость, размеры фланца и отверстий оказались соблюдены достаточно точно:

Измерениефланца.jpg

Фрезерование детали сложного рельефа

Гравировка надписи или рисунка

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты