Датчик остановки/окончания филамента из “мыши”

kick_2
Идет загрузка
Загрузка
28.11.2016
11836
61
печатает на RepRap
Техничка

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

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

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

40
Читая тему “И снова про датчик окончания филамента” и думая как можно её решить, я обратил внимание на “поведение” мыши – она то ярко светилась при движении, то тускло если её не трогать. Т.е. срабатывал переход в режим ожидания. Сразу возникли идеи и вопросы: будет ли сенсор мыши реагировать на филамент и можно будет отследить разницу в свечении. Опыт показал, мышь реагировала на движения филамента и засыпала при его остановке. Разобрав мышь, на светодиоде удалось измерить напряжение - 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 и творчески дополнено.

[CODE]/*

* 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

* and report what it finds.

*/

/*

* USB-PS/2 - Pin 5 is the mouse D+ pin, pin 6 is the D- pin

*/

#define MDATA 6

#define MCLK 5

#define ledgnd 8

#define led 7

#define pinIn 9

#define myzSize 15

int myz[myzSize]= { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

/*

* according to some code I saw, these functions will

* correctly set the mouse clock and data pins for

* various conditions.

*/

void gohi(int pin)

{

pinMode(pin, INPUT);

digitalWrite(pin, HIGH);

}

void golo(int pin)

{

pinMode(pin, OUTPUT);

digitalWrite(pin, LOW);

}

void mouse_write(char data)

{

char i;

char parity = 1;

// Serial.print('Sending ';);

// Serial.print(data, HEX);

// Serial.print(' to mouse

';);

// Serial.print('RTS';);

/* put pins in output mode */

gohi(MDATA);

gohi(MCLK);

delayMicroseconds(300);

golo(MCLK);

delayMicroseconds(300);

golo(MDATA);

delayMicroseconds(10);

/* start bit */

gohi(MCLK);

/* wait for mouse to take control of clock); */

while (digitalRead(MCLK) == HIGH)

;

/* clock is low, and we are clear to send data */

for (i=0; i < 8; i++) {

if (data & 0x01) {

gohi(MDATA);

}

else {

golo(MDATA);

}

/* wait for clock cycle */

while (digitalRead(MCLK) == LOW)

;

while (digitalRead(MCLK) == HIGH)

;

parity = parity ^ (data & 0x01);

data = data >> 1;

}

/* parity */

if (parity) {

gohi(MDATA);

}

else {

golo(MDATA);

}

while (digitalRead(MCLK) == LOW)

;

while (digitalRead(MCLK) == HIGH)

;

/* stop bit */

gohi(MDATA);

delayMicroseconds(50);

while (digitalRead(MCLK) == HIGH)

;

/* wait for mouse to switch modes */

while ((digitalRead(MCLK) == LOW) || (digitalRead(MDATA) == LOW))

;

/* put a hold on the incoming data. */

golo(MCLK);

// Serial.print('done.

';);

}

/*

* Get a byte of data from the mouse

*/

char mouse_read(void)

{

char data = 0x00;

int i;

char bit = 0x01;

// Serial.print('reading byte from mouse

';);

/* start the clock */

gohi(MCLK);

gohi(MDATA);

delayMicroseconds(50);

while (digitalRead(MCLK) == HIGH)

;

delayMicroseconds(5); /* not sure why */

while (digitalRead(MCLK) == LOW) /* eat start bit */

;

for (i=0; i < 8; i++) {

while (digitalRead(MCLK) == HIGH)

;

if (digitalRead(MDATA) == HIGH) {

data = data | bit;

}

while (digitalRead(MCLK) == LOW)

;

bit = bit << 1;

}

/* eat parity bit, which we ignore */

while (digitalRead(MCLK) == HIGH)

;

while (digitalRead(MCLK) == LOW)

;

/* eat stop bit */

while (digitalRead(MCLK) == HIGH)

;

while (digitalRead(MCLK) == LOW)

;

/* put a hold on the incoming data. */

golo(MCLK);

// Serial.print('Recvd data ';);

// Serial.print(data, HEX);

// Serial.print(' from mouse

';);

return data;

}

void mouse_init()

{

gohi(MCLK);

gohi(MDATA);

// Serial.print('Sending reset to mouse

';);

mouse_write(0xff);

mouse_read(); /* ack byte */

// Serial.print('Read ack byte1

';);

mouse_read(); /* blank */

mouse_read(); /* blank */

// Serial.print('Sending remote mode code

';);

mouse_write(0xf0); /* remote mode */

mouse_read(); /* ack */

// Serial.print('Read ack byte2

';);

delayMicroseconds(100);

}

void setup()

{

pinMode(ledgnd, OUTPUT);

pinMode(led, OUTPUT);

pinMode(pinIn, INPUT);

digitalWrite(led, HIGH);

digitalWrite(ledgnd, LOW);

delay(200);

digitalWrite(led, LOW);

//Serial.begin(9600);

mouse_init();

}

/*

* get a reading from the mouse and report it back to the

* host via the serial line.

*/

void loop()

{

char mstat;

char mx;

char my;

int mz;

int mi;

/* get a reading from the mouse */

mouse_write(0xeb); /* give me data! */

mouse_read(); /* ignore ack */

mstat = mouse_read();

mx = mouse_read();

my = mouse_read();

for (int thisZ = 0; thisZ < myzSize-1; thisZ++) {

myz[thisZ] = myz[thisZ+1];

}

myz[myzSize-1] = int(my);

myz[myzSize-1] = abs(myz[myzSize-1]);

mz = 0;

for (int thisZ = 0; thisZ < myzSize; thisZ++) {

mz = mz + myz[thisZ];

//Serial.println(mxz[thisZ], DEC);

}

//Serial.println(mz, DEC);

mi = digitalRead(pinIn);

//Serial.println(mi, DEC);

if ((mz < 10) and (mi == HIGH)) {

digitalWrite(led, HIGH);

}

else {

digitalWrite(led, LOW);

}

digitalWrite(ledgnd, LOW);

/* send the data back up */

//Serial.print(mstat, BIN);

//Serial.print(' X=';);

//Serial.print(mx, DEC);

//Serial.print(' Y=';);

//Serial.print(my, DEC);

//Serial.println();

delay(200); /* twiddle */

}

[/CODE]

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

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

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

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

Комментарии

28.11.2016 в 00:45
1

Спасибо за идею!

28.11.2016 в 01:11
0

Можно напрямую с оптического датчика читать, тогда плата будет гораздо меньше.
[IMG]https://hackadaycom.files.wordpress.com/2016/11/optical-mouse-sensor-breakout-3d-printed-mouse.jpg[/IMG]
https://hackaday.com/2016/11/21/diy-optical-sensor-breakout-board-makes-diy-optical-mouse/

Когда то тоже такой хренью страдал:

28.11.2016 в 01:53
0

Хорошая статья! Скетчик себе 'сплагиатил':). Хорошая идея, причем не только для филамента. Блин, все, спать не хочется, пошел на кухню с ноутом, мои спят!!! Есть идея! :D  Поддерживает или нет 'грызун' протокол PS/2 - это смотреть на тип контроллера внутри мыши?

28.11.2016 в 10:51
0

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

Можно поступить проще, запрограммировать контроллер, и вывести на USB разъем питание и выходы DATA и CLK  -> D+ и D-. Снять комментарии с вывода на COMx-порт, поставить его на мониторинг и начать подключать мыши из наличия. При необходимости меняя местами номера портов (6 и 5) для входов DATA и CLK  в прошивке.
Прошу обратить внимание, что после подключения мышки надо обязательно перегрузить контроллер и инициализация в моём случае идёт 5-7 секунд.

28.11.2016 в 03:25
4

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

28.11.2016 в 08:17
1

Реализация чумовая! Респект!
Один вопрос: как ведёт себя датчик в зависимости от материала? (мыши, порой, попадаются очень капризные)

28.11.2016 в 10:14
0

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

28.11.2016 в 10:30
0

Потому-то я и спросил про разные материалы.
Надо собрать и погонять. Ещё бы статистику по мышам набрать: какие глазастей, какие подслеповатей.

28.11.2016 в 10:56
1

Пробовал на белом и красном пластике, работает.

28.11.2016 в 11:02
1

Если есть прозрачный - проверте, пожалуйста.

28.11.2016 в 11:09
1

Прозрачный есть, вечером постараюсь проверить.

29.11.2016 в 12:13
2

Проверил на прозрачном (PC поликарбонат SEM) конечно реагирует не очень чётко, но за 3 секунды несколько перемещений регистрирует и этого хватает для предотвращения ложного срабатывания. Я думаю можно протестировать на своём пластике и своей мыши и даже не разбирая её. Сделать к ней простейшую направляющую и попытаться продвигать пластик, если курсор на экране вверх/вниз двигается - будет реагировать, можно делать датчик.  

28.11.2016 в 08:33
3

Спасибо. Ожидал подобную статью. 
Но у меня есть предложение:
У хвостатого существа есть 'колёсикО'... а к нему либо механический, либо оптический энкодер.
Данные с этого энкодера можно обрабатывать во внешним МК ( в данном случае - Pro Micro на ATmega32u4) либо напрямую (подпаяться), либо через родной контроллер мышки.

К чему это я ? По методу в статье мы проверяем наличие движения филамента. Но как замечено в прошлых статьях на эту тему: ' А если принтер встал на запланированную паузу, например: ожидание остывания очередного слоя ABS ???'. На каждой плановой паузе датчик будет матюкаться на продолжительную остановку филамента. 
Можно использовать данные с энкодера, приклеенного к валу двигателя подачи филамента. ИЛИ, считывать с драйвера двигателя сигналы на управление двигателем. А уже по этим данным оценивать - работает двигатель или нет.

Логика такая:
Если есть движение филамента и двигатель крутится - Всё хорошо.
Если нет движения филамента и двигатель крутится - 'Не ругайся, НасЯльникА' (вой сирен, салюты и другие методы вызова оператора... и/или вывод сигнала паузы на плату управления принтером)
Если нет движения филамента и двигатель не крутится - Всё хорошо.

28.11.2016 в 10:18
1

При чем не один двигатель, а два. Как по Х, так и по У.
И не просто пищалку, а ставить принтер на паузу. Я к примеру редко когда нахожусь рядом с принтеров во время его работы. недавно отправил на печать с утра, на работе запара, в обдет смотрю в камеру, а принтер в воздухе печатает. Оказалось дочка вечером помогая папке ремонтировать что-нибудь перекрутила филамент на бабине. и тот первые 10 минут печатал нормально, а потом натянулся и сам себя зажал.

28.11.2016 в 11:05
1

При чем не один двигатель, а два. Как по Х, так и по У.
не совсем понял. Какая будет зависимость от работы этих двигателей? 

И не просто пищалку, а ставить принтер на паузу.
(вой сирен, салюты и другие методы вызова оператора... и/или вывод сигнала паузы на плату управления принтером)
короче, выводить на один из пинов внешнего МК логическую '1'. На другой свободный пин - сигнал для пиликалки. А дальше устанавливающий апгрейд пусть сам решает, какая защита нужна при аварии.

28.11.2016 в 12:49
1

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

28.11.2016 в 13:39
2

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

Логика такая: 
Если есть движение филамента и двигатель крутится - Всё хорошо. 
Если нет движения филамента и двигатель крутится - 'Не ругайся, НасЯльникА' (вой сирен, салюты и другие методы вызова оператора... и/или вывод сигнала паузы на плату управления принтером) 
Если нет движения филамента и двигатель не крутится - Всё хорошо.
Ели двигатель подачи филамента не крутится - значит филамент не требуется. Исходя из мной описанной логики, датчик будет ждать когда двигатель Крутится, а филамент не двигается - именно такие условия у нас, когда забито сопло, кончился филамент, намотался узел на катушке или прогрыз филамента шестерёнкой.
Если выполняется любое условие, кроме 'Если нет движения филамента и двигатель крутится' , то нам пофиг: перемещается экструдер относительно стола или не перемещается. 

Если рассмотреть печать башни, то для датчика это будет выглядеть так:
1) Если есть движение филамента и двигатель крутится - печатаем слой первой башенки
2) Если нет движения филамента и двигатель не крутится - закончилась печать слоя (куска слоя), эктрудор понесло в направлении второй башенки
3) Если есть движение филамента и двигатель крутится - печатаем слой второй башенки
2) Если нет движения филамента и двигатель не крутится - закончилась печать слоя (куска слоя), эктрудор понесло в направлении первой башенки
5) начинаем с 1)

Упустил четвёртое условие:
Если есть движения филамента и двигатель не крутится - оператор заправляет/изымает филамент - всё нормально.

29.11.2016 в 07:52
1

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

29.11.2016 в 12:54
1

просто 'стучать' без движения
Движение будет, немного туда-сюда, но будет.

29.11.2016 в 13:44
1

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

29.11.2016 в 07:55
1

А так все придумано до вас и для вас. Вот пример https://sites.google.com/site/tunelldev/home/filamentmonitor#TOC-3D-Printer-Filament-Monitor, поменять энкодер на оптику и будет надежнее.

29.11.2016 в 08:52
1

Да я и не притененную на 'новаторство'  )
Идея с двумя энкодерами не моя. Как вариант, я предложил перехват сигналов управления двигателем перед драйвером двигателя. 

В данной конструкции меня смущает, что требуется отдельный вывод с платы управления принтером и правка G-code в слайсере - уже не везде такой датчик воткнёшь. 
У меня скромная китайская Melzi. Как я понимаю, к ней я уже не смогу подключить датчик из поста. Мне надо подумать о покупке нормальной платы управления.

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

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

29.11.2016 в 23:29
1

Спасибо за ссылку!
Кто желал паузу, вот решение. Очень доходчиво описано как можно подключить, в том числе и этот датчик, к 'Паузе' принтера.

28.11.2016 в 11:06
1

И не просто пищалку, а ставить принтер на паузу.
Я думаю, есть два подхода:
1) мы находимся далеко от принтера, тогда надо запрограммировать - паузу, а может даже и выключение.
2) мы находимся рядом и можем вмешаться, тогда звуковой сигнал предпочтительней.

Я очень не люблю паузу, чаще всего, после неё модель будет испорчена: натечёт большая капля и/или оплавится часть детали рядом с соплом.

28.11.2016 в 11:37
1

Пусть натечет, пусть расплавит. Это можно исправить. А вот печать пол дня в пустую, вот это не приятно.

02.12.2016 в 19:12
1

Так сопло ж сразу уезжает от модели во время паузы.

28.11.2016 в 11:00
1

если принтер встал на запланированную паузу,
Если она запланирована в G-code, то просто использовать до и после команду сброса/установки разрешающего сигнала (типа: M42 P4 S0 ... M42 P4 S255)

28.11.2016 в 11:11
1

Как я понимаю, это надо дополнять плагин для соответствующей авто-правки  G-code при генерации в стороннем ПО вне принтера. Или вписывать аналогичный плагин в код для самого принтера (для тех, кто просто суёт STL принтеру, а тот сам сласерит).  Или ручками дописывать G-code .
Тоже вариант, но не для ленивых.

28.11.2016 в 18:01
0

mikola,
вписать в Gcode - хорошая идея.

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

28.11.2016 в 09:22
1

Реализация супер. Идея то-же.
Ну так, к размышлению, а если использовать для такого датчика оптический концевик?

28.11.2016 в 09:25
1

Только обрыв удастся зафиксировать. В мыши простенькая камера - отслеживает изменения картинки.

28.11.2016 в 10:17
0

Спасибо!

28.11.2016 в 11:53
1

Полезно! Такие датчики надо во все серийные принтеры ставить как защиту от дурака.

28.11.2016 в 13:54
1

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

28.11.2016 в 14:10
1

Частично верно.
Тогда надо перехватывать сигнал/реальную_работу двигателя и ставить отдельно энкодер на сам филамент... 
Можно обойтись без кнопки... Но один фиг надо сравнивать что происходит с двигателем и филаментом.

Возвращаемся к коменту sagis

sagis
plastmaska
7 Ноя 20:33
Ну это с любым датчиком так будет но выход видится - ЕСЛИ считывать сигнал с движка экструдера сравнивать эти 2 сигнала например с помощью arduino pro mini и по рассинхнону отправлять в com-порт меги g-код паузы.
или к коменту Alex_3d
Alex_3d
7 Ноя 20:47

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

28.11.2016 в 16:14
1

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

28.11.2016 в 16:15
1

Соответственно не будет глюков сенсора мыши в зависимости от типа пластика
Вы с этим сталкивались? Какого-го типа были глюки ?
а механическая сложность такая же остается
В данном прототипе механические компоненты не используются т.е. 'механическая сложность' другая.

28.11.2016 в 16:23
1

то намного проще

Реализуйте и сравним, что проще и как будет вести себя 'колёсико' после первой сотни метров пластика ...

28.11.2016 в 21:13
1

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

29.11.2016 в 00:53
1

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

29.11.2016 в 12:53
1

Ок Костантин, не вопрос, только почему усложнять его делать его из мыши и не использовать обычный опто концевик с флажком?
Только потому что у мыши 20 пиксельная матрица?

29.11.2016 в 12:57
1

опто концевик с флажком
Не совсем понимаю как он будет реагировать на движение или его отсутствие при наличии филамента ?

28.11.2016 в 15:07
1

Было бы круто еще по картинке с этой микрокамеры измерять толщину филамента.

28.11.2016 в 15:18
2

Там сенсоры как правило имеют разрешение порядка 20х20 пикселей, при самом идеальном раскладе точность будет хуже %5, а более реально - 10% и больше. Нафиг такой датчик не нужен.

28.11.2016 в 21:22
0

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

ski
28.11.2016 в 22:29
1

В любую библиотеку машинного зрения :)

ski
28.11.2016 в 23:05
1
29.11.2016 в 19:39
0

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

Ваша ссылка показывает девайс на Duemilanova.
То есть практически ещё одна Уно/Мега на 328.

В случае сопроцессора у MKS TFT28 - я ещё понимаю. Дорого но приятно.
А тут... ради одного датчика изводить копеечную/практическбесплатную античную мышь и целый Ардуино...

Мне кажется было бы толковее это поручить Нано, причём не только надзор за датчиком наличия/отсутствия филамента, но и за командой 'Пауза/ВниманиеОператор' в головную Мегу, ну и обсчёт 'усилие давления' на сопло от экструдера - засор или нет.

Хотя в принципе можно и по энкодеру шаговика эту ситуацию отловить.

28.11.2016 в 21:29
1

Чем ваш вариант лучше обычного концевика?

28.11.2016 в 23:10
1

концевик может отследить только Отсутствие филамента. 
Здесь пытаемся замахнуться на полный комплект: когда забито сопло, кончился филамент, намотался узел на катушке или прогрыз филамента шестерёнкой. 
В том виде, как сейчас предоставляет автор поста, только предупреждение о возможной проблеме, так как нет проверки что делает при этом двигатель подачи прутка.

28.11.2016 в 23:39
1

А если филамент проходит, но с трудом?

29.11.2016 в 01:05
1

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

29.11.2016 в 01:06
1

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

29.11.2016 в 01:02
1

так как нет проверки что делает при этом двигатель подачи прутка
А зачем это нужно ?
Если на входе Arduin-ы стоит высокий уровень (устанавливаем в начале G-code печатаемой детали), то значит филамент должен двигаться туда или обратно и если этого не происходит - нужно сигнализировать/действовать.  При окончании печати - устанавливается низкий уровень и при остановке филамента сигнала не будет. Нужные команды можно автоматически вставлять в G-code в момент его создания, один раз введя нужные команды на вкладке [Custom G-code] в Slic3R  и наверное аналогично в других программах.

29.11.2016 в 01:46
1

Извиняюсь. Я невнимательно прочитал статью(. 
Перечитал внимательно, и теперь понял, что вы УЖЕ реализовали перепроверку.

Но меня всё равно смущает, что требуется отдельный вывод с платы управления принтером и правка G-code в слайсере.
У меня скромная китайская Melzi. Как я понимаю, к ней я уже не смогу подключить ваш датчик.  Мне надо подумать о покупке нормальной платы управления.

29.11.2016 в 12:32
1

У меня скромная китайская Melzi
На ней есть возможность управлять выходсми из G-Code команда M42 ?
Для датчика с звуковой сигнализацией от платы нужно только питание и управляющий сигнал на АВТОМАТИЧЕСКОЕ включение/выключение, но при необходимости его можно заменить ручным включение питания на контроллер. Главное не забывать его включать когда нужно.
правка G-code в слайсере
Правка минимальная и одноразовая.
По аналогии у меня сейчас в слайсер добавляет включение вентилятора турбо-охлаждения после печати и всё работает.

29.11.2016 в 01:08
1

Концевик не отслеживает остановку филамента, например при пробке с PLA. 

29.11.2016 в 11:15
1

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

Mar
29.11.2016 в 19:14
0

Mar, лет 20 назад открытку на день рожденья переделал на тестер прозвонки цепей.
Слышно было даже конденсаторы и полярность :)

Аналогично годится любая китайская игрушка из уличного киоска, на батарейках и со светозвуком.
Пластиковую 'чеку' - выдергиваешь, и сразу - 'Fire Fire'... очередь - очередь - 'Fire Fire!!'

... перепроизводство звуковых чипов.
Кстати, питание 4.5 вольта на трёх батарейках, пищалка + мультицветный светодиод.
В открытке - одна батарейка на 3V.

Цена 'игрушки' - 100-120 рублей.
Цена музыкальной открытки с конвертом - чуть дороже, пищалка - тише, картону - больше...

28.02.2019 в 17:58
0

собрал, на столе работает, подложку напечатал белым пластиком, на столе работает))

06.09.2019 в 10:45
0

На эту тему есть простой фотодиодный датчик окончания ленты магнитофона, можно снять с любого старого пленочного магнитофона. Работает супер надежно.

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

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

Масштабная модель (1:10) завода по производству горючих жидкостей. (Промышленный макет)

Печать деталей из полиамида

Мощная постзасветка UV напечатанных фотополимерных моделей. На коленке, но не совсем

Результаты розыгрыша поездки на 3Dtoday Fest перенесены на 23.09.19

Убийца Апекса)) Точильный станок на 3Д ПРИНТЕРЕ, Knife Sharpener for 3D PRINTER

Последовательное сравнение экструдеров (фидеров) на Ender 3