Sie haben einige Möglichkeiten:
Hinweis: Die angegebenen Links sind nur die ersten, die angezeigt werden. Die meisten von ihnen sind im Vergleich zu anderen Websites teuer. eBay kann für die meisten dieser Artikel recht günstig sein. Überprüfen Sie auch andere Orte, einschließlich Sparkfun .
- Ultraschall-Ping-Sensor . Dies ist keineswegs ideal, aber sie sind einfach zu bedienen. Fügen Sie einfach eine mit einem Gehäuse hinzu. Es ist nicht ideal, weil es nicht genau genug ist, um zu sagen, wann es genau leer ist. Es könnte etwas über- / unterempfindlich sein. Das Gewicht wäre allerdings schwieriger, wenn es sich überhaupt verschiebt.
- Farbsensor (vorzuziehen, kostet aber mehr) . Sie haben das erwähnt und das ist wahrscheinlich die beste Idee. Sie erhalten analoge Werte (zum Lesen mit Arduino) für Rot, Grün und Blau. [Angenommen, je höher der Gehalt dieser Farbe ist, desto höher ist die Spannung.] Weiß sollte so ziemlich alle bei 100% und Braun sein. Ich würde mir vorstellen, dass die meisten von ihnen etwa 30-40% betragen würden. (Mehr dazu später, wenn Sie das nicht verstehen, überspringen Sie diesen Teil.)
Ich werde auf den Farbsensor näher eingehen:
Farben werden hier mit drei Werten gelesen: Rot, Grün und Blau. Auf der Platine befinden sich drei Sensoren. Einer filtert alles aus, außer Rot, einem anderen Blau und dem anderen Grün. Die Sensoren auf der Platine erkennen die einfallende Lichtmenge und wandeln diese in eine Spannung zwischen 5 V ("100% Rot / Grün / Blau") oder 0 V ("0% Rot / Grün / Blau") um. Dies kann dann vom Arduino in eine Zahl umgewandelt werden (0-1024 auf einem analogen Pin).
Ein Problem mit der Beleuchtung:
Soweit ich weiß, hat dieser Sensor eine LED, die immer leuchtet. Sie möchten das entweder entlöten oder vertuschen, es sei denn, Sie möchten einen beleuchteten Toilettenpapierhalter. Jetzt warte ... dein Sensor wird denken, dass es braun ist, wenn es dunkel ist. Kein Problem ... hier ist etwas, worüber Sie nachdenken sollten.
Verwenden Sie einen Farbwähler, wie ich ihn verwende, und wählen Sie ein Braun aus . Links von diesem können Sie die "simulierte Helligkeit" steuern. Daneben ist die hexadezimale Form von RGB. Sie werden das mit diesem Rechner in Standardwerte konvertieren wollen .
In Braun ist die Farbe Blau fast nicht vorhanden. Wir sollten diese Farbe ignorieren, es sei denn, Sie möchten überprüfen, ob sie braun ist. Ich würde sagen, es sollte immer unter 40% für so ziemlich jeden Braunton sein.
Nach dem, was ich an einem Beispiel für einen Braunton erkennen kann, ist das Rot so ziemlich doppelt so groß wie das Grün. Dieses Verhältnis kann variieren, aber Sie sollten sicherstellen , dass es ist etwas vorhanden. Für Weiß / Grau / Schwarz sind alle Farben 1: 1: 1 proportional. Sie können dies verwenden, um festzustellen, ob es dunkel oder braun ist.
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
}
Zunächst wird überprüft, ob der Blauanteil weniger als 25% beträgt. Dann wird überprüft, ob Rot und Grün gleich sind. Geben oder Nehmen Sie 20%. (dh rot = 100 grün = 80, rot = 110 grün = 90 usw.). Wenn das stimmt, können Sie ziemlich genau feststellen, dass es braun ist. Dann leuchtet eine LED fünf Sekunden lang auf.
Sie können die LED ändern, um ein Summer zu sein, wenn Sie möchten. Möglicherweise müssen Sie die if-Anweisung anpassen, indem Sie überprüfen, ob das Blau weniger als 256/1024 (1024 = Auflösung des analogen Pins) ist, wenn es nicht in viel Licht oder in dunklem Licht arbeitet. Da der Code später bestätigt, dass das Rot ungefähr das Zweifache des Grüns ist, sollte ein Weißton die if-Anweisung nicht bestehen. Sie können auch die neu einstellen müssen minRed
und maxRed
weiter zu sein (wenn nicht sogar Nachweis braun) oder näher (falls Erfassung braun , wenn es weiß). Ich kann diesen Code ohne Farbsensor nicht wirklich testen.
Hinweis: Diese können etwas unruhig sein. Ich würde stattdessen eine LED empfehlen, damit das ganze Haus nicht mitten in der Nacht wegen zu wenig Toilettenpapier aufgeweckt wird. Auch, wenn Sie den Sensor überhaupt blockieren ... Wenn er nicht im Badezimmer wäre, würde ich eine Kamera empfehlen, die jedes Mal eine Aufnahme macht, wenn sie mit einem Reedschalter wie @ jfpolipret's answer ... sehr niedrig wird ... (kein Wortspiel beabsichtigt) :)