Birkaç seçeneğiniz var:
Not: Verilen linkler sadece ilk çıkanlardır. Çoğu diğer sitelere göre daha pahalı. eBay şimdi satın al bu öğelerin çoğu için oldukça ucuz olabilir. Sparkfun dahil diğer yerleri de kontrol edin .
- Ultrasonik Ping Sensörü . Bu hiçbir şekilde ideal değildir, ancak kullanımı kolaydır. Sadece bir muhafaza ile bir tane ekleyin. İdeal değil çünkü tam olarak ne zaman boş olduğunu söyleyecek kadar doğru olmayacak. Hassasiyet biraz / aşırı duyarlı olabilir. Eğer ağırlık kayıyor olsa da, daha da zorlaşacaktır.
- Renk sensörü (tercih edilir, ancak maliyeti daha fazla) . Bundan bahsettiniz ve bu muhtemelen en iyi fikir. Size kırmızı, yeşil ve mavi için analog değerler (Arduino ile okumak için) verir. [Bu rengin içeriği ne kadar yüksekse, voltaj o kadar yüksek olursa,] beyazın% 100’de hemen hemen hepsinde olması gerekir ve kahverengi de çoğunun yaklaşık% 30-40 olacağını düşünürdüm. (Daha sonra, bunu anlamadıysanız, bu kısmı atlayın)
Renk sensöründe daha fazla ayrıntıya gireceğim:
Renkler burada üç değerle okunur: kırmızı, yeşil ve mavi. Tahta üzerinde üç sensör var. Biri kırmızı, başka mavi ve diğer yeşil dışındaki her şeyi filtreler. Kart üzerindeki sensörler gelen ışık miktarını algılar ve daha sonra bunu 5V ("% 100 kırmızı / yeşil / mavi") veya 0V ("% 0 kırmızı / yeşil / mavi") arasında bir voltaja dönüştürür. Bu daha sonra Arduino tarafından bir sayıya dönüştürülebilir (analog pin üzerinde 0-1024).
Aydınlatmayla ilgili bir sorun:
Bu sensörün anlatabileceğim şeyden önce sürekli yanan bir LED'i var. Aydınlatılmış bir tuvalet kağıdı tutucusu istemediğiniz sürece, bunu sökmek veya örtmek isteyeceksiniz. Şimdi bekle ... sensörün karanlık olduğunda kahverengi olduğunu düşünecek. Sorun değil ... işte aklınıza gelebilecek bir şey.
Kullandığım gibi bir renk toplayıcı kullanın ve bir kahverengi seçin . Bunun solunda, "benzetilmiş parlaklığı" kontrol edebilirsiniz. Bunun yanında RGB'nin onaltılık şeklidir. Bu hesaplayıcı ile bunu standart değerlere dönüştürmek isteyeceksiniz .
Kahverengi renkte mavi renk neredeyse yoktur. Kahvenin kahverengi olduğunu kontrol etmenin bir yolu olmadıkça, bu rengi yoksaymalıyız. Hemen hemen her% 40'ın altında olması gerektiğini söyleyebilirim.
Kahverengi bir örnek tonuyla söyleyebileceklerime göre kırmızı, yeşilin 2 katıdır. Bu oran değişebilir, ancak bir şekilde var olduğunu doğrulamalısınız . Beyaz / gri / siyah için, tüm renkler 1: 1: 1 ile orantılıdır. Karanlık mı yoksa kahverengi mi olduğunu tespit etmek için bunu kullanabilirsiniz.
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
}
İlk olarak, mavinin% 25'ten az olduğunu doğrular. Sonra, kırmızı ve yeşilin eşit olduğunu doğrular ...% 20 verir ya da alır. (yani, kırmızı = 100 yeşil = 80, kırmızı = 110 yeşil = 90 vb.). Bu doğruysa, kahverengi olduğunu hemen hemen belirleyebilirsiniz. Ardından, bir LED beş saniye boyunca yanar.
İsterseniz LED'i zil sesi olarak değiştirebilirsiniz. Çok fazla ışıkta çalışmıyorsa veya karanlık ışıkta çalışıyorsa, mavinin 256/1024'ten (1024 = analog pimin çözünürlüğü) daha az olduğunu doğrulayarak if ifadesini ayarlamanız gerekebilir. Kod daha sonra kırmızının yeşilin yaklaşık 2 katı olduğunu doğruladığından, beyaz renkteki herhangi bir ifade ifadeyi geçmemelidir. Ayrıca ayarlamak gerekebilir minRed
ve maxRed
(kahverengi tespit değilse) veya daha yakın (beyaz olduğunda ise kahverengi tespit) öteye olmak. Renk kodu olmadan bu kodu gerçekten test edemiyorum.
Not: Bunlar biraz karışıklık olabilir. Bunun yerine bir LED öneriyorum, bu yüzden bütün ev gecenin ortasında sadece tuvalet kağıdı yüzünden uyanmıyor. Ayrıca, sensörü hiçbir şekilde engellemezseniz ... Banyoda olmasaydı, bir kamera öneriyorum ve her seferinde @ jfpolipret'in cevabı gibi bir kamış anahtarıyla çok alçaltırken ... ... (amaçlanan hiçbir punto) :)