สารบัญ:

Smart 3D Printer Filament Counter: 5 ขั้นตอน (พร้อมรูปภาพ)
Smart 3D Printer Filament Counter: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Smart 3D Printer Filament Counter: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Smart 3D Printer Filament Counter: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Some fun 3d printing with PET filament #3dprinting #recyclepastic #filament #anycubickobraneo 2024, มิถุนายน
Anonim
ตัวนับเส้นใยเครื่องพิมพ์ 3D อัจฉริยะ
ตัวนับเส้นใยเครื่องพิมพ์ 3D อัจฉริยะ

จะไปยุ่งกับการนับเส้นใยทำไม? เหตุผลบางประการ:

งานพิมพ์ที่ประสบความสำเร็จต้องใช้เครื่องอัดรีดที่สอบเทียบอย่างถูกต้อง: เมื่อ gcode บอกให้เครื่องอัดรีดเคลื่อนเส้นใย 2 มม. ก็จะต้องเคลื่อนที่ให้ได้ 2 มม. พอดี สิ่งเลวร้ายเกิดขึ้นได้หากมันอัดมากเกินไปหรือน้อยเกินไป เคาน์เตอร์ที่สอบเทียบมาอย่างดีสามารถทำให้เครื่องอัดรีดมีความซื่อสัตย์

ตัวแบ่งส่วนข้อมูลจะประมาณว่าจะใช้เส้นใยทั้งหมดเท่าใดในการพิมพ์ (ทั้งความยาวและน้ำหนัก) และฉันต้องการตรวจสอบค่าเหล่านั้น

การวัดการเคลื่อนที่ของไส้หลอดยังช่วยให้รู้ว่าการพิมพ์เริ่มต้นขึ้นและหยุดลงเมื่อใด

ฉันต้องการบางสิ่งบางอย่างเพื่อครอบคลุมพื้นที่ที่เหลือโดยการลบโลโก้ยักษ์ที่น่าเกลียดที่ด้านหน้าเครื่องพิมพ์ของฉัน

มันเย็น

ฉันได้รับแรงบันดาลใจจากคำแนะนำนี้ ซึ่งนำเมาส์ PS/2 ตัวเก่ามาใช้เป็นตัวนับเส้นใยสำหรับเครื่องพิมพ์ 3 มิติ ไม่เพียงแต่เพิ่มคุณสมบัติที่มีประโยชน์ให้กับเครื่องพิมพ์ 3 มิติเท่านั้น แต่ยังนำอุปกรณ์เก่ากลับมาใช้ใหม่ซึ่งอาจจบลงด้วยการฝังกลบ แต่โปรเจ็กต์นั้นสร้างขึ้นจากอินเทอร์เฟซ PS/2 ของเมาส์ ซึ่งดูยุ่งยากโดยไม่จำเป็น ดังนั้นฉันจึงใช้โอกาสนี้เพื่อเรียนรู้เกี่ยวกับส่วนประกอบที่สำคัญเพียงอย่างเดียว นั่นคือ ตัวเข้ารหัสแบบหมุน

เสบียง

ตัวเข้ารหัสแบบหมุน

บอร์ดพัฒนาตาม ESP32

จอแสดงผล I2C OLED (หน่วยสองสีดูเท่เป็นพิเศษ)

ปุ่มกดชั่วขณะเล็ก ๆ

ตลับลูกปืน 608ZZ ขจัดคราบไขมัน

โอริงสองอันจากร้านฮาร์ดแวร์ (~ 33 มม. ID x ~ 1.5 มม. เส้นผ่านศูนย์กลางโปรไฟล์ - ดูความคิดเห็น)

สกรูเกลียวปล่อย 2.5 มม. สองตัวสำหรับกล่องหุ้ม

สกรู น็อต และแหวนรองขนาด 4 มม. 2 ตัวเพื่อยึดตัวยึดกับเครื่องพิมพ์ของคุณ

มัดสายไฟ

เครื่องพิมพ์ 3 มิติและเส้นใยบางส่วน

ขั้นตอนที่ 1: เลือก Rotary Encoder

เลือกตัวเข้ารหัสแบบหมุน
เลือกตัวเข้ารหัสแบบหมุน
เลือกตัวเข้ารหัสแบบหมุน
เลือกตัวเข้ารหัสแบบหมุน

เครื่องเข้ารหัสแบบโรตารี่แปลการเคลื่อนที่แบบหมุนเป็นพัลส์ไฟฟ้า หนูในวัยเรียนทั้งหมดใช้พวกมันเพื่อวัดการเคลื่อนที่ของลูกบอลกลิ้ง และหนูออปติคัลที่ทันสมัยกว่า (ฮ่า ฮ่า) ยังคงใช้สำหรับล้อเลื่อน ซึ่งเป็นสิ่งที่ฉันวางไว้รอบๆ และใช้สำหรับการทดลองครั้งแรก น่าเสียดายที่ของฉันไม่มีจุดเมานต์ที่ชัดเจนและความละเอียดของมันไม่ดี

ถ้ามันคุ้มค่าที่จะทำ มันก็คุ้มที่จะทำมากเกินไป ดังนั้นฉันจึงซื้อตัวเข้ารหัส 360 พัลส์ต่อการปฏิวัติขนาดใหญ่ที่เป็นมิตรและสร้างโครงการของฉันขึ้นมา ตัวเลือกที่ฉันเลือกคือ Signswise Incremental Optical Rotary Encoder ประเภท LPD3806-360BM-G5-24C แต่ตัวเข้ารหัสที่เหมาะสมจะทำ

ขั้นตอนที่ 2: เพิ่มรอกและคนขี้เกียจ

เพิ่มรอกและคนขี้เกียจ
เพิ่มรอกและคนขี้เกียจ

การเคลื่อนที่เชิงเส้นของไส้หลอดแปลเป็นการเคลื่อนที่แบบหมุนของตัวเข้ารหัสด้วยรอก และไส้หลอดนั้นถูกยึดไว้กับรอกโดยคนเกียจคร้าน

รอกมี 2 ร่อง แต่ละร่องมีโอริงที่ยืดออกเพื่อไม่ให้ลื่นไถล

คนขี้เกียจมีร่องวีเดียวเพื่อให้เส้นใยมีศูนย์กลางอยู่ที่รอกตัวเข้ารหัส มันอยู่บนลูกปืน 608ZZ ที่ฉันนอนอยู่รอบๆ และนั่นก็ติดอยู่บนสปริงเกลียวที่พิมพ์อยู่ในส่วนหลักของโปรเจ็กต์ของฉัน (ไฟล์ STL ที่แนบมาด้านล่าง)

การดำเนินการนี้ต้องใช้การลองผิดลองถูกบ้างจึงจะถูกต้อง แต่การออกแบบของฉันควรรองรับมุมต่างๆ และรัศมีของหลอดด้าย ทำให้เส้นใยคลายตัวจากส่วนใดๆ ของหลอดด้าย ตั้งแต่ต้นจนจบงานพิมพ์ และสปริงที่พิมพ์ออกมาทำให้ง่ายต่อการใส่หรือดึงไส้หลอดออกเมื่อเปลี่ยนหลอด

ขั้นตอนที่ 3: การเข้ารหัส

Image
Image

สำหรับการนับฟิลาเมนต์เพียงอย่างเดียว บอร์ด dev ใดๆ ที่มีอินพุตดิจิตอลสองตัวจะทำได้ ตัวเข้ารหัสที่ฉันเลือกมีสี่พิน: Vcc กราวด์ และสองพินตัวเข้ารหัส นี่เป็นบทความที่ดีมากที่อธิบายวิธีการทำงานของตัวเข้ารหัสแบบโรตารี่และวิธีเชื่อมต่อกับ Arduino (ด้วย: บทความเกี่ยวกับตัวเข้ารหัส 3 พินนี้)

การนับพื้นฐานนั้นง่าย: สองอินพุต - ตั้งค่าให้ดึงขึ้นภายใน ดังนั้นตัวต้านทานภายนอกจึงไม่จำเป็นต้องบัดกรีเป็น Vcc - และหนึ่งอินเทอร์รัปต์ ฉันยังเพิ่มปุ่มศูนย์/รีเซ็ต โดยต้องการอินพุตและขัดจังหวะเพิ่มอีกหนึ่งครั้ง:

เป็นโมฆะ setUpPins () {

โหมดพิน (ENCODER_PIN_1, INPUT_PULLUP); โหมดพิน (ENCODER_PIN_2, INPUT_PULLUP); โหมดพิน (ZERO_BTN_PIN, INPUT_PULLUP); AttachInterrupt(ENCODER_PIN_1, encoderPinDidChange, CHANGE); AttachInterrupt(ZERO_BTN_PIN, zeroButtonPressed, CHANGE); } โมฆะ IRAM_ATTR encoderPinDidChange () { if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) { ตำแหน่ง += 1; } อื่น ๆ { ตำแหน่ง -= 1; } } เป็นโมฆะ IRAM_ATTR zeroButtonPressed () { // จัดการศูนย์ & รีเซ็ต }

แต่ฉันต้องการมากกว่าแค่เคาน์เตอร์โง่ๆ ด้วย ESP32 (หรือ ESP8266) และ WiFi ในตัว ฉันสามารถทำบางสิ่งกับข้อมูลที่ฉันกำลังรวบรวมได้ การใช้รหัสหมดเวลาอย่างง่าย (อธิบายไว้ด้านล่าง) ฉันสามารถระบุได้ว่าการพิมพ์เริ่มต้นและสิ้นสุดเมื่อใด และส่งกิจกรรมเหล่านั้นเป็นการแจ้งเตือนไปยังโทรศัพท์ของฉัน ในอนาคต ฉันอาจเพิ่มเซ็นเซอร์การหมดพลังงานและแจ้งเตือนตัวเอง (และหยุดเครื่องพิมพ์ชั่วคราว) เมื่อฉันต้องการความสนใจ

รหัสเต็มอยู่บน Github

หมายเหตุบางประการเกี่ยวกับรหัส:

ในการปรับแต่งสิ่งนี้ให้เข้ากับงานสร้างของคุณ สิ่งที่คุณต้องมีคือความละเอียด (encoderPPR) - ในพัลส์ต่อรอบ ซึ่งโดยทั่วไปแล้วจะเป็นสองเท่าของข้อมูลจำเพาะที่ระบุไว้ - และรัศมีของรอก (wheelRadius) ค่าเหล่านี้ รวมทั้ง ssid และรหัสผ่านของ wifi ของคุณและหมุดเฉพาะที่เชื่อมต่อกับปุ่ม ตัวเข้ารหัส และหน้าจอ OLED ทั้งหมดอยู่ใน config.h

ปุ่มศูนย์ยังทำหน้าที่เป็นการรีเซ็ตเป็นสองเท่า - กดค้างไว้เพื่อรีบูตบอร์ด ซึ่งมีประโยชน์สำหรับการดีบัก

การขัดจังหวะนั้นทรงพลัง - บางครั้งก็ทรงพลังเกินไป การแตะปุ่มศูนย์เพียงครั้งเดียวอาจทำให้ฟังก์ชัน zeroButtonPressed() ถูกเรียก 10-20 ครั้ง ดังนั้นฉันจึงเพิ่มตรรกะในการดีบักซ์ ตัวเข้ารหัสแสงของฉันไม่ต้องการมัน แต่ YMMV

ในขณะที่การขัดจังหวะดูแลอินพุตแบบอะซิงโครนัส รูทีน loop() จะจัดการการทำบัญชี encoderState ซึ่งเป็น enum ที่สามารถป้อน หดกลับ หรือหยุดได้ ได้รับการอัปเดตด้วยการเปลี่ยนแปลงในตำแหน่งของตัวเข้ารหัส ระยะหมดเวลาจะกำหนดเมื่อเครื่องพิมพ์เริ่มต้นและสิ้นสุดการพิมพ์ แต่ส่วนที่ยากคือเครื่องพิมพ์ 3D มักจะเริ่มและหยุดการเคลื่อนไหว ดังนั้นสิ่งที่ดีที่สุดคือการกำหนดเหตุการณ์ "การพิมพ์เสร็จสิ้น" ให้หยุดอย่างต่อเนื่องเป็นเวลาอย่างน้อย 5 วินาที การเคลื่อนไหวใดๆ จะทริกเกอร์ตัวจับเวลาครั้งที่สองที่กำหนดเหตุการณ์ "เริ่มพิมพ์" ต่อเมื่อไม่มีเหตุการณ์ "การพิมพ์เสร็จสมบูรณ์" เกิดขึ้นในกรอบเวลา 15 วินาที ในทางปฏิบัติ มันใช้งานได้ดี

ดังนั้นโค้ดลูปหลัก () สามารถรันได้โดยไม่มีภาระผูกพัน โค้ดดีบักซ์จะทำงานในลูปงาน RTOS ในทำนองเดียวกัน คำขอ http ในการส่งการแจ้งเตือนจะเป็นแบบซิงโครนัสและดังนั้นจึงมีเบื้องหลัง ดังนั้นภาพเคลื่อนไหวจึงดำเนินไปอย่างราบรื่นและการนับไม่เคยหยุดนิ่ง

มีโค้ดเพิ่มเติมมากมายในตัวอย่างของฉันเพื่อ (A) สร้างและรักษาการเชื่อมต่อเครือข่ายด้วย WiFi และ mDNS (B) ดึงเวลาจากเซิร์ฟเวอร์ NTC เพื่อให้ฉันสามารถประทับเวลาเริ่มต้นและสิ้นสุดการแจ้งเตือนและแสดงนาฬิกาที่ร่าเริง บน OLED ของฉัน และ (C) จัดการการอัปเดต OTA ดังนั้นฉันจึงไม่ต้องเชื่อมต่อบอร์ดกับ Mac เพื่ออัปเดตโค้ด ในขณะนี้ ทั้งหมดอยู่ในไฟล์ C++ แบบเสาหินเพียงไฟล์เดียว เพราะฉันยังไม่ได้ใช้เวลาในการจัดระเบียบให้ดีกว่านี้

ฉันใช้แอพ Prowl iOS ที่ยอดเยี่ยม (และฟรี) เพื่อส่งการแจ้งเตือนแบบพุชไปยังโทรศัพท์ของฉันโดยไม่มีอะไรมากไปกว่าวิธี HTTP Get

ในการพัฒนาโค้ดและแฟลชบอร์ด ฉันใช้ PlatformIO อันน่าทึ่งที่ทำงานบน Visual Studio Code ซึ่งฟรีทั้งคู่

สำหรับโครงการของฉัน ฉันใช้ไลบรารีเหล่านี้: u8g2 โดย Oliver, elapsedMillis โดย Paul Stoffregen และ HTTPClient โดย Markus Sattler ซึ่งมาพร้อมกับแพลตฟอร์ม Espressif ESP32 อย่างอื่นจะมาพร้อมกับไลบรารี Arduino หรือแพลตฟอร์ม ESP32 ใน PlatformIO

สุดท้าย ฉันสร้างบิตแมปง่ายๆ หกรายการของรอกหลักของฉันในมุมต่างๆ กัน ดังนั้นฉันจึงสามารถแสดงแอนิเมชั่นวงล้อหมุนเล็กๆ น้อยๆ ที่เรียบร้อยบน OLED ด้านหลังเคาน์เตอร์ได้ มันเคลื่อนที่ไปในทิศทางที่เหมาะสมด้วยตัวเข้ารหัส แม้ว่าจะเร็วกว่ามากเพื่อให้ได้ผลลัพธ์ที่น่าทึ่งยิ่งขึ้น

ขั้นตอนที่ 4: การเดินสายไฟ

การเดินสายไฟ
การเดินสายไฟ

ฉันออกแบบสิ่งนี้เพื่อให้การเดินสายเป็นเรื่องง่าย ส่วนใหญ่แล้วกล่องหุ้มของฉันอาจมีขนาดเล็ก แต่การดีบักก็จะตรงไปตรงมา สังเกตสภาพคับแคบในกล่องเล็กๆ ของฉัน:)

ข้อกำหนดแรกคือแรงดันไฟฟ้า 5V ของตัวเข้ารหัสแบบหมุนของฉัน จากบอร์ด ESP32 dev ต่างๆ ที่ฉันมีอยู่ในที่เก็บสะสม มีเพียงไม่กี่ 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 บนกระดาน dev ของฉัน นาฬิกาและข้อมูลคือ 22 และ 21 ตามลำดับ

ขั้นตอนที่ 5: พิมพ์ชิ้นส่วน

พิมพ์ชิ้นส่วน
พิมพ์ชิ้นส่วน

ฉันออกแบบเจ็ดส่วนสำหรับงานสร้างนี้:

รอกซึ่งติดตั้งโดยตรงบนเพลาของตัวเข้ารหัสแบบหมุน

คนขี้เกียจซึ่งพอดีกับตลับลูกปืน 608ZZ (ถอดปลอกหุ้มและขจัดไขมันด้วย WD40 เพื่อให้หมุนได้อย่างอิสระ)

ที่ยึดซึ่งสอง weels และตัวเข้ารหัสติด - สังเกตสปริงเกลียวสำหรับคนขี้เกียจ

ตัวยึดเพื่อยึดที่ยึดให้มั่นคง ภาพถ่ายในขั้นตอนนี้แสดงให้เห็นว่าตัวยึดยึดติดกับตัวยึดอย่างไร

กล่องหุ้ม (ด้านล่าง) สำหรับยึดบอร์ด ESP32 dev ของฉัน โดยมีที่ว่างสำหรับสาย USB ที่ด้านข้างและอีกช่องหนึ่งอยู่ด้านบนสำหรับตัวเชื่อมต่อที่ฉันเพิ่มเข้ากับสายตัวเข้ารหัส อันนี้ออกแบบมาเพื่อให้พอดีกับ Wemos Lolin32 ดังนั้นคุณอาจต้องดัดแปลงการออกแบบนี้เล็กน้อยเพื่อให้พอดีกับบอร์ดอื่น

ตัวเครื่อง (ด้านบน) ไว้ยึดหน้าจอ OLED อีกเกลียวสำหรับปุ่มศูนย์ / รีเซ็ต

ที่ยึดปุ่มที่ปรับแต่งให้เหมาะกับสวิตช์ขนาดเล็กที่ฉันมี ออกแบบมาเพื่อวางพักระหว่างชั้นวางทั้งสองภายในกล่องหุ้มด้านล่าง ฉันใช้หัวแร้งเพื่อ "กาว" สวิตช์ไปที่ที่ยึด ดูขั้นตอนก่อนหน้าสำหรับภาพถ่าย

ทุกอย่างถูกออกแบบให้พิมพ์โดยไม่มีการรองรับ PLA ปกติในสีที่คุณเลือกคือสิ่งที่คุณต้องการ

ประกอบเข้าด้วยกัน แนบไปกับเครื่องพิมพ์ของคุณ (อาจต้องใช้ความคิดสร้างสรรค์บางอย่างที่นี่) เท่านี้คุณก็พร้อมแล้ว

แนะนำ: