天天看點

Arduino與紅外遙控握手

Arduino教程傳送門🧭🏔🌋🛤🏞🏜

Arduino與紅外遙控握手

    • 1.0 簡介
    • 2.0 實驗材料
    • 3.0 實驗步驟
        • 3.1 根據原理圖搭建電路
        • 3.2 庫檔案調用:
        • 3.3 建立sketch,拷貝如下代碼并進行儲存編譯上傳
        • 3.3 實驗現象
    • 4.0 總結

1.0 簡介

  • 紅外遙控器:是一種通過紅外線及時通訊的控制器,适用于那些需要機器裝置狀态調整的控制系統。在車載MP3、燈光裝置、單片機開發闆和遙控車等短距離控制場合中已經得到了普遍應用。本篇通過官方《IRremote》驅動庫讀出按鍵碼值和實作LED燈的亮滅。
  • 外形結構:主要是由遙控器由紅外接收及發射電路、信号調理電路、中央控制器8031.程式及資料存儲器、鍵盤及狀态訓示電路組成。
    Arduino與紅外遙控握手
  • 工作原理:

    遙控器由紅外接收及發射電路、信号調理電路、中央控制器程式及資料存儲器、鍵盤及狀态訓示電路組成。

遙控器有兩種狀态:學習狀态和控制狀态。當遙控器處于學習狀态時,使用者每按一個控制鍵,紅外線接收電路就開始接收外來紅外信号,同時将其轉換成電信号,然後經過檢波、整形、放大,再由CPU定時對其采樣,将每個采樣點的二進制資料以8位為一個機關,分别存放到指定的存儲單元中去,供以後對該裝置控制使用。當遙控器處于控制狀态時,使用者每按下一個控制鍵,CPU從指定的存儲單元中讀取一系列的二進制資料,串行輸出(位和位之間的時間間隔等于采樣時的時間間隔)給信号保持電路,同時由調制電路進行信号調制,将調制信号經放大後,由紅外線發射二極管進行發射,進而實作對該鍵對應裝置功能的控制。(本次學習重點控制狀态🤣🤣🤣)
  • 紅外遙控器相關參數見下:

    紅外遙控距離: 接收範圍8米左右

    發射管紅外波長:940nm

    晶振頻率:455KHZ

    載波頻率:38KHZ

    編碼:編碼格式為NEC

    尺寸:86406mm

    電源:CR2025/1600mAH

2.0 實驗材料

  • Arduino Uno R3開發闆
  • USB資料線
  • 三根公母線
  • SG90舵機
  • 一台安裝Arduino開發環境的電腦

3.0 實驗步驟

3.1 根據原理圖搭建電路

  • 在使用前一定要記得給紅外遙控器上電池,還有紅外遙控器要結合紅外接收子產品使用,它負責将接收紅外遙控器發射過來的資訊并将其解碼成十六進制碼,這樣才能實作既定的通信。(可以使用手機判斷紅外遙控器是否有電)
    Arduino與紅外遙控握手
  • 将紅外接收子產品與Arduino正确連接配接,其中S連接配接D3,VCC接+5V,GND接GND,并将其固定好;

    實驗原理圖分别對應兩個實驗:

    Arduino與紅外遙控握手
    Arduino與紅外遙控握手

實驗接線圖:

Arduino與紅外遙控握手
Arduino與紅外遙控握手

3.2 庫檔案調用:

需要IRremote庫檔案。操作起來:點選Arduino IDE工具選擇管理庫 ,搜尋IRremote選擇IRRemoteControl安裝,如果這個不行,删除後試試其他的

Arduino與紅外遙控握手

3.3 建立sketch,拷貝如下代碼并進行儲存編譯上傳

代碼1:

#include <IRremote.h>

int RECV_PIN = 11;//定義紅外接收器的引腳為11

IRrecv irrecv(RECV_PIN);

decode_results results;//注意這個資料類型

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // 初始化紅外接收器
}

void loop() {
  if (irrecv.decode(&results)) {  //注意這裡取解碼結果的方法,傳遞的是變量指針。
    Serial.println(results.value,HEX); //以16進制換行輸出接收代碼。注意取值方法【results.value】。
    irrecv.resume(); // 給紅外傳送指令,讓其繼續接收下一個值。同315M無線接收一個道理。
  }
}
           

代碼2:

#include <IRremote.h>

long ir_item;
IRrecv irrecv_3(3);
decode_results results_3;

void setup(){
  Serial.begin(9600);
  pinMode(4, OUTPUT);
  irrecv_3.enableIRIn();
}

void loop(){
  if (irrecv_3.decode(&results_3)) {
    ir_item=results_3.value;
    String type="UNKNOWN";
    String typelist[14]={"UNKNOWN", "NEC", "SONY", "RC5", "RC6", "DISH", "SHARP", "PANASONIC", "JVC", "SANYO", "MITSUBISHI", "SAMSUNG", "LG", "WHYNTER"};
    if(results_3.decode_type>=1&&results_3.decode_type<=13){
      type=typelist[results_3.decode_type];
    }
    Serial.print("IR TYPE:"+type+"  ");
    delay(150);
    Serial.print("Receive:  ");
    Serial.println(ir_item);
    if (ir_item == 0xE318261B) {
      digitalWrite(4,HIGH);
      Serial.println("Light turn on");

    }
    if (ir_item == 0xEE886D7F) {
      digitalWrite(4,LOW);
      Serial.println("Light turn off");

    }
    irrecv_3.resume();
  } else {
  }

}

           

MIxly代碼

Arduino與紅外遙控握手

3.3 實驗現象

  • 代碼1:
    Arduino與紅外遙控握手
    依次按下按鈕并記錄如下,需要重複實驗确定碼值!!!
    Arduino與紅外遙控握手

    兩種遙控器分别對應的碼值有所差別

    -代碼2:

    點選CH-使小燈點亮,點選CH+使小燈熄滅,實作短距離即時通訊的效果

紅外遙控與Arduino實作小燈控制

Arduino與紅外遙控握手

4.0 總結

  • 用紅外遙控器與Arduino 通訊,代碼1是直接利用Arduino 第三方IRRemoteControl庫解碼,得到十六進制數,然後重複實驗得到碼值;代碼2是紅外遙控器與Arduino 通訊,點選CH-使小燈點亮,點選CH+使小燈熄滅,實作短距離即時通訊的效果。
  • 在以後的博文中我們将學會用arduino常用傳感器和執行器,進而實作對外部世界進行感覺,充分認識這個有機與無機的環境,科學地合理地進行創作和發揮效益,然後為人類社會發展貢獻一點微薄之力。

繼續閱讀