สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: การติดตั้งกระจกและฟิล์มกระจก
- ขั้นตอนที่ 2: การตั้งค่าแถบ LED
- ขั้นตอนที่ 3: การติดตั้ง IR Sensor และ LCD (อุปกรณ์เสริม)
- ขั้นตอนที่ 4: รหัส
- ขั้นตอนที่ 5: การติดตั้ง
วีดีโอ: กระจก Infinity พร้อม LCD และเซ็นเซอร์ IR: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
โปรเจ็กต์นี้จะแสดงให้คุณเห็นว่าคุณสามารถสร้างกระจกอินฟินิตี้ได้อย่างไร แนวคิดพื้นฐานคือไฟ 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 ที่สามารถระบุตำแหน่งได้ 3 พิน ดังนั้นฉันจึงมีตัวเชื่อมต่อพลังงาน กราวด์ และข้อมูล ฉันใช้ Digital Pin 3 สำหรับตัวเชื่อมต่อข้อมูล ตรวจสอบให้แน่ใจว่าได้ทดสอบแถบ LED ของคุณเพื่อให้แน่ใจว่าใช้งานได้ก่อนที่จะติดเข้ากับเฟรม และตรวจสอบให้แน่ใจว่าใช้เฉพาะแรงดันไฟฟ้าที่แนะนำสำหรับอันของฉันคือ 5 - 6 V
ขั้นตอนที่ 3: การติดตั้ง IR Sensor และ 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 กับเฟรม ฉันแค่ติดมันและเขียงหั่นขนมที่ฉันใช้ที่ด้านหลังของเฟรม และพยายามปิด/ซ่อนสายเคเบิลเพื่อให้ดูดี
แนะนำ:
เคาน์เตอร์ผู้เยี่ยมชมโดยใช้ 8051 และเซ็นเซอร์ IR พร้อม LCD: 3 ขั้นตอน
ตัวนับผู้เยี่ยมชมโดยใช้ 8051 และเซ็นเซอร์ IR พร้อมจอ LCD: เพื่อนที่รัก ฉันได้อธิบายวิธีสร้างตัวนับผู้เยี่ยมชมโดยใช้เซ็นเซอร์ 8051 และเซ็นเซอร์ IR และแสดงบน LCD 8051 เป็นหนึ่งในไมโครคอนโทรลเลอร์ที่ได้รับความนิยมมากที่สุดที่ใช้สำหรับงานอดิเรก การใช้งานเชิงพาณิชย์ทั่วโลก ฉันได้ทำวิ
สถานีตรวจอากาศระยะไกล HC-12 และเซ็นเซอร์ DHT: 9 ขั้นตอน
สถานีตรวจอากาศระยะไกล HC-12 และเซ็นเซอร์ DHT: ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีสร้างสถานีตรวจอากาศระยะไกลระยะไกลโดยใช้เซ็นเซอร์ dht สองตัว โมดูล HC12 และจอแสดงผล LCD I2C ดูวิดีโอ
PWM พร้อม ESP32 - Dimming LED พร้อม PWM บน ESP 32 พร้อม Arduino IDE: 6 ขั้นตอน
PWM พร้อม ESP32 | Dimming LED พร้อม PWM บน ESP 32 พร้อม Arduino IDE: ในคำแนะนำนี้เราจะดูวิธีสร้างสัญญาณ PWM ด้วย ESP32 โดยใช้ Arduino IDE & โดยทั่วไปแล้ว PWM จะใช้เพื่อสร้างเอาต์พุตแอนะล็อกจาก MCU ใดๆ และเอาต์พุตแอนะล็อกนั้นอาจเป็นอะไรก็ได้ระหว่าง 0V ถึง 3.3V (ในกรณีของ esp32) & จาก
กระจก Infinity Warping: 4 ขั้นตอน (พร้อมรูปภาพ)
Warping Infinity Mirror: กระจกอินฟินิตี้เป็นส่วนหนึ่งของงานสร้างของฉันที่กำลังจะมาถึง มีคำอธิบายที่ยอดเยี่ยมมากมายเกี่ยวกับวิธีการสร้างสิ่งเหล่านี้บนไซต์แล้ว และฉันได้ลองดูหลายๆ อย่าง โดยเฉพาะอย่างยิ่ง Ben Finio ที่ยอดเยี่ยมและสนับสนุนเวอร์ชันที่ขับเคลื่อนด้วย Arduino ฮาว
การเปลี่ยนเวลาของวิดีโอ - กระจก E สำหรับการฝึกซ้อมเทนนิส: 4 ขั้นตอน
Video Time Shifting - E-mirror for Tennis Training: ใครไม่ชอบกระจก นอกเหนือจากการชื่นชมความงามแล้ว นักเพาะกาย นักเต้น… ยังใช้เพื่อเสริมทักษะให้สมบูรณ์แบบ เทนนิสเป็นกีฬาที่ต้องอาศัยการประสานงานของร่างกายในการกำหนดเวลาที่แม่นยำ ถ้าสมมุติเราส่องกระจกแล้ว