Оглавление:

Счетчик нити для интеллектуального 3D-принтера: 5 шагов (с изображениями)
Счетчик нити для интеллектуального 3D-принтера: 5 шагов (с изображениями)

Видео: Счетчик нити для интеллектуального 3D-принтера: 5 шагов (с изображениями)

Видео: Счетчик нити для интеллектуального 3D-принтера: 5 шагов (с изображениями)
Видео: ТЕХНИКА БЕЗОПАСНОСТИ. Вид Грубейшего Нарушения ТРЕБОВАНИЙ ТБ при работе на СТАНКАХ. 2024, Ноябрь
Anonim
Умный счетчик нити для 3D-принтера
Умный счетчик нити для 3D-принтера

Зачем считать нити накала? Несколько причин:

Для успешной печати требуется правильно откалиброванный экструдер: когда gcode указывает экструдеру переместить нить на 2 мм, она должна переместиться ровно на 2 мм. Плохие вещи случаются, если он чрезмерно или недостаточно выдавливается. Хорошо откалиброванный счетчик может сохранить работоспособность экструдера

Слайсеры приблизительно определяют, сколько всего филамента займет данный отпечаток (как по длине, так и по весу), и я хотел бы проверить эти значения

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

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

Это круто

Я был вдохновлен этим руководством, в котором старая мышь PS / 2 использовалась в качестве счетчика нитей для 3D-принтера. Он не только добавил полезную функцию к 3D-принтеру, но и изменил назначение старого устройства, которое в противном случае оказалось бы на свалке. Но этот проект был построен на интерфейсе мыши PS / 2, который казался излишне громоздким. Так что я воспользовался этим как возможностью узнать об единственном важном компоненте: энкодере.

Запасы

Поворотный энкодер

Плата для разработчиков на базе ESP32

I2C OLED-дисплей (особенно круто смотрится двухцветный блок)

Маленькая кнопка мгновенного действия

Подшипник 608ZZ без смазки

Два уплотнительных кольца из хозяйственного магазина (внутренний диаметр ~ 33 мм x диаметр профиля ~ 1,5 мм - см. Комментарии)

Два самореза 2,5 мм для корпуса

Два 4-миллиметровых винта, гайки и шайбы для крепления кронштейна к принтеру

Связка проводов

3D-принтер и немного нити

Шаг 1. Выберите поворотный энкодер

Выберите поворотный энкодер
Выберите поворотный энкодер
Выберите поворотный энкодер
Выберите поворотный энкодер

Датчики вращения преобразуют вращательное движение в электрические импульсы. Все мыши старой школы использовали их для измерения движения катящегося шарика, а более современные (ха-ха) оптические мыши по-прежнему использовали их для колеса прокрутки, которое я лежал и использовал для первоначальных экспериментов. К сожалению, у меня не было очевидных точек монтирования, и его разрешение было плохим.

Если это стоит делать, стоит переусердствовать. Поэтому я купил большой удобный энкодер с частотой 360 импульсов на оборот и построил на нем свой проект. Я выбрал инкрементальный оптический поворотный энкодер Signswise, тип LPD3806-360BM-G5-24C. Но подойдет любой приличный кодировщик.

Шаг 2: Добавьте шкив и натяжной ролик

Добавьте шкив и натяжной ролик
Добавьте шкив и натяжной ролик

Линейное движение нити преобразуется шкивом во вращательное движение энкодера. И нить прижимается к шкиву натяжным роликом.

Шкив имеет две канавки, каждая из которых удерживает растянутое уплотнительное кольцо, поэтому нет проскальзывания, На холостом ходу имеется единственная V-образная канавка, которая удерживает нить по центру шкива энкодера. Он установлен на подшипник 608ZZ, который я лежал рядом, и он установлен на спиральной пружине, напечатанной прямо в основной части моего проекта. (Файлы STL прилагаются ниже.)

Это потребовало некоторых проб и ошибок, чтобы добиться правильного результата, но мой дизайн должен учитывать различные углы и радиусы катушки, позволяя нити разматываться с любой части катушки, от начала до конца отпечатка. А печатная пружина позволяет легко вставлять или выдвигать нить при замене катушек.

Шаг 3. Кодирование

Image
Image

Для простого подсчета нити подойдет любая плата разработчика с двумя цифровыми входами. Выбранный мной энкодер имеет четыре контакта: Vcc, заземление и два контакта энкодера. Вот действительно хорошая статья, в которой объясняется, как работают поворотные энкодеры и как их взаимодействовать с Arduino. (Также: эта статья о 3-контактных энкодерах.)

Базовый подсчет прост: два входа - настроены на внутреннее подтягивание, поэтому внешние резисторы не нужно припаивать к Vcc - и одно прерывание. Я также добавил кнопку обнуления / сброса, требующую еще одного входа и прерывания:

void setUpPins () {

pinMode (ENCODER_PIN_1, INPUT_PULLUP); pinMode (ENCODER_PIN_2, INPUT_PULLUP); pinMode (ZERO_BTN_PIN, INPUT_PULLUP); attachInterrupt (ENCODER_PIN_1, encoderPinDidChange, ИЗМЕНИТЬ); attachInterrupt (ZERO_BTN_PIN, zeroButtonPressed, CHANGE); } void IRAM_ATTR encoderPinDidChange () {if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) {позиция + = 1; } else {позиция - = 1; }} void IRAM_ATTR zeroButtonPressed () {// обрабатываем ноль и сбрасываем}

Но мне хотелось большего, чем просто тупой счетчик. С ESP32 (или ESP8266) и его встроенным Wi-Fi я действительно могу что-то делать с данными, которые я собираю. Используя простой код тайм-аута (объясненный ниже), я могу определить, когда печать начинается и заканчивается, и отправлять эти события в качестве уведомлений на свой телефон. В будущем я могу добавить датчик биения и уведомлять себя (и приостанавливать работу принтера), когда потребуется мое внимание.

Полный код находится на Github.

Несколько замечаний по коду:

Чтобы настроить это под вашу сборку, все, что вам нужно, это разрешение (encoderPPR) - в импульсах на оборот, что обычно вдвое превышает заявленную спецификацию - и радиус шкива (wheelRadius). Эти значения, а также ssid и пароль вашего Wi-Fi и определенные контакты, подключенные к кнопке, кодировщику и экрану OLED, все входят в config.h

Кнопка нуля также выполняет функцию сброса - удерживайте ее, чтобы перезагрузить плату, что полезно для отладки

Прерывания мощные, иногда даже слишком мощные. Однократное нажатие кнопки нуля могло привести к вызову функции zeroButtonPressed () 10-20 раз, поэтому я добавил некоторую логику противодействия. Моему оптическому кодировщику это было не нужно, но YMMV

В то время как прерывания обрабатывают входные данные асинхронно, процедура loop () занимается бухгалтерским учетом. EnhancedState - перечисление, которое может подаваться, отводиться или останавливаться - обновляется при изменении положения кодировщика. Затем таймауты определяют, когда принтер начал и закончил печать. Но сложность заключается в том, что 3D-принтеры часто запускают и останавливают движение, поэтому лучше всего было определить, что событие «печать завершено» остается постоянно остановленным в течение как минимум 5 секунд. Любое движение запускает второй таймер, который определяет событие «печать началась», только если событие «печать завершена» не происходит в течение 15 секунд. На практике это работает плавно

Таким образом, основной код loop () может выполняться без перегрузок, а код устранения ошибок выполняется в цикле задач RTOS. Точно так же HTTP-запросы на отправку уведомлений являются синхронными и, следовательно, фоновыми. Таким образом, анимация проходит плавно, и счет никогда не прекращается

В моем примере есть куча дополнительного кода, чтобы (A) установить и поддерживать сетевое соединение с WiFi и mDNS, (B) получить время с сервера NTC, чтобы я мог поставить отметку времени для своих начальных и конечных уведомлений и отобразить бодрые часы на моем OLED, а (C) обрабатывает обновления OTA, поэтому мне не нужно физически подключать мою плату к моему Mac для обновления кода. На данный момент это все в одном монолитном файле C ++ только потому, что я не нашел времени, чтобы лучше его организовать

Я использовал замечательное (и бесплатное) приложение Prowl для iOS, чтобы отправлять push-уведомления на свой телефон, используя только методы HTTP Get

Чтобы разработать код и прошить плату, я использовал впечатляющую платформу PlatformIO, работающую на Visual Studio Code, обе бесплатные

Для своего проекта я использовал следующие библиотеки: u8g2 от Oliver, elapsedMillis от Paul Stoffregen и HTTPClient от Markus Sattler, который поставляется с платформой Espressif ESP32. Все остальное поставляется либо с библиотекой Arduino, либо с платформой ESP32 в PlatformIO

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

Шаг 4: Подключение

Проводка
Проводка

Я спроектировал это так, чтобы проводка была чрезвычайно простой, в основном, чтобы мой корпус мог быть маленьким, но также чтобы отладка была прямой. Обратите внимание на тесноту моей коробочки.:)

Первым требованием было напряжение питания 5 В для моего энкодера. Из различных плат для разработки ESP32, которые у меня были в моем тайнике, только несколько обеспечивали истинное напряжение 5 В на выводе Vcc при питании от USB. (Остальные измеряли 4,5–4,8 В, что, если вы не умеете считать, ниже 5 В.) Я использовал плату Wemos Lolin32.

Затем идут два сигнальных контакта поворотного энкодера. Поскольку я использую прерывания, основная проблема заключается в том, что используемые мной контакты не мешают ничему. В документах ESP32 указано, что ADC2 нельзя использовать одновременно с WiFi, поэтому, к сожалению, я не могу использовать ни один из контактов ADC2 GPIO: 0, 2, 4, 12, 13, 14, 15, 25, 26 или 27. Я выбрал 16 и 17.

Совет от профессионала: если после того, как все это собрано вместе, ваш кодировщик, кажется, считает в обратном порядке, вы можете просто поменять местами два назначения контактов в config.h.

Наконец, подсоедините провод заземления поворотного энкодера к… барабанной дроби… контакту заземления.

Затем кнопка обнуления / сброса подключается между землей и другим свободным контактом (я выбрал GPIO 18).

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

Наконец, для OLED, если он еще не подключен к вашей плате, нужно всего четыре контакта: 3V3, земля, часы i2c и данные i2c. На моей плате разработчика часы и данные равны 22 и 21 соответственно.

Шаг 5: Распечатайте детали

Распечатайте детали
Распечатайте детали

Я разработал семь частей для этой сборки:

Шкив, который крепится непосредственно на валу энкодера

Ролик, который надевается на подшипник 608ZZ (снимите кожухи и обезжирьте с помощью WD40, чтобы он свободно вращался)

Держатель, на котором крепятся два колеса и энкодер - обратите внимание на спиральную пружину для натяжного ролика

Кронштейн для стабилизации держателя. На фотографии этого шага показано, как кронштейн прикрепляется к держателю

Корпус (внизу) для моей платы разработчика ESP32, с местом для USB-кабеля сбоку и еще одним сверху для разъема, который я добавил к своим проводам кодировщика. Он разработан для Wemos Lolin32, поэтому вам, возможно, придется немного изменить этот дизайн, чтобы он соответствовал другой плате

Корпус (вверху) для OLED-экрана, еще одна спираль для кнопки обнуления / сброса

Держатель кнопок, специально подобранный для моего крошечного переключателя, предназначенный для размещения между двумя полками внутри нижнего корпуса. Паяльником «приклеил» переключатель к держателю; см. фото на предыдущем шаге

Все предназначено для печати без опор. Все, что вам нужно - это обычный PLA любого цвета.

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

Рекомендуемые: