Датчик автоуровня на основе датчика давления для Rostock

PororoThePinguin
Идет загрузка
Загрузка
22.02.2017
19044
75
RepRap

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

60
Статья относится к принтерам:
Rostock
Во всех моих 3д-принтерах меня каждый раз неимоверно бесила необходимость выставлять высоту сопла над уровнем стола. Необходимость эта возникала регулярно, при каждой замене сопла или каких-то других действиях с хотэндом, требовавших его разборки.

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

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

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

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

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

Я заказал модуль АЦП HX711и сам датчик на 1кг. Спустя месяц ожидания все это дело было получено и настало время прикрутить эту красоту к принтеру.

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

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

План действий будет следующий:
  • Печатаем крепления датчика на эффектор
  • Подключаем датчик веса к Arduino
  • Подключаем Arduino с датчиком к мозгам принтера
  • Редактируем прошивку принтера.



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

Теперь подключаем контроллер к АЦП. Я нарыл в закромах Arduino Nano, но это не принципиально. На время отладки и калибровки сойдет и так, а дальше я поменяю на Attiny13, которая будет монтироваться вместе с платой АЦП прямо на эффектор для уменьшения уровня наводок по всем этим трактам. Почему на эффектор, а не рядом с основными мозгами принтера? Потому что для наилучшей точности стоит максимально укоротить провода между АЦП и датчиком веса. А если мы монтируем туда АЦП, то есть смысл прицепить туда и контроллер, чтобы от эффектора просто вести три провода к мозгам.

Также с этим АЦП есть нюанс: по умолчанию частота выборок АЦП составляет 10Гц, что слишком мало для нашего применения. То есть, технически, будет работать и так, но точность срабатывания будет плохой.

Для нормальной работы надо перевести АЦП в режим частоты опроса 80Гц. Для этого надо отцепить ногу RATE от земли и посадить ее на VCC.
Тут есть два варианта, зависят от ревизии платы HX711.

Вариант с новой ревизией - просто запаиваем перемычку на слева от которой написано 80Hz.
Если не повезло и пришла старая ревизия, то надо отпаять от платы вторую сверху ногу со стороны 4х-пинового разъема и подпаять ее к VCC или первой сверху ноге.
Все, модуль переключен в режим опроса 80Гц и наша жизнь стала немного прекраснее.

Зачем это проделывать? Так как показания датчика нестабильны из-за наличия вентилятора на голове и постоянных движений эффектора в процессе калибровки, то в скетче используется фильтр НЧ, который сглаживает скачки показаний датчика для большей надежности работы. Фильтр берет 10 значений веса и из них получает отфильтрованные показания. На частоте 80Гц выборка 10 значений занимает примерно 120мс, на частоте 10Гц - займет секунду. Соответственно, надо жертвовать фильтром, что будет приводить к ложным срабатываниям во время движения головы.

Подключаем датчик к АЦП. Соединяем провода:
  • Красный -> E+
  • Черный -> E-
  • Белый -> A-
  • Зеленый -> A+



Подключаем АЦП к Arduino:
  • VCC -> 5V Arduino
  • DT -> A2
  • CLK -> A3
  • GND -> GND Arduino



Клонируем репозиторий

git clone https://github.com/alpha6/HX711_endstop

и открываем в Arduino IDE скетч - *Tenso_sensor.ino*

В скетче меняем const bool DEBUG = false; на const bool DEBUG = true;

Заливаем скетч в Arduino и через Serial monitor смотрим за показаниями.

2 раза в секунду там должна появляться строка

current weight! [848342] [848267]

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

Убеждаемся, что значения датчика меняются при воздействии на него. Если меняются, значит, все собрано верно. Если нет - надо поменять местами провода DT и CLK. Я так один раз перепутал контакты DT и CLK: с виду все работало, но при попытке калибровки принтер попытался проломить соплом стол.

В установленном на принтер виде цифра от датчика должна увеличиваться при касании стола!

Вот так все это выглядит в установленном на принтер виде:
Теперь сделаем из Arduino концевик для мозгов принтера.

Для управления принтером у меня используется плата Melzi. Для RAMPS все будет сильно проще с точки зрения получения пинов и настройки прошивки.

Для этого нам понадобится любой оптрон и резистор на 1кОм. Оптрон я использовал 4n35, потому что он был под рукой. Любой другой подключается аналогично с разницей на нумерацию ног.

На плате Melzi всего 3 пина под концевики, на Дельте они все используются для калибровки осей. Так что нам нужен какой-то другой концевик. На своем принтере я не использую экран с кнопками, и у меня есть целый свободный разъем на 10 пин рядом с ISP, так что я буду использовать пин A1 оттуда. Для RAMPS никаких подобных телодвижений не надо, благо, концевиков у него хватает.

Для обычных принтеров у которых стол паркуется в Z-MIN датчик цепляется вместо Z-MIN.
  • Соединяем землю Arduino и пин 2 оптрона
  • Сажаем пин 1 через резистор на пин D7
  • Пин 4 оптрона соединяем с землей 10 пинового разъема на Melzi. Для RAMPS соединяем с землей концевика Z-Min
  • Пин 5 отпрона соединяем с пином A1 10 пинового разъема на Melzi. Для RAMPS соединяем с сигнальным пином концевика Z-Min.



Схема подключения:
Устанавливаем датчик на принтер. После того, как все установлено, подводим датчик к столу. Задача - откалибровать порог срабатывания так, чтобы датчик срабатывал от касания стола, но не срабатывал от движений головы.

Для контроля срабатываний без заглядывания в сериал-монитор удобно подключить светодиод. Цепляем землю диода на пин 5 оптрона, а + через резистор на +5В. Теперь диод будет загораться при срабатывании датчика.

Теперь отредактируем прошивку.

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

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

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

Будем использовать самые последние решения в стане прошивкостроения.

Клонируем репозиторий Marlin

git clone https://github.com/MarlinFirmware/Marlin.git

Переключаемся на бранч RcBugFix потому что в master и RC автокалибровка на дельтах не работает.

cd Marlin

git checkout RcBugFix

Открываем прошивку в Arduino IDE. Настраиваем все, что необходимо, и приступаем к настройке автокалибровки.

*N.B.* Если у вас вообще не Дельта с хомингом в Z-MIN, то просто воткните Arduino в Z_MIN и смело пропускайте все настройки высот и прочее, что относится к дельтам или принтерам с хомингом стола в Z_MAX.

Первым делом нам надо добавить концевик Z-Min для Melzi. На RAMPS он есть, и этот пункт нужно пропустить.

Открываем вкладку pins_SANGUINOLOLU_11.h и после

#define E0_DIR_PIN 0

добавляем строки

#define Z_MIN_PROBE_PIN 30

#define Z_MIN_PIN 30

Технически, должно хватить только указания Z_MIN_PIN, но в той ревизии, что сейчас лежит в гите, есть баг, и сборка падает, если не задан Z_MIN_PROBE_PIN.

Сохраняем файл и переходим в Configuration.h

Раскомментируем строку

#define USE_ZMIN_PLUG

В строке

#define Z_MIN_PROBE_ENDSTOP_INVERTING false

false меняем на true

Раскомментируем строку

#define FIX_MOUNTED_PROBE

Выставим смещения Z-Probe на 0

#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle]

#define Z_PROBE_OFFSET_FROM_EXTRUDER 0

Раскомментируем строку

#define Z_MIN_PROBE_ENDSTOP

Ну, и главная наша цель:

#define AUTO_BED_LEVELING_FEATURE

Тоже раскомментируем. Также раскомментируем строку

#define AUTO_BED_LEVELING_BILINEAR

Это единственный доступный тип автоуровня для Дельты. Сопло проходит по всему столу и строит карту высот, по которой потом печатает.

В строке:

#define ABL_GRID_MAX_POINTS_X 3

регулируется кол-во точек на грани квадрата. Т.е., при настройке в 3 сопло проверит высоту в 9 точках. Если указать 9 - то точек будет 81, время калибровки возрастет соответственно.

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

#define MANUAL_Z_HOME_POS 156.8

Высота должна более-менее совпадать с реальными цифрами!

Сопло после выполнения G28 и получения G29 идет в минимум со скоростью, указанной для хоминга. Скорость эта по умолчанию составляет 2000 мм/мин, на некотором расстоянии от поверхности стола скорость сбрасывается в 2 раза и на этой скорости происходит касание. Если заданная в прошивке высота области печати будет сильно больше реальной, то сопло просто врежется на полном ходу в стол и датчик может не успеть сработать. Точнее, датчику на срабатывание надо 120мс, за это время сопло пройдет 4мм вниз. А дальше все зависит от прочности конструкции и силы моторов. Один раз таким образом у меня получилось разбить стекло на столе.

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

Скорости хоминга по Z регулирются этими строками:

#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z

#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)

Еще можно включить опцию двойного касания, дает большую точность (в теории), но и занимает больше времени:

#define PROBE_DOUBLE_TOUCH

Заливаем прошивку в принтер. Проверяем, что работает G28, командой M119 проверяем, что концевик Z-MIN в состоянии open.

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

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

long trigger = 13000;

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

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

Теперь, когда все проверено, говорим G29. Голова поедет вниз и начнет тыкаться в стол согласно количеству точек, указанных в прошивке. После окончания калибровки будет выдана карта высот. Стоит убедиться, что все значения в ней находятся на одном уровне в переделах погрешности (второй цифры после запятой). Ну, это если стол ровный, без бугров, впадин и перекосов.

Все. На этом процесс настройки автокалибровки завершен, и можно заняться ее тюнигом.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

60
Комментарии к статье

Комментарии

22.02.2017 в 17:57
3

Хорошая реализация, давно витали мысли такой реализации т.к. она самая правильная.

Датчик нельзя минуя АЦП подключить на аналоговой вход Nano?
Разве Nano нельзя подключить к основной плате напрямую?

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

22.02.2017 в 19:26
2

Датчик нельзя минуя АЦП подключить на аналоговой вход Nano?
В теории можно, но на практике там нужен усилитель потому что сигнал от резисторов достаточно хилый. Я думал взять только усилитель и читать напрямую ардуиной, но после подсчета стоимости и габаритов устройства оказалось что овчинка выделки не стоит. Хотя более скоростной АЦП я пока лениво подыскиваю.
Разве Nano нельзя подключить к основной плате напрямую?
Нет, там надо сигнал к земле прижимать, а с ардуины этого не сделать. Она умеет только подавать или убирать напряжение с пина.
А для борьбы с ложными срабатывания во время работы я бы добавил еще обычный концевик, который бы срабатывал чуть раньше при приближении сопла к столу и позволял соплу дальше двигаться. В итоге если сопло высоко, то показания датчика не важно т.к. концевик не сработал. Остается только работа с первыми словами, когда концевик активирован.
Показания датчика не учитываются нигде кроме команд автокалибровки и определения высоты (G29 и G30 соответственно). Так что дополнительный концевик это будет бессмысленное усложнение конструкции. У меня на датчик выведен светодиод и во время печати он постоянно мигает.

23.02.2017 в 22:13
0

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

24.02.2017 в 07:26
0

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

02.03.2017 в 11:24
0

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

22.02.2017 в 18:08
2

А мне кажется или этот пост реплика вот этого блога?

22.02.2017 в 19:18
1

Нет, не кажется ;)

23.02.2017 в 06:01
0

А вы какое отношение имеете к первоисточнику?

23.02.2017 в 06:57
7

Никакого, я и есть первоисточник 8)

22.02.2017 в 22:47
0

Круто. А я пожалуй на сопло провод кину. А Дельта не умеет не по центру калиброваться ? Типа три пятака на окружности ?
зы. можно и один если как чисто концевик использовать.

22.02.2017 в 23:30
0

Дельта умеет всяко калиброваться:)
У меня по 25 точкам.

23.02.2017 в 06:27
0

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

23.02.2017 в 06:59
1

Так и не должно быть никакого зазора между соплом и столом в нуле. Зазор создаст слайсер когда будет печатать первый слой.
На этой конструкции зазора тоже нет - 0 это сопло упертое в стол.

22.02.2017 в 23:49
1

А что мешает покрыть стол пищевой фольгой и кинуть контакт на неё? Я, вот, попробовал, вполне нормально работает, хотя стол тоже стеклянный. Побрызгал лаком для волос положил кусок фольги разгладил, все хорошо контачит!

23.02.2017 в 06:02
0

Гемор лишний.

23.02.2017 в 07:01
2

Задача в том, чтобы при смене сопла не делать вообще никаких дополнительных действий - ткнул печать и он печатает. А фольгу придется кидать  перед каждой печатью, а я ленив :)

04.03.2017 в 17:54
1

Фольгу можно кольцом по краю намертво приклеить, правда рабочяя площадь малость урежется.

23.02.2017 в 09:32
0

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

23.02.2017 в 10:00
0

Ну я изначально под него купил дигиспарковскую плату, но она что-то не захотела сходу прошиваться, так что собрал на нане. А так как уже едут тини13 - то проще будет собрать все на ней сразу. 
Один фиг у АЦП и дигиспарка отверстия для крепления не совпадают :( И хотел из них бутерброд сделать чтобы компактно все крепилось.

24.02.2017 в 08:22
0

Я то вообще хотел плату под распайку, что бы на одной был АЦП и спарк. Я поиграюсь потом выложу.
ЗЫ кстати говоря неплохо было бы указать лицензию на софт что на гитхабе (в смысле прошика)

23.02.2017 в 10:21
0

Спасибо за полезные дискуссии!

23.02.2017 в 11:05
1

Я датчик к хотэнду вот так закрепил, датчик 150 граммовый, винты M2,5

23.02.2017 в 12:13
0

А что за радиатор такой хитрый?

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

23.02.2017 в 13:23
0

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

23.02.2017 в 13:34
0

Я вот думаю что я взял маленький, наверное грам на 300-400 надо было брать. Боюсь как бы трубка боудена не вносила погрешности. У меня будет на операционнике собран, без оцифровки, детали в пути, на макетке все работает.

23.02.2017 в 14:31
0

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

 У меня в скетче берется динамика изменений значений. Динамика будет одинаковой независимо от предела измерений датчика.

23.02.2017 в 15:18
0

Я что то не пойму как он, датчик этот срабатывает,  от удара соплом по столу?  У меня датчиков таких дома штук 40 на 200 грамм, хотелось бы тоже применить хоть один.

23.02.2017 в 16:02
1

В датчике стоят 4 резистора которые изменяют сопротивление в зависимости от изгиба пластины. Дальше ацп получает значения сопротивления и выдает его в виде числового значения. Ардуина опрашивает АЦП и смотрит на динамику изменений значений. Как только значения переходят указаный порог ардуина говорит что датчик сработал. Соответственно как только сопло упирается в стол сопротивление резисторов резко меняется и датчик срабатывает.

23.02.2017 в 16:02
1

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

27.02.2017 в 20:07
0

Сегодня убил датчик, нажал пальцем с усилием килограмм на 5, один из резисторов ушел в обрыв. Аккуратнее надо быть.

23.02.2017 в 16:50
0

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

23.02.2017 в 17:00
0

Угу. незнаю как в других прошивках, но в марлине если по логике работы щуп не должен касаться стола, то он не будет опрашиваться.

23.02.2017 в 21:25
0

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

24.02.2017 в 08:46
0

Я ещё когда первый принтер собирал, то прочитал статейку 
https://m.geektimes.ru/post/249138/comments/
Закупил тоже тензодатчик с усилителем, но так и не доли руки это поставить. Ни на первый ни на третий принтер...

24.02.2017 в 08:46
0

есть ли видео как это работает?

24.02.2017 в 21:14
2


28.02.2017 в 18:46
0

Надо стекло с напылением брать на стол. Напыление хорошо проводит.

01.03.2017 в 07:03
0

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

01.03.2017 в 07:06
0

Смотря какое напыление. Если брать за К- стекло, то его содрать можно только сошлифовав со стекла алмазным кругом.

02.03.2017 в 13:57
0

что за стекло такое?

02.03.2017 в 14:23
0

К стекло то? да популярная вещь,  с металлическим напылением. На вид как чуток тонированное. Вообще изначально оно для отражения ИК обратно в квартирку. Типо энергосберегающее. Но проводит хорошо и мы в 2007 году делали из таких стекл обогреватели, нарезая лазером на них дорожки и снимая по киловатту с квадратного метра.

02.03.2017 в 14:23
0

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

02.03.2017 в 14:25
0

А закалить такое стекло как?

02.03.2017 в 21:32
0

А при наклейке каптона или, что еще хуже, синего скотча... Тогда как?

04.03.2017 в 18:09
0

А зачем всю площадь металлизировать, можно полосой по периметру пустить той-же фольгой

07.03.2017 в 18:10
0

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

24.06.2017 в 19:54
0

Спасибо за прошивку на digispark attiny85 с небольшими доработками подошла. Датчик на 1 кг в самый раз. Развязка на оптроне на ramps 1.4 не потребовалась, работает на Repitier.

09.10.2017 в 06:52
0

В общем то хорошая реализация. У меня на разных температурах стола стол винтом по разному крутит. Автоуровень офигенно спасает. Был Bltouch, горя не знал, но после установки толкового охолождения, места для него не осталось.
  А что делать с соплями, которые неизбежно текут? Даже если в конце печали забрать пруток 50мм, F1000, все равно текут. Или греть хотэнд, а после G29? но это в некотором роде не корректно. Или греть минут 15 пока все не вытечет? Кто как делает?
Уж не знаю насколько родным был bltouch, повторяемость 0,05, а на тензо 0,003. 

21.03.2019 в 08:16
0

Решили эту проблему?

Если да, то как :)))

12.03.2018 в 19:04
0

Смотрю прошивку и не понимаю что дает строка
acc_x = acc_x_raw - tolerance/1.0
а особенно ее часть tolerance/1.0 то есть число делим на 1.0 и что получим?
В итоге получаем число acc_x_raw минус константа (tolerance) и все складываем в acc_xf прибавляя 5 раз, величину FK можно не учитывать (она постоянна). Не могу понять как устраняется 'дребезг' показаний датчика. Разъясните пожалуйста.

16.05.2018 в 12:38
1

Нужно закомментировать строку 3: # HX711 Library source https://github.com/ConnectedHealthFoundry/Q2HX711 иначе выдается ошибка: Tenso_sensor:3: error: invalid preprocessing directive #HX711

02.01.2019 в 21:49
0

С Новым Годом!

Дошли руки собрать тестовую плату и протестировать Вашу реализацию автоуровня.
На принтер еще не ставил. 'На весу' немного промоделировал работу.

Поскольку у меня в принтере предполагаются некоторые 'отрицательные' нагрузки относительно тензодатчика, то их в первую очередь опробовал. После этого на 'правильные' нагрузки сенсор уже не реагировал. Только после перезагрузки ардуинки.
Надо ставить в принтер и пробовать что получается. Хотя есть подозрения, что придется пробовать 'допилить' скетч.

21.03.2019 в 08:14
0

Удалось ли решить проблему?

21.03.2019 в 09:20
0

Кажется да.
https://3dtoday.ru/blogs/d-i-m/pervyy-post-ili-ballada-o-tenzodatchike-avtourovnya-bez-tenzorezistorov-/ - примерно вот так сделал.
Вчера только протестировал скетч. В принтер еще не ставил.

25.02.2019 в 13:58
0

В моем принтере концевик при срабатывании штатно замыкает вход на массу.
Можно ли сделать так:
1) в предлагаемом коде просто поменять LOW на HIGH (и наоборот); 
2) гальванически соединить между собой массы Arduino и платы принтера;
3) подключить выходной пин 7 ко входу концевика платы принтера напрямую, не используя оптрон.
Будет ли по такой схеме работать?

26.02.2019 в 07:57
0

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

27.02.2019 в 19:20
0

Спасибо за консультацию - попробую реализовать.
Еще вопрос - вы пишете, что окончательную реализацию собирались сделать на Attiny13.
Не поделитесь скетчем под Attiny13? Буду очень признателен.

21.03.2019 в 08:46
0

Теоретически у меня лежит код для ATT85, но, честно говоря, я не в курсе насколько он рабочий и довел ли я его до какой-то кондиции.
Могу выложить на гитхаб - попробуешь :)

21.03.2019 в 10:56
0

Оптрон обязательно использовать рядом с ардуино, или можно вынести его.

Если ацп подключить далеко от датчика веса, допустим на 2 м. Насколько будут различны значения?

21.03.2019 в 14:03
0

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

13.03.2019 в 22:50
0

Удалось реализовать - причем, с обратной логикой концевика (сработал = LOW) и без оптрона, напрямую. Лишь только притянул выход к плюсу 10-кОмным резистором.
Но... оказалось, что не все так просто.
Дело в том, ччто при перемещении головки случаются не только увеличения веса (с точки зрения тензодатчика), но и уменьшения.
Так вот - если 'стук' был в другую сторону (т.е., новый измеряемый вес стал меньше старого), да еще для верности это событие держится достаточно долгое время, то концевик срабатывает, и не отключается больше вообще. Вернуть систему в рабочее состояние иногда удается легкими постукиваниями пальцем по каретке, но не сразу и не всегда.
Соответственно, никакая калибровка не выполняется, т.к. принтер постоянно получает сигнал о сработавшем концевике.
На моем принтере такое случается, когда каретка едет по оси Х. Не буду утомлять тут особенностями конструкции, но так выходит из-за усилия от трубки боудена - из-за нее каретка как бы давится сверху вниз. Увеличение триггера в скетче приводит просто к потере чувствительности, но этот глюк не исправляет.
Я пытался анализировать код скетча, чтобы исправить ошибку, но вконец запутался, мозги распухли.

21.03.2019 в 08:11
0

Удалось ли решить проблему?

Какой датчик веса Вы используете?

Какой датчик веса будет лучше всего для автокалибровки, на 1 или 5 кг.

Спасибо

21.03.2019 в 08:59
1

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

21.03.2019 в 08:39
0

Хм, в принципе я догадываюсь где может быть проблема.
Но пока с ходу не могу придумать как решить - надо датчик для тестов, а у меня его нет :(

В качестве костыля можно сделать следующее:

добавить переменные

int trigger_max_timeout = 500;

long trigger_press_time = 0;
в строке 81 добавить else блок типа
else {
     if  (trigger_press_time + trigger_max_timeout <= millis()) {

is_pressed = false;
digitalWrite(probe_pin, LOW);
prev_weight = weight;
}}
После trigger_weight = weight; в строке 92 добавить:
trigger_press_time = millis();
Тогда состояние 'нажатости' датчика будет сбрасываться принудительно через 500мс после нажатия. Ну время срабатывания надо подкрутить чтобы точно было не меньше времени которое он проводит в нажатом состоянии при калибровке. Иначе может возникнуть ситуация что голова попытается проломить все что угодно при калибровке.

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

21.03.2019 в 08:50
0

Да я уже сам решил проблему. Вот 'loop' из вашего кода с моей добавкой (выделено жирным):

void loop() {
  weight = getSensorValue();
  
  if (DEBUG) {
    if (timest+500 <= millis()) {
      char buffer [50];
      sprintf (buffer, 'current weight! [%li] [%li]', weight, prev_weight);
      Serial.println(buffer);
      timest = millis();    
    }  
  }
  if (is_pressed) {
    if (DEBUG) {
       char buffer [50];
       sprintf (buffer, 'Current [%li] trigger [%li]', weight, trigger_weight);
       Serial.println(buffer);  
    }
    if (trigger_weight >= weight) {
      if (DEBUG) {
        char buffer [50];
        sprintf (buffer, 'Trigger released! [%li]', weight);
        Serial.println(buffer);  
      }
      digitalWrite(probe_pin, LOW);
      is_pressed = false;
      delay(100);
    }else{
      trigger_weight = weight;
    } 
  } else { 
    if ((weight - prev_weight) >= trigger) {
        if (DEBUG) {
          char buffer [50];
          sprintf (buffer, 'Trigger fired! [%li]', weight);
          Serial.println(buffer);  
        }
        digitalWrite(probe_pin, HIGH);
        is_pressed = true;
        trigger_weight = weight;
    }
    prev_weight = weight;  
  }
}

P.S. Т.е., общий смысл такой - если имеется состояние 'нажатия', и при этом триггерный вес больше или равен текущему весу, то работает ваш алгоритм - т.е., состояние нажатия сбрасывается.
И тут моя добавка - а если триггерный вес меньше текущего, то состояние нажатия продолжает сохраняться, а триггерный вес приравнивается к текущему.

21.03.2019 в 08:56
0

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

21.03.2019 в 09:11
2

может сказаться на точности калибровки
Не жалуюсь. А очень даже наоборот :-)
принтер не дельта
Не дельта. Это бывший Anet A6, но уже настолько переделанный, что его нельзя уже называть изначальным именем. Сейчас попробую сфотографировать конструкцию....
Вот: 

21.03.2019 в 14:00
0

Голова качающаяся, я правильно увидел?

А моделька есть?

21.03.2019 в 09:47
0

Спасибо огромное!!!!

05.05.2020 в 06:23
0

Очень интересная идея "БЛТач"! Апну тему.
Но, ИМХО, уважаемый топик-стартер несколько перемудрил. На мой взгляд, результат может быть достигнут и проще, и быстрее. Во первых, нам не нужно измерять абсолютные значение веса, массы, или силы прижима сопла в момент контакта со столом. Нам важно просто зафиксировать момент этого контакта. Поэтому разумнее реализовать этот подход (с изгибом балки при касании сопла стола) чисто аналоговым способом.
Да, балка или консоль, на которой будет закреплен весь узел хот энда потребуется, и ее придется сделать самому. Вариант: кусочек квадратной люминтиевой трубы (профиля) сечением 10х10 мм длиной 60-80 мм с двумя сопряженными отверстиями D=7-8 мм в центре. При возможности - профрезерованный паз нужных размеров. 
Да, тензодатчик так же потребуется. Вариант: BF350-3AA BF350 (на Али можно найти десяток за $1,5). Могу и ссыль выложить для ленивых: https://aliexpress.ru/item/4000669711458.html?spm=a2g0o.cart.0.0.46683c00ZfI5M8&mp=1 .
Как и колхозная электроника к нему. Вариант: сдвоенный операционник, первый из которых включаем как усилитель с Кус=40...60, а второй включаем как компаратор (с усилением 30-50, но без гистерезиса) с настраиваемым порогом срабатывания. Инверсия срабатывания реализуется тем же подстроечным потом. К выходу компаратора сразу же цепляем контрольный LED. На Али можно найти и готовую платку такой байды вместе с тензодатчиком всего за $4: https://aliexpress.ru/item/4000607444816.html?spm=a2g0o.productlist.0.0.534273f586cU2X&algo_pvid=7979999b-7802-4343-958d-d54458232393&algo_expid=7979999b-7802-4343-958d-d54458232393-22&btsid=0b8b15ea15886589429248141e4ac2&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_ . Там же можно подсмотреть и принципиальную схему, если будете делать ее сами.

Клеим датчик в нужное место "балки с защемленным концом" на циакрин или эпоксидку, настраиваем компаратор на перекид в нужную сторону при легком касании сопла поверхности стола. Далее шаманим с материнкой по методике, описанной выше топик-стартером, и получаем полное глубокое удовлетворение. 

Никаких вам 24-битных АЦП, дополнительных Мордуинок, и плясок с написанием скетчей! Разумеется, очумелые ручки потребуются. Но они по умолчанию лишними никогда не бывают.


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

30.09.2020 в 16:46
0

Что получилось с аналоговым датчиком? Я как раз экспериментирую с цифровой версией.

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

01.10.2020 в 03:23
0

Как правило, "плывет" датчик, а не схема обработки его сигнала. Не важно, какая - аналоговая или цифровая. В любом случае, этот момент присутствует. Цифра нужна, когда требуется высокое разрешение. Для БЛТач оно не нужно. Грамотно построенная схема термокомпенсации решает все, или почти все,  проблемы (из личного многолетнего опыта разработчика РЭА).
Коронавирус внес свои коррективы в сроки экспериментов. Механика практически вся изготовлена, электроника тоже. Но в один флакон вся эта мутота еще не залита. Будут новости, дам знать. 
 

01.10.2020 в 21:27
0

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

А что за плата за $4 по ссылке была? ссылка сдохла :(

02.10.2020 в 05:14
0

Вот пара новых ссылок на такие платы: https://aliexpress.ru/item/4000575058230.html?spm=a2g0o.detail.1000014.13.6e9a36adSTEcpa&gps-id=pcDetailBottomMoreOtherSeller&scm=1007.13338.183347.0&scm_id=1007.13338.183347.0&scm-url=1007.13338.183347.0&pvid=fc41252a-2de4-4bd0-857c-35afb5a4380e&_t=gps-id%3ApcDetailBottomMoreOtherSeller%2Cscm-url%3A1007.13338.183347.0%2Cpvid%3Afc41252a-2de4-4bd0-857c-35afb5a4380e%2Ctpp_buckets%3A668%230%23131923%2334_668%23808%233772%23407_668%23888%233325%239_3338%230%23183347%230_3338%233142%239890%236_668%232846%238110%23364_668%232717%237564%23657_668%231000022185%231000066059%230_668%233422%2315392%23331&_ga=2.28648956.1944046709.1601232047-1991654983.1584631278 и

https://aliexpress.ru/item/4001016226302.html?spm=a2g0o.detail.1000014.35.6e9a36adSTEcpa&gps-id=pcDetailBottomMoreOtherSeller&scm=1007.13338.183347.0&scm_id=1007.13338.183347.0&scm-url=1007.13338.183347.0&pvid=fc41252a-2de4-4bd0-857c-35afb5a4380e&_t=gps-id%3ApcDetailBottomMoreOtherSeller%2Cscm-url%3A1007.13338.183347.0%2Cpvid%3Afc41252a-2de4-4bd0-857c-35afb5a4380e%2Ctpp_buckets%3A668%230%23131923%2334_668%23808%233772%23407_668%23888%233325%239_3338%230%23183347%230_3338%233142%239890%236_668%232846%238110%23364_668%232717%237564%23657_668%231000022185%231000066059%230_668%233422%2315392%23331&_ga=2.28648956.1944046709.1601232047-1991654983.1584631278 .

Где-то в описании товара попадалась схема такой платы, но сейчас найти не могу. Поищите на Али, и наверняка найдете.

Но если знакомы с азами электроники, сделать такую плату самому - как два пальца... Микросхема - сдвоенный операционный усилитель. На первом ОУ сделан УПТ с Кус = 40...50, на втором реализован компаратор. Уровень срабатывания компаратора задается переменным многооборотным резистором. Могу нарисовать схему устройства, но сейчас нет времени. Если сильно приперло, напишите, постараюсь сделать за выходные. Так же могу коротенько описать причины, приводящие к уходу нуля датчика и схемы обработки. И пути их минимизации. Конечно, если это кому-то интересно...

02.10.2020 в 06:57
0

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

Я пока на цифровом варианте сижу, он в принципе работает как от него требуется, но интересно сравнить результаты с аналоговым. Будет здорово если пост сделаете потом.

02.10.2020 в 05:13

Комментарий удалён

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

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

"Пальцевый" тест Petg, CF-5 и Nylon.htp

Реверсинг модуля реле BIGTREETECH Relay V1.2

Печать кожуха для силиконовой литейной формы

Z-Щуп для 3018 CNC

Владельцам Фотонов посвящается. Новый Workshop

Печатаем фарфоровую куклу из Ceramics Hardlight