<del id="p0fsc"><progress id="p0fsc"></progress></del>
<dl id="p0fsc"></dl>

    一级A片网站|下载一级毛片黄片|午夜理论福利|精品毛片福利午夜视频|国产色婷婷精品免费视频|国产无码黄色一级|aⅤ高清无码免费看大片|黄片大全迷奸免费

    技術(shù)熱線(xiàn): 4007-888-234

    專(zhuān)注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

    提供開(kāi)發(fā)工具、應(yīng)用測(cè)試 完善的開(kāi)發(fā)代碼案例庫(kù)分享

    從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

    技術(shù)支持

    Arduino編程:使用紅外遙控器控制繼電器開(kāi)關(guān)

    更新時(shí)間: 2019-11-16

    在本文中,英銳恩單片機(jī)開(kāi)發(fā)工程師分享了一個(gè)使用紅外遙控器控制繼電器開(kāi)關(guān)的案例。紅外(IR)通信技術(shù)早在WiFi和藍(lán)牙之前就已經(jīng)存在,它仍然是實(shí)現(xiàn)典型家庭自動(dòng)化系統(tǒng)主要組件的關(guān)鍵組件。例如,IR技術(shù)仍用于無(wú)線(xiàn)耳機(jī),家庭安全系統(tǒng)中的入侵檢測(cè)以及手持遙控器中,用于控制家庭娛樂(lè)系統(tǒng)(電視,DVD,音箱等),空調(diào)裝置和其他家用電器。由于紅外技術(shù)需要在發(fā)射器和接收器單元之間形成視線(xiàn),因此它只能用于連接短距離的設(shè)備,例如在同一房間。

    QQ截圖20191116114651.png

    在這里,將展示如何制作基于A(yíng)rduino的IR接收器,以解碼來(lái)自TV/DVD遙控器的IR信號(hào)。根據(jù)與遙控器上特定按鈕對(duì)應(yīng)的解碼值,我們將對(duì)Arduino進(jìn)行編程以控制多個(gè)繼電器開(kāi)關(guān)。

    電路設(shè)置

    遙控器發(fā)送的紅外信號(hào)很容易受到附近其他紅外源(例如加熱器和白熾燈)的干擾。因此,為了使接收器區(qū)分IR信號(hào)和所有其他紅外噪聲源,已發(fā)射的IR信號(hào)被調(diào)制。對(duì)于調(diào)制,需要穩(wěn)定的載波頻率(通常為30–60 kHz),其中38Khz是最常用的載波頻率。盡管有幾種數(shù)字調(diào)制技術(shù),但大多數(shù)現(xiàn)代消費(fèi)類(lèi)電子產(chǎn)品都使用幅移鍵控(ASK)來(lái)設(shè)計(jì)IR遙控器。在A(yíng)SK中,載波的幅度根據(jù)數(shù)字輸入信號(hào)而變化。邏輯1由一定幅度的載波信號(hào)表示,而邏輯0通過(guò)將載波幅度更改為零(或?qū)⑵潢P(guān)閉)表示。

    在此方案中,我們將使用來(lái)自電視遙控器的IR信號(hào)來(lái)控制多個(gè)繼電器開(kāi)關(guān)。為此,我們需要一個(gè)IR接收器電路,該電路將解調(diào)電視遙控器發(fā)送的IR信號(hào)。解調(diào)后的數(shù)字輸出可以由Arduino直接解釋。

    TSOP1740紅外接收器內(nèi)置了該方案的接收電路。TSOP17XX系列是小型接收器,具有集成在一個(gè)封裝中的光電探測(cè)器和前置放大器,可以用于紅外遙控系統(tǒng)。內(nèi)部還使用了帶通濾波器,積分器級(jí)和自動(dòng)增益控制來(lái)抑制有害噪聲。名稱(chēng)的后兩位(XX)代表帶通的中心頻率。因此,TSOP1740適用于40 KHz的調(diào)制IR信號(hào)。

    TSOP.png

    下面顯示的是該方案所需的完整電路設(shè)置。TSOP17340的解調(diào)后輸出將輸出到Arduino引腳D11。在此演示中使用了一個(gè)雙繼電器控制板。兩個(gè)繼電器的控制引腳(IN1和IN2)由Arduino的D6和D7 I/O引腳驅(qū)動(dòng)。整個(gè)電路在5V下工作。

    circuit.png

    此方案中使用的繼電器板具有光耦合器,用于在輸入控制引腳和輸出繼電器驅(qū)動(dòng)器電路之間進(jìn)行電氣隔離。這兩個(gè)繼電器單元的板載驅(qū)動(dòng)器電路可在低電平有效輸入下工作。這意味著必須將IN引腳拉低以激活繼電器。以下電路描述了繼電器控制邏輯的工作方式。同樣的電路也適用于第二繼電器單元。跳線(xiàn)JP1允許你為輸出側(cè)(繼電器及其晶體管驅(qū)動(dòng)器)選擇單獨(dú)的電源(在板上標(biāo)記為JD-VCC)。如果要為整個(gè)電路使用相同的5V電源,則需要在VCC和JD-VCC引腳之間放置一個(gè)并聯(lián)跳線(xiàn)。從電路圖中可以很容易地看出,輸入端的邏輯0接通了光耦合器,然后激活了繼電器。

    relayboard.jpg

    硬件設(shè)置完成后,我們現(xiàn)在將對(duì)Arduino Nano進(jìn)行編程,以接收TSOP1738解調(diào)后的輸出并解釋遙控器上各個(gè)按鈕按下的代碼。不同制造商設(shè)計(jì)了許多不同的紅外協(xié)議標(biāo)準(zhǔn)或數(shù)據(jù)格式,供消費(fèi)類(lèi)電子產(chǎn)品使用。最常用的協(xié)議是Philips的RC-5和RC-6,Sony的SIRC,NEC,JVC。這些協(xié)議中的每一種都有自己的發(fā)送數(shù)據(jù)格式,該格式由一些地址位和一些命令位組成。

    #include <IRremote.h>
    int RECV_PIN = 11;
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    void dump(decode_results *results) {
     int count = results->rawlen;
     if (results->decode_type == UNKNOWN) {
     Serial.println("Could not decode message");
     } 
     else {
     Serial.println("Signal received.");
     if (results->decode_type == NEC) {
     Serial.print("Decoded NEC, ");
     } 
     else if (results->decode_type == SONY) {
     Serial.print("Decoded SONY, ");
     } 
     else if (results->decode_type == RC5) {
     Serial.print("Decoded RC5, ");
     } 
     else if (results->decode_type == RC6) {
     Serial.print("Decoded RC6, ");
     }
     Serial.print("Value= ");
     Serial.print(results->value, DEC);
     Serial.print(" (");
     Serial.print(results->bits, DEC);
     Serial.println(" bits)");
     }
     
    }
    void setup()
    {
     Serial.begin(9600);
     Serial.println("IR decoder");
     irrecv.enableIRIn(); // Start the receiver
    }
    int on = 0;
    unsigned long last = millis();
    void loop() {
     if (irrecv.decode(&results)) {
     // Wait for 0.5sec before decoding another code
     if (millis() - last > 500) {
     
     dump(&results);
     }
     last = millis(); 
     irrecv.resume(); // Receive the next value
     }
    }


    我們將分兩個(gè)步驟為該方案開(kāi)發(fā)Arduino固件。首先,我們將編寫(xiě)一個(gè)簡(jiǎn)單的程序來(lái)找出遙控器上特定按鈕的數(shù)字代碼(或十進(jìn)制值)。它將讀取IR接收器的輸出,對(duì)消息進(jìn)行解碼,并在串行監(jiān)視器窗口上打印出所用協(xié)議的類(lèi)型以及所傳輸代碼的十進(jìn)制值。這樣做的程序在下面發(fā)布(代碼改編自Ken Shirriff編寫(xiě)的IRrelay示例)。

    此測(cè)試程序的硬件設(shè)置與上面描述的相同。現(xiàn)在,將遙控器對(duì)準(zhǔn)面包板上的TSOP1740模塊,然后按一個(gè)按鈕,你將在串行監(jiān)視器窗口上看到該按鈕的解碼十進(jìn)制值。確保串行監(jiān)視器的波特率選擇為9600。如果你的遙控器使用IRremote庫(kù)的受支持協(xié)議列表中未提供的其他數(shù)據(jù)編碼方案,則它將無(wú)法解碼該代碼。這里用兩個(gè)不同的遙控器進(jìn)行了測(cè)試:一個(gè)遙控器是Sony Blueray播放器,另一個(gè)是HP多合一電腦,它能夠同時(shí)解碼。在串行監(jiān)視器窗口中,可以看到HP遙控器使用Philips RC-6協(xié)議,而Sony使用其自己的SIRC協(xié)議。在Sony遙控器上為VOL+和VOL-。

    testserialmonitor.png

    現(xiàn)在我們知道特定按鈕按下會(huì)發(fā)送什么代碼,我們可以修改代碼以實(shí)現(xiàn)用于切換繼電器電路的附加邏輯。我們將對(duì)Arduino進(jìn)行編程以執(zhí)行以下邏輯。

    按下VOL +時(shí),繼電器1打開(kāi)。
    按下VOL-時(shí),繼電器1將關(guān)閉。
    按下CH +時(shí),繼電器2打開(kāi)。
    按下CH-時(shí),繼電器2將關(guān)閉。
    按下暫停按鈕時(shí),兩個(gè)繼電器都將關(guān)閉。
    按下PLAY按鈕時(shí),兩個(gè)繼電器都打開(kāi)。

    以下為執(zhí)行此任務(wù)的代碼:

    #include <IRremote.h>
    #define SW1 6 // Relay control pins are 6 and 7
    #define SW2 7
    int RECV_PIN = 11; // IR receive pin is 11
    IRrecv irrecv(RECV_PIN);
    long int decodedCode; 
    decode_results rcv;
    void controlRelays(){
     if(decodedCode == 1168) digitalWrite(SW1, LOW); 
     if(decodedCode == 3216) digitalWrite(SW1, HIGH); 
     if(decodedCode == 144) digitalWrite(SW2, LOW); 
     if(decodedCode == 2192) digitalWrite(SW2, HIGH); 
     if(decodedCode == 625479){
     digitalWrite(SW1, HIGH); // All off 
     digitalWrite(SW2, HIGH); 
     }
     if(decodedCode == 363335){
     digitalWrite(SW1, LOW); // All on 
     digitalWrite(SW2, LOW);
     }
     delay(300);
    }
    void setup(){
     pinMode(SW1, OUTPUT);
     pinMode(SW2, OUTPUT);
     digitalWrite(SW1, HIGH); // Relay is active low, so HIGH will turn it off at startup
     digitalWrite(SW2, HIGH); 
     Serial.begin(9600);
     Serial.println("IR relay controller");
     irrecv.enableIRIn(); 
    }
    void loop(){
     if (irrecv.decode(&rcv)) {
     Serial.print("Signal received, Value= ");
     decodedCode = rcv.value;
     Serial.println(decodedCode, DEC);
     controlRelays();
     irrecv.resume(); 
     }
    }


    將程序上傳到Arduino之后,享受通過(guò)遙控器打開(kāi)和關(guān)閉繼電器的樂(lè)趣。就可以輕松地將更多的繼電器添加到Arduino的其他免費(fèi)I/O引腳,并添加更多的if語(yǔ)句,以類(lèi)似的方式控制它們。

    以上就是英銳恩單片機(jī)開(kāi)發(fā)工程師分享的使用紅外遙控器控制繼電器開(kāi)關(guān)的方法。英銳恩專(zhuān)注單片機(jī)應(yīng)用方案設(shè)計(jì)與開(kāi)發(fā),提供8位單片機(jī)、16位單片機(jī)、32位單片機(jī)

    404
    返回首頁(yè) |  返回上一頁(yè)
    一级A片网站|下载一级毛片黄片|午夜理论福利|精品毛片福利午夜视频|国产色婷婷精品免费视频|国产无码黄色一级|aⅤ高清无码免费看大片|黄片大全迷奸免费
    <del id="p0fsc"><progress id="p0fsc"></progress></del>
    <dl id="p0fsc"></dl>