Một cách tiếp cận rất đơn giản để xác định màu sắc của bề mặt là sử dụng một photodiode hoặc bộ phát quang và một số (ví dụ như trong RGB) của đèn LED có màu khác nhau để chiếu sáng bề mặt.
Sau đó, theo kiểu ghép kênh theo thời gian, mỗi đèn LED được tự bật theo thứ tự để chiếu sáng bề mặt và cường độ của ánh sáng phản xạ được đo cho từng đèn.
Ví dụ: Nếu sử dụng ba đèn LED, một màu đỏ, một màu xanh lục và một màu xanh lam, điều này sẽ mang lại ba giá trị cường độ phản xạ, một giá trị cho mỗi thành phần màu, cùng với nhau, sau khi bình thường hóa, sẽ tạo ra một xấp xỉ bằng số của màu bề mặt của không gian RGB (tất nhiên phụ thuộc vào sự phân bố bước sóng cụ thể của đèn LED).
(Tôi sẽ sử dụng thiết lập ví dụ ba màu RGB để đơn giản hơn, nhưng có thể sử dụng bất kỳ số nào từ 1 đến n của các nguồn sáng có màu khác nhau; sử dụng càng nhiều màu khác nhau thì màu của bề mặt càng chính xác.)
Nguyên tắc giống như trong chip của máy ảnh: Cường độ của các thành phần màu đỏ, xanh lam và xanh lục của ánh sáng tới được đo độc lập và sự kết hợp của ba cường độ sẽ quyết định màu sắc. Trong máy ảnh, có một bộ tách sóng quang cho mỗi ba màu cơ bản đó để có thể đo được cả ba cường độ cùng một lúc. Điều làm cho điều này trở nên phức tạp là ba cảm biến khác nhau hoặc ba bộ lọc khác nhau là cần thiết.
Do đó, đề xuất hoạt động theo cách khác: Thay vì lọc ánh sáng sau khi nó bị phản xạ từ bề mặt, người ta cũng có thể 'lọc' ánh sáng trước khi chiếu vào bề mặt; về cơ bản, đối với nhận thức của bạn, sẽ không có vấn đề gì nếu bạn đeo kính râm màu xanh hoặc nếu bạn sử dụng nguồn sáng màu xanh và không có kính râm thay thế.
Cường độ của ánh sáng phản xạ được đo cho từng thành phần màu (hoặc LED) sẽ mang lại giá trị (chuẩn hóa) trong phạm vi [0,0, ..., 1.0], trong đó 0,0 có nghĩa là không có ánh sáng nào bị phản xạ và 1.0 có nghĩa là lượng tối đa của ánh sáng được phản ánh. Tùy thuộc vào màu sắc của bề mặt, cường độ sẽ khác nhau đối với các màu ánh sáng khác nhau (bước sóng).
Trong mọi trường hợp, bạn sẽ nhận được ba giá trị cường độ, mỗi giá trị xác định cường độ của một phần nhất định của phổ màu. Mỗi phép đo hoàn chỉnh do đó mang lại một bộ ba (r, g, b) xác định màu được đo. Như trong đồ họa máy tính, bộ ba (0,0,0) đại diện cho bóng tối hoàn toàn, màu đen; (1,1,1) là màu trắng sáng nhất và bất kỳ sự kết hợp nào (r, g, b) trong đó r == g == b đại diện cho một số màu xám. Tất cả các kết hợp có thể khác xác định một điểm đặc biệt trong không gian RGB, xác định màu được đo. (0,5,0,0) là một số màu đỏ trung bình, ví dụ, và (0,9,0,9,0) là một số màu vàng tương đối sáng, vv ..
Ghi chú:
- Tất nhiên, bộ tách sóng quang phải nhạy với tất cả (3) màu sáng được sử dụng.
- Bộ tách sóng quang có thể cần một thời gian để ổn định sau khi chuyển đổi đèn LED trước khi có thể đọc chính xác; các chất phát quang, ví dụ, thường tương đối chậm. Có thể cần hàng chục đến hàng trăm mili giây cho độ chính xác chấp nhận được, vài phút cho các giá trị chính xác nhất.
- Sau khi phần cứng được thiết lập, nó có thể dễ dàng hiệu chỉnh theo màu sắc bề mặt quan tâm bằng cách chỉ cần đo một mẫu của từng mẫu. Bằng cách này, không cần nỗ lực trong việc cố gắng xác định phân bố bước sóng chính xác hoặc độ sáng tương đối của đèn LED hoặc độ nhạy tương đối của cảm biến đối với các bước sóng đó.
- Bình thường hóa các giá trị đo có thể cần thiết trước khi sử dụng thực tế. Ví dụ, để bù cho ánh sáng đi lạc từ bên ngoài, có thể thực hiện thêm một phép đo với tất cả các đèn LED tắt và kết quả sẽ được trừ vào các giá trị được đo khi đèn LED sáng. Nói chung, giá trị tuyệt đối được đo cho từng thành phần màu ít quan trọng hơn sự khác biệt tương đối giữa chúng.
Một số trang ngẫu nhiên với 'bàn tay' về chủ đề:
http://www.societyofrobots.com/sensors_color.shtml
http://www.instructables.com/id/Color-Detection-Using-RGB-LED/#step1
http://letsmakerobots.com/node/23768