Bài 25: Bo mạch lập trình vi điều khiển – Lý thuyết trọng tâm

Lập trình trên máy tính truyền thống

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.

Lập trình trên máy tính truyền thống
Lập trình trên máy tính truyền thống

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.

Bộ công cụ phát triển cho vi điều khiển
Bộ công cụ phát triển cho vi điều khiể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:

Sơ đồ khối của một bo mạch lập trình vi điều khiển
Sơ đồ khối của một bo mạch lập trình vi điều khiển

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:

Sơ đồ bố trí linh kiện trên bo mạch Arduino Uno
Sơ đồ bố trí linh kiện trên bo mạch Arduino Uno
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đ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
Thu thập số liệu về độ ẩm đất sử dụng bo mạch Arduino Uno
Thu thập số liệu về độ ẩm đất sử dụng bo mạch Arduino Uno

Ứ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
Điều khiển LED bằng bo mạch lập trình vi điều khiển
Điều khiển LED bằng bo mạch lập trình vi điều khiển

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
Các bước lập trình cho vi điều khiển
Các bước lập trình cho vi điều khiển
┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│   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:

Giao diện của một IDE
Giao diện của một IDE

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:

  • HIGH tương đương giá trị 1 (mức điện áp 5V) → Thường dùng để BẬT thiết bị
  • LOW tươ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ư

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