Mục lục:

Khám phá không gian màu: 6 bước
Khám phá không gian màu: 6 bước

Video: Khám phá không gian màu: 6 bước

Video: Khám phá không gian màu: 6 bước
Video: 18 PHI HÀNH GIA ĐANG TRÔI NỔI NGOÀI KHÔNG GIAN... Và 30 sự thật đáng sợ về vũ trụ!! 2024, Tháng bảy
Anonim
Khám phá không gian màu
Khám phá không gian màu

Đôi mắt của chúng ta cảm nhận ánh sáng thông qua các thụ thể nhạy cảm với các màu đỏ, xanh lục và xanh lam trong quang phổ thị giác. Con người đã sử dụng thực tế này để cung cấp hình ảnh màu qua phim, truyền hình, máy tính và các thiết bị khác trong hơn một trăm năm qua.

Trong màn hình của máy tính hoặc điện thoại, hình ảnh được hiển thị bằng nhiều màu bằng cách thay đổi cường độ của các đèn LED nhỏ màu đỏ, xanh lục và xanh lam nằm cạnh nhau trên màn hình. Hàng triệu màu sắc khác nhau có thể được hiển thị bằng cách thay đổi cường độ ánh sáng từ các đèn LED màu đỏ, xanh lá cây hoặc xanh lam.

Dự án này sẽ giúp bạn khám phá không gian màu đỏ, lục và lam (RGB) bằng cách sử dụng Arduino, đèn LED RGB và một phép toán nhỏ.

Bạn có thể coi cường độ của ba màu đỏ, lục và lam, là tọa độ trong một khối lập phương, trong đó mỗi màu nằm dọc theo một trục và cả ba trục đều vuông góc với nhau. Bạn càng gần điểm 0, hoặc điểm gốc, của trục, màu đó được hiển thị càng ít. Khi các giá trị cho cả ba màu ở điểm 0 hoặc điểm gốc, thì màu đó là màu đen và đèn LED RGB tắt hoàn toàn. Khi các giá trị cho cả ba màu cao hết mức có thể (trong trường hợp của chúng tôi là 255 cho mỗi màu trong số ba màu), đèn LED RGB hoàn toàn bật và mắt cảm nhận sự kết hợp các màu này là màu trắng.

Bước 1: Không gian màu RGB

Không gian màu RGB
Không gian màu RGB

Cảm ơn Kenneth Moreland đã cho phép sử dụng hình ảnh đẹp của anh ấy.

Chúng tôi muốn khám phá các góc của khối không gian màu 3D bằng cách sử dụng đèn LED RGB được kết nối với Arduino, nhưng cũng muốn làm điều này theo một cách thú vị. Chúng tôi có thể làm điều đó bằng cách lồng ba vòng lặp (mỗi vòng cho màu đỏ, màu xanh lá cây và màu xanh lam) và chạy qua mọi sự kết hợp màu sắc có thể, nhưng điều đó sẽ thực sự nhàm chán. trình diễn ánh sáng laze? Tùy thuộc vào cài đặt, mẫu Lissajous có thể trông giống như một đường chéo, một hình tròn, một hình số 8 hoặc một mẫu giống như con bướm nhọn xoay chậm. Các mẫu lissajous được tạo ra bằng cách theo dõi các tín hiệu hình sin của hai (hoặc nhiều) bộ dao động được vẽ trên trục x-y (hoặc, đối với trường hợp của chúng tôi là x-y-z hoặc R-G-B).

Bước 2: The Good Ship Lissajous

The Good Ship Lissajous
The Good Ship Lissajous

Các mẫu Lissajous thú vị nhất xuất hiện khi tần số của các tín hiệu hình sin khác nhau một lượng nhỏ. Trong ảnh máy hiện sóng ở đây, các tần số khác nhau theo tỷ lệ 5 đến 2 (cả hai đều là số nguyên tố). Mô hình này bao phủ hình vuông của nó khá tốt và đi vào các góc một cách độc đáo. Các số nguyên tố cao hơn sẽ thực hiện công việc tốt hơn trong việc bao phủ hình vuông và chọc sâu hơn vào các góc.

Bước 3: Chờ đợi - Làm thế nào chúng ta có thể lái một đèn LED với sóng hình sin?

Bạn đã bắt được tôi! Chúng tôi muốn khám phá không gian màu 3D có phạm vi từ tắt (0) đến đầy (255) cho từng màu trong số ba màu, nhưng các sóng hình sin thay đổi từ -1 đến +1. Chúng tôi sẽ thực hiện một phép toán và lập trình nhỏ ở đây để đạt được những gì chúng tôi muốn.

  • Nhân từng giá trị với 127 để nhận các giá trị nằm trong khoảng từ -127 đến +127
  • Thêm 127 và làm tròn từng giá trị để nhận các giá trị nằm trong khoảng từ 0 đến 255 (đủ gần với 255 đối với chúng tôi)

Các giá trị nằm trong khoảng từ 0 đến 255 có thể được biểu diễn bằng số byte đơn (kiểu dữ liệu "char" trong ngôn ngữ lập trình Arduino giống C), vì vậy chúng tôi sẽ tiết kiệm bộ nhớ bằng cách sử dụng biểu diễn byte đơn.

Nhưng làm thế nào về góc độ? Nếu bạn đang sử dụng độ, các góc trong phạm vi hình sin từ 0 đến 360. Nếu bạn đang sử dụng radian, các góc nằm trong khoảng từ 0 đến 2 lần π ("pi"). Chúng tôi sẽ làm điều gì đó để bảo tồn lại bộ nhớ trong Arduino của chúng tôi và nghĩ về một vòng tròn được chia thành 256 phần và có "góc nhị phân" nằm trong khoảng từ 0 đến 255, vì vậy "góc" cho mỗi màu có thể được biểu thị bằng số byte đơn hoặc ký tự ở đây.

Arduino khá tuyệt vời theo cách của nó, và mặc dù nó có thể tính toán các giá trị hình sin, chúng ta cần một cái gì đó nhanh hơn. Chúng tôi sẽ tính toán trước các giá trị và đưa chúng vào một mảng dài 256 mục gồm các giá trị byte đơn hoặc char trong chương trình của chúng tôi (xem phần khai báo SineTable […] trong chương trình Arduino).

Bước 4: Hãy xây dựng một mô hình LIssajous 3D

Hãy xây dựng một mô hình LIssajous 3D
Hãy xây dựng một mô hình LIssajous 3D

Để duyệt qua bảng ở một tần số khác nhau cho từng màu trong số ba màu, chúng tôi sẽ giữ một chỉ mục cho mỗi màu và thêm các hiệu số tương đối chính cho mỗi chỉ mục khi chúng tôi xem qua các màu. Chúng tôi sẽ chọn 2, 5 và 11 làm hiệu số tương đối chính cho các giá trị chỉ số Đỏ, Xanh lục và Xanh lam. Khả năng toán học bên trong của Arduino sẽ giúp chúng ta bằng cách tự động bao quanh khi chúng ta thêm giá trị bù đắp vào mỗi chỉ mục.

Bước 5: Kết hợp tất cả điều này lại với nhau trên Arduino

Kết hợp tất cả điều này lại với nhau trên Arduino
Kết hợp tất cả điều này lại với nhau trên Arduino

Hầu hết các Arduinos đều có một số kênh PWM (hoặc điều chế độ rộng xung). Chúng tôi sẽ cần ba ở đây. Arduino UNO là tuyệt vời cho việc này. Ngay cả một bộ vi điều khiển Atmel 8-bit nhỏ (ATTiny85) cũng hoạt động tuyệt vời.

Mỗi kênh PWM sẽ điều khiển một màu của đèn LED RGB bằng cách sử dụng chức năng "AnalogWrite" của Arduino, trong đó cường độ của màu tại mỗi điểm xung quanh chu kỳ hình sin được biểu thị bằng độ rộng xung hoặc chu kỳ nhiệm vụ, từ 0 (tất cả đều tắt) đến 255 (bật tất cả). Đôi mắt của chúng ta cảm nhận các độ rộng xung khác nhau này, lặp đi lặp lại đủ nhanh, như các cường độ hoặc độ sáng khác nhau của đèn LED. Kết hợp tất cả ba kênh PWM tạo ra ba màu trong một đèn LED RGB, chúng tôi có khả năng hiển thị 256 * 256 * 256 hoặc hơn mười sáu triệu màu!

Bạn sẽ cần thiết lập Arduino IDE (Môi trường phát triển tương tác) và kết nối nó với bảng Arduino của bạn bằng cáp USB của nó. Chạy jumper từ đầu ra PWM 3, 5 và 6 (chân bộ xử lý 5, 11 và 12) đến ba điện trở 1 KΩ (một nghìn ohm) trên bo mạch proto hoặc tấm chắn proto của bạn và từ điện trở đến đèn LED R, G, và chân B.

  • Nếu đèn LED RGB là cực âm chung (cực âm), thì hãy chạy dây từ cực âm trở lại chân GND trên Arduino.
  • Nếu đèn LED RGB là cực dương chung (cực dương), thì hãy chạy một dây từ cực dương trở lại chân + 5V trên Arduino.

Bản phác thảo Arduino sẽ hoạt động theo cả hai cách. Tôi tình cờ sử dụng đèn LED âm cực chung SparkFun Electronics / COM-11120 RGB (hình trên, từ trang web SparkFun). Chốt dài nhất là cực âm chung.

Tải xuống bản phác thảo RGB-Guiductable.ino, mở nó bằng Arduino IDE và kiểm tra biên dịch nó. Đảm bảo chỉ định đúng bảng hoặc chip Arduino đích, sau đó tải chương trình vào Arduino. Nó sẽ khởi động ngay lập tức.

Bạn sẽ thấy chu kỳ LED RGB qua nhiều màu tùy thích, và hàng triệu màu mà bạn không thể!

Bước 6: Tiếp theo là gì?

Chúng tôi vừa bắt đầu khám phá Không gian màu RGB với Arduino của mình. Một số điều khác mà tôi đã làm với khái niệm này bao gồm:

Ghi trực tiếp vào thanh ghi trên chip, thay vì sử dụng AnalogWrite, để thực sự tăng tốc mọi thứ

  • Sửa đổi mạch để cảm biến tiệm cận IR tăng tốc hoặc làm chậm chu kỳ tùy thuộc vào khoảng cách bạn đến gần
  • Lập trình vi điều khiển 8 chân Atmel ATTiny85 với bộ nạp khởi động Arduino và bản phác thảo này

Đề xuất: