สารบัญ:
- ขั้นตอนที่ 1: วงจร
- ขั้นตอนที่ 2: ไดรฟ์เชิงเส้น
- ขั้นตอนที่ 3: กลอง
- ขั้นตอนที่ 4: คำแนะนำในการก่อสร้าง
- ขั้นตอนที่ 5: อัลกอริธึมการวาดเส้นของ Bresenham
- ขั้นตอนที่ 6: รหัส
- ขั้นตอนที่ 7: เมนู
- ขั้นตอนที่ 8: การปรับเทียบ
- ขั้นตอนที่ 9: การประมวลผลล่วงหน้าของ Gcode
- ขั้นตอนที่ 10: ผลลัพธ์
- ขั้นตอนที่ 11: อัปเดตโค้ด
- ขั้นตอนที่ 12: Drum_plotter_v3.ino
- ขั้นตอนที่ 13: Drum_plotter_plotter_v4.ino
วีดีโอ: CNC Drum Plotter: 13 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
คำแนะนำนี้อธิบายพล็อตเตอร์ A4/A3 ที่ทำจากส่วนของท่อพลาสติก สเต็ปเปอร์มอเตอร์ BYJ-48 สองตัว และเซอร์โว SG-90 โดยพื้นฐานแล้วมันคือพล็อตเตอร์แบบแบนที่ม้วนเป็นกลอง
มอเตอร์ตัวหนึ่งหมุนดรัมในขณะที่อีกตัวเคลื่อนหัวพิมพ์ เซอร์โวใช้เพื่อยกและลดระดับปากกา
พล็อตเตอร์นี้มีข้อดีหลายประการมากกว่าพล็อตเตอร์แบบแท่นธรรมดา:
- รอยเท้าเล็กลงอย่างเห็นได้ชัด
- ต้องการรางนำเชิงเส้นเพียงตัวเดียว
- ง่ายต่อการสร้าง
- ราคาถูก
ล่ามออนบอร์ดยอมรับเอาต์พุต gcode จาก Inkscape
การสื่อสารกับพล็อตเตอร์นั้นผ่านลิงก์บลูทูธ
พล็อตเตอร์เข้ากันได้กับแท็บเล็ตกราฟิก CNC ที่อธิบายไว้ในคำแนะนำของฉัน
แม้ว่าจะไม่ใช่เครื่องมือที่มีความแม่นยำ แต่ความแม่นยำของพล็อตเตอร์นี้ก็น่าพอใจสำหรับจุดประสงค์ในการถ่ายโอนโครงร่างสีน้ำลงบนกระดาษ
ขั้นตอนที่ 1: วงจร
วงจรประกอบด้วยไมโครคอนโทรลเลอร์ 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
พล็อตเตอร์นี้ใช้เวอร์ชันที่ได้รับการปรับให้เหมาะสม [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
พล็อตเตอร์นี้ต้องใช้ 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" ที่แนบ
คลิกที่นี่เพื่อดูคำแนะนำอื่น ๆ ของฉัน
แนะนำ:
MIDI Drum Kit บน Python และ Arduino: 5 ขั้นตอน (พร้อมรูปภาพ)
MIDI Drum Kit บน Python และ Arduino: ฉันต้องการซื้อชุดกลองมาตั้งแต่เด็ก ย้อนกลับไปในตอนนั้น อุปกรณ์ดนตรีทั้งหมดไม่มีแอปพลิเคชันดิจิทัลทั้งหมด เนื่องจากเรามีอยู่มากมายในปัจจุบัน ดังนั้นราคาและความคาดหวังจึงสูงเกินไป ล่าสุดผมตัดสินใจซื้อค
Adruino Serial Plotter: 5 ขั้นตอน (พร้อมรูปภาพ)
Adruino Serial Plotter: เพิ่มฟังก์ชัน Arduino Serial Plotter ลงใน Arduino IDE แล้ว ช่วยให้คุณสามารถสร้างกราฟข้อมูลอนุกรมจาก Arduino ไปยังคอมพิวเตอร์ของคุณในแบบเรียลไทม์ หากคุณเบื่อที่จะเห็นข้อมูลอินพุตเซ็นเซอร์แอนะล็อกของ Arduino เทลงบนหน้าจอของคุณ
Arduino Drum Man: 5 ขั้นตอน (พร้อมรูปภาพ)
Arduino Drum Man: ส่วนผสม:1. ลวดโลหะ2. ชุดกลองของเล่นราคาถูก (ไฮแฮท บ่วง กลองเตะ)3. สามเซอร์โว4. สายไฟฟ้า5. เทปพันท่อ6. เขียงหั่นขนม7. Arduino Uno8. Usb เป็น Usb 2.0
Arduino CNC Plotter (เครื่องวาด): 10 ขั้นตอน (พร้อมรูปภาพ)
Arduino CNC Plotter (เครื่องวาด): เฮ้พวก! ฉันหวังว่าคุณจะสนุกกับคำสั่งก่อนหน้านี้ของฉัน "วิธีสร้างแพลตฟอร์มการฝึกอบรม Arduino ของคุณเอง" และคุณก็พร้อมสำหรับสิ่งใหม่ ตามปกติแล้ว ฉันทำบทช่วยสอนนี้เพื่อแนะนำคุณทีละขั้นตอนในขณะที่สร้างสิ่งที่น่าทึ่งนี้
Arduino Mini CNC Plotter (พร้อมโปรเจ็กต์ Proteus & PCB): 3 ขั้นตอน (พร้อมรูปภาพ)
Arduino Mini CNC Plotter (พร้อมโปรเจ็กต์ Proteus & PCB): ล็อตเตอร์ Arduino mini CNC หรือ XY นี้สามารถเขียนและออกแบบภายในช่วง 40x40 มม. ใช่ช่วงนี้สั้น แต่ก็เป็นการเริ่มต้นที่ดีในการก้าวเข้าสู่โลกของ Arduino [ฉันได้ให้ทุกอย่างในโครงการนี้แล้ว แม้แต่ PCB, ไฟล์ Proteus, การออกแบบตัวอย่าง และ