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

kick_2
Идет загрузка
Загрузка
28.11.2016
12607
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

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

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

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

Anycubic photon s не работает экран (первое включение после покупки. Решение)

Сотворение Сайтамы "One Punch Man"

Home in Marlin

Цветная Литофань возможна одним филаментом

Радиоуправляемый грузовичек.

Петли и двери в погреб