Dương Huynh gửi vào
- 44569 lượt xem
I. Giới thiệu
Chào các bạn, hôm này mình xin phép được chia sẽ những gì mình đã học được khi làm Cube LED 8x8x8. Mình cũng tìm hiểu nhiều tài liệu, đọc đi đọc lại và có rất nhiều điểm chưa hiểu. Lý do mình viết bài này là để chia sẽ kiến thức, với hy vọng là mình sẽ tìm được những câu trả lời cho những điểm mình chưa hiểu từ chính bạn đọc. Mong các bạn có thể cùng mình viết lên các hiệu ứng cho nó đẹp hơn. Do quá trình làm Cube LED có khá nhiều công việc nên mình phải chia nhỏ bài viết thành nhiều phần. Với phần đầu tiên, mình xin chia sẽ về ý tưởng thiết kế và phần cứng. Còn phần hai, mình sẽ đăng về cách lập trình các hiệu ứng ngay trong thời gian sớm nhất có thể. Nếu như sau này khi nhận được những đóng góp ý kiến từ các bạn để cải tiến lên thì mình sẽ update tiếp nhé!
Tài liệu mà mình cho là OK nhất là đây nhé: http://www.instructables.com/id/Led-Cube-8x8x8/
II. Ý tưởng
Về bộ vi điều khiển thì mình sử dụng là Arduino Promini 16Mhz. Với Pro mini thì các bạn phải tìm hiểu thêm các bài viết về cách nạp phần mềm cho Promini. Mình chọn Promini vì mình muốn sau khi làm xong có thể để promini trên cube LED luôn. Trong lập trình Cube LED mình đã gặp vấn đề với bộ nhớ của vi điều khiển. Với Promini ta có bộ nhớ flash là 32Kb cái này không dùng hết nổi đâu. Nhưng Sram chỉ có 2Kb thôi, cái này nếu lập trình không khéo thì sẽ không đủ nè. Còn EEPROM là 1Kb, mình không muốn dùng cái EEPROM này vì khá tốn thời gian khi đọc dữ liệu từ nó.
Với khối Cube 8x8x8 chúng ta có tổng cộng là 512 LED. Vậy làm sao có thể điều khiển hết từng đèn? Mình sẽ dùng coi mỗi đèn LED là một điểm trong không gian Oxyz. Để gọi một điểm ra chúng ta cần 3 tham số x, y, z thể hiện toạ độ của một điểm. Với x, y, z chạy từ 0 đến 7.
Mình sẽ không hướng dẫn các hàn khối cube nữa. Vì mỗi người sẽ có một cách khác nhau.
Nhưng, để có thể đồng bộ với Code thì mình lưu ý là ở bài viết này, các tầng z là chân âm của LED, còn các cột là chân dương nhé! Như vậy mình sẽ có 8 tầng là 8 chân nối với cực âm của LED. là 64 chân nối với cực dương của LED. Mình đã dùng 9 dây bus 8 để nối các chân này với mạch điều khiển. Dây bus đầu tiên mình hàn cho 8 tầng của cube. 8 dây còn lại mỗi dây mình hàn cho 1 hàng x. Bus 8 có 8 dây nhỏ xếp thành hàng ngang, mỗi dây nhỏ tương ứng với 1 cột y. Với bus thứ 1 có x=0, y chạy từ 0 đến 7; bus thứ 2 có x=1. Y chạy từ 0 đến 7; …… Và mình có cái trình tự quét mảng này luôn (nó rất là quan trọng và sẽ được lặp lại rất nhiều lần trong code)
for (byte zo=0; zo<8; zo++) {
for (byte xo=0; xo<8; xo++) {
for (byte yo=0; yo<8; yo++) {
mangba[xo][yo][zo]=0;
}
}
}
Vậy chúng ta đã đơn giản 512 LED thành 8 tầng và 64 cột rồi. Nhưng như thế vẫn còn quá nhiều chân điều khiển so với Arduino Promini. Mình đã sử dụng 74hc595 để mở rộng chân điều khiển. Lại tiếp tục chiêu cũ, các bạn tự xem cách dùng của 74hc595 nhé! Ở đây mình dùng 8 con 74hc595 nối tiếp nhau, mỗi con điều khiển được 8 cột, 8 con là 64 cột rồi. Còn 8 tầng z mình sẽ dùng luôn 8 chân trên arduino điều khiển 8 con TIP41.
Lúc đầu mình có đề cập đến sram của arduino là 2Kb, khá nhỏ, nên mình có vẽ thêm chỗ cho một module đọc thẻ nhớ SD nữa. Nhưng hiện tại chưa biết dùng làm gì!
III. Phần cứng
Ở đây mình sẽ làm mạch in cho mạch điều khiển cả cube.
- 1 Arduino Promini (tự trang bị mạch nạp nhé phù hợp nhé)
- 8 con 74hc595
- 8 con TIP41
- Điện trở 100 Ohm
- Mấy cây rào để kết nối với dây bus nữa.
- Dây nối.
Sơ đồ nguyên lý thì chỉ là nối tiếp các 74hc595 lại với nhau. Và 8 con TIP41 để nối 8 tầng LED với GND thôi. Khi mở TIP41 thì Chân âm của LED sẽ nối với GND, nếu chân dương ở mức cao thì LED sẽ sáng. Mình sẽ nói rõ hơn ở bài sau! Đại loại là thế này!
Promini nó sẽ nằm ngược chiều với 74hc595 nhé. Thể nhớ SD mình đã vẽ theo đúng thứ tự kết nối, mình sẽ có ghi chú cách nối dây trong phần code luôn. Còn nguồn cung cấp mình dùng nguồn 5v. Các bạn có thể mua cái adapter 5v-2A cho chắc nhé! Cái mạch nó thế này nè!
Hình 3D
File mạch in nè
https://drive.google.com/file/d/0B-njEb8gey6cM2czamZWcVFyMDg/view?usp=sharing (mirror)