Авторегулировка диаметра филамента | 04s.ru

Авторегулировка диаметра филамента

И так после долгих мучений стабилизировать диаметр прутка с помощью своего самодельного Экструдера был найден ещё один способ который мне показался более стабильным чем его получить 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;
 }
Скачать: Arduino
Скачано: 241, размер: 10 B, дата: 28 Янв. 2021

И так по скольку Боуден у меня стоял далеко от каретки от нагревателя получалось что при вычислении размера диаметра филамента он отправлял его позже что не есть хорошо. Тогда было решено нарисовать свой датчик и поставить его прямо на каретку но всё равно получился запас в районе 5 см. но мы это поправили программно сделали некий буфер который копит показатели диаметра и отправляет его с опозданием на 50сек. вычислил это просто замерил от центра датчика до нагревателя получилось 5 см. Поставив метки отрезка 5см. на филаменте запустив принтер на печать засек время вот и получилось 5см. проходит приме 45-50 сек.

Датчик обновлённый

Забыл сказать почему я это сделал и всё затеял… Да просто вся инфа в интернете связана с прошивками да и к тому же очень большая нехватка пинов для прошивки… По скольку у меня уже прошит принтер ANET-A6 под автоуровень BLTouch то лишаться я его не хотел и пришлось выкручиваться программно.

Датчика автоуровня 3DTouch ( BLTouch )

<<Controller>>

И так продолжаем… Была написана программа под названием “Controller” с помощью которой брались данные с COM порта в виде диаметра филамента ARDUINO и передавались тоже с помощью COM порта но уже в 3D принтер. Вот так всё просто… ARDUINO считывает показание и отправляет команды (G-CODE) их уже в 3D принтер. Да но есть одно Но печатаем только с флешки… По скольку для программы “Controller” нужен свободный COM порт а поскольку слайсеры их используют то в месте не получится.

Печатать стала гораздо лучше чем было, пруток у меня на тестовой печати варьировался от 1.38мм до 1.85мм и выше.

Тестовая печать

Так же был напечатан ещё один датчик для того что-бы сигнализировал что кончился или оборвался филамент. Он был установлен конечно выше перед Боуден,ом. Он не просто сигнализирует но и шлёт команду принтеру на данный момент вот такую – M600 – Замена филамента. И я спокойно беру и меняю филамент либо устраняю обрыв…

Кому интересно пишите спрашивайте в комментариях я буду дополнять статью более подробнее))

4.6/5 - (86 голосов)


Место для продажи

Обсуждение статьи: 6 коментарий
"Авторегулировка диаметра филамента"

  1. Отличная затея… Как один из вариантов когда не хватает пинов на принтере.

Добавить комментарий для Lis Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *