Авторегулировка диаметра филамента | 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
Скачано: 114, размер: 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 – Замена филамента. И я спокойно беру и меняю филамент либо устраняю обрыв…

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

5/5 - (1 голос)

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

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

Добавить комментарий

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