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

Для установки этого зазора существует несколько технических(и не очень) решений. Например:

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

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

На моем Prusa Mendel i2 постоянно возникала необходимость установки высоты первого слоя после печати длительностью более часа. А когда принтер постоит без дела, приходилось опять корректировать высоту. Предполагаю, что при длительной работе принтера конструкция прогревалась и изменяла свои размеры, тем самым увеличивалась высота первого слоя. Т.к. после длительной работы необходимо было уменьшать высоту, а после остывания ее увеличивать.

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

Мной был разработан и успешно опробован на принтере Prusa Mendel i2, более точный метод установки расстояния между соплом экструдера и столом. Который основан на измерении силы прижима сопла экструдера к столу при помощи тензометрического датчика. Опытные пользователи и конструкторы ЧПУ скажут, что этот способ уже опробован и погрешность такого измерения будет зависеть от температуры окружающей среды, но поверьте (мне на слово, пока не дочитаете до конца), в данном решении нет зависимости от температуры.

Для повторения конструкции необходимо не так много:
— Тензометрический датчик.
— Усилитель сигнала с АЦП.
— 3D-принтер и немного пластика для печати некоторых элементов конструкции.

Первые 2 пункта стоят “копейки”: в Китае 200руб. (16.04.2015) или в России, естественно дороже. А наличие или приобретение в ближайшее время третьего пункта подтверждается тем, что вы еще читаете этот текст.

Время, необходимое на доработку принтера — не более одного вечера. Конечно, не считая времени, потраченного на печать элементов крепления при помощи 3D принтера.

А теперь подробности.

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

Что же такое тензодатчик и как он работает?

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



Датчик, который я использовал, представляет из себя небольшой алюминиевый брусок 12,8 х 12,8 х 65мм, на двух его гранях приклеены 4 тензорезистора (резистор изменяющий свое сопротивление от величины растяжения). Эти резисторы соединены в мост Уинтстона. На вход этого моста подается напряжение, обычно 3-30 вольт, а на выходе мы получаем небольшое изменение напряжения от приложенного давления (искривления этого бруска) в пределах 0,7милливольт на 1 вольт подаваемого на вход. Но такие маленькие изменения напряжения невозможно измерить сразу при помощи микроконтроллеров, используемых в большинстве 3D принтеров.

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

Приобрел микросхему уже вместе с необходимой обвязкой:



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

Я выбрал вариант с установкой датчика на экструдере.

В моей реализации это выглядит так:



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

Процедура калибровки и поиск нулевой точки по оси Z (homing) должна производиться на разогретом экструдере. Так как измерение усилия датчика происходит с небольшой задержкой необходимой для оцифровки напряжения и передачу его управляющему контроллеру, то измерение производится 2 раза с разной чувствительностью датчика:
Измерение сильного давления (200-500 грамм), при этом стол немного но заметно прижимается экструдером. В этот момент происходит выдавливание «соплей» пластика, которые могут содержаться на экструдере или на столе.
Подъем на небольшое расстояние и повторное, точное измерение (10-50 грамм), происходит легкое, и очень точное касание экструдером стола.

В живую работает это так:



Чтобы изменять чувствительность датчика между попытками, необходимо внести небольшие дополнения в прошивку принтера. Я внес изменения в прошивку Marlin, так как она была установлена у меня и есть небольшой опыт ее настройки и использования. Надеюсь, что когда нибудь мои изменения примут в основной репозиторий, а пока скачать можно тут: github.com/necdnk/Marlin.git (Конфиг настроен под мой Prusa Mendel i2)

Мне не хотелось строить велосипед (библиотеку для использования HX711), и была найдена замечательная библиотечка на гитхабе: github.com/bogde/HX711

Но как позже оказалось, пришлось ее немного переписать.

Схема подключения датчика к ардуине, простая до безумия, нужно просто соединить 8 проводков к платке с АЦП.
4 к тензодатчику:
E+ красный
E- черный
A- зеленый
A+ белый

И 4 к RAMPS(шилд для ардуины):
GND Земля
DT D4 пин ардуины
SCK D5 пин ардуины
VCC +5v
Пины на плате предназначены для подключения сервоприводов и находятся рядом.

Настройки в конфиге прошивки, которые влияют на силу срабатывания датчика:
#define WEIGHT_SENSIVITY_HARD 25 //первая попытка
#define WEIGHT_SENSIVITY_ACCURATE 2//вторая попытка

Если хочется указывать силу срабатывания в граммах, а не в условных единицах, как у меня, то нужно подбирать значение константы:
#define WEIGHT_SCALE 1000.f

Приобрести датчик и микросхему АЦП с необходимой обвязкой можно на всем известных торговых площадках.
Датчик ищется по ключвым словам «load cell 5kg».
Микросхему можно найти по ее наименованию HX711.

Готов выслушать вопросы, дополнения и исправления.

Комментарии (28)


  1. Sterpa
    05.05.2015 11:09
    -1

    Во-первых, вы украли и раскрыли идею тысяч скрытных 3D-печатников, мечтающих побыстрее оформить этот патент и заработать миллионы! (сатанинский смех) Но, что уж теперь…
    Во-вторых, будьте так любезны, поясните, что значит «точка f» после #define WEIGHT_SCALE 1000.f? Это что-то связано с частью после запятой?
    Я не силен в скетчах на С, не видел раньше такой синтаксис.


    1. necdnk Автор
      05.05.2015 11:17

      А как бы оформить OpenSource патент? Такое возможно?
      .f просто указывает что это float (тип данных с плавающей точкой)


      1. Sterpa
        05.05.2015 11:21

        Так это не OpenSource. Это технология позиционирования (для любого координатного станка), рабочая модель для 3D-принтера. В ней не используется из OpenSource вообще ничего, и Marlin упоминать даже нет необходимости, только ваш собственный код.


        1. necdnk Автор
          05.05.2015 15:35
          +2

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


          1. mva
            06.05.2015 13:15

            Для этого патент сразу после получения объявляется Общественным Достоянием (Public Domain)


            1. Meklon
              06.05.2015 14:07

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


              1. necdnk Автор
                06.05.2015 14:28

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


  1. Ezhyg
    05.05.2015 11:26

    А у меня была идея с размещением, с самого края рабочей области, «линейки» из обрезанных (или просто коротеньких) щупов для проверки зазоров и подведение туда головки станка, опускания и автоматического выставления в ноль на щупе — вот и нужный зазор.

    Хотя это не для 3D принтера а для станка с ЧПУ, там стол не греется.


  1. roller
    05.05.2015 16:27

    Альтернативный вариант с тензодатчиками под столом (не нагреваемым) trains.socha.com/2014/05/fsr-bed-leveling-trials-and-tribulations.html


    1. necdnk Автор
      05.05.2015 17:07

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


  1. Ezhyg
    05.05.2015 17:01

    письмо свалилось, в тему
    www.instructables.com/id/Enable-Auto-Leveling-for-your-3D-Printer-Marlin-Fi


  1. PavloG
    05.05.2015 17:23

    Пробовал 3 варианта:
    1) Переключатель
    2) Емкостной датчик
    3) Лист бумаги
    За месяц вернулся к обычному листу бумаги.
    На дельте — кривизна, высота и наклон стола выставляются максимум за 5 минут (при условии RichCattell прошивки — точнее той её части, что позволяет дельта-настройки записывать в EEPROM)


    1. necdnk Автор
      05.05.2015 17:51

      А как часто приходится выставлять на Вашей дельте?
      Есть вариант закрепления стола на 3-х датчиках, что-бы не утяжелять голову.


      1. PavloG
        05.05.2015 18:08

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


  1. DamnLoky
    05.05.2015 17:29

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


    1. necdnk Автор
      05.05.2015 17:47

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


      1. DamnLoky
        05.05.2015 17:59

        Я мож чего не понимаю, но тот функционал заточен на Z_MAX сигнал, использует смещения между головкой и двигающимся костылем и что-то еще такое. Я пока ваш код не смотрел, только запчасти заказал с али, попробую повторить вашу задумку. Момент в том, что стол не совсем ровный, как ни старайся. От нагрева он ощутимо деформируется, выгибается горбушкой, например, особенно, если жестко закреплен по углам.
        Давно хотел заняться исследованием деформации стола, только не знал, что использовать в качестве датчика касания. Была даже идея покрыть фольгой стол и использовать банальный электрический контакт между головкой (плохо из-за остатков пластика на сопле, да и в целом не очень), даже dial gauge прикручивал и возил вдоль стола, смотрел искажения, но это плохо автоматизируется и плохо интегрируется. Спасибо за идею, буду обязательно пробовать, как придут детальки.


        1. necdnk Автор
          05.05.2015 18:35

          Попробую прогнать наклоненным столом, может и не прав, но вроде как этот функционал на Z_MIN. Если это не так, то придумаем как исправить.


    1. necdnk Автор
      05.05.2015 17:58

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


      1. DamnLoky
        05.05.2015 18:08

        Я бегло смотрел в тот код (более чем годовалой давности). Там вроде бы использовалось параметрическое задание поверхности по трем точкам. Вот сетку я и хочу исследовать при помощи относительно высокоточного измерительного прибора, и идеально, если получится его встроить «бесшовно». Сейчас prusa I3 собираю, пока не детали не пришли, еще не придумал, куда там это можно будет всунуть :)


    1. PavloG
      05.05.2015 18:14

      Есть более простые способа не требующие сервопривода:
      1) Ручное взведение щупа
      2) Последовательности g-code делающие это автоматически (подводят например к спец крючку и делают пару движений)
      3) (Updated) бесконтактные датчики


      1. buratino
        05.05.2015 23:36

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


        1. roller
          06.05.2015 02:06

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

          я смотрю тут многие путают такие вещи как поиск нуля и построение сетки для определения наклона стола.


          1. PavloG
            06.05.2015 02:19

            К стати тут вопрос — А какая практическая ценность наклона стола?
            Выставить стол вроде не сложно (от 3-ех до 4-ех болтиков подкрутить).


            1. roller
              06.05.2015 10:29

              Вопрос неправильный естественно. Практической ценности наклона стола — никакой. см ниже ответ vuratino


            1. roller
              06.05.2015 10:46

              Выставить стол — тут смешано и выставить его горизонталь и найти ноль. Эти этапы можно и нужно разделять и автоматизировать. См ниже


          1. buratino
            06.05.2015 03:09

            Я имел ввиду, как и предыдущий оратор, датчики, которыми можно измерить наклон или вообще «кривизну» стола.

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

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

            в-третьих, стол может повести (от температуры, вследствие отдирания слишком хорошо приклеившегося объекта) и он станет вообще кривой. На принтере со столом без подогрева из оргстекла вообще наблюдаю углубление в центре из-за соскобления оргстекла. На другом, с подогревом, поверхность вообще гуляет больше чем на миллиметр, из-за причин, которые к большинству 3D принтеров не относятся плюс одна причина, которая может относится — это если использовать ацетонный «соус» из ABS — прилипает то к нему нормально, но вот толщина пленки, которая получается после высыхания, оказывается разной.


            1. roller
              06.05.2015 10:39

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

              Чтобы кривизны стола не было (или почти не было) — положите стекло 5-6мм. (сам наклон стола не особо важен). А еще лучше не просто стекло, а боросиликатное (или закаленное, но в нем не уверен) стекло. Тогда кривизны от нагрева будет еще меньше. Но и обычное стекло отлично решает проблему. (только не бейте в него головой когда оно нагрето, как тут предлагали — акустический метод, лол. Разогретое до 110 градусов стекло особенно хрупко. Акустический метод — это скорее генерировать на голове высокочастотные колебания в металле, и улавливать их на столе при прикосновении)

              У меня (и у большого количества людей) на печатающей голове стоит серва с микриком. Производя измерение по 9 точкам определяется общий наклон стола.

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

              Я ноль выставляю тупо визуально. Во время выполнения калибровки стола (G29) жду Pause в пронтерфейсе. Далее руками подвожу хотэнд к столу (никогда не понимал смысла листа бумаги) — когда голова уперлась в стол — там и ноль. Делаю G92 Z0, далее поднимаю на 1мм вверх и жму Resume в пронтерфейсе. Все, дальше можно идти пить чай.