สารบัญ:

Starry Sky Led Tie: 9 ขั้นตอน (พร้อมรูปภาพ)
Starry Sky Led Tie: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Starry Sky Led Tie: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Starry Sky Led Tie: 9 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: จ้างงานโอทีเงินเดือน 10 เท่า!! X Bie the ska (กะดึก Ep.6) 2024, กรกฎาคม
Anonim
Image
Image
Starry Sky Led Tie
Starry Sky Led Tie
Starry Sky Led Tie
Starry Sky Led Tie

ไม่นานมานี้ ฉันพบของเล่นเด็กที่มีไฟเบอร์ออปติกที่ร้านขายเงินดอลลาร์ และเริ่มคิดว่าฉันจะทำอะไรกับมันได้บ้าง

ความคิดบ้าๆ อย่างหนึ่งที่ฉันมี คือการผูกมัดกับเอฟเฟกต์ของท้องฟ้าที่เต็มไปด้วยดวงดาว

ฉันยังมีบอร์ด adafruit และแบตเตอรี่ของ arduino pro mini อยู่ ซึ่งน่าจะเหมาะกับโครงการนี้

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

คำแนะนำนี้แสดงให้คุณเห็นว่าฉันสร้างมันขึ้นมาได้อย่างไร

มันทำงานบน Arduino pro mini, ที่ชาร์จ adafruit powerboost 500, emmerich icr 18650nh-sp และ LED สีขาว 5 ดวง รหัสทำให้การเปลี่ยนแปลงความสว่างของ LED แบบสุ่ม (40 วินาทีแรกของวิดีโอมีความเร็ว 3x)

ขั้นตอนที่ 1: แผนผังและฮาร์ดแวร์

แผนผังและฮาร์ดแวร์
แผนผังและฮาร์ดแวร์
แผนผังและฮาร์ดแวร์
แผนผังและฮาร์ดแวร์

ฉันใช้ฮาร์ดแวร์ต่อไปนี้:

- PCB พร้อมไฟ LED สีขาวน้ำแข็งและตัวต้านทาน 220 โอห์ม

- Arduino pro mini (ฉันใช้น็อคออฟ)

- สายชาร์จ Adafruit Powerboost 500

- Emmerich Li-ion accu ICR-18650NH-SP

- ใยแก้วนำแสง (ขนาดต่างๆ)

ขั้นตอนที่ 2: การสร้าง PCB Hosting LED's

ทำให้ PCB Hosting เป็น LED's
ทำให้ PCB Hosting เป็น LED's
ทำให้ PCB Hosting เป็น LED's
ทำให้ PCB Hosting เป็น LED's
ทำให้ PCB Hosting เป็น LED's
ทำให้ PCB Hosting เป็น LED's

ฉันตัดแถบ PCB ออกเพื่อยึด LED และใช้หมุด LED เพื่อบัดกรีกับ PCB หลัก

เชื่อมต่อแคโทด (-) ทั้งหมดเข้ากับ GND และใช้พินครึ่งหนึ่งในการบัดกรีที่ติดอยู่กับ PCB หลัก

เชื่อมต่อแอโนดทั้งหมด (+) เข้ากับตัวต้านทาน และต่อสายเคเบิลเข้ากับ Arduino

LED แต่ละดวงจะต้องเชื่อมต่อกับพอร์ต PWM ใดพอร์ตหนึ่งต่อไปนี้: 3, 5, 6, 9, 10, 11

ฉันทำผิดพลาดมากมายกับโปรเจ็กต์นี้ และลืมตรวจสอบพอร์ต PWM ที่ถูกต้อง ดังนั้นฉันจึงต้องขายต่อในภายหลัง ทดสอบด้วย High/Low ดังนั้นฉันจึงสังเกตเห็นในภายหลังเท่านั้น

ฉันเริ่มต้นด้วย LED 7 ดวง แต่มีพอร์ต PWM เพียง 6 พอร์ตและหนึ่งใน LED ที่ฉันขายต่อเสียชีวิต ฉันเพิ่งเก็บไฟ LED ที่ใช้งานได้ 5 ดวงและไม่ได้ใช้อันที่ 6

ขั้นตอนที่ 3: การทำกล่อง

การทำกล่อง
การทำกล่อง
การทำกล่อง
การทำกล่อง
การทำกล่อง
การทำกล่อง
การทำกล่อง
การทำกล่อง

ฉันใช้ Bosch GRO (เช่น Dremel) และสว่านเพื่อตัดรูปร่างของแบตเตอรี่ ปุ่ม พอร์ต micro-usb ส่วนหัวจาก Arduino และใยแก้วนำแสง (ใช้หน้ากากกันฝุ่น!)

ติดแบตเตอรี่เข้ากับเคสด้วยแถบ 2 แถบ

ใช้สกรูยึดบอร์ด Adafruit และ PCB

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

ขั้นตอนที่ 4: เตรียมเน็คไท

เตรียมเนคไท
เตรียมเนคไท
เตรียมเนคไท
เตรียมเนคไท
เตรียมเนคไท
เตรียมเนคไท

นำตะเข็บออกจากส่วนล่างของเนคไทเพื่อให้พอดีกับแผ่นยาง

เพื่อซ่อนฮาร์ดแวร์และยังสามารถเข้าถึงได้หากจำเป็น ฉันตัดสินใจใช้ซิป

ฉันไม่ค่อยถนัดจักรเย็บผ้า แม่เลยเอาซิปที่หลังเนคไท

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

กล่องและเน็คไทเสร็จแล้ว ได้เวลาติดใยแก้วนำแสงแล้ว!

ขั้นตอนที่ 5: ติดกาวไฟเบอร์ออปติก

กาวไฟเบอร์ออปติก
กาวไฟเบอร์ออปติก
กาวไฟเบอร์ออปติก
กาวไฟเบอร์ออปติก
กาวไฟเบอร์ออปติก
กาวไฟเบอร์ออปติก
กาวไฟเบอร์ออปติก
กาวไฟเบอร์ออปติก

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

อย่าลืมใช้กาวใส! อันที่ฉันใช้ทำให้แห้งช้ามาก และกาวที่แห้งเร็วที่ฉันลองกับ LED ตัวแรกเปลี่ยนเป็นสีขาว ทำให้เส้นใยบางส่วนจาก LED ตัวแรกสว่างน้อยลง

ฉันติดแผ่นยางสีดำขนาดเล็กเพื่อป้องกันแสงรั่วที่ด้านบนและเพื่อแยกหลอด LED

แผ่นหนึ่งป้องกันไม่ให้เคสปิด ดังนั้นฉันจึงเพิ่มแถบยางเพื่อปิดฝา

ขั้นตอนที่ 6: การใส่ไฟเบอร์ออปติกผ่านเน็คไท

การใส่ไฟเบอร์ออปติกผ่านเน็คไท
การใส่ไฟเบอร์ออปติกผ่านเน็คไท
การใส่ไฟเบอร์ออปติกผ่านเน็คไท
การใส่ไฟเบอร์ออปติกผ่านเน็คไท
การใส่ไฟเบอร์ออปติกผ่านเน็คไท
การใส่ไฟเบอร์ออปติกผ่านเน็คไท

เริ่มจากด้านล่าง ฉันเจาะรูด้วยเข็มแล้วสอดเส้นใยเข้าไปทีละชิ้น เส้นใยของ LED แต่ละตัวจะกระจายแบบสุ่มทั่วเนคไท

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

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

ขั้นตอนที่ 7: การติดไฟเบอร์ออปติกกับ Tie

การติดไฟเบอร์ออปติกกับเน็คไท
การติดไฟเบอร์ออปติกกับเน็คไท
การติดไฟเบอร์ออปติกกับเน็คไท
การติดไฟเบอร์ออปติกกับเน็คไท
การติดไฟเบอร์ออปติกกับเน็คไท
การติดไฟเบอร์ออปติกกับเน็คไท
การติดไฟเบอร์ออปติกกับเน็คไท
การติดไฟเบอร์ออปติกกับเน็คไท

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

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

หลังจากที่กาวแห้ง ฉันตัดสายไฟที่ด้านหน้าและตัดแผ่นยางที่อยู่เหนือเส้นลวดด้านบนออกเล็กน้อย ทำให้เนคไทยาวไปหน่อย

รูปถ่ายกับเสื้อเชิ้ตสีขาวเป็นภาพก่อนที่ฉันจะตัดยางชิ้นสุดท้ายออก

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

ใต้รหัสที่ฉันเขียนเพื่อผูกเน็คไท

LED ทั้งหมดมีการตั้งค่า " เฉลี่ย " (จริง ๆ แล้วไม่ใช่ค่าเฉลี่ย แต่เป็นความสว่างระดับกลาง)

ทันทีที่ถึงค่าเฉลี่ยนั้น มันจะตัดสินใจโดยมีโอกาส 3/4 ที่จะปรับความสว่างให้ต่ำลง นอกจากนี้ยังสุ่มตั้งค่าความสว่างขั้นต่ำใหม่ ความสว่างสูงสุด เวลารอความสว่างต่ำสุดและสูงสุด และความเร็วที่เพิ่มขึ้นหรือลดลงทุกรอบ (1-255) จากค่าที่ตั้งไว้ล่วงหน้า 5 ค่า จากนั้นจะทำวงจรจนกว่าจะถึงค่าเฉลี่ยอีกครั้ง มีเพียง 2 LEDs เท่านั้นที่สามารถอยู่ในรอบสูงได้ในเวลาเดียวกัน

ทุกสถานะจะแสดงด้วยค่าจำนวนเต็ม (1-7) ซึ่งกำหนดว่าจะมีค่าเฉลี่ยต่ำ เฉลี่ยต่ำ รอต่ำ อัปเดต ฯลฯ

สำหรับข้อมูลเกี่ยวกับการอัปโหลดโค้ดไปยัง Arduino โปรดดูที่ www.arduino.cc

/* Starry Sky Tie * * นี่คือสคริปต์ที่จะสุ่มหรี่ไฟ LED 5 ดวงจากค่าเฉลี่ยเป็นความสว่างที่ต่ำกว่า * หรือสูงกว่าด้วยการตั้งค่าสุ่มที่ต่ำกว่า สูงขึ้น และเวลา * เพื่อให้ดูเหมือนท้องฟ้าเต็มไปด้วยดวงดาวเมื่อใช้กับไฟเบอร์ออปติก * ในกรณีนี้ สิ่งเหล่านี้จะถูกนำมาใช้เสมอกัน * * โอกาสขึ้น/ลง = 1/4 ขึ้น, 3/4 ลง โดยสูงสุด 2 * ขึ้นไปสูงสุดพร้อมกัน * * ค่าเฉลี่ยยังคงเท่าเดิม * ตัวเลือกต่ำสุด สูงสุด และเวลาจะเปลี่ยนแบบสุ่ม * จาก 5 ตัวเลือกทุกครั้งที่ LED ไปถึงค่าเฉลี่ยอีกครั้ง * * สร้างโดย Billy Jaspers พฤษภาคม 2019 *

/ ประกาศหมุด

int LED01 = 3; int LED02 = 5; int LED03 = 6; int LED04 = 9; int LED05 = 11;

// ตัวแปรเวลา

ปัจจุบันเวลายาวที่ไม่ได้ลงนาม; เวลารอนานที่ไม่ได้ลงนาม[5]; LastRound ยาวที่ไม่ได้ลงนาม;

// ตัวแปร LED

int brightMin [5] = { 10, 10, 10, 10, 10 }; // ความสว่างขั้นต่ำ int brightAvg [5] = { 200, 200, 200, 200, 200 }; // ความสว่างเฉลี่ย int brightMax [5] = { 240, 240, 240, 240, 240 }; // ความสว่างสูงสุด int timeWaitLow[5] = { 1000, 1000, 1000, 1000, 1000 }; // เวลารอ int timeWaitAvg[5] = { 5000, 5000, 5000, 5000, 5000 }; // เวลารอ int timeWaitMax[5] = { 4000, 3000, 3000, 3000, 3000 }; // เวลารอเพิ่มขึ้นทีละขั้น [5] = { 2, 5, 4, 5, 2 }; // เพิ่มความสว่าง int currentBright[5]= { 200, 230, 210, 210, 235 }; // ความสว่างปัจจุบัน

// ความเป็นไปได้ของตัวแปร LED

int brightMinPos[5] = { 5, 20, 40, 5, 20 }; // ความเป็นไปได้ของความสว่างขั้นต่ำ int brightMaxPos [5] = { 240, 245, 230, 225, 245 }; // ความเป็นไปได้ของความสว่างสูงสุด int timeLowPos[5] = { 3000, 5000, 4000, 2000, 1000 }; // เวลารอสำหรับความเป็นไปได้ของความสว่างต่ำ int timeHighPos[5] = { 3000, 1000, 500, 2000, 4000 }; // เวลารอสำหรับความเป็นไปได้ของความสว่างสูง int timeAvgPos[5] = { 3000, 5000, 4000, 7000, 8000 }; // เวลารอสำหรับความเป็นไปได้ของความสว่างโดยเฉลี่ย int incrementPos[5] = { 2, 4, 5, 3, 1 }; // เพิ่มความเป็นไปได้ของความสว่าง

// ตัวแปร

บูลเริ่มต้น = จริง; // จำเป็นต้องเริ่มการตั้งค่าเริ่มต้นหรือไม่?

// ตัวแปรทิศทาง

/* 0 = กำลังรอที่ค่าเฉลี่ย 1 = กำลังไปเฉลี่ยไปต่ำสุด 2 = รอต่ำ 3 = กำลังไปต่ำถึงค่าเฉลี่ย 4 = กำลังรอโดยเฉลี่ยถึงสูงสุด 5 = รอที่ค่าสูงสุด 6 = กำลังขึ้นสูงไปยังค่าเฉลี่ย 7 = กำลังอัปเดตตัวแปร*/ สถานะ intLED[5] = { 0, 0, 0, 0, 0 }; จำนวนเต็ม HighLED = 0; int refreshRate = 50; bool statusWaiting[5] = { เท็จ เท็จ เท็จ เท็จ เท็จ }; // ลีดรออยู่ไหม?

// ตัวแปรสุ่ม

RandomNumber ยาว; // ยาวเพื่อเก็บหมายเลขสุ่มยาว randomNumberTwo; // ลองเก็บเลขสุ่มตัวที่สอง

// เคาน์เตอร์

int ผม = 0; // ตัวนับสำหรับลูปหลัก

การตั้งค่าเป็นโมฆะ () {

Serial.begin (115200); // เริ่มอนุกรม randomSeed(analogRead(A0)); // ตั้งค่าสุ่มเมล็ด

// ประกาศผลลัพธ์

โหมดพิน (LED01, เอาต์พุต); โหมดพิน (LED02, เอาต์พุต); โหมดพิน (LED03, เอาต์พุต); โหมดพิน (LED04, เอาต์พุต); โหมดพิน (LED05, เอาต์พุต); }

// เขียนข้อมูลไปยัง LEDs

เป็นโมฆะ writeToLED () { analogWrite (LED01, currentBright[0]); analogWrite (LED02, ปัจจุบันสว่าง [1]); analogWrite (LED03, ปัจจุบันสว่าง [2]); analogWrite (LED04, ปัจจุบันสดใส[3]); analogWrite (LED05, ปัจจุบันสว่าง [4]); }

// วงหลัก

วงเป็นโมฆะ () { ถ้า (เริ่มต้น) { // การตั้งค่าเริ่มต้น lastRound = millis (); // ตั้งค่า lastRound สำหรับการบูต writeToLED(); // เขียนข้อมูลเริ่มต้นเพื่อเริ่มต้น LED = false; // ปิดการเริ่มต้น } currentTime = millis(); // ตั้งเวลาปัจจุบัน

ถ้า (เวลาปัจจุบัน - รอบสุดท้าย >= อัตราการรีเฟรช){

สำหรับ (i=0;i<5;i++){ if (statusLED == 7){ // -7- กำลังอัปเดต Led randomNumber = random(5); brightMin = brightMinPos[randomNumber]; // ตั้งค่าสุ่มสำหรับความสว่างขั้นต่ำ randomNumber = random(5); brightMax = brightMaxPos[randomNumber]; // ตั้งค่าสุ่มสำหรับความสว่างสูงสุด randomNumber = random(5); timeWaitLow = timeLowPos[randomNumber]; // ตั้งค่าสุ่มสำหรับเวลารอน้อย randomNumber = สุ่ม(5); timeWaitMax = timeHighPos[randomNumber]; // ตั้งค่าสุ่มสำหรับเวลารอสูง randomNumber = สุ่ม(5); timeWaitAvg = timeAvgPos[randomNumber]; // ตั้งค่าสุ่มสำหรับเวลารอเฉลี่ย randomNumber = สุ่ม(5); การเพิ่มขึ้น = incrementPos[randomNumber]; // ตั้งค่าสุ่มสำหรับค่าที่เพิ่มขึ้น randomNumber = random(2); // ตั้งค่าสุ่มสำหรับทิศทาง randomNumberTwo = random(2); // ตั้งค่าสุ่มสำหรับทิศทาง if (randomNumber == 1 && randomNumberTwo == 0 && amountHighLED = brightAvg){ statusLED = 0; // ถ้าอยู่ที่จุดต่ำสุด: ไปที่ Waiting Avg }else{ currentBright = currentBright+increment; // Else: Higher Brightness } }else if (statusLED == 2){ // -2- Waiting Low if (!statusWaiting){ // ถ้าไม่รอ: waitTime = millis(); // ตั้งค่าเวลารอ statusWaiting = true; // เริ่มรอ }else if(statusWaiting && currentTime-waitingTime >= timeWaitLow){ // หากรอ AND timeWaitAvg ผ่านไป: statusWaiting = false; // หยุดรอ statusLED = 3; // ตั้งค่า statusLed เป็น Waiting for update } }else if (statusLED == 1){ // -1- กำลังเฉลี่ยไปที่ Low if (currentBright <= brightMin){ statusLED = 2; // ถ้าจุดต่ำสุด: ไปที่ Waiting Low }else{ currentBright = currentBright-increment; // อื่นๆ: ลดความสว่าง } }else if (statusLED == 6){ // -6- กำลังสูงสุดเป็น Avg if (currentBright = timeWaitMax){ // หากรอ AND timeWaitAvg: statusWaiting = false; // หยุดรอ statusLED = 6; // ตั้งค่า statusLed เป็น Waiting for update } }else if (statusLED == 4){ // -4- กำลังเฉลี่ยไปที่ Max if (currentBright >= brightMax){ statusLED = 5; // ถ้าจุดต่ำสุด: ไปที่ Waiting High }else{ currentBright = currentBright+increment; // Else: Higher Brightness } }else if (statusLED == 0){ // -0- Waiting at Average if (!statusWaiting){ // ถ้าไม่รอ: waitTime = millis(); // ตั้งค่าเวลารอ statusWaiting = true; // เริ่มรอ }else if(statusWaiting && currentTime-waitingTime >= timeWaitAvg){ // หากรอ AND timeWaitAvg ผ่านไป: statusWaiting = false; // หยุดรอ statusLED = 7; // ตั้งค่า statusLed เป็น Waiting for update } } } i=0; LastRound = มิลลิวินาที (); // กำหนดเมื่อรอบที่แล้วเสร็จ writeToLED(); // เขียนข้อมูลทั้งหมดไปยัง LED } }

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

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

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

แนะนำ: