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

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

Несколько фото.

Площадка для крепления платы мыши и направляющая для филамента.
003.jpg
В сборе.
004.jpg
Со стороны платы мыши.
008.jpg
Филамент не движется, загорелся светодиод.
PREVIEW
Вывод. Поставленная цель – сделать недорогой, но надёжный датчик остановки/окончания филамента из простой мыши, вполне осуществима.

Спасибо за внимание.

И, конечно, буду рад ответить на ваши вопросы, если таковые будут.

Тест программы. Взято на 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
 * 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\n";);
  //  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.\n";);
}

/*
 * 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\n";);
  /* 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\n";);
  return data;
}

void mouse_init()
{
  gohi(MCLK);
  gohi(MDATA);
  //  Serial.print("Sending reset to mouse\n";);
  mouse_write(0xff);
  mouse_read();  /* ack byte */
  //  Serial.print("Read ack byte1\n";);
  mouse_read();  /* blank */
  mouse_read();  /* blank */
  //  Serial.print("Sending remote mode code\n";);
  mouse_write(0xf0);  /* remote mode */
  mouse_read();  /* ack */
  //  Serial.print("Read ack byte2\n";);
  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("\tX=";);
  //Serial.print(mx, DEC);
  //Serial.print("\tY=";);
  //Serial.print(my, DEC);
  //Serial.println();
  delay(200);  /* twiddle */
}

Подписаться на 3Dtoday
38
Комментарии к статье

Комментарии

28.11.16 в 00:45
1
Спасибо за идею!
28.11.16 в 01:11
0
Можно напрямую с оптического датчика читать, тогда плата будет гораздо меньше.

https://hackaday.com/2016/11/21/diy-optical-sensor-breakout-board-makes-diy-optical-mouse/

Когда то тоже такой хренью страдал:
IMG_1125 (2).JPG
28.11.16 в 01:53
0
Хорошая статья! Скетчик себе "сплагиатил":). Хорошая идея, причем не только для филамента. Блин, все, спать не хочется, пошел на кухню с ноутом, мои спят!!! Есть идея! :D Поддерживает или нет "грызун" протокол PS/2 - это смотреть на тип контроллера внутри мыши?
28.11.16 в 10:51
0
Я думаю лучше ориентироваться по чипу/контроллеру внутри мыши, у меня - PAN3102DB

Можно поступить проще, запрограммировать контроллер, и вывести на USB разъем питание и выходы DATA и CLK -> D+ и D-. Снять комментарии с вывода на COMx-порт, поставить его на мониторинг и начать подключать мыши из наличия. При необходимости меняя местами номера портов (6 и 5) для входов DATA и CLK в прошивке.
Прошу обратить внимание, что после подключения мышки надо обязательно перегрузить контроллер и инициализация в моём случае идёт 5-7 секунд.
28.11.16 в 03:25
4
Замечательно придумано, замечательно изложено.
А главное- показано рабочее устройство.
Местные сумашедшие "непризнанные гении" себя этим не утруждают.
28.11.16 в 08:17
1
Реализация чумовая! Респект!
Один вопрос: как ведёт себя датчик в зависимости от материала? (мыши, порой, попадаются очень капризные)
28.11.16 в 10:14
0
А то и цвета. У меня мышь прекрасно работавшая дома на темном столе, на работе вообще почти не реагировала, хотя рисунок и материал одинаковые, прсото стол светлый.
28.11.16 в 10:30
0
Потому-то я и спросил про разные материалы.
Надо собрать и погонять. Ещё бы статистику по мышам набрать: какие глазастей, какие подслеповатей.
28.11.16 в 10:56
1
Пробовал на белом и красном пластике, работает.
28.11.16 в 11:02
1
Если есть прозрачный - проверте, пожалуйста.
28.11.16 в 11:09
1
Прозрачный есть, вечером постараюсь проверить.
29.11.16 в 12:13
2
Проверил на прозрачном (PC поликарбонат SEM) конечно реагирует не очень чётко, но за 3 секунды несколько перемещений регистрирует и этого хватает для предотвращения ложного срабатывания. Я думаю можно протестировать на своём пластике и своей мыши и даже не разбирая её. Сделать к ней простейшую направляющую и попытаться продвигать пластик, если курсор на экране вверх/вниз двигается - будет реагировать, можно делать датчик.
28.11.16 в 08:33
3
Спасибо. Ожидал подобную статью.
Но у меня есть предложение:
У хвостатого существа есть "колёсикО"... а к нему либо механический, либо оптический энкодер.
Данные с этого энкодера можно обрабатывать во внешним МК ( в данном случае - Pro Micro на ATmega32u4) либо напрямую (подпаяться), либо через родной контроллер мышки.

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

Логика такая:
Если есть движение филамента и двигатель крутится - Всё хорошо.
Если нет движения филамента и двигатель крутится - "Не ругайся, НасЯльникА" (вой сирен, салюты и другие методы вызова оператора... и/или вывод сигнала паузы на плату управления принтером)
Если нет движения филамента и двигатель не крутится - Всё хорошо.
28.11.16 в 10:18
1
При чем не один двигатель, а два. Как по Х, так и по У.
И не просто пищалку, а ставить принтер на паузу. Я к примеру редко когда нахожусь рядом с принтеров во время его работы. недавно отправил на печать с утра, на работе запара, в обдет смотрю в камеру, а принтер в воздухе печатает. Оказалось дочка вечером помогая папке ремонтировать что-нибудь перекрутила филамент на бабине. и тот первые 10 минут печатал нормально, а потом натянулся и сам себя зажал.
28.11.16 в 11:05
1
При чем не один двигатель, а два. Как по Х, так и по У.
не совсем понял. Какая будет зависимость от работы этих двигателей?

И не просто пищалку, а ставить принтер на паузу.
(вой сирен, салюты и другие методы вызова оператора... и/или вывод сигнала паузы на плату управления принтером)
короче, выводить на один из пинов внешнего МК логическую "1". На другой свободный пин - сигнал для пиликалки. А дальше устанавливающий апгрейд пусть сам решает, какая защита нужна при аварии.
28.11.16 в 12:49
1
не совсем понял. Какая будет зависимость от работы этих двигателей?
К примеру мы печатаем скажем 2 башенки и они тонкие и скорость печати упала до минимума возможного и мы просто переезжаем от башенки к башенке.
28.11.16 в 13:39
2
Можно использовать данные с энкодера, приклеенного к валу двигателя подачи филамента. ИЛИ, считывать с драйвера двигателя сигналы на управление двигателем. А уже по этим данным оценивать - работает двигатель или нет.
Логика такая:
Если есть движение филамента и двигатель крутится - Всё хорошо.
Если нет движения филамента и двигатель крутится - "Не ругайся, НасЯльникА" (вой сирен, салюты и другие методы вызова оператора... и/или вывод сигнала паузы на плату управления принтером)
Если нет движения филамента и двигатель не крутится - Всё хорошо.
Ели двигатель подачи филамента не крутится - значит филамент не требуется. Исходя из мной описанной логики, датчик будет ждать когда двигатель Крутится, а филамент не двигается - именно такие условия у нас, когда забито сопло, кончился филамент, намотался узел на катушке или прогрыз филамента шестерёнкой.
Если выполняется любое условие, кроме "Если нет движения филамента и двигатель крутится" , то нам пофиг: перемещается экструдер относительно стола или не перемещается.

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

Упустил четвёртое условие:
Если есть движения филамента и двигатель не крутится - оператор заправляет/изымает филамент - всё нормально.
29.11.16 в 07:52
1
Как все сложно... проще синхронизировать сигнал движения в прошивке с движением на энкодере. Просто обычно у людей стоит нема 17, и если забилось сопло, то может просто "стучать" без движения. Благодаря этой синхронизации можно ставить принтер и на паузу и что угодно делать. Можно вообще воткнуть на пины обрыв филамента, как я реализовал.
29.11.16 в 12:54
1
просто "стучать" без движения
Движение будет, немного туда-сюда, но будет.
29.11.16 в 13:44
1
Контролер знает что он дает движение вперед, датчик показывает что у вас пруток мотыляет, как бы намекает, что надо ставить принтер на паузу. Не придирайтесь, схема уже проверена и нормально работает. У меня реализация через энкодер, у вас через оптический датчик, разницы по сути нету, просто надо модифицировать прошивку принтера немного и подцепить к пину обрыва прутка ваш датчик, все тоже самое.
29.11.16 в 07:55
1
А так все придумано до вас и для вас. Вот пример https://sites.google.com/site/tunelldev/home/filamentmonitor#TOC-3D-Printer-Filament-Monitor, поменять энкодер на оптику и будет надежнее.
29.11.16 в 08:52
1
Да я и не притененную на "новаторство" )
Идея с двумя энкодерами не моя. Как вариант, я предложил перехват сигналов управления двигателем перед драйвером двигателя.

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

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

поменять энкодер на оптику и будет надежнее
полностью согласен. Сам встречал несколько мышей с нерабочими механическими энкодерами.
29.11.16 в 23:29
1
Спасибо за ссылку!
Кто желал паузу, вот решение. Очень доходчиво описано как можно подключить, в том числе и этот датчик, к "Паузе" принтера.
28.11.16 в 11:06
1
И не просто пищалку, а ставить принтер на паузу.
Я думаю, есть два подхода:
1) мы находимся далеко от принтера, тогда надо запрограммировать - паузу, а может даже и выключение.
2) мы находимся рядом и можем вмешаться, тогда звуковой сигнал предпочтительней.

Я очень не люблю паузу, чаще всего, после неё модель будет испорчена: натечёт большая капля и/или оплавится часть детали рядом с соплом.
28.11.16 в 11:37
1
Пусть натечет, пусть расплавит. Это можно исправить. А вот печать пол дня в пустую, вот это не приятно.
02.12.16 в 19:12
1
Так сопло ж сразу уезжает от модели во время паузы.
28.11.16 в 11:00
1
если принтер встал на запланированную паузу,
Если она запланирована в G-code, то просто использовать до и после команду сброса/установки разрешающего сигнала (типа: M42 P4 S0 ... M42 P4 S255)
28.11.16 в 11:11
1
Как я понимаю, это надо дополнять плагин для соответствующей авто-правки G-code при генерации в стороннем ПО вне принтера. Или вписывать аналогичный плагин в код для самого принтера (для тех, кто просто суёт STL принтеру, а тот сам сласерит). Или ручками дописывать G-code .
Тоже вариант, но не для ленивых.
28.11.16 в 18:01
0
mikola,
вписать в Gcode - хорошая идея.

Я предложил бы вписывать не один - два раза,
а, скажем, каждые 15 минут - тест на оба датчика - мышиный и энко-шаговика.
28.11.16 в 09:22
1
Реализация супер. Идея то-же.
Ну так, к размышлению, а если использовать для такого датчика оптический концевик?
28.11.16 в 09:25
1
Только обрыв удастся зафиксировать. В мыши простенькая камера - отслеживает изменения картинки.
28.11.16 в 10:17
0
Спасибо!
28.11.16 в 11:53
1
Полезно! Такие датчики надо во все серийные принтеры ставить как защиту от дурака.
28.11.16 в 13:54
1
Решение выглядит сильно переусложненным. Если используется отдельный контроллер - то намного проще из мыши выдрать колесико с кнопкой и завести их напрямую на контроллер. Дальше прижимаем колесом филамент и все. Тогда нажатие кнопки будет сигналом что филамент есть, а сигналы от энкодера колеса будут показывать скорость движения.
Соответственно не будет глюков сенсора мыши в зависимости от типа пластика а механическая сложность такая же остается.
28.11.16 в 14:10
1
Частично верно.
Тогда надо перехватывать сигнал/реальную_работу двигателя и ставить отдельно энкодер на сам филамент...
Можно обойтись без кнопки... Но один фиг надо сравнивать что происходит с двигателем и филаментом.

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

Всем отписавшимся выше. Почитал и пришёл к такой идее. Два оптических энкодера - один на валу экструдера, второй на колёсике недалеко от входа. Сравнивать количество импульсов от обоих энкодеров (с поправкой на диаметры) за некоторый период (скажем - пару секунд). И, чтобы не грузить основной контроллер, сделать это на отдельном.
Програмка получается чуть ли не два десятка строчек. А, ардуино нано стоит копейки.
28.11.16 в 16:14
1
Но один фиг надо сравнивать что происходит с двигателем и филаментом.
В теории да, а на практике это любая прошивка умеет делать сама. Называется датчик толщины филамента, у марлина и репитера есть встроенная поддержка для них.
28.11.16 в 16:15
1
Соответственно не будет глюков сенсора мыши в зависимости от типа пластика
Вы с этим сталкивались? Какого-го типа были глюки ?
а механическая сложность такая же остается
В данном прототипе механические компоненты не используются т.е. "механическая сложность" другая.
28.11.16 в 16:23
1
то намного проще
Реализуйте и сравним, что проще и как будет вести себя "колёсико" после первой сотни метров пластика ...
28.11.16 в 21:13
1
думаю можно сделать еще проще, на оптоконцевике с флажком который открывает датчик как только филамент заканчивается, т.е. флажок упал и все... можно остановить, можно в паузу и с звуковым сигналом... ну вообщем...
29.11.16 в 00:53
1
как только филамент заканчивается,
Большинство проблемных ситуаций, с которыми приходилось встречаться (если не все), основываются на аварийной остановке филамента. Например: поймали пробку на PLA или нестандартный филамен застрял в фторопластовой трубке или засорилась шестерня подачи или намотался на вал очень мягкий филамент, тут и поможет данный датчик. Но окончание филамента, в нашем случае, тоже будет отслежено.
29.11.16 в 12:53
1
Ок Костантин, не вопрос, только почему усложнять его делать его из мыши и не использовать обычный опто концевик с флажком?
Только потому что у мыши 20 пиксельная матрица?
29.11.16 в 12:57
1
опто концевик с флажком
Не совсем понимаю как он будет реагировать на движение или его отсутствие при наличии филамента ?
28.11.16 в 15:07
1
Было бы круто еще по картинке с этой микрокамеры измерять толщину филамента.
28.11.16 в 15:18
2
Там сенсоры как правило имеют разрешение порядка 20х20 пикселей, при самом идеальном раскладе точность будет хуже %5, а более реально - 10% и больше. Нафиг такой датчик не нужен.
28.11.16 в 21:22
0
А обсчёт картинки с камеры мышки - куда направите?
28.11.16 в 22:29
1
В любую библиотеку машинного зрения :)
28.11.16 в 23:05
1
29.11.16 в 19:39
0
mikola,
я в курсе этой разработки/находки,
ещё на этапе хакинга драйвера мыши австралийцами,
переделывавший любую мышь в сканер.

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

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

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

Хотя в принципе можно и по энкодеру шаговика эту ситуацию отловить.
28.11.16 в 21:29
1
Чем ваш вариант лучше обычного концевика?
28.11.16 в 23:10
1
концевик может отследить только Отсутствие филамента.
Здесь пытаемся замахнуться на полный комплект: когда забито сопло, кончился филамент, намотался узел на катушке или прогрыз филамента шестерёнкой.
В том виде, как сейчас предоставляет автор поста, только предупреждение о возможной проблеме, так как нет проверки что делает при этом двигатель подачи прутка.
28.11.16 в 23:39
1
А если филамент проходит, но с трудом?
29.11.16 в 01:05
1
А если филамент проходит, но с трудом?
Можно настроить в программе, какое перемещение считать минимальным, но возрастёт вероятность ложного срабатывания.
29.11.16 в 01:06
1
А вот это сложнее. Нужно отслеживать сколько было подано шагов для двигателя подачи филамента и точно отсчитать другим энкодером сколько прошло мимо датчика филамента по факту. Потом сравнивать эти значения с учётом коэффициента, определённого при Правильной подаче филамента.
29.11.16 в 01:02
1
так как нет проверки что делает при этом двигатель подачи прутка
А зачем это нужно ?
Если на входе Arduin-ы стоит высокий уровень (устанавливаем в начале G-code печатаемой детали), то значит филамент должен двигаться туда или обратно и если этого не происходит - нужно сигнализировать/действовать. При окончании печати - устанавливается низкий уровень и при остановке филамента сигнала не будет. Нужные команды можно автоматически вставлять в G-code в момент его создания, один раз введя нужные команды на вкладке [Custom G-code] в Slic3R и наверное аналогично в других программах.
29.11.16 в 01:46
1
Извиняюсь. Я невнимательно прочитал статью(.
Перечитал внимательно, и теперь понял, что вы УЖЕ реализовали перепроверку.

Но меня всё равно смущает, что требуется отдельный вывод с платы управления принтером и правка G-code в слайсере.
У меня скромная китайская Melzi. Как я понимаю, к ней я уже не смогу подключить ваш датчик. Мне надо подумать о покупке нормальной платы управления.
29.11.16 в 12:32
1
У меня скромная китайская Melzi
На ней есть возможность управлять выходсми из G-Code команда M42 ?
Для датчика с звуковой сигнализацией от платы нужно только питание и управляющий сигнал на АВТОМАТИЧЕСКОЕ включение/выключение, но при необходимости его можно заменить ручным включение питания на контроллер. Главное не забывать его включать когда нужно.
правка G-code в слайсере
Правка минимальная и одноразовая.
По аналогии у меня сейчас в слайсер добавляет включение вентилятора турбо-охлаждения после печати и всё работает.
29.11.16 в 01:08
1
Концевик не отслеживает остановку филамента, например при пробке с PLA.
29.11.16 в 11:15
1
еще здесь напишу, может кому пригодится:
я часто печатаю маленькими отрезками цветных пластиков и чтоб не пропустить момент, когда филамент закончится, делаю так:
выдрал со старой музыкальной открытки эту штучку, которая пиликает.
между контактами там пропустил нить филамента и все, контакт разорван- тишина. кончается нить, контакт смыкается - начинает играть противная мелодия.
это мой бюджетный способ, когда даже ничего не надо паять.:)
P.S. не смейтесь над бедным гуманитарием.
29.11.16 в 19:14
0
Mar, лет 20 назад открытку на день рожденья переделал на тестер прозвонки цепей.
Слышно было даже конденсаторы и полярность :)

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

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

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

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

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

3D Bioprinting Solutions готовит новый 3D-принтер для отправки на МКС

Распаковка - Сборка - Первая печать на A6

Нидерландские исследователи отправятся к Южному полюсу на 3D-печатном солнечном вездеходе

Барселона готовится принять форум аддитивных технологий IN(3D)USTRY 2018

Результаты конкурса фотожаб

По итогам выставки 3D EXPO