Lightshow created from a cylinder of 288 RGB LEDs.
Cảm hứng cho dự án này là vô số đường cong được tạo ra bởi giao điểm của hình trụ và mặt phẳng! Tôi muốn tạo một màn trình diễn ánh sáng LED, nhưng gần đây tôi đã xây dựng một số khối đèn LED. Tôi muốn làm điều gì đó khác biệt, cả từ quan điểm phần cứng và phần mềm. Và tôi nghĩ đây sẽ là một môi trường thú vị để lập trình – một cái gì đó có nhiều tiềm năng như một khối lập phương, nhưng khác hẳn!
Tôi đã chọn sử dụng đèn LED lập trình APA106 8mm cho tháp này. Đắt hơn so với đèn LED RGB thông thường, nhưng chúng dễ dàng hơn nhiều để làm việc với cả quan điểm phần cứng và phần mềm. Không có thanh ghi dịch chuyển - mọi thứ được kiểm soát bởi hai dòng dữ liệu. Và không có ISR (quy trình dịch vụ gián đoạn) và không ghép kênh giữa các lớp đèn LED - những đèn LED này luôn bật.
Tôi quyết định xây dựng hình trụ / tháp của mình như một tập hợp 12 chiếc nhẫn xếp chồng lên nhau. Các vòng có đường kính 8 "và mỗi vòng chứa 24 đèn LED cách nhau 1" (thực tế là π * 8/24 nhưng gần bằng một inch). Các vòng tự cách nhau 1 inch, do đó đèn LED cách nhau 1 inch theo cả hai hướng. Thanh acrylic được sử dụng để gắn chặt các vòng với nhau để tạo thành tháp.
Đèn LED APA106 có thể vẽ 60 ma ở độ sáng tối đa và màu trắng, vì vậy trong trường hợp xấu nhất, tháp này có thể vẽ được 17 ampe! Nhưng những đèn LED này quá sáng nên tôi hiếm khi đặt độ sáng hơn 10% trong phần mềm. Và việc chuyển toàn bộ tòa tháp thành màu trắng cũng không thực sự được thực hiện ở bất kỳ đâu. Vì vậy, trong thực tế, tôi chưa bao giờ gặp bất kỳ vấn đề nào khi sử dụng cổng USB để cấp nguồn cho nó. Và nếu bạn muốn sử dụng một nguồn điện riêng, 2 ampe dường như hoạt động tốt.
Xây dựng
Tôi đã tìm thấy một số vòng kim loại có đường kính 8 "trên Amazon mà tôi nghĩ sẽ làm nền tốt cho vòng đèn LED của mình. Thực sự là một bất ngờ thú vị khi tôi thấy mình có thể hàn chúng một cách dễ dàng! Thuật ngữ" dễ dàng "là tương đối - vòng là nặng và cần rất nhiều nhiệt để nó đủ nóng, vì vậy mỏ hàn 40 watt của tôi đã được vặn hết cỡ và nó thường phải để yên ở đó trong 5-10 giây trước khi hàn nóng chảy. Tôi làm ướt chiếc nhẫn bằng thuốc hàn trước. trước khi cố gắng hàn đèn LED vào nó và luôn sử dụng bộ tản nhiệt clip trên dây dẫn của đèn LED.
Nhưng tôi đang vượt lên một chút so với bản thân mình. Trước khi bạn có thể bắt đầu hàn các đèn LED vào vòng, bạn cần tạo dạng chì 24 trong số chúng theo sơ đồ bên dưới
Là một phần của thao tác dạng chì, tôi đặt một đoạn uốn cong nhỏ ở phần cuối của dây dẫn nối đất. Nó vừa giúp bạn dễ dàng nhận biết, vừa giúp bạn gắn vào nhẫn dễ dàng hơn.
Một bước chuẩn bị khác trước khi hàn đèn LED vào vòng đệm là đánh dấu 24 khoảng trống chẵn trên vòng mà các đèn LED sẽ được đặt. Tôi cũng thấy cần phải kẹp vòng theo chiều dọc trong khi gắn đèn LED. Tôi đã kết thúc bằng cách sử dụng công cụ bên dưới để giữ chiếc nhẫn ở đúng vị trí,
Khi một vài đèn LED được hàn vào vòng, cần phải kết nối các dây dẫn dữ liệu vào với các dây dẫn ra dữ liệu như hình dưới đây. Lưu ý rằng tản nhiệt clip-on luôn được sử dụng để bảo vệ đèn LED.
Sau khi tất cả các đèn LED ở trên vòng, bạn nên có một dây dẫn dữ liệu vào cho toàn bộ vòng, với dây dẫn ra dữ liệu đối diện với nó sẵn sàng để chuyển đến vòng tiếp theo phía trên nó. Tại thời điểm này, chúng tôi đã sẵn sàng để kết nối tất cả các dây dẫn +5 vôn với nhau bằng một đoạn dây đồng đóng hộp 22 cữ thẳng. Kéo thẳng một đoạn dây dài 26 "bằng cách kẹp một đầu vào ống kẹp và dùng kìm kéo mạnh đầu kia. Sau đó, gắn nó vào các đèn LED như hình dưới đây.
Khi bạn có một chiếc nhẫn hoàn chỉnh, bạn có thể kiểm tra nó bằng cách sử dụng bản phác thảo thử nghiệm mà tôi đã gửi kèm. Việc kiểm tra là rất quan trọng - việc sửa một đèn LED bị hỏng hoặc mối nối hàn nguội giờ đây dễ dàng hơn nhiều so với khi nó đang ở giữa một tòa tháp đã hoàn thiện! Quá trình kiểm tra được thực hiện bằng cách gắn chân dữ liệu mở vào chân 6 của UNO. Bản phác thảo thử nghiệm đi kèm có phần hơi khác so với bản trong video này, nhưng sẽ cho bạn biết liệu chiếc nhẫn có hoạt động bình thường hay không.
Bây giờ bạn phải làm thêm 11 chiếc vòng nữa. Công việc rất nhiều, nhưng với một chút luyện tập, bạn có thể hoàn thành nhiệm vụ chế tạo một chiếc chuông trong vài giờ.
Điều quan trọng là các đèn LED trong mỗi vòng phải thẳng hàng với các đèn LED trên các vòng khác. Nếu các đèn LED được cách đều nhau một cách hoàn hảo thì đây không phải là vấn đề, nhưng tôi đã có đủ các biến thể nhỏ về khoảng cách đến mức tôi thấy cần phải sử dụng một vòng làm mẫu cho các đèn khác, luôn cẩn thận đặt đầu dẫn nhập dữ liệu mở ( một không được kết nối với một đầu ra dữ liệu) ở cùng một nơi. (Nếu bạn nhìn kỹ vào tháp của tôi, hai vòng đầu tiên không thẳng hàng với nhau cho lắm. Nhưng sau đó, tôi đã sử dụng cách tiếp cận mẫu này với kết quả được cải thiện nhiều).
Khi bạn đã chế tạo được ít nhất bốn chiếc nhẫn, bạn có thể bắt đầu quá trình lắp ráp tháp. Việc lắp ráp ban đầu của bốn vòng dưới có lẽ là phần quan trọng nhất của quá trình xây dựng. Chúng tôi không muốn tạo ra Tháp nghiêng Pisa! Để ghép các vòng lại với nhau, bạn sẽ cần miếng đệm cao 22mm để tạo khoảng cách 1 "giữa các vòng. Tôi đã sử dụng nhựa đen in 3D cho miếng đệm của mình, nhưng miếng đệm 1/4" cũng hoạt động. Để giữ miếng đệm ở đúng vị trí, tôi đã sử dụng một ít Blue Tack, một chất kết dính tạm thời.
Các vòng được giữ với nhau để tạo thành tòa tháp bằng cách sử dụng sáu thanh acrylic dài 12 inch. Điều quan trọng là phải đặt mọi thứ chính xác vào vị trí trước khi dán các thanh này. Một khi các thanh này được dán nóng vào các vòng, gần như không thể thực hiện bất kỳ thay đổi nào, vì vậy hãy lấy mọi thứ ở nơi bạn muốn trước. Khi bạn đã có mọi thứ vào đúng vị trí, bạn có thể xoay tòa tháp nằm nghiêng và dán keo nóng các thanh acrylic vào các vòng. Bức ảnh dưới đây cho thấy bốn vòng đầu tiên với ba que đầu tiên được gắn vào. Ba chiếc nữa sau đó được gắn với tổng cộng sáu chiếc. Các thanh được đặt giữa các đèn LED với 4 đèn LED giữa mỗi thanh.
Sau khi tất cả các thanh được gắn vào các vòng, các miếng đệm có thể được tháo ra và sau đó sử dụng lại khi các vòng bổ sung được thêm vào. Khi tất cả 12 vòng ở đúng vị trí, chúng tôi đã sẵn sàng kết nối đất, + 5v và đường dữ liệu giữa các vòng. Điều này được thực hiện bằng cách sử dụng dây đồng đóng hộp 22 khổ. Các thanh ray điện được liên kết song song với tất cả 12 vòng.
Có hai dòng dữ liệu, mỗi dòng có 144 đèn LED - một cho 6 vòng trên cùng (cuối cùng đi đến chân UNO 6) và một cho 6 vòng dưới cùng (cuối cùng đi đến chân 7 của UNO). Mỗi dòng dữ liệu bắt đầu với vòng thấp nhất và hoạt động theo cách của nó lên đến vòng trên cùng. Ban đầu tôi dự định chỉ có một đường dữ liệu duy nhất, nhưng đến vòng 8, tôi bắt đầu thấy một số tia sáng không mong muốn kỳ lạ. Lúc đầu, tôi nghĩ rằng đó có thể là đường ray điện, nhưng việc thêm một số tụ điện trên đường ray không giúp ích được gì, vì vậy tôi đã sử dụng cách tách tháp thành hai đường dữ liệu. Điều đó đã giải quyết được vấn đề.
Như vậy trên đây là hình ảnh của tháp đã hoàn thành. Arduino UNO được cài đặt ở dưới cùng. Tôi thực sự đã sử dụng 4 thanh acrylic còn lại của mình để treo UNO, sử dụng keo nóng để gắn mọi thứ lại với nhau. Một cách tiếp cận khác có thể là gắn tháp trên một đế có UNO bên trong. Có 4 kết nối với đường ray UNO, Ground và + 5v kết nối với tất cả 12 vòng và hai đường dữ liệu đến chân 6 và 7.
Phần mềm
Các đèn LED có thể lập trình như APA106 rất dễ sử dụng vì có sẵn một số thư viện xử lý thời gian của các xung dữ liệu được sử dụng để điều khiển chúng. Đối với các dự án trước đây tôi đã thực hiện với đèn LED APA106 (khối lập phương 5x5x5 RGB thứ hai của tôi và dự án nghệ thuật tam giác), tôi đã sử dụng thư viện phần mềm NeoPixel phổ biến của Adafruit. Tuy nhiên, đối với tháp này, tôi đã chọn thư viện FastLED. Nó có rất nhiều tính năng tuyệt vời cộng với một số hàm toán học nhanh mà tôi nghĩ sẽ hữu ích. Nó cũng cho phép tôi dễ dàng thay thế bảng màu cầu vồng 43 bước khá thô của mình bằng bảng màu 256 bước. Nó có hàng trăm chức năng, bảng màu được xác định trước và những thứ khác mà tôi chưa sử dụng cho dự án này, nhưng khiến nó trở thành lựa chọn tuyệt vời cho cả dự án này và các dự án trong tương lai. Và vẫn còn một tính năng khác của FastLED mà tôi thấy rất tiện dụng là khả năng làm mờ dễ dàng.
Tôi luôn thích có một chức năng cho phép tôi dễ dàng chỉ định đèn LED và màu sắc của nó. Với tháp này, nó cần ở dạng setColor (hàng, cột, màu), trong đó hàng là vòng mà nó nằm trên và cột là vị trí trên vòng đó. Một quy trình này giải quyết tất cả các chuyển đổi từ dòng dữ liệu mà đèn LED đang bật và vị trí của nó trong chuỗi dữ liệu.
Một công cụ mạnh mẽ trong thư viện FastLED là lớp đối tượng của tất cả các màu có tên web. Bạn chỉ cần chỉ định màu là CRGB :: HotPink, trong đó CRGB là lớp và HotPink là thành viên của lớp đó. Nhưng các thành viên trong lớp khó tiếp tục nhập và gây phiền nhiễu khi chuyển đến các hàm dưới dạng tham số, vì vậy tôi đã sử dụng câu lệnh #define để thiết lập một bảng màu nhỏ có tên mà tôi có thể tham khảo đơn giản bằng tên của chúng mà không cần CRGB ::.
Tôi có một chức năng khác đặt màu của một đèn LED cụ thể dưới dạng bảng màu cầu vồng từ 0 đến 255. Giữa hai chức năng này, tôi có thể dễ dàng chỉ định 10 màu được đặt tên hoặc tạo bảng màu cầu vồng mượt mà cho bất kỳ đèn LED nào trong tháp.
Một chức năng cơ bản khác mà tôi đã tạo là xoay (vòng, hướng), xoay nội dung của bất kỳ vòng nào xung quanh trên vòng đó. Mỗi lần gọi là một bước, nhưng thao tác này có thể được sử dụng để xoay nội dung của toàn bộ tháp, hoặc xoay các phần của tháp theo các hướng ngược nhau,… tạo ra nhiều hiệu ứng thú vị.
Một điều khác mà tôi có thể đề cập về thư viện FastLED là nó hỗ trợ trực tiếp các đèn LED APA106 mà tôi đang sử dụng. Mặc dù thư viện NeoPixel của Adafruit cũng hoạt động với APA106, tôi đã phải thử nghiệm thiết lập để làm đúng. Với FastLED, việc thiết lập tự động chỉ bằng cách chỉ định APA106 làm đèn LED bạn đang sử dụng.
Như tôi đã nói ở phần đầu, một trong những hiệu ứng thú vị hơn mà bạn có thể tạo với tháp này là các điểm giao nhau giữa hình trụ và mặt phẳng. Lúc đầu, tôi nghĩ về việc cố gắng hoàn thành điều này một cách nhanh chóng bằng toán học. Nhưng có một số vấn đề về việc liệu UNO có đủ nhanh hay không và hóa ra việc thực hiện nó trong các bảng khá dễ dàng, vì vậy tôi đã thực hiện cách tiếp cận thứ hai. Về cơ bản, bảng này chiếu sáng giao tuyến của một mặt phẳng với tháp ở 18 góc khác nhau và độ cao nơi giao cắt diễn ra có thể thay đổi. Bạn sẽ thấy kết quả ở một số nơi khác nhau trong chương trình.
Tôi đã sử dụng cùng một cách tiếp cận bảng để tạo ra các giao điểm khác nhau của hình trụ với hình cầu. Nó hoạt động, mặc dù gần như không hiệu quả như giao lộ với máy bay. Có một hiệu ứng trong chương trình sử dụng nó. Cả hai bảng này đều được lưu trữ trong bộ nhớ chương trình, để không ngốn RAM.
Có ba bản phác thảo cho UNO được bao gồm trong gói phần mềm:
1) một bài kiểm tra nhanh cho một vòng duy nhất.
2) bản xem trước 45 giây của chương trình
3) chương trình dài 8 phút với 16 hiệu ứng hoặc hoạt ảnh khác nhau
Cả ba đều được hiển thị ở đây trong video của phần viết này (mặc dù bài kiểm tra vòng có phần khác so với bài kiểm tra trong video).
Một điều cuối cùng trên phần mềm. Ở cuối vòng lặp chính, nơi các hoạt ảnh khác nhau được gọi ra, tôi đã thêm một thiết lập lại phần mềm. Điều này bình thường sẽ không cần thiết, nhưng tôi có một lỗi ở đâu đó trong phần mềm của mình. Nếu không có thiết lập lại, sau khi chạy nhiều lần mặc dù tất cả các hoạt ảnh, chương trình bị treo. Có thể tôi có thứ gì đó không thoát ra khỏi ngăn xếp trong RAM khi cần. Nó thậm chí có thể là một vấn đề trong thư viện FastLED. Nhưng tôi không bao giờ tìm thấy nó và việc thiết lập lại phần mềm đảm bảo hoạt động trơn tru, mặc dù không phải là giải pháp tốt nhất.