MỤC LỤC51.CHƯƠNG 1: GIỚI THIỆU KHÁI QUÁT VỀ LED MATRIX VÀ ARDUINO71.1.Led matrix71.2.Arduino:8Giới thiệu:8Phân loại:10Ứng dụng:122.CHƯƠNG 2: LỰA CHỌN THIẾT BỊ VÀ XÂY DỰNG SƠ ĐỒ MẠCH142.1.Dự kiến đề tài:142.2.Lựa chọn thiết bị:14Led Matrix 2388ASR:14IC MAX7219:162.3.Arduino Uno R3 SMD – Chíp dán:17Xây dựng sơ đồ mạch:213.CHƯƠNG 3: TIẾN HÀNH LẮP ĐẶT MODULE ĐIỀU KHIỂN LED MATRIX 8X8223.1.Tiến hành lắp đặt:223.2.Thiết kế phần mềm:243.3.Tiến hành khởi động mạch và khắc phục lỗi:323.4.Tiến hành mở rộng đề tài:33
KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỰ ĐỘNG CÔNG NGHIỆP ==========o0o========== TIỂU LUẬN HỌC PHẦN: ĐỒ ÁN MÃ HỌC PHẦN: 13321 GIẢNG VIÊN : LỚP : ĐỒ ÁN NHÓM SINH VIÊN : MỤC LỤC Lời mở đầu: Kính thưa thầy, ! Trong học kì I (2021-2022) chúng em học học phần Đồ án 1, nhóm sinh viên lựa chọn đề tài riêng để học tập, thiết kế chạy thực nghiệm Với hướng dẫn thầy …, chúng em lựa chọn xây dựng đề tài 18: Thiết kế module điều khiển led matrix 8x8 Trong trình xây dựng, chúng em viết tiểu luận để ghi chép lại nội dung mà chúng em tìm hiểu, xây dựng mạch, lỗi gặp phải lưu ý để rút kinh nghiệm Vậy mong thầy cô đọc tiểu luận góp ý với chúng em để hồn thiện phát triển đề tài Em xin cám ơn ! CHƯƠNG 1: GIỚI THIỆU KHÁI QUÁT VỀ LED MATRIX VÀ ARDUINO 1.1 Led matrix Led ma trận hay gọi led matrix cấu thành từ bóng Led, xếp thành hàng cột (dạng Module) ghép lại với Dạng bố trí giống ma trận nên người ta gọi Led ma trận Để phù hợp với mục đích sử dụng có nhiều loại Led matrix đời Có loại đơn sắc, đa sắc, full color, loại phân giải cao, phân giải thấp, loại dùng nhà, loại dùng trời… Led ma trận màu điểm ảnh có bóng Led loại màu (đỏ, xanh, vàng…) Ma trận Led đa sắc điểm ảnh có bóng Led có màu khác (thường gọi cụm) Những Led màu khác sáng gần pha trộn tạo thành màu sắc khác Hình 1.1 Một số ví dụ led matrix 1.2.Arduino: Giới thiệu: Hình 1.2.1 Hình ảnh Arduino Arduino tảng mã nguồn mở phần cứng phần mềm Một mạch Arduino bao gồm vi điều khiển AVR với nhiều linh kiện bổ sung giúp dễ dàng lập trình mở rộng với mạch khác Một khía cạnh quan trọng Arduino kết nối tiêu chuẩn nó, cho phép người dùng kết nối với CPU board với module thêm vào dễ dàng chuyển đổi, gọi shield Vài shield truyền thông với board Arduino trực tiếp thông qua chân khác nhau, nhiều shield định địa thông qua serial bus I²C-nhiều shield xếp chồng sử dụng dạng song song Arduino thức thường sử dụng dòng chip megaAVR, đặc biệt ATmega8, ATmega168, ATmega328, ATmega1280, ATmega2560 Một vài vi xử lý khác sử dụng mạch Aquino tương thích Hầu hết mạch gồm điều chỉnh tuyến tính 5V thạch anh dao động 16 MHz (hoặc cộng hưởng ceramic vài biến thể), vài thiết kế LilyPad chạy MHz bỏ qua điều chỉnh điện áp onboard hạn chế kích cỡ thiết bị Một vi điều khiển Arduino lập trình sẵn với boot loader cho phép đơn giản upload chương trình vào nhớ flash onchip, so với thiết bị khác thường phải cần nạp bên Điều giúp cho việc sử dụng Arduino trực tiếp cách cho phép sử dụng máy tính gốc nạp chương trình Theo nguyên tắc, sử dụng ngăn xếp phần mềm Arduino, tất board lập trình thơng qua kết nối RS-232, cách thức thực lại tùy thuộc vào đời phần cứng Các board Serial Arduino có chứa mạch chuyển đổi RS232 sang TTL Các board Arduino lập trình thơng qua cổng USB, thực thông qua chip chuyển đổi USB-to-serial FTDI FT232 Vài biến thể, Arduino Mini Boarduino khơng thức, sử dụng board adapter cáp nối USB-to-serial tháo rời được, Bluetooth phương thức khác (Khi sử dụng cơng cụ lập trình vi điều khiển truyền thống thay ArduinoIDE, cơng cụ lập trình AVR ISP tiêu chuẩn sử dụng.) Board Arduino đưa hầu hết chân I/O vi điều khiển để sử dụng cho mạch Diecimila, Duemilanove, Uno đưa 14 chân I/O kỹ thuật số, số tạo xung PWM (điều chế độ rộng xung) chân input analog, sử dụng chân I/O số Những chân thiết kế nằm phía mặt board, thông qua header 0.10-inch (2.5 mm) Nhiều shield ứng dụng plug-in thương mại hóa Các board Arduino Nano, Arduino-compatible Bare Bones Board Boarduino cung cấp chân header đực mặt board dùng để cắm vào breadboard → Vậy: Arduino công cụ hỗ trợ đắc lực cho cơng việc lập trình Điểm hấp dẫn Arduino với người đam mê lập trình ngơn ngữ dễ học giống C/C+ +, ngoại vi bo mạch chuẩn hóa nên khơng cần biết nhiều điện tử, lập trình ứng dụng thú vị Thêm Arduino platform chuẩn hóa nên có nhiều bo mạch mở rộng (shield) để cắm chồng lên bo mạch Arduino, hình dung dễ hiểu "library" ngơn ngữ lập trình Phân loại: Board Arduino uno Arduino Hình ảnh Chức Tài nguyên Sản phẩm Vi điều khiển (ATmega328P) Digital I/O: 14 (hỗ trợ chân PWM) Board mạch vi điều khiển Dùng để lập trình nhúng động cơ, lập trình led, relay số linh kiện điện tử khác Analog I/O: Vi điều khiển Analog input :12 Due Analog output: DAC PWM digital I/O: 12 Digital I/O: 54 Arduino Mega Vi điều khiển hỗ trợ điều khiển nhiều motor, hỗ trợ kết nối wif Digital I/O: 54 (15 chân sử dụng chân PWM) Analog input: 16 Board mạch vi điều khiển với tốc độ xử lý cao, nhớ lớn Module điều khiển LED, module điều khiển robot từ xa UARTs đầu ICSP Arduino Nano Vi điều khiển (Atmega 328 họ bit) Digital I/O:14 ( chân PWM) Board mạch vi điều khiển Analog input : Tích hợp Led báo nguồn, led chân D13, LED RX, TX Tích hợp IC chuyển điện áp 5V LM1117 Arduino Lilypad Vi điều khiển Digital I/O:14 (6 chân PWM) Analog ipnut :6 Board mạch sử dụng trang trí thời trang Arduino Micro Vi điều khiển, giả lập bàn phím, chuột vitual Serial/ COM port Digital I/O: 14 (6 chân PWM) KeyBoard HID USB Analog input: chân USB HID Arduino Mini Vi điều khiển Digital I/O: 14 (6 chân PWM) Board mạch vi điều khiển Analog input: Arduino Vi điều khiển, Leonardo USB Host Analog input: 12 Digital I/O: 14 (7 chân PWM) Board mạch vi điều khiển, mạch giả lập chuột,bàn phím, tay cầm game … Ứng dụng: - Làm Robot: Arduino có khả đọc thiết bị cảm biến, điều khiển động cơ,… nên thường dùng để làm xử lý trung tâm nhiều loại robot Hình 1.2.3 Ứng dụng Arduino điều khiển động - Điều khiển đèn tín hiệu giao thông, làm hiệu ứng đèn Led nhấp nháy biển quảng cáo… Hình 1.2.4 Ứng dụng Arduino điều khiển Led - Điều khiển thiết bị cảm biến ánh sáng, âm Hình 1.2.5.Ứng dụng Arduino điều khiển cảm biến - Làm máy in 3D Hình 1.2.6.Ứng dụng Arduino điều khiển máy in 3D 10 - Hình 3.1b Hình ảnh nối chân mạch thực Chân VCC nối với chân 5V Arduino Chân GND nối với chân GND Arduino Chân Din nối với chân Arduino Chân CS nối với chân Arduino Chân CLK nối với chân Arduino 21 3.2.Thiết kế phần mềm: - - MAX7219 thuận tiện cho việc hiển thị LED ma trận nên người ta tạo sẵn thư viện Trong thư viện có số hàm thơng dụng như: setLed (led sáng điểm); setRow (led sáng hàng), setColumn (led sáng cột); clearDisplay (tất led bật/tắt) Dưới đoạn code mà chúng em thiết lập để điều khiển led ma trận hiển thị chữ tên sinh viên nhóm mã sinh viện người: Hình 3.2 Sơ đồ khối điều khiển #include LedControl matrix = LedControl(2, 4, 3, 1); // Chân nối với chân DataIn // Chân nối với chân CLK // Chân nối với chân LOAD // Sử dụng IC MAX7219 void setup() { 22 matrix.shutdown(0, false); // Bật hiển thị matrix.setIntensity(0, 15); // Đặt độ sáng lớn matrix.clearDisplay(0); // Tắt tất led } // Thiết lập mã cho ký tự byte A[440] = { 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0xFF,0xFF,0xC3,0xDB,0xDB,0xDF,0xDF,0x00, // G 0x3C,0x7D,0xC3,0xC3,0xC3,0xC3,0x7D,0x3C, // O 0xFF,0xFF,0xDB,0xDB,0xDB,0xFF,0x7E,0x00, // B 0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x00,0x00, // I 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0x00,0x00,0xFF,0xFF,0x18,0x18,0xFF,0xFF, // H 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0xFF,0xFF,0xC3,0xDB,0xDB,0xDF,0xDF,0x00, // G 0xFF,0xFF,0x03,0x03,0x03,0x03,0xFF,0xFF, // U 0xE0,0xF0,0x1F,0x1F,0xF0,0xE0,0x00,0x00, // Y 0xFF,0xFF,0xDB,0xDB,0xDB,0xDB,0x00,0x00, // E 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0x00,0x11,0x12,0x14,0x18,0x10,0x00,0x00, // 0x00,0x1D,0x15,0x15,0x15,0x1F,0x00,0x00, // 0x00,0x17,0x15,0x15,0x15,0x1D,0x00,0x00, // 0x00,0x1C,0x04,0x04,0x04,0x1F,0x00,0x00, // 0x00,0x11,0x12,0x14,0x18,0x10,0x00,0x00, // 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0xFF,0xFF,0xC3,0xDB,0xDB,0xDF,0xDF,0x00, // G 0xFF,0xFF,0x03,0x03,0x03,0x03,0xFF,0xFF, // U 0xE0,0xF0,0x1F,0x1F,0xF0,0xE0,0x00,0x00, // Y 23 0xFF,0xFF,0xDB,0xDB,0xDB,0xDB,0x00,0x00, // E 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0xC0,0xC0,0xFF,0xFF,0xC0,0xC0,0x00,0x00, // T 0x00,0x00,0xFF,0xFF,0x18,0x18,0xFF,0xFF, // H 0x1F,0x3F,0x6C,0xCC,0xCC,0x6C,0x3F,0x1F, // A 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0x00,0x00,0xFF,0xFF,0x18,0x18,0xFF,0xFF, // H 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0x1F,0x3F,0x6C,0xCC,0xCC,0x6C,0x3F,0x1F, // A 0xFF,0xFF,0x60,0x30,0x30,0x60,0xFF,0xFF, // M 0x00,0x1F,0x15,0x15,0x15,0x1F,0x00,0x00, // 0x00,0x1C,0x04,0x04,0x04,0x1F,0x00,0x00, // 0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00, // 0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00, // 0x00,0x1D,0x15,0x15,0x15,0x17,0x00,0x00, // 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0xFF,0xFF,0xC3,0xDB,0xDB,0xDF,0xDF,0x00, // G 0xFF,0xFF,0x03,0x03,0x03,0x03,0xFF,0xFF, // U 0xE0,0xF0,0x1F,0x1F,0xF0,0xE0,0x00,0x00, // Y 0xFF,0xFF,0xDB,0xDB,0xDB,0xDB,0x00,0x00, // E 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0x00,0x00,0xFF,0xFF,0x18,0x18,0xFF,0xFF, // H 0x1F,0x3F,0x6C,0xCC,0xCC,0x6C,0x3F,0x1F, // A 0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x00,0x00, // I 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x00,0x00, // I 0xFF,0xFF,0x70,0x38,0x1C,0x0E,0xFF,0xFF, // N 0x00,0x00,0xFF,0xFF,0x18,0x18,0xFF,0xFF, // H 24 0x00,0x1F,0x15,0x15,0x15,0x1F,0x00,0x00, // 0x00,0x1C,0x04,0x04,0x04,0x1F,0x00,0x00, // 0x00,0x15,0x15,0x15,0x15,0x1F,0x00,0x00, // 0x00,0x1D,0x15,0x15,0x15,0x17,0x00,0x00, // 0x00,0x11,0x12,0x14,0x18,0x10,0x00,0x00, // }; // Chương trình chạy chuỗi ký tự void scroll() { matrix.clearDisplay(0); int pos = 8; for (int j = pos; j > -440; j ) { // Vịng lặp thay đổi vị trí for (int i = 0; i < 440; i++) { // Vòng lăp để hiển thị ký tự matrix.setColumn(0, i + j, A[i]); } delay(100); } } // Chương trình hiển thị ký tự void show() { matrix.clearDisplay(0); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i]); //Hiển thị hàng để ký tự A delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 8]); delay(400); 25 for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 16]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 24]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 32]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 40]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 48]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 56]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 64]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 72]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 80]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 88]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 96]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 104]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 112]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 120]); delay(400); 26 for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 128]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 136]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 144]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 152]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 160]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 168]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 176]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 184]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 192]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 200]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 208]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 216]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 224]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 232]); delay(400); 27 for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 240]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 248]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 256]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 264]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 272]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 280]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 288]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 296]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 304]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 312]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 320]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 328]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 336]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 344]); delay(400); 28 for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 352]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 360]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 368]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 376]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 384]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 392]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 400]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 408]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 416]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 424]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 432]); delay(400); for (int i = 0; i < 8; i++) matrix.setColumn(0, i, A[i + 440]); delay(400); } void loop() { 29 scroll(); show(); } 30 3.3 Tiến hành khởi động mạch khắc phục lỗi: - Khởi động mạch: a) b) - Kết quả: + link video kết quả: https://www.youtube.com/watch?v=k5rnCD2dlhw +Trong trình điều khiển hiển thị chương trình chạy chuỗi kí tự kí tự bị dính vào , số kí tự khơng hiển thị mong muốn điều khiển nhầm vị trí led nên phải tiến hành viết lại code 31 3.4 Tiến hành mở rộng đề tài: - - - Nội dung mở rộng: Sử dụng thêm module led ma trận 8x8, điều khiển nối tiếp với dùng nút ấn để điều khiển chạy, dừng chuỗi kí tự Mơ tả: Ma trận led 8x8 có diện tích nhỏ, hiển thị kí tự lúc làm cho khó nhìn thấy rõ khó liên kết kí tự với thành chuỗi Nên việc mở rộng diện tích led ma trận việc hợp lý, giúp dễ dàng nhìn rõ nội dung hiển thị Tiến hành: Với việc sử dụng module led ma trận MAX7219 nhà sản xuất thiết kế sẵn chân nối tiếp cho module tiếp theo, nên ta cần gắn vị trí sau: Các chân Din module sau nối với chân Dout chân trước, Các chân LOAD, CLK, GND nguồn led nối song song với Hình 3.4a sơ đồ kết nối 32 - Chạy mơ phỏng: Hình 3.4b chạy mơ 33 Hình 3.4c mạch thực tế Khi sử dụng thêm module, cần chỉnh sửa code để kích hoạt chân Dout module trước để truyền tín hiệu nối tiếp sang chân sau 34 KẾT LUẬN Led ma trận thiết bị sử dụng nhiều ngành công nghiệp, quảng cáo chế tạo Nếu hiểu rõ nghiên lý, nắm bắt nhu cầu sử dụng led ma trận sản phẩm hữu dụng Nắm vững kiến thức điện tự động cơng nghiệp cho phép ta phân tích, thiết kế hệ thống đảm bảo yêu cầu chất lượng tối ưu có lợi kinh tế Qua thời gian nỗ lực làm chúng em hoàn thành đồ án với giúp đỡ nhiệt tình thầy … Trong trình thực chắn thân chúng em tránh khỏi thiếu sót, em mong nhận ý kiến đóng góp thầy bạn để đồ án hoàn thiện Em xin chân thành cám ơn ! Hải Phòng, ngày 24 tháng 12 năm 2021 35 ... MAXIM thiết kế sản xuất, thuận tiện sử dụng để điều khiển LED ma trận LED (1 chip điều khiển LED ma trận 8x8 LED chữ số) cần điện trở để hạn dòng cho tất led (so với IC khác phải có điện trở cho led) ... QUÁT VỀ LED MATRIX VÀ ARDUINO 1.1 Led matrix Led ma trận hay gọi led matrix cấu thành từ bóng Led, xếp thành hàng cột (dạng Module) ghép lại với Dạng bố trí giống ma trận nên người ta gọi Led ma... Vi điều khiển hỗ trợ điều khiển nhiều motor, hỗ trợ kết nối wif Digital I/O: 54 (15 chân sử dụng chân PWM) Analog input: 16 Board mạch vi điều khiển với tốc độ xử lý cao, nhớ lớn Module điều khiển