สารบัญ:

ไฟไฟเบอร์ออปติกในผ้าใบพิมพ์: 5 ขั้นตอน
ไฟไฟเบอร์ออปติกในผ้าใบพิมพ์: 5 ขั้นตอน

วีดีโอ: ไฟไฟเบอร์ออปติกในผ้าใบพิมพ์: 5 ขั้นตอน

วีดีโอ: ไฟไฟเบอร์ออปติกในผ้าใบพิมพ์: 5 ขั้นตอน
วีดีโอ: อบรมการเชื่อมสาย Fiber Optic !!! Splice for Fiber Optic Cable 2024, กรกฎาคม
Anonim
Image
Image
ไฟไฟเบอร์ออปติกพิมพ์ลายแคนวาส
ไฟไฟเบอร์ออปติกพิมพ์ลายแคนวาส

โปรเจ็กต์นี้เพิ่มการหมุนที่ไม่เหมือนใครบนภาพพิมพ์แคนวาสมาตรฐาน ฉันตั้งโปรแกรมใน 4 โหมดแสงที่แตกต่างกัน แต่คุณสามารถเพิ่มได้มากขึ้น โหมดจะเปลี่ยนไปทุกครั้งที่คุณปิดและเปิดใหม่ แทนที่จะมีปุ่มแยกต่างหากเพื่อลดความเสียหายให้กับเฟรม แบตเตอรี่ควรใช้งานได้นานกว่า 50 ชั่วโมง - ฉันไม่แน่ใจจริงๆ แต่ฉันได้ทำโปรเจ็กต์ที่คล้ายกันนี้ให้เพื่อนและใช้ไฟมากกว่า 5 เท่าและใช้งานได้นานกว่า 20 ชั่วโมงสำหรับแบตเตอรี่ชุดเดียว

วัสดุ

  • ภาพพิมพ์แคนวาสที่มีพื้นที่ใช้งานได้ - ฉันสั่งซื้อของฉันจาก https://www.easycanvasprints.com เพราะพวกเขามีราคาที่ดีและเปิดด้านหลัง เฟรมที่หนาขึ้น 1.5 นิ้วนั้นสมบูรณ์แบบและให้พื้นที่ฉันมากในการงอสายไฟเบอร์ออปติก นอกจากนี้ คุณต้องการภาพที่ให้พื้นที่ที่ใช้งานได้ 3" x 8" สำหรับก้อนแบตเตอรี่ ไมโครคอนโทรลเลอร์ และแถบ LED
  • ไฟแถบ LED - ฉันใช้แถบ LED แบบระบุตำแหน่งได้ WS2812 อย่ากลัวไปเลย พวกมันใช้งานง่ายมากกับไลบรารี FastLED หรือ Neopixel! คุณยังสามารถใช้แถบ LED มาตรฐานใดๆ ก็ได้ คุณจะไม่สามารถควบคุมแต่ละส่วนแสงแยกกันได้หากไม่มีการเดินสายเพิ่มเติม
  • ไมโครคอนโทรลเลอร์ - ฉันใช้ Arduino Uno แต่คุณสามารถใช้อะไรก็ได้สำหรับโครงการนี้
  • ชุดแบตเตอรี่ - ฉันสั่งซื้อเครื่องนี้จาก eBay (จากประเทศจีน) และมีชื่อว่า "6 x 1.5V AA 2A CELL Battery Batteries Holder"
  • สายไฟเบอร์ออปติก - สั่งซื้อจากจีนบน eBay อีกครั้ง - "PMMA Plastic Fiber Optic Cable End Grow Led Light DIY Decor" หรือ "PMMA End Glow Fiber Optic Cable for Star Ceiling Light Kit" ฉันใช้ขนาด 1 มม. และ 1.5 มม. ฉันแนะนำให้ใช้ที่เล็กกว่านั้นจริงๆ
  • สวิตช์เปิด/ปิด - "SPDT เปิด/เปิดสวิตช์สลับขนาดเล็ก 2 ตำแหน่ง"
  • คลิปหนีบสายไฟ - ช่วยให้สายไฟเบอร์ออปติกดูเป็นระเบียบเรียบร้อย
  • แผ่นโฟม, สายต่อแกนแข็ง, ท่อหดความร้อน

เครื่องมือ

  • Dremel - ใช้สำหรับวางสวิตช์เปิด/ปิดในกรอบรูป อาจทำได้ด้วยการฝึกซ้อมและเรื่องใหญ่ๆ แต่ฉันไม่แนะนำ
  • หัวแร้ง - ต่อสายไฟเข้ากับแถบ LED
  • ปืนกาวร้อน - แท้จริงทุกขั้นตอนของโครงการนี้
  • เข็มเย็บผ้าขนาดใหญ่ - สำหรับเจาะรูผ่านผ้าใบและแผ่นโฟมสำหรับไฟ

ขั้นตอนที่ 1: แผ่นโฟม ชุดแบตเตอรี่ และสวิตช์เปิด/ปิด

แผ่นโฟม ชุดแบตเตอรี่ และสวิตช์เปิด/ปิด
แผ่นโฟม ชุดแบตเตอรี่ และสวิตช์เปิด/ปิด
แผ่นโฟม ชุดแบตเตอรี่ และสวิตช์เปิด/ปิด
แผ่นโฟม ชุดแบตเตอรี่ และสวิตช์เปิด/ปิด

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

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

กาวร้อนทุกอย่างเข้าที่ ตรวจสอบให้แน่ใจว่าได้ใส่ก้อนแบตเตอรี่ไว้อย่างดีเพราะต้องใช้แรงเล็กน้อยในการใส่/ถอดแบตเตอรี่ และคุณไม่ต้องการให้ที่ใส่แบตเตอรี่ไปทุกที่

ขั้นตอนที่ 2: ไมโครคอนโทรลเลอร์และวงจร

ไมโครคอนโทรลเลอร์และวงจร
ไมโครคอนโทรลเลอร์และวงจร
ไมโครคอนโทรลเลอร์และวงจร
ไมโครคอนโทรลเลอร์และวงจร
ไมโครคอนโทรลเลอร์และวงจร
ไมโครคอนโทรลเลอร์และวงจร

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

เสียบขั้วบวกของชุดแบตเตอรี่เข้ากับ VIN (อินพุตแรงดันไฟฟ้า) ของไมโครคอนโทรลเลอร์ เพื่อให้ใช้ตัวควบคุมแรงดันไฟฟ้าในตัวของคอนโทรลเลอร์เพื่อลดแรงดันไฟฟ้าลงเหลือ 5V ที่ต้องการ หากเราเปิดไฟให้มากขึ้น เราอาจต้องใช้ตัวควบคุมแรงดันไฟฟ้าของเราเอง แต่ UNO ควรจะสามารถจัดการกับไฟ LED ได้ 5 ดวง

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

ขั้นตอนที่ 3: ไฟใยแก้วนำแสง

Image
Image
ไฟใยแก้วนำแสง
ไฟใยแก้วนำแสง
ไฟใยแก้วนำแสง
ไฟใยแก้วนำแสง

หลังจากการลองผิดลองถูก ในที่สุดฉันก็พบวิธีที่ดีในการนำเส้นใยแก้วนำแสงผ่านผืนผ้าใบ

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

ในการเร่งกระบวนการ คุณสามารถจิ้มเส้นใยหลายๆ เส้นเป็นแถวก่อนทำกาวร้อน โดยทั่วไปแล้วควรอยู่ในตำแหน่งของคุณเอง

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

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

ใช้ท่อหดด้วยความร้อนเพื่อเก็บมัดเส้นใยแก้วนำแสงไว้ด้วยกัน

  1. ตัดเกลียวสำหรับมัดให้มีความยาวเท่ากันโดยประมาณ
  2. ใส่ส่วนผ่านท่อหดความร้อน
  3. ใช้ปืนความร้อนหรือหัวแร้งเพื่อทำให้หดตัว หากคุณกำลังใช้หัวแร้ง ปล่อยให้ด้านข้างของเตารีดแตะท่อเบา ๆ แล้วท่อจะหดตัว ไม่ควรละลายท่อเพราะออกแบบให้ร้อนเพียงเล็กน้อย

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

ขั้นตอนที่ 4: การเขียนโปรแกรม

ในการเขียนโปรแกรมนี้ฉันใช้ threelibraries

FastLED - ไลบรารีที่ยอดเยี่ยมสำหรับการควบคุมแถบ LED WS2812 (และแถบ LED ที่สามารถระบุตำแหน่งได้อื่น ๆ อีกมากมาย) -

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

EEPROM - ใช้เพื่ออ่าน/จัดเก็บโหมดปัจจุบันของโครงการ ซึ่งช่วยให้โปรเจ็กต์เพิ่มโหมดสีทุกครั้งที่คุณปิดและเปิดใหม่อีกครั้ง ซึ่งไม่จำเป็นต้องใช้ปุ่มแยกต่างหากในการเปลี่ยนโหมด ไลบรารี EEPROM ได้รับการติดตั้งทุกครั้งที่คุณติดตั้ง Arduino IDE

ฉันยังใช้ภาพสเก็ตช์เพื่อส่องแสงระยิบระยับที่คนอื่นตั้งไว้ โดยจะสุ่มทำให้พิกเซลสว่างขึ้นจากสีพื้นฐานเป็นสีพีคแล้วกลับลงมา https://gist.github.com/kriegsman/88954aae22b03a66… (มันใช้ไลบรารี FastLED ด้วย)

ฉันยังใช้ปลั๊กอิน vMicro สำหรับ Visual Studio ด้วย - นี่เป็น Arduino IDE เวอร์ชันที่ปรับปรุงแล้ว มีฟังก์ชันเติมข้อความอัตโนมัติที่เป็นประโยชน์มากมายและเน้นปัญหาในโค้ดของคุณโดยไม่ต้องคอมไพล์ มีค่าใช้จ่าย 15 ดอลลาร์ แต่คุ้มค่ามากหากคุณจะสร้างโครงการ Arduino มากกว่าหนึ่งโครงการ และจะบังคับให้คุณเรียนรู้เกี่ยวกับ Visual Studio ซึ่งเป็นโปรแกรมที่ทรงพลังอย่างยิ่ง

(ฉันกำลังแนบไฟล์โค้ด.ino ด้วย เพราะโฮสต์ที่สอนได้ของ Github Gist จะทำลายช่องว่างจำนวนมากในไฟล์)

รหัส Arduino ทำงาน 4 โหมดสีบน Arduino UNO สำหรับไฟแถบ LED WS2812B บางตัวโดยใช้ไลบรารี FastLED

#รวม
#รวม
#รวม
//การตั้งค่า FastLED
#defineNUM_LEDS4
#definePIN3//พินข้อมูลสำหรับแถบ LED
ไฟ LED CRGB[NUM_LEDS];
//ตั้งค่ากระพริบตา
#defineBASE_COLORCRGB(2, 2, 2) //สีพื้นหลังพื้นฐาน
#definePEAK_COLORCRGB(255, 255, 255) //กำหนดสีสูงสุดให้กะพริบ
// จำนวนที่จะเพิ่มสีตามแต่ละวงเมื่อสว่างขึ้น:
#defineDELTA_COLOR_UPCRGB(4, 4, 4)
// จำนวนที่จะลดสีตามแต่ละลูปเมื่อหรี่ลง:
#defineDELTA_COLOR_DOWNCRGB(4, 4, 4)
// โอกาสที่แต่ละพิกเซลเริ่มสว่างขึ้น
// 1 หรือ 2 = พิกเซลที่สว่างขึ้นทีละน้อย
// 10 = จำนวนพิกเซลที่สว่างขึ้นในแต่ละครั้ง
#defineCHANCE_OF_TWINKLE2
enum { SteadyDim, GettingBrighter, GettingDimmerAgain };
uint8_t PixelState[NUM_LEDS];
ไบต์รันโหมด;
ไบต์ globalBright = 150;
ไบต์ globalDelay = 20; //ความเร็วหน่วงเวลากระพริบตา
ที่อยู่ไบต์ = 35; //ที่อยู่สำหรับเก็บโหมดการทำงาน
voidsetup()
{
FastLED.addLeds (ไฟ LED, NUM_LEDS);
FastLED.setCorrection (TypicalLEDStrip);
// FastLED.setMaxPowerInVoltsAndMilliamps (5, maxMilliamps);
FastLED.setBrightness(globalBright);
//รับโหมดการทำงาน
runMode = EEPROM.read (ที่อยู่);
//เพิ่มโหมดรัน 1
EEPROM.write (ที่อยู่, โหมดรัน + 1);
}
โมฆะลูป ()
{
สวิตช์ (โหมดรัน)
{
//สีขาวล้วน
case1: fill_solid(leds, NUM_LEDS, CRGB::White);
FastLED.show();
ดีเลย์ฟอร์เอเวอร์();
หยุดพัก;
//กระพริบตาช้าๆ
กรณีที่ 2: FastLED.setBrightness (255);
globalDelay = 10;
TwinkleMapPixels();
หยุดพัก;
//กระพริบตาเร็วๆ
กรณีที่ 3: FastLED.setBrightness (150);
globalDelay = 2;
TwinkleMapPixels();
หยุดพัก;
//รุ้ง
กรณีที่ 4:
RunRainbow();
หยุดพัก;
//ดัชนีอยู่นอกช่วง รีเซ็ตเป็น 2 แล้วเรียกใช้โหมด 1
//เมื่อ Arduino รีสตาร์ท มันจะรันโหมด 2 แต่ตอนนี้รันโหมด 1
ค่าเริ่มต้น:
EEPROM.write (ที่อยู่ 2);
โหมดรัน = 1;
หยุดพัก;
}
}
voidRunRainbow()
{
ไบต์ *c;
uint16_t ผม, เจ;
ในขณะที่ (จริง)
{
สำหรับ (j = 0; j <256; j++) { // 1 รอบของสีทั้งหมดบนล้อ
สำหรับ (i = 0; i < NUM_LEDS; i++) {
c = ล้อ(((i * 256 / NUM_LEDS) + j) & 255);
setPixel(i, *c, *(c + 1), *(c + 2));
}
FastLED.show();
ล่าช้า (globalDelay);
}
}
}
ไบต์ * ล้อ (ไบต์ WheelPos) {
ไบต์คงที่ c[3];
ถ้า (WheelPos <85) {
c[0] = WheelPos * 3;
c [1] = 255 - WheelPos * 3;
ค[2] = 0;
}
Elseif (WheelPos <170) {
WheelPos -= 85;
c[0] = 255 - WheelPos * 3;
ค [1] = 0;
c [2] = WheelPos * 3;
}
อื่น {
WheelPos -= 170;
ค[0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
กลับค;
}
voidTwinkleMapPixels()
{
InitPixelStates();
ในขณะที่ (จริง)
{
สำหรับ (uint16_t i = 0; i < NUM_LEDS; i++) {
ถ้า (PixelState == SteadyDim) {
// พิกเซลนี้ปัจจุบัน: SteadyDim
// เราเลยลองสุ่มมาทำให้มันเริ่มสว่างขึ้น
ถ้า (สุ่ม8() < CHANCE_OF_TWINKLE) {
PixelState = กำลังสว่างขึ้น;
}
}
elseif (PixelState == กำลังสว่างขึ้น) {
// พิกเซลนี้ปัจจุบัน: GettingBrighter
// ดังนั้นถ้าเป็นสีพีค ให้เปลี่ยนเป็นหรี่ไฟอีกครั้ง
ถ้า (ไฟ LED >= PEAK_COLOR) {
PixelState = กำลังDimmerAgain;
}
อื่น {
// ไม่เช่นนั้น ก็แค่ทำให้สว่างขึ้น:
ไฟ LED += DELTA_COLOR_UP;
}
}
อื่นๆ {// หรี่ลงอีกครั้ง
// พิกเซลนี้ปัจจุบัน: GettingDimmerAgain
// ดังนั้นหากกลับเป็นสีฐาน ให้เปลี่ยนเป็นสีสลัวคงที่
ถ้า (ไฟ LED <= BASE_COLOR) {
ไฟ LED = BASE_COLOR; // รีเซ็ตเป็นสีฐานที่แน่นอน เผื่อว่าเรายิงเกิน
PixelState = SteadyDim;
}
อื่น {
// ไม่เช่นนั้น หรี่แสงลงไปเรื่อยๆ:
ไฟ LED -= DELTA_COLOR_DOWN;
}
}
}
FastLED.show();
FastLED.delay (globalDelay);
}
}
voidInitPixelStates()
{
memset(PixelState, sizeof (PixelState), SteadyDim); // เริ่มต้นพิกเซลทั้งหมดเป็น SteadyDim
fill_solid(ไฟ LED, NUM_LEDS, BASE_COLOR);
}
voidDelayForever()
{
ในขณะที่ (จริง)
{
ล่าช้า (100);
LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF);
}
}
voidshowStrip() {
FastLED.show();
}
voidsetPixel (พิกเซล int, ไบต์สีแดง, ไบต์สีเขียว, ไบต์สีน้ำเงิน) {
// FastLED
ไฟ LED[พิกเซล].r = สีแดง;
ไฟ LED[พิกเซล].g = สีเขียว;
ไฟ LED [พิกเซล].b = สีน้ำเงิน;
}

ดู rawFiberOptic_ClemsonPic.ino โฮสต์ด้วย ❤ โดย GitHub

ขั้นตอนที่ 5: ผลิตภัณฑ์ขั้นสุดท้าย

ผลิตภัณฑ์สุดท้าย
ผลิตภัณฑ์สุดท้าย
ผลิตภัณฑ์สุดท้าย
ผลิตภัณฑ์สุดท้าย
ผลิตภัณฑ์สุดท้าย
ผลิตภัณฑ์สุดท้าย

ทาดา! ฉันหวังว่าคำแนะนำนี้จะสร้างแรงบันดาลใจให้คนอื่นทำโครงการที่คล้ายกันของตนเอง ไม่ยากเลยที่จะทำและฉันรู้สึกประหลาดใจที่ยังไม่มีใครทำและเขียนคำแนะนำอย่างละเอียดเกี่ยวกับเรื่องนี้

แนะนำ: