Датчик филамента на ender3 через 27pin
Статья относится к принтерам:
Всем доброго времени суток, уважаемые!
Собственно сабж — имеет ender3pro, простейший нормально-замкнутый концевик.
Концевик используется как датчик филамента по логике — замкнут => есть филламент.
В прошивке активирована продвинутая пауза, активирован датчик филамента. Распиновка указана верно. Динамик, соотвественно, выключен. Логика концевика инвертирована в соотвествии с нормально-замкнутым концевиком.
По команде м119 принтер адекватно считывает концевики, в том числе филамента. При замкнутом концевике тригер, при разомкнутом — опен.
Однако при печати не реагирует на обрыв филамента, продолжает печатать.
Эксперимент раз — инвертировать логику концевика про принципу разомкнуто => есть филамент. В таком случае он должен при отсутствии филамента (размыкании концевика) думать что все ок и печатать, однако он просит филамент. И при замыкании тоже самое (что по сути идолжно быть). При такой логике работы через m119 так же корректно считывает положение датчика.
Проводка датчика пропаяна, все контакты в порядке. Доступ к 27 пину реализован через платку расширения (вставляется между платой и шлейфом экрана). Концевик подключен к signal и gnd.
Прошу помощи куда копать в этом случае.
Все сделано согласно видеоинструкции по еднеру(ближе к концу). Памяти с запасом хватает.
В прошивке активированы дополнительные плюшки типа k-factor и thermal_protection. Arc включен(отличие от видео, однако это вообще не та степь так то).
Надеюсь кто-то сталкивался с подобным и подскажет что не так с моими руками.
Опят программирование arduino имею, в этом плане не совсе дуб)
Источник
Датчики окончания филамента в прошивке.
У меня стоит два датчика окончания филамента.
Что не так у меня прописано в прошивке?
#define FIL_RUNOUT_ENABLED_DEFAULT true // Enable the sensor on startup. Override with M412 followed by M500.
#define NUM_RUNOUT_SENSORS 2 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
#define FIL_RUNOUT_STATE LOW // Pin state indicating that filament is NOT present.
#define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins.
#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins.
#define WATCH_ALL_RUNOUT_SENSORS // Execute runout script on any triggering sensor, not only for the active extruder.
// This is automatically enabled for MIXING_EXTRUDERs.
// Override individually if the runout sensors vary
#define FIL_RUNOUT1_STATE LOW
#define FIL_RUNOUT_PIN P1_28
#define FIL_RUNOUT1_PIN P1_27
In file included from Marlin\src\HAL\LPC1768\../../inc/../pins/pins.h:788,
Marlin\src\HAL\LPC1768\../../inc/../pins/pins_postprocess.h:480: warning: «FIL_RUNOUT1_PIN» redefined
480 | #define FIL_RUNOUT1_PIN FIL_RUNOUT_PIN
In file included from Marlin\src\HAL\LPC1768\../../inc/../pins/pins.h:383,
Marlin\src\HAL\LPC1768\../../inc/../pins/lpc1768/pins_BTT_SKR_V1_3.h:98: note: this is the location of the previous definition
98 | #define FIL_RUNOUT1_PIN P1_27
In file included from Marlin\src\HAL\LPC1768\../../inc/MarlinConfig.h:49,
Marlin\src\HAL\LPC1768\../../inc/SanityCheck.h:682:4: error: #error «Enable only one of FIL_RUNOUT_PULLUP or FIL_RUNOUT_PULLDOWN.»
682 | #error «Enable only one of FIL_RUNOUT_PULLUP or FIL_RUNOUT_PULLDOWN.»
Marlin\src\HAL\LPC1768\../../inc/SanityCheck.h:854:6: error: #error «You can’t enable FIL_RUNOUT1_PULLUP and FIL_RUNOUT1_PULLDOWN at the same time.»
854 | #error «You can’t enable FIL_RUNOUT1_PULLUP and FIL_RUNOUT1_PULLDOWN at the same time.»
Источник
Обзор PAT9125 оптического датчика филамента для 3d печати
Добрый день друзья. Сегодня я хотел бы рассказать вам про датчик филамента PAT9125, а также про мой опыт общения с ним.
PAT9125 это оптический датчик который применяется на 3d принтерах Prusa. Этот датчик может отслеживать не только момент окончания филамента но и момент его застревания. Например если у вас возникла тепловая пробка.
Главная проблема датчика, его нельзя подключить напрямую к плате с Marlin. Поскольку Marlin поддерживает только подключение энкодера, а этот датчик должен быть подключен по интерфейсу I2C. Чтобы разрешить эту проблему я использовал attiny85 digispark. Датчик подключается к Attiny а уже Attiny в свою очередь эмулирует работу энкодера.
Настройка Marlin
В файле Configuration.h нужно раскомментировать параметр #define FILAMENT_RUNOUT_SENSOR . А вот параметр #define FIL_RUNOUT_PULLUP лучше закомментировать поскольку у нас ненастоящий енкодер то подтяжка attiny к линии питания будет только мешать работе.
Кроме того нужно раскомментировать параметр #define FILAMENT_RUNOUT_DISTANCE_MM это скажет Marlin что у нас не концевой выключатель, а энкодер. Значение параметра надо уменьшить по умолчанию там стоит 25мм. Чтоб вы понимали сколько это, принтер успеет уложить два слоя калибровочного куба воздухом прежде чем заметит что что-то не так. Я поставил там 5мм можно и меньше но тогда можно столкнутся с ложными срабатываниями.
В файле Configuration_adv.h нужно раскомментировать #define ADVANCED_PAUSE_FEATURE
В файле Pinout вашей платы надо задать пин к которому будет подключен датчик в параметре #define FIL_RUNOUT_PIN.
Особенности работы датчика
Во первых я очень надеялся что поскольку я использую прозрачную трубку для филамента то датчик можно будет одеть прямо на неё и он будет видеть только филамент. Но оказалось, что датчик прекрасно видит эту прозрачную трубку и мне пришлось делать в ней окно.
Следующая особенность касалась уже Attiny. Сначала я подключил принтер к пину P3 и Attiny просто не стала запускаться. То есть без подключения к принтеру все прекрасно работает, а стоит подключить Attiny не стартует. После этого я подключил принтер к пину P5, Attiny загрузилась но порт просто не работал на нем всегда был высокий потенциал, возможно у меня оказалась бракованная Attiny. Все заработало только когда я подключил принтер к пину P1, пин на котором располагается диод.
Также я хочу отметить что датчик отслеживает отдельно движение по оси X и по оси Y. В моем случае используется ось X, но если вы захотите расположить датчик по другому. Например расположить его перпендикулярно движению филамента, то надо в прошивке Attiny заменить ось X на Y.
Источник
Датчик окончания филамента + Octoprint
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Статья относится к принтерам:
Да, знаю, некоторые напишут, зачем он вообще нужен, ибо все равно не определит проблем, когда у вас пруток не проталкивается (сточился/застрял в пробке) или мотор пропускает шаги/щелкает. Ну. в принципе вы правы, но иногда все же такой датчик полезен, лучше чем ничего. Например, у вас остается мало прутка на катушке, вы не знаете, хватит ли вам, у вас есть новая катушка, а локальный дефект для вас не критичен. Ну чтож, погнали.
А в принципе тут говорить особо нечего. Но вам понадобиться Raspberry Pi (или Orange или что нибудь еще совместимое и умеющее работать с GPIO) с установленным Octoprint. Так же нужно будет установить плагин Filament Sensor.
Датчик простой как две копейки:
Даже модель выкладывать не буду, т.к. простая как две копейки (я даже ее не сохранял вроде). Микрик у меня остался после перехода на автоуровень. Попробовал так же оптический датчик — не понравилось — не все пластики берет, срабатывание не очень надежное, вернее может сработать ложно, слегка прозрачный PETG вообще не берет.
Теперь подключение. Подключать будем к Raspberry Pi 3.
sudo chmod a+rw /dev/gpiomem
Далее в скриптах Octoprint прописал для паузы следующее:
Для продолжения после паузы:
И вроде как все должно было заработать. Но не тут то было. Пауза не срабатывала, полез отслеживать логи Octoprint:
tail -f /root/.octoprint/logs/octoprint.log
Вижу там вот такую ошибку:
RuntimeError: Failed to add edge detection
Ошибка уже разобрана здесь: https://github.com/MoonshineSG/Octoprint-Filament/issues/8. Единственное лекарство — скачать последний чистый дистрибутив Raspabian, все обновить и поставить Octoprint из исходников. Дело в том, что GPIO в некоторых установках работает криво и мне так же повезло. Там же говорят, что ошибка присутствует в готовой сборке Octoprint.
Не хотелось конечно переустанавливать все, целый день бился с проблемой, даже хотел свою любимую Fedora поставить, но там GPIO вообще пока не работает. В итоге забил, поставил все заново. И о чудо, все заработало.
За сим все, система работает, ставит на паузу, хлопот не доставляет.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Источник
датчик окончания филамента skr pro v 1.1 tmc 2209
Статья относится к принтерам:
Люди добрые прошу помощи в глупом вопросе. Не срабатывает датчик окончания филамента. Плата skr pro v 1.1 драйвера tmc 2209. marlin 2.0 CONFIGURATION_H_VERSION 02000. опережая будущие простейшие камни.
1. Ногу на драйвере выпаял
2. В марлин 2.0 все прописал и пины тоже ( аналог https://www.makenprint.uk/3d-printing/3d-printing-guides/skr-v1-3-filament-runout-sensor/) Все сдела как в данной инструкции. хотя таких инструкций миллион. не чего не работает
3. по команде м119 filament видет и правильно срабатывает. нет нити trigger есть нить open (хотя если инвертировать не чего не помогает). датчик обычный кнопочный pullup и down тоже и коментировал и за коментировал и раскоментировал (вообщем делал все) но не помогает.
#define FIL_RUNOUT_PIN PE15
#define FIL_RUNOUT2_PIN PE10
#define FIL_RUNOUT3_PIN PG5
#define FIL_RUNOUT_ENABLED_DEFAULT false //true // Enable the sensor on startup. Override with M412 followed by M500.
#define NUM_RUNOUT_SENSORS 3 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each.
#define FIL_RUNOUT_STATE LOW // Pin state indicating that filament is NOT present.
#define FIL_RUNOUT_PULLUP // Use internal pullup for filament runout pins.
//#define FIL_RUNOUT_PULLDOWN // Use internal pulldown for filament runout pins.
// Set one or more commands to execute on filament runout.
// (After ‘M412 H’ Marlin will ask the host to handle the process.)
#define FILAMENT_RUNOUT_SCRIPT «M600»
// After a runout is detected, continue printing this length of filament
// before executing the runout script. Useful for a sensor at the end of
// a feed tube. Requires 4 bytes SRAM per sensor, plus 4 bytes overhead.
//#define FILAMENT_RUNOUT_DISTANCE_MM 7
Что за глюк. я не понимаю. наличие и отсутствие нити не влияет на печать . как печатало так и продолжает печатать
Источник
Датчик остановки/окончания филамента из “мыши”
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Читая тему “И снова про датчик окончания филамента” и думая как можно её решить, я обратил внимание на “поведение” мыши – она то ярко светилась при движении, то тускло если её не трогать. Т.е. срабатывал переход в режим ожидания. Сразу возникли идеи и вопросы: будет ли сенсор мыши реагировать на филамент и можно будет отследить разницу в свечении. Опыт показал, мышь реагировала на движения филамента и засыпала при его остановке. Разобрав мышь, на светодиоде удалось измерить напряжение — 2.5В в активном состоянии и 1.7 в ожидании. Ура, датчику – БЫТЬ!
Но дальнейшая исследование показало, что без компьютера мышь не “загоралась”. Это удалось решить высоким уровнем на контакте D+. Но как оказалось, каждый раз режим перехода в ожидание и нахождение в нём был очень разный по времени и никак не удавалось разработать работающий алгоритм.
Поиск способа получения данных от мыши, привёл к нескольким ссылкам, где демонстрировалось получение координат перемещения мыши платой Arduino, но нужен был ‘грызун’ поддерживающий протокол обмена PS/2. Т.е. можно использовать для датчика не фантомное мигание, а реальное перемещение. Только теперь двигается уже не мышь, а филамент мимо сенсора. К сожалению мыши стандарта PS/2 поблизости не оказалось, но “интернет” подсказал, что обычно их делают универсальными 2-х стандартными PS/2 – USB. Мой подопытный образец A4TECH Model:X5-60MD хоть и имел разъем USB, но встречалось упоминание о продаже такой модели в двух видах. Я решил попробовать, и попытка оказалось успешной.
Теперь когда выяснилось, что моя мышь поддерживает протокол обмена PS/2. Из нескольких разных программ и библиотек работы с PS/2, мне удалось найти работающую с имеющейся в наличии контроллером: Deek-Robor Pro Micro на ATmega32u4, определяется как Arduino Leonardo. Мышь извлечена из корпуса и прикручена к распечатанной “направляющей”. Филамент свободно проходит в 2мм отверстие по центру сенсора на уровне “стола” т.е. 2,5 мм от сенсора.
В качестве алгоритма работы был реализован следующий порядок действий: если не было движения, т.е. считываются нулевые перемещения за последние 3 секунды и установлен высокий уровень на входе управления (G-code: M42 P4 S255), то подаётся высокий уровень на выход – ‘звуковой сигнал’. Прототип работает с светодиодом, в дальнейшем в место светодиода, будет использоваться, выпаянная из модуля дисплея “пищалка”.
Т.е. если прозвучал звуковой сигнал, то желательно оперативно подойти к принтеру и возможно удастся исправить аварийную ситуацию, например: подтолкнуть пластик при образовании “проточки” или вставить новый при его окончании и т.п.
Саму схему распайки не привожу т.к. для реализации данной логики подойдёт практически любой Arduino-совместимый контроллер любой формы и размера, со своими номерами контактов. Для работы необходимо 3 цифровых выхода и 1 вход.
#define MDATA 6 – к контакту DATA PS/2 мыши.
#define MCLK 5 – к контакту CLK PS/2 мыши.
#define ledgnd 8 – можно не считать, лень было землю для светодиода тянуть.
#define led 7 – к контакту на индикацию/звук.
#define pinIn 9– вход признака необходимости сигнализации, к контакту D4 (и т.п.) SERVOS RAMPS 1.4.
Размер задержки (3 сек.) регулируется размером матрицы запоминаемых значений, через константу myzSize, сейчас проверка идёт 5 раз в сек (задержка в конце цикла 200 мсек.) и при 15 значениях будет
3 сек. Для установки признака необходимости сигнализации, при остановке филамента, можно использовать любой pin Dx (D4,D5 …) на разъемах SERVOS, AUX-1 и AUX-2 на плате RAMPS 1.4. Ими можно управлять командами типа M42 P4 S255 и M42 P4 S0 и т.п. Которые вводятся из командной строки pronterface и т.п. программ или можно автоматически вставлять в G-code в момент его создания, например вкладка Custom G-code в Slic3R. Питание контроллера и мыши также можно организовать с контактов SERVOS RAMPS 1.4.
Площадка для крепления платы мыши и направляющая для филамента.
Вывод. Поставленная цель – сделать недорогой, но надёжный датчик остановки/окончания филамента из простой мыши, вполне осуществима.
И, конечно, буду рад ответить на ваши вопросы, если таковые будут.
Тест программы. Взято на arduino.cc и творчески дополнено.
* an arduino sketch to interface with a ps/2 mouse.
* CLK(white) DATA(red) GND(green) 5V(blue)
* Also uses serial protocol to talk back to the host
* USB-PS/2 — Pin 5 is the mouse D+ pin, pin 6 is the D- pin
* according to some code I saw, these functions will
* correctly set the mouse clock and data pins for
void mouse_write(char data)
/* wait for mouse to take control of clock); */
while (digitalRead(MCLK) == HIGH)
/* clock is low, and we are clear to send data */
while (digitalRead(MCLK) == LOW)
while (digitalRead(MCLK) == HIGH)
while (digitalRead(MCLK) == HIGH)
/* wait for mouse to switch modes */
while ((digitalRead(MCLK) == LOW) || (digitalRead(MDATA) == LOW))
/* put a hold on the incoming data. */
* Get a byte of data from the mouse
// Serial.print(‘reading byte from mouse
while (digitalRead(MCLK) == HIGH)
delayMicroseconds(5); /* not sure why */
while (digitalRead(MCLK) == LOW) /* eat start bit */
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Источник