Sửa chữa Robot đồ chơi công nghệ
Sửa chữa Robot dân dụng

Sử dụng GRBL 0.9 trên Arduino UNO và CNC Shield v3

Đăng lúc: Thứ sáu - 28/10/2016 10:40 - Người đăng bài viết: SuperG
Sử dụng GRBL 0.9 trên Arduino UNO và CNC Shield v3

Sử dụng GRBL 0.9 trên Arduino UNO và CNC Shield v3

GRBL là một firmware sử dụng cho một số mạch điều khiển máy CNC, in 3D DLP. Với đặc điểm mã nguồn mở, cực kỳ dễ sử dụng, đặc biệt hỗ trợ mạch Arduino (Arduino UNO R3 và CNC Shield), GRBL là một trong những lựa chọn hàng đầu khi xây dựng các dạng máy CNC mini.

(Đây là tài liệu tổng hợp được sưu tầm từ nhiều nguồn khác nhau trên Internet với mục tiêu chia sẻ kinh nghiệm và hướng dẫn người yêu công nghệ thực hành trên lĩnh vực in 3D hoàn toàn phi lợi nhuận. )

So với các phiên bản trước (0.8; 0.7; ...), GRBL phiên bản 0.9 có thêm nhiều tính năng bổ sung rất hiệu quả. Một số tính năng tiêu biểu của firmware GRBL 0.9 có thể kể tới:

  • Tương thích 100% với board Arduino CNC Shield v3 (chỉ cần đảo chân tín hiệu, chi tiết sẽ được trình bày trong bài)
  • Tốc độ truyền nhận dữ liệu với máy tính, Baud Rate = 115200
  • Tính năng Probing (đo độ cao bề mặt phôi và tự bù lại khi gia công)
  • Có thể thay đổi theo Gcode tốc độ spindle, công suất laser bằng PWM

Kết nối phần cứng (Arduino UNO R3 + CNC Shield + A4988/DRV8825):



UNO for Arduino---------------------- expansion board
8 ------------------------ EN ( stepper motor driver enable , active low )
7 ----------------------- Z.DIR (Z -axis direction control )
6 ----------------------- Y.DIR (Y -axis direction control )
5 ----------------------- X.DIR (X -axis direction control )
4 ---------------------- Z.STEP (Z -axis stepper control )
3 ---------------------- Y.STEP (Y -axis stepper control )
2 ---------------------- X.STEP (X -axis stepper control )

The following is a simple stepper motor control procedures:

# define EN 8 / / stepper motor enable , active low
# define X_DIR 5 / / X -axis stepper motor direction control
# define Y_DIR 6 / / y -axis stepper motor direction control
# define Z_DIR 7 / / z axis stepper motor direction control
# define X_STP 2 / / x -axis stepper control
# define Y_STP 3 / / y -axis stepper control
# define Z_STP 4 / / z -axis stepper control
/ *
/ / Function : step . function: to control the direction of the stepper motor , the number of steps .
/ / Parameters : dir direction control , dirPin corresponding stepper motor DIR pin , stepperPin corresponding stepper motor " step " pin , Step number of step of no return value.

* /
void step (boolean dir, byte dirPin, byte stepperPin, int steps)
{
digitalWrite (dirPin, dir);
delay (50);
for (int i = 0; i digitalWrite (stepperPin, HIGH);
delayMicroseconds (800);
digitalWrite (stepperPin, LOW);
delayMicroseconds (800);
}
}
void setup () {/ / The stepper motor used in the IO pin is set to output
pinMode (X_DIR, OUTPUT); pinMode (X_STP, OUTPUT);
pinMode (Y_DIR, OUTPUT); pinMode (Y_STP, OUTPUT);
pinMode (Z_DIR, OUTPUT); pinMode (Z_STP, OUTPUT);
pinMode (EN, OUTPUT);
digitalWrite (EN, LOW);
}
void loop () {
step (false, X_DIR, X_STP, 200); / / X axis motor reverse 1 ring, the 200 step is a circle.
step (false, Y_DIR, Y_STP, 200); / / y axis motor reverse 1 ring, the 200 step is a circle.
step (false, Z_DIR, Z_STP, 200); / / z axis motor reverse 1 ring, the 200 step is a circle.
delay (1000);
step (true, X_DIR, X_STP, 200); / / X axis motor forward 1 laps, the 200 step is a circle.
step (true, Y_DIR, Y_STP, 200); / / y axis motor forward 1 laps, the 200 step is a circle.
step (true, Z_DIR, Z_STP, 200); / / z axis motor forward 1 laps, the 200 step is a circle.
delay (1000);
}

Note: When inserting the A4988 module, must be careful not to insert opposite. Stepper motor wiring as follows:


2A, 2B is a group (red, green), 1A, 1B is a group (blue, yellow), if want to change direction, can be change the position of one group , for example 2A, 2B mutually exchanged.

 

Các máy CNC (laser) mini có thể sử dụng một bộ mạch điều khiển gồm có:

Các mạch nêu trên ghép nối với nhau rất dễ dàng, chỉ cần lưu ý chiều của môđun động cơ bước như trong hình sau (với A4988 và với DRV8825).

Hình ảnh

Ở bản 0.9, GRBL bổ sung thêm tính năng điều khiển tốc độ spindle hoặc (cường độ laser) bằng PWM (điều chỉnh độ rộng xung), do vậy có một sự thay đổi nhỏ trong thiết lập chân ra của firmware. Khi sử dụng GRBL 0.9 với CNC shield, chỉ cần lưu ý đảo 2 chân Z+ (Z-) và chân SpnEn như hình sau:

Như vậy khi dùng GRBL 0.9 với CNC shield: chân Z+ (nối thông mạch với Z-) sẽ được dùng để điều khiển tốc dộ spindle (hoặc cường độ tia laser). Còn chân SpnEn sẽ được dùng để cắm dây tín hiệu của cảm biến Endstop trục Z.

Axis Configuration

Using two jumpers the 4th axis can be configured to clone the X or Y or Z axis. It can also run as an individual axis by using Digital Pin 12 for Stepping signal and Digital Pin 13 as direction signal. (GRBL only supports 3 axis’s at the moment)

Clone X-Axis to the 4th stepper driver(Marked as A)Arduino-CNC-Shield-V3-4th Clone X-Axis

Clone Y-Axis to the 4th stepper driver(Marked as A)Arduino-CNC-Shield-V3-4th Clone Y-Axis

Clone Z-Axis to the 4th stepper driver(Marked as A)Arduino-CNC-Shield-V3-4th Clone Z-Axis

Use D12 and D13 to drive the 4th stepper driver(Marked as A)Arduino-CNC-Shield-V3-4th D12-D13

End Stop Configuration

By default GRBL is configured to trigger an alert if an end-stop goes low(Gets grounded). On the forums this has been much debated and some people requested to have active High end-stops. The jumpers in the picture provides the option to do both. (To run with default setting on GRBL the jumper need to be connected like the left shield in the image below)(This Jumper was only introduced in Version 3.02)
End-stop Configuration Active LOWorHIGH

End-stop switches are standard “always open” switches. An End-stop gets activated when the end-stop pin connects to ground(When setup with default GRBL settings).
EndStopWiring

Configuring Micro Stepping for Each Axis

Each axis has 3 jumpers that can be set to configure the micro stepping for the axis.

Arduino_CNC_Shield_Micro_Stepping_Settings

In the tables below High indicates that a Jumper is insert and Low indicates that no jumper is inserted.

Pololu A4988 Stepper Driver configuration:

MS0 MS1 MS2 Microstep Resolution
Low Low Low Full step
High Low Low Half step
Low High Low Quarter step
High High Low Eighth step
High High High Sixteenth step

Pololu DRV8825 Stepper Driver configuration:

MODE0 MODE1 MODE2 Microstep Resolution
Low Low Low Full step
High Low Low Half step
Low High Low 1/4 step
High High Low 1/8 step
Low Low High 1/16 step
High Low High 1/32 step
Low High High 1/32 step
High High High 1/32 step

Example of full micro stepping (All 3 jumpers inserted for all axes ):

Full Micro Stepping

 

Nạp firmware GRBL vào Arduino UNO R3:

Trước tiên, download fỉmware GRBL bản mới nhất tại địa chỉ: https://github.com/grbl/grbl. Tính tời thời điểm viết bài này, firmware mới nhất là “Grbl v0.9j Atmega328p 16mhz 115200baud with generic defaults”, cập nhật ngày 2015-09-30. Định dạng file là *.hex. Bản 0.9j có thể download tại link sau: download

Tiếp theo, download phần mềm XLoader để nạp trực tiếp file hex vào Arduino UNO: download

Kết nối Arduino UNO với máy tính, mở phần mềm XLoader, chọn file hex vừa tải về, chọn thiết bị là Uno(ATmega328), chọn cổng COM ứng với board Arduino UNO, chọn Baud rate 115200 như hình dưới. Sau đó click Upload.

Sau vài giây, phần mềm XLoader sẽ có thông báo Upload firmware thành công vào mạch Arduino Uno.

Cài đặt thông số máy CNC (laser) mini vào firmware GRBL bằng Universal Gcode Sender:

Universal Gcode Sender (UGS) là phần mềm miễn phí có thể dùng để điều khiển máy CNC (laser) mini sử dụng firmware GRBL. Download UGS phiên bản mới nhất theo đường link sau: https://github.com/winder/Universal-G-Code-Sender. Phiên bản mới nhất tính tới ngày viết bài hướng dẫn này là 1.0.8 (download), sau khi giải nén file download về thu được thư mục chứa file "UniversalGcodeSender.jar"

Để sử dụng được UGS, máy tính cần phải cài Java, download Java theo đường link sau: https://java.com/en/download/

Sau khi cài Java, kết nối board Arduino UNO với máy tính, click vào file "UniversalGcodeSender.jar".

 

  • Port: tên cổng COM của kết nối giữa board Arduino UNO với máy tính.
  • Baud: chọn 115200

Click Open để kết nối UGS với Arduino UNO. Nếu kết nối thành công, trong mục Console sẽ có thông báo

**** Connected to COM7 @ 115200 baud ****

Grbl 0.9j ['$' for help]

Vào mục Settings => Firmware Settings => GRBL để thiết lập các thông số của máy.

Hình ảnh

  • $0: thời gian mỗi xung cấp tới động cơ bước, tính bằng micro giây. Mỗi một động cơ có đặc tính thông số thời gian kéo dài của xung điện áp khác nhau. Quy tắc điều chỉnh là giảm thời gian mỗi xung xuống càng thấp càng tốt miễn là động cơ chạy ổn định. Giá trị mặc định là 10 us.
  • $1: thời gian đợi để tắt động cơ, tính bằng mili giây. Sau khi động cơ hoàn thành xong một chuyển động hoặc dừng hẳn, mạch điều khiển vẫn tiếp tục cấp điện cho động cơ trong thời gian ứng với giá trị $1. Nếu muốn để mạch điều khiển luôn luôn cấp nguồn cho động cơ (động cơ luôn ở chế độ được cấp điện), đặt giá trị $1 = 255. Thông thường với những máy sử dụng đai GT2, có thể đặt giá trị $1 = 255, tuy nhiên khi đó động cơ có thể nóng hơn bình thường một chút.
  • $2: thiết lập đảo mức điện áp tín hiệu điều khiển động cơ bước. Chức năng này sử dụng để đảo ngược mức tín hiệu (5V <-> 0V) của tín hiệu điều khiển động cơ. Thông thường thiết lập này không cần sử dụng tới trừ trường hợp với một vài driver đặc biệt.

Hình ảnh

Cách sử dụng $2 như bảng trên: ví dụ khi muốn đảo mức tín hiệu điều khiển động cơ bước của trục Z, các trục X và Y không thay đổi, ta thiết lập: $2 = 4.

  • $3: thiết lập đảo mức tín hiệu điều khiển hướng động cơ của mỗi trục. Thiết lập này tương đương với đảo thứ tự toàn bộ chân các dây điều khiển của động cơ bước và dùng để đảo chiều chuyển động ( âm hoặc dương) của động cơ. Cách thiết lập trục nào sẽ bị đảo hướng chuyển động cũng giống như đối với $2. Ví dụ  muốn đảo hướng chuyển động của trục Y, ta sửa giá trị $3 = 2.
  • $4: thiết lập dảo ngược tín hiệu kích hoạt động cơ cho tất cả các trục. Thông thường thiết lạp này không cần sử dụng và có thể để mặc định $4 = 0.
  • $5: thiết lập đảo ngược tín hiệu kích hoạt Endstop (cảm biến giới hạn hành trình máy) cho tất cả các trục. Nếu $5 = 0, mạch điều khiển sẽ xem tín hiệu kích hoạt Endstop là mức 0 (0V). Nếu $5 = 1, mạch điều khiển sẽ xem tín hiệu kích hoạt Endstop là mức 1 (+5V).
  • $6: thiết lập đảo ngược tín hiệu kích hoạt cảm biến dò bề mặt phôi. Khi sử dụng chức năng dò bề mặt phôi (kiểm tra độ cao các điểm trên bề mặt phôi để bù lại khi gia công), nếu $6 = 0 mạch điều khiển sẽ xem tín hiệu kích hoạt đầu dò là mức 0 (0V). Nếu $6 = 1 mạch điều khiển sẽ xem tín hiệu kích hoạt đầu dò là mức 1 (+5V). Lưu ý, khi đặt $6 = 1, cần phải bổ sung thêm một trở nối đất cho chân tín hiệu đầu dò.
  • $10: thiết lập phản hồi trạng thái của máy khi đang chạy:

Nạp firmware GRBL vào Arduino UNO R3: :haha: 
Trước tiên, download fỉmware GRBL bản mới nhất tại địa chỉ: https://github.com/grbl/grbl. Tính tời thời điểm viết bài này, firmware mới nhất là “Grbl v0.9j Atmega328p 16mhz 115200baud with generic defaults”, cập nhật ngày 2015-09-30. Định dạng file là *.hex. Bản 0.9j có thể download tại link sau: download
Tiếp theo, download phần mềm XLoader để nạp trực tiếp file hex vào Arduino UNO: download
Kết nối Arduino UNO với máy tính, mở phần mềm XLoader, chọn file hex vừa tải về, chọn thiết bị là Uno(ATmega328), chọn cổng COM ứng với board Arduino UNO, chọn Baud rate 115200 như hình dưới. Sau đó click Upload.
Hình ảnh
Sau vài giây, phần mềm XLoader sẽ có thông báo Upload firmware thành công vào mạch Arduino Uno.

Cài đặt thông số máy CNC (laser) mini vào firmware GRBL bằng Universal Gcode Sender: :haha: 

Universal Gcode Sender (UGS) là phần mềm miễn phí có thể dùng để điều khiển máy CNC (laser) mini sử dụng firmware GRBL. Download UGS phiên bản mới nhất theo đường link sau: https://github.com/winder/Universal-G-Code-Sender. Phiên bản mới nhất tính tới ngày viết bài hướng dẫn này là 1.0.8 (download), sau khi giải nén file download về thu được thư mục chứa file “UniversalGcodeSender.jar”
Để sử dụng được UGS, máy tính cần phải cài Java, download Java theo đường link sau: https://java.com/en/download/
Sau khi cài Java, kết nối board Arduino UNO với máy tính, click vào file “UniversalGcodeSender.jar”, giao diện UGS sẽ hiện ra như sau:


 

 

  • Port: tên cổng COM của kết nối giữa board Arduino UNO với máy tính.
  • Baud: chọn 115200

Click Open để kết nối UGS với Arduino UNO. Nếu kết nối thành công, trong mục Console sẽ có thông báo



MÃ: CHỌN HẾT

**** Connected to COM7 @ 115200 baud ****

Grbl 0.9j [‘$’ for help]


Vào mục Settings => Firmware Settings => GRBL để thiết lập các thông số của máy.
 


  • $0: thời gian mỗi xung cấp tới động cơ bước, tính bằng micro giây. Mỗi một động cơ có đặc tính thông số thời gian kéo dài của xung điện áp khác nhau. Quy tắc điều chỉnh là giảm thời gian mỗi xung xuống càng thấp càng tốt miễn là động cơ chạy ổn định. Giá trị mặc định là 10 us.
  • $1: thời gian đợi để tắt động cơ, tính bằng mili giây. Sau khi động cơ hoàn thành xong một chuyển động hoặc dừng hẳn, mạch điều khiển vẫn tiếp tục cấp điện cho động cơ trong thời gian ứng với giá trị $1. Nếu muốn để mạch điều khiển luôn luôn cấp nguồn cho động cơ (động cơ luôn ở chế độ được cấp điện), đặt giá trị $1 = 255. Thông thường với những máy sử dụng đai GT2, có thể đặt giá trị $1 = 255, tuy nhiên khi đó động cơ có thể nóng hơn bình thường một chút.
  • $2: thiết lập đảo mức điện áp tín hiệu điều khiển động cơ bước. Chức năng này sử dụng để đảo ngược mức tín hiệu (5V <-> 0V) của tín hiệu điều khiển động cơ. Thông thường thiết lập này không cần sử dụng tới trừ trường hợp với một vài driver đặc biệt.



Cách sử dụng $2 như bảng trên: ví dụ khi muốn đảo mức tín hiệu điều khiển động cơ bước của trục Z, các trục X và Y không thay đổi, ta thiết lập: $2 = 4.


  • $3: thiết lập đảo mức tín hiệu điều khiển hướng động cơ của mỗi trục. Thiết lập này tương đương với đảo thứ tự toàn bộ chân các dây điều khiển của động cơ bước và dùng để đảo chiều chuyển động ( âm hoặc dương) của động cơ. Cách thiết lập trục nào sẽ bị đảo hướng chuyển động cũng giống như đối với $2. Ví dụ muốn đảo hướng chuyển động của trục Y, ta sửa giá trị $3 = 2.
  • $4: thiết lập dảo ngược tín hiệu kích hoạt động cơ cho tất cả các trục. Thông thường thiết lập này không cần sử dụng và có thể để mặc định $4 = 0.
  • $5: thiết lập đảo ngược tín hiệu kích hoạt Endstop (cảm biến giới hạn hành trình máy) cho tất cả các trục. Nếu $5 = 0, mạch điều khiển sẽ xem tín hiệu kích hoạt Endstop là mức 0 (0V). Nếu $5 = 1, mạch điều khiển sẽ xem tín hiệu kích hoạt Endstop là mức 1 (+5V).
  • $6: thiết lập đảo ngược tín hiệu kích hoạt cảm biến dò bề mặt phôi. Khi sử dụng chức năng dò bề mặt phôi (kiểm tra độ cao các điểm trên bề mặt phôi để bù lại khi gia công), nếu $6 = 0 mạch điều khiển sẽ xem tín hiệu kích hoạt đầu dò là mức 0 (0V). Nếu $6 = 1 mạch điều khiển sẽ xem tín hiệu kích hoạt đầu dò là mức 1 (+5V). Lưu ý, khi đặt $6 = 1, cần phải bổ sung thêm một trở nối đất cho chân tín hiệu đầu dò.
  • $10: thiết lập phản hồi trạng thái của máy khi đang chạy:

Hình ảnh


Mục đích của thiết lập là cho phép người dùng chọn lựa/loại bỏ một số thông tin trạng thái của máy cần theo dõi. Thông thường càng ít thông số cần theo dõi càng tiết kiệm được tài nguyên của mạch điều khiển. Các thông số có thể chọn/loại bỏ trình bày như trong hình trên gồm có: Machine Position (vị trí máy); Work Position (vị trí gia công); Planner Buffer (bộ nhớ đệm lưu các bước gia công tiếp theo); RX Buffer (bộ nhớ đệm nhận tín hiệu); Limit Pins (trạng thái các chân tín hiệu Endstop).

Cách sử dụng: ví dụ nếu muốn mạch điều khiển chỉ gửi về thông số Machine Position và Work Position, đặt giá trị: $6 = 1+2 = 3.



  • $11: thiết lập giá trị gia tốc của dao khi di chuyển qua các điểm nối giữa các cạnh cần gia công. Giá trị gia tốc này càng cao, máy chạy càng nhanh nhưng khả năng xảy ra sai lệch kích thước càng lớn và ngược lại.
  • $12: thiết lập độ chính xác gia công các cung tròn/đoạn cong, tính theo milimét. Thông thường giá trị này không cần phải thay đổi trừ khi cần giá trị khác. Nếu muốn gia công các cung tròn nhanh hơn, có thể tăng giá trị $12 lên một chút.
  • $13: thiết lập thông báo trạng thái làm việc của máy theo đơn vị Inch hay không. Nếu $13 = 0, máy sẽ báo trạng thái làm việc theo đơn vị mm. Nếu $13 = 0, máy sẽ báo trạng thái làm việc theo đơn vị inch.
  • $20: thiết lập chức năng giới hạn hành trình bằng phần mềm. Khi kích hoạt tính năng này (bằng cách đặt giá trị $20 = 1), mạch điều khiển sẽ chỉ cho phép dao di chuyển trong giới hạn cho phép (xem $130; $131; $132) tính từ gốc tọa độ. Khi muốn dùng tính năng này bắt buộc phải bật tính năng về gốc tọa độ ($22) trước.
  • $21: thiết lập chức năng giới hạn hành trình bằng Endstop. Khi kích hoạt tính năng này (bằng cách đặt giá trị $21 = 1), mạch điều khiển sẽ tự động dừng toàn bộ máy khi có bất kỳ Endstop nào kích hoạt. Thông thường tính năng này không cần dùng đến, trừ một số trường hợp đặc biệt.
  • $22: thiết lập chức năng về gốc tọa độ. Khi kích hoạt tính năng này (bằng cách đặt giá trị $22 = 1), mỗi lần khởi động máy, dao sẽ được tự động di chuyển về gốc tọa độ (được xác định bằng 3 Endstop ứng với trục X; Y; Z). Trong quá trình di chuyển về gốc tọa độ, mạch điều khiển sẽ không thực hiện bất cứ một lệnh nào khác cho tới khi về tới vị trí của 3 Endstop.
  • $23: thiết lập hướng di chuyển về gốc tọa độ (sử dụng khi đảo ngược hướnglắp Endstop trên trục). Cách sử dụng giống như với $2.
  • $24: tốc độ về gốc tọa độ chậm (mm/phút). Khi về gốc tọa độ, đầu tiên dao sẽ di chuyển nhanh (tốc độ về gốc tọa độ nhanh $25) từ vị tri hiện tại. Khi gặp Endstop, dao sẽ được di chuyển ngược lại và sau đó di chuyển chậm (tốc độ về gốc tọa độ chậm $24) để đảm bảo độ chính xác. Giá trị $24 càng nhỏ thì vị trí xác định khi gặp Endstop càng chính xác, tuy nhiên càng mất thời gian hơn.
  • $25: tốc độ về gốc tọa độ nhanh (mm/phút). Xem giải thích tại $24.
  • $26: thiết lập độ trễ (delay, mili giây) khi kiểm tra tín hiệu Endstop khi về gốc tọa độ. Để giảm ảnh hưởng do nhiễu tín hiệu điện, mạch điều khiển sẽ tạo một thời gian trễ khi nhận được tín hiệu kích hoạt từ Endstop. Thông thường giá trị này nằm trong khoảng 5 – 25 ms.
  • $27: thiết lập di chuyển sau khi đã về gốc tọa độ (mm). Sau khi đã về gốc tọa độ, dao sẽ được di chuyển theo chiều ngược lại một quãng bằng giá trị $27 theo tất cả các trục.
  • $100; $101; $102: thiết lập số bước của động cơ ứng với 1mm theo các trục X; Y; Z tương ứng.
  • $110; $111; $112: thiết lập tốc độ di chuyển cực đại của dao theo mỗi trục X; Y; Z tương ứng (mm/phút). Khi kiểm tra máy, ban đầu có thể đặt giá trị này thật thấp, sau đó tăng dần tới khi động cơ hoạt động mượt nhất.
  • $120; $121; $122: thiết lập gia tốc di chuyển dao ứng với mỗi trục X; Y; Z tương đương (mm/s2). Nếu đặt giá trị gia tốc quá thấp, dao có thể không bao giờ tăng tới vận tốc cao nhất được. Tuy nhiên nếu để gia tốc quá cao, động cơ có thể bị mất mốt số bước khi hoạt động.
  • $130; $131; $132: thiết lập hành trình tối đa (kích thước gia công tối đa) theo các trục X; Y; Z tương ứng (mm). Các thiết lập này chỉ cần thiết khi đã kích hoạt tính năng $20.

Sau khi chọn xong các giá trị ứng với các chức năng, click Save để lưu các thiết lập vào mạch điều khiển.
--------------------------------------------------


Các lưu ý khác khi sử dụng firmware GRBL (điều khiển công suất spindle, laser…) sẽ được trình bày trong bài hướng dẫn sau.

 

Nguồn tổng hợp MME,TAEVN,HSSHOP, ARDUINOVN, 3DPRINTER,C-GEN...

Đánh giá bài viết
Tổng số điểm của bài viết là: 23 trong 5 đánh giá
Click để đánh giá bài viết
 

Giới thiệu sản phẩm dịch vụ

Giới thiệu sản phẩm dịch vụ Giới thiệu sản phẩm dịch vụ: * Cung cấp giải pháp, thiết kế các sản phẩm máy in 3D * Bán và phân phối các dòng máy in 3D toàn quốc * Lắp ráp và sản xuất máy in 3D ngay tại Hà Nội - Việt Nam * Sửa chữa máy in...

Liên kết

Scan 3D Hanoi
May in 3D Ha Noi
1 1 1