Hai alcune opzioni:
Nota: i collegamenti forniti sono solo i primi che vengono visualizzati. Molti di loro sono costosi rispetto ad altri siti. eBay lo compra nelle vicinanze può essere abbastanza economico per la maggior parte di questi articoli. Controllare altri luoghi, anche, compreso Sparkfun .
- Sensore ping ultrasonico . Questo non è l'ideale in alcun modo, ma sono facili da usare. Basta aggiungerne uno con un allegato. Non è l'ideale perché non sarà abbastanza preciso da dire esattamente quando è vuoto. Potrebbe essere un po 'sopra / sotto sensibile. Il peso sarebbe più difficile, anche se si sposta affatto.
- Sensore di colore (preferibile, ma costa di più) . Ne hai parlato e questa è probabilmente la migliore idea. Ti darà valori analogici (da leggere con Arduino) per rosso, verde e blu. [Supponendo che maggiore è il contenuto di quel colore, maggiore è la tensione,] il bianco dovrebbe essere praticamente tutto al 100% e il marrone immagino che la maggior parte di essi sarebbe circa il 30-40%. (Più tardi, se non lo capisci, salta questa parte)
Ho intenzione di approfondire il sensore di colore:
I colori vengono letti con tre valori qui: rosso, verde e blu. Ci sono tre sensori sulla scheda. Uno filtra tutto tranne il rosso, un altro blu e l'altro verde. I sensori sulla scheda rilevano la quantità di luce in entrata e la convertono in una tensione: tra 5 V ("100% rosso / verde / blu") o 0 V ("0% rosso / verde / blu"). Questo può quindi essere convertito in un numero da Arduino (0-1024 su un pin analogico).
Un problema con l'illuminazione:
questo sensore, da quello che posso dire, ha un LED sempre acceso. Ti consigliamo di dissaldarlo o coprirlo, a meno che tu non voglia un porta carta igienica illuminato. Ora aspetta ... il tuo sensore penserà che quando è buio, è marrone. Nessun problema ... ecco qualcosa a cui devi pensare.
Usa un selettore di colori come sto usando e seleziona un marrone . A sinistra di questo, puoi controllare la "luminosità simulata". Inoltre questa è la forma esadecimale di RGB. Ti consigliamo di convertirlo in valori standard con questo calcolatore .
Nel marrone, il colore blu è quasi inesistente. Dovremmo ignorare quel colore, a meno che tu non voglia un modo per ricontrollare che sia marrone. Direi che dovrebbe sempre essere inferiore al 40% per praticamente qualsiasi tonalità di marrone.
Da quello che posso dire con una sfumatura di marrone, il rosso è praticamente il doppio del verde. Tale rapporto può variare, ma è necessario verificare che sia in qualche modo esistente. Per il bianco / grigio / nero, tutti i colori sono proporzionali 1: 1: 1. Puoi usarlo per rilevare se è buio o se è marrone.
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
}
Innanzitutto, verifica che il blu sia inferiore al 25%. Quindi, verifica che il rosso e il verde siano uguali ... dai o prendi il 20%. (ovvero rosso = 100 verde = 80, rosso = 110 verde = 90, ecc.). Se questo è vero, puoi praticamente stabilire che è marrone. Quindi, un LED si accende per cinque secondi.
Se lo desideri, puoi modificare il LED in modo che diventi un segnale acustico. Potrebbe essere necessario regolare l'istruzione if verificando che il blu sia inferiore a 256/1024 (1024 = risoluzione del pin analogico) se non funziona in molta luce o funziona in condizioni di luce scura. Poiché il codice in seguito verifica che il rosso sia circa il doppio del verde, qualsiasi sfumatura di bianco non dovrebbe passare tale istruzione if. Potrebbe anche essere necessario regolare minRed
e maxRed
per essere più lontano (se non rileva il marrone) o più vicino (se rileva il marrone quando è bianco). Non riesco davvero a testare questo codice senza sensore di colore.
Nota: questi possono essere un po 'irrequieti. Consiglierei invece un LED in modo che l'intera casa non venga svegliata nel cuore della notte solo a causa della carta igienica bassa. Inoltre, se ostruisci il sensore ... Se non fosse in bagno, consiglierei una fotocamera e farei una foto ogni volta che si abbassa molto con un interruttore reed come la risposta di @ jfpolipret ... ma ... (nessun gioco di parole previsto) :)