Измерение и контроль печати 3D принтера с помощью Arduino
Если вы часто используете 3D-принтер для своих проектов, тогда вы можете столкнуться с проблемами расчета веса и длины материала. Если это так, то вас может заинтересовать этот проект, используя Arduino. Моя цель с этим проектом состояла в том, чтобы иметь возможность динамически знать состояние нити накала во время работы 3D-принтера. Я разработал этот проект, смешав дизайн, 3D-печать, электронику, программное обеспечение и, конечно же, Arduino. Я использовал Arduino UNO rev 3, но нетрудно адаптировать проект к другой модели или к совместимой с Arduino платой.
Как отслеживать использование волокна?
Ответ выглядит относительно легко: путем вычисления непрерывной вариации веса . Следуя весовому подходу, также будет легко построить платформу мониторинга; достаточно будет использовать датчик веса . К сожалению, существует ряд проблем обеспечения, которые делают это решение более сложным. Большинство 3D-принтеров зависят от экструдера, тянущего нити. Это создает ложные показания на датчике веса.
Для решения этой проблемы я придерживался противоположного подхода , то есть проблема должна стать решением. Всякий раз, когда экструдер вытягивает нить, он производит ложное значение при чтении изменения веса. Хотя это изменение существенно отличается по сравнению с изменениями, происходящими при нормальных условиях, т. Е. При отсутствии активности экструдера. Эта разница в изменении веса при разных обстоятельствах была ключевой, помогая мне найти правильное решение и иметь возможность кодировать эффективный и надежный алгоритм.
Этот алгоритм имеет три ключевых момента для вычисления веса:
1. Когда экструдер не натягивает нить, происходит простое изменение шума датчика. Это можно игнорировать.
2. Во время первоначального вытягивания из экструдера во время начала экструзии (который является моментом со временем, составляющим менее секунды), датчик веса обнаруживает приблизительное изменение в 50 г или более в зависимости от силы экструдера. Это наш первый триггер .
3. Когда датчик обнаруживает значительное изменение веса (например, 20-30 г), мы обнаруживаем конец активности , или, другими словами, экструдер прекратил подачу.Это второй триггер . В настоящий момент мы не можем принять новое измерение веса и рассчитать точное количество материала, потребляемого с высокой точностью (менее грамма).
Переходы между весом и длиной и наоборот - последняя легкая работа. Для этого я искал ссылки в Интернете, чтобы узнать конкретный вес каждого из трех 3D-материалов для печати (PLA, ABS и т. Д.).
Базовая конструкция фокусируется на двух проблемах, измерении веса и простом повороте рулона нити.
Для этого нам нужен шкала со специальной опорой, где катушка нити может вращаться свободно и без трения.
Во-первых, я начал с изменения дозатора нити 3D-принтера .
Как показано на рисунках, новая конструкция оснащена диспенсером, сидящим на нижней базе с датчиком веса в середине, выступающим в качестве опоры. Датчик может поддерживать вес до 5 кг. Он относительно гибкий, хотя и не слабый, с нанесенным на него 1-2 кг печатной нити.
Конструктивная модификация состояла из репликации исходного основания диспенсера при добавлении отверстий для фиксации датчика во вторую нижнюю плоскость.
Электроника и электропроводка
Можно подключить Arduino к ПК или мобильному устройству, контролируя использование нити 3D-принтера через последовательное соединение USB и полезно по нескольким причинам, включая возможность создания журнальных файлов наших рабочих мест.Несмотря на эту полезность, она не всегда может быть эффективной. В некоторых случаях лучше иметь меньше информации, но в состоянии обновлять эту информацию в режиме реального времени. Чтобы облегчить это, я включил алфавитно-цифровой ЖК-дисплей. Я использовал LCD Alpha. Для тех, кого это интересует, я написал об этом проекте на ElectroSchemactics некоторое время назад. Не стесняйтесь возвращаться и смотреть.
Примечание: библиотека lcd с расширением ldd Arduino, распространяемая в сети, больше не работает с последней версией Arduino IDE (начиная с версии 1.6). Замените библиотеку библиотекой SHIFLcd, прикрепленной к этой статье, чтобы ЖК-дисплей Alpha работал правильно
Датчик веса (макс. 5 кг) продается вместе с усилителем сигнала, поэтому он может быть напрямую подключен к контактам Arduino в соответствии с инструкциями библиотеки HQ711 Arduino. Остальные три контакта должны быть зарезервированы для ЖК-дисплея, подключенного через SPI через последовательный порт для параллельного сдвига.
Из-за малой мощности, требуемой сенсорным усилителем, одна плата Arduino может одновременно подключать больше плат мониторинга, в зависимости от доступных контактов на плате.
Сенсорный усилитель представляет собой небольшую плату для разломов на базе HX711 IC, аналого-цифрового преобразователя, предназначенного для высокоточных весовых датчиков, используемых во многих промышленных приложениях (см. Техническое описание HX711). Преимуществом использования этого компонента является наличие библиотеки Arduino - см. Ниже источник -
Я включил пару кнопок для установки и сброса параметров при необходимости (например, после смены рулона) во время работы монитора. Светодиод мигает каждым показанием, сигнализирующим о регулярном мониторинге.
Программное обеспечение
Качаем версию 3D-монитора Filament Monitor. Здесь мы хотим только взглянуть на наиболее важные части источников.
Как мы уже упоминали выше, наиболее сложной частью этого проекта является математика.Первая серия предположений может быть найдена в файле filament.h, включая файл, в котором определены ограничения среды. В текущей версии я установил только материалы PLA и ABS, но прекрасно включить больше параметров для профилирования других типов нитей 3D-принтера. Для каждого материала, который я установил, - жестко закодированного в источниках - определения веса и размера, которые можно легко найти в сети.
* Filament material parameters
*
* PLA
* Density: 1.25 g/cm^3
* Volume: 0.80 cm^3/g or 800 cm^3/kg
* 1.75 mm filament length for 1 kg spool: ~ 330 meters
* 3.00 mm filament length for 1 kg spool: ~ 110 meters
*
* ABS
* Density: 1.04 g/cm^3
* Volume: 0.96 cm^3/g or 960 cm^3/kg
* 1.75 mm filament length for 1 kg spool: ~ 400 meters
* 3.00 mm filament length for 1 kg spool: ~ 130 meters
As the different measuring conditions are triggered by the weight-per-time we read the algorithm is a state machine where the states are defined as follows:
#define SYS_READY "Ready" // System ready
#define SYS_PRINTING "Print" // Filament in use #define SYS_LOAD "Load" // Roll loaded #define SYS_STARTED "Started" // Application started // Status codes #define STAT_NONE 0 #define STAT_READY 1 #define STAT_PRINTING 2 #define STAT_LOAD 3
Существует два типа событий, изменяющих текущее состояние машины: ручные кнопки и считывание веса. Постоянное значение - это частота , которую считывает датчик. Это упростило разработку основного цикла, который предполагает различное поведение в зависимости от текущего состояния:
Код
// Check the current status of the system
switch(statID) {
case STAT_READY:
// Set the initial weight to calculate the consumed material during a session
initialWeight = lastRead;
prevRead = lastRead;
showLoad();
break;
case STAT_LOAD:
showStat();
break;
case STAT_PRINTING:
// Avoid fluctuations due the extruder tension
if( (lastRead-prevRead) >= MIN_EXTRUDER_TENSION) {
// Restore the previous reading
lastRead = prevRead;
}
showStat();
break;
default:
showInfo();
break;
} // switch