Máy viết chữ tự động có ý nghĩa rất lớn về lĩnh vực sản xuất, giáo dục…Việc làm chủ và ứng dụng vào những lĩnh vực này vẫn còn nhiều hạn chế nhất định. Qua đề tài này em mong muốn sử dụng kiến thức đã học được trong thời gian sinh viên để thực hiện việc tiếp cận với công nghệ và xu hướng của thế giới.
Qua đồ án này em xin đề xuất một số hướng phát triển cho hệ thống: Có thể viết được ngay chữ và hình ảnh nhận diện được qua camera
Kết nối bluetooth truyền hình ảnh từ điện thoại và các thiết bị không dây khác để vẽ.
Phát triển nhiều font chữ nghệ thuật
Sản phẩm có thể biến thành một chiếc máy khắc lazer mini một cách đơn giản bằng việc thay thế cơ cấu gá bút thành đầu khắc lazer.
43
KẾT LUẬN
Sau thời gian hai tháng nỗ lực tìm hiểu và nghiên cứu, đến nay nhóm đồ án đã nắm được cơ sở lý thuyết điều khiển NC áp dụng vào máy viết chữ, nắm được các bước chế tạo một sản phẩm từ việc lên ý tưởng, mô phỏng đến lắp ráp hoàn thiện. Đồ án như một bước đệm nhỏ trong sự phát triển của xu hướng tự động hóa, hiện đại hóa hiện nay, phục vụ trực tiếp cho đời sống sinh hoạt và sản xuất của con người.
Từ sản phẩm “Quạt điện thông minh” đã nghiên cứu nhóm đồ án muốn nghiên cứu, phát triển sản phẩm hơn trong tương lai với những tính năng tiện lợi và hiện đại hơn, phát triển thêm app trên điện thoại. Qua đó giúp sản phẩm dễ dàng sử dụng, nâng cao hiệu suất đáp ứng nhu cầu xã hội hiện nay.
Sau thời gian nỗ lực tìm hiểu, nghiên cứu và hoàn thiện đồ án, đến nay đồ án tốt nghiệp đã được hoàn thành đúng hạn với sự cố gắng của nhóm trong khả năng làm việc chung và phân chia nhiệm vụ về việc tìm hiểu sản phẩm, ứng dụng và chế tạo thành công sản phẩm thực tế. Bằng những kiến thức đã được trang bị ở trường và tìm hiểu một số tài liệu tham khảo có liên quan đến vấn đề đang nghiên cứu, nhóm sinh viên đã cố gắng trình bày đồ án một cách ngắn gọn và đầy đủ nhất. Tuy nhiên do trình độ còn hạn chế, kinh nghiệm thực tế còn chưa nhiều nên đề tài của nhóm còn có nhiều khiếm khuyết. Qua đây, nhóm mong muốn nhận được ý kiến đóng góp của các thầy cô giáo và các bạn sinh viên để đồ án của nhóm ngày càng hoàn thiện hơn.
44
TÀI LIỆU THAM KHẢO
[1] Nguyễn Anh Tuấn, Cơ sở kỹ thuật CNC, Đại học Sư phạm kỹ thuật – Tp Hồ Chí Minh, tháng 04 năm 2001.
[2] Nguyễn Xuân Hùng, Trần Ngọc Bình, Động cơ bước – Kỹ thuật điều khiển và ứng dụng, Nhà xuất bản khoa học và kỹ thuật Hà Nội.
[3] Nguyễn Trọng Hiệp, Chi tiết máy tập 2, NXB Giáo Dục, 2003
[4] Phạm Quang Huy, Lê Cảnh Trung, Lập trình điều khiển với Adruino, NXB Khoa học và kĩ thuật, 2014
[5] https://www.instructables.com
[6] http://www.arduino.cc/
[7] http://www.google.com.vn
45
PHỤ LỤC
1. Chức năng các chân I/O trong chương trình và các chân tương ứng trên module Arduino.
Hình 4.3 Sơ đồ chân Adruino nano
Bảng 5 Chức năng các chân Adruino nano
Thứ tự
chân Tên Pin Kiểu Chức năng
1 D1 / TX I / O
Ngõ vào/ra số Chân TX-truyền dữ liệu
46
Chân Rx-nhận dữ liệu 3 RESET Đầu vào Chân reset, hoạt động ở mức thấp
4 GND Nguồn Chân nối mass
5 D2 I / O Ngõ vào/ra digital 6 D3 I / O Ngõ vào/ra digital 7 D4 I / O Ngõ vào/ra digital 8 D5 I / O Ngõ vào/ra digital 9 D6 I / O Ngõ vào/ra digital 10 D7 I / O Ngõ vào/ra digital 11 D8 I / O Ngõ vào/ra digital 12 D9 I / O Ngõ vào/ra digital 13 D10 I / O Ngõ vào/ra digital 14 D11 I / O Ngõ vào/ra digital 15 D12 I / O Ngõ vào/ra digital 16 D13 I / O Ngõ vào/ra digital
17 3V3 Đầu ra Đầu ra 3.3V (từ FTDI)
18 AREF Đầu vào Tham chiếu ADC
19 A0 Đầu vào Kênh đầu vào tương tự kênh 0 20 A1 Đầu vào Kênh đầu vào tương tự kênh 1 21 A2 Đầu vào Kênh đầu vào tương tự kênh 2
22 A3 Đầu vào Kênh đầu vào tương tự kênh 3 23 A4 Đầu vào Kênh đầu vào tương tự kênh 4
47
24 A5 Đầu vào Kênh đầu vào tương tự kênh 5 25 A6 Đầu vào Kênh đầu vào tương tự kênh 6 26 A7 Đầu vào Kênh đầu vào tương tự kênh 7
27 + 5V Đầu ra hoặc đầu vào
+ Đầu ra 5V (từ bộ điều chỉnh On-board) hoặc
+ 5V (đầu vào từ nguồn điện bên ngoài) 28 RESET Đầu vào Chân đặt lại, hoạt động ở mức thấp
29 GND Nguồn Chân nối mass
48 2. Động cơ bước
Bảng 6 Danh sách động cơ bước NEMA thường gặp được phân loại dựa trên thông số kích thước bên ngoài.
Loại A (mm) B (mm) C D (mm) NEMA 11 28,2 23 Bu-lông M2.5 5 NEMA 14 35,2 26 Bu-lông M3 5 NEMA 17 42,3 31 Bu-lông M3 5 NEMA 23 56,4 47,1 Bu-lông 5,5 6,35 NEMA 34 86 69,6 Bu-lông 5,5 14 NEMA 42 110 89 Bu-lông 8,5 19
49 3. Bản vẽ lắp sản phẩm
50 4.Sơ đồ nguyên lý
51 5.Sơ đồ giải thuật
52 6. Code chương trình:
#include <Servo.h> #include <AFMotor.h>
#define LINE_BUFFER_LENGTH 512
char STEP = MICROSTEP;
// Vị trí Servo cho Lên và Xuống const int penZUp = 120;
const int penZDown = 50;
// Servo trên PWM pin 10 const int penServoPin = 10;
// Nên phù hợp với các bước của DVD, nhưng không quá quan trọng ở đây const int stepsPerRevolution = 48;
// tạo đối tượng servo để điều khiển một servo Servo penServo;
// Khởi tạo các bước cho trục X và Y bằng cách sử dụng các chân Arduino này cho cầu H L293D
AF_Stepper myStepperY (stepPerRevolution, 1); AF_Stepper myStepperX (stepPerRevolution, 2);
/ * Cấu trúc, biến toàn cục * / điểm cấu trúc {
53 phao y;
float z; };
// Vị trí hiện tại của tiêu đề struct point actuatorPos;
// Cài đặt bản vẽ, sẽ được float StepInc = 1;
int StepDelay = 1; int LineDelay = 0; int penDelay = 50;
// Động cơ bước đi 1 milimet.
// Sử dụng bản phác thảo thử nghiệm để đi 100 bước. Đo độ dài đoạn thẳng. // Tính số bước trên mm. Điền vào đây.
float StepsPerMillimeterX = 100.0; float StepsPerMillimeterY = 100.0;
// Vẽ giới hạn rô bốt, tính bằng mm
// OK để bắt đầu. Có thể tăng lên đến 50 mm nếu được hiệu chỉnh tốt. float Xmin = 0; float Xmax = 200; float Ymin = 0; float Ymax = 300; float Zmin = 0; float Zmax = 1;
54 float Xpos = Xmin;
float Ypos = Ymin; float Zpos = Zmax;
// Đặt thành true để nhận đầu ra gỡ lỗi. boolean verbose = false;
// Cần giải thích // G1 để di chuyển
// G4 P300 (đợi 150 mili giây) // M300 S30 (bút xuống) // M300 S50 (bút lên)
// Loại bỏ bất cứ thứ gì có dấu ( // Bỏ bất kỳ lệnh nào khác!
/ ********************** * void setup () - Khởi tạo *********************** / void setup () { // Cài đặt Serial.begin (9600); penServo.attach (penServoPin); penServo.write (penZUp); chậm trễ (100);
55 myStepperX.setSpeed (600);
myStepperY.setSpeed (600);
// Đặt & di chuyển đến vị trí mặc định ban đầu // TBD
// Thông báo !!!
Serial.println ("Máy cắt CNC mini còn sống và đang hoạt động!"); Serial.print ("Phạm vi X là từ"); Serial.print (Xmin); Serial.print ("to"); Serial.print (Xmax); Serial.println ("mm."); Serial.print ("Phạm vi Y là từ"); Serial.print (Ymin); Serial.print ("to"); Serial.print (Ymax); Serial.println ("mm."); } / ********************** * void loop () - Vòng lặp chính *********************** / void loop () {
56 chậm trễ (100);
dòng ký tự [LINE_BUFFER_LENGTH]; ký tự c;
int lineIndex;
bool lineIsComment, lineSemiColon;
lineIndex = 0;
lineSemiColon = false; lineIsComment = false;
trong khi (1) {
// Tiếp nhận nối tiếp - Chủ yếu từ Grbl, hỗ trợ thêm dấu chấm phẩy while (Serial.available ()> 0) {
c = Serial.read ();
if ((c == '\ n') || (c == '\ r')) {// Đã đến cuối dòng
if (lineIndex> 0) {// Dòng hoàn tất. Sau đó thực hiện! line [lineIndex] = '\ 0'; // Chấm dứt chuỗi
nếu (dài dòng) {
Serial.print ("Đã nhận:"); Serial.println (dòng); }
processIncomingLine (line, lineIndex); lineIndex = 0;
} khác {
// Dòng chú thích hoặc trống. Bỏ qua khối. }
57 lineIsComment = false; lineSemiColon = false; Serial.println ("ok"); } khác { if ((lineIsComment) || (lineSemiColon)) {// Bỏ tất cả các ký tự nhận xét if (c == ')') lineIsComment = false; // Kết thúc bình luận. Tiếp tục dòng. }
khác {
if (c <= '') {// Bỏ khoảng trắng và các ký tự điều khiển }
else if (c == '/') {// Không hỗ trợ xóa khối. Bỏ qua nhân vật. }
else if (c == '(') {// Bật cờ nhận xét và bỏ qua tất cả các ký tự cho đến khi ')' hoặc EOL. lineIsComment = true; } khác nếu (c == ';') { lineSemiColon = true; }
khác nếu (lineIndex> = LINE_BUFFER_LENGTH-1) { Serial.println ("LỖI - tràn bộ đệm dòng");
lineIsComment = false; lineSemiColon = false; }
else if (c> = 'a' && c <= 'z') {// Chữ thường viết hoa line [lineIndex ++] = c-'a '+' A ';
} khác {
58 line [lineIndex ++] = c; } } } } } }
void processIncomingLine (char * line, int charNB) { int currentIndex = 0;
đệm char [64]; // Mong rằng 64 là đủ cho 1 tham số struct point newPos;
newPos.x = 0,0; newPos.y = 0,0;
// Cần giải thích // G1 để di chuyển
// G4 P300 (đợi 150 mili giây) // G1 X60 Y30 // G1 X30 Y50 // M300 S30 (bút xuống) // M300 S50 (bút lên) // Loại bỏ bất cứ thứ gì có dấu ( // Bỏ bất kỳ lệnh nào khác! while (currentIndex <charNB) {