Mục lục:

Máy vẽ trống CNC: 13 bước (có hình ảnh)
Máy vẽ trống CNC: 13 bước (có hình ảnh)

Video: Máy vẽ trống CNC: 13 bước (có hình ảnh)

Video: Máy vẽ trống CNC: 13 bước (có hình ảnh)
Video: [ Tai Nạn ] Thiếu tập trung khi vận hành máy CNC Gỗ công nghiệp 2024, Tháng mười một
Anonim
Image
Image
Máy cắt decal CNC
Máy cắt decal CNC

Tài liệu hướng dẫn này mô tả máy vẽ decal A4 / A3 được làm từ một đoạn ống nhựa, hai động cơ bước BYJ-48 và một servo SG-90. Về cơ bản, nó là một máy vẽ giấy phẳng được cuộn lại thành một cái trống.

Một động cơ quay trống trong khi động cơ kia di chuyển đầu in. Servo được sử dụng để nâng và hạ bút.

Máy vẽ này có một số ưu điểm so với máy cắt decal phẳng truyền thống:

  • dấu chân nhỏ hơn đáng kể
  • chỉ yêu cầu một đường ray dẫn hướng tuyến tính
  • đơn giản để xây dựng
  • rẻ

Một trình thông dịch trên bo mạch chấp nhận đầu ra gcode từ Inkscape.

Giao tiếp với máy vẽ thông qua liên kết bluetooth.

Máy vẽ tương thích với Máy tính bảng Đồ họa CNC được mô tả trong https://www.instructables.com/id/CNC-Graphics-Table… có thể hướng dẫn của tôi

Mặc dù không phải là một công cụ chính xác nhưng độ chính xác của máy vẽ này là đạt yêu cầu cho mục đích dự định của nó là chuyển các đường viền màu nước sang giấy.

Bước 1: Mạch

Mạch
Mạch

Mạch bao gồm một vi điều khiển Arduino UNO R3 và một tấm chắn tùy chỉnh để gắn các thành phần rời rạc trên đó. Nguồn được cấp qua bộ điều chỉnh 5 volt 1 amp bên ngoài. Dòng điện trung bình là khoảng 500mA.

Động cơ bước BYJ-48 được gắn vào PORTB (chân D8, D9, D10, D11) và PORTC (chân A0, A1, A2, A3). Servo nâng bút SG-90 được gắn vào chân D3.

Các điện trở 560 ohm, có thể bị bỏ qua, cung cấp một biện pháp bảo vệ ngắn mạch cho arduino nếu có sự cố. Chúng cũng làm cho việc luồn dây lá chắn trở nên dễ dàng hơn vì chúng hoạt động như những "người nhảy" qua các đường ray tiếp tế.

Các điện trở 1k2 và 2K2 ngăn ngừa hư hỏng mô-đun bluetooth HC-06 [1] bằng cách giảm đầu ra 5 volt từ arduino xuống 3,3 volt.

[1] Rút phích cắm của mô-đun bluetooth HC-06 khi tải mã lên arduino qua cổng USB. Điều này sẽ tránh mọi xung đột cổng nối tiếp.

Bước 2: Truyền động tuyến tính

Truyền động tuyến tính
Truyền động tuyến tính
Truyền động tuyến tính
Truyền động tuyến tính
Truyền động tuyến tính
Truyền động tuyến tính

Bộ truyền động tuyến tính được làm từ thanh nhôm dài 3mm x 32mm, một dải nhôm tấm và bốn ròng rọc ổ bi nhỏ.

Nhôm có sẵn ở hầu hết các cửa hàng phần cứng. Ròng rọc rãnh chữ U U624ZZ 4x13x7mm có sẵn tại

Dụng cụ cầm tay đơn giản là tất cả những gì bạn yêu cầu. Cắt thanh nhôm cho phù hợp với kích thước máy vẽ của bạn.

Lắp ráp động cơ

Gắn động cơ bước BJY-48 qua thanh ở một đầu và gắn ròng rọc GT2 20, khoan 5mm, vào trục động cơ. Bây giờ gắn một ròng rọc GT2 khác ở đầu kia của thanh để ròng rọc có thể quay tự do. Tôi đã sử dụng một miếng đệm hình ống (đài) đường kính 5mm và một chốt 3mm để đạt được điều này.

Bây giờ vòng một chiều dài của vành đai thời gian GT2 xung quanh các ròng rọc. Nối các đầu đai thời gian bằng cách xoắn nửa sao cho các răng xen vào nhau và cố định bằng dây buộc cáp.

Cuối cùng gắn cụm vận chuyển vào đai định thời bằng dây buộc cáp.

Hội xe ngựa

Cụm vận chuyển được làm từ một dải nhôm tấm [1] trên đó các puli U624ZZ được bắt vít. Nếu cần, hãy sử dụng máy giặt 4mm để tạo khoảng trống cho các puli khỏi tấm nhôm.

Các ròng rọc, có rãnh 4mm, căng thanh nhôm trên và dưới sao cho không có chuyển động thẳng đứng nhưng thanh nhôm di chuyển tự do sang trái và phải.

Để đảm bảo toa chạy tự do, trước tiên hãy lắp hai ròng rọc trên cùng, sau đó đặt hai ròng rọc trên thanh, đánh dấu vị trí của hai ròng rọc dưới cùng. Các lỗ cho hai ròng rọc này bây giờ có thể được khoan. Sử dụng mũi khoan "hoa tiêu" nhỏ trước để ngăn mũi khoan 4mm lớn hơn bị trôi.

Trước khi uốn dải nhôm thành chữ "U", hãy khoan một lỗ trên và dưới cho phù hợp với đường kính bút của bạn. Bây giờ hoàn thành các khúc cua.

Gắn đai định thời vào bộ phận vận chuyển bằng dây buộc cáp và bu lông 3mm giữa hai ròng rọc trên cùng.

Cụm nâng bút

Gắn một servo SG-90 vào đầu của cụm giá đỡ bằng cách sử dụng một hoặc hai dây cáp.

Thả bút xuống hai lỗ mà bạn đã khoan. Đảm bảo rằng bút trượt lên và xuống một cách tự do.

Vặn "vòng đệm" vào bút sao cho bút chỉ lọt ra khỏi trống khi servo ở vị trí hướng bút lên.

[1] Có thể cắt nhôm bằng cách dùng dao sắc nhọn (dao cắt hộp) mài cả hai mặt của tấm, sau đó uốn vết cắt qua mép bàn. Một vài lần lắc lư và tấm vải sẽ bị gãy để lại vết gãy thẳng. Không giống như phương pháp cắt bằng thiếc, phương pháp này không làm xoắn nhôm.

Bước 3: Trống

Cái trống
Cái trống
Cái trống
Cái trống
Cái trống
Cái trống

Trống bao gồm một đoạn ống nhựa với hai đầu bịt bằng gỗ [1].

Sử dụng la bàn, đặt thành bán kính bên trong của đường ống của bạn, để vẽ các đường viền của phích cắm cuối. Bây giờ, hãy cắt xung quanh từng đường viền bằng cách sử dụng một chiếc cưa lưỡi mịn ("đối phó", "băn khoăn") sau đó tùy chỉnh phù hợp với từng đầu cắm với sự hỗ trợ của một cái rọc gỗ. Siết chặt các đầu cắm cuối bằng vít gỗ chìm nhỏ.

Một bu lông kỹ thuật 6 mm xuyên qua tâm của mỗi đầu cắm tạo thành trục.

Kích thước trống

Kích thước trống được xác định bởi kích thước giấy của bạn. Đường kính trống 100mm hỗ trợ khổ A4 và khổ ngang. Đường kính trống 80 mm sẽ chỉ hỗ trợ khổ A4. Sử dụng đường kính trống càng nhỏ càng tốt để giảm quán tính… động cơ BYJ-48 chỉ nhỏ.

Đường kính trống 90mm là lý tưởng cho khổ giấy A4 và khổ giấy khổ ngang A3 vì các cạnh đối diện, khi quấn quanh trống sẽ chồng lên nhau khoảng 10mm, có nghĩa là bạn chỉ có một đường may để dán vào vị trí.

Xoay trống

Mỗi trục đi qua một giá đỡ đầu bằng nhôm để tang trống có thể quay tự do. Phao cuối được ngăn bằng một ròng rọc GT-2, 20 răng, 6mm, được gắn chặt vào trục ở một đầu. Đai thời gian GT-2 liên tục liên kết động cơ bước giảm tốc BJY-48 với tang trống. Động cơ yêu cầu một ròng rọc với kích thước lỗ khoan là 5mm.

[1] Phích cắm cuối bằng nhựa có sẵn cho hầu hết các đường kính ống nhưng đã bị từ chối vì chúng vừa khít với đường ống chứ không phải bên trong và nhựa có xu hướng uốn cong. Họ có thể sẽ ổn nếu một trục liên tục được sử dụng thay vì các bu lông… nhưng sau đó bạn yêu cầu một số phương pháp cố định trục vào các đầu cắm cuối.

Bước 4: Mẹo xây dựng

Đảm bảo rằng bút di chuyển dọc theo tâm của trống. Điều này có thể đạt được bằng cách cắt các góc ra khỏi thanh đỡ bằng gỗ. Nếu bút nằm lệch tâm, nó sẽ có xu hướng trượt xuống mặt bên của trống.

Việc khoan chính xác hai lỗ bút là rất quan trọng. Bất kỳ sự lắc lư nào trong thanh dẫn bút hoặc cụm hộp dẫn sẽ gây ra sự lắc lư dọc theo trục X.

Đừng quá thắt chặt các đai thời gian của GT-2… chúng chỉ cần được làm căng. Động cơ bước BYJ-48 không có nhiều mô-men xoắn.

Động cơ bước BJY-48 thường thể hiện một lượng nhỏ phản ứng dữ dội không đáng kể dọc theo trục X nhưng đáng lo ngại khi nói đến trục Y. Lý do cho điều này là một vòng quay của động cơ trục Y tương đương với một vòng quay của trống, trong khi hộp đựng bút đòi hỏi nhiều vòng quay của động cơ trục X để đi qua chiều dài của trống. Bất kỳ phản ứng dữ dội trục Y nào có thể được loại bỏ bằng cách giữ một mô-men xoắn không đổi trên trống. Một phương pháp đơn giản là gắn một quả nặng nhỏ vào một sợi dây nylon quấn quanh trống.

Bước 5: Thuật toán vẽ đường của Bresenham

Thuật toán vẽ đường của Bresenham
Thuật toán vẽ đường của Bresenham
Thuật toán vẽ đường của Bresenham
Thuật toán vẽ đường của Bresenham

Máy vẽ này sử dụng phiên bản tối ưu hóa [1] của thuật toán vẽ đường của Bresenham. Thật không may, thuật toán này chỉ hợp lệ cho độ dốc của đường thẳng nhỏ hơn hoặc bằng 45 độ (tức là một bát phân của hình tròn).

Để khắc phục hạn chế này, tôi "ánh xạ" tất cả các đầu vào XY thành "octant" đầu tiên, sau đó "giải nén" chúng khi đến lúc vẽ biểu đồ. Các chức năng ánh xạ đầu vào và đầu ra để đạt được điều này được thể hiện trong sơ đồ trên.

Nguồn gốc

Phần còn lại của bước này có thể được bỏ qua nếu bạn đã quen với thuật toán Bresenham.

Hãy để chúng tôi vẽ một đường thẳng từ (0, 0) đến (x1, y1) trong đó:

  • x1 = 8 = khoảng cách ngang
  • y1 = 6 = khoảng cách dọc

Phương trình đường thẳng đi qua gốc tọa độ (0, 0) được cho bởi phương trình y = m * x trong đó:

m = y1 / x1 = 6/8 = 0,75 = hệ số góc

Thuật toán đơn giản

Một thuật toán đơn giản để vẽ đường này là:

  • int x1 = 8;
  • int y1 = 6;
  • float m = y1 / x1;
  • lô đất (0, 0);
  • for (int x = 1; x <= x1; x ++) {
  • int y = round (m * x);
  • âm mưu (x, y);
  • }

Bảng 1: Thuật toán đơn giản

NS NS m * 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

Có hai vấn đề với thuật toán đơn giản này:

  • vòng lặp chính chứa một phép nhân chậm
  • nó sử dụng số dấu phẩy động cũng chậm

Đồ thị của y so với x cho đường thẳng này được hiển thị ở trên.

Thuật toán Bresenham

Bresenham đưa ra khái niệm về thuật ngữ lỗi 'e' được khởi tạo bằng 0. Ông nhận ra rằng các giá trị m * x trong bảng 1 có thể nhận được bằng cách thêm liên tiếp 'm' vào 'e'. Ông cũng nhận ra rằng y chỉ tăng lên nếu phần phân số của m * x lớn hơn 0,5. Để giữ so sánh của mình trong phạm vi 0 <= 0,5 <= 1, anh ta trừ 1 từ 'e' bất cứ khi nào y được tăng lên.

  • int x1 = 8;
  • int y1 = 6;
  • float m = y1 / x1;
  • int y = 0;
  • float e = 0;
  • lô (0, 0);
  • for (int x = 1; x <= x1; x ++) {
  • e + = m;
  • nếu (e> = 0,5) {
  • e - = 1;
  • y ++;
  • }
  • plot (x, y);
  • }

Bảng 2: Thuật toán Bresenham

NS NS e 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

Nếu bạn xem xét thuật toán và bảng 2, bạn sẽ thấy rằng;

  • vòng lặp chính chỉ sử dụng cộng và trừ … không có phép nhân
  • mô hình cho y giống như cho bảng 1.

Nhưng chúng tôi vẫn đang sử dụng số dấu phẩy động… hãy khắc phục điều này.

Thuật toán Bresenham (Tối ưu hóa)

Thuật toán dấu phẩy động của Bresenham có thể được chuyển đổi thành dạng số nguyên nếu chúng ta chia tỷ lệ 'm' và 'e' bằng 2 * x1 trong trường hợp đó m = (y1 / x1) * 2 * x1 = 2 * y1

Ngoài việc chia tỷ lệ 'm' và 'e', thuật toán tương tự như ở trên ngoại trừ:

  • chúng tôi thêm 2 * y1 vào 'e' mỗi khi chúng tôi tăng 'x"
  • chúng ta tăng y nếu e bằng hoặc lớn hơn x1.
  • chúng tôi trừ 2 * x1 từ 'e' thay vì 1
  • x1 được sử dụng để so sánh thay vì 0,5

Tốc độ của thuật toán có thể được tăng thêm nếu vòng lặp sử dụng số 0 cho phép thử. Để làm điều này, chúng ta cần thêm một phần bù vào thuật ngữ lỗi 'e'.

  • int x1 = 8;
  • int y1 = 6;
  • int m = (y1 << 1); // hằng số: độ dốc được chia tỷ lệ bằng 2 * x1
  • int E = (x1 << 1); // hằng số: 2 * x1 để sử dụng trong vòng lặp
  • int e = -x1; // offset of -E / 2: kiểm tra hiện được thực hiện ở 0
  • lô (0, 0);
  • int y = 0;
  • for (x = 1; x <= x1; x ++) {
  • e + = m;
  • nếu (e> = x1) {
  • e - = E
  • y ++;
  • }
  • plot (x, y);
  • }

Bảng 3: Thuật toán (Tối ưu hóa) của Bresenham

NS NS E e e - E 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

Một lần nữa, mô hình cho y giống như trong các bảng khác. Điều thú vị là bảng 3 chỉ chứa các số nguyên và tỷ lệ m / E = 12/16 = 0,75 là hệ số góc 'm' của đường thẳng.

Thuật toán này cực kỳ nhanh vì vòng lặp chính chỉ liên quan đến phép cộng, phép trừ và so sánh với số không. Phép nhân không được sử dụng ngoài khi chúng ta khởi tạo các giá trị cho 'E' và 'm' bằng cách sử dụng "dịch chuyển trái" để nhân đôi các giá trị của x1 và y1.

[1] Phiên bản tối ưu hóa của thuật toán Bresenham này là từ bài báo "Bản vẽ đường tròn và đường tròn Bresenham", bản quyền © 1994-2006, W Randolph Franklin (WRF). Tài liệu của anh ấy có thể được sử dụng cho nghiên cứu và giáo dục phi lợi nhuận, miễn là bạn ghi công anh ấy và liên kết trở lại trang chủ của anh ấy,

Bước 6: Mã

Tải xuống tệp đính kèm vào một thư mục cùng tên, sau đó tải tệp đó lên máy vẽ đồ thị bằng arduino IDE (môi trường phát triển tích hợp) của bạn.

Rút phích cắm của mô-đun bluetoorh HC-06 trước khi thử tải lên. Điều này là cần thiết để tránh xung đột cổng nối tiếp với cáp USB.

Mã bên thứ ba

Ngoài mã.ino ở trên, bạn sẽ cần các gói phần mềm miễn phí / donate-ware sau:

  • Teraterm có sẵn từ
  • Inkscape có sẵn từ

Hướng dẫn cài đặt và sử dụng từng gói bên thứ ba ở trên có thể được tìm thấy trong bài viết của tôi

Bước 7: Menu

Thực đơn
Thực đơn

Tạo kết nối bluetooth với máy vẽ của bạn bằng "Teraterm".

Bật "caps lock" của bạn vì tất cả các lệnh đều ở dạng chữ hoa.

Gõ chữ 'M' và một menu sẽ xuất hiện như hình trên.

Thực đơn tự giải thích một cách hợp lý:

  • M (hoặc M0) hiển thị menu
  • G0 cho phép bạn gửi bút đến một tọa độ XY cụ thể với việc nâng bút lên.
  • G1 cho phép bạn đưa bút đến một tọa độ XY cụ thể khi hạ bút xuống.
  • T1 cho phép bạn đặt bút trên tọa độ 0, 0. Gõ 'E' để thoát.
  • T2 cho phép bạn mở rộng quy mô vẽ của mình. Ví dụ "T2 S2.5" sẽ chia tỷ lệ bản vẽ của bạn là 250%. Tỷ lệ mặc định là 100%
  • T3 và T4 cho phép bạn nâng hoặc hạ bút.
  • T5 vẽ mẫu thử nghiệm "ABC".
  • T6 vẽ một "mục tiêu".
  • T7 vẽ một tập hợp các đường xuyên tâm, mục đích của chúng là để xác minh rằng thuật toán của Bresenham đang hoạt động trong mỗi "bát phân"

Ghi chú:

  • tất cả các bước di chuyển bút sử dụng bộ tỷ lệ bản vẽ bằng cách sử dụng tùy chọn menu T2
  • số "17:" và "19:" là mã bắt tay đầu cuối "Xon" và "Xoff" từ trình thông dịch arduino.

Bước 8: Hiệu chỉnh

Các giá trị X_STEPS_PER_MM và Y_STEPS_PER_MM dành cho trống có đường kính 90mm.

Giá trị cho các đường kính trống khác có thể được tính toán bằng các mối quan hệ sau:

  • chu vi của trống là đường kính PI *
  • 2048 bước tương đương với một vòng quay của mỗi trục động cơ
  • một vòng quay của ròng rọc GT-2 tương đương với chuyển động thẳng của dây đai thời gian 40 mm

Một phương pháp khác là nhập các lệnh sau,

  • G1 X0 Y100
  • G1 X100 Y100

sau đó đo độ dài của các dòng kết quả và "chia tỷ lệ" các giá trị cho X-STEPS_PER_MM và Y_STEPS_PER_MM

Bước 9: Tiền xử lý Gcode

Tiền xử lý Gcode
Tiền xử lý Gcode
Tiền xử lý Gcode
Tiền xử lý Gcode

Máy vẽ này chỉ yêu cầu bốn trong số các mã Inkscape (viz: G0, G1, G2, G3). Mã sẽ thực thi nhanh hơn đáng kể nếu chúng ta xóa tất cả các mã và nhận xét không cần thiết.

Để làm điều này, bạn cần một bản sao của "Notepad ++". Trình chỉnh sửa văn bản miễn phí này chứa công cụ tìm kiếm "biểu thức chính quy" để tìm và xóa văn bản không mong muốn. Notepad ++ có sẵn tại

Mở tệp cần sửa đổi bằng Notepad ++ và đặt con trỏ của bạn ở đầu tệp.

Chọn "Xem / Hiển thị biểu tượng / Tất cả các ký tự", tiếp theo là "Tìm kiếm / Thay thế…" từ thanh menu trên cùng.

Nhấp vào hộp kiểm "Cụm từ Thông dụng" (xem hình ảnh đầu tiên) và nhập từng chuỗi mã sau vào hộp tìm kiếm.

Nhấp vào "Thay thế Tất cả" sau mỗi lần nhập:

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

Các biểu thức chính quy ở trên loại bỏ tất cả các ký hiệu%, tất cả các chú thích được hiển thị trong dấu ngoặc vuông, tất cả mã M, tất cả mã Z và các mã theo sau.

Bây giờ hãy nhấp vào hộp kiểm "Biểu thức mở rộng" (xem hình ảnh thứ 2) và nhập chuỗi mã sau:

r / n / r / n / r / n

Biểu thức này loại bỏ các ký tự xuống dòng và nguồn cấp dữ liệu dòng không mong muốn được tạo bởi chuỗi đầu tiên.

Lưu tệp của bạn dưới một tên khác bằng cách sử dụng "Lưu dưới dạng".

Xong.

Bước 10: Kết quả

Kết quả
Kết quả

Máy vẽ này được xây dựng như một "bằng chứng về khái niệm" và không bao giờ có ý định trở nên hoàn hảo. Phải nói rằng kết quả không quá tệ. Họ chắc chắn đáp ứng mục tiêu thiết kế của tôi là chuyển các phác thảo màu nước lên giấy.

Ba hình ảnh đầu tiên lần lượt là các mẫu thử nghiệm tích hợp sẵn T5, T6, T7.

"Xin chào thế giới!" mẫu đã được gửi đến máy vẽ thông qua bluetooth. Bản sao "được xử lý trước" của tệp này được đính kèm.

Bước 11: Cập nhật mã

Cập nhật mã
Cập nhật mã

Mã cho máy vẽ này đã được cập nhật thành Drum_Plotter_V2.ino.

Những thay đổi từ Drum_Plotter.ino ban đầu bao gồm:

  • định vị bút mượt mà hơn
  • bây giờ nhận dạng các lệnh gcode G02 (vòng cung theo chiều kim đồng hồ)
  • bây giờ nhận dạng các lệnh gcode G03 (cung ngược chiều kim đồng hồ)

Sơ đồ đính kèm phác thảo phương pháp tính góc cung của tôi.

Bước 12: Drum_plotter_v3.ino

Bản cập nhật mã cho "Máy vẽ trống CNC" được đính kèm.

"drum_plotter_v3.ino" sửa một lỗi nhỏ ảnh hưởng đến độ chính xác của máy vẽ.

Thay đổi lịch sử

Phiên bản 2:

Đã thêm đường cong hai cung

Phiên bản 3:

Các chức năng sau đây đã được viết lại để giải quyết một lỗi nhỏ ảnh hưởng đến độ chính xác của máy vẽ.

  • (int) được thay thế bằng round () trong hàm move_to ().
  • Thuật toán tìm kiếm "octant" của hàm draw_line () được cải thiện
  • Trình thông dịch bây giờ sử dụng các hàm chuỗi thay vì con trỏ để đơn giản hóa thiết kế. Ví dụ, bây giờ chúng ta có thể tìm kiếm "MENU" thay vì tìm kiếm chữ cái 'M', sau đó trích xuất số nguyên theo sau. Điều này cho phép bạn cá nhân hóa máy vẽ bằng các lệnh của riêng bạn.

Bước 13: Drum_plotter_plotter_v4.ino

Ngày 16 tháng 1 năm 2017:

Mã cho máy vẽ trống này đã được tối ưu hóa hơn nữa. Các tính năng bổ sung đã được thêm vào.

Những thay đổi bao gồm:

  • thuật toán draw_line () nhanh hơn
  • khớp với hàm move_to ()
  • bộ đếm bước
  • sửa lỗi nhỏ

Để biết thêm chi tiết, hãy đọc các bình luận trong "drum_plotter_v4.ino" đính kèm.

Nhấn vào đây để xem các tài liệu hướng dẫn khác của tôi.

Đề xuất: