สารบัญ:

CNC Drum Plotter: 13 ขั้นตอน (พร้อมรูปภาพ)
CNC Drum Plotter: 13 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: CNC Drum Plotter: 13 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: CNC Drum Plotter: 13 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Arduino CNC Plotter (mini drawing machine) 2024, พฤศจิกายน
Anonim
Image
Image
พลอตเตอร์กลอง CNC
พลอตเตอร์กลอง CNC

คำแนะนำนี้อธิบายพล็อตเตอร์ A4/A3 ที่ทำจากส่วนของท่อพลาสติก สเต็ปเปอร์มอเตอร์ BYJ-48 สองตัว และเซอร์โว SG-90 โดยพื้นฐานแล้วมันคือพล็อตเตอร์แบบแบนที่ม้วนเป็นกลอง

มอเตอร์ตัวหนึ่งหมุนดรัมในขณะที่อีกตัวเคลื่อนหัวพิมพ์ เซอร์โวใช้เพื่อยกและลดระดับปากกา

พล็อตเตอร์นี้มีข้อดีหลายประการมากกว่าพล็อตเตอร์แบบแท่นธรรมดา:

  • รอยเท้าเล็กลงอย่างเห็นได้ชัด
  • ต้องการรางนำเชิงเส้นเพียงตัวเดียว
  • ง่ายต่อการสร้าง
  • ราคาถูก

ล่ามออนบอร์ดยอมรับเอาต์พุต gcode จาก Inkscape

การสื่อสารกับพล็อตเตอร์นั้นผ่านลิงก์บลูทูธ

พล็อตเตอร์เข้ากันได้กับแท็บเล็ตกราฟิก CNC ที่อธิบายไว้ในคำแนะนำของฉัน

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

ขั้นตอนที่ 1: วงจร

The Circuit
The Circuit

วงจรประกอบด้วยไมโครคอนโทรลเลอร์ Arduino UNO R3 และชิลด์แบบกำหนดเองซึ่งติดตั้งส่วนประกอบแบบแยกส่วน ใช้พลังงานผ่านตัวควบคุมภายนอก 5 โวลต์ 1 แอมป์ กระแสไฟเฉลี่ยอยู่ที่ประมาณ 500mA

สเต็ปปิ้งมอเตอร์ BYJ-48 ติดอยู่กับ PORTB (พิน D8, D9, D10, D11) และ PORTC (พิน A0, A1, A2, A3) ติดเซอร์โวแบบยกปากกา SG-90 เข้ากับพิน D3

ตัวต้านทาน 560 โอห์ม ซึ่งอาจถูกละเว้น ให้การป้องกันไฟฟ้าลัดวงจรสำหรับ Arduino หากมีสิ่งผิดปกติเกิดขึ้น พวกเขายังทำให้การต่อสายเกราะทำได้ง่ายขึ้นเนื่องจากทำหน้าที่เป็น "จัมเปอร์" ข้ามรางจ่ายไฟ

ตัวต้านทาน 1k2 และ 2K2 ป้องกันความเสียหายต่อโมดูลบลูทูธ HC-06 [1] โดยลดเอาต์พุต 5 โวลต์จาก Arduino ลงเหลือ 3.3 โวลต์

[1] ถอดปลั๊กโมดูลบลูทูธ HC-06 เมื่ออัปโหลดโค้ดไปยัง Arduino ผ่านพอร์ต USB วิธีนี้จะช่วยหลีกเลี่ยงความขัดแย้งของพอร์ตอนุกรม

ขั้นตอนที่ 2: ไดรฟ์เชิงเส้น

ไดรฟ์ลิเนียร์
ไดรฟ์ลิเนียร์
ไดรฟ์ลิเนียร์
ไดรฟ์ลิเนียร์
ไดรฟ์ลิเนียร์
ไดรฟ์ลิเนียร์

ลิเนียร์ไดรฟ์ทำจากแท่งอะลูมิเนียมยาว 3 มม. x 32 มม. แผ่นอะลูมิเนียม และรอกลูกปืนขนาดเล็กสี่ตัว

อะลูมิเนียมมีจำหน่ายตามร้านฮาร์ดแวร์ส่วนใหญ่ The U624ZZ 4x13x7mm U-groove pulleys มีอยู่ใน

เครื่องมือช่างธรรมดาคือสิ่งที่คุณต้องการ ตัดแท่งอลูมิเนียมให้เหมาะกับขนาดของล็อตเตอร์ของคุณ

การประกอบมอเตอร์

ติดตั้งสเต็ปปิ้งมอเตอร์ BJY-48 ผ่านแถบที่ปลายด้านหนึ่ง และติดฟัน GT2 20 ขนาดรู 5 มม. รอกเข้ากับเพลามอเตอร์ ตอนนี้ติดตั้งรอก GT2 อีกอันที่ปลายอีกด้านของบาร์ของคุณ เพื่อให้รอกสามารถหมุนได้อย่างอิสระ ฉันใช้ตัวเว้นวรรคแบบท่อ (วิทยุ) ขนาดเส้นผ่านศูนย์กลาง 5 มม. และโบลต์ 3 มม. เพื่อให้ได้สิ่งนี้

ตอนนี้วนความยาวของเข็มขัดเวลา GT2 รอบรอก เข้าร่วมกับปลายสายพานราวลิ้นโดยใช้การบิดครึ่งเพื่อให้ฟันสอดประสานและแก้ไขด้วยสายรัด

สุดท้ายติดชุดประกอบแคร่ตลับหมึกเข้ากับสายพานราวลิ้นด้วยสายรัด

การประกอบรถ

ชุดประกอบแคร่ตลับหมึกทำจากแผ่นอะลูมิเนียม [1] ซึ่งรอก U624ZZ ถูกยึดไว้ หากจำเป็น ให้ใช้แหวนรองขนาด 4 มม. เพื่อเว้นระยะรอกจากแผ่นอะลูมิเนียม

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

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

ก่อนที่จะดัดแถบอะลูมิเนียมให้เป็น "U" ให้เจาะรูด้านบนและด้านล่างเพื่อให้พอดีกับเส้นผ่านศูนย์กลางปากกาของคุณ ตอนนี้ทำโค้งให้เสร็จ

ติดเข็มขัดเวลากับชุดประกอบแคร่ตลับหมึกโดยใช้สายรัดและสลักเกลียว 3 มม. ระหว่างรอกสองตัวบน

การประกอบเครื่องยกปากกา

ติดเซอร์โว SG-90 เข้ากับด้านบนของชุดแคร่ตลับหมึกโดยใช้สายรัดหนึ่งหรือสองเส้น

วางปากกาของคุณลงบนสองรูที่คุณเจาะ ตรวจสอบให้แน่ใจว่าปากกาเลื่อนขึ้นและลงได้อย่างอิสระ

ยึด "ปลอกคอ" เข้ากับปากกาของคุณ โดยให้ปากกาอยู่ได้อย่างชัดเจนจากดรัมเมื่อเซอร์โวอยู่ในตำแหน่งเติมปากกา

[1] อลูมิเนียมอาจตัดได้โดยใช้มีดคมๆ (เครื่องตัดกล่อง) แต้มทั้งสองด้านของแผ่น แล้วงอส่วนที่ตัดไปเหนือขอบโต๊ะ ม้วนงอเล็กน้อยและแผ่นจะแตกหักทิ้งให้แตกตรง วิธีนี้จะไม่ทำให้อะลูมิเนียมเสียหาย

ขั้นตอนที่ 3: กลอง

กลอง
กลอง
กลอง
กลอง
กลอง
กลอง

ดรัมประกอบด้วยส่วนของท่อพลาสติกที่มีปลั๊กปลายไม้สองตัว [1]

ใช้เข็มทิศตั้งไว้ที่รัศมีด้านในของท่อเพื่อวาดโครงร่างที่ปลายปลั๊ก ตอนนี้ให้ตัดโครงร่างแต่ละส่วนโดยใช้ใบเลื่อยละเอียด ("การเผชิญปัญหา", "เฟรต") จากนั้นจึงปรับแต่งปลั๊กปลายแต่ละอันโดยใช้ไม้จิ้มฟัน ยึดที่อุดปลายด้วยสกรูไม้ขนาดเล็กที่จมเคาน์เตอร์

สลักเกลียวทางวิศวกรรมขนาด 6 มม. ที่ตรงกลางของปลั๊กปลายแต่ละอันจะประกอบเป็นเพลา

ขนาดกลอง

ขนาดดรัมจะขึ้นอยู่กับขนาดกระดาษของคุณ เส้นผ่านศูนย์กลางของดรัม 100 มม. รองรับแนวตั้ง A4 และแนวนอน A3 เส้นผ่านศูนย์กลางของดรัม 80 มม. จะรองรับแนวนอน A4 เท่านั้น ใช้เส้นผ่านศูนย์กลางของดรัมให้เล็กที่สุดเท่าที่จะทำได้เพื่อลดแรงเฉื่อย … มอเตอร์ BYJ-48 มีขนาดเล็กเท่านั้น

เส้นผ่านศูนย์กลางของดรัม 90 มม. เหมาะอย่างยิ่งสำหรับกระดาษแนวตั้งขนาด A4 และกระดาษแนวนอนขนาด A3 เนื่องจากขอบตรงข้าม เมื่อพันรอบดรัมจะซ้อนทับกันประมาณ 10 มม. ซึ่งหมายความว่าคุณมีเพียงตะเข็บเดียวที่จะติดเทปให้เข้าที่

หมุนกลอง

เพลาแต่ละอันจะลอดผ่านโครงยึดปลายอะลูมิเนียมเพื่อให้ดรัมหมุนได้อย่างอิสระ ป้องกันการลอยตัวโดยใช้ GT-2, 20 ฟัน, รู 6 มม., รอกยึดกับเพลาที่ปลายด้านหนึ่ง สายพานไทม์มิ่ง GT-2 แบบต่อเนื่องเชื่อมโยงสเต็ปปิ้งมอเตอร์เกียร์ BJY-48 เข้ากับดรัม มอเตอร์ต้องใช้รอกที่มีขนาดรูเจาะ 5 มม.

[1] ปลั๊กปลายพลาสติกมีจำหน่ายสำหรับท่อขนาดเส้นผ่านศูนย์กลางส่วนใหญ่ แต่ถูกปฏิเสธเนื่องจากจะพอดีกับท่อมากกว่าด้านใน และพลาสติกมีแนวโน้มที่จะงอ มันอาจจะใช้ได้ถ้าใช้เพลาต่อเนื่องแทนสลักเกลียว … แต่คุณต้องใช้วิธียึดเพลากับปลั๊กปลาย

ขั้นตอนที่ 4: คำแนะนำในการก่อสร้าง

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

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

อย่าขันสายพานราวลิ้น GT-2 ให้แน่นเกินไป … สายพานต้องตึงเท่านั้น สเต็ปปิ้งมอเตอร์ BYJ-48 ไม่มีแรงบิดมากนัก

สเต็ปปิ้งมอเตอร์ BJY-48 มักจะมีฟันเฟืองจำนวนเล็กน้อยซึ่งไม่มีนัยสำคัญตามแกน X แต่มีข้อกังวลเมื่อพูดถึงแกน Y เหตุผลก็คือการหมุนของมอเตอร์แกน Y หนึ่งครั้งเท่ากับการหมุนของดรัมหนึ่งครั้ง ในขณะที่การเคลื่อนตัวของปากกาต้องใช้มอเตอร์แกน X หลายรอบในการเคลื่อนที่ตามความยาวของดรัม สามารถขจัดฟันเฟืองแกน Y ใดๆ ได้โดยการรักษาแรงบิดคงที่บนดรัม วิธีง่ายๆ คือติดน้ำหนักเล็กน้อยกับสายไนลอนที่พันรอบถังซัก

ขั้นตอนที่ 5: อัลกอริธึมการวาดเส้นของ Bresenham

อัลกอริทึมการวาดเส้นของ Bresenham
อัลกอริทึมการวาดเส้นของ Bresenham
อัลกอริทึมการวาดเส้นของ Bresenham
อัลกอริทึมการวาดเส้นของ Bresenham

พล็อตเตอร์นี้ใช้เวอร์ชันที่ได้รับการปรับให้เหมาะสม [1] ของอัลกอริธึมการวาดเส้นของ Bresenham ขออภัย อัลกอริธึมนี้ใช้ได้เฉพาะกับความชันของเส้นที่น้อยกว่าหรือเท่ากับ 45 องศาเท่านั้น (กล่าวคือ 1 octant ของวงกลม)

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

ที่มา

ส่วนที่เหลือของขั้นตอนนี้อาจถูกละเว้นหากคุณคุ้นเคยกับอัลกอริทึมของ Bresenham

ให้เราลากเส้นจาก (0, 0) ถึง (x1, y1) โดยที่:

  • x1=8=ระยะทางในแนวนอน
  • y1=6=ระยะทางแนวตั้ง

สมการของเส้นตรงที่ผ่านจุดกำเนิด (0, 0) ถูกกำหนดโดยสมการ y=m*x โดยที่:

m=y1/x1=6/8=0.75=ความชัน

อัลกอริทึมอย่างง่าย

อัลกอริทึมอย่างง่ายสำหรับการพล็อตบรรทัดนี้คือ:

  • int x1=8;
  • int y1=6;
  • ลอย m=y1/x1;
  • พล็อต(0, 0);
  • สำหรับ (int x=1; x<=x1; x++) {
  • int y=รอบ(m*x);
  • พล็อต(x, y);
  • }

ตารางที่ 1: อัลกอริทึมอย่างง่าย

NS NS ม*x y
0 0.75 0 0
1 0.75 0.75 1
2 0.75 1.5 2
3 0.75 2.25 2
4 0.75 3 3
5 0.75 3.75 4
6 0.75 4.5 5
7 0.75 5.25 5
8 0.75 6 6

มีปัญหาสองประการกับอัลกอริทึมง่ายๆ นี้:

  • ลูปหลักมีการคูณซึ่งช้า
  • มันใช้เลขทศนิยมซึ่งช้าเช่นกัน

กราฟของ y กับ x สำหรับเส้นนี้แสดงไว้ด้านบน

อัลกอริทึมของ Bresenham

Bresenham ได้แนะนำแนวคิดของคำว่า 'e' ที่ผิดพลาด ซึ่งถูกตั้งค่าเริ่มต้นให้เป็นศูนย์ เขาตระหนักว่าค่า m*x ที่แสดงในตารางที่ 1 สามารถรับได้โดยการเพิ่ม 'm' เป็น 'e' อย่างต่อเนื่อง เขาตระหนักต่อไปว่า y จะเพิ่มขึ้นก็ต่อเมื่อส่วนที่เป็นเศษส่วนของ m*x มากกว่า 0.5 เพื่อให้การเปรียบเทียบอยู่ในช่วง 0<=0.5<=1 เขาลบ 1 จาก 'e' ทุกครั้งที่ y เพิ่มขึ้น

  • int x1=8;
  • int y1=6;
  • ลอย m=y1/x1;
  • int y=0;
  • ลอย e=0;
  • พล็อต(0, 0);
  • สำหรับ (int x=1; x<=x1; x++) {
  • อี+= ม.;
  • ถ้า (e>= 0.5) {
  • อี -= 1;
  • ย++;
  • }
  • พล็อต(x, y);
  • }

ตารางที่ 2: อัลกอริทึมของ Bresenham

NS NS อี e-1 y
0 0.75 0 0 0
1 0.75 0.75 -0.25 1
2 0.75 0.5 -0.5 2
3 0.75 0.25 2
4 0.75 1 0 3
5 0.75 0.75 -0.25 4
6 0.75 0.5 -0.5 5
7 0.75 0.25 5
8 0.75 1 0 6

หากคุณตรวจสอบอัลกอริทึมและตารางที่ 2 คุณจะสังเกตเห็นว่า

  • วงหลักใช้การบวกและการลบเท่านั้น … ไม่มีการคูณ
  • รูปแบบของ y เหมือนกับตารางที่ 1

แต่เรายังคงใช้เลขทศนิยม … มาแก้ไขกัน

อัลกอริทึมของ Bresenham (ปรับให้เหมาะสม)

อัลกอริธึมจุดลอยตัวของ Bresenham สามารถแปลงเป็นรูปแบบจำนวนเต็มได้หากเราปรับขนาด 'm' และ 'e' คูณ 2*x1 ซึ่งในกรณีนี้ m=(y1/x1)*2*x1=2*y1

นอกเหนือจากการปรับขนาด 'm' และ 'e' แล้ว อัลกอริธึมจะคล้ายกับด้านบนยกเว้น:

  • เราบวก 2*y1 เป็น 'e' ทุกครั้งที่เราเพิ่ม 'x"
  • เราเพิ่ม y ถ้า e เท่ากับหรือมากกว่า x1
  • เราลบ 2*x1 จาก 'e' แทน 1
  • x1 ใช้สำหรับการเปรียบเทียบแทน 0.5

ความเร็วของอัลกอริธึมสามารถเพิ่มขึ้นได้อีกหากลูปใช้ศูนย์สำหรับการทดสอบ ในการดำเนินการนี้ เราต้องเพิ่มการชดเชยให้กับคำที่ผิดพลาด 'e'

  • int x1=8;
  • int y1=6;
  • int m=(y1<<1); // ค่าคงที่: ความชันถูกปรับขนาดโดย 2*x1
  • int E=(x1<<1); //ค่าคงที่: 2*x1 สำหรับใช้ในลูป
  • int e = -x1; //offset ของ -E/2: ทดสอบเสร็จแล้วที่ศูนย์
  • พล็อต(0, 0);
  • int y=0;
  • สำหรับ (x=1; x<=x1; x++) {
  • อี += ม.;
  • ถ้า (e>=x1) {
  • อี -= อี
  • ย++;
  • }
  • พล็อต(x, y);
  • }

ตารางที่ 3: อัลกอริธึม (ปรับให้เหมาะสม) ของ Bresenham

NS NS อี อี อี - อี y
0 12 16 -8 0
1 12 16 4 -12 1
2 12 16 0 -16 2
3 12 16 -4 2
4 12 16 8 -8 3
5 12 16 4 -12 4
6 12 16 0 -16 5
7 12 16 -4 5
8 12 16 8 -8 6

รูปแบบสำหรับ y เหมือนกับในตารางอื่นๆ อีกครั้ง เป็นที่น่าสนใจที่จะสังเกตว่าตารางที่ 3 มีเพียงจำนวนเต็มและอัตราส่วนของ m/E=12/16=0.75 ซึ่งเป็นความชัน 'm' ของเส้นตรง

อัลกอริธึมนี้เร็วมากเนื่องจากลูปหลักเกี่ยวข้องกับการบวก การลบ และการเปรียบเทียบกับศูนย์เท่านั้น การคูณไม่ได้ใช้นอกเหนือจากเมื่อเราเริ่มต้นค่าสำหรับ 'E' และ 'm' โดยใช้ "left-shift" เพื่อเพิ่มค่า x1 และ y1 เป็นสองเท่า

[1] อัลกอริธึมของ Bresenham รุ่นปรับปรุงนี้มาจากบทความ "Bresenham Line and Circle Drawing" ลิขสิทธิ์ © 1994-2006, W Randolph Franklin (WRF) เนื้อหาของเขาอาจถูกนำไปใช้เพื่อการวิจัยและการศึกษาที่ไม่แสวงหาผลกำไร โดยคุณต้องให้เครดิตเขา และลิงก์กลับไปที่หน้าแรกของเขา

ขั้นตอนที่ 6: รหัส

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

ถอดปลั๊กโมดูล bluetoorh HC-06 ก่อนพยายามอัปโหลด นี่เป็นสิ่งจำเป็นเพื่อหลีกเลี่ยงปัญหาพอร์ตอนุกรมที่ขัดแย้งกับสาย USB

รหัสบุคคลที่สาม

นอกเหนือจากโค้ด.ino ข้างต้น คุณจะต้องมีแพ็คเกจซอฟต์แวร์ต่อไปนี้ซึ่งฟรี / เครื่องบริจาค:

  • Teraterm ซึ่งหาได้จาก
  • Inkscape หาได้จาก

คำแนะนำสำหรับการติดตั้งและใช้งานแต่ละแพ็คเกจของบุคคลที่สามข้างต้น สามารถพบได้ในบทความของฉัน

ขั้นตอนที่ 7: เมนู

เมนู
เมนู

ทำการเชื่อมต่อบลูทูธกับพล็อตเตอร์ของคุณโดยใช้ "Teraterm"

เปิด "caps lock" ของคุณ เนื่องจากคำสั่งทั้งหมดเป็นตัวพิมพ์ใหญ่

พิมพ์ตัวอักษร 'M' และเมนูควรปรากฏขึ้นตามที่แสดงด้านบน

เมนูนี้อธิบายตนเองได้อย่างสมเหตุสมผล:

  • M (หรือ M0) จะเปิดเมนู
  • G0 ช่วยให้คุณส่งปากกาไปยังพิกัด XY เฉพาะโดยยกปากกาขึ้น
  • G1 ช่วยให้คุณสามารถส่งปากกาไปยังพิกัด XY เฉพาะโดยให้ปากกาอยู่ด้านล่าง
  • T1 ให้คุณวางปากกาของคุณเหนือพิกัด 0, 0 ของคุณ พิมพ์ 'E' เพื่อออก
  • T2 ช่วยให้คุณสามารถปรับขนาดรูปวาดของคุณ ตัวอย่างเช่น "T2 S2.5" จะปรับขนาดรูปวาดของคุณ 250% มาตราส่วนเริ่มต้นคือ 100%
  • T3 และ T4 ช่วยให้คุณสามารถยกหรือลดปากกาได้
  • T5 วาดรูปแบบการทดสอบ "ABC"
  • T6 ดึง "เป้าหมาย"
  • T7 วาดชุดของเส้นรัศมีซึ่งมีจุดประสงค์เพื่อตรวจสอบว่าอัลกอริธึมของ Bresenham ทำงานใน "octants" แปดตัว

หมายเหตุ:

  • การเคลื่อนไหวของปากกาทั้งหมดใช้ชุดมาตราส่วนการวาดโดยใช้ตัวเลือกเมนูT2
  • หมายเลข "17:" และ "19:" คือรหัสการจับมือเทอร์มินัล "Xon" และ "Xoff" จากล่าม Arduino

ขั้นตอนที่ 8: การปรับเทียบ

ค่าสำหรับ X_STEPS_PER_MM และ Y_STEPS_PER_MM ใช้สำหรับดรัมขนาดเส้นผ่านศูนย์กลาง 90 มม.

ค่าสำหรับเส้นผ่านศูนย์กลางดรัมอื่นๆ สามารถคำนวณได้โดยใช้ความสัมพันธ์ต่อไปนี้:

  • เส้นรอบวงของดรัมคือ PI*diameter
  • 2048 ขั้นเท่ากับหนึ่งรอบการหมุนของเพลามอเตอร์แต่ละอัน
  • หนึ่งรอบของรอก GT-2 เท่ากับการเคลื่อนที่เชิงเส้น 40 มม. ของสายพานราวลิ้น

อีกวิธีหนึ่งคือการป้อนคำสั่งต่อไปนี้

  • G1 X0 Y100
  • G1 X100 Y100

จากนั้นวัดความยาวของเส้นผลลัพธ์และ "สเกล" ค่าสำหรับ X-STEPS_PER_MM และ Y_STEPS_PER_MM

ขั้นตอนที่ 9: การประมวลผลล่วงหน้าของ Gcode

Gcode การประมวลผลล่วงหน้า
Gcode การประมวลผลล่วงหน้า
การประมวลผลล่วงหน้าของ Gcode
การประมวลผลล่วงหน้าของ Gcode

พล็อตเตอร์นี้ต้องใช้ Inkscape gcodes สี่ตัวเท่านั้น (ได้แก่ G0, G1, G2, G3) โค้ดจะทำงานเร็วขึ้นอย่างมากหากเราลบ gcodes และความคิดเห็นที่ไม่จำเป็นทั้งหมด

ในการดำเนินการนี้ คุณต้องมีสำเนาของ "Notepad++" โปรแกรมแก้ไขข้อความฟรีนี้มีเครื่องมือค้นหา "นิพจน์ทั่วไป" สำหรับการค้นหาและลบข้อความที่ไม่ต้องการ Notepad++ หาได้จาก

เปิดไฟล์ที่จะแก้ไขด้วย Notepad++ แล้ววางเคอร์เซอร์ไว้ที่ด้านบนสุดของไฟล์

เลือก "ดู/แสดงสัญลักษณ์/อักขระทั้งหมด" ตามด้วย "ค้นหา/แทนที่…" จากแถบเมนูด้านบน

คลิกช่องกาเครื่องหมาย "นิพจน์ทั่วไป" (ดูภาพที่ 1) และป้อนรหัสแต่ละลำดับต่อไปนี้ลงในช่องค้นหา

คลิก "แทนที่ทั้งหมด" หลังจากแต่ละรายการ:

  • %
  • (.*)
  • ^M.*$
  • Z.*$

นิพจน์ทั่วไปข้างต้นจะลบสัญลักษณ์ % ทั้งหมด ความคิดเห็นทั้งหมดที่แสดงในวงเล็บ โค้ด M ทั้งหมด โค้ด Z ทั้งหมด และโค้ดที่ตามมา

ตอนนี้คลิกช่องทำเครื่องหมาย "Extended Expression" (ดูภาพที่ 2) และป้อนลำดับรหัสต่อไปนี้:

r\n\r\n\r\n

นิพจน์นี้จะลบการขึ้นบรรทัดใหม่และการป้อนบรรทัดที่ไม่ต้องการซึ่งสร้างโดยลำดับแรก

บันทึกไฟล์ของคุณโดยใช้ชื่ออื่นโดยใช้ "บันทึกเป็น"

เสร็จแล้ว.

ขั้นตอนที่ 10: ผลลัพธ์

ผลลัพธ์
ผลลัพธ์

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

สามภาพแรกเป็นรูปแบบการทดสอบในตัว T5, T6, T7 ตามลำดับ

"สวัสดีชาวโลก!" รูปแบบถูกส่งไปยังพล็อตเตอร์ผ่านบลูทูธ มีการแนบสำเนา "ที่ประมวลผลล่วงหน้า" ของไฟล์นี้มาด้วย

ขั้นตอนที่ 11: อัปเดตโค้ด

อัพเดทโค้ด
อัพเดทโค้ด

รหัสสำหรับล็อตเตอร์นี้ได้รับการอัปเดตเป็น Drum_Plotter_V2.ino

การเปลี่ยนแปลงจาก Drum_Plotter.ino ดั้งเดิม ได้แก่:

  • การวางตำแหน่งปากกาที่นุ่มนวลขึ้น
  • ตอนนี้รู้จักคำแนะนำ G02 gcode (ส่วนโค้งตามเข็มนาฬิกา)
  • ตอนนี้รู้จักคำแนะนำ G03 gcode (ส่วนโค้งทวนเข็มนาฬิกา)

ไดอะแกรมที่แนบมาแสดงวิธีการคำนวณมุมโค้งของฉัน

ขั้นตอนที่ 12: Drum_plotter_v3.ino

มีการแนบการอัปเดตโค้ดสำหรับ "CNC Drum Plotter"

"drum_plotter_v3.ino" แก้ไขข้อผิดพลาดเล็กน้อยที่ส่งผลต่อความแม่นยำของพล็อตเตอร์

ประวัติการเปลี่ยนแปลง

เวอร์ชัน 2:

เพิ่มเส้นโค้งสองส่วน

เวอร์ชัน 3:

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

  • (int) แทนที่ด้วย round() ในฟังก์ชัน move_to()
  • draw_line() ปรับปรุงอัลกอริธึมการค้นหา "octant"
  • ตอนนี้ล่ามใช้ฟังก์ชันสตริงมากกว่าตัวชี้ซึ่งทำให้การออกแบบง่ายขึ้น ตัวอย่างเช่น ขณะนี้เราสามารถค้นหา "เมนู" แทนที่จะมองหาตัวอักษร 'M' แล้วแยกตัวเลขจำนวนเต็มที่ตามมา สิ่งนี้ช่วยให้คุณปรับแต่งพล็อตเตอร์ด้วยคำสั่งของคุณเอง

ขั้นตอนที่ 13: Drum_plotter_plotter_v4.ino

16 มกราคม 2560:

โค้ดสำหรับดรัมล็อตเตอร์นี้ได้รับการปรับให้เหมาะสมยิ่งขึ้นไปอีก มีการเพิ่มคุณสมบัติเพิ่มเติม

การเปลี่ยนแปลงรวมถึง:

  • อัลกอริทึม draw_line() ที่เร็วขึ้น
  • ฟังก์ชัน move_to() ที่ตรงกัน
  • ตัวนับขั้นตอน
  • แก้ไขข้อผิดพลาดเล็กน้อย

สำหรับรายละเอียดเพิ่มเติม โปรดอ่านความคิดเห็นภายใน "drum_plotter_v4.ino" ที่แนบ

คลิกที่นี่เพื่อดูคำแนะนำอื่น ๆ ของฉัน

แนะนำ: