คุณมีตัวเลือกน้อย:
หมายเหตุ: ลิงค์ที่ให้เป็นเพียงลิงค์แรกที่เกิดขึ้น ส่วนใหญ่ราคาแพงเมื่อเทียบกับเว็บไซต์อื่น ๆ eBay ซื้อแล้วราคาถูกสำหรับสินค้าเหล่านี้ส่วนใหญ่ ตรวจสอบสถานที่อื่น ๆ ด้วยรวมทั้งSparkfun
- อัลตราโซนิกปิงเซนเซอร์ สิ่งนี้ไม่เหมาะอย่างยิ่ง แต่ใช้งานง่าย เพียงเพิ่มเข้ากับสิ่งที่แนบมา มันไม่เหมาะเพราะจะไม่แม่นยำพอที่จะบอกได้ว่ามันว่างเปล่าเมื่อไหร่ อาจมีความอ่อนไหวสูง / ต่ำเล็กน้อย น้ำหนักจะหนักขึ้นแม้ว่ามันจะเปลี่ยนไปก็ตาม
- เซ็นเซอร์สี (ดีกว่า แต่ค่าใช้จ่ายเพิ่มเติม) คุณพูดถึงเรื่องนี้และนี่อาจเป็นความคิดที่ดีที่สุด มันจะให้ค่าอะนาล็อก (สำหรับการอ่านด้วย Arduino) สำหรับสีแดงสีเขียวและสีน้ำเงิน [สมมติว่าเนื้อหาของสีนั้นสูงกว่าแรงดันไฟฟ้าที่สูงกว่า] สีขาวควรจะสวยมาก ๆ ที่ 100% และสีน้ำตาลฉันจะนึกภาพว่าส่วนใหญ่จะอยู่ที่ประมาณ 30-40% (เพิ่มเติมในภายหลังหากคุณไม่เข้าใจให้ข้ามส่วนนี้)
ฉันจะอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับเซ็นเซอร์สี:
สีที่อ่านมีค่าสามค่าที่นี่: สีแดงสีเขียวและสีน้ำเงิน บอร์ดมีเซ็นเซอร์สามตัว มีตัวกรองทุกอย่างยกเว้นสีแดงสีน้ำเงินอีกอันหนึ่งและสีเขียวอื่น ๆ เซ็นเซอร์บนกระดานตรวจจับปริมาณแสงที่เข้ามาแล้วแปลงเป็นแรงดันไฟฟ้า: ระหว่าง 5V ("100% แดง / เขียว / น้ำเงิน") หรือ 0V ("0% แดง / เขียว / น้ำเงิน") จากนั้นสามารถแปลงเป็นตัวเลขได้โดย Arduino (0-1024 บนพินอะนาล็อก)
ปัญหาเกี่ยวกับแสง:
เซ็นเซอร์นี้จากสิ่งที่ฉันสามารถบอกได้มี LED ที่เปิดอยู่เสมอ คุณจะต้องการที่จะกำจัดหรือปกปิดมันเว้นแต่คุณต้องการที่ใส่กระดาษชำระ ตอนนี้รอ ... เซ็นเซอร์ของคุณจะคิดว่าเมื่อมันมืดมันเป็นสีน้ำตาล ไม่มีปัญหา ... นี่คือสิ่งที่คุณควรคำนึงถึง
ใช้ตัวเลือกสีเช่นฉันใช้และเลือกสีน้ำตาล ทางด้านซ้ายของสิ่งนี้คุณสามารถควบคุม "ความสว่างจำลอง" นอกจากนั้นนั่นคือรูปแบบเลขฐานสิบหกของ RGB คุณจะต้องการแปลงที่มาตรฐานค่ากับ calcuator
ในสีน้ำตาลสีน้ำเงินสีนั้นแทบจะไม่มีเลย เราควรเพิกเฉยสีนั้นเว้นเสียแต่ว่าคุณต้องการตรวจสอบอีกครั้งว่าเป็นสีน้ำตาล ฉันจะบอกว่ามันควรจะต่ำกว่า 40% สำหรับสีน้ำตาลใด ๆ
จากสิ่งที่ฉันสามารถบอกได้ด้วยร่มเงาสีน้ำตาลตัวอย่างสีแดงนั้นมีสีเขียวมากกว่า 2x อัตราส่วนที่อาจแตกต่างกัน แต่คุณควรตรวจสอบว่ามันค่อนข้างอยู่จริง สำหรับขาว / เทา / ดำสีทั้งหมดเป็นสัดส่วน 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, ฯลฯ ) หากเป็นเรื่องจริงคุณสามารถพิสูจน์ได้ว่าเป็นสีน้ำตาล จากนั้นไฟ LED จะเปิดเป็นเวลาห้าวินาที
คุณสามารถปรับเปลี่ยน LED ให้เป็นเสียงปลุกหากคุณต้องการ คุณอาจต้องปรับคำสั่ง if ด้วยการตรวจสอบว่าสีน้ำเงินน้อยกว่า 256/1024 (1024 = ความละเอียดของพินแอนะล็อก) หากมันไม่ทำงานในที่มีแสงมากหรือทำงานในที่มืด เนื่องจากรหัสในภายหลังตรวจสอบว่าสีแดงมีสีเขียวประมาณ 2x สีของเฉดสีขาวใด ๆ จึงไม่ควรส่งผ่านคำสั่งนั้น คุณอาจต้องปรับminRed
และmaxRed
เพื่อให้ไกลขึ้น (หากไม่ตรวจจับสีน้ำตาล) หรือใกล้กว่า (หากตรวจจับสีน้ำตาลเมื่อเป็นสีขาว) ฉันไม่สามารถทดสอบรหัสนี้ได้โดยไม่มีเซ็นเซอร์สี
หมายเหตุ: สิ่งเหล่านี้อาจเป็นเรื่องตลกเล็กน้อย ฉันอยากจะแนะนำไฟ LED แทนเพื่อให้บ้านทั้งหลังไม่ตื่นขึ้นมากลางดึกเพียงเพราะกระดาษชำระต่ำ นอกจากนี้ถ้าคุณขัดขวางเซ็นเซอร์เลย ... ถ้ามันไม่ได้อยู่ในห้องน้ำฉันจะแนะนำกล้องและให้มันยิงทุกครั้งที่มันต่ำมากด้วยสวิตช์กกเหมือนคำตอบของ @ jfpolipret ... แต่ ... (ไม่มีการเล่นสำนวนเจตนา) :)