Arduino: รีโมทคอนโทรลและตัวรับสัญญาณอินฟราเรด การควบคุม Arduino ด้วยรีโมทคอนโทรล IR

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



รีโมทคอนโทรลสะดวกมากโดยใช้ปุ่มเกือบเดียวกันบนหน้าจอเพื่อควบคุมทีวีและเครื่องเล่น ข้อแตกต่างประการหนึ่งก็คือ " เอวี"ในโหมดควบคุมทีวีจะเปลี่ยนเป็นปุ่ม" " (หยุด) เมื่อสลับไปยังโหมดควบคุมเครื่องเล่น รูปภาพแสดงสองโหมด ด้านซ้ายคือโหมดควบคุมทีวี ทางด้านขวาคือโหมดควบคุมเครื่องเล่น

ตอนนี้ฉันจะบอกคุณเล็กน้อยเกี่ยวกับการสร้างรีโมตคอนโทรล สำหรับอุปกรณ์ ฉันใช้รีโมทคอนโทรลสำหรับ ERGO TV และรีโมทคอนโทรลสำหรับเครื่องเล่นมีเดีย DUNE HD TV101W

เพื่อรับข้อมูลจากรีโมทที่ฉันใช้ เซ็นเซอร์อินฟราเรดเปิด TSOP1138 (คล้ายกับ TSOP4838) ความถี่ในการทำงาน 38 kHz และเชื่อมต่อกับบอร์ด Arduino ตามแผนภาพ:

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

ในแบบร่างในบรรทัด int RECV_PIN = 11; ระบุหมายเลขพินของเรา 4

หลังจากอัปโหลดภาพร่างแล้ว ให้เปิด "พอร์ตมอนิเตอร์" แล้วกดปุ่มรีโมทคอนโทรลเพื่อดูข้อมูลที่ได้รับ

รูปภาพแสดงตัวอย่างการสแกนปุ่มเปิด/ปิดจากรีโมทคอนโทรลของทีวีและรีโมทคอนโทรลของเครื่องเล่น ตอนนี้เราสร้างตารางสำหรับรหัสปุ่ม

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

ตอนนี้เราตัดการเชื่อมต่อตัวรับสัญญาณอินฟราเรดของเราออกจากบอร์ด Arduino และเชื่อมต่อเข้ากับมัน โมดูลบลูทูธ HC-05 และ LED อินฟราเรดตามแผนภาพในรูปภาพ

หลังจากนั้นเราก็ไปที่ร่างโดยตรง

ร่าง

#รวม IRส่งกลับ; อินท์ y = 1; การตั้งค่าเป็นโมฆะ() ( Serial.begin(9600); ) void loop() ( if (Serial.available() > 0) ( int x = Serial.read(); if (x == 49) ( y = 1; ) if (x == 50) ( y = 2; ) if (y == 1) ( // รหัสปุ่มสำหรับรีโมททีวี if (x == 97) ( irsend.sendNEC(0x807F08F7, 32); ล่าช้า(40 ); ) ถ้า (x == 98) ( irsend.sendNEC(0x807FA857, 32); ล่าช้า(40); ) ถ้า (x == 99) ( irsend.sendNEC(0x807F708F, 32); ล่าช้า(40); ) ถ้า (x == 100) ( irsend.sendNEC(0x807FF00F, 32); ล่าช้า(40); ) ถ้า (x == 101) ( irsend.sendNEC(0x807F30CF, 32); ล่าช้า(40); ) ถ้า (x == 102) ( irsend.sendNEC(0x807FB04F, 32); ล่าช้า(40); ) ถ้า (x == 103) ( irsend.sendNEC(0x807F9867, 32); ล่าช้า(40); ) ถ้า (x == 104) ( irsend .sendNEC(0x807F58A7, 32); ล่าช้า(40); if (x == 105) (irsend.sendNEC(0x807F38C7); ล่าช้า(40); , 32); ( irsend.sendNEC(0x807F48B7, 32); ล่าช้า(40); ) ถ้า (x == 108) ( irsend.sendNEC(0x807FB847, 32); ล่าช้า(40); ถ้า (x == 109) ( irsend.sendNEC( 0x807F6897, 32);


ล่าช้า(40);

) ) ถ้า (y == 2) ( // รหัสของปุ่มควบคุมระยะไกลของเครื่องเล่นสื่อถ้า (x == 97) ( irsend.sendNEC(0xFDC23D, 32); ล่าช้า(40); ) ถ้า (x == 98) ( irsend.sendNEC(0xFDE01F, 32); ล่าช้า (40); if (x == 99) ( irsend.sendNEC(0xFD18E7, 32); ล่าช้า(40); ) if (x == 100) ( irsend.sendNEC( 0xFDE817, 32); ล่าช้า (40); ) ถ้า (x == 101) ( irsend.sendNEC(0xFDA857, 32); ล่าช้า (40); ) ถ้า (x == 102) ( irsend.sendNEC(0xFD6897, 32) ; ล่าช้า (40); ) ถ้า (x == 103) ( irsend.sendNEC(0xFDA857, 32); ล่าช้า(40); ) ถ้า (x == 104) ( irsend.sendNEC(0xFD6897, 32); ล่าช้า(40) ); ) ถ้า (x == 105) ( irsend.sendNEC(0xFDE817, 32); ล่าช้า(40); ) ถ้า (x == 106) ( irsend.sendNEC(0xFD18E7, 32); ล่าช้า(40); ) ถ้า (x == 107) ( irsend.sendNEC(0xFD9867, 32); ล่าช้า(40); ) ถ้า (x == 108) ( irsend.sendNEC(0xFD28D7, 32); ล่าช้า(40); ) ถ้า (x == 109) ( irsend.sendNEC(0xFD20DF, 32); ล่าช้า(40); ) ) ) )
ในแบบร่างคุณจะต้องแก้ไขโค้ดของปุ่ม ได้แก่ ในบรรทัด:

ถ้า (x == 97) ( irsend.sendNEC(0x807F08F7, 32) ล่าช้า(40);
เปลี่ยนค่า 807F08F7 เป็น:

ถ้า (y == 1) ( // รหัสปุ่มสำหรับรีโมทคอนโทรลทีวีถ้า (x == 97) ( irsend.sendNEC(0x12345678, 32); ล่าช้า(40); ) โดยที่ 12345678 คือรหัสสำหรับปุ่มของคุณหลังจากแก้ไขภาพสเก็ตช์โดยใช้โค้ดปุ่มของคุณแล้ว ให้อัปโหลดสเก็ตช์ไปที่

บอร์ดอาร์ดูโน่ พูลท์บนโทรศัพท์

เมื่อเริ่มต้นเราจะมีหน้าจอสีแดง ไอคอนบลูทูธที่มุมขวาล่างซึ่งเป็นสัญญาณว่าเราไม่ได้เชื่อมต่อกับอุปกรณ์ของเรา

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

ตอนนี้เรากลับมาอีกครั้ง หน้าจอหลักและเราสามารถควบคุมทีวีได้แล้ว:

หากต้องการเปลี่ยนเป็นโหมดควบคุมเราต้องกดปุ่มที่มีข้อความกำกับไว้ "ผู้เล่น"- อย่างที่บอกไปแล้วว่าปุ่มของเราที่มีชื่อว่า "AV" จะเปลี่ยนเป็นปุ่ม " ":

หากต้องการตัดการเชื่อมต่อจากอุปกรณ์ของเรา เพียงกดปุ่ม "เปิด/ปิด" ค้างไว้สักครู่

รูปภาพบางส่วนของอุปกรณ์ที่เสร็จแล้วของฉัน

ดูเหมือนว่ามันจะออกมาค่อนข้างดี ฉันกำลังรอความคิดเห็นในบทความ

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

นอกจากการ์ดเสียง (ซึ่งฉันหวังว่าจะอยู่ในคอมพิวเตอร์ของคุณ) เรายังจำเป็นต้องมีตัวรับสัญญาณ IR การประกอบวงจรรับสัญญาณที่มีคุณสมบัติครบถ้วนด้วย TSOP น่าจะถูกต้องมากกว่า แต่เราจะทำอย่างง่ายที่สุดเท่าที่จะทำได้ - เราจะใช้ IR LED ธรรมดาที่สุด (อันเดียวกับที่อยู่ในรีโมทคอนโทรลของคุณ) เป็นตัวรับสัญญาณ IR แน่นอนคุณสามารถใช้โฟโตไดโอด IR ได้ แต่ IR LED จะรับได้ง่ายกว่า ต้องเชื่อมต่อ IR LED เข้ากับอินพุตไมโครโฟนของการ์ดเสียงโดยตรง ในการทำเช่นนี้คุณต้องมีปลั๊ก 3.5 มม. และลวดหุ้มฉนวนหนึ่งชิ้น (ฉันตัดสายด้วยขั้วต่อจากไมโครโฟนตัวเก่าที่ไม่ทำงาน)

LED เชื่อมต่อดังนี้:

เป็นผลให้เราได้รับอุปกรณ์ดังต่อไปนี้:

เสียบปลั๊กเข้ากับอินพุตไมโครโฟน (เช่น สีชมพู- ในการตั้งค่าการ์ดเสียง ให้เลือกไมโครโฟนเป็นอุปกรณ์อินพุต หมุนการควบคุมเกนไปที่สูงสุดแล้วทำเครื่องหมายที่ช่อง กำไรเพิ่มเติม- ในการตรวจสอบให้ชี้รีโมทคอนโทรลไปที่ตัวรับสัญญาณ LED (คุณต้องวางไว้ใกล้กับรีโมทคอนโทรลมากที่สุด) กดปุ่ม - ควรได้ยินเสียงคลิกในลำโพง

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


ตอนนี้เราต้องการโปรแกรมบันทึกเสียง
โปรแกรมใดๆ ก็ตามที่คุณมีจะเหมาะสมกับวัตถุประสงค์เหล่านี้ หากคุณไม่มีโปรแกรมที่ชื่นชอบในการทำงานกับเสียงฉันขอแนะนำโปรแกรมขนาดเล็กและฟรี - Wavosaur (http://www.wavosaur.com/) โปรแกรมทำงานได้โดยไม่ต้องติดตั้งและมี ขนาดเล็ก- ฉันรักมันแค่ไหน :)

โปรแกรมสำหรับทำงานกับเสียง

หลังจากเริ่มโปรแกรมแล้ว ให้เปิดตัวบ่งชี้ระดับ (ไม้บรรทัดทางด้านขวาของหน้าต่าง) และตรวจสอบการตอบสนองต่อสัญญาณรีโมทคอนโทรล ตามค่าเริ่มต้น ทุกอย่างควรใช้งานได้ - ไม้บรรทัดจะลดระดับลงจากสัญญาณที่ได้รับ (หากไม่มีปฏิกิริยาใด ๆ ให้ไปที่การตั้งค่า การกำหนดค่าเสียง/เสียงเข้า- จากนั้นกดไอคอนบันทึก นำรีโมทคอนโทรลเข้าใกล้ LED รับสัญญาณมากที่สุด กดปุ่มรีโมทคอนโทรลค้างไว้สองสามวินาที ปิดการบันทึก - เสร็จแล้ว! ในหน้าต่างเราจะเห็นการสแกนสัญญาณ IR ที่ได้รับ สิ่งที่น่าสนใจคือสัญญาณจะถูกตรวจพบแล้ว - เราจะไม่เห็นความถี่ของคลื่นพาหะ แต่เพียงเท่านั้น สัญญาณที่เป็นประโยชน์- สิ่งนี้เกิดขึ้นเนื่องจากความจุอินพุตของอินพุตไมโครโฟนไม่มีเวลาชาร์จ

สัญญาณที่ได้รับสามารถปรับขนาดตามเวลา แอมพลิจูด และซึ่งสะดวกมาก เมื่อเน้นช่วงใดช่วงหนึ่ง คุณจะเห็นระยะเวลาได้ทันที สัญญาณที่ได้รับสามารถบันทึกได้ (ควรอยู่ในรูปแบบ wav - จะไม่มีการบิดเบือน) หรือส่งออกเป็น MP3, ข้อความ, ไฟล์ไบนารี(สิ่งที่มีประโยชน์!)

ตัวอย่างเช่น, สัญญาณจากรีโมทคอนโทรลทีวีของฉัน (รูปแบบ NEC):

มองเห็นช่วงเวลาทั้งหมดได้จากรูปภาพคุณยังสามารถคำนวณที่อยู่รีโมทคอนโทรลและรหัสคำสั่งของปุ่มได้ - ทุกอย่างชัดเจนและเข้าใจได้

ป.ล.
คำขอใหญ่! หากคุณประกอบเครื่องรับดังกล่าว ให้บันทึกแพ็คเกจของรีโมทคอนโทรลของคุณแล้วส่งมาให้ฉันทางอีเมล (ในแท็บ "เกี่ยวกับโครงการ") ซึ่งจะช่วยได้อย่างมากในการปรับปรุงอัลกอริทึมของตัวรับสัญญาณสากล ในชื่อไฟล์ ให้ระบุว่ารีโมทคอนโทรลมาจากอะไรและผู้ผลิต (เช่น: ทีวี-sony.wav).


ข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับรีโมทคอนโทรล IR!
ฉันเสนอตัวเลือกที่ง่ายที่สุดในการ "สัมผัส" สัญญาณจากรีโมทคอนโทรล IR แต่มีวิธีแก้ไขมากมายที่สามารถทำได้มากกว่านี้! รับสัญญาณ IR, วิเคราะห์, บันทึก, เล่น, ตั้งโปรแกรมรีโมทคอนโทรล, ควบคุมคอมพิวเตอร์... ส่วนนี้จะมีลิงก์ไปยังวิธีแก้ปัญหาดังกล่าว

1.DvzRcEditor
โปรแกรมจะไปก่อน โปรแกรมแก้ไข DvzRc,ที่ฉันทิ้งไป โมบิมีคนสร้างโปรแกรมนี้ขึ้นมา ดีวีซ 2010(น่าเสียดายที่ไม่มีพิกัดสำหรับเขาอาจมีคนรู้ใช่ไหม)


- โปรแกรมสำหรับวิเคราะห์และทำซ้ำสัญญาณ IR
โปรแกรมนี้ช่วยให้คุณสามารถบันทึกและเล่นข้อความ IR โดยใช้อินพุตไมโครโฟนและเอาต์พุตเสียง มีเครื่องมือสำหรับวิเคราะห์ข้อความ IR และสร้างฐานข้อมูลข้อความควบคุมระยะไกล (มีฐานข้อมูลขนาดเล็กสำหรับรีโมทคอนโทรลต่างๆ) ทางออกที่น่าสนใจรองรับการควบคุมระยะไกลของคุณเองที่ทำบน ATtiny2313


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

ทุกอย่างเรียบง่ายและชัดเจน - ฉันชอบมัน!


2. การควบคุมเจ้าเล่ห์
http://slydiman.narod.ru/scr/index.htm
นี่ไม่ใช่แม้แต่โปรแกรม - เป็นทรัพยากรอินเทอร์เน็ตทั้งหมดที่ทุ่มเทให้กับรีโมทคอนโทรล IR ประกอบด้วยจำนวนมาก ข้อมูลที่เป็นประโยชน์, ฮาร์ดแวร์ และ โซลูชั่นซอฟต์แวร์สำหรับทุกโอกาส นี่คือสิ่งที่ผู้เขียนเขียนเกี่ยวกับ SlyControl:
- นี้ โปรแกรมสากลเพื่อควบคุมสิ่งใด ๆ โดยใช้คอมพิวเตอร์

สามารถใช้ทำอะไรได้บ้าง:
— ควบคุมโปรแกรมใด ๆ จากรีโมทคอนโทรล (รีโมทคอนโทรล) จากแป้นพิมพ์มัลติมีเดียโดยใช้ปุ่มหรือจอยสติ๊ก
— การจำลองคีย์บอร์ดและเมาส์จากรีโมทคอนโทรล
— ตัวกำหนดเวลา (ไม่ใช่แค่รันโปรแกรมตามเวลา แต่ยังดำเนินการบางอย่างด้วย)
- ปิดคอมพิวเตอร์ตามเวลาหรือเหตุการณ์
— คุณยังสามารถเปิดไฟในอพาร์ทเมนท์จากรีโมทคอนโทรลได้ เพียงเพิ่มปลั๊กอินที่เหมาะสม 😉

นอกจากนี้ยังมีโปรแกรมเกี่ยวกับทรัพยากร RC Explorer 2.1— ฐานข้อมูลของรีโมทคอนโทรล IR (ฐานข้อมูลมีมากกว่า 200 รายการ)


โปรแกรมช่วยให้คุณ:
— รับสัญญาณจากรีโมทคอนโทรลโดยใช้ การ์ดเสียง, พอร์ต COM, IgorPlug-USB หรือ IgorPlug2
- วิเคราะห์สัญญาณโดยละเอียด - (การมอดูเลต, ลักษณะการกำหนดเวลา, คุณสมบัติการเข้ารหัส, รหัสการทำซ้ำ ฯลฯ ทั้งหมดที่ฉันรู้จักได้รับการรองรับ ในขณะนี้โปรโตคอล โปรแกรมยังสามารถทำงานกับโปรโตคอลที่ไม่รู้จักได้
— แสดงสัญญาณแบบกราฟิกแบบเรียลไทม์และตามข้อมูลจากฐานข้อมูล
— ค้นหารีโมทคอนโทรลที่คล้ายกันในฐานข้อมูล
— สร้างคำสั่งการควบคุมระยะไกลโดยใช้ข้อมูลจากฐานข้อมูลผ่านพอร์ต COM

โดยทั่วไปอย่าลืมเยี่ยมชมแหล่งข้อมูล - มันจะน่าสนใจ

(เข้าชม 20,417 ครั้ง เข้าชม 9 ครั้งในวันนี้)

รีโมทคอนโทรลแบบอินฟราเรดเป็นหนึ่งในสิ่งที่ดีที่สุด วิธีง่ายๆการโต้ตอบกับอุปกรณ์อิเล็กทรอนิกส์ ดังนั้นในเกือบทุกบ้านจึงมีอุปกรณ์ดังกล่าวหลายอย่าง: ทีวี, ศูนย์ดนตรี,เครื่องเล่นวิดีโอ,เครื่องปรับอากาศ แต่การใช้รีโมทคอนโทรลแบบอินฟราเรดที่น่าสนใจที่สุดคือการควบคุมระยะไกลของหุ่นยนต์ จริงๆ แล้ว ในบทนี้ เราจะพยายามใช้วิธีการควบคุมนี้โดยใช้คอนโทรลเลอร์ Arduino Uno ยอดนิยม

1. รีโมทคอนโทรลอินฟราเรด

การสอนหุ่นยนต์ให้เชื่อฟังรีโมทคอนโทรลแบบอินฟราเรด (IR) ต้องใช้อะไรบ้าง ขั้นแรก เราต้องการรีโมทคอนโทรลเอง คุณสามารถใช้รีโมทคอนโทรลของทีวีทั่วไปหรือจะซื้อรีโมทคอนโทรลขนาดเล็กสำหรับวิทยุในรถก็ได้ รีโมทคอนโทรลประเภทนี้มักใช้เพื่อควบคุมหุ่นยนต์

รีโมทคอนโทรลนี้มี 10 ปุ่มดิจิตอลและปุ่ม 11 ปุ่มสำหรับจัดการเพลง: ระดับเสียง ย้อนกลับ เล่น หยุด ฯลฯ เกินพอสำหรับจุดประสงค์ของเรา

2. เซ็นเซอร์อินฟราเรด

ประการที่สอง เพื่อรับสัญญาณจากรีโมทคอนโทรล เราจำเป็นต้องมีเซ็นเซอร์ IR พิเศษ โดยทั่วไป เราสามารถตรวจจับรังสีอินฟราเรดได้ด้วยโฟโตไดโอด/โฟโตทรานซิสเตอร์ทั่วไป แต่เซ็นเซอร์ IR ของเราจะรับรู้สัญญาณอินฟราเรดที่ความถี่ 38 kHz เท่านั้น (บางครั้งอาจ 40 kHz) ซึ่งต่างจากเซนเซอร์ดังกล่าว คุณสมบัตินี้ช่วยให้เซ็นเซอร์สามารถเพิกเฉยต่อสัญญาณรบกวนจากแสงภายนอกจำนวนมากจากหลอดไฟส่องสว่างและดวงอาทิตย์

สำหรับบทช่วยสอนนี้ เราจะใช้เซ็นเซอร์ IR ยอดนิยม VS1838Bซึ่งมีลักษณะดังต่อไปนี้:

  • ความถี่พาหะ: 38 กิโลเฮิร์ตซ์;
  • แรงดันไฟฟ้า: 2.7 - 5.5 V;
  • ปริมาณการใช้กระแสไฟ: 50 µA

สามารถใช้เซนเซอร์อื่นๆ ได้ เช่น TSOP4838, TSOP1736, SFH506

3. การเชื่อมต่อ

เซ็นเซอร์มีสามขา (สามขา) หากมองที่เซ็นเซอร์จากด้านตัวรับสัญญาณ IR ดังแสดงในรูป

  • จากนั้นทางด้านซ้ายจะมีเอาต์พุตไปยังคอนโทรลเลอร์
  • ตรงกลาง - หน้าสัมผัสกำลังไฟฟ้าลบ (กราวด์)
  • และทางด้านขวา - หน้าสัมผัสกำลังไฟบวก (2.7 - 5.5V)

แผนผังการเชื่อมต่อ

ลักษณะเค้าโครง

4. โปรแกรม

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

#include "IRremote.h" IRrecv irrecv(2); // ระบุพินที่เชื่อมต่อผู้รับไว้ ผลลัพธ์ decode_results; การตั้งค่าเป็นโมฆะ() ( Serial.begin(9600); // ตั้งค่าความเร็ว พอร์ตคอม irrecv.enableIRIn(); // เริ่มรับ ) void loop() ( if (irrecv.decode(&results)) ( // ถ้าข้อมูลมาถึง Serial.println(results.value, HEX); // พิมพ์ข้อมูล irrecv.resume(); // ยอมรับทีมต่อไป ) )

โหลดโปรแกรมลงบน Arduino หลังจากนั้นเราพยายามรับคำสั่งจากรีโมทคอนโทรล เปิดมอนิเตอร์พอร์ตอนุกรม (Ctrl+Shift+M) หยิบรีโมทคอนโทรลขึ้นมา แล้วชี้ไปที่เซ็นเซอร์ โดยการกดปุ่มต่างๆ เราจะสังเกตรหัสที่สอดคล้องกับปุ่มเหล่านี้ในหน้าต่างมอนิเตอร์

ปัญหาในการโหลดโปรแกรม

ในบางกรณี เมื่อพยายามโหลดโปรแกรมลงในคอนโทรลเลอร์ อาจมีข้อผิดพลาดปรากฏขึ้น:

TDK2 ไม่ได้ถูกประกาศให้อยู่ในขอบเขตของเขา

หากต้องการแก้ไข เพียงลบสองไฟล์ออกจากโฟลเดอร์ไลบรารี ไปหานักสำรวจกันเถอะ ไปที่โฟลเดอร์ที่ติดตั้งไว้ แอพพลิเคชั่นอาร์ดูโน่ IDE (น่าจะเป็น “C:\Program Files (x86)\Arduino”) จากนั้นไปที่โฟลเดอร์ไลบรารี:

…\Arduino\libraries\RobotIRremote

และลบไฟล์: IRremoteTools.cppและ IRremoteTools.h.จากนั้นเราเริ่มต้นใหม่ อาร์ดูโน่ IDEและอีกครั้งที่เราพยายามโหลดโปรแกรมลงบนคอนโทรลเลอร์

5. ควบคุม LED โดยใช้รีโมทคอนโทรล IR

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

  • FFA857 - เพิ่มระดับเสียง;
  • FFE01F - ลดระดับเสียง

ในฐานะ LED เราใช้ LED ในตัวที่พินหมายเลข 13 ดังนั้นแผนภาพการเชื่อมต่อจะยังคงเหมือนเดิม ดังนั้นโปรแกรม:

#include "IRremote.h" IRrecv irrecv(2); // ระบุพินที่เชื่อมต่อผู้รับไว้ ผลลัพธ์ decode_results; การตั้งค่าเป็นโมฆะ() ( irrecv.enableIRIn(); // เริ่มรับ ) void loop() ( if (irrecv.decode(&results)) ( // ถ้าข้อมูลมาถึงสวิตช์ (results.value) ( ​​​​case 0xFFA857: digitalWrite( 13, สูง); กรณี 0xFFE01F: digitalWrite(13, LOW); break; irrecv.resume();

เราอัปโหลดไปยัง Arduino และทดสอบ คลิก ฉบับ+— ไฟ LED จะสว่างขึ้น คลิก ฉบับที่- ออกไป เมื่อทราบวิธีการทำงานแล้ว คุณจะสามารถควบคุมมอเตอร์หุ่นยนต์หรืออุปกรณ์ไมโครอิเล็กทรอนิกส์แบบโฮมเมดอื่นๆ แทนการใช้ LED ได้!

ในบทนี้เราจะดูการเชื่อมต่อตัวรับสัญญาณ IR กับ Arduino เราจะบอกคุณว่าควรใช้ไลบรารีใดสำหรับตัวรับสัญญาณ IR สาธิตภาพร่างสำหรับทดสอบการทำงานของตัวรับสัญญาณอินฟราเรดจากรีโมทคอนโทรล และวิเคราะห์คำสั่งในภาษา C++ เพื่อรับสัญญาณ ให้เราทราบทันทีว่าเซ็นเซอร์ Arduino IR ไม่เหมาะสำหรับรีโมทคอนโทรลทุกตัว ความถี่ของสัญญาณอาจแตกต่างกัน

อุปกรณ์รับสัญญาณอินฟราเรด หลักการทำงาน

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

หลักการทำงานของตัวรับสัญญาณ IR กำลังประมวลผลสัญญาณจากรีโมทคอนโทรล

ตัวรับสัญญาณ IR บน Arduino สามารถรับและประมวลผลสัญญาณอินฟราเรดในรูปแบบของพัลส์ตามระยะเวลาและความถี่ที่กำหนด ใช้ในการผลิตเซ็นเซอร์สิ่งกีดขวางและเครื่องค้นหาระยะสำหรับ Arduino โดยทั่วไปแล้ว ตัวรับสัญญาณ IR จะมีสามขาและประกอบด้วยองค์ประกอบต่อไปนี้: โฟโตไดโอด PIN, เครื่องขยายเสียง, ตัวกรองแบนด์พาส, เครื่องตรวจจับแอมพลิจูด, บูรณาการตัวกรองและทรานซิสเตอร์เอาท์พุท

ภายใต้อิทธิพลของรังสีอินฟราเรดในโฟโตไดโอดซึ่งมีระหว่าง พีและ nภูมิภาคสร้างขอบเขตเพิ่มเติมของเซมิคอนดักเตอร์ ( ฉัน-ภูมิภาค) กระแสเริ่มไหล สัญญาณจะถูกส่งไปยังเครื่องขยายเสียงและจากนั้นไปที่ตัวกรองแบนด์พาสซึ่งปรับเป็นความถี่คงที่: 30; 33; 36; 38; 40 และ 56 กิโลเฮิรตซ์ และปกป้องเครื่องรับจากการรบกวน การรบกวนอาจเกิดจากเครื่องใช้ในครัวเรือนใดๆ

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

วิธีเชื่อมต่อตัวรับสัญญาณ IR กับ Arduino

ตัวเรือนของเครื่องรับอินฟราเรดมีตัวกรองแสงเพื่อปกป้องอุปกรณ์จากสนามแม่เหล็กไฟฟ้าภายนอก ซึ่งมีรูปร่างพิเศษเพื่อเน้นการแผ่รังสีที่ได้รับไปที่โฟโตไดโอด ในการเชื่อมต่อตัวรับสัญญาณ IR กับ Arduino UNO จะใช้สามขาซึ่งเชื่อมต่อกับ - GND, 5V และ A0 เราขอแนะนำให้ใช้ไฟ 3.3 โวลต์ในการเริ่มต้น เพื่อไม่ให้เซนเซอร์ IR ไหม้ในระหว่างการตั้งค่า

สำหรับบทเรียนนี้ เราจะต้องมีรายละเอียดดังต่อไปนี้:

  • บอร์ด Arduino Uno / Arduino Nano / Arduino Mega;
  • เขียงหั่นขนม;
  • ตัวรับสัญญาณอินฟราเรด;
  • การควบคุมระยะไกล;
  • ตัวต้านทาน LED 1 ตัวและ 220 โอห์ม;
  • สายชาย-ชายและชาย-หญิง

แผนภาพการเชื่อมต่อของตัวรับสัญญาณ IR กับพอร์ตอะนาล็อก Arduino

เชื่อมต่อตัวรับสัญญาณ IR ตามแผนภาพที่แสดงด้านบนและเชื่อมต่อ LED เข้ากับพิน 12 และ 13 ก่อนที่จะดาวน์โหลดโปรแกรม คุณจะต้องติดตั้งไลบรารี IRremote.h หากยังไม่ได้ติดตั้ง ห้องสมุดแห่งนี้ใช้ไม่ได้กับ ห้องสมุดมาตรฐานสิ่งแวดล้อม การเขียนโปรแกรมอาร์ดูโน่ไอดี คุณสามารถดาวน์โหลดไลบรารี IRremote.h และภาพร่างที่เสร็จแล้วในไฟล์เก็บถาวรเดียวได้จาก Google ไดรฟ์ผ่านลิงก์

ร่างสำหรับตัวรับสัญญาณ Arduino IR:

#รวม // เชื่อมต่อไลบรารีสำหรับตัวรับสัญญาณ IR IRrecv irrecv(A0); // ระบุพินที่เชื่อมต่อตัวรับสัญญาณ IRผลลัพธ์ decode_results; การตั้งค่าเป็นโมฆะ () // การตั้งค่าขั้นตอน ( irrecv.enableIRIn (); // เริ่มรับสัญญาณอินฟราเรดพินโหมด(13, เอาท์พุต); // pin 13 จะเป็นเอาต์พุตพินโหมด(12, เอาท์พุต); // pin 12 จะเป็นเอาต์พุต pinMode(A0, อินพุต); // pin A0 จะเป็นอินพุต (อังกฤษ “intput”)อนุกรมเริ่มต้น(9600); // เชื่อมต่อมอนิเตอร์พอร์ต) ถือเป็นโมฆะ () // วนขั้นตอน ( ถ้า (irrecv.decode (&ผลลัพธ์)) // หากข้อมูลมาถึงแล้ว ให้ดำเนินการคำสั่ง(อนุกรม .println(results.value); //ส่งข้อมูลที่ได้รับไปที่พอร์ต // เปิดและปิดไฟ LED ขึ้นอยู่กับสัญญาณที่ได้รับ if (results.value == 16754775) ( digitalWrite (13, HIGH); ) if (results.value == 16769055) ( digitalWrite (13, LOW); ) if (results.value == 16718055) ( digitalWrite (12, สูง ) ถ้า (results.value == 16724175) ( digitalWrite (12, LOW ); ) irrecv.resume (); // รับสัญญาณถัดไปบนตัวรับสัญญาณ IR } }

คำอธิบายสำหรับรหัส:

  1. ไลบรารี IRremote.h มีชุดคำสั่งและช่วยให้คุณทำให้ร่างภาพง่ายขึ้น
  2. คำสั่ง decode_results กำหนดผลลัพธ์ชื่อตัวแปรให้กับสัญญาณที่ได้รับจากรีโมทคอนโทรล

เซ็นเซอร์ IR สามารถใช้ได้กับอุปกรณ์หลายชนิดบนไมโครคอนโทรลเลอร์ Arduino รวมถึงการควบคุมระยะไกลของเซอร์โวไดรฟ์บน Arduino จากตัวรับสัญญาณ IR เมื่อตั้งค่าคุณควรเปิดมอนิเตอร์พอร์ต Arduino IDE และค้นหาสัญญาณที่ส่งโดยปุ่มนี้หรือปุ่มนั้นบนรีโมทคอนโทรล รหัสผลลัพธ์ควรใช้ในร่างหลังจากเครื่องหมายเท่ากับสองเท่าในเงื่อนไข if()

มักจะอ่าน: