สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: สร้างวงจร
- ขั้นตอนที่ 2: การเดินสายไฟและการติดตั้ง
- ขั้นตอนที่ 3: รหัส
- ขั้นตอนที่ 4: ผลลัพธ์
วีดีโอ: DIY Givi V56 ชุดไฟเลี้ยวรถจักรยานยนต์พร้อมสัญญาณในตัว: 4 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
ในฐานะที่เป็นนักขี่มอเตอร์ไซค์ ฉันคุ้นเคยกับการถูกปฏิบัติเหมือนไม่มีใครอยู่บนท้องถนน สิ่งหนึ่งที่ฉันมักจะเพิ่มให้กับจักรยานยนต์ของฉันคือกล่องท้ายรถซึ่งมักจะมีไฟในตัว ฉันเพิ่งอัปเกรดเป็นจักรยานยนต์ใหม่และซื้อกล่อง Givi V56 Monokey เนื่องจากมีพื้นที่สำหรับสิ่งของมากมาย กล่องนี้มีจุดสำหรับชุดไฟโรงงานซึ่งประกอบด้วยแถบ LED สองแถบสำหรับแต่ละด้าน ปัญหาคือชุดนี้ราคาประมาณ 70 เหรียญและเบรคเท่านั้น มีชุดอุปกรณ์หลังการขายที่อาจทำสิ่งที่คล้ายกันและอาจติดตั้งได้ง่ายกว่าเล็กน้อย แต่ราคาของคุณสูงถึง $150 เนื่องจากเป็นคนมีไหวพริบและมองหาข้ออ้างในการลองใช้แถบ LED ที่สามารถระบุตำแหน่งได้ ฉันจึงตัดสินใจสร้างระบบแบบบูรณาการที่ไม่เพียงแต่จะมีไฟเบรกเท่านั้น แต่ยังมีไฟส่องสว่าง (เปิดทุกครั้งที่เคลื่อนที่) สัญญาณไฟเลี้ยว และไฟฉุกเฉิน ฉันยังเพิ่มลำดับการเริ่มต้นอีกด้วย…. เพราะฉันทำได้ โปรดทราบว่าการดำเนินการนี้ต้องใช้ความพยายามอย่างมาก แม้ว่าฉันจะมีหลายสิ่งที่ต้องคิด แม้จะทำงาน แต่ฉันค่อนข้างพอใจกับสิ่งที่เกิดขึ้น หวังว่านี่จะเป็นประโยชน์กับคนอื่น
การทำงานพื้นฐานของระบบนี้คือ Arduino unit จะมองหาสัญญาณที่ขา: ไฟเบรก ไฟเลี้ยวซ้าย และไฟเลี้ยวขวา เพื่ออ่านสัญญาณ 12 โวลต์จากมอเตอร์ไซค์ ฉันใช้ออปโตโซเลเตอร์เพื่อแปลงสัญญาณ 12V เป็นสัญญาณ 5V ที่ Arduino สามารถอ่านได้ จากนั้นโค้ดจะรอหนึ่งในสัญญาณเหล่านี้ จากนั้นจึงส่งออกคำสั่งไปยังแถบ LED โดยใช้ไลบรารี FastLED นั่นคือพื้นฐาน ตอนนี้เพื่อดูรายละเอียด
เสบียง
สิ่งเหล่านี้เป็นสิ่งที่ฉันใช้เพราะส่วนใหญ่ฉันมีมันนอนอยู่รอบ ๆ เห็นได้ชัดว่าสามารถแลกเปลี่ยนได้ตามต้องการ:
- Arduino - ฉันใช้นาโนเพื่อพิจารณาขนาด แต่คุณสามารถใช้อะไรก็ได้ที่คุณรู้สึก ตราบใดที่คุณมีหมุดห้าตัวให้ใช้
- ตัวควบคุม 5V - ฉันใช้ L7805CV ที่มีความสามารถ 1.5 แอมป์ โปรเจ็กต์นี้จะใช้แอมป์ 0.72 แอมป์สำหรับไฟ LED บวกกับพลังงานสำหรับนาโน ดังนั้น 1.5 จึงใช้งานได้ดีสำหรับโปรเจ็กต์นี้
- ตัวเก็บประจุ - คุณจะต้องใช้ 0.33 uF และ 0.1 uF เพื่อให้ตัวควบคุมแรงดันไฟฟ้าทำงานได้อย่างถูกต้อง
- 3x optoisolators - เพื่อแปลงสัญญาณจาก 12V เป็น 5V ฉันใช้ประเภท PC817X ซึ่งมีเพียงสี่พินเท่านั้นที่เราต้องการ
- ตัวต้านทาน - คุณจะต้องมีสองประเภท สามประเภทแต่ละประเภท อย่างแรกต้องเพียงพอที่จะลดกระแสผ่าน optoisolator IR LED คุณจะต้องมีอย่างน้อย 600 โอห์ม แต่ 700 จะเป็นความคิดที่ดีกว่าในการจัดการกับการเปลี่ยนแปลงแรงดันไฟฟ้าในรถจักรยานยนต์ อีกอันหนึ่งต้องอยู่ระหว่าง 10k ถึง 20k เพื่อรับสัญญาณด่วนที่อีกด้านหนึ่งของออปโตไอโซเลเตอร์
- บอร์ดต้นแบบ - ฉันมีบางอันที่เล็กพอที่จะใส่ในกล่องโปรเจ็กต์ขนาดเล็กที่มีการตัดแต่งเล็กน้อย
- Project box - ใหญ่พอที่จะใส่ส่วนประกอบได้ แต่เล็กพอที่จะใส่ได้ง่าย
- ไวร์ - ฉันใช้สายอีเทอร์เน็ต Cat 6 เพราะฉันใช้สายอีเทอร์เน็ตจำนวนมาก มีสายไฟแปดเส้นที่มีรหัสสีทั้งหมดซึ่งช่วยในการเชื่อมต่อที่แตกต่างกันทั้งหมดและเป็นมาตรวัดที่ใหญ่พอที่จะรองรับการจับฉลากในปัจจุบัน
- ปลั๊ก - ทุกที่ที่คุณต้องการให้ระบบถอดออกได้ง่าย ฉันใช้ปลั๊กกันน้ำเพื่อให้สามารถถอดกล่องด้านบนออกได้และเพื่อรับมือกับฝนหรือน้ำที่โดน ฉันยังต้องการปลั๊กขนาดเล็กกว่าสำหรับแถบ LED ดังนั้นฉันจึงไม่ต้องเจาะรูขนาดใหญ่
- ที่ติดซิปและแถบติดซิปเพื่อยึดทุกอย่างเข้าที่
- หดห่อเพื่อจัดระเบียบการเชื่อมต่อ
ขั้นตอนที่ 1: สร้างวงจร
แน่นอน ถ้าคุณติดตามงานสร้างของฉัน คุณไม่จำเป็นต้องผ่านการทดสอบมากมายที่ฉันทำ สิ่งแรกที่ฉันทำคือตรวจสอบให้แน่ใจว่าโค้ดของฉันทำงาน และฉันสามารถรับสัญญาณจากออปโตไอโซเลเตอร์ได้อย่างถูกต้อง รวมทั้งควบคุมแถบ LED ได้อย่างเหมาะสม ใช้เวลาสักครู่ในการค้นหาวิธีที่ดีที่สุดในการต่อหมุดสัญญาณเข้ากับตัวแยก แต่จากการลองผิดลองถูก ฉันพบการวางแนวที่ถูกต้อง ฉันเพิ่งใช้บอร์ดต้นแบบมาตรฐานเนื่องจากฉันเพิ่งสร้างบอร์ดขึ้นมาเพียงอันเดียว และการหารูปแบบการติดตามจะใช้เวลามากกว่าที่ควรจะเป็น ส่วนบนของแผงวงจรดูดี แต่ด้านล่างดูเลอะเทอะเล็กน้อย แต่อย่างน้อยก็ใช้งานได้
การออกแบบพื้นฐานเริ่มต้นด้วยการป้อนพลังงาน 12V จากแหล่งสวิตช์ (สายไฟที่ต่อเมื่อเปิดมอเตอร์ไซค์เท่านั้น) แผนภาพการเดินสายสามารถช่วยในการค้นหาสายนี้ได้จริงๆ สิ่งนี้ถูกป้อนเข้าด้านหนึ่งของตัวควบคุมแรงดันไฟฟ้า ตัวเก็บประจุ 0.33 uF ผูกอินพุตนี้กับกราวด์บนตัวควบคุมแรงดันไฟฟ้าซึ่งจะดึงกลับคืนสู่พื้นบนรถจักรยานยนต์ เอาต์พุตของตัวควบคุมแรงดันไฟฟ้าจะมีตัวเก็บประจุ 0.1uF ผูกติดกับกราวด์ ตัวเก็บประจุเหล่านี้ช่วยให้แรงดันไฟฟ้าออกจากตัวควบคุมได้อย่างราบรื่น หากคุณไม่พบพวกมันในรูปของแผงวงจร แสดงว่าอยู่ใต้ตัวควบคุมแรงดันไฟฟ้า จากที่นั่น สาย 5V ไปที่ Vin บน Arduino ไปยังพินพลังงานที่จะป้อนแถบ LED และสองด้านต้นทางของออปโตโซเลเตอร์ที่จะป้อนเข้าสู่พิน Arduino โดยให้สัญญาณ 5V ที่จำเป็น
สำหรับออปโตโซเลเตอร์นั้นมีสองด้าน: ด้านหนึ่งมีไฟ LED IR และอีกด้านหนึ่งมีทรานซิสเตอร์และเครื่องตรวจจับอินฟราเรด เราต้องการใช้ด้าน IR LED เพื่อวัดสัญญาณ 12V เนื่องจาก LED มีแรงดันไปข้างหน้า 1.2V เราจึงต้องมีตัวต้านทานจำกัดกระแสเป็นอนุกรม 12V - 1.2V = 10.8V และเพื่อให้ LED ทำงานที่ 18 mA (ฉันชอบทำงานน้อยกว่า 20 mA ด้วยเหตุผลตลอดอายุการใช้งาน) คุณจะต้องใช้ตัวต้านทาน R = 10.8V/0.018A = 600 ohm แรงดันไฟในรถยนต์ก็มีแนวโน้มที่จะวิ่งสูงขึ้นเช่นกัน โดยอาจสูงถึง 14V ดังนั้นจึงควรวางแผนสำหรับสิ่งนั้น ซึ่งอยู่ที่ประมาณ 710 โอห์ม แม้ว่า 700 จะสมเหตุสมผลมากกว่า เอาต์พุตสำหรับด้าน LED จะดึงกลับสู่กราวด์ สำหรับด้านเอาต์พุตของออปโตโซเลเตอร์ อินพุตจะใช้สัญญาณ 5V จากตัวควบคุม จากนั้นเอาต์พุตจะเชื่อมต่อกับตัวต้านทานอื่นก่อนจะลงกราวด์ ตัวต้านทานนี้ต้องอยู่ที่ประมาณ 10k - 20k ohm อย่างน้อยนั่นคือสิ่งที่แผ่นข้อมูลของฉันแสดง สิ่งนี้จะให้การวัดสัญญาณที่รวดเร็วเนื่องจากเราไม่ได้จัดการกับสภาพแวดล้อมที่มีเสียงดัง เอาต์พุตไปยังพิน Arduino จะหลุดออกมาระหว่างตัวต้านทานและเอาต์พุตของออปโตไอโซเลเตอร์ ดังนั้นเมื่อสัญญาณถูกปิดพินจะต่ำและเมื่อสัญญาณอยู่บนพินจะสูง
ไฟแถบ LED มีสายไฟสามเส้นที่เกี่ยวข้องกัน: กำลังไฟฟ้า กราวด์ และข้อมูล กำลังไฟต้องเป็น 5V โปรเจ็กต์นี้ใช้ไฟ LED ทั้งหมด 12 ดวง (แม้ว่าฉันจะมี LEDS มากกว่าบนแถบนี้ แต่ฉันใช้ LED ทุกอันที่สามเท่านั้น) และแต่ละอันจะใช้ 60mA เมื่อใช้แสงสีขาวที่ความสว่างเต็มที่ ซึ่งให้รวม 720 mA เราอยู่ในกำลังขับของตัวควบคุมแรงดันไฟฟ้าได้ดี ดังนั้นเราจึงทำได้ดี เพียงตรวจสอบให้แน่ใจว่าลวดมีขนาดใหญ่พอที่จะรองรับพลังงานได้ ฉันใช้สายอีเธอร์เน็ต Cat 6 ขนาด 24 เกจ สายอีเทอร์เน็ตเป็นสิ่งที่ฉันเคยใช้มาก่อนและมีสายรหัสสี 8 เส้น จึงใช้ได้ดีสำหรับโครงการนี้ สายไฟเพียงเส้นเดียวที่ต้องไปที่กล่องบนสุดคือกำลังและกราวด์ (ซึ่งทั้งสองถูกแยกระหว่างแถบ) และสายข้อมูลสองเส้น (หนึ่งเส้นสำหรับแต่ละแถบ)
สายไฟที่เหลือเชื่อมต่อกับพินบน Arduino และป้อนพลังงาน หมุดที่ใช้สำหรับโครงการนี้มีดังต่อไปนี้:
- Vin - เชื่อมต่อกับ 5V
- Gnd - เชื่อมต่อกับกราวด์
- Pin2 - เชื่อมต่อกับสายข้อมูลแถบด้านซ้าย
- Pin3 - เชื่อมต่อกับสายข้อมูลแถบขวา
- Pin4 - เชื่อมต่อกับสัญญาณเบรคจาก optoisolator
- Pin5 - เชื่อมต่อกับสัญญาณไฟเลี้ยวซ้ายจาก optoisolator
- Pin6 - เชื่อมต่อกับสัญญาณไฟเลี้ยวขวาจาก optoisolator
ขั้นตอนที่ 2: การเดินสายไฟและการติดตั้ง
เมื่อสร้างวงจรแล้ว ก็ถึงเวลาที่จะต่อสายนี้เข้าที่ การใช้แผนผังสายไฟสำหรับจักรยานยนต์ของคุณ คุณจะต้องค้นหาสิ่งต่อไปนี้:
- แหล่งจ่ายไฟสลับ
- พื้น
- สัญญาณเบรคเข้า
- ไฟเลี้ยวซ้ายเข้า
- สัญญาณไฟเลี้ยวขวาเข้า
สำหรับฉัน มีปลั๊กตัวเดียวที่มีสิ่งเหล่านี้ทั้งหมด ดังนั้นฉันจึงใช้มัน ด้วยเวลาเพียงพอ ฉันอาจพบรูปแบบปลั๊กเดียวกันและเพิ่งสร้างโมดูลปลั๊กอิน แต่ฉันไม่ได้ทำ ดังนั้นฉันจึงถอดฉนวนออกในสถานที่ต่างๆ และบัดกรีลวดใหม่เข้าไป ฉันใช้ปลั๊กกับการเชื่อมต่อแบบประกบเหล่านี้เพื่อที่ฉันจะได้เอาส่วนที่เหลือออกหากจำเป็นในอนาคต จากนั้นฉันวาง Arduino ซึ่งขณะนี้อยู่ในกล่องโครงการที่ปิดสนิท ใต้ที่นั่งที่ฉันติดไว้ จากนั้นสายเคเบิลเอาต์พุตจะวิ่งไปตามโครงชั้นวางไปยังปลั๊กแบบกันน้ำ จากนั้นจึงเข้าไปในกล่องและวิ่งไปตามด้านหลังไปยังฝาที่แยกออกสำหรับแต่ละด้าน สายไฟวิ่งไปตามด้านในของฝาจนถึงจุดที่เชื่อมต่อกับไฟ LED ลวดช่วยในการติดตั้งโดยใช้สายรัดซิปที่ยึดติดกับสายรัดซิปเกรดกลางแจ้งพร้อมแผ่นรองกาว คุณสามารถหาสิ่งเหล่านี้ได้ในส่วนการติดตั้งสายเคเบิลที่ร้านปรับปรุงบ้าน
ฉันใช้ปลั๊ก JST ขนาดเล็กสองตัวบนแถบ LED เพราะฉันต้องการปลั๊กที่มีขนาดเล็กพอที่จะเจาะผ่านรูที่มีเส้นผ่านศูนย์กลางต่ำสุดได้ และเนื่องจากฉันต้องการให้แน่ใจว่ามีลวดเพียงพอที่จะรองรับความต้องการในปัจจุบัน อีกครั้ง มันอาจจะเกินความจำเป็นและฉันไม่มีปลั๊กเล็กๆ ที่มีสายไฟสามเส้นให้สะดวก รูในกล่องสำหรับสายไฟแถบไฟที่จะลอดผ่านถูกปิดผนึกไว้เพื่อกันน้ำออก สำหรับการวางตำแหน่งแถบ LED เนื่องจากมีระยะห่างไม่ตรงกันเล็กน้อย (ระยะห่างระหว่างรูในตัวสะท้อนแสงและ LED ต่างกันประมาณ 1 - 1.5 มม.) ฉันจัดตำแหน่งแถบนั้นเพื่อแยกความแตกต่างระหว่าง LED และ หลุมให้ได้มากที่สุด จากนั้นฉันก็ใช้กาวร้อนติดเข้าที่และเคลือบหลุมร่องฟันเพื่อผนึกพื้นที่ให้แน่น แถบ LED นั้นกันน้ำได้ ดังนั้นไม่มีปัญหาหากเปียกน้ำ แม้ว่าจะดูเหมือนต้องติดตั้งจำนวนมาก แต่สิ่งนี้ทำให้ระบบสามารถถอดออกได้ง่ายขึ้นในอนาคตหรือจำเป็นต้องเปลี่ยนชิ้นส่วนเพราะอาจเกิดขึ้นได้
ขั้นตอนที่ 3: รหัส
ซอร์สโค้ดของฉันควรอยู่ที่จุดเริ่มต้นของคำแนะนำนี้ ฉันมักจะแสดงความคิดเห็นโค้ดอย่างหนักเพื่อให้เข้าใจได้ง่ายขึ้นในภายหลัง ข้อจำกัดความรับผิดชอบ: ฉันไม่ใช่นักเขียนโค้ดมืออาชีพ โค้ดนี้เขียนขึ้นด้วยวิธีที่ง่ายกว่าก่อนและมีการปรับปรุงบางอย่าง แต่ฉันรู้ว่าโค้ดนี้สามารถปรับปรุงให้ดีขึ้นได้ ฉันยังใช้ฟังก์ชัน delay() จำนวนมากสำหรับเวลาซึ่งไม่เหมาะ อย่างไรก็ตาม สัญญาณที่หน่วยได้รับนั้นไม่ใช่สัญญาณที่รวดเร็วในการเปรียบเทียบ ดังนั้นฉันจึงยังคงรู้สึกว่าสมควรที่จะเก็บไว้ใช้บางอย่างเช่น millis() ฉันยังเป็นพ่อและสามีที่มีงานยุ่งมาก ดังนั้นการใช้เวลาปรับปรุงบางสิ่งที่ท้ายที่สุดแล้วจะไม่เปลี่ยนหน้าที่การงานจึงไม่อยู่ในอันดับต้นๆ
สำหรับโปรเจ็กต์นี้ จำเป็นต้องมีเพียงหนึ่งไลบรารีซึ่งเป็นไลบรารี FastLED มีรหัสทั้งหมดสำหรับควบคุมแถบ LED ชนิด WS2811/WS2812B จากตรงนั้น ฉันจะพูดถึงฟังก์ชันพื้นฐานที่จะใช้งาน
ประการแรกนอกเหนือจากคำจำกัดความมาตรฐานคือการประกาศแถบสองแถบของคุณ คุณจะใช้รหัสต่อไปนี้สำหรับแต่ละแถบ:
FastLED.addLeds(ไฟ LED[0], NUM_LEDS);
รหัสบรรทัดนี้ตั้งค่า Pin 2 กำหนดแถบนี้เป็นแถบ 0 โดยมีจำนวน LED ที่กำหนดโดยค่าคงที่ NUM_LEDS ซึ่งในกรณีของฉันถูกตั้งค่าเป็น 16 ในการกำหนดแถบที่สอง 2 จะกลายเป็น 3 (สำหรับ pin3) และ แถบจะติดป้ายแถบ 1
บรรทัดถัดไปที่จะมีความสำคัญคือการกำหนดสี
ไฟ LED[0][1] = Color_high CRGB(r, g, b);
โค้ดบรรทัดนี้ใช้ในรูปลักษณ์ที่แตกต่างกัน (ส่วนใหญ่ใช้ค่าคงที่) โดยพื้นฐานแล้ว รหัสนี้จะส่งค่าไปยังช่องสัญญาณ LED แต่ละช่อง (แดง เขียว น้ำเงิน) ที่กำหนดความสว่างแต่ละช่อง ค่าความสว่างสามารถกำหนดได้ด้วยตัวเลข 0 - 255 โดยการเปลี่ยนระดับความสว่างสำหรับแต่ละช่องสัญญาณ คุณสามารถกำหนดสีต่างๆ ได้ สำหรับโครงการนี้ ฉันต้องการสีขาวเพื่อให้แสงสว่างมากที่สุด ดังนั้นการเปลี่ยนแปลงเพียงอย่างเดียวที่ฉันทำคือตั้งระดับความสว่างให้เท่ากันในทั้งสามช่องสัญญาณ
รหัสชุดถัดไปใช้สำหรับให้แสงแต่ละดวงแยกกัน โปรดทราบว่าสำหรับแต่ละแถบ LED แต่ละดวงมีที่อยู่ที่เริ่มต้นที่ 0 สำหรับแถบที่ใกล้กับการเชื่อมต่อสายข้อมูลมากที่สุดจนถึงจำนวน LED สูงสุดที่คุณมี ลบ 1 ตัวอย่าง เหล่านี้คือแถบ LED 16 แถบ ดังนั้นค่าสูงสุดคือ 16 - 1 = 15. สาเหตุเป็นเพราะ LED ตัวแรกเป็น 0
for (int i = NUM_LEDS-1; i > -1; i = i - 3) {// สิ่งนี้จะเปลี่ยนไฟสำหรับ LED ดวงที่สามทุกดวงที่ไปจากอันสุดท้ายไปเป็นอันดับแรก ไฟ LED[0] = Color_low; // ตั้งค่าแถบ 0 สี LED เป็นสีที่เลือก ไฟ LED[1] = Color_low; // ตั้งค่าแถบ 1 LED สีเป็นสีที่เลือก FastLED.show(); // แสดงชุดสี ไฟ LED[0] = CRGB::Black; // ปิด set color ใน prep สำหรับสีถัดไป ไฟ LED[1] = CRGB::Black; ล่าช้า (150); } FastLED.show(); // แสดงชุดสี
วิธีการทำงานของรหัสนี้คือตัวแปร (i) ถูกใช้ภายใน for loop เป็นที่อยู่ LED ซึ่งจะถูกอ้างอิงถึงจำนวนเต็มของ LED (NUM_LEDS) เหตุผลก็คือฉันต้องการให้ไฟเริ่มที่ปลายแถบมากกว่าจุดเริ่มต้น การตั้งค่าจะส่งออกไปยังทั้งสองแถบ (leds[0] และ leds[1]) จากนั้นจะออกคำสั่งให้แสดงการเปลี่ยนแปลง หลังจากนั้นไฟนี้จะดับลง (CRGB::Black) และไฟดวงถัดไปจะสว่างขึ้น การอ้างอิง Black เป็นสีเฉพาะในไลบรารี FastLED ดังนั้นฉันจึงไม่ต้องออก 0, 0, 0 สำหรับแต่ละช่อง แม้ว่าพวกเขาจะทำในสิ่งเดียวกัน For loop เลื่อน 3 LEDs ต่อครั้ง (i = i-3) เนื่องจากฉันใช้ LED อื่น ๆ เท่านั้น ในตอนท้ายของลูปนี้ ลำดับแสงจะเปลี่ยนจาก LED หนึ่งไปยังอีก LED ถัดไปโดยมีเพียงไฟเดียวต่อแถบ ซึ่งคล้ายกับเอฟเฟกต์ Knight Rider หากคุณต้องการให้แสงแต่ละดวงสว่างขึ้นเพื่อให้แถบสร้าง คุณเพียงแค่ลบเส้นที่ปิดไฟ LED ซึ่งเกิดขึ้นในโค้ดชุดถัดไปในโปรแกรม
for (int i = 0; i < dim; i ++) {// หรี่ไฟอย่างรวดเร็วจนถึงระดับแสงที่กำลังทำงาน rt = rt + 1; gt = gt + 1; bt = bt + 1; for (int i = 9; i < NUM_LEDS; i = i +3) {// ซึ่งจะทำให้ไฟสามดวงสุดท้ายสว่างขึ้นสำหรับไฟแสดงตำแหน่ง ไฟ LED[0] = CRGB(rt, gt, bt); // ตั้งค่าแถบ 0 สี LED เป็นสีที่เลือก ไฟ LED[1] = CRGB(rt, gt, bt); // ตั้งค่าแถบ 1 LED สีเป็นสีที่เลือก } FastLED.show(); ล่าช้า(3); }
ตัวอย่างสุดท้ายของโค้ดที่ฉันใช้สำหรับ LED คือเฟดลูป ที่นี่ ฉันใช้ช่องชั่วคราวสำหรับความสว่างสำหรับแต่ละช่องสัญญาณ (rt, gt, bt) และเพิ่มทีละ 1 โดยมีการหน่วงเวลาระหว่างการแสดงแต่ละรายการเพื่อให้ได้รูปลักษณ์ที่ฉันต้องการ โปรดทราบด้วยว่ารหัสนี้เปลี่ยนไฟ LED สามดวงสุดท้ายเท่านั้นเนื่องจากไฟ LED ทำงานจางลง ดังนั้นฉันจึงเริ่มต้นที่ 9 แทนที่จะเป็น 0
โค้ด LED ที่เหลือเป็นการทำซ้ำเหล่านี้ อย่างอื่นเน้นไปที่การหาสัญญาณบนสายไฟสามสายที่ต่างกัน พื้นที่ Loop() ของรหัสจะมองหาไฟเบรก ซึ่งจะกะพริบหนึ่งครั้งก่อนที่จะติดค้าง (สามารถปรับได้หากต้องการ) หรือมองหาสัญญาณไฟเลี้ยว สำหรับรหัสนี้ เนื่องจากฉันไม่สามารถสรุปได้ว่าไฟเลี้ยวซ้ายและขวาจะเปิดขึ้นพร้อมกันสำหรับอันตราย ฉันให้รหัสค้นหาอย่างใดอย่างหนึ่งก่อน จากนั้นหลังจากหน่วงเวลาเล็กน้อย ฉันจะตรวจสอบว่าทั้งคู่เปิดอยู่หรือไม่ ไฟฉุกเฉินเปิดอยู่ ส่วนที่ยุ่งยากอย่างหนึ่งที่ฉันมีคือสัญญาณไฟเลี้ยวเพราะไฟจะดับไปชั่วขณะหนึ่ง ฉันจะบอกความแตกต่างระหว่างสัญญาณที่ยังคงเปิดอยู่แต่ในช่วงปิดและสัญญาณยกเลิกได้อย่างไร สิ่งที่ฉันพบคือการใช้ลูปการหน่วงเวลาซึ่งตั้งค่าให้ดำเนินต่อไปนานกว่าการหน่วงเวลาระหว่างสัญญาณกะพริบ หากสัญญาณไฟเลี้ยวยังเปิดอยู่ การวนรอบสัญญาณจะดำเนินต่อไป ถ้าสัญญาณไม่กลับมาเมื่อการหน่วงเวลาสิ้นสุดลง มันจะกลับไปที่จุดเริ่มต้นของลูป () ในการปรับความยาวของการหน่วงเวลา ให้เปลี่ยนตัวเลขสำหรับแสงคงที่ การจำการหน่วงเวลาสำหรับทุกๆ 1 ในแสง หน่วงเวลาการเปลี่ยนแปลงการหน่วงเวลา 100ms
ในขณะที่ (digitalRead (leftTurn) == LOW) { สำหรับ (int i = 0; i < lightDelay; i ++) { leftTurnCheck (); ถ้า (digitalRead (leftTurn) == สูง) { leftTurnLight (); } ล่าช้า (100); } for (int i = 0; i < NUM_LEDS; i = i +3) { // สิ่งนี้จะเปลี่ยนไฟสำหรับ LED ดวงที่สามทุกดวงที่ไปจากอันสุดท้ายไปเป็นอันดับแรก ไฟ LED[0] = CRGB(0, 0, 0); // ตั้งค่าแถบ 0 สี LED เป็นสีที่เลือก } for (int i = 9; i < NUM_LEDS; i = i +3) { // สิ่งนี้จะตั้งค่าไฟวิ่งซึ่งใช้เฉพาะสามอันสุดท้ายเท่านั้น ไฟ LED[0] = Color_low; // ตั้งค่าแถบ 0 สี LED เป็นสีที่เลือก } FastLED.show(); // การตั้งค่าเอาต์พุตกลับมา; // เมื่อไฟเลี้ยวไม่ติดแล้ว ให้กลับไปวนซ้ำ }
หวังว่าส่วนที่เหลือของรหัสจะอธิบายตนเองได้ เป็นเพียงชุดตรวจสอบและปฏิบัติตามสัญญาณซ้ำๆ
ขั้นตอนที่ 4: ผลลัพธ์
ส่วนที่น่าทึ่งก็คือระบบนี้ใช้งานได้ในครั้งแรกที่ฉันต่อสายเข้ากับจักรยานยนต์ พูดตามตรงฉันทดสอบมันอย่างหนักบนม้านั่งก่อนหน้านี้ แต่ฉันยังคงคาดว่าจะมีปัญหาหรือการปรับเปลี่ยน ปรากฎว่าฉันไม่จำเป็นต้องทำการปรับเปลี่ยนใดๆ กับโค้ดและการเชื่อมต่อ ดังที่คุณเห็นในวิดีโอ ระบบจะดำเนินการตามลำดับการเริ่มต้นระบบ (ซึ่งคุณไม่จำเป็นต้องมี) จากนั้นจึงตั้งค่าเริ่มต้นเป็นไฟแสดงการทำงาน หลังจากนั้นจะมองหาเบรก ซึ่งในกรณีนี้ ไฟ LED ทั้งหมดจะสว่างเต็มที่และกะพริบหนึ่งครั้งก่อนที่จะเปิดทิ้งไว้จนกว่าเบรกจะปล่อย เมื่อใช้สัญญาณไฟเลี้ยว ฉันสร้างเอฟเฟกต์การเลื่อนสำหรับด้านที่มีไฟเลี้ยว และอีกด้านหนึ่งจะเป็นไฟวิ่งหรือไฟเบรกหากเปิดอยู่ ไฟแสดงอันตรายจะกะพริบทันเวลากับไฟดวงอื่นๆ
หวังว่าไฟเพิ่มเติมเหล่านี้จะทำให้คนอื่นมองเห็นฉันมากขึ้น อย่างน้อยที่สุด เป็นส่วนเสริมที่ดีที่จะทำให้กล่องของฉันโดดเด่นกว่ากล่องอื่นๆ ในขณะที่ให้ประโยชน์ใช้สอย ฉันหวังว่าโครงการนี้จะเป็นประโยชน์กับคนอื่นเช่นกัน แม้ว่าพวกเขาจะไม่ได้ทำงานกับไฟกล่องท้ายรถมอเตอร์ไซค์ก็ตาม ขอบคุณ!
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
เลนส์มาโคร DIY พร้อม AF (แตกต่างจากเลนส์มาโคร DIY อื่นๆ ทั้งหมด): 4 ขั้นตอน (พร้อมรูปภาพ)
เลนส์มาโคร DIY พร้อม AF (แตกต่างจากเลนส์มาโคร DIY อื่นๆ ทั้งหมด): ฉันเคยเห็นคนจำนวนมากทำเลนส์มาโครด้วยเลนส์คิทมาตรฐาน (ปกติคือ 18-55 มม.) ส่วนใหญ่เป็นเลนส์ที่ติดกล้องไปด้านหลังหรือถอดองค์ประกอบด้านหน้าออก มีข้อเสียสำหรับทั้งสองตัวเลือกนี้ สำหรับติดเลนส์
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-