Vỏ enclosure WOPR LEDs gắn rack 1U

Vỏ enclosure gắn rack 1U cho WOPR LEDs, vừa 3 module LED matrix 8x8 (MAX7219) dạng 1x4 nối daisy chain. Kèm link hướng dẫn đấu dây Raspberry Pi Pico + MicroPython và code hiệu ứng mô phỏng WOPR.

👁️
9.7K
Lượt Xem
❤️
161
Lượt Thích
📥
656
Lượt Tải
Cập Nhật Mar 02, 2026
Chi tiết
Tải xuống
Bình Luận
Khoe bản in
Remix

Mô tả

Mình luôn bị cuốn hút bởi “vibe” thẩm mỹ của WOPR, cái máy tính trong phim War Games (1983). Mấy dãy đèn thay đổi đều đều, được cho là thể hiện trạng thái của cỗ máy, là thứ mình đã muốn tái hiện trong server rack của mình suốt nhiều năm. Gần đây mình quyết định: nếu ngoài thị trường chưa có sẵn, thì mình tự làm.

Sau khi tìm hiểu một vòng, mình biết tới mấy module LED matrix 8x8 nhỏ xíu, dùng driver MAX7219. Dưới $10 là có thể mua được một board 1x4 (gồm 4 cái 8x8)…. và còn có thể daisy chain nối chuỗi với nhau. Ba board kiểu này nối liền một hàng là vừa khít trong một khe 1U.

Mình đấu dây chúng vào một Raspberry Pi Pico chạy MicroPython, làm theo một bài hướng dẫn để gắn đúng chân và thêm driver cơ bản rồi chạy vài demo, thấy mọi thứ ổn. Vấn đề là mình không muốn nó chạy kiểu “bình thường”: mình muốn điều khiển từng “pixel” riêng lẻ và cố gắng mô phỏng lại đúng kiểu WOPR nhìn như thế nào.

Sau vài lần lặp/điều chỉnh, mình ra được chức năng như sau:

Khi chạy, nó sẽ “tung đồng xu” cho mỗi cột (96 cột) để quyết định cột đó có thay đổi so với trạng thái trước không. Nếu cột đó được đổi, nó sẽ “tung” 8 lần nữa để quyết định cột đó sẽ trông như thế nào. Sau đó nó vẽ hình lên display. Tiếp theo, nó “tung” một đồng xu 4 mặt để quyết định sẽ chờ bao lâu trước khi tiếp tục và lặp lại vòng loop. Mình thấy cách này tái hiện khá đúng cái cảm giác chậm rãi, có tính toán của mấy đèn chỉ thị WOPR.

Wiring guide:
https://microcontrollerslab.com/max7219-led-dot-matrix-display-raspberry-pi-pico/

LED module:
https://www.amazon.com/dp/B07FFV537V

Driver:

https://github.com/mcauser/micropython-max7219/blob/master/max7219.py

Code của mình:

from machine import Pin, SPI
import max7219
import random
from time import sleep
spi = SPI(0,sck=Pin(2),mosi=Pin(3))
cs = Pin(5, Pin.OUT)
display = max7219.Matrix8x8(spi, cs, 12)
display.brightness(0)
while True:
   for y in range (8):
        for x in range (96):
            flip = random.randint(0, 1)
            if (flip == 0):
                flipp = random.randint(0, 1)   
                if (flipp == 0):
                    display.pixel(x,y,1)
                else:
                    display.pixel(x,y,0)
            else:
                pass
   display.show()
   timeflip = random.randint(0,3)
   if (timeflip == 0):
        sleep(1)
   elif (timeflip == 1):
        sleep(1.5)
   elif (timeflip == 2):
        sleep(2)
   else:
        sleep(0.5)

boot.py đã được đính kèm.

Giấy phép

Tác phẩm này được cấp phép theo

Creative Commons — Attribution

CC-BY

Yêu cầu ghi công
Remix & phái sinh Được phép
Sử dụng thương mại Được phép

File mô hình

TẤT CẢ FILE MÔ HÌNH (3 Tập tin)
Đang tải files, vui lòng chờ...
Vui lòng đăng nhập để bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Vui lòng đăng nhập để khoe bản in của bạn.

Chưa có bản in nào được khoe. Hãy là người đầu tiên!

Remix (0)