Você tem poucas opções:
Nota: Os links fornecidos são apenas os primeiros que aparecem. A maioria deles é cara em comparação com outros sites. Agora, o eBay pode ser bastante barato para a maioria desses itens. Verifique outros lugares também, incluindo Sparkfun .
- Sensor de Ping ultra-sônico . Isso não é ideal de forma alguma, mas é fácil de usar. Basta adicionar um com um gabinete. Não é o ideal, porque não será preciso o suficiente para dizer quando exatamente está vazio. Pode ser um pouco acima / abaixo sensível. O peso seria mais difícil, porém, se mudar.
- Sensor de cor (preferível, mas custa mais) . Você mencionou isso e esta é provavelmente a melhor ideia. Isso fornecerá valores analógicos (para ler com o Arduino) para vermelho, verde e azul. [Supondo que quanto maior o conteúdo dessa cor, maior a tensão], o branco deve ser praticamente todos aqueles com 100% e marrom, imagino que a maioria deles seja de 30 a 40%. (Mais tarde, se você não entender isso, pule esta parte)
Vou entrar em mais detalhes sobre o sensor de cores:
As cores são lidas com três valores aqui: vermelho, verde e azul. Existem três sensores no quadro. Um filtra tudo, exceto vermelho, outro azul e o outro verde. Os sensores na placa detectam a quantidade de luz recebida e a convertem em tensão: entre 5V ("100% vermelho / verde / azul") ou 0V ("0% vermelho / verde / azul"). Isso pode ser convertido em número pelo Arduino (0-1024 em um pino analógico).
Um problema com a iluminação:
esse sensor, pelo que sei, tem um LED sempre ligado. Você quer dessoldar isso ou encobri-lo, a menos que queira um suporte de papel higiênico iluminado. Agora espere ... seu sensor pensará que quando está escuro, é marrom. Não tem problema ... aqui está algo para você pensar.
Use um seletor de cores como eu estou usando e selecione um marrom . À esquerda deste, você pode controlar o "brilho simulado". Além disso, é a forma hexadecimal do RGB. Você desejará converter isso em valores padrão com este calcador .
Em marrom, a cor azul é quase inexistente. Devemos ignorar essa cor, a menos que você queira uma maneira de verificar se é marrom. Eu diria que sempre deve estar abaixo de 40% para praticamente qualquer tom de marrom.
Pelo que posso dizer com uma amostra de tom marrom, o vermelho é praticamente o dobro do verde. Essa proporção pode variar, mas você deve verificar se é um pouco existente. Para branco / cinza / preto, todas as cores são proporcionais 1: 1: 1. Você pode usar isso para detectar se está escuro ou marrom.
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
}
Primeiro, verifica se o azul é inferior a 25%. Em seguida, verifica se o vermelho e o verde são iguais ... mais ou menos 20%. (ou seja, vermelho = 100 verde = 80, vermelho = 110 verde = 90, etc.). Se isso for verdade, você pode estabelecer que é marrom. Em seguida, um LED acende por cinco segundos.
Você pode modificar o LED para tocar uma campainha, se desejar. Pode ser necessário ajustar a instrução if para verificar se o azul é menor que 256/1024 (1024 = resolução do pino analógico) se não estiver trabalhando com muita luz ou com luz escura. Como o código mais tarde verifica se o vermelho é cerca de duas vezes o verde, qualquer tom de branco não deve passar pela instrução if. Você também pode precisar ajustar minRed
e maxRed
estar mais longe (se não detectar o marrom) ou mais próximo (se detectar o marrom quando estiver branco). Eu realmente não posso testar esse código sem sensor de cores.
Nota: estes podem ser um pouco inquietos. Eu recomendaria um LED para que a casa inteira não seja acordada no meio da noite apenas por causa do papel higiênico baixo. Além disso, se você obstruir o sensor ... Se ele não estivesse no banheiro, eu recomendaria uma câmera e ela tiraria uma foto toda vez que ficar muito baixa com um interruptor de palheta como a resposta de @ jfpolipret ... mas ... (sem trocadilhos) :)