Кремень FMZ Реклама
Kremen FMHM Реклама

Автоуровень с тензодатчиком на дельте Micromake D1

VanMo
Идет загрузка
Загрузка
13.04.2017
14963
29
Техничка

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

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

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

25
Статья относится к принтерам:
Micromake D1
Из всех вариантов реализации автоуровня, тензодатчик видится наиболее технологичным. Кажущаяся сложность изготовления с лихвой перекрывается эксплуатационными характеристиками. Не нужно бегать с листочком, городить какие-то штанги с кнопками, сервомашинки для эффектного убирания этих штанг. Все выглядит так, будто и нет никакого датчика. Многие энтузиасты принтеростроители уже реализовали подобные устройства, трудом которых я, разумеется, воспользовался. За что им благодарность.

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

Но, ничто не должно мешать сделать датчик самостоятельно, это почти легко.

Из материального нам потребуется:
  • 4 тензорезистора X173-02 с алиэкспресса, или аналогичные.
  • Микросхема АЦП HX711.
  • Контроллер Arduino nano, или любой другой ардуино.
  • Модифицированный держатель радиатора экструдера: http://www.thingiverse.com/thing:2228612
  • Немного проводков, клея и аренда паяльника.

Из нематериального:
  • Скетч Arduino nano: https://github.com/VanMo/HX711_Autolevel
  • Модифицированная прошивка Repetier для платы принтера Micromake D1: https://github.com/VanMo/Repetier
  • Предвкушение победы.

Схема



Схема подключения тензодатчика к ардуино уже много раз обсуждалась, подробно расписывать не буду. Можно почитать здесь и здесь.
Автоуровень с тензодатчиком на дельте Micromake D1
Тензорезисторный мост подключается к микросхеме HX711. HX711 запитывается от Arduino и связывается с ней по i2c. Arduino запитывается от платы принтера. Один дискретный сигнал (D13) идет из Arduino в контроллер принтера, имитируя концевик автоуровня. Второй обратный дискретный сигнал тянем из контроллера принтера в Arduino на пин D12. Он необходим для подачи сигнала начала измерения.

Предполагалось, что вывод A3 на AUX1 не зря так обозначен и должен идти напрямую в микроконтроллер ATMega2560 именно как A3. Но на деле пришлось кидать соплю напрямую к микросхеме, иначе не работало:
Автоуровень с тензодатчиком на дельте Micromake D1
Возможно, это косяк только моей платы. Хотя, похоже там хитрая схема, болванка, обманка, замануха.

Датчик



Для изготовления самого датчика нужно изготовить деталь по модели: http://www.thingiverse.com/thing:2228612 Теперь я расскажу как правильно разместить на этой детали тензорезисторы, это важно.

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

Здесь основное правило такое: противоположные резисторы моста размещаются с одной стороны пластины.

Обратите внимание на обозначение резисторов разными цветами, так будет проще ориентироваться.
Автоуровень с тензодатчиком на дельте Micromake D1
Вклеиваем 2 резистора как показано красными линиями на картинке ниже.
Автоуровень с тензодатчиком на дельте Micromake D1
Это могут быть R1 и R3, например. С другой стороны вклеиваем R4 и R2. R1 и R4 должны оказаться с одной стороны пластины, а R2 и R3 с другой.

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

Софт

Скачиваем скетч для Arduino nano: https://github.com/VanMo/HX711_Autolevel Еще, понадобится библиотека: https://github.com/bogde/HX711 Для отладки нужно раскомментировать строку:

#define DEBUG

Загружаем в Arduino.

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

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

#define DETECT 3

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

После настройки порога, закомментируем обратно:

//#define DEBUG

В модифицированной прошивке контроллера принтера (https://github.com/VanMo/Repetier) добавлено управление выводом A3. В нужный момент, когда требуется отслеживание касания, на него подается высокий уровень. Это сигнал для Arduino выполнить тарировку показаний датчика и непрерывно сравнивать показания с пороговым значением. Тарировку датчика непосредственно перед касанием необходимо делать потому что на датчик будет влиять много факторов. Например, изменение температуры, или натягивание проводов, подходящих к голове. Тарировка исключает влияние этих факторов.

В настройках принтера нужно задать параметр eeprom Z_PROBE_HEIGH, он определяет разницу между реальным расстоянием от стола до сопла с расстоянием, полученным от датчика калибровки. Это можно сделать в CURA, или любым другим способом. В нашем случае значение должно быть отрицательным, так как срабатывание датчика происходить по сути ниже уровня стола. Значение нужно подобрать экспериментально и оно сильно зависит от алгоритма 'зондирования'. Сейчас у меня Z_PROBE_HEIGH около -0.06 мм.

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

Видео

Так это работает:

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

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

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

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