0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Dự án Arduino 05: Hướng dẫn và Thực hành

Đăng vào 6 tháng trước

• 6 phút đọc

Chủ đề:

KungFuTech

Giới thiệu

Khi bắt đầu một dự án Arduino, tôi luôn chắc chắn rằng mình hiểu rõ những gì đang làm. Đã có nhiều kinh nghiệm lập trình và các khóa học của tôi tại CSUB chủ yếu là về C++. Do đó, khi học các dự án trong Sách Dự Án Arduino và lập trình, tôi thích không chỉ sao chép mã mà còn giải thích những gì đang xảy ra và sau đó cố gắng tự viết mã giải pháp cho mình.

Xây dựng Mạch

Tôi bắt đầu bằng cách nhìn vào sơ đồ trong sách và sau đó là hình minh họa. Tôi cố gắng lắp đặt các dây dẫn theo lưới trên breadboard. Đôi khi chúng không hoàn toàn khớp với hình ảnh. Ví dụ, trong sách, thứ tự của các dây màu đen, đỏ và trắng khác với những dây đi kèm với servo trong bộ kit. Tôi luôn kiểm tra kỹ rằng tất cả các dây của mình đều được kết nối đúng cách theo logic, không chỉ dựa vào hình ảnh.

Động cơ servo đi kèm với các đầu nối cái, vì vậy tôi đã thêm các chân cắm này.

Lập trình

Sau khi hoàn thành mạch và đảm bảo rằng nó đã được đấu nối đúng, tôi đọc qua phần mã lập trình. Tôi đã viết một mô tả nhanh và lộn xộn về những gì đang xảy ra trong mã. Tôi sử dụng điều này để lập trình mà không cần nhìn vào sách để có thể học cú pháp lập trình Arduino. Tôi chỉ cho phép mình xem tài liệu Arduino.

Tôi bắt đầu lập trình. Sau khi bị mắc kẹt một thời gian với một phần, tôi tham khảo sách và che phần còn lại của mã bằng một ghi chú dính.

Tôi nghe ở đâu đó rằng trước đây, khi màn hình nhỏ hơn và không có tự động hoàn thành, việc sử dụng các tên ngắn gọn là rất quan trọng. Tuy nhiên, bây giờ điều này không còn là điều cần thiết, mã tự tài liệu trở thành một xu hướng, và các tên dài mô tả lại có nhiều lợi ích. Tôi đã sử dụng điều này như một lý do để đặt tên biến và hàm một cách mô tả. Hãy xem cách tôi đã làm cho các tên biến dài hơn khi tự viết chúng ra.

cpp Copy
#include <Servo.h>
Servo myServo;

const int potentiometerPin = A0;
int potentiometerValue;
int angle;

void setup() {
  myServo.attach(9);

  Serial.begin(9600);
}

void loop() {
  int potentiometerValue = myServo.read();
  Serial.println(potentiometerValue);
}

Tôi đã bị mắc kẹt một chút và sau đó nhận ra rằng potentiometerValue không đến từ myServo, vì vậy tôi cần thay đổi điều đó. Tôi đã quên và tham khảo tài liệu, sau đó đã thay đổi myServo.read() thành analogRead(). Một lần nữa, tôi đã không nhìn vào sách hoặc sử dụng AI.

Cuối cùng, tôi đã có mã như sau. Khi so sánh với mã gốc, tôi nhận thấy rằng tôi đã viết const int thay vì int const, điều này giờ đã trở thành thói quen của tôi vì lỗi này.

Tôi nghe từ YouTuber lập trình nổi tiếng ThePrimeagen rằng anh ấy không ghi nhớ tất cả các thuật toán theo từng dòng. Anh ấy chỉ ghi nhớ con đường dẫn đến chúng để có thể tái tạo chúng. Đây là cách tiếp cận mà tôi áp dụng trong việc học nhiều khái niệm lập trình. Tôi đã ghi nhớ chức năng của map() ở đây, và tôi có thể gọi lại nó sau này. Nó cần một giá trị và sau đó là giới hạn trên và dưới cho “từ” và “đến.” Vậy nên, từ 0 và 1023 đến 0 và 179. Những số này có vẻ ngẫu nhiên, nhưng chúng được lấy từ tín hiệu analog (1024) và 180 độ.

cpp Copy
#include <Servo.h>
Servo myServo;

const int potentiometerPin = A0;
int potentiometerValue;
int angle;

void setup() {
  myServo.attach(potentiometerPin);

  Serial.begin(9600);
}

void loop() {
  int potentiometerValue = analogRead(potentiometerPin);
  Serial.println(potentiometerValue);
  angle = map(potentiometerValue, 0, 1023, 0, 179);
  myServo.write(angle);
  delay(15);
}

Khắc phục sự cố & Thành công

Khi tôi hoàn thành và tải mã lên, không có gì chuyển động. Tôi nghĩ rằng mình đã mắc lỗi trong việc đấu nối. Tôi cũng kiểm tra kết nối serial của mình, và nó cho tôi những số nhảy kỳ lạ. Tôi nhớ rằng khi tôi kết nối lại với mạch mới, nó vẫn lưu mã cũ, và servo đã bị rung. Vì vậy, tôi đã tải lại chương trình trước đó. Nó không làm gì cả, vì vậy tôi nghĩ rằng mình đã làm hỏng động cơ. Sau đó tôi tải lại chương trình hiện tại và nó bắt đầu hoạt động. Điều này đã làm mới mã trên Arduino và nó hoạt động với cùng một mã.

Tìm hiểu về tụ điện

Tôi đã hiểu về mạch nhưng không hiểu mục đích của các tụ điện trong trường hợp này. Chúng là một khái niệm mới với tôi, vì vậy tôi đã nghiên cứu về chúng. Tôi thấy chúng được giải thích theo cách tương tự như nước và bể chứa: nếu dòng chảy bị cắt đến bể chứa, dòng chảy ra khỏi bể chứa vẫn tiếp tục. Tôi nhận ra rằng mục đích của chúng ở đây là loại bỏ các rung động, vì các động cơ servo có thể từ không có điện đến cần nhiều điện ngay lập tức.

Tôi đã học rằng điện áp cho phép chúng ta thấy sự khác biệt giữa hai điểm. Điện dung được đo bằng farad, và đối với các bảng mạch thường là microfarad. Đánh giá điện áp trên tụ điện là điện áp tối đa mà tụ điện có thể chịu, và nếu vượt quá điều này, nó có thể phát nổ.

Thực hành tốt nhất

  • Kiểm tra kết nối: Trước khi tải mã lên, hãy luôn kiểm tra kỹ các kết nối của bạn. Điều này giúp tránh được các vấn đề không cần thiết.
  • Sử dụng tên biến rõ ràng: Đặt tên biến và hàm một cách mô tả giúp mã dễ đọc và bảo trì hơn.
  • Tham khảo tài liệu thường xuyên: Đừng ngần ngại tham khảo tài liệu Arduino khi gặp khó khăn, đó là nguồn tài nguyên quý giá.

Những cạm bẫy phổ biến

  • Bỏ qua bước kết nối: Nhiều người mới thường bỏ qua việc kiểm tra kết nối trước khi lập trình, dẫn đến những lỗi không đáng có.
  • Dùng mã cũ: Khi thay đổi mạch, hãy chắc chắn rằng bạn đã tải lại mã mới để tránh những vấn đề về hiệu năng.

Mẹo tối ưu hiệu suất

  • Giảm độ trễ: Trong mã, thay đổi giá trị delay() theo nhu cầu để tối ưu hóa hiệu suất hoạt động của servo.
  • Sử dụng các biến toàn cục: Đảm bảo rằng bạn đang sử dụng các biến toàn cục hợp lý để tránh việc tạo ra các biến không cần thiết trong bộ nhớ.

Câu hỏi thường gặp (FAQ)

1. Tôi cần những linh kiện gì để bắt đầu dự án này?
Bạn cần một bo mạch Arduino, một động cơ servo, một biến trở (potentiometer), và các dây nối.
2. Có cách nào để kiểm tra mạch trước khi lập trình không?
Có, bạn có thể sử dụng một đồng hồ vạn năng để kiểm tra các kết nối và điện áp trên mạch.
3. Tôi có thể sử dụng thư viện khác cho động cơ servo không?
Có, bạn có thể tìm kiếm và sử dụng các thư viện khác tùy thuộc vào nhu cầu của dự án.

Kết luận

Dự án Arduino 05 không chỉ giúp tôi hiểu thêm về cách hoạt động của động cơ servo mà còn giúp tôi nắm vững các khái niệm lập trình cơ bản. Qua quá trình này, tôi đã học được nhiều điều bổ ích và có thể áp dụng cho các dự án tiếp theo. Nếu bạn đang tìm kiếm một dự án thú vị để bắt đầu với Arduino, hãy thử dự án này và chia sẻ kinh nghiệm của bạn với cộng đồng!

Liên kết tài nguyên và đọc thêm

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào