สารบัญ:

กระจก Infinity พร้อม LCD และเซ็นเซอร์ IR: 5 ขั้นตอน
กระจก Infinity พร้อม LCD และเซ็นเซอร์ IR: 5 ขั้นตอน

วีดีโอ: กระจก Infinity พร้อม LCD และเซ็นเซอร์ IR: 5 ขั้นตอน

วีดีโอ: กระจก Infinity พร้อม LCD และเซ็นเซอร์ IR: 5 ขั้นตอน
วีดีโอ: How to Test Infrared Sensor, super simple ir receiver test 2024, พฤศจิกายน
Anonim
กระจกอินฟินิตี้พร้อม LCD และเซ็นเซอร์ IR
กระจกอินฟินิตี้พร้อม LCD และเซ็นเซอร์ IR
กระจกอินฟินิตี้พร้อม LCD และเซ็นเซอร์ IR
กระจกอินฟินิตี้พร้อม LCD และเซ็นเซอร์ IR
กระจกอินฟินิตี้พร้อม LCD และเซ็นเซอร์ IR
กระจกอินฟินิตี้พร้อม LCD และเซ็นเซอร์ IR

โปรเจ็กต์นี้จะแสดงให้คุณเห็นว่าคุณสามารถสร้างกระจกอินฟินิตี้ได้อย่างไร แนวคิดพื้นฐานคือไฟ LED ที่อยู่บนกระจกสร้างแสงที่สะท้อนจากกระจกมองหลังไปยังกระจกหน้าซึ่งมีแสงเล็ดลอดออกมาเพื่อให้เรามองเห็นภายในและบางส่วนจะสะท้อนกลับมาที่กระจกหลังและสร้างเอฟเฟกต์ที่ไม่มีที่สิ้นสุด อิงจากกระจกอินฟินิตี้พร้อมเซ็นเซอร์อัลตร้าโซนิคที่สอนโดย Hack Sioux Falls และวิธีเชื่อมต่อจอแสดงผล LCD I2C กับ Arduino Uno โดย JunezRiyaz

เสบียง

1. กล่องเงา ($50)

2. ฟิล์มกระจก 1 ทาง ($17)

3. แถบไฟ LED RGB ($30)

4. Arduino ($35)

5. กระจกเงา ($10)

ไม่จำเป็น:

1. เซ็นเซอร์ IR และรีโมท ($ 20)

2. จอแอลซีดี (20 เหรียญ)

3. 7 ตัวเชื่อมต่อหญิงกับชาย

4. 3 ตัวเชื่อมต่อชายกับชาย

เครื่องมือ

1. หัวแร้ง

2. เครื่องตัดและปอกสายไฟ

3. สิ่งที่จะตัดกระจกด้วย

*หมายเหตุ ราคาทั้งหมดเป็น CAD และขนาดจะขึ้นอยู่กับกล่องที่คุณใช้

ขั้นตอนที่ 1: การติดตั้งกระจกและฟิล์มกระจก

การติดตั้งกระจกและฟิล์มกระจก
การติดตั้งกระจกและฟิล์มกระจก
การติดตั้งกระจกและฟิล์มกระจก
การติดตั้งกระจกและฟิล์มกระจก

สิ่งแรกที่ต้องทำคือติดตั้งกระจกที่จะอยู่ด้านหลังกล่องเงา คุณต้องการซื้อขนาดที่เหมาะสมหรือขนาดที่ใหญ่กว่าแล้วลดขนาดลง แต่สำหรับสิ่งนี้ คุณต้องใช้กระจกไม่ใช่ฟิล์มเพราะเราต้องการให้แสงสะท้อนกลับมาทั้งหมด ฟิล์มกระจกยังสามารถใช้ลวดลายของวัสดุที่ติดได้หากไม่ใช่กระจก

เมื่อคุณติดตั้งกระจก ให้แน่ใจว่าได้ยึดไว้กับกล่องเงาแล้ว ผมขอแนะนำให้ใช้ไม้และตะปูชิ้นเล็กๆ เพื่อให้แน่ใจว่ากระจกจะไม่เคลื่อนที่ ฉันไม่มีกระจกในเวลาที่ฉันต้องทำโปรเจ็กต์นี้ ฉันจึงใช้ฟิล์ม (ดูในภาพ) แนวคิดนี้ได้ผลแต่ไม่ค่อยดีนักและทำให้ดูมีมุมและโกลาหลซึ่งในความคิดของฉันไม่ได้ดูดีเลย

ฟิล์มกระจกทุกตัวจะต่างกันนิดหน่อยแต่อันที่บอกไปล้างกระจกที่เราติดฟิล์มแล้วใช้เทปกาวลอกฟิล์มกันรอยที่อยู่ด้านหนึ่งออกแล้วฉีดน้ำสบู่เป็นสเปรย์ ขวดใส่ฟิล์มบนกระจก จากนั้นใช้บัตรเครดิตหรือไม้กวาดหุ้มยางเพื่อกำจัดฟองอากาศและน้ำส่วนเกิน ฉันไม่มีกระจกอีกครั้ง แต่มันก็ยังใช้งานได้เหมือนเดิม แล้วทิ้งแก้วไว้ให้แห้งข้ามคืนก็ควรทำ

ขั้นตอนที่ 2: การตั้งค่าแถบ LED

การตั้งค่าแถบ LED
การตั้งค่าแถบ LED
การตั้งค่าแถบ LED
การตั้งค่าแถบ LED

สำหรับไฟ LED ฉันเพิ่งใช้เทปกาวสองหน้าที่ให้มาเพื่อติดเข้ากับกรอบ และทำรูเพื่อให้ลวดหลุดออกมา ที่แต่ละมุมฉันบัดกรีตะกั่วเพื่อเชื่อมต่อกับแถบอื่นเพื่อให้กล่องมีรูปร่างโดยไม่มีขอบมน ตรวจสอบให้แน่ใจว่าได้ตัดแถบเฉพาะที่จุดที่มีหน้าสัมผัสที่อนุญาตให้เกิดขึ้นได้ และอย่าเปลี่ยนทิศทางที่ LED เชื่อมต่อถึงกันซึ่งเรียกว่าการกลับขั้ว แถบที่ฉันได้รับมีลูกศรเพื่อให้แน่ใจว่าสิ่งนี้จะไม่เกิดขึ้น ดังนั้นโปรดตรวจสอบให้แน่ใจว่าลูกศรทั้งหมดชี้ไปในทิศทางเดียวกัน

ฉันทำรูเล็กๆ เพื่อใส่สายเคเบิลเข้าไปที่ด้านนอกของกล่อง ไฟ LED ที่ฉันมีคือไฟ LED ที่สามารถระบุตำแหน่งได้ 3 พิน ดังนั้นฉันจึงมีตัวเชื่อมต่อพลังงาน กราวด์ และข้อมูล ฉันใช้ Digital Pin 3 สำหรับตัวเชื่อมต่อข้อมูล ตรวจสอบให้แน่ใจว่าได้ทดสอบแถบ LED ของคุณเพื่อให้แน่ใจว่าใช้งานได้ก่อนที่จะติดเข้ากับเฟรม และตรวจสอบให้แน่ใจว่าใช้เฉพาะแรงดันไฟฟ้าที่แนะนำสำหรับอันของฉันคือ 5 - 6 V

ขั้นตอนที่ 3: การติดตั้ง IR Sensor และ LCD (อุปกรณ์เสริม)

การติดตั้งเซ็นเซอร์ IR และ LCD (อุปกรณ์เสริม)
การติดตั้งเซ็นเซอร์ IR และ LCD (อุปกรณ์เสริม)
การติดตั้งเซ็นเซอร์ IR และ LCD (อุปกรณ์เสริม)
การติดตั้งเซ็นเซอร์ IR และ LCD (อุปกรณ์เสริม)
การติดตั้งเซ็นเซอร์ IR และ LCD (อุปกรณ์เสริม)
การติดตั้งเซ็นเซอร์ IR และ LCD (อุปกรณ์เสริม)

ฉันเลือกใช้เซ็นเซอร์ IR และรีโมทเพื่อเปลี่ยนเอฟเฟกต์แสงและใช้งาน และจอ LCD เพื่อแสดงให้ผู้ใช้เห็นตัวเลือกที่พวกเขามีสำหรับเอฟเฟกต์

ในการติดตั้ง LCD และเซ็นเซอร์ IR ฉันจะใช้ปืนกาวร้อนแล้วติดไว้ที่ด้านบนของเฟรมและต่อสายทุกอย่างไว้ที่ด้านหลัง แต่ฉันไม่ต้องการให้แก้ไขเพราะฉันอาจต้องถอดออกหลังจากจบโครงการ เสร็จแล้ว

ในการเชื่อมต่อ LCD และตัวรับสัญญาณ IR ฉันใช้ตัวเชื่อมต่อตัวผู้กับตัวเมียซึ่งเสียบเข้ากับ Arduino สำหรับข้อมูลรวมถึงกราวด์และพลังงาน ในการเชื่อมต่อทุกอย่างฉันใช้พิน 12 ที่มีตัวต้านทาน 2 kΩบนพินข้อมูลสำหรับเซ็นเซอร์ IR, Analog Pin A4 สำหรับ SDA ของ LCD และ Analog Pin 5 สำหรับ SCL ของ LCD

ขั้นตอนที่ 4: รหัส

สำหรับโครงการนี้ ฉันใช้ห้องสมุดไม่กี่แห่งที่คุณจะต้องดาวน์โหลดเพื่อใช้ ฉันจะใส่ไว้ที่นี่ จำไว้ว่าฉันใช้ windows ซึ่งอาจมีผลกระทบหากคุณใช้ Mac หรือ Linux

คุณจะต้องเปลี่ยนจำนวนพิกเซลขึ้นอยู่กับจำนวน LED ที่คุณมี ฉันยังสร้างอินเทอร์เฟซ Serial Monitor เพื่อให้คุณสามารถเชื่อมต่อกับอินเทอร์เฟซนั้นได้หากคุณไม่ได้ใช้เซ็นเซอร์ IR

// ห้องสมุด

#include Adafruit_NeoPixel.h> #include #include #include // พินและค่าคงที่ // พินและค่าคงที่const int RECV_PIN = 12; IRrecv irrecv(RECV_PIN); ผลลัพธ์ decode_results; key_value แบบยาวที่ไม่ได้ลงนาม = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel พิกเซล = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // ตัวแปร int IRNumb; int IRNumb2; int รุ้ง = 0; uint32_t rainbowColor = พิกเซล.สี(0, 0, 0); ใส่ถ่าน = 0; ถ่านอินพุต2 = 0; int r; int กรัม; int ข; int breakCondition = 0; การตั้งค่าเป็นโมฆะ () { // กำหนดค่าเริ่มต้นองค์ประกอบที่ไม่จำเป็นต้องทำซ้ำ lcd.begin(16, 2);//กำหนด 16 คอลัมน์และ 2 แถวของจอ LCD lcd.backlight();//เพื่อเปิดไฟพื้นหลัง Serial.begin(9600); พิกเซล.begin(); irrecv.enableIRIn(); Serial.println("ป้อน 0 เพื่อปิดไฟ"); // การเริ่มต้นคำแนะนำ Serial.println("ป้อน 1 เพื่อเปลี่ยนไฟ LED เป็นสีขาว"); Serial.println("ป้อน 2 เพื่อให้ไฟ LED หมุนเวียนไปตามสีต่างๆ"); Serial.println("ป้อน 3 เพื่อปรับแต่งสี LED ด้วยตนเอง"); } วงเป็นโมฆะ () { IRNumb = 10; กรมสรรพากร(); mainOptions(); if (Serial.available () > 0) { // ตรวจสอบว่ามีอักขระหรือไม่ อินพุต = (ถ่าน) Serial.read(); } // เลือกตัวเลือกต่างๆ ถ้า (input == '1' || IRNumb == 1){ rainbowColor = colourChange(255, 255, 255); // สีขาว setAll(สีรุ้ง); // อัปเดตไฟ LED } อย่างอื่นหาก (อินพุต == '0' || IRNumb == 0){ rainbowColor = colourChange(0, 0, 0); // ปิด setAll(สีรุ้ง); // อัปเดตไฟ LED } อื่นหาก (อินพุต == '2' || IRNumb == 2) { breakCondition = 0; r = 0; ก. = 0; ข = 0;

Serial.println("ป้อนอะไรก็ได้ที่ไม่ใช่ 2 เพื่อออกจากเอฟเฟกต์นี้ จากนั้นให้ป้อนตัวเลือกก่อนหน้าสำหรับเอฟเฟกต์ใหม่");

lcd.clear(); //ทำความสะอาดหน้าจอ lcd.setCursor(0, 0); lcd.print("ออกโดยใช้ any-"); lcd.setCursor(0, 1); lcd.print("ชาที่ != 2"); สำหรับ(int i = 0; i = 48 && อินพุต <= 57) || breakCondition == 1 || IRNumb != 2){ // ตรวจสอบว่าเอฟเฟกต์จำเป็นต้องออกจาก rainbowColor = colourChange(0, 0, 0); setAll(สีรุ้ง); เงื่อนไขการแตกหัก = 1; หยุดพัก; } rainbowColor = colourChange (i, 0, 0); setAll(สีรุ้ง); showStrip(); ล่าช้า (100); } for(int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb != 2) { // ตรวจสอบว่าเอฟเฟกต์จำเป็นต้องออกจาก rainbowColor = colourChange(0, 0, 0); setAll(สีรุ้ง); เงื่อนไขการแตกหัก = 1; หยุดพัก; } ก++; rainbowColor = colorChange (i, g, 0); setAll(สีรุ้ง); showStrip(); ล่าช้า (100); } for(int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb != 2){ // ตรวจสอบว่าเอฟเฟกต์จำเป็นต้องออกจาก rainbowColor = colourChange(0, 0, 0); setAll(สีรุ้ง); เงื่อนไขการแตกหัก = 1; หยุดพัก; } r+= 2; rainbowColor = colorChange (r, g, 0); setAll(สีรุ้ง); showStrip(); ล่าช้า (100); } for(int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb != 2) { // ตรวจสอบว่าเอฟเฟกต์จำเป็นต้องออกจาก rainbowColor = colourChange(0, 0, 0); setAll(สีรุ้ง); เงื่อนไขการแตกหัก = 1; หยุดพัก; } r+= 2; ก.+= 5; rainbowColor = colorChange (r, g, b); setAll(สีรุ้ง); showStrip(); ล่าช้า (100); } mainOptions(); } else if (อินพุต == '3' || IRNumb == 3){ r = 0; ก. = 0; ข = 0;

Serial.println("ป้อน n เพื่อออก");

Serial.println("ใช้ w และ s เพื่อเพิ่มหรือลดสีแดง"); Serial.println("ใช้ r และ f เพื่อเพิ่มหรือลดสีเขียว"); Serial.println("ใช้ y และ h เพื่อเพิ่มหรือลดสีน้ำเงิน"); lcd.clear();//ทำความสะอาดหน้าจอ lcd.setCursor(0, 0); lcd.print("ออก:0, 4/7:+/-สีแดง"); lcd.setCursor(0, 1); lcd.print("5/8:เขียว, 6/9:น้ำเงิน");

ในขณะที่ (input2 != 'n' || IRNumb2 != 0){

if (Serial.available() > 0) { // มีอักขระหรือไม่? input2 = (ถ่าน) Serial.read(); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2();

ถ้า (IRNumb2 == 0){

หยุดพัก; } if (input2 == 'w' || IRNumb2 == 4){ r+= 2; rainbowColor = colorChange (r, g, b); setAll(สีรุ้ง); showStrip(); } else if (input2 == 's' || IRNumb2 == 7){ r-= 2; rainbowColor = colorChange (r, g, b); setAll(สีรุ้ง); showStrip(); } else if (อินพุต2 == 'r' || IRNumb2 == 5){ g+= 2; rainbowColor = colorChange (r, g, b); setAll(สีรุ้ง); showStrip(); } else if (อินพุต2 == 'f' || IRNumb2 == 8){ g-= 2; rainbowColor = colorChange (r, g, b); setAll(สีรุ้ง); showStrip(); }

อื่นถ้า (input2 == 'y' || IRNumb2 == 6){

b+= 2; rainbowColor = colorChange (r, g, b); setAll(สีรุ้ง); showStrip(); }

อื่นถ้า (input2 == 'h' || IRNumb2 == 9){

b-= 2; rainbowColor = colorChange (r, g, b); setAll(สีรุ้ง); showStrip(); } } mainOptions(); } setAll(สีรุ้ง); showStrip(); } เป็นโมฆะ showStrip() { pixels.show(); } เป็นโมฆะ setAll (uint32_t color) { สำหรับ (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor (i, color); } } // ป้อนค่า 0 ถึง 255 เพื่อรับค่าสี uint32_t colourChange (int r, int g, int b) { return pixels. Color (r, g, b); } void mainOptions (){ // เลื่อนตัวเลือกเอฟเฟกต์หลัก lcd.clear();// ทำความสะอาดหน้าจอ lcd.setCursor(0, 0); lcd.print("0 สำหรับไฟปิด"); lcd.setCursor(0, 1); lcd.print("1: แสงสีขาว"); ล่าช้า (1000); lcd.clear();//ทำความสะอาดหน้าจอ lcd.setCursor(0, 0); lcd.print("2: ผลสี"); lcd.setCursor(0, 1); lcd.print("3: คู่มือ"); ล่าช้า (1000); } เป็นโมฆะ IRScan (){ if (irrecv.decode(&results)){

ถ้า (results.value == 0XFFFFFFFF)

results.value = key_value; อื่น { //Serial.println (ผลลัพธ์. ค่า HEX); ถ้า (results.value == 0xFF6897 || results.value == 0xC101E57B) { IRNumb = 0; //Serial.println("0"); } อื่น ๆ ถ้า (results.value == 0x9716BE3F || results.value == 0xFF30CF) { IRNumb = 1; //Serial.println("1"); } อื่น ๆ ถ้า (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7){ IRNumb = 2; //Serial.println("2"); } else if (results.value == 0xFF7A85 || results.value == 0x6182021B){ IRNumb = 3; // Serial.println("3"); } else if (results.value == 0x8C22657B || results.value == 0xFF10EF){ IRNumb = 4; //Serial.println("4"); } else if (results.value == 0xFF38C7 || results.value == 0x488F3CBB){ IRNumb = 5; // Serial.println("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5){ IRNumb = 6; // Serial.println("6"); } อื่น ๆ ถ้า (results.value == 0xFF42BD || results.value == 0x32C6FDF7) { IRNumb = 7; //Serial.println("7"); } อื่น ๆ ถ้า (results.value == 0x1BC0157B || results.value ==0xFF4AB5){ IRNumb = 8; //Serial.println("8"); } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B){ IRNumb = 9; // Serial.println("9"); } } key_value = results.value; irrecv.resume(); } } เป็นโมฆะ IRScan2 (){ if (irrecv.decode(&results)){

ถ้า (results.value == 0XFFFFFFFF)

results.value = key_value; อื่น { // Serial.println (ผลลัพธ์. ค่า HEX); ถ้า (results.value == 0xFF6897 || results.value == 0xC101E57B) { IRNumb2 = 0; //Serial.println("0"); } อื่น ๆ ถ้า (results.value == 0x9716BE3F || results.value == 0xFF30CF) { IRNumb2 = 1; //Serial.println("1"); } อื่น ๆ ถ้า (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7){ IRNumb2 = 2; //Serial.println("2"); } else if (results.value == 0xFF7A85 || results.value == 0x6182021B){ IRNumb2 = 3; // Serial.println("3"); } else if (results.value == 0x8C22657B || results.value == 0xFF10EF){ IRNumb2 = 4; //Serial.println("4"); } else if (results.value == 0xFF38C7 || results.value == 0x488F3CBB){ IRNumb2 = 5; // Serial.println("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5){ IRNumb2 = 6; // Serial.println("6"); } อื่น ๆ ถ้า (results.value == 0xFF42BD || results.value == 0x32C6FDF7) { IRNumb2 = 7; //Serial.println("7"); } อื่น ๆ ถ้า (results.value == 0x1BC0157B || results.value ==0xFF4AB5){ IRNumb2 = 8; //Serial.println("8"); } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B){ IRNumb2 = 9; // Serial.println("9"); } } key_value = results.value; irrecv.resume(); } }

ขั้นตอนที่ 5: การติดตั้ง

การติดตั้ง
การติดตั้ง

ในการติดตั้ง Arduino กับเฟรม ฉันแค่ติดมันและเขียงหั่นขนมที่ฉันใช้ที่ด้านหลังของเฟรม และพยายามปิด/ซ่อนสายเคเบิลเพื่อให้ดูดี

แนะนำ: