Датчик толщины нити (филамента)

в 5:25, , рубрики: 3d-принтер, датчики

В данной статье расскажу реализацию своей идеи датчика толщины филамента на основе USB микроскопа. 

 Из известных в интернете реализаций датчика толщины нити, мой вариант является “самым, самым”.    Датчик самый простой в повторении, самый дешевый и самый точный, но и самый большой из известных.

Известно, что в промышленных условиях нить изготавливается путём выдавливания расплавленного пластика с определённой скоростью в охлаждающую ванну. Сопла для нити диаметром 2,85 мм и 1,75 мм на самом деле имеют одинаковый размер, но нить растягивается больше или меньше, когда выходит из сопла.

Регулируя скорость выдавливания и растягивания, система может производить нить любого желаемого размера на одном и том же диаметре сопла.  Как и любая механическая система, она нуждается в постоянной настройке для поддержания этого баланса. Обычно это делается путём измерения нити лазером после её охлаждения и передачи этой информации обратно в систему. У лучших производителей нитей есть несколько лазеров и очень быстрые контуры обратной связи. Некоторые из лучших производителей обеспечивают разницу в толщине между любыми двумя точками нити в пределах +-20 мкм, а некоторые из худших производителей допускают отклонения до +-100 мкм.

При 3D печати пластик подаётся в экструдер принтера с постоянной линейной скоростью, что приводит к изменению объёма пластика, выходящего из сопла в единицу времени. При наилучших условиях мы наблюдаем изменение объёма расплавленного пластика примерно на 1%. При наихудших условиях изменение может составить более 10%.

Когда экструдер 3D принтера получает на 10% больше пластика, он просто выталкивает его и продолжает работать. Однако, если нить достаточно сильно отличается от идеальной, это может привести к видимым дефектам на печати, а, в худшем случае, к сбою печати из-за избыточного или недостаточного выдавливания пластика.

Для устранения этой проблемы используют управление скоростью печати в зависимости от текущей толщины, либо объема нити.

                Таким образом, как для производства, так и для печати важное значение имеет возможность измерить толщины, а еще лучше, площади сечения нити.

 

Для реализации такого датчика использовал USB микроскоп с ПЗС матрицей 640x480. При этом погрешность измерения датчика составила порядка 3 мкм.

                Доработка такого микроскопа сводится к сверлению сквозного отверстия диаметром 3 мм в пластмассовой насадке и установке за ним относительно объектива белого экрана из бумаги.

 Несколько отверстий на фото сделаны в процессе экспериментов центрирования.

Несколько отверстий на фото сделаны в процессе экспериментов центрирования.

       Для более точного измерения толщины нитей диаметром 2. 85 мм и 1.75 мм можно сделать два сквозных отверстия диаметрами 3 мм и 2 мм, либо использовать для каждой нити свою насадку.  

В результате получаем вот такое устройство:

В результате получаем вот такое устройство датчика толщины нити.
В результате получаем вот такое устройство датчика толщины нити.

 Для измерения толщины нити написал программу на основе OpenCV:

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
    VideoCapture cap;
    int camId = 0;    long m = 80;
    cap.open(camId);   if (!cap.isOpened()) { cout << "Camera not found at " << camId;     return -1; }
    long w = cap.get(CAP_PROP_FRAME_WIDTH);long h = cap.get(CAP_PROP_FRAME_HEIGHT);long fps = cap.get(CAP_PROP_FPS);
    printf("%dx%d,fps=%dn", w, h, fps);
    long rows = 0;//Количество строк 
    long cols = 0;//Количество столбцов 
    int* pсl;  //граница нити слева
    int* pсr;  //граница нити справа
    int* hz; //гистограмма
    Mat frame;  Mat frame1;  
    long r; long c;//Текущий номер строки. 
    long c_beg; long c_end;  //начальный и конечный столбец расположения нити.
   //-------------------------- 
     while (true) {
        bool grabSuccess = cap.read(frame);
        if (grabSuccess == false) {printf("Erro to grab a frame"); return 1; }
        imshow("frame", frame); 
        cvtColor(frame, frame1, COLOR_RGB2GRAY);
        if (rows == 0) {
            rows = frame1.rows ; cols = frame1.cols;  c_beg = 0; c_end=cols;
            pсl = (int*)malloc(rows * sizeof(int));  
            pсr = (int*)malloc(rows * sizeof(int));  
            hz = (int*)malloc(cols * sizeof(int));  
        }
//--------
            c = 0; while (cols > c)hz[c++] = 0;
           int* pxl = pсl;  int* pxr = pсr;
           for (r = 0; r <rows; r++)  {
               uchar* e = frame1.ptr<uchar>(r);         //указатель на строку
               uchar* p = e;
               *pxr = 0;  *pxl = 0;  c = 0; while (cols > c++) {
               if (*p<m) *p = 0; else *p = 255; 
               if (*pxl == 0) { if (*p == 0)*pxl= c;}  //левый край
               else { if (*p == 0) { int z = *pxl; if (z) { while (c > z) e[z++] = 0; *pxr = c; } } }
               *p++;   }            //Обходим все столбцы: 
               hz[*pxr - *pxl]++;
               pxr++; pxl++;
            }                               //Обходим все строки
        imshow("frame1", frame1); 
//--------
        long s = 0;   c = 0; while (cols > c) { long z = hz[c]; if (z > 1) { s += z; printf("%d(%d);", c, z); } c++; }
        printf("s=%dn",s);
 //--------------------------
        if (waitKey(10) == 27) { cout << "quit by esc";  break; }
     }
   free(hz);  free(pсl); free(pсr);
   return 0;
}

 Результат работы датчика:

Измерение толщины провода диаметром 280 мкм.

Измерение толщины провода диаметром 280 мкм.
Измерение толщины металлического стержня диаметром 2.5 мм. Слева отображается распределение толщины нити в пикселях по длине кадра(480 пиксель).

Измерение толщины металлического стержня диаметром 2.5 мм. Слева отображается распределение толщины нити в пикселях по длине кадра(480 пиксель).

Например: 437(2);439(11);440(118);441(244);442(96);443(8)

437- толщина нити , (2) – два значения в кадре.

На основе такого датчика легко построить систему измерения сечения нити путем установки нескольких датчиков под различными углами обзора нити.

Кроме того, датчик можно использовать для обнаружения обрыва нити.

 

Автор: nikolz

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js