Anda punya beberapa pilihan:
Catatan: Tautan yang diberikan hanyalah tautan pertama yang muncul. Kebanyakan dari mereka mahal dibandingkan dengan situs lain. eBay membelinya sekarang bisa cukup murah untuk sebagian besar barang-barang ini. Periksa tempat lain juga, termasuk Sparkfun .
- Sensor Ping Ultrasonik . Ini tidak ideal dengan cara apa pun, tetapi mudah digunakan. Cukup tambahkan satu dengan penutup. Ini tidak ideal karena tidak akan cukup akurat untuk mengetahui kapan tepatnya itu kosong. Mungkin sedikit over / under sensitif. Berat akan lebih sulit, meskipun jika itu bergeser sama sekali.
- Sensor warna (lebih disukai, tetapi harganya lebih mahal) . Anda menyebutkan ini dan ini mungkin ide terbaik. Ini akan memberi Anda nilai analog (untuk dibaca dengan Arduino) untuk merah, hijau, dan biru. [Dengan asumsi bahwa semakin tinggi kandungan warna itu, semakin tinggi tegangannya,] putih seharusnya hampir semuanya 100% dan coklat saya membayangkan bahwa kebanyakan dari mereka akan sekitar 30-40%. (Lebih lanjut, jika Anda tidak mengerti ini, lewati bagian ini)
Saya akan membahas lebih rinci tentang sensor warna:
Warna dibaca dengan tiga nilai di sini: merah, hijau, dan biru. Ada tiga sensor di papan tulis. Yang satu menyaring semuanya kecuali merah, yang lain biru, dan yang lainnya hijau. Sensor di papan mendeteksi jumlah cahaya yang masuk dan kemudian mengubahnya menjadi tegangan: antara 5V ("100% merah / hijau / biru") atau 0V ("0% merah / hijau / biru"). Ini kemudian dapat dikonversi menjadi angka oleh Arduino (0-1024 pada pin analog).
Masalah dengan pencahayaan:
Sensor ini, dari apa yang saya tahu, memiliki LED yang selalu menyala. Anda ingin melakukan desolder atau menutupinya, kecuali jika Anda menginginkan tempat kertas toilet yang menyala. Sekarang tunggu ... sensor Anda akan berpikir bahwa ketika gelap, warnanya cokelat. Tidak masalah ... ada sesuatu yang bisa Anda pikirkan.
Gunakan pemilih warna seperti yang saya gunakan dan pilih cokelat . Di sebelah kiri ini, Anda dapat mengontrol "kecerahan yang disimulasikan." Selain itu adalah bentuk heksadesimal dari RGB. Anda ingin mengonversikannya ke nilai standar dengan kalkulator ini .
Dalam warna coklat, warna biru hampir tidak ada. Kita harus mengabaikan warna itu, kecuali jika Anda ingin cara memeriksa ulang apakah warnanya cokelat. Saya akan mengatakan itu harus selalu di bawah 40% untuk hampir semua warna coklat.
Dari apa yang bisa saya katakan dengan contoh warna coklat, merah cukup banyak 2x hijau. Rasio itu mungkin bervariasi, tetapi Anda harus memverifikasi bahwa itu agak ada. Untuk putih / abu-abu / hitam, semua warna adalah proporsional 1: 1: 1. Anda dapat menggunakan ini untuk mendeteksi apakah gelap, atau cokelat.
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
}
Pertama, itu memverifikasi bahwa biru kurang dari 25%. Kemudian, itu memverifikasi bahwa merah dan hijau sama ... memberi atau mengambil 20%. (yaitu merah = 100 hijau = 80, merah = 110 hijau = 90, dll.). Jika itu benar, Anda dapat memastikan bahwa warnanya cokelat. Kemudian, LED menyala selama lima detik.
Anda dapat memodifikasi LED menjadi buzzer jika diinginkan. Anda mungkin harus menyesuaikan pernyataan if dengan memverifikasi bahwa biru kurang dari 256/1024 (1024 = resolusi pin analog) jika tidak bekerja dalam banyak cahaya atau bekerja dalam cahaya gelap. Karena kode nanti memverifikasi bahwa merah adalah sekitar 2x hijau, setiap warna putih tidak boleh melewati pernyataan if. Anda mungkin juga harus menyesuaikan minRed
dan maxRed
menjadi lebih jauh (jika tidak mendeteksi cokelat) atau lebih dekat (jika mendeteksi cokelat saat putih). Saya tidak dapat benar-benar menguji kode ini tanpa sensor warna.
Catatan: ini bisa sedikit gelisah. Saya akan merekomendasikan LED sehingga seluruh rumah tidak terbangun di tengah malam hanya karena kertas toilet yang rendah. Juga, jika Anda menghalangi sensor sama sekali ... Jika tidak di kamar mandi, saya akan merekomendasikan kamera dan mengambil bidikan setiap kali itu menjadi sangat rendah dengan saklar buluh seperti jawaban @ jfpolipret ... tapi ... (tidak ada permainan kata-kata) :)