Bạn có một vài lựa chọn:
Lưu ý: Các liên kết đưa ra chỉ là những liên kết đầu tiên xuất hiện. Hầu hết trong số họ là đắt tiền so với các trang web khác. eBay mua nó nows có thể khá rẻ cho hầu hết các mặt hàng này. Kiểm tra những nơi khác, quá, bao gồm Sparkfun .
- Cảm biến siêu âm Ping . Điều này không lý tưởng bằng mọi cách, nhưng chúng dễ sử dụng. Chỉ cần thêm một với một bao vây. Nó không lý tưởng bởi vì nó sẽ không đủ chính xác để nói khi nào chính xác nó trống rỗng. Nó có thể là một chút trên / dưới nhạy cảm. Trọng lượng sẽ khó hơn, mặc dù nếu nó thay đổi.
- Cảm biến màu (tốt hơn, nhưng chi phí nhiều hơn) . Bạn đã đề cập đến điều này và đây có lẽ là ý tưởng tốt nhất. Nó sẽ cung cấp cho bạn các giá trị tương tự (để đọc với Arduino) cho màu đỏ, xanh lá cây và xanh dương. [Giả sử rằng nội dung của màu đó càng cao thì điện áp càng cao,] màu trắng sẽ khá giống với tất cả những người ở mức 100% và màu nâu, tôi sẽ hình dung rằng hầu hết trong số họ sẽ có khoảng 30-40%. (Sau này, nếu bạn không hiểu điều này, hãy bỏ qua phần này)
Tôi sẽ đi vào chi tiết hơn về cảm biến màu sắc:
Màu sắc được đọc với ba giá trị ở đây: đỏ, xanh lá cây và xanh dương. Có ba cảm biến trên bảng. Một bộ lọc tất cả mọi thứ trừ màu đỏ, màu xanh khác và màu xanh lá cây khác. Các cảm biến trên bảng sẽ phát hiện lượng ánh sáng tới và sau đó chuyển đổi nó thành điện áp: giữa 5V ("100% đỏ / xanh / xanh") hoặc 0V ("0% đỏ / xanh / xanh"). Điều này sau đó có thể được chuyển đổi thành một số bởi Arduino (0-1024 trên một pin tương tự).
Một vấn đề với ánh sáng:
Cảm biến này, từ những gì tôi có thể nói, có một đèn LED luôn sáng. Bạn sẽ muốn giảm bớt hoặc che đậy nó, trừ khi bạn muốn có một người giữ giấy vệ sinh được chiếu sáng. Bây giờ hãy đợi ... cảm biến của bạn sẽ nghĩ rằng khi trời tối, nó có màu nâu. Không có vấn đề gì ... đây là một cái gì đó để bạn suy nghĩ về.
Sử dụng công cụ chọn màu như tôi đang sử dụng và chọn màu nâu . Ở bên trái của cái này, bạn có thể điều khiển "độ sáng mô phỏng". Bên cạnh đó là dạng thập lục phân của RGB. Bạn sẽ muốn chuyển đổi giá trị đó thành giá trị tiêu chuẩn với bộ tính toán này .
Trong màu nâu, màu xanh gần như không có. Chúng ta nên bỏ qua màu đó, trừ khi bạn muốn kiểm tra lại xem nó có màu nâu không. Tôi muốn nói rằng nó phải luôn dưới 40% cho bất kỳ màu nâu nào.
Từ những gì tôi có thể nói với một mẫu màu nâu, màu đỏ gần gấp đôi màu xanh lá cây. Tỷ lệ đó có thể khác nhau, nhưng bạn nên xác minh rằng nó có phần tồn tại. Đối với màu trắng / xám / đen, tất cả các màu tỷ lệ 1: 1: 1. Bạn có thể sử dụng điều này để phát hiện nếu trời tối, hoặc nếu nó màu nâu.
int rPin = A0; //Red Pin
int gPin = A1; //Green Pin
int bPin = A2; //Blue Pin
int ledPin = 13; //I made this code with a LED, not a speaker
boolean testTwice = false;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
int rValue = analogRead(rPin);
int gValue = analogRead(gPin);
int bValue = analogRead(bPin);
if (bPin < 256) { //If this is false, either something is in the way or it's white. Going to verify that something's not in the way...
int minRed = rPin * 0.4; //A little under a half for padding... this values may need to be adjusted. Adjust this one and the one below farther apart for less sensitive.
int maxRed = rPin * 0.6; //A little over a half for padding... this values may need to be adjusted.
if (gPin < maxRed && gPin > minRed) { //Verifys that red between minRed and maxRed
digitalWrite(ledPin, HIGH);
delay(5000);
digitalWrite(ledPin, LOW);
}
}
delay(5000); // No need to waste power... you might want to add an actutal sleep function if on battery power
}
Đầu tiên, nó xác minh rằng màu xanh nhỏ hơn 25%. Sau đó, nó xác minh rằng màu đỏ và màu xanh lá cây bằng nhau ... cho hoặc nhận 20%. (tức là đỏ = 100 xanh = 80, đỏ = 110 xanh = 90, v.v.). Nếu đó là sự thật, bạn có thể xác định rằng đó là màu nâu. Sau đó, một đèn LED bật trong năm giây.
Bạn có thể sửa đổi đèn LED thành còi nếu bạn muốn. Bạn có thể phải điều chỉnh câu lệnh if bằng cách xác minh rằng màu xanh nhỏ hơn 256/1024 (1024 = độ phân giải của pin analog) nếu nó không hoạt động trong nhiều ánh sáng hoặc hoạt động trong ánh sáng tối. Vì mã sau đó xác minh rằng màu đỏ gấp khoảng 2 lần màu xanh lá cây, bất kỳ sắc thái nào của màu trắng không nên vượt qua câu lệnh if. Bạn cũng có thể phải điều chỉnh minRed
và maxRed
xa hơn (nếu không phát hiện màu nâu) hoặc gần hơn (nếu phát hiện màu nâu khi nó màu trắng). Tôi thực sự không thể kiểm tra mã này mà không có cảm biến màu.
Lưu ý: những điều này có thể là một chút sốt ruột. Thay vào đó, tôi muốn giới thiệu một đèn LED để cả nhà không thức dậy vào giữa đêm chỉ vì giấy vệ sinh thấp. Ngoài ra, nếu bạn cản trở cảm biến ... Nếu nó không ở trong phòng tắm, tôi sẽ khuyên bạn nên dùng máy ảnh và chụp mỗi lần nó rất thấp với công tắc sậy như câu trả lời của @ jfpolipret ... nhưng ... (không có ý định chơi chữ) :)