Trang Tổng Quan / Tuần 2: Arduino UNO R3 & LED
Tuần 2 Note chính thức: w2-26-09.md • 26/09/2026

INTRODUCE TO THE ARDUINO & CÁC THIẾT BỊ

Toàn bộ nội dung ghi chú chi tiết từ buổi học Tuần 2: Bo mạch Arduino UNO R3, phân loại tín hiệu Digital/Analog, kỹ thuật Test board, môi trường Arduino IDE, LED đơn, điện trở, cẩm nang LED 7 đoạn và hướng dẫn nộp bài trên Tinkercad.

### 0. Lưu ý chung:

• Cẩn thận, chú ý tránh đoản mạch. (Luôn kiểm tra kỹ các mối nối trên test board, không để nguồn và mass GND chạm trực tiếp vào nhau).

Mục 1

Giới Thiệu Chi Tiết Bo Mạch Arduino UNO R3

Phần cứng
• Reset switch: Reset lại toàn bộ chương trình (chương trình sẽ khởi động và thực thi lại từ hàm setup()).
• Trong điện trở có 2 loại tín hiệu: Digital (Dạng binary 0, 1; sáng tối) và Analog (Liên quan đến khoảng giá trị: cường độ ánh sáng, độ ẩm...):
- Digital:
  • • Digital input: Sử dụng 1 trong 14 chân (từ 0 đến 13)
  • • Digital output: Sử dụng 1 trong 14 chân (từ 0 đến 13)
- Analog:
  • • Analog input: Dùng sáu chân từ (A0 đến A5)
  • • Analog output: Sử dụng các chân có dấu ~ (chân PWM ~3, ~5, ~6, ~9, ~10, ~11)
• Nhóm power: Cung cấp nguồn cho mạch. Bao gồm: VIN, GND, 5V, 3.3V. Lưu ý: Mạch phải kín.
  • - Cực 3V và 5V: là cực dương
  • - GND: là cực âm
  • - Lưu ý: Tất cả (ngoại trừ led và led 7 đoạn là dùng 3.3V) còn lại dùng 5V
Mục 2

Test Board (Breadboard)

Cấu trúc 4 vùng

• Lưu ý: Test board dài đơn giản ghép giữa 2 test board ngắn.

• Cấu trúc: 4 vùng (từ trái sang phải: 1, 2, 3, 4)

- Vùng 1, 4 (Dải ngoài cùng):

Có các miếng kim loại kéo dài từ trên xuống dưới.
(Điểm đặc biệt: Bên dưới liên thông với nhau → Cấp điện 1 đầu thì tất cả các đầu còn lại đều có điện).

- Vùng 2, 3 (Dải bên trong):

Có 5 hàng lỗ, mỗi hàng có 5 lỗ nhỏ. Các lỗ này có 1 miếng kim loại kéo dài theo chiều ngang (các lỗ trên cùng 1 hàng ngang liên thông với nhau).

Mục 3

Giới Thiệu Về Arduino IDE

Môi trường code
• Luôn có 2 hàm (dù có viết code hay không?): void setup() { } và void loop() { }
- Hàm setup(): Chỉ chạy 1 lần (khi khởi động).
  • Các trường hợp hàm setup() được chạy: Khi mới ghim điện, khi nhấn nút Reset, khi nạp code.
- Hàm loop(): Chạy liên tục cho đến khi tắt nguồn.
  • Các trường hợp hàm loop() được chạy: Chạy vô tận (vòng lặp).
  • Lưu ý: Viết code sao cho nó chạy lần thứ nhất vẫn đúng mà lần thứ n vẫn đúng.

• Chọn đúng board và port (Ở trên cùng).

• Các nút trên cùng bên phải:

  • Nút tích: Để verify (kiểm tra lỗi code)
  • → Nút mũi tên: Để nạp code vào board
• Code Serial Hello World:
void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
    Serial.println("Hello World");
    delay(1000);
}
- Giải thích chi tiết:
  • Serial.begin(9600): Mở cổng giao tiếp với máy tính với baud rate 9600
  • Serial.println("Hello World"): In chuỗi "Hello World" ra cổng giao tiếp
  • delay(1000): Dừng chương trình 1 giây
Mục 4

Đèn LED

Linh kiện

• Gồm 2 chân dài và ngắn: Chân dài là cực dương, chân ngắn là cực âm.

  • Chân dương phải nối vào 3.3V
  • Chân âm nối vào cực âm của nguồn (GND)

• Nối ngược cực thì nó không hoạt động.

Mục 5

Resistor (Điện Trở) & Code Bóng Đèn

Mã màu & Code
• Có 3 vòng màu để ký hiệu giá trị của điện trở:
  • 2 vòng màu đầu tiên ghép lại với nhau ra chữ số.
  • Vòng màu cuối cùng là hệ số nhân.
→ Lấy số của vòng 1 và 2 nhân với hệ số vòng số 3 ra được giá trị (Đơn vị: Ω).

#### Code bóng đèn:

- Code đèn nhấp nháy:
void setup() {
  // put your setup code here, to run once:
  pinMode(8, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(8, HIGH);
  delay(1000);
  digitalWrite(8, LOW);
  delay(1000);
}
- Giải thích:
  • pinMode(8, OUTPUT): Cấu hình chân số 8 là OUTPUT.
  • digitalWrite(8, HIGH): Bật chân số 8.
  • digitalWrite(8, LOW): Tắt chân số 8.
- Code đèn giao thông:
int red_led = 13;
int yellow_led = 12;
int green_led = 11;

void setup() {
  // put your setup code here, to run once:
  pinMode(red_led, OUTPUT);
  pinMode(yellow_led, OUTPUT);
  pinMode(green_led, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(red_led, HIGH);
  delay(1000);
  digitalWrite(red_led, LOW);
  delay(1000);
  digitalWrite(yellow_led, HIGH);
  delay(1000);
  digitalWrite(yellow_led, LOW);
  delay(1000);
  digitalWrite(green_led, HIGH);
  delay(1000);
  digitalWrite(green_led, LOW);
  delay(1000);
}
- Giải thích:
  • int red_led = 13;: Khai báo biến red_led với giá trị là 13
  • int yellow_led = 12;: Khai báo biến yellow_led với giá trị là 12
  • int green_led = 11;: Khai báo biến green_led với giá trị là 11
  • pinMode(red_led, OUTPUT);: Cấu hình chân số 13 là OUTPUT.
  • digitalWrite(red_led, HIGH);: Bật chân số 13.
  • digitalWrite(red_led, LOW);: Tắt chân số 13.
Mục 6

7-Segment Display (LED 7 Đoạn)

Trọng tâm
• 2 loại: Common Anode (Chân chung dương) và Common Cathode (Chân chung âm):
- Common Anode: Chân chung dương → Chân chung nối vào 3.3V/5V (mức LOW là sáng, HIGH là tắt).
- Common Cathode: Chân chung âm → Chân chung nối vào GND (mức HIGH là sáng, LOW là tắt).
  • Các chân A, B, C, D, E, F, G là các chân điều khiển để hiển thị số, nối vào các chân Digital trên Arduino.
  • Chỉ cần cắm vào 1 trong 2 chân chung (chân 3 hoặc chân 8).
• Cấu trúc: Gồm 10 chân (5 chân trên, 5 chân dưới)
  • 2 chân chung (Common): Chân số 3 và 8.
  • 7 chân điều khiển đoạn LED: A, B, C, D, E, F, G.
  • 1 chân dấu chấm thập phân: DP (Dot Point).
Sơ đồ mạch tương đương: Common Anode vs Common Cathode
Sơ đồ mạch tương đương Common Anode và Common Cathode

#### Sơ đồ cắm chân mẫu (Wiring):

Chân trên LED 7 đoạn Tên đoạn / Chức năng Chân kết nối trên Arduino UNO Ghi chú
Chân 7AChân Digital 2Thanh ngang trên cùng
Chân 6BChân Digital 3Thanh dọc trên bên phải
Chân 4CChân Digital 4Thanh dọc dưới bên phải
Chân 2DChân Digital 5Thanh ngang dưới cùng
Chân 1EChân Digital 6Thanh dọc dưới bên trái
Chân 9FChân Digital 7Thanh dọc trên bên trái
Chân 10GChân Digital 8Thanh ngang ở giữa
Chân 3 hoặc 8COM (GND)Chân GNDChân chung (Common Cathode - nối qua điện trở 220Ω)
Chân 5DPKhông nối (hoặc nối Digital 9)Dấu chấm thập phân

#### Code LED 7 đoạn

##### 1. Code màn hình số 8 (Quy ước LED Common Cathode):
// Khai báo các chân nối với đoạn A, B, C, D, E, F, G
int pinA = 2;
int pinB = 3;
int pinC = 4;
int pinD = 5;
int pinE = 6;
int pinF = 7;
int pinG = 8;

void setup() {
  // Cấu hình tất cả các chân điều khiển là OUTPUT
  pinMode(pinA, OUTPUT);
  pinMode(pinB, OUTPUT);
  pinMode(pinC, OUTPUT);
  pinMode(pinD, OUTPUT);
  pinMode(pinE, OUTPUT);
  pinMode(pinF, OUTPUT);
  pinMode(pinG, OUTPUT);
}

void loop() {
  // Số 8: Bật sáng tất cả 7 đoạn A, B, C, D, E, F, G
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, HIGH);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
}
- Giải thích chi tiết:
  • pinMode(pinA ... pinG, OUTPUT): Cấu hình các chân số từ 2 đến 8 trên Arduino thành chân xuất tín hiệu (OUTPUT).
  • digitalWrite(pin, HIGH): Xuất điện áp mức cao (HIGH) ra toàn bộ 7 đoạn A, B, C, D, E, F, G để tất cả các thanh LED cùng sáng, tạo thành hình số 8.
##### 2. Code màn hình đếm từ 0 đến 9 (Quy ước LED Common Cathode):
// Khai báo mảng các chân nối tương ứng với đoạn A, B, C, D, E, F, G
int segPins[] = {2, 3, 4, 5, 6, 7, 8};

// Bảng trạng thái hiển thị số từ 0 đến 9 cho LED Common Cathode (1: Sáng - HIGH, 0: Tắt - LOW)
// Thứ tự từng đoạn trong mảng: {A, B, C, D, E, F, G}
byte numDigits[10][7] = {
  {1, 1, 1, 1, 1, 1, 0}, // Số 0 (Sáng A, B, C, D, E, F; Tắt G)
  {0, 1, 1, 0, 0, 0, 0}, // Số 1 (Sáng B, C)
  {1, 1, 0, 1, 1, 0, 1}, // Số 2 (Sáng A, B, D, E, G)
  {1, 1, 1, 1, 0, 0, 1}, // Số 3 (Sáng A, B, C, D, G)
  {0, 1, 1, 0, 0, 1, 1}, // Số 4 (Sáng B, C, F, G)
  {1, 0, 1, 1, 0, 1, 1}, // Số 5 (Sáng A, C, D, F, G)
  {1, 0, 1, 1, 1, 1, 1}, // Số 6 (Sáng A, C, D, E, F, G)
  {1, 1, 1, 0, 0, 0, 0}, // Số 7 (Sáng A, B, C)
  {1, 1, 1, 1, 1, 1, 1}, // Số 8 (Sáng tất cả)
  {1, 1, 1, 1, 0, 1, 1}  // Số 9 (Sáng A, B, C, D, F, G)
};

void setup() {
  // Cấu hình 7 chân LED là OUTPUT bằng vòng lặp
  for (int i = 0; i < 7; i++) {
    pinMode(segPins[i], OUTPUT);
  }
}

// Hàm hiển thị một chữ số bất kỳ (từ 0 đến 9)
void displayDigit(int num) {
  for (int i = 0; i < 7; i++) {
    digitalWrite(segPins[i], numDigits[num][i]);
  }
}

void loop() {
  // Đếm tuần tự từ số 0 đến số 9
  for (int i = 0; i < 10; i++) {
    displayDigit(i);
    delay(1000); // Dừng lại 1 giây (1000ms) trước khi nhảy sang số tiếp theo
  }
}
- Giải thích chi tiết:
  • int segPins[] = {2, 3, 4, 5, 6, 7, 8}: Gom 7 chân điều khiển vào một mảng để dễ quản lý và duyệt bằng vòng lặp.
  • byte numDigits[10][7]: Mảng 2 chiều đóng vai trò là "bảng mã hiển thị". Hàng tương ứng với số từ 0 đến 9, 7 cột tương ứng với trạng thái BẬT (1) hay TẮT (0) của 7 đoạn A → G.
  • displayDigit(int num): Hàm nhận vào một số num (0–9), sau đó dùng vòng lặp for để gán mức tín hiệu HIGH/LOW cho 7 chân theo hàng num trong mảng numDigits.
  • loop(): Sử dụng vòng lặp for (int i = 0; i < 10; i++) để lần lượt hiển thị từ 0 đến 9, mỗi số dừng 1 giây (delay(1000)). Khi hết vòng lặp, hàm loop() tự động quay lại từ 0.
Mục 7

Phần Mềm Giả Lập Môn Học & Hướng Dẫn Nộp Bài

Tinkercad.com

• Tên phần mềm: tinkercad.com

• Hướng dẫn thao tác:
  • Tạo dự án: Home → Create → Circuits → New Circuits
  • Tạo mã: Nhấn vào Code → Text
  • Nhớ đổi loại mạch của 7-segment (Common Anode sang Common Cathode)
  • Để nộp bài:
    • • Share to: Tự động chụp lại file .png và lưu về máy (file nộp)
    • • File code: Trả về file tương ứng để nộp
    • • Link: Bấm Share to và lấy link chia sẻ ở đây
Lưu ý quan trọng: Trong hướng dẫn nộp bài của giảng viên nên xem kỹ các định dạng file và yêu cầu cụ thể trên Moodle môn học.
Mục 8

Câu Hỏi Ôn Tập

13 Câu hỏi

Tổng hợp 13 câu hỏi ôn tập lý thuyết & thực hành từ ghi chú tuần 2:

  1. Kể tên các loại tín hiệu điện tử?
  2. Các chân có dấu ~ có thể sử dụng cho loại tín hiệu điện tử nào? Với loại thiết bị input hay output?
  3. Kể tên các hàm bắt buộc phải có của 1 chương trình lập trình nhúng.
  4. Hàm setup sẽ được gọi chạy trong những tình huống nào?
  5. Hàm loop trong quy trình nhúng sẽ chạy cho đến khi nào thì dừng?
  6. Để có thể dùng cửa sổ serial monitor thì phải dùng câu lệnh nào?
  7. Điều gì xảy ra nếu tốc độ giữa 2 thiết bị này khác nhau?
  8. Viết các câu lệnh để đèn LED ở chân số 2 nhấp nháy mỗi 1 giây.
  9. Hàm delay dùng để làm gì? Và cho biết đơn vị của hàm delay.
  10. Điện trở có tác dụng gì?
  11. Giả sử điện trở có 3 màu là vàng, tím, cam; hãy cho biết giá trị điện trở của nó.
  12. Hãy kể tên các loại LED 7 đoạn mà bạn đã từng biết.
  13. Hãy vẽ sơ đồ mạch và lập trình hoàn chỉnh theo sơ đồ sau: Điều khiển 2 bóng đèn LED chớp tắt luân phiên.
Tổng quan Tuần 1 Tuần 2 Đồ án Tra cứu