Hướng dẫn bắt đầu với Arduino Nano CH340: sơ đồ chân, driver và nạp code
- 1. Thông số mạch Arduino Nano CH340
- 2. Sơ đồ chân Arduino Nano
- 3. Linh kiện cần chuẩn bị
- 4. Cài Arduino IDE và driver CH340
- 5. Chọn Board, Processor và cổng COM
- 6. Nạp chương trình Blink
- 7. In dữ liệu ra Serial Monitor
- 8. Quét địa chỉ I2C trên chân A4, A5
- 9. Cấp nguồn cho Arduino Nano
- 10. Đế ra chân terminal và shield mở rộng
- 11. Xử lý lỗi thường gặp
Hướng dẫn bắt đầu với Arduino Nano CH340: sơ đồ chân, cài driver, chọn Board và Processor, nạp Blink, in ra Serial Monitor, quét I2C trên A4/A5, cấp nguồn và xử lý lỗi thường gặp.
Arduino Nano là mạch vi điều khiển nhỏ gọn, cắm vừa breadboard, dùng chip ATmega328P chạy ở 5 V và 16 MHz. Loại PYWORLD đang bán dùng chip chuyển USB–UART CH340, có phiên bản cổng USB Type-C và phiên bản Micro USB. Bài viết đi từ lúc cắm mạch vào máy tính: đọc sơ đồ chân, cài driver CH340, chọn đúng Board và Processor trong Arduino IDE, nạp chương trình nháy LED, in dữ liệu ra Serial Monitor, quét địa chỉ I2C, cấp nguồn và dùng hai mạch mở rộng cho Nano.
1. Thông số mạch Arduino Nano CH340
| Thông số | Giá trị |
|---|---|
| Vi điều khiển | ATmega328P hoặc ATmega328PB (tùy lô), xung nhịp 16 MHz |
| Chip USB–UART | CH340 |
| Cổng USB | Type-C hoặc Micro USB (tùy phiên bản) |
| Mức logic | 5 V |
| Chân digital | 14 chân D0–D13, trong đó 6 chân có PWM |
| Chân analog | 8 chân A0–A7, ADC 10 bit |
| Dòng mỗi chân I/O | Tối đa 40 mA; nên giữ dưới 20 mA |
| Bộ nhớ | Flash 32 KB (2 KB dành cho bootloader), SRAM 2 KB, EEPROM 1 KB |
| Giao tiếp | UART, I2C, SPI |
| LED trên mạch | Nguồn (PWR hoặc POW), L (nối chân D13), TX, RX |
| Nguồn cấp | 5 V qua cổng USB hoặc 6–9 VDC vào chân VIN |
| Kích thước | Khoảng 18,5 × 43,2 mm |
Mức logic 5 V nghĩa là chân ra ở mức cao có điện áp gần 5 V. Không đưa điện áp cao hơn 5 V vào các chân I/O; module chỉ chịu 3,3 V cần mạch chuyển mức logic trước khi nối với Nano.
2. Sơ đồ chân Arduino Nano
| Nhóm | Chân | Ghi chú |
|---|---|---|
| Digital | D0–D13 | Dùng với pinMode(), digitalWrite(), digitalRead(). |
| PWM | D3, D5, D6, D9, D10, D11 | analogWrite() nhận giá trị 0–255. |
| Analog | A0–A7 | analogRead() trả về 0–1023 ứng với 0–5 V. A0–A5 dùng được như chân digital; A6, A7 chỉ đọc analog. |
| I2C | A4 (SDA), A5 (SCL) | Dùng thư viện Wire. |
| SPI | D10 (SS), D11 (MOSI), D12 (MISO), D13 (SCK) | Dùng thư viện SPI. |
| UART | RX0 (D0), TX1 (D1) | Dùng chung với chip CH340; để trống hai chân này khi nạp chương trình. |
| Ngắt ngoài | D2, D3 | Dùng với attachInterrupt(). |
| Nguồn | VIN, 5V, 3V3, GND | Xem mục 9. |
3. Linh kiện cần chuẩn bị
- Arduino Nano CH340 và cáp USB đúng loại cổng (Type-C hoặc Micro USB), có truyền dữ liệu.
- Máy tính Windows đã cài Arduino IDE 2.x.
- Để thử mục 8: một module I2C (ví dụ màn hình OLED 0,96 inch hoặc LCD 1602 I2C), 4 dây jumper và breadboard MB-102.
- Tùy chọn: đế ra chân terminal hoặc shield Nano Sensor V1.0 (mục 10).
Mạch chưa hàn chân cần được hàn hai hàng chân trước khi cắm vào breadboard hoặc đế ra chân.
4. Cài Arduino IDE và driver CH340
- Tải Arduino IDE 2.x từ trang chủ arduino.cc và cài đặt. Gói Arduino AVR Boards dùng cho Nano thường được cài sẵn cùng IDE.
- Cắm Nano vào máy tính. LED nguồn trên mạch sáng.
- Mở Device Manager, xem mục Ports (COM & LPT). Nếu có dòng USB-SERIAL CH340 (COMx) thì driver đã sẵn sàng; ghi lại số cổng COM. Windows 10 và 11 thường tự cài driver này.
- Nếu mạch nằm ở mục Other devices kèm dấu chấm than, tải driver CH340 tại trang Driver của PYWORLD, cài đặt rồi rút cáp và cắm lại.
Nếu máy tính không phản ứng gì khi cắm mạch, hãy đổi cáp: nhiều cáp USB chỉ có dây sạc, không có dây dữ liệu.
5. Chọn Board, Processor và cổng COM
- Chọn Tools > Board > Arduino AVR Boards > Arduino Nano.
- Vào Tools > Processor, chọn ATmega328P hoặc ATmega328P (Old Bootloader).
- Vào Tools > Port, chọn cổng COM của CH340 đã ghi ở mục 4.
Bootloader là chương trình nhỏ nạp sẵn trong chip, có nhiệm vụ nhận chương trình mới qua cổng USB. Bản mới (Optiboot) nhận ở tốc độ 115200 baud, bản cũ ở 57600 baud, nên menu Processor có hai lựa chọn. Nhìn bên ngoài không biết mạch dùng bản nào: nếu nạp báo lỗi ở một lựa chọn, đổi sang lựa chọn còn lại rồi nạp lại. Chọn sai chỉ làm việc nạp thất bại, không làm hỏng mạch. Mạch Nano dùng CH340 thường nạp được với ATmega328P (Old Bootloader).
6. Nạp chương trình Blink
LED L trên mạch nối sẵn với chân D13 nên chương trình đầu tiên không cần nối thêm linh kiện. Tạo sketch mới, dán chương trình sau rồi bấm nút Upload (mũi tên sang phải):
/*
PYWORLD.VN - Arduino Nano (ATmega328P + CH340): nháy LED trên mạch
LED "L" nối sẵn với chân D13 (LED_BUILTIN), không cần nối thêm linh kiện
*/
const unsigned long BLINK_MS = 100; // Thời gian sáng và thời gian tắt (mili giây)
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // Đặt chân D13 làm ngõ ra
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // LED sáng
delay(BLINK_MS);
digitalWrite(LED_BUILTIN, LOW); // LED tắt
delay(BLINK_MS);
}
Trong lúc nạp, LED TX và RX nhấp nháy. Khi IDE báo Done uploading, LED L nháy nhanh 5 lần mỗi giây. Đổi BLINK_MS thành 1000 rồi nạp lại, LED sẽ sáng 1 giây, tắt 1 giây. Bài dùng gói Arduino AVR Boards phiên bản 1.8.8.
7. In dữ liệu ra Serial Monitor
Chip CH340 nối cổng USB với chân RX0, TX1 của vi điều khiển, nhờ đó chương trình gửi được chữ và số về máy tính. Nạp chương trình sau:
/*
PYWORLD.VN - Arduino Nano (ATmega328P + CH340): in dữ liệu ra Serial Monitor
Mở Serial Monitor ở tốc độ 9600 baud
*/
unsigned long count = 0; // Số lần LED đã nháy
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600); // Tốc độ phải trùng với Serial Monitor
Serial.println("Hello from Arduino Nano!");
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("ON"); // In chữ rồi xuống dòng
delay(500);
digitalWrite(LED_BUILTIN, LOW);
Serial.println("OFF");
delay(500);
count++;
Serial.print("So lan nhay: "); // In chữ, không xuống dòng
Serial.println(count); // In giá trị của biến rồi xuống dòng
}
Mở Tools > Serial Monitor và chọn tốc độ 9600 baud. Kết quả mong đợi:
Hello from Arduino Nano!
ON
OFF
So lan nhay: 1
ON
OFF
So lan nhay: 2
Serial.begin(9600)mở cổng nối tiếp ở 9600 baud; Serial Monitor phải chọn cùng tốc độ.Serial.print()in nối tiếp trên một dòng,Serial.println()in xong thì xuống dòng.- Mỗi lần mở Serial Monitor, mạch thường khởi động lại nên dòng chào được in lại từ đầu.
8. Quét địa chỉ I2C trên chân A4, A5
Trên Arduino Nano, bus I2C nằm cố định ở chân A4 (SDA) và A5 (SCL). Ngắt nguồn rồi nối một module I2C theo bảng sau:
| Module I2C | Arduino Nano | Ghi chú |
|---|---|---|
| GND | GND | Mass chung. |
| VCC | 5V | Kiểm tra điện áp cho phép ghi trên module trước khi cấp 5 V. |
| SCL | A5 | Xung clock I2C. |
| SDA | A4 | Dữ liệu I2C. |
/*
PYWORLD.VN - Arduino Nano (ATmega328P + CH340): quét địa chỉ I2C
SDA = A4, SCL = A5. Mở Serial Monitor ở tốc độ 9600 baud
*/
#include <Wire.h>
void setup() {
Serial.begin(9600);
delay(200);
Wire.begin(); // Nano làm chủ bus I2C trên A4 (SDA) và A5 (SCL)
Wire.setClock(100000); // Tốc độ bus 100 kHz
Serial.println("Dang quet I2C...");
byte count = 0;
for (byte addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) { // 0: có thiết bị trả lời ở địa chỉ này
Serial.print("Tim thay thiet bi: 0x");
if (addr < 16) Serial.print("0");
Serial.println(addr, HEX);
count++;
}
}
Serial.print("Quet xong. So thiet bi tim thay: ");
Serial.println(count);
}
void loop() {
}
Với màn hình OLED 0,96 inch ở địa chỉ 0x3C, Serial Monitor (9600 baud) cho kết quả mong đợi:
Dang quet I2C...
Tim thay thiet bi: 0x3C
Quet xong. So thiet bi tim thay: 1
LCD 1602 có mạch I2C thường ở địa chỉ 0x27 hoặc 0x3F. Wire.begin() không cần khai báo số chân vì ATmega328P chỉ có một bus I2C ở A4, A5; hàm này cũng bật điện trở kéo lên bên trong chip cho hai chân đó. Wire.endTransmission() trả về 0 khi có thiết bị trả lời ở địa chỉ đang thử. Ghi lại địa chỉ tìm được để dùng trong chương trình điều khiển module.
9. Cấp nguồn cho Arduino Nano
- Cổng USB: 5 V từ máy tính hoặc sạc USB 5 V. Dùng khi nạp chương trình và chạy thử.
- Chân VIN: 6–9 VDC, cực âm nối GND. Nguồn đi qua mạch ổn áp trên mạch để tạo 5 V; điện áp càng cao, mạch ổn áp càng nóng.
- Chân 5V: chỉ cấp nguồn 5 V đã ổn áp. Nguồn vào thẳng vi điều khiển, không qua mạch ổn áp; điện áp cao hơn có thể làm hỏng mạch.
Nên chỉ dùng một nguồn tại một thời điểm. Khi cấp qua USB hoặc VIN, chân 5V và 3V3 là ngõ ra để nuôi cảm biến, module nhỏ; chân 3V3 chỉ cấp được dòng nhỏ. Servo, relay và động cơ cần nguồn riêng, nối chung GND với Nano. Mỗi chân I/O không cấp quá 40 mA và tổng dòng qua chip không quá 200 mA: LED cần điện trở hạn dòng, tải lớn phải đi qua transistor hoặc module relay.
10. Đế ra chân terminal và shield mở rộng
Khi cần đấu dây chắc chắn hoặc nối nhiều cảm biến, có thể cắm Nano lên một trong hai mạch mở rộng:
- Đế ra chân terminal: đưa 30 chân của Nano ra hai hàng cọc vít. Dây được siết bằng vít nên không tuột như dây jumper, hợp với mạch lắp trong hộp hoặc tủ điện.
- Shield Nano Sensor V1.0: mỗi chân D0–D13 và A0–A7 có một cụm 3 chân G–V–S (GND, VCC, tín hiệu) để cắm thẳng dây 3 sợi của servo, cảm biến. Shield có thêm cổng I2C, cổng UART, nút reset và jack DC 5,5 × 2,1 mm cấp nguồn ngoài; kích thước 58 × 53,5 mm.
Hai mạch này không kèm Arduino Nano. Trước khi cấp điện, kiểm tra hướng cắm: tên chân trên Nano phải trùng với chữ in trên đế, vì cắm ngược đầu sẽ đưa nguồn vào nhầm chân. Điện áp adapter cho jack DC xem ở trang sản phẩm của shield.
11. Xử lý lỗi thường gặp
- Menu Tools > Port không có cổng COM: đổi cáp USB có dây dữ liệu, thử cổng USB khác, cài driver CH340 như mục 4.
- Nạp báo lỗi not in sync hoặc programmer is not responding: đổi lựa chọn trong Tools > Processor, kiểm tra lại cổng COM và rút các dây đang nối vào RX0, TX1.
- Nạp báo lỗi Access is denied: cổng COM đang bị phần mềm khác giữ. Đóng Serial Monitor ở cửa sổ khác hoặc phần mềm terminal rồi nạp lại.
- Serial Monitor hiện ký tự lạ: chọn đúng 9600 baud như trong
Serial.begin(). - Quét I2C không thấy thiết bị: kiểm tra nguồn module, GND chung và thứ tự SDA – A4, SCL – A5.
- Quét I2C dừng mãi ở dòng Dang quet I2C...: SDA hoặc SCL đang bị giữ ở mức thấp, có thể do module chưa được cấp nguồn hoặc dây cắm nhầm vào GND. Sửa dây rồi nhấn nút reset.
- Mạch tự khởi động lại khi bật tải: tải lấy quá nhiều dòng từ chân 5V. Dùng nguồn riêng cho servo, relay, động cơ.
- LED nguồn không sáng khi cắm USB: thử cáp và cổng USB khác, kiểm tra xem có dây nào làm chập 5V với GND.
Xem thêm: hướng dẫn dùng màn hình LCD 1602 I2C với Arduino Uno (Nano dùng cùng chân A4, A5 nên cách nối dây và chương trình giữ nguyên), trang Driver để tải driver USB–UART và danh mục Arduino của PYWORLD.
Xem thêm