Съдържание:

Интелигентен брояч на нишки за 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 мм ID x ~ 1,5 мм диаметър на профила - вижте коментарите)

Два 2,5 мм самонарезни винта за корпуса

Два 4 мм винта, гайки и шайби за закрепване на стойката към вашия принтер

Куп жици

3D принтер и малко нажежаема жичка

Стъпка 1: Изберете въртящ се енкодер

Изберете въртящ се енкодер
Изберете въртящ се енкодер
Изберете въртящ се енкодер
Изберете въртящ се енкодер

Ротационните енкодери преобразуват въртеливото движение в електрически импулси. Всички мишки от старата школа ги използваха за измерване на движението на търкалящата се топка, а по-модерните (ха ха) оптични мишки все още ги използваха за колелото за превъртане, което бях сложил наоколо и използвах за първоначален експеримент. За съжаление, моят не предлагаше очевидни точки на монтиране и резолюцията му беше лоша.

Ако си заслужава да се направи, си струва да се прекалява. Затова си купих голям, приятелски, енкодер с 360 импулса на оборот и изградих моя проект около него. Този, който избрах, беше Signswise Incremental Optical Rotary Encoder, тип 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, CHANGE); 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) и вградения му WiFi, всъщност мога да направя нещо с данните, които събирам. Използвайки прост код за изчакване (обяснен по -долу), мога да определя кога печатът започва и приключва и да изпращам тези събития като известия на телефона си. В бъдеще може да добавя сензор за изчерпване и да се уведомя (и да поставя принтера си на пауза), когато се наложи вниманието ми.

Пълният код е на Github.

Няколко бележки по кода:

За да персонализирате това за вашата конструкция, всичко, от което се нуждаете, е разделителната способност (encoderPPR) - в импулси на оборот, която обикновено е два пъти по -голяма от посочената спецификация - и радиусът на ролката (wheelRadius). Тези стойности, плюс ssid и паролата на вашия wifi и специфичните щифтове, свързани с бутона, кодера и OLED екрана, всички влизат в config.h

Бутонът за нула също се удвоява като нулиране - задръжте го, за да рестартирате платката, което е полезно за отстраняване на грешки

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

Докато прекъсванията се грижат за входовете асинхронно, процедурата loop () обработва счетоводството. EncoderState - изброяване, което може да се подава, прибира или спира - се актуализира с промяната на позицията на енкодера. След това изчакванията определят кога принтерът е започнал и приключи печатането. Но най -сложната част е, че 3D принтерите често стартират и спират движението, така че най -доброто беше да се определи събитието „приключено отпечатване“, което остава непрекъснато спряно за поне 5 секунди. Всяко движение задейства втори таймер, който дефинира събитието „отпечатано стартиране“, само ако не се случи събитие „приключено отпечатване“за период от 15 секунди. На практика това работи плувно

Така кодът на основния цикъл () може да работи без натоварване, кодът за деблокиране се изпълнява в цикъл на задачи на RTOS. По същия начин http заявките за изпращане на известия са синхронни и следователно фон. Така анимациите вървят гладко и броенето никога не спира

В моя пример има куп допълнителен код за (А) установяване и поддържане на мрежова връзка с WiFi и mDNS, (Б) извличане на времето от 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: Окабеляване

Електрически инсталации
Електрически инсталации

Проектирах това, така че окабеляването да е много просто, най-вече за да може моят корпус да е малък, но също така и отстраняването на грешки да е направо. Обърнете внимание на тесните условия в моята малка кутия.:)

Първото изискване беше 5V захранващото напрежение на моя въртящ се енкодер. От различните платки за разработка на ESP32, които имах в скривалището си, само няколко доставяха истински 5V на Vcc пина, когато се захранват от USB. (Другите измерваха 4.5-4.8V, което в случай, че математиката ви е лоша, е по-ниска от 5V.) Дъската, която използвах, беше 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 dev платка, с място за USB кабела отстрани и друго отгоре за конектора, който добавих към кабелите на енкодера. Този е проектиран да пасва на Wemos Lolin32, така че може да се наложи да промените този дизайн малко, за да пасне на различна дъска

Корпусът (отгоре) за задържане на OLED екрана, друга спирала за бутона за нула / нулиране

Поставка за копчета, персонализирана за малкия превключвател, който имах, проектиран да лежи между двата рафта в долната част на кутията. Използвах поялник, за да "залепя" превключвателя към държача; вижте предишната стъпка за снимка

Всичко е проектирано за печат без опори. Нормалната PLA във вашия цвят е всичко, от което се нуждаете.

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

Препоръчано: