Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
I. Lý thuyết trọng tâm
1. Tổng quan về bo mạch lập trình vi điều khiển
Vì sao cần bo mạch lập trình?
Khi làm việc với máy tính thông thường, chúng ta tương tác thông qua bàn phím, chuột và màn hình. Tuy nhiên, vi điều khiển là những chip xử lý có kích thước nhỏ gọn, không được trang bị sẵn các thiết bị ngoại vi như vậy.
Vậy làm thế nào để viết code và đưa chương trình vào vi điều khiển? Câu trả lời chính là bo mạch lập trình – một thiết bị đóng vai trò cầu nối giữa máy tính và vi điều khiển.

Bo mạch lập trình là gì?
Bo mạch lập trình vi điều khiển là một board mạch điện tử được thiết kế chuyên dụng, cho phép người dùng:
- Viết chương trình trên máy tính bằng phần mềm chuyên dụng
- Truyền (nạp) chương trình đã viết vào bộ nhớ của vi điều khiển
- Kết nối vi điều khiển với các linh kiện điện tử bên ngoài một cách dễ dàng
Chức năng chính
Bo mạch lập trình đảm nhận vai trò tạo ra các cổng giao tiếp chuẩn hóa về mặt điện và cơ khí. Nhờ đó, việc ghép nối vi điều khiển với cảm biến, động cơ, đèn LED hay các module khác trở nên thuận tiện và an toàn hơn.
Ngoài ra, khi kết hợp vi điều khiển với các cảm biến hoặc cơ cấu chấp hành, chúng ta có thể xây dựng nhiều hệ thống đo lường và điều khiển tự động phục vụ đời sống.
Bộ kit phát triển (Development Kit)
Nhiều hãng sản xuất thường đóng gói bo mạch lập trình cùng với các phụ kiện đi kèm như dây nối, cảm biến, màn hình LCD, động cơ… tạo thành bộ kit phát triển hoàn chỉnh. Bộ kit này giúp người học và người phát triển sản phẩm có thể nhanh chóng thử nghiệm ý tưởng mà không cần mua riêng lẻ từng linh kiện.

2. Cấu trúc của bo mạch lập trình vi điều khiển
Sơ đồ khối tổng quát
Một bo mạch lập trình vi điều khiển điển hình được tổ chức thành 5 khối chức năng chính, liên kết với nhau theo sơ đồ sau:

a) Khối nguồn
- Thành phần: Gồm jack cắm nguồn ngoài và các mạch ổn áp
- Chức năng: Tiếp nhận điện áp đầu vào (từ adapter hoặc cổng USB), sau đó chuyển đổi và ổn định thành các mức điện áp phù hợp (thường là 5V và 3.3V) để nuôi toàn bộ linh kiện trên bo mạch
b) Khối vi điều khiển
- Vị trí: Đây là “bộ não” và thành phần quan trọng nhất của toàn bộ hệ thống
- Chức năng: Lưu giữ chương trình trong bộ nhớ flash và thực thi các lệnh đã được lập trình sẵn. Mọi hoạt động đọc cảm biến, xử lý dữ liệu, điều khiển thiết bị đều do khối này đảm nhiệm
c) Khối dao động
- Thành phần: Thường sử dụng thạch anh (crystal) có tần số hàng chục MHz
- Chức năng: Tạo ra các xung nhịp (clock) tuần hoàn với tần số ổn định, giúp đồng bộ hóa hoạt động của tất cả các module bên trong vi điều khiển. Có thể hiểu đơn giản như “nhịp tim” giữ cho hệ thống vận hành đều đặn
d) Khối truyền thông
- Vai trò: Đa phần vi điều khiển giao tiếp theo chuẩn UART, trong khi máy tính và thiết bị ngoại vi sử dụng USB, WiFi hoặc Bluetooth
- Chức năng: Thực hiện việc chuyển đổi qua lại giữa các giao thức truyền dữ liệu khác nhau, đảm bảo vi điều khiển có thể “nói chuyện” được với máy tính và các thiết bị bên ngoài
e) Khối tín hiệu vào/ra
- Thành phần: Các hàng chân cắm (header pins) được bố trí theo chuẩn nhất định
- Chức năng: Cung cấp giao diện vật lý thuận tiện để người dùng kết nối vi điều khiển với cảm biến (đầu vào) hoặc thiết bị chấp hành như LED, relay, động cơ (đầu ra)
Ví dụ thực tế: Bo mạch Arduino Uno
Arduino Uno là một trong những bo mạch phổ biến nhất hiện nay, được phát triển bởi nhóm nghiên cứu tại Ý từ năm 2005. Trên bo mạch này, ta có thể nhận diện:

| Thành phần | Vị trí/Đặc điểm |
|---|---|
| Cổng USB | Dùng để kết nối với máy tính, vừa cấp nguồn vừa truyền dữ liệu |
| Jack nguồn DC | Cắm adapter nguồn ngoài (7-12V) |
| Chip vi điều khiển | ATmega328P – chip hình chữ nhật lớn ở giữa bo |
| Thạch anh dao động | Linh kiện nhỏ màu bạc gần chip chính |
| Chân Digital (0-13) | 14 chân tín hiệu số, một số hỗ trợ PWM |
| Chân Analog (A0-A5) | 6 chân đọc tín hiệu tương tự |
| LED chỉ thị | ON (báo nguồn), TX/RX (báo truyền/nhận dữ liệu) |
| Nút Reset | Khởi động lại chương trình |
3. Ứng dụng của bo mạch lập trình vi điều khiển
Bo mạch lập trình được ứng dụng rộng rãi trong hai lĩnh vực chính: đo lường và điều khiển.
Ứng dụng trong đo lường
Khi ghép nối bo mạch với các loại cảm biến, hệ thống có khả năng thu thập và giám sát các thông số môi trường theo thời gian thực.
Nguyên lý hoạt động:
- Cảm biến chuyển đổi đại lượng vật lý (nhiệt độ, độ ẩm, ánh sáng…) thành tín hiệu điện
- Vi điều khiển đọc tín hiệu này thông qua các chân đầu vào (sử dụng lệnh đọc cổng)
- Dữ liệu được xử lý, hiển thị hoặc lưu trữ theo yêu cầu
Ví dụ thực tế:
- Hệ thống theo dõi độ ẩm đất trong nông nghiệp thông minh
- Trạm đo thời tiết mini (nhiệt độ, độ ẩm, áp suất)
- Thiết bị đo nồng độ khí gas trong nhà bếp
- Máy đo nhịp tim, SpO2 cá nhân

Ứng dụng trong điều khiển
Khi kết nối với các thiết bị chấp hành (actuator), bo mạch có thể điều khiển chúng hoạt động theo kịch bản đã lập trình sẵn.
Nguyên lý hoạt động:
- Chương trình trong vi điều khiển quyết định thời điểm và cách thức điều khiển
- Vi điều khiển xuất tín hiệu ra các chân đầu ra (sử dụng lệnh ghi cổng)
- Thiết bị chấp hành nhận tín hiệu và thực hiện hành động tương ứng
Ví dụ thực tế:
- Đèn tự động bật/tắt theo cường độ ánh sáng
- Cửa cuốn tự động đóng/mở
- Hệ thống tưới cây thông minh
- Robot di chuyển theo line
- Điều khiển quạt theo nhiệt độ phòng

Sức mạnh thực sự của vi điều khiển thể hiện khi kết hợp cả hai chức năng: đọc dữ liệu từ cảm biến, xử lý thông tin, rồi ra quyết định điều khiển thiết bị.
Ví dụ: Hệ thống điều hòa không khí thông minh
- Cảm biến đo nhiệt độ phòng → Vi điều khiển so sánh với ngưỡng cài đặt → Bật/tắt máy lạnh tự động
4. Công cụ lập trình cho bo mạch vi điều khiển
Ngôn ngữ lập trình
Phần lớn các vi điều khiển thông dụng hiện nay được lập trình bằng ngôn ngữ C hoặc các phiên bản mở rộng của nó (như C++ cho Arduino). Đây là ngôn ngữ bậc cao, dễ đọc và dễ học hơn so với ngôn ngữ Assembly.
Tuy nhiên, vi điều khiển chỉ hiểu được mã máy (dãy số 0 và 1). Do đó, cần có phần mềm chuyên dụng để chuyển đổi code từ ngôn ngữ C sang mã máy.
Quy trình lập trình cho vi điều khiển
Việc lập trình cho vi điều khiển trải qua 4 bước tuần tự:
Bước 1: Viết mã nguồn (Source Code)
- Lập trình viên soạn thảo chương trình bằng ngôn ngữ C/C++
- Sử dụng các cú pháp, hàm và thư viện phù hợp với loại vi điều khiển
Bước 2: Kiểm tra và sửa lỗi (Debug)
- Phần mềm quét toàn bộ code để phát hiện lỗi cú pháp
- Lập trình viên chỉnh sửa các lỗi được báo cáo
Bước 3: Biên dịch (Compile)
- Chương trình biên dịch chuyển đổi mã nguồn thành mã máy (file .hex)
- Đây là định dạng mà vi điều khiển có thể hiểu và thực thi
Bước 4: Nạp chương trình (Upload)
- Mã máy được truyền từ máy tính vào bộ nhớ của vi điều khiển thông qua cáp USB
- Sau khi nạp thành công, vi điều khiển sẽ tự động chạy chương trình

┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ VIẾT MÃ │───▶│ KIỂM TRA │───▶│ BIÊN DỊCH │───▶│ NẠP VÀO │
│ NGUỒN │ │ SỬA LỖI │ │ SANG MÃ MÁY │ │ VI ĐIỀU │
│ (C/C++) │ │ │ │ (.hex) │ │ KHIỂN │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
Phần mềm Arduino IDE
IDE (Integrated Development Environment) nghĩa là Môi trường phát triển tích hợp – một phần mềm tập hợp đầy đủ các công cụ cần thiết cho việc lập trình.
Arduino IDE là phần mềm miễn phí, mã nguồn mở, được thiết kế đặc biệt để lập trình cho các bo mạch Arduino. Giao diện của phần mềm gồm 3 vùng chính:

a) Thanh công cụ (Toolbar)
Nằm ở phía trên cùng, chứa các nút bấm với chức năng:
- Verify (✓): Kiểm tra lỗi và biên dịch code
- Upload (→): Nạp chương trình vào bo mạch
- New: Tạo file mới
- Open: Mở file có sẵn
- Save: Lưu file hiện tại
b) Cửa sổ soạn thảo code (Editor)
Chiếm phần lớn diện tích màn hình, đây là nơi lập trình viên viết code. Vùng này được trang bị các tính năng hỗ trợ:
- Tô màu cú pháp (syntax highlighting) giúp phân biệt từ khóa, hàm, biến
- Đánh số dòng để dễ theo dõi và sửa lỗi
- Tự động căn lề (auto-indent)
- Gợi ý hoàn thành code
c) Cửa sổ thông báo (Console)
Nằm ở phía dưới, hiển thị các thông tin từ trình biên dịch:
- Thông báo biên dịch thành công
- Danh sách lỗi kèm vị trí dòng code bị lỗi
- Dung lượng bộ nhớ chương trình chiếm dụng
- Trạng thái quá trình nạp code
Dạng Bài tập về lệnh đọc/ghi cổng
Đặc điểm nhận dạng: Yêu cầu viết lệnh đọc dữ liệu từ cảm biến hoặc điều khiển thiết bị.
Kiến thức cần nhớ:
| Thao tác | Loại cổng | Cú pháp lệnh | Ví dụ |
|---|---|---|---|
| Đọc tín hiệu số | Digital | digitalRead(pin) |
digitalRead(2) |
| Đọc tín hiệu tương tự | Analog | analogRead(pin) |
analogRead(A0) |
| Ghi tín hiệu số | Digital | digitalWrite(pin, value) |
digitalWrite(9, HIGH) |
| Ghi tín hiệu PWM | Digital có PWM | analogWrite(pin, value) |
analogWrite(5, 128) |
Lưu ý quan trọng:
HIGHtương đương giá trị1(mức điện áp 5V) → Thường dùng để BẬT thiết bịLOWtương đương giá trị0(mức điện áp 0V) → Thường dùng để TẮT thiết bị- Chân Analog ký hiệu A0, A1, A2… (có chữ A phía trước)
Ví dụ 1: Viết lệnh đọc dữ liệu cảm biến từ cổng A3?
Giải: analogRead(A3)
Ví dụ 2: Viết lệnh bật LED nối với cổng số 9?
Giải: digitalWrite(9, HIGH) hoặc digitalWrite(9, 1)
Ví dụ 3: Muốn tắt LED ở cổng 9 thì thay đổi như thế nào?
Giải: Thay HIGH bằng LOW: digitalWrite(9, LOW) hoặc digitalWrite(9, 0)

ThS. Hồ Thị Thư
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Công Nghệ THPT
Trình độ: Cử nhân Sư phạm Công nghệ, Chứng chỉ hạng II, Chứng chỉ STEM, Ngoại ngữ B1
Kinh nghiệm: 10+ năm kinh nghiệm tại Trường THPT Hoàng Hoa Thám

