Mục lục:

Trình viết mã Arduino Morse: 7 bước (có hình ảnh)
Trình viết mã Arduino Morse: 7 bước (có hình ảnh)

Video: Trình viết mã Arduino Morse: 7 bước (có hình ảnh)

Video: Trình viết mã Arduino Morse: 7 bước (có hình ảnh)
Video: Viết chương trình Arduino với trí thông minh nhân tạo ChatGPT - Lập trình chưa bao giờ dể dàng hơn 2024, Tháng mười một
Anonim
Image
Image
Trình viết mã Arduino Morse
Trình viết mã Arduino Morse

Tôi đã tạo ra một con rô bốt có thể chuyển đổi bất kỳ văn bản nhất định nào thành mã Morse và sau đó viết nó ra !! Nó được làm bằng bìa cứng và Lego và đối với các thiết bị điện tử, tôi sử dụng Arduino và chỉ có hai động cơ.

Quân nhu

Bo mạch Arduino Uno Động cơ bước Mô-đun điều khiển động cơ bước Micro servo SG90ULN2003 Mô-đun nguồn điện Mô-đun nguồn điện Breadboard 4 × Dây jumper 6 × Dây dupont Nữ-to-Nam9V1A Cáp USB 2 × Chốt bằng gỗ 2 × Lò xo Rơm Giấy trắngLegoSuper Keo bắn keo nóng Dây thun (để làm một ống đựng bút) Kéo cắt

Bước 1: Xây dựng cơ sở

Xây dựng cơ sở
Xây dựng cơ sở
Xây dựng cơ sở
Xây dựng cơ sở
Xây dựng cơ sở
Xây dựng cơ sở

Bắt đầu bằng cách xây dựng cơ sở. Mine có chiều rộng 4 đinh và dài 20 đinh, sau khi xây dựng một lớp với độ dài đó, tôi xây một bảng nội trú rộng một đinh xung quanh nó để lại một khoảng trống ở một bên để tạo không gian cho động cơ bước, sau đó tôi thêm miếng gạch vào phần giữa nơi dải giấy sẽ ở. Sử dụng Lego làm cho nó rất chắc chắn và dễ sửa đổi. Để làm cuộn giấy, tôi cắt các dải giấy A4 có chiều rộng 1,2cm (tôi chọn chiều rộng này vì nó bằng chiều rộng của bánh xe Lego mà tôi đã sử dụng, bạn có thể làm to hơn hoặc nhỏ hơn tùy thuộc vào bánh xe của bạn) và tôi dán các đầu của chúng lại với nhau để tạo thành một dải rất dài, sau đó tôi quấn nó quanh bánh xe.

Bước 2: Mảnh Servo

Mảnh Servo
Mảnh Servo
Mảnh Servo
Mảnh Servo
Mảnh Servo
Mảnh Servo

Đối với bước này, bạn cần:

  • hai chốt gỗ dài 4cm
  • hai lò xo dài 2cm
  • một ống hút cắt thành hai đoạn, mỗi đoạn dài 2cm
  • một miếng bìa cứng 12cm x 4cm
  • hai miếng bìa cứng 4cm x 1,5cm
  • một miếng bìa cứng 4cm x 2cm

Đầu tiên, dán các chốt vào một trong 4 x 1,5 mảnh, sau đó chèn lò xo và ống hút vào chốt, sau đó dán miếng bìa cứng còn lại lên mặt còn lại để giữ mọi thứ ở đúng vị trí.

Thứ hai, dán miếng 4cm x 2cm lên đầu ống hút.

Thứ ba, lật lại toàn bộ miếng vải và dán một chốt nhỏ vào mặt sau của nó, không ở giữa mà hơi lệch sang trái. (Tôi quên thêm chốt nhỏ trong hình đầu tiên)

Cuối cùng, cắt một lỗ trên miếng bìa cứng lớn bằng kích thước mặt trước của mô tơ servo và dán mô tơ vào, sau đó dán mảnh chúng ta vừa tạo với chốt vào miếng lớn để khi servo di chuyển, nó sẽ đẩy chốt nhỏ xuống lần lượt đẩy lò xo xuống.

Cuối cùng, tôi cắt khoảng 3 cm từ phần dưới cùng của mảnh 12 cm x 4 cm và dán thêm hai miếng 4 cm x 1,5 cm vào nó, sau đó phủ nó bằng một miếng bìa cứng 5,5 cm x 4 cm. Và để giữ điểm đánh dấu, tôi đã làm một cái nhỏ vòng lặp của dây thun và dán nó vào một mảnh bìa cứng nhỏ, sau đó tôi dán nó vào mảnh 4cm x 2cm sẽ di chuyển xuống khi servo bắt đầu. Những bổ sung này đã ngăn điểm đánh dấu di chuyển từ bên này sang bên kia khi các lò xo quay trở lại.

Bước 3: Thêm động cơ Servo và cuộn giấy vào đế

Thêm động cơ Servo và cuộn giấy vào đế
Thêm động cơ Servo và cuộn giấy vào đế
Thêm động cơ Servo và cuộn giấy vào đế
Thêm động cơ Servo và cuộn giấy vào đế

Tôi thêm hai viên gạch nữa vào một bên của đế để đỡ miếng servo và tôi dán nó vào vị trí, sau đó tôi thêm bánh xe vào đầu xa của đế.

Bước 4: Xây dựng khung động cơ bước

Xây dựng khung động cơ bước
Xây dựng khung động cơ bước
Xây dựng khung động cơ bước
Xây dựng khung động cơ bước
Xây dựng khung động cơ bước
Xây dựng khung động cơ bước

Bước này hơi khó khăn vì động cơ không được tạo ra để phù hợp với Lego một cách hoàn hảo. Tuy nhiên, tôi đã cố gắng làm điều đó bằng cách sử dụng hai lỗ trên động cơ để cố định nó vào đúng vị trí. Tiếp theo, tôi dán một bánh xe Lego vào đầu của động cơ và sau đó tôi đặt nó ngay bên cạnh đế ở phía mà tôi đã mở ở bước 1.

Bước 5: Hoàn thiện các lần chạm

Kết thúc các lần chạm
Kết thúc các lần chạm
Kết thúc các lần chạm
Kết thúc các lần chạm
Kết thúc các lần chạm
Kết thúc các lần chạm
Kết thúc các lần chạm
Kết thúc các lần chạm

Tôi thêm hai miếng vòng cung để che bánh xe để cố định giấy vào vị trí. Và tôi thêm hai miếng vòng cung nhỏ hơn, một miếng để giữ dây của động cơ bước và một miếng khác để giữ giấy. Cuối cùng, tôi đã thay đổi bánh xe động cơ bước thành một bánh xe lớn hơn một chút để di chuyển giấy tốt hơn bánh xe cũ.

Bước 6: Điện tử

Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử
Thiết bị điện tử

Cuối cùng, bạn phải kết nối động cơ với Arduino và tải mã lên.

Chúng ta sẽ bắt đầu với động cơ servo, kết nối dây màu nâu (dây nối đất) với chân GND, sau đó dây màu đỏ (dây nguồn) vào chân 5V, và dây màu cam (dây tín hiệu) với Dig # 5 ghim. Tiếp theo, động cơ bước, kết nối 1N1 với Đào # 11, 1N2 với Đào # 10, 1N3 với Đào # 9, 1N4 với Đào # 8, 5V với mặt dương của bảng mạch và chân nối đất với mặt âm của bảng bánh mì. Và đừng quên kết nối mô-đun cấp nguồn với breadboard, đảm bảo rằng các mặt âm và dương của nó căn chỉnh chính xác với các mặt tương ứng trên breadboard. Nếu bạn quên làm như vậy, bạn sẽ đảo ngược sức mạnh cho dự án của mình và bạn không muốn làm điều đó.

Đối với mã, tôi đã viết bốn phương pháp, một để viết dấu chấm, một để viết dấu gạch ngang, và hai là để khoảng trống giữa mỗi chữ cái và mỗi từ. Bằng cách đó, tôi chỉ có thể gọi các phương thức này khi tôi cần thay vì viết lại cho mọi chữ cái. Sau đó, tôi viết một vòng lặp for đi qua từng chữ cái của văn bản và viết nó, Bên trong nó, tôi đã viết một câu lệnh if cho mỗi chữ cái nhưng bạn có thể viết nó trong một câu lệnh switch nếu bạn thích. Tất nhiên bạn có thể thêm vào mã để cho phép chương trình đọc số. Khi tất cả các dây đã sẵn sàng, chỉ cần sao chép và dán mã vào IDE của bạn. Đừng quên cài đặt thư viện bước, servo và chuỗi. Sau đó, bạn tốt để đi.

Làm thế nào nó hoạt động

Khi Arduino khởi động chương trình sẽ nhìn vào chữ cái đầu tiên của văn bản, và tùy thuộc vào chữ cái nào, nó sẽ gọi các hàm viết nó bằng mã Morse. Ví dụ: khi chức năng dấu chấm được gọi, động cơ servo được đặt thành 160 để di chuyển bút xuống, sau đó nó được đặt trở lại 90 cho phép các lò xo quay trở lại di chuyển bút theo chúng. Và nếu chức năng gạch ngang được gọi, servo sẽ di chuyển bút xuống, sau đó động cơ bước sẽ quay bánh xe kéo giấy làm cho bút viết một dấu gạch ngang. Và nếu một trong những chức năng không gian được gọi là động cơ bước quay nhưng với cây bút lên để nó kéo giấy tạo ra một khoảng trống giữa các chữ cái hoặc các từ. Khi hoàn tất, nó chuyển sang chữ cái tiếp theo và lặp lại quy trình tương tự. Tôi hy vọng bạn thích nó;)

Mật mã

#bao gồm

#include #include #include const int stepsPerRevolution = 150; // Đây là biến cho động cơ bước String câu = "* hello"; // Thay đổi biến này để viết các từ khác nhau nhưng chỉ viết bằng chữ nhỏ và bắt đầu từ của bạn bằng "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Đây là phương thức khiến robot ghi dấu chấm void dot () {Serial.println ("dot start"); myServo.write (160); chậm trễ (1000); myServo.write (90); chậm trễ (1000); myStepper.step (stepsPerRevolution); chậm trễ (1000); Serial.println ("chấm xong"); } // Đây là phương thức khiến robot viết dấu gạch ngang void dash () {Serial.println ("dash start"); myServo.write (160); chậm trễ (1000); myStepper.step (stepsPerRevolution); chậm trễ (1000); myServo.write (90); chậm trễ (1000); myStepper.step (stepsPerRevolution); chậm trễ (1000); Serial.println ("dấu gạch ngang đã xong"); } // Đây là phương thức làm cho robot để lại một khoảng trắng giữa mỗi chữ cái void space () {Serial.println ("space start"); myServo.write (90); chậm trễ (1000); myStepper.step (200); chậm trễ (1000); Serial.println ("dấu cách đã xong"); } // Đây là phương thức làm cho robot để lại khoảng trắng lớn hơn giữa mỗi từ void bigSpace () {myServo.write (90); myStepper.step (250); chậm trễ (1000); } void setup () {// đặt mã thiết lập của bạn ở đây, để chạy một lần: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int đầu tiên = câu.indexOf ('*'); // vòng lặp for này đi qua từng chữ cái của chuỗi và sau đó gọi các phương thức phù hợp để viết nó ra for (int i = 0; i <question.length (); i ++) {if (question.charAt (first + i) == 'a') {Serial.print (".-"); dấu chấm (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'b') {Serial.print ("-…"); dấu gạch ngang (); dấu chấm (); dấu chấm (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'c') {Serial.print ("-.-."); dấu gạch ngang (); dấu chấm (); dấu gạch ngang (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'd') {Serial.print ("-.."); dấu gạch ngang (); dấu chấm (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'e') {Serial.print ("."); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'f') {Serial.print ("..-."); dấu chấm (); dấu chấm (); dấu gạch ngang (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'g') {Serial.print ("-."); dấu gạch ngang (); dấu gạch ngang (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'h') {Serial.print ("…."); dấu chấm (); dấu chấm (); dấu chấm (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'i') {Serial.print (".."); dấu chấm (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'j') {Serial.print (".---"); dấu chấm (); dấu gạch ngang (); dấu gạch ngang (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'k') {Serial.print ("-.-"); dấu gạch ngang (); dấu chấm (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'l') {Serial.print (".-.."); dấu chấm (); dấu gạch ngang (); dấu chấm (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'm') {Serial.print ("-"); dấu gạch ngang (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'n') {Serial.print ("-."); dấu gạch ngang (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'o') {Serial.print ("---"); dấu gạch ngang (); dấu gạch ngang (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'p') {Serial.print (".--."); dấu chấm (); dấu gạch ngang (); dấu gạch ngang (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 'q') {Serial.print ("--.-"); dấu gạch ngang (); dấu gạch ngang (); dấu chấm (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'r') {Serial.print (".-."); dấu chấm (); dấu gạch ngang (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 's') {Serial.print ("…"); dấu chấm (); dấu chấm (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == 't') {Serial.print ("-"); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'u') {Serial.print ("..-"); dấu chấm (); dấu chấm (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'v') {Serial.print ("… -"); dấu chấm (); dấu chấm (); dấu chấm (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'w') {Serial.print (".--"); dấu chấm (); dấu gạch ngang (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'x') {Serial.print ("-..-"); dấu gạch ngang (); dấu chấm (); dấu chấm (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'y') {Serial.print ("-.--"); dấu gạch ngang (); dấu chấm (); dấu gạch ngang (); dấu gạch ngang (); không gian(); } else if (câu.charAt (first + i) == 'z') {Serial.print ("-.."); dấu gạch ngang (); dấu gạch ngang (); dấu chấm (); dấu chấm (); không gian(); } else if (câu.charAt (first + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Đừng viết gì ở đây}

Bước 7: Khắc phục sự cố

Bánh xe không chuyển động

Có thể có quá nhiều ma sát giữa bánh xe và giấy, hãy thử nâng bánh xe lên một chút hoặc thay đổi nó.

Bánh xe kéo giấy nhưng sau đó nó vẫn quay mà không kéo được giấy

Đảm bảo rằng bạn đã dán bánh xe vào giữa động cơ bước

Các dấu chấm và dấu gạch ngang được kết nối với nhau

Kiểm tra xem các hàm dấu chấm, dấu gạch ngang và dấu cách có được viết đúng hay không, chúng sẽ như thế này:

// Đây là phương thức làm cho robot viết dấu chấm dotvoid () {Serial.println ("dot start"); myServo.write (160); chậm trễ (1000); myServo.write (90); chậm trễ (1000); myStepper.step (stepsPerRevolution); chậm trễ (1000); Serial.println ("chấm xong"); }

// Đây là phương thức làm cho rô bốt viết một dấu gạch ngang

void dash () {Serial.println ("bắt đầu bằng dấu gạch ngang"); myServo.write (160); chậm trễ (1000); myStepper.step (stepsPerRevolution); chậm trễ (1000); myServo.write (90); chậm trễ (1000); myStepper.step (stepsPerRevolution); chậm trễ (1000); Serial.println ("dấu gạch ngang đã xong"); }

// Đây là phương thức làm cho robot để lại khoảng cách giữa mỗi chữ cái

void space () {Serial.println ("dấu cách bắt đầu"); myServo.write (90); chậm trễ (1000); myStepper.step (200); chậm trễ (1000); Serial.println ("dấu cách đã xong"); }

Đề xuất: