Các rắc rối thường gặp khi làm việc với Arduino

1. Giới thiệu

Trong bài viết này, mình sẽ giới thiệu cho các bạn các rắc rối thường gặp khi làm việc với Arduino. Mặc dù tôi đã nghiên cứu Arduino được khá lâu nhưng thỉnh thoảng tôi cũng hay gặp phải chúng. Bài viết có thể sẽ được cập nhật dần để bao quát hết được các xu hướng mắc lỗi thường gặp cũng như những lỗi hay hiện tượng "từ trên trời rơi xuống" của người mới nghiên cứu Arduino.

2. Biên dịch gặp lỗi

Lập trình:

void setup() {
  char str[9] = "123456789";
  start(); 
  a = 6;
}

void loop() {
  
}

Lỗi mắc phải:

sketch_jun24b:2: error: initializer-string for array of chars is too long

sketch_jun23a:3: error: 'start' was not declared in this scope

sketch_jun23a:4: error: 'a' was not declared in this scope

Ý nghĩa:

Cửa sổ soạn thảo sketch_jun23a, dòng 2, độ dài của chuối vượt quá độ dài khai báo

Cửa sổ soạn thảo sketch_jun23a, dòng 3, không tìm thấy đối tượng "start"

Cửa sổ soạn thảo sketch_jun23a, dòng 4, không tìm thấy đối tượng "a"

Khắc phục:

Khai báo kiểu dữ liệu cho biến "a" và định nghĩa hàm start(), chỉnh lại kích thước chuỗi str cho đúng.

int a;
char str[10] = "123456789"; //xem phần "Chú ý" của string
void setup() {
  start();
  a = 6;
}

void loop() {
}

void start() {
    Serial.begin(9600);
    Serial.println("Hello Arduino");
}

3. Upload chương trình gặp lỗi

3.1 Lỗi Serial port "COM11" not found

Thông báo lỗi

Ý nghĩa:

Không tìm thấy mạch Arduino nào ở cổng Serial COM11.

Khắc phục:

Vào menu Tool -> Serial Port để chọn đúng cổng Serial. Cổng Serial đang dùng luôn được hiển thị ở góc dưới cùng bên phải như trên hình (COM11).

Nếu bạn đã vào menu Tool -> Serial Port rồi nhưng lại gặp cảnh như thế này ...

 

... thì có thể có bạn đã quên kết nối Arduino với máy tính hoặc dây cáp kết nối bị lỏng.

Một số trường hợp đang làm việc bình thường thì bỗng dưng bị lỗi mất kết nối như trên thì bạn hãy thử rút dâu USB ra, đợi vài giây rồi cắm lại. Nếu không được thì rút dây và tắt hết các cửa sổ lập trình Arduino đi sau đó bật lại như bình thường.

Nếu cách trên không hiệu quả, hãy kết nối Arduino sang cổng USB khác hoặc khởi động lại máy.

Lưu ý rằng Arduino IDE chạy trên nền tảng Java, do đó hãy đảm bảo rằng máy tính của bạn đang có phiên bản Java Runtime Environment (JRE) mới nhất. Download bản JRE 32 bit tại đây hoặc JRE 64 bit tại đây.

3.2 Lỗi avrdude: stk500_getsync(): not in sync: resp=0x00

Thông báo lỗi

Ý nghĩa

Có rất nhiều tình huống làm phát sinh lỗi này, sau đây là những lí do thường hay gặp:

  1. Chọn sai board Arduino khi upload chương trình.
  2. Chân RESET trên board Arduino bị nối xuống GND hay đang ở mức LOW.

Khắc phục

  1. Vào menu Tools -> Board để chọn lại đúng mạch Arduino đang sử dụng.
  2. Đặt lại chân RESET ở mức HIGH hoặc đơn giản là tháo các dây đang nối với chân này ra. Theo thiết kế mạch mặc định của Arduino thì chân RESET luôn được nối với Vcc (đặt ở mức HIGH).

3.3 Lỗi avrdude: stk500_getsync(): not in sync: resp=0x30

Ý nghĩa

Có rất nhiều tình huống làm phát sinh lỗi này, sau đây là những lí do thường hay gặp:

  1. Cổng Serial trên Arduino đang được sử dụng, không thể upload chương trình.
  2. Chưa cài đặt bootloader.
  3. Chưa cài đặt driver cho Arduino.

Khắc phục

  1. Tháo bất cứ dây nào đang cắm vào chân Digital 0 (chân RX) trên mạch Arduino của bạn.
  2. Cài đặt bootloader cho Arduino.
  3. Cài đặt driver cho Arduino.

4. Lỗi phần cứng 

4.1 Đèn đóm trên Arduino tắt đột ngột

Lí do đầu tiên bạn nên nghĩ đến đó là lỏng cáp USB hay nguồn điện, việc này khá đơn giản.

Nếu đã kiểm tra hệ thống điện rồi mà mọi thứ vẫn như cũ thì chỉ có một khả năng là bạn đã làm chập mạch (short circuit) - để 2 cực âm/dương của nguồn điện chạm nhau.

Với Arduino UNO R3

Dòng board mạch này vốn dĩ được trang bị cầu chì tự phục hồi (PTC Resettable Fuses). Nếu cường độ dòng điện vượt quá 500mA, cầu chì sẽ tự ngắt. Sau một khoảng thời gian nào đó, cầu chì tự đóng và Arduino UNO R3 lại hoạt động bình thường. Tôi đã từng bị như vậy nhiều lần và mạch Arduino UNO R3 tới nay vẫn hoạt động tốt, do đó bạn không cần phải quá bận tâm.

Với Arduino Nano

Khác với Arduino UNO R3, dòng mạch này không được trang bị cầu chì tự phục hồi, do đó nó sẽ không thể tự cứu bản thân mình được. Tuy nhiên không phải là không thể cứu.

ở trường hợp này, Arduino UNO R3 đã bị cháy 1 con diode loại schotky là MBR0520LT1 0.5A 20V tại vị trí như hình vẽ ...

Công việc của bạn là dùng mỏ hàn tháo con diode này ra và và thay con khác vào là xong. Nếu không có linh kiện thay thế, bạn có thể hàn tắt 2 đầu mạch lại với nhau như hình dưới ...

Vâng, chỉ đơn giản thế thôi, hãy cắm điện trở lại và thưởng thức. Nhưng nếu bạn làm chập mạch nữa thì tôi không biết đâu đấy nhé ! Đây là một điểm yếu trog thiết kế của Arduino Nano khiến khá nhiều người than vãn.

4.2 Vi điều khiển trên board Arduino phát nhiệt mạnh

Rõ ràng đây là một điều không tốt tí nào vì hầu hết các trường hợp, con chip này hầu như sinh ra một lượng nhiệt thấp đến mức bạn khó lòng phát hiện ra bằng tay được. Thực sự thì rất khó biết được nguyên nhân gây ra hiện tượng này. Lời khuyên của mình là Lập tức ngắt nguồn điện và hỏi những người có kinh nghiệm về Arduino ngay khi có thể !

Mình đã từng bị hỏng 1 con ATmega328P-PU trên Arduino UNO R3 mà không biết tại sao, vì đang hoạt động bình thường thì bỗng nhiên nó phát nhiệt mạnh và hư luôn (không upload được chương trình lên nữa). 

Một số ATmega328P-PU trên Arduino UNO R3 mặc dù có phát nhiệt nhưng lại hoạt động bình thường ???

Nếu bạn gặp phải hiện tượng này, bạn có thể tự chẩn bệnh theo những bước sau:

  1. Lập tức ngắt nguồn điện, tháo hết dây đang nối với mạch Arduino.
  2. Kết nối mạch Arduino với máy tính qua cổng USB và dùng tay kiểm tra xem vi điều khiển có phát nhiệt hay không:
    • Nếu có, hãy thay thử thay thế vi điều khiển khác. Nếu hiện tượng trên vẫn còn chứng tỏ mạch Arduino của bạn đã có vấn đề. Hãy liên hệ nơi bán chúng để được hỗ trợ.
    • Nếu không, hãy kiểm tra lại mạch điện, chú ý cường độ dòng điện vào/ra các chân trên Arduino. Thử upload một chương trình trống lên Arduino. Nếu bạn không thể upload được thì nhiều khả năng là vi điều khiển của bạn đã bị hỏng.

 

lên
9 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

[Intel Galileo] How to install Linux Yocto (iot-devkit) on Intel Galileo

To support for its Galileo Platform, Intel has launched a new Intel IoT Developer Kit (iot-devkit) including haware and software (OS, IDE, and other tools..). In this post, I’m going to show you how to install Linux Yocto - a operating system in Software of iot-devkit.

This version is used for both Intel Galileo Generation 1 and Generation 2 board.

lên
3 thành viên đã đánh giá bài viết này hữu ích.

break

break là một lệnh có chức năng dừng ngay lập tức một vòng lặp (do, for, while) chứa nó trong đó. Khi dừng vòng lặp, tất cả những lệnh phía sau break và ở trong vòng lặp chịu ảnh hưởng của nó sẽ bị bỏ qua.

lên
9 thành viên đã đánh giá bài viết này hữu ích.