У вас є кілька варіантів:
Примітка. Наведені посилання - це лише перші, які з’являються. Більшість з них є дорогими порівняно з іншими сайтами. Купувати його на eBay ноув може бути досить дешево для більшості цих предметів. Перевірте й інші місця, зокрема Sparkfun .
- Ультразвуковий датчик пінг . Це не ідеально в будь-якому випадку, але вони прості у використанні. Просто додайте один із додатком. Це не ідеально, тому що він буде недостатньо точним, щоб сказати, коли саме він порожній. Це може бути трохи над / менш чутливим. Вага буде важче, хоча якщо вона взагалі зміститься.
- Кольоровий датчик (бажано, але коштує дорожче) . Ви згадали про це, і це, мабуть, найкраща ідея. Це дасть вам аналогічні значення (для читання з Arduino) для червоного, зеленого та синього. [Якщо припустити, що чим вищий вміст цього кольору, то більша напруга]] білого має бути майже все з тих, хто на 100%, а коричневого я вважаю, що більшість із них становитиме приблизно 30-40%. (Пізніше, якщо ви цього не розумієте, пропустіть цю частину)
Я збираюся детальніше розповісти про кольоровий датчик:
Кольори читаються тут із трьома значеннями: червоним, зеленим та синім. На платі є три датчики. Один фільтрує все, крім червоного, інший синій, а інший зелений. Датчики на платі визначають кількість надходить світла, а потім перетворюють його на напругу: між 5 В ("100% червоний / зелений / синій") або 0 В ("0% червоний / зелений / синій"). Це може бути перетворено в число Arduino (0-1024 на аналоговому штифті).
Проблема з освітленням.
Цей датчик, наскільки я можу сказати, має світлодіод, який завжди вмикається. Ви хочете або знепалити це, або покрити його, якщо ви не хочете освітленого тримача для туалетного паперу. Тепер зачекайте ... ваш датчик подумає, що коли темно, він коричневий. Немає проблем ... ось щось вам на розум подумати.
Використовуйте інструмент вибору кольору, як я, і виберіть коричневий . Ліворуч від цього можна керувати "імітованою яскравістю". Крім того, це гексадецимальна форма RGB. За допомогою цього калькулятора ви хочете перетворити це у стандартні значення .
У коричневому кольорі синій майже не існує. Ми повинні ігнорувати цей колір, якщо ви не хочете, щоб перевірити, чи він коричневий. Я б сказав, що завжди має бути менше 40% для будь-якого відтінку коричневого.
З того, що я можу сказати зразком відтінку коричневого, червоний - це майже 2 рази зелений. Це співвідношення може відрізнятися, але слід переконатися, що воно дещо існує. Для білого / сірого / чорного кольору всі кольори пропорційні 1: 1: 1. Ви можете використовувати це, щоб визначити, темно чи коричнево.
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
}
По-перше, він перевіряє, що синій колір становить менше 25%. Потім він перевіряє, що червоний і зелений рівні ... дають або беруть 20%. (тобто червоний = 100 зелений = 80, червоний = 110 зелений = 90 тощо). Якщо це правда, ви можете майже встановити, що це коричневий колір. Потім на п'ять секунд вмикається світлодіод.
Ви можете змінити світлодіод, щоб він був зумер, якщо хочете. Можливо, вам доведеться відрегулювати оператор if, переконавшись, що синій менше 256/1024 (1024 = роздільна здатність аналогового штифта), якщо він не працює при сильному освітленні або працює в темному світлі. Оскільки пізніше код підтверджує, що червоний колір є приблизно в 2 рази зеленим, будь-який відтінок білого не повинен передавати це, якщо оператор. Можливо, вам також доведеться відрегулювати minRed
та maxRed
бути далі (якщо не виявити коричневий) або ближче (якщо виявити коричневий, коли він білий). Я не можу перевірити цей код без датчика кольору.
Примітка. Це можуть бути трохи химерними. Я б рекомендував замість цього світлодіод, щоб весь будинок не прокинувся посеред ночі саме через низький туалетний папір. Крім того, якщо ви взагалі перешкоджаєте датчику ... Якби його не було у ванній кімнаті, я б рекомендував фотоапарат і знімати його щоразу, коли він стає дуже низьким за допомогою перемикача очерету, як відповідь @ jfpolipret ... але ... (каламбур не призначений) :)