Vous avez quelques options:
Remarque: les liens fournis ne sont que les premiers à apparaître. La plupart d'entre eux sont chers par rapport à d'autres sites. Acheter sur eBay peut être assez bon marché pour la plupart de ces objets. Vérifiez également d'autres endroits, y compris Sparkfun .
- Capteur Ping Ultrasonique . Ce n'est pas idéal, mais ils sont faciles à utiliser. Il suffit d’en ajouter un avec une enceinte. Ce n'est pas idéal car il ne sera pas assez précis pour dire quand c'est exactement vide. Il pourrait être un peu trop / sous sensible. Le poids serait plus dur, mais s'il changeait du tout.
- Capteur de couleur (préférable, mais coûte plus cher) . Vous en avez parlé et c'est probablement la meilleure idée. Il vous donnera des valeurs analogiques (à lire avec Arduino) pour le rouge, le vert et le bleu. [En supposant que plus la teneur de cette couleur est élevée, plus la tension est élevée,] le blanc devrait être à peu près tous ceux à 100% et le marron, j'imagine que la plupart d'entre eux seraient d'environ 30 à 40%. (Plus tard, si vous ne comprenez pas cela, sautez cette partie)
Je vais aller plus en détail sur le capteur de couleur:
Les couleurs sont lues avec trois valeurs ici: rouge, vert et bleu. Il y a trois capteurs sur la carte. L'un filtre tout sauf le rouge, un autre bleu et l'autre vert. Les capteurs de la carte détectent la quantité de lumière entrante, puis la convertissent en une tension comprise entre 5V ("100% rouge / vert / bleu") ou 0V ("0% rouge / vert / bleu"). Cela peut ensuite être converti en un nombre par l’Arduino (0-1024 sur une broche analogique).
Un problème d'éclairage:
ce capteur, d'après ce que je peux dire, a une LED qui est toujours allumée. Vous voudrez le dessouder ou le recouvrir, à moins que vous ne souhaitiez un support de papier toilette illuminé. Maintenant, attendez ... votre capteur pensera que lorsqu'il fait sombre, il est brun. Pas de problème ... voici quelque chose à penser à votre esprit.
Utilisez un sélecteur de couleur comme je l’utilise et sélectionnez un marron . Sur la gauche de celui-ci, vous pouvez contrôler la "luminosité simulée". De plus, c'est la forme hexadécimale de RVB. Vous voudrez convertir cela en valeurs standard avec ce calculateur .
En marron, la couleur bleue est presque inexistante. Nous devrions ignorer cette couleur, à moins que vous ne souhaitiez un moyen de vérifier sa couleur brune. Je dirais qu'il devrait toujours être inférieur à 40% pour à peu près toutes les nuances de brun.
D'après ce que je peux dire avec un échantillon de brun, le rouge est à peu près deux fois le vert. Ce rapport peut varier, mais vous devez vérifier qu'il existe quelque peu . Pour le blanc / gris / noir, toutes les couleurs sont proportionnelles 1: 1: 1. Vous pouvez l'utiliser pour détecter s'il fait noir ou s'il est brun.
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
}
Premièrement, il vérifie que le bleu est inférieur à 25%. Ensuite, il vérifie que le rouge et le vert sont égaux ... à 20% environ. (ie rouge = 100 vert = 80, rouge = 110 vert = 90, etc.). Si cela est vrai, vous pouvez assez bien établir qu'il est marron. Ensuite, une LED s’allume pendant cinq secondes.
Vous pouvez modifier le voyant pour qu’il émette un signal sonore si vous le souhaitez. Vous devrez peut-être ajuster l'instruction if en vérifiant que le bleu est inférieur à 256/1024 (1024 = résolution de la broche analogique) s'il ne fonctionne pas dans un environnement très lumineux ou dans un environnement sombre. Puisque le code vérifie plus tard que le rouge est environ 2x le vert, aucune nuance de blanc ne devrait passer que si instruction. Vous devrez peut-être également ajuster le minRed
et maxRed
pour être plus loin (si le brun n'est pas détecté) ou plus proche (si le brun est détecté quand il est blanc). Je ne peux pas vraiment tester ce code sans capteur de couleur.
Remarque: ceux-ci peuvent être un peu agités. Je recommanderais plutôt une LED pour que toute la maison ne soit pas réveillée au milieu de la nuit juste à cause du papier toilette bas. Aussi, si vous obstruez le capteur du tout ... Si ce n'était pas dans la salle de bain, je recommanderais un appareil photo et le ferait prendre une photo à chaque fois qu'il devient très bas avec un interrupteur à lames tel que la réponse de @ jfpolipret ... mais ... (sans jeu de mots) :)