Hướng dẫn sử dụng module LED ma trận 8×8 MAX7219 với Arduino
Module LED ma trận 8×8 được sử dụng khá phổ biến trong quá trình học lập trình Arduino và được ứng dụng rộng rãi trong các hoạt động như làm biển quảng cáo, thông báo… Trong hướng dẫn này, các bạn sẽ tìm hiểu cách sử dụng module LED ma trận 8×8 MAX7219 với Arduino để tạo ra các chương trình thú vị như lập trình led matrix 8×8 chạy chữ và hiển thị chữ trên led ma trận…
Đọc ngay: LED 7 đoạn là gì? Cách hiển thị LED 7 đoạn bằng Arduino
Tổng quan về Module MAX7219
Có 2 dạng module Led ma trận được sử dụng rộng rãi trên thị trường, trong đó phải kể đến là Module MAX7219 và Module FC-16.
Module MAX7219 bao gồm 1 Led ma trận 8×8 và IC điều khiển LED MAX7219.
LED ma trận 8×8
Led ma trận 8×8 thông thường sẽ có 16 chân, 8 chân cho mỗi hàng và 8 chân cho mỗi cột. Tất cả các hàng và cột được nối với nhau. Cách nối này sẽ giúp led matrix 8×8 giảm được số lượng chân, nếu không nó sẽ có 65 chân, mỗi chân đại diện cho một đèn LED và một chân sẽ mắc vào điện áp dương (Anode chung) hoặc điện áp âm (Cathode chung). Bằng cách kết nối các hàng và cột, chỉ cần 16 chân để điều khiển toàn bộ 8×8 led matrix. Kỹ thuật điều khiển này được gọi là Ghép kênh .
Trong kỹ thuật này, mỗi cột được kích hoạt trong một thời gian rất ngắn, đồng thời, đèn LED trên cột đó sáng lên bằng cách gọi địa chỉ cho hàng tương ứng. Các cột được chuyển đổi nhanh đến mức (hàng trăm hoặc hàng nghìn lần mỗi giây).
IC MAX7219
Vấn đề quan trọng nhất khi ghép kênh (ghép các module lại với nhau) là phải làm mới liên tục màn hình để giữ cho hình ảnh luôn ổn định.
Các IC MAX7219 sẽ xử lý tất cả các công việc kiểm soát và làm mới. Chỉ cần đảm bảo các lệnh đã được gửi thông qua giao tiếp SPI.
Nó có thể điều khiển 64 đèn LED riêng lẻ mà vẫn giữ độ sáng không đổi. Khi bộ vi điều khiển đã cập nhật màn hình, MAX7219 sẽ xử lý công việc làm mới màn hình ở 800 Hz. Điều này giúp giải phóng bộ vi điều khiển để làm những việc quan trọng khác.
MAX7219 có tích hợp chế độ tiết kiệm năng lượng nên có thể tắt đèn LED trong khi khởi động, để ngăn các hiển thị bất thường trong những giây đầu tiên hoạt động.
MAX7219 giao tiếp qua SPI nên chỉ cần 3 chân dữ liệu để kết nối với vi điều khiển. Ngoài ra, chúng ta có thể kết nối nhiều module lại với nhau để có màn hình lớn hơn bằng cách sử dụng 3 dây giống nhau.
Điều chỉnh độ sáng của LED ma trận bằng phần cứng và phần mềm
Module Led ma trận 8×8 MAX7219 cho phép điều chỉnh độ sáng của Led matrix bằng phần cứng hoặc phần mềm.
Điều chỉnh bằng phần cứng
Module MAX7219 có một điện trở (RSet) dùng để điều chỉnh độ sáng của Led ma trận 8×8.
Điện trở này dùng để kiểm soát dòng điện tối đa có thể cung cấp cho đèn LED, do đó việc kiểm soát độ sáng tổng thể của led matrix trở nên dễ dàng.
Dưới đây là bảng giá trị điện trở sử dụng dựa trên điện áp và dòng điện của ma trận LED 8×8. Ví dụ, đèn LED 2V 20mA điện trở được yêu cầu là 28kΩ.
Điều chỉnh bằng phần mềm
Ở phần này mình sẽ làm rõ hơn trong phần hướng dẫn bên dưới nhé.
Sơ đồ chân Module MAX7219
Đầu vào
- VCC: được nối với 5V. Vì Led ma trận làm việc với dòng điện lớn (lên đến 1A khi ở độ sáng tối đa), tốt nhất các bạn nên sử dụng nguồn cấp bên ngoài thay vì nguồn 5V của Arduino và hãy giữ độ sáng dưới 25% để tránh quá nhiệt cho bộ điều chỉnh điện áp.
- GND: là chân nối đất.
- DIN: là chân dữ liệu. Kết nối nó với bất kỳ chân kỹ thuật số nào của vi điều khiển.
- CS/LOAD: là Chip Select (đôi khi được dán nhãn là LOAD).
- CLK: là viết tắt của Clock pin. Được kết nối các chân Digital của Arduino.
Đầu ra
- VCC: kết nối với chân 5V của module tiếp theo.
- GND: kết nối với chân GND của module tiếp theo.
- DOUT: là chân Data Out và kết nối với chân DIN của module tiếp theo.
- CS/LOAD: kết nối với CS/LOAD của module tiếp theo.
- CLK: kết nối với chân CLK của module tiếp theo.
Đấu nối Module MAX7219 với Arduino UNO
Như vậy, các bạn đã tìm hiểu được cách thức hoạt động của Module 8×8 Led matrix, tiếp theo chúng ta sẽ kết nối với Arduino.
Vì Led ma trận hoạt động ở công suất khoảng 1A và cần tính ổn định nên mình sẽ sử dụng nguồn điện cấp từ Adapter thay vì dùng nguồn 5V của Arduino. Nếu chỉ sử dụng một module MAX7219, các bạn có thể cấp nguồn trực tiếp cho nó từ Arduino.
MAX7219 sẽ hoạt động dựa trên chuẩn giao tiếp SPI. Đối với các board Arduino như UNO/Nano V3.0, các chân này sẽ là số 13(SCK), 12(MISO), 11(MOSI) và 10 SS).
Các linh kiện cần thiết cho dự án
TÊN LINH KIỆN | SỐ LƯỢNG | NƠI BÁN |
Arduino Uno R3 | 1 | Shopee | Cytron |
Dây cắm | 10-20 | Shopee | Cytron |
Breadboard | 1 | Shopee | Cytron |
Adapter 5V 1A | 1 | Shopee | Cytron |
Module Led ma trận 8×8 MAX7219 | 4 | Shopee | Cytron |
Cài đặt thư viện
Để chương trình có thể hoạt động các bạn cần cài đặt thư viện MD Parola.
Truy cập vào Sketch > Include Library > Manage Libraries…
Nhập vào ô tìm kiếm, gõ “max72xx”
Chọn phiên bản mới nhất và nhấn Install để tải xuống.
Code 1: Hiển thị chữ trên Led ma trận
Trong phần code mình cung cấp, các bạn cần lưu ý hai biến sau:
Biến đầu tiên, HARDWARE_TYPE
, khai báo cho Arduino về module đang sử dụng.
Đặt HARDWARE_TYPE
thành GENERIC_HW
, nếu bạn đang sử dụng module có PCB màu xanh lá cây và IC MAX7219 giống như hình bên dưới.
Đặt HARDWARE_TYPE
thành FC16_HW
, nếu bạn đang sử dụng module có PCB màu xanh lam và sử dụng IC dán MAX7219 giống như hình bên dưới.
Biến thứ hai, MAX_DEVICES
, xác định số lượng IC MAX7219 đang được sử dụng. Một IC MAX7219 thì được tính là một thiết bị, vì vậy nếu bạn muốn điều khiển màn hình 8×32, hãy đặt MAX_DEVICES
thành 4.
Sau khi xác định xong hai biến trên, các bạn tiến hành nạp code và xem thành quả bên dưới.
// Including the required Arduino libraries #include <MD_Parola.h> #include <MD_MAX72xx.h> #include <SPI.h> // Uncomment according to your hardware type #define HARDWARE_TYPE MD_MAX72XX::FC16_HW //#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW // Defining size, and output pins #define MAX_DEVICES 4 #define CS_PIN 3 // Create a new instance of the MD_Parola class with hardware SPI connection MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); void setup() { // Intialize the object myDisplay.begin(); // Set the intensity (brightness) of the display (0-15) myDisplay.setIntensity(0); // Clear the display myDisplay.displayClear(); } void loop() { myDisplay.setTextAlignment(PA_LEFT); myDisplay.print("Left"); delay(2000); myDisplay.setTextAlignment(PA_CENTER); myDisplay.print("Center"); delay(2000); myDisplay.setTextAlignment(PA_RIGHT); myDisplay.print("Right"); delay(2000); myDisplay.setTextAlignment(PA_CENTER); myDisplay.setInvert(true); myDisplay.print("Invert"); delay(2000); myDisplay.setInvert(false); myDisplay.print(1234); delay(2000); }
Code hiển thị chữ trên Led ma trận 8×32 đã hoạt động đúng theo chương trình mình viết.
Giải thích Code
#include <MD_Parola.h> #include <MD_MAX72xx.h> #include <SPI.h>
Khai báo và gọi thư viện. Đoạn mã này bao gồm các thư viện cần thiết để điều khiển hiển thị LED ma trận và giao tiếp SPI trên Arduino
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW //#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
Đoạn này cho phép bạn chọn loại phần cứng bạn sử dụng, bằng cách chú thích hoặc bỏ chú thích dòng tương ứng.
#define MAX_DEVICES 4 #define CS_PIN 3
MAX_DEVICES xác định số lượng module MAX7219 được daisy-chain (nối tiếp) để tạo ra hiển thị LED ma trận lớn hơn. CS_PIN là chân kết nối giữa Arduino và module MAX7219.
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
Đoạn mã này tạo ra một đối tượng MD_Parola với các thông số cần thiết để điều khiển hiển thị.
void setup() { myDisplay.begin(); myDisplay.setIntensity(0); myDisplay.displayClear(); }
Trong hàm setup(), ta gọi hàm begin() để khởi tạo đối tượng hiển thị. Hàm setIntensity() được sử dụng để thiết lập độ sáng cho hiển thị (0-15). Hàm displayClear() được sử dụng để xóa nội dung hiển thị ban đầu trên LED ma trận.
void loop() { myDisplay.setTextAlignment(PA_LEFT); myDisplay.print("Left"); delay(2000); myDisplay.setTextAlignment(PA_CENTER); myDisplay.print("Center"); delay(2000); myDisplay.setTextAlignment(PA_RIGHT); myDisplay.print("Right"); delay(2000); myDisplay.setTextAlignment(PA_CENTER); myDisplay.setInvert(true); myDisplay.print("Invert"); delay(2000); myDisplay.setInvert(false); myDisplay.print(1234); delay(2000); }
Trong hàm loop(), ta sử dụng các phương thức của đối tượng MD_Parola để hiển thị các chuỗi và số trên LED ma trận. Hàm setTextAlignment() được sử dụng để thiết lập căn chỉnh văn bản trên LED ma trận.
Code 2: Lập trình Led Matrix 8×32 Arduino chạy chữ
// Defining size, and output pins #define MAX_DEVICES 4 #define CS_PIN 3 // Create a new instance of the MD_Parola class with hardware SPI connection MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); void setup() { // Intialize the object myDisplay.begin(); // Set the intensity (brightness) of the display (0-15) myDisplay.setIntensity(0); // Clear the display myDisplay.displayClear(); myDisplay.displayScroll("Hello", PA_CENTER, PA_SCROLL_LEFT, 100); } void loop() { if (myDisplay.displayAnimate()) { myDisplay.displayReset(); } }
Sau khi nạp code xong thì thành quả sẽ như thế này.
Giải thích Code
#define MAX_DEVICES 4 #define CS_PIN 3
MAX_DEVICES
xác định số lượng module MAX7219 được daisy-chain (nối tiếp) để tạo ra hiển thị LED ma trận lớn hơn. CS_PIN là chân kết nối giữa Arduino và module MAX7219.
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
Đoạn mã này tạo ra một đối tượng MD_Parola với các thông số cần thiết để điều khiển hiển thị.
void setup() { myDisplay.begin(); myDisplay.setIntensity(0); myDisplay.displayClear(); myDisplay.displayScroll("Hello", PA_CENTER, PA_SCROLL_LEFT, 100); }
Trong hàm setup(), ta gọi hàm begin() để khởi tạo đối tượng hiển thị. Hàm setIntensity()
được sử dụng để thiết lập độ sáng cho hiển thị (0-15). Hàm displayClear() được sử dụng để xóa nội dung hiển thị ban đầu trên LED ma trận. Hàm displayScroll()
được sử dụng để cuộn một chuỗi văn bản trên hiển thị LED ma trận, với các tham số là chuỗi văn bản, căn chỉnh, hướng cuộn và tốc độ cuộn.
void loop() { if (myDisplay.displayAnimate()) { myDisplay.displayReset(); } }
Trong hàm loop(), ta sử dụng phương thức displayAnimate()
của đối tượng MD_Parola để thực hiện hiệu ứng hiển thị. Nếu hiệu ứng đã hoàn thành, ta gọi hàm displayReset()
để chuẩn bị cho hiệu ứng tiếp theo.
Kết luận
Thông qua bài hướng dẫn làm led matrix này các bạn sẽ hiểu rõ hơn cách sử dụng module LED ma trận 8×8 MAX7219 với Arduino. Từ đó các bạn có thể xây dựng cho mình nhiều ý tưởng như hiển thị đồng hồ thời gian thực bằng Led ma trận hay là những bảng hiển thị nhiệt độ, độ ẩm…Tóm lại, nếu bài viết này hay và mang lại nhiều lợi ích thì đừng ngần ngại ủng hộ mình bằng cách Donate để giúp mình có động lực ra nhiều bài viết hay hơn nhé.
anh cho em hỏi, em thấy matrix 32×8 có 4 chân thì sao kết nối với arduino chỉ qua 1 chân 3 thôi ạ?