รีโมทคอนโทรลสากลสำหรับ Arduino การส่งข้อมูลในช่วงอินฟราเรดโดยใช้ Arduino การเชื่อมต่อตัวรับสัญญาณอินฟราเรดกับ Arduino

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



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

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

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

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

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

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

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

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

ตอนนี้เราตัดการเชื่อมต่อตัวรับสัญญาณอินฟราเรดของเราออกจากบอร์ด Arduino และเชื่อมต่อโมดูล Bluetooth 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 ); ) if (x == 98) ( irsend.sendNEC(0x807FA857, 32); ล่าช้า(40); ) if (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(0x807FD827, 32); ล่าช้า(40); ) if (x == 106) ( irsend.sendNEC(0x807F38C7) , 32); ล่าช้า(40); ) ถ้า (x == 107) ( 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); ) ถ้า (x == 99) ( irsend.sendNEC(0xFD18E7, 32); ล่าช้า(40); ) ถ้า (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 คือรหัสสำหรับปุ่มของคุณ

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

เราเปิดบลูทูธในโทรศัพท์ ค้นหาอุปกรณ์ของเรา สร้างคู่ จากนั้นจึงเปิดแอปพลิเคชัน พูลท์บนโทรศัพท์

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

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

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

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

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

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

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

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

  • แสงอินฟราเรดที่มองไม่เห็นจาก IR LED กระทบกับโมดูลตัวรับ Trima IR ซึ่งจะถูกแปลงเป็นพัลส์ไฟฟ้าแบบดีมอดูเลต
  • ไลบรารี iarduino_IR อ่านและถอดรหัสพัลส์จากตัวรับ IR อย่างต่อเนื่อง (โดยใช้ตัวจับเวลาฮาร์ดแวร์ Arduino ตัวที่สอง)
  • ในโค้ดลูป เราจะตรวจสอบข้อมูลที่ถอดรหัสโดยไลบรารีกับข้อมูลที่กำหนดให้กับอุปกรณ์ (หลอดไฟ) และหากตรงกัน เราจะเปลี่ยนสถานะ (“1”/“0”) ที่อินพุตของโมดูล Trema Solid State รีเลย์จึงเปิดหรือปิดอุปกรณ์ (หลอดไฟ)
  • อุปกรณ์จะมีประโยชน์หากคุณกำหนดปุ่มที่ไม่ได้ใช้บนรีโมทคอนโทรลโทรทัศน์ (เช่น ปุ่มเทเลเท็กซ์แบบสี) เพื่อควบคุมแสงสว่างในห้อง

    แทนที่จะใช้หลอดไส้ คุณสามารถเชื่อมต่ออุปกรณ์เครือข่าย ~ 220 V ใดๆ ที่มีการสิ้นเปลืองกระแสไฟสูงสุด 2 A

    เราจะต้อง:

    • รีโมทคอนโทรล IR x 1 ชิ้น (รีโมทคอนโทรล IR ของทีวีจะทำได้)
    • อุปกรณ์ (โคมไฟ) ที่เราจะควบคุม x 3 ชิ้น

    ในการดำเนินโครงการเราจำเป็นต้องติดตั้งไลบรารี:

    • Library iarduino_IR สำหรับการทำงานกับตัวรับส่งสัญญาณ IR
      สำคัญ: ห้องสมุดใช้ตัวจับเวลาฮาร์ดแวร์ตัวที่สอง
      อย่าส่งสัญญาณ PWM ไปที่ 3 หรือ 11 OUTPUT!

    คุณสามารถดูวิธีติดตั้งไลบรารี่ได้ที่หน้า Wiki - การติดตั้งไลบรารีใน Arduino IDE

    วิดีโอ:

    แผนภาพการเชื่อมต่อ:

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

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

    อัลกอริธึมการทำงาน:

    • เมื่อเริ่มต้นแบบร่างจะกำหนดรหัสปุ่มรีโมท IR ให้กับโซลิดสเตตรีเลย์แต่ละตัวตามลำดับ ขั้นแรกไฟ LED จะกะพริบและวงจรของโซลิดสเตตรีเลย์จะปิดซึ่งเอาต์พุตจะถูกระบุก่อน หากคุณกดปุ่มใดๆ บนรีโมทคอนโทรล IR รหัสสำหรับปุ่มนั้นจะถูกกำหนดให้กับรีเลย์นั้น และรีเลย์ตัวถัดไปจะเริ่มกะพริบ ไปเรื่อยๆ จนกว่ารีเลย์ทั้งหมดจะได้รับการกำหนดปุ่มบนรีโมทคอนโทรล IR
    • หลังจากได้รับการแต่งตั้งแล้วฟังก์ชั่นปุ่ม, รีเลย์ทั้งหมดปิดอยู่ หากคุณกดปุ่มควบคุมระยะไกล IR รีเลย์ที่กำหนดรหัสของปุ่มนี้จะเปิดขึ้น หากคุณกดปุ่มที่ระบุอีกครั้งรีเลย์จะปิด อุปกรณ์จะไม่ตอบสนองต่อการกดปุ่มที่ไม่ได้กำหนดรหัสให้กับรีเลย์ใดๆ
    • ถ้าหากคุณไม่ต้องการกำหนดโค้ดปุ่มทุกครั้งที่สตาร์ท ให้ระบุอย่างชัดเจนเมื่อประกาศอาร์เรย์ varRelay และลบลูป for และ while ออกจากโค้ดการตั้งค่า
    • ค้นหารหัสสำหรับแต่ละปุ่มคุณสามารถเขียนบรรทัดต่อไปนี้: if(IR.check())(Serial.println(IR.data);)

    รหัสโปรแกรม:

    #รวม // เชื่อมต่อไลบรารีเพื่อทำงานกับตัวรับสัญญาณ IR iarduino_IR_RX IR(A5); // ประกาศวัตถุ IR สำหรับการทำงานกับตัวรับสัญญาณ IR (ระบุพินใด ๆ ที่เชื่อมต่อตัวรับสัญญาณ IR) const uint8_t pinRelay = (A1,A2,A3); // ประกาศอาร์เรย์ที่ระบุจำนวนพินใด ๆ (ดิจิทัลหรือแอนะล็อก) ที่โซลิดสเตตรีเลย์เชื่อมต่ออยู่ const uint8_t allRelay = sizeof(pinRelay); // ประกาศค่าคงที่โดยส่งผ่านจำนวนองค์ประกอบในอาร์เรย์ pinRelay (จำนวนรีเลย์) uint32_t varRelay; // ประกาศอาร์เรย์ด้วยรหัส (คำสั่ง) ของตัวรับ IR รวมถึงรีเลย์ bool modRelay; // ประกาศอาร์เรย์ที่มีสถานะรีเลย์ uint8_t setRelay; // ประกาศตัวแปรด้วยจำนวนรีเลย์ที่เขียนคำสั่งจากตัวรับสัญญาณ IR การตั้งค่าเป็นโมฆะ())( IR.begin(); // เริ่มต้นการทำงานกับตัวรับส่งสัญญาณ IR for(uint8_t i=0; i โมดูลตัวรับสัญญาณ IR ร่วมกับรีโมทคอนโทรล IR จะทำให้คุณสามารถใช้รีโมทคอนโทรลของบอร์ด Arduino ได้อย่างง่ายดาย

    ไม่มีอะไรมากไปกว่าตัวรับสัญญาณ IR VS1838B ที่ติดตั้งสายรัดที่ผู้ผลิตแนะนำไว้บนบอร์ด

    หากต้องการทำงานกับโมดูลนี้นอกกรอบ คุณต้องมีรีโมทคอนโทรลที่มีความถี่ 38 kHz

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

    ลักษณะทางเทคนิคหลัก:

    แรงดันไฟฟ้า: 2.7 - 5.5V

    ความถี่การมอดูเลต: 38kHz

    ช่วงอุณหภูมิ: - 20 ... + 80°C

    อินเทอร์เฟซ: ดิจิตอล

    การเชื่อมต่อกับ Arduino

    โมดูลนี้มาพร้อมกับขั้วต่อ 2.54 มม. สามพิน

    : เชื่อมต่อกับขา GND

    : เชื่อมต่อกับเอาต์พุต +5V

    : เชื่อมต่อกับขาดิจิตอล (ตัวอย่าง D2)

    ตัวอย่างการทำงานในสภาพแวดล้อม Arduino

    ในการทำงานกับโมดูลนี้ คุณต้องติดตั้งไลบรารี IRRemote

    ดาวน์โหลด แกะและวางลงในโฟลเดอร์ไลบรารีในโฟลเดอร์ Arduino หาก Arduino IDE เปิดอยู่ในขณะที่เพิ่มไลบรารี ให้รีบูตสภาพแวดล้อม

    การอ่านปุ่มควบคุมระยะไกล

    หากต้องการอ่านค่าที่อ่านได้จากรีโมทคอนโทรล ให้กรอกแบบร่างด้านล่าง มันจะส่งออกการเข้ารหัสของปุ่มกดไปยังพอร์ต

    ดังตัวอย่างเราจะใช้รีโมตคอนโทรลดังในรูปเพราะว่า รีโมทคอนโทรลชนิดนี้รวมอยู่ในชุดด้วย

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

    รหัสตัวอย่าง:

    #รวม int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); //สร้างวัตถุเพื่อรับสัญญาณจากพอร์ตเฉพาะผลลัพธ์ decode_results; //ตัวแปรเก็บผลลัพธ์เป็นโมฆะ ติดตั้ง () { อนุกรม //เริ่มรับ) เป็นโมฆะ วนซ้ำ() ( ถ้า (irrecv.decode(&ผลลัพธ์)) //เมื่อได้รับสัญญาณ... { อนุกรม.println(results.value); //...ส่งออกค่าของมันไปยังพอร์ตอนุกรม irrecv.เรซูเม่(); ) )

    คุณควรเห็นสิ่งต่อไปนี้ในมอนิเตอร์พอร์ต:

    กดปุ่มแต่ละปุ่มค้างไว้เกือบวินาทีก็จะได้รหัสประมาณ 10 รหัส อันแรกคือรหัสปุ่ม และหลังจากนั้นรหัสมาตรฐานก็เริ่มปรากฏขึ้นซึ่งรายงานว่าปุ่มค้าง

    การควบคุมบอร์ด Arduino ด้วยรีโมทคอนโทรล

    มาทำให้ไฟ LED บนบอร์ด Arduino (D13) สว่างขึ้นเมื่อปุ่มแรกถูกเข้ารหัส และปิดเมื่อปุ่มที่สองถูกเข้ารหัส

    รหัสตัวอย่าง:

    // ทดสอบบน Arduino IDE 1.0.3#รวม int RECV_PIN = 2; ไฟ LED ภายใน = 13; IRrecv irrecv(RECV_PIN); ผลลัพธ์ decode_results; เป็นโมฆะ ติดตั้ง () { อนุกรม.เริ่มต้น(9600); irrecv.enableIRIn(); // เริ่มต้นเครื่องรับ pinMode(LED, เอาท์พุต); ) เป็นโมฆะ วนซ้ำ() ( ถ้า (irrecv.decode(&ผลลัพธ์)) ( อนุกรม.println(results.value); ถ้า (results.value == 16769565) // เมื่อได้รับการเข้ารหัส 1( digitalWrite (LED, สูง); // เปิดไฟ LED) ถ้า (results.value == 16761405) // เมื่อได้รับการเข้ารหัส 2( digitalWrite (ไฟ LED, ต่ำ); // ปิดไฟ LED) irrecv.resume(); // รับค่าถัดไป } }

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

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

    ก็อย่างที่ฉันเคยบอกนั่นแหละ ฮันนิบาล - "มุ่งหน้าสู่คาร์เธจ" . เราเพียงแค่ต้องถอดเครื่องรับออกและเชื่อมต่อเข้ากับบอร์ด อาร์ดูโน่ตามโครงการดังต่อไปนี้...

    • การเชื่อมต่อตัวรับสัญญาณ IR

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

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

    • ไลบรารี IRremote

    ทุกอย่างจึงเชื่อมโยงกัน มีไลบรารี่สำหรับอ่านโค้ดจากรีโมทคอนโทรล IRremote.hด้วยความช่วยเหลือที่เราจะศึกษารีโมทคอนโทรลของเราหรือรหัสปุ่ม ในอนาคตเราจะใช้โค้ดการอ่านเพื่อจุดประสงค์ของเราเอง เรียกว่าร่างที่จะอ่านรหัสปุ่มในตัวอย่างของไลบรารีนี้ IRrecvDemo ความสนใจ!!! เมื่อรวบรวมแบบร่างจะมีข้อผิดพลาดที่จุดเริ่มต้นคุณต้องเพิ่มไลบรารีปลั๊กอินอีกสองไลบรารี:

    #include "boarddefs.h" //ไลบรารีเพิ่มเติม #include "IRremote.h" #include "IRremoteInt.h" //ไลบรารีเพิ่มเติม int RECV_PIN = 2; //พินสำหรับเชื่อมต่อสัญญาณเอาท์พุตจากตัวรับ IR //สร้างอินสแตนซ์ของคลาส IRrecv โดยส่งพินสำหรับเชื่อมต่อสัญญาณจากตัวรับ IR เป็นพารามิเตอร์ IRrecv irrecv(RECV_PIN); ผลลัพธ์ decode_results; //ตัวแปรสำหรับบันทึกรหัสที่ได้รับของปุ่มที่กด void setup() ( Serial.begin(9600); irrecv.enableIRIn(); // เปิดใช้งานตัวรับสัญญาณ IR ให้ทำงาน ) void loop() ( if (irrecv.decode( &results)) //หากมีเหตุการณ์เกิดขึ้น/กดปุ่ม ( Serial.println(results.value, HEX); //ส่งออกโค้ดของปุ่มที่กดในรูปแบบเลขฐานสิบหกไปยังพอร์ตมอนิเตอร์ irrecv.resume(); // อ่านค่าถัดไป/ปุ่ม ) ล่าช้า(100 ); )

    หลังจากอัพโหลดภาพร่างขึ้นบอร์ดแล้วอาร์ดูโน่(เราใช้ อาร์ดูโน่ นาโนบนโล่ แผงป้องกันไร้สาย I/O สำหรับนาโน ) สามารถเปิดได้ มอนิเตอร์พอร์ต และดูว่ารหัสใดปรากฏขึ้นเมื่อคุณกดปุ่มบนรีโมทคอนโทรล ผลลัพธ์ของแบบร่างแสดงอยู่ในภาพหน้าจอด้านล่าง:

    โดยวิธีการเช่น มอนิเตอร์พอร์ต เราใช้ซอฟต์แวร์ที่ได้รับการพิสูจน์แล้วของเรา หากใครสนใจ คุณสามารถอ่านบทความและดาวน์โหลด Serial Monitor Pro ได้

    #define KEY_ONOFF 0x807F807F // ปุ่มเปิด/ปิด #define KEY_MUTE 0x807F48B7 // ปุ่มปิดเสียง #define KEY_1 0x807F00FF // ปุ่ม 1 #define KEY_2 0x807FE01F // ปุ่ม 2 #define KEY_3 0x807F609F // ปุ่ม K 3 #define KEY_4 0x 807F20DF // ปุ่ม 4 #กำหนด KEY_5 0x807FD02F // ปุ่ม 5 #กำหนด KEY_6 0x807F50AF // ปุ่ม 6 #กำหนด KEY_7 0x807F10EF // ปุ่ม 7 #กำหนด KEY_8 0x807FF00F // ปุ่ม 8 #กำหนด KEY_9 0x807F708F // ปุ่ม 9 #กำหนด KEY_0 0x 807FC837 // ปุ่ม 0

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

    • เราใช้โมดูลรีเลย์สองตัว
    • เราผูกรีเลย์หมายเลข 1 กับปุ่ม "1" ของรีโมทคอนโทรล
    • รีเลย์หมายเลข 2 เชื่อมโยงกับปุ่ม “2” ของรีโมทคอนโทรล
    • การเปิดโมดูลรีเลย์ใด ๆ ทำได้โดยการกดปุ่มที่กำหนดไว้
    • การปิดโมดูลรีเลย์ใด ๆ ก็ทำได้โดยการกดปุ่มที่กำหนดไว้
    • การกดปุ่มเปิด/ปิดจะเป็นการปิดโมดูลรีเลย์ทั้งสองโดยไม่มีเงื่อนไข (หากเปิดอยู่หรือเปิดโมดูลใดโมดูลหนึ่งอยู่)

    ร่างที่ดำเนินงานข้างต้น:

    #include "boarddefs.h" //ไลบรารีเพิ่มเติม #include "IRremote.h" #include "IRremoteInt.h" //ไลบรารีเพิ่มเติม #define KEY_ONOFF 0x807F807F // ปุ่มเปิด/ปิด #define KEY_1 0x807F00FF //Button 1 #define KEY_2 0x807FE01F // ปุ่ม 2 #define RELOUT1 3 // พอร์ตเอาท์พุตสำหรับรีเลย์ 1 #define RELOUT2 4 // พอร์ตเอาท์พุตสำหรับรีเลย์ 2 int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); ผลลัพธ์ decode_results; บูลีนแบบคงที่ REL1_ONOFF = เท็จ; บูลีนแบบคงที่ REL2_ONOFF = เท็จ; การตั้งค่าเป็นโมฆะ () ( pinMode (RELOUT1, OUTPUT); pinMode (RELOUT2, OUTPUT); Serial.begin (9600); irrecv.enableIRIn (); // เริ่มตัวรับ) void loop () ( if (irrecv.decode (&results )) ( สวิตช์(results.value) ( ​​case(KEY_ONOFF): REL1_ONOFF = false; REL2_ONOFF = false; break; case(KEY_1): if(REL1_ONOFF) REL1_ONOFF = false; else REL1_ONOFF = true; break; case(KEY_2 ): if(REL2_ONOFF) REL2_ONOFF = false; else REL2_ONOFF = true; break; ) irrecv.resume(); ) digitalWrite(RELOUT1, REL1_ONOFF); digitalWrite(RELOUT2, REL2_ONOFF); ล่าช้า (100); )

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

    โปรดเปิดใช้งานจาวาสคริปต์เพื่อให้ความคิดเห็นทำงานได้

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



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

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

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

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

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

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

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

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

    ตอนนี้เราตัดการเชื่อมต่อตัวรับสัญญาณอินฟราเรดของเราออกจากบอร์ด Arduino และเชื่อมต่อโมดูล Bluetooth 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 ); ) if (x == 98) ( irsend.sendNEC(0x807FA857, 32); ล่าช้า(40); ) if (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(0x807FD827, 32); ล่าช้า(40); ) if (x == 106) ( irsend.sendNEC(0x807F38C7) , 32); ล่าช้า(40); ) ถ้า (x == 107) ( 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); ) ถ้า (x == 99) ( irsend.sendNEC(0xFD18E7, 32); ล่าช้า(40); ) ถ้า (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 คือรหัสสำหรับปุ่มของคุณ

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

    เราเปิดบลูทูธในโทรศัพท์ ค้นหาอุปกรณ์ของเรา สร้างคู่ จากนั้นจึงเปิดแอปพลิเคชัน พูลท์บนโทรศัพท์

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

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

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

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

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

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

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