สาย USB/IR ที่ช่วยเปิดเครื่องเสียงหรือระบบ Home Theater ของคุณอัตโนมัติหลังจากที่เปิดทีวี
พี่อยากให้แอมป์ Marantz PM6006 เปิดเองอัตโนมัติทุกครั้งที่ทีวี Samsung ถูกเปิด ไม่ว่าจะด้วยรีโมต IR ปกติหรือผ่านฟีเจอร์ (WOL) Wake on LAN
เมื่อทีวีถูกเปิด พอร์ต USB ของทีวีจะจ่ายไฟ 5V ให้ชิป ATtiny85 แล้วชิปก็จะส่งสัญญาณ IR แบบ RAW RC5 ออกไป เพื่อสั่งเปิดแอมป์ Marantz
เนื่องจากเครื่องเสียงเปิดโหมดประหยัดพลังงานไว้ มันจะเข้าสแตนด์บายอัตโนมัติเมื่อไม่พบสัญญาณอินพุต (ตอนทีวีปิด) ส่วนการควบคุมเสียงก็ใช้รีโมตอินฟราเรดของ Samsung ผ่านฟีเจอร์ Universal Remote ได้ปกติ
พูดง่ายๆ โปรเจกต์นี้คือการเพิ่มฟีเจอร์ที่ระบบขาดไป นั่นก็คือ การเปิดเครื่องอัตโนมัติ
ภาพรวมโปรเจกต์
"Zero-User-Intervention Audio Bridge" เป็นโซลูชัน Home Automation แบบเจ๋งๆ ที่ช่วยให้เครื่องเสียงระดับสูงทำงานประสานกับ Smart TV ได้อย่างลงตัว ปัญหาคลาสสิกของคนรักเสียงคือ "ต้องกดรีโมตตัวที่สอง" ตอนทีวีเปิด (ไม่ว่าจะผ่าน WoL หรือรีโมต) แต่แอมป์ยังนอนหลับสบายอยู่ โปรเจกต์นี้แก้ปัญหาด้วยการดัดแปลง สาย USB และฝัง ไมโครคอนโทรลเลอร์ ATtiny85 ลงไป โดยมันจะตรวจจับเมื่อพอร์ต USB ของทีวีมีไฟเลี้ยง แล้วส่ง คำสั่ง Infrared (IR) "เปิดเครื่อง" ที่บันทึกไว้ล่วงหน้าไปยังเครื่องเสียงทันที เรียกได้ว่าเป็นคลาสเรียนฮาร์ดแวร์แฮ็กกิ้งแบบมินิมอลและการออกแบบเฟิร์มแวร์ที่เน้นประสิทธิภาพสุดๆ
ลึกลงไปในรายละเอียดทางเทคนิค
- จุดเด่นของ ATtiny85: แม้โปรเจกต์จะใช้ Arduino UNO ในการพัฒนาและโปรแกรม แต่ในขั้นตอนสุดท้ายเราใช้ ATtiny85 ตัวนี้เป็นฮีโร่หลัก ไมโครคอนโทรลเลอร์ 8 ขานี้เหมาะสุดๆ สำหรับงานออโตเมชัน "Single-Task" เพราะตัวเล็กกะทัดรัดและกินไฟน้อยมาก โดยใช้การตั้งค่า "Arduino as ISP" ทำให้ UNO ทำหน้าที่เป็นสะพานสำหรับอัปโหลดเฟิร์มแวร์ที่เราออกแบบเองลงไปในหน่วยความจำภายในของ ATtiny
- การจับสัญญาณ IR แบบ RAW: ไลบรารี IR ทั่วไปมักจะใช้การกับอุปกรณ์เสียงระดับสูงที่ใช้โปรโตคอลเฉพาะหรือบิตเรทสูง (เช่น RC5 รูปแบบซับซ้อนหรือรุ่นที่ Marantz ใช้) โปรเจกต์นี้เลยบายพาสการถอดรหัสโปรโตคอลด้วยการจับ ช่วงเวลาพัลส์แบบ RAW แทน โดยใช้ ตัวรับสัญญาณ TSOP31238 มาวัดระยะเวลาไมโครวินาทีที่แม่นยำของสถานะ "เปิด" และ "ปิด" ของแสง IR แล้วเก็บไว้ในอาร์เรย์จำนวนเต็ม (
unsigned int irSignal[]) วิธีนี้รับประกันได้ว่าสัญญาณที่ส่งออกไปจะเหมือนกับของรีโมตเดิม 100% - เฟิร์มแวร์แบบ Trigger-to-Action: ตรรกะทั้งหมดอยู่ที่ฟังก์ชัน
setup()เพราะ ATtiny ได้ไฟเลี้ยง 5V โดยตรงจากพอร์ต USB ของทีวี ไมโครคอนโทรลเลอร์จะ "บูต" ทันทีที่ทีวีเปิด เฟิร์มแวร์จะยิงสัญญาณ IR ออกไปสองครั้งทันที (เพื่อให้แน่ใจว่าเครื่องเสียงจะรับสัญญาณได้ในช่วงที่มันกำลังเปิดตัว) จากนั้นก็จะเข้าสู่สถานะพักเฉยๆ แนวทาง "one-shot" แบบนี้ไม่ต้องดูแลรักษาและไม่ใช้พลังงานจากแบตเตอรี่เลย - การดัดแปลงฮาร์ดแวร์ & การแตะสาย USB: โปรเจกต์นี้ต้องแกะสาย USB แบบ passive อย่างระมัดระวังเพื่อเข้าถึงสายด้านใน สายสีแดง (+5V) และสายสีดำ/ขาว (GND) เป็นแหล่งจ่ายไฟ ส่วนสายข้อมูลด้านในจะถูกดัดแปลงหน้าที่เพื่อส่งสัญญาณ IR ที่ถูกมอดูเลตแล้วไปยัง LED ตัวส่งสัญญาณซึ่งอยู่ที่ปลายอีกด้านของสาย
วิศวะ & ระบบซินเนอร์จี้
- วงจรออโต้ครบเครื่อง: โปรเจคนี้ทำให้วงจรออโตเมชันสมบูรณ์แบบโดยไม่ต้องพึ่งพาฮับ Smart Home ซับซ้อน ทีวีจ่ายไฟให้สาย สายจ่ายไฟให้แอมป์ Marantz และฟีเจอร์ "Auto Standby" ในตัวของแอมป์ Marantz จะจัดการปิดเครื่องให้เองเมื่อสัญญาณจากทีวีหายไป
- ติดตั้งแบบไม่บุกรุก: ตัวส่งสัญญาณ IR เล็กพอที่จะซ่อนไว้ในช่องว่างระหว่างแผงหน้าปัดกับตัวเครื่องของรีซีฟเวอร์ได้ รักษาความสวยงามของระบบ Hi-Fi ระดับพรีเมียมไว้ได้ครบ
- ป้องกันวงจร: ใส่ ตัวต้านทาน 100 โอห์ม แบบอนุกรมกับ IR LED เพื่อจำกัดกระแสไฟ ปกป้องขา I/O ของ ATtiny85 ในขณะที่ยังให้กำลังแสงเพียงพอสำหรับการส่งสัญญาณ 36kHz หรือ 38kHz ที่เสถียร
- ความเข้ากันได้กว้าง: แม้จะสาธิตด้วยแอมป์ Marantz แต่ตรรกะนี้สามารถนำไปใช้กับอุปกรณ์ที่ควบคุมด้วย IR ได้ทุกชนิด (โปรเจคเตอร์, เครื่องปรับอากาศ, หรือระบบสเตอริโอรุ่นเก่า) ทำให้มันเป็น "Power Syncer" สากลเลยทีเดียว
1. มาทำสายกันเถอะ
ปลอกฉนวนสายออกมาประมาณ 2 ซม. ในตัวอย่างนี้ใช้สาย USB 3.0 A to B แต่สาย USB-A อะไรก็ได้หมดครับ
เลือกใช้สาย 4 เส้นนี้:
- สายสีดำกับสีขาวจะเป็นกราวด์ (GND)
- สายสีแดงคือ +5V
- สายสีเขียวสำหรับส่งพัลส์ IR ไปให้ไดโอดจาก ATtiny85

1.1 ฉนวนสายที่ไม่ได้ใช้ และบัดกรีซ็อกเก็ตชิปลงบนสาย

บัดกรีสายตามแผนภาพง่ายๆ ที่ใช้สีเป็นรหัสนี้:

1.2 ปลอกปลายอีกข้างของสายเพื่อเตรียมบัดกรีตัวต้านทานและ IR LED

1.3 บัดกรีตัวต้านทานและ LED

1.4 ฮาร์ดแวร์ที่เสร็จแล้ว

2 หยิบ RAW IR code จากรีโมทเดิมมา
- ต่อไดโอดรับสัญญาณ IR เข้ากับบอร์ด Arduino UNO

- อัพโหลดสเก็ตช์ตัวอย่าง IRreceiveDump.ino จากโฟลเดอร์ examples/IRreceiveDump/ ของไลบรารี IRremote ลง Arduino UNO
- กดปุ่ม Power บนรีโมท IR ของอุปกรณ์เดิมเพื่อจับ RAW IR code แล้วเซฟเก็บไว้ในไฟล์ข้อความเพื่อใช้ในโค้ดต่อไป
2.1 เตรียม UNO และ ATtiny ตามที่อธิบายในวิดีโอ
ทำตามวิดีโอ YouTube สุดเจ๋งนี้เลย:
คำเตือน! ถ้าทำการเบิร์นบูตโหลดผิดพลาด ชิปของคุณอาจพังใช้การไม่ได้เลยนะ ระวังๆ
สรุปสิ่งที่ต้องทำ:
- อัพโหลดสเก็ตช์ "Arduino as ISP" ลง UNO เพื่อให้มันกลายเป็นโปรแกรมเมอร์ ISP
2.2 อัพโหลดโค้ดลง ATtiny 85 แล้วก็ลุยได้เลย!
#include <IRremote.h>
IRsend IrSender;
void setup() {
int khz = 36;
unsigned int irSignal[] = {900, 900, 850, 900, 850, 900, 1750, 900, 850, 950, 850, 900, 850, 900, 850, 900, 900, 1750, 850, 950, 1700, 950, 850};
IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz);
delay(1000);
IrSender.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz);
}
void loop() {
}
โค้ด Raw ในวงเล็บ {} นี่คือสำหรับเปิดเครื่องขยายเสียง Marantz PM6006 นะจ๊ะ น้องสามารถเอาโค้ดจากขั้นตอนที่ 2 มาแทนที่ได้เลย
2.3 วาง LED IR ไว้ใกล้ๆ กับตัวรับสัญญาณ แล้วก็เสียบ USB เข้า TV
รุ่นนี้มันมีช่องว่างเล็กๆ ใต้หน้ากากด้านหน้า เลยให้สัญญาณ IR ผ่านเข้าไปได้
