Hướng dẫn bắt đầu với Arduino Nano CH340: sơ đồ chân, driver và nạp code

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ố cơ bản của 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

Sơ đồ chân Arduino Nano CH340: chân digital, analog, PWM, I2C, SPI, UART và nguồn
Sơ đồ chân Arduino Nano CH340 nhìn từ mặt trên (hình vẽ minh họa). Một số lô in AREF thay cho REF, +5V thay cho 5V.
Chức năng các nhóm chân trê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ị

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

  1. 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.
  2. Cắm Nano vào máy tính. LED nguồn trên mạch sáng.
  3. 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.
  4. 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

  1. Chọn Tools > Board > Arduino AVR Boards > Arduino Nano.
  2. Vào Tools > Processor, chọn ATmega328P hoặc ATmega328P (Old Bootloader).
  3. Vào Tools > Port, chọn cổng COM của CH340 đã ghi ở mục 4.
Chọn Board Arduino Nano, Processor ATmega328P hoặc Old Bootloader và cổng COM trong Arduino IDE
Ba mục cần chọn trong menu Tools và hai lựa chọn Processor (hình vẽ minh họa, không phải ảnh chụp màn hình).

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).

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:

Đấu nối module I2C với Arduino Nano
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.
Sơ đồ nối Arduino Nano với module I2C: SDA vào A4, SCL vào A5, VCC vào 5V, GND vào GND
Sơ đồ nối module I2C với Arduino Nano (hình vẽ minh họa). Thứ tự chân trên module thật có thể khác; luôn nối theo tên chân.
/*
  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.
Các đường cấp nguồn cho Arduino Nano: cổng USB, chân 5V, chân GND và chân VIN 6–9 V
Các đường cấp nguồn cho Arduino Nano: cổng USB, chân 5V, chân GND và chân VIN (hình vẽ minh họa).

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.
Đế ra chân terminal và shield Nano Sensor V1.0 cho Arduino Nano, vị trí cắm mạch
Vị trí cắm Arduino Nano trên đế ra chân terminal và shield Nano Sensor V1.0 (hình vẽ minh họa, đã lược bớt linh kiện). Khi đấu dây, đọc chữ in trên mạch thật.

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.


Tin tức liên quan

Hướng dẫn bắt đầu với Wemos D1 R2 (ESP8266) trên Arduino IDE
Hướng dẫn bắt đầu với Wemos D1 R2 (ESP8266) trên Arduino IDE

4 Lượt xem

Hướng dẫn dùng Wemos D1 R2 (ESP8266 khung Arduino UNO) với Arduino IDE 2.x: sơ đồ chân, cài driver CH340 và gói board ESP8266, nạp code nháy LED, kết nối WiFi và xử lý lỗi thường gặp.

Hướng dẫn dùng mạch tạo trễ NE555 có relay: đấu dây và chỉnh thời gian trễ
Hướng dẫn dùng mạch tạo trễ NE555 có relay: đấu dây và chỉnh thời gian trễ

3 Lượt xem

Hướng dẫn dùng mạch tạo trễ NE555 có relay bản 5 V và 12 V: nguyên lý tạo trễ, ý nghĩa các cọc VCC, GND, COM, CK, CB, cách chỉnh thời gian trễ, sơ đồ đấu dây và xử lý lỗi thường gặp.

Mạch hạ áp LM2596 và MP1584: cách chọn, chỉnh điện áp và cấp nguồn ESP32
Mạch hạ áp LM2596 và MP1584: cách chọn, chỉnh điện áp và cấp nguồn ESP32

5 Lượt xem

So sánh mạch hạ áp LM2596 và MP1584, cách chỉnh điện áp ra bằng đồng hồ vạn năng trước khi nối tải, cấp nguồn 5 V cho ESP32 DevKit V1 từ nguồn 12 V và xử lý lỗi thường gặp.

Hướng dẫn ESP32 làm web server điều khiển relay 4 kênh qua WiFi
Hướng dẫn ESP32 làm web server điều khiển relay 4 kênh qua WiFi

7 Lượt xem

Hướng dẫn dùng ESP32 DevKit V1 làm web server trong mạng WiFi nội bộ, mở trang trên điện thoại để bật, tắt module relay 4 kênh; có sơ đồ nối dây, code Arduino IDE và lưu ý an toàn.

Hướng dẫn dùng module thẻ nhớ Micro SD với ESP32
Hướng dẫn dùng module thẻ nhớ Micro SD với ESP32

6 Lượt xem

Hướng dẫn nối module thẻ nhớ Micro SD với ESP32 DevKit V1 qua SPI, định dạng thẻ FAT32, chạy code Arduino đọc ghi file, ghi dữ liệu định kỳ ra CSV và xử lý lỗi Card Mount Failed.

Hướng dẫn dùng màn hình OLED 1.3 inch SH1106 với ESP32
Hướng dẫn dùng màn hình OLED 1.3 inch SH1106 với ESP32

6 Lượt xem

Hướng dẫn nối màn hình OLED 1.3 inch SH1106 với ESP32 DevKit V1 qua I2C, cài thư viện Adafruit SH110X, chạy code hiển thị chữ và xử lý lỗi thường gặp.

Hướng dẫn bắt đầu MicroPython trên ESP32 Lite với Thonny
Hướng dẫn bắt đầu MicroPython trên ESP32 Lite với Thonny

5 Lượt xem

Hướng dẫn cài driver, cài Thonny và nạp firmware MicroPython cho mạch ESP32 Lite, dùng REPL, nháy LED, lưu main.py, đọc nút nhấn, quét I2C và xử lý lỗi thường gặp.

Hướng dẫn dùng màn hình LCD 2004 I2C với ESP32
Hướng dẫn dùng màn hình LCD 2004 I2C với ESP32

6 Lượt xem

Hướng dẫn nối màn hình LCD 2004 I2C (mạch PCF8574) với ESP32 DevKit V1, quét địa chỉ I2C, hiển thị 4 dòng chữ, tạo ký tự riêng, làm bộ đếm thời gian và đổi sang LCD 1602.


Bình luận
Đã thêm vào giỏ hàng