И так после долгих мучений стабилизировать диаметр прутка с помощью своего самодельного Экструдера был найден ещё один способ который мне показался более стабильным чем его получить 1.75мм из экструдера))
Перерыв много инфы в интернете был взят на заметку вот этот датчик — (https://www.youmagine.com/designs/filament-diameter-sensor) описание тут — (http://diy3dprinting.blogspot.com/2014/01/diy-filament-diameter-sensor.html). После теста он мне показался более стабильным и особенность у него есть калибровка, если нормально откалибровать то можно добиться хороших результатов.
За основу был взят с датчика только код для ARDUINO по скольку датчик мне не подходил у меня принтер ANET-A6 с переделанной подачей филамента, была — Прямая подача, когда мотор, тянущий филамент находится прямо на каретке над экструдером. Стал — Боуден подача, когда за мотором, тянущем филамент находится гладкая трубка, утыкающаяся в экструдер.
/* Sample code for the magneto-mechanical filament diameter sensor. Calibrate your individual sensor by measuring objects of known diameter and creating a custom lookup table! */ define verbose 0 //0: No error or debugging messages via serial, 1: Error messages, 2: Error and debugging messages define NUMTEMPS 4 //length of lookup table define smooth 50 //exponential smoothing factor, higher is smoother define sensIn A1 //Output of the hall sensor // ADC input, diameter output static float lut3[NUMTEMPS][2] = { {532, 0}, {675, 2.5}, {870, 3}, {992, 3.2} }; float sensbuf =lut3[0][0]; //smoothed raw value void setup() { Serial.begin(115200); } void loop() { int sensorValue = analogRead(sensIn); sensbuf += (sensorValue-sensbuf)/smooth; //smoothing Serial.print(sensbuf); Serial.print(" "); Serial.println(lookup(sensbuf, lut3),5); delay(10); } float lookup(float inval, float lut[][2]){ float out; byte i; for (i=1; i inval) { return lut[i-1][1] + (inval - lut[i-1][0]) * (lut[i][1] - lut[i-1][1]) / (lut[i][0] - lut[i-1][0]); } } if (i == NUMTEMPS){ if (lut[0][1] > lut[NUMTEMPS][1]) { #if verbose > 1 Serial.println("WARNING: lookup out of range"); #endif return lut[NUMTEMPS][1]; } else { #if verbose > 1 Serial.println("WARNING: lookup out of range"); #endif return lut[0][1]; } } #if verbose > 0 Serial.println("ERROR: lookup failed"); #endif return 0; }
И так по скольку Боуден у меня стоял далеко от каретки от нагревателя получалось что при вычислении размера диаметра филамента он отправлял его позже что не есть хорошо. Тогда было решено нарисовать свой датчик и поставить его прямо на каретку но всё равно получился запас в районе 5 см. но мы это поправили программно сделали некий буфер который копит показатели диаметра и отправляет его с опозданием на 50сек. вычислил это просто замерил от центра датчика до нагревателя получилось 5 см. Поставив метки отрезка 5см. на филаменте запустив принтер на печать засек время вот и получилось 5см. проходит приме 45-50 сек.
Забыл сказать почему я это сделал и всё затеял… Да просто вся инфа в интернете связана с прошивками да и к тому же очень большая нехватка пинов для прошивки… По скольку у меня уже прошит принтер ANET-A6 под автоуровень BLTouch то лишаться я его не хотел и пришлось выкручиваться программно.
<<Controller>>
И так продолжаем… Была написана программа под названием «Controller» с помощью которой брались данные с COM порта в виде диаметра филамента ARDUINO и передавались тоже с помощью COM порта но уже в 3D принтер. Вот так всё просто… ARDUINO считывает показание и отправляет команды (G-CODE) их уже в 3D принтер. Да но есть одно Но печатаем только с флешки… По скольку для программы «Controller» нужен свободный COM порт а поскольку слайсеры их используют то в месте не получится.
Печатать стала гораздо лучше чем было, пруток у меня на тестовой печати варьировался от 1.38мм до 1.85мм и выше.
Так же был напечатан ещё один датчик для того что-бы сигнализировал что кончился или оборвался филамент. Он был установлен конечно выше перед Боуден,ом. Он не просто сигнализирует но и шлёт команду принтеру на данный момент вот такую — M600 – Замена филамента. И я спокойно беру и меняю филамент либо устраняю обрыв…
Отличная затея… Как один из вариантов когда не хватает пинов на принтере.
Спасибо.
Интересная затея…
Спасибо Валерий.
У вас для ардуино код не рабочий.
Спасибо Алексей… Поправил и выложил для скачивания.