遙控器是LCD智能電視的開機必備,如果家里的電視遙控器壞了,那就只能錯過好節(jié)目了,這時有個備品那該多好啊。
本項目教大家自己動手DIY一個萬能電視遙控器。項目采用IR遙控技術(shù),工作時遙控器將代碼發(fā)送給電視機,再由電視的MCU解碼并處理,來改變電視頻道。
項目開始前,我們首先須了解IR遙控的工作原理,知道遙控器發(fā)射的代碼,并制作自己的遙控解碼系統(tǒng),再寫下所有按鈕(例如 CH+, CH-, VOL+, VOL-, POWER, Settings)的所有解碼值。然后,將這些值發(fā)送給Arduino來實現(xiàn)萬能遙控,并完成本項目。
項目元器件清單:
1) Arduino
2) IR LED
3) 輕觸開關(guān)
4) 1k歐姆電阻器 x11
5) 220歐姆電阻器
6) PCB和引線
7) 電池(3.7V)
Arduino電視遙控器電路非常簡單,如果使用的是Arduino Atmega328p芯片,就需要按照圖示電路進(jìn)行時鐘和復(fù)位連接,圖中的ICSP可編程串行引腳用以上傳項目代碼,改變控制信號。
電路中,IR發(fā)光二極管的正極通過1k/220歐姆電阻器,連接于D3(數(shù)字引腳3);負(fù)極接地。11個輕觸開關(guān)用來處理11個不同的指令,它們的一端分別連接于D2-D13的不同數(shù)字引腳,另一端則分別通過一個1k歐姆電阻器接地。兩引腳插頭用來為電路和Arduino供電。
代碼如下:
#include
#include "LowPower.h"
IRsend irsend;
const int b1 = 2;
const int b2 = 4;
const int b3 = 5;
const int b4 = 6;
const int b5 = 7;
const int b6 = 8;
const int b7 = 9;
const int b8 = 10;
const int b9 = 11;
const int b10 = 12;
int timer;
int modeCounter = 0;
void wakeUp() {
timer = 0;
}
void setup() {
pinMode(b1, INPUT);
pinMode(b2, INPUT);
pinMode(b3, INPUT);
pinMode(b4, INPUT);
pinMode(b5, INPUT);
pinMode(b6, INPUT);
pinMode(b7, INPUT);
pinMode(b8, INPUT);
pinMode(b9, INPUT);
pinMode(b10, INPUT);
}
void loop() {
attachInterrupt(0, wakeUp, HIGH);
while (timer < 10000) {
if (digitalRead(b1) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b2) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b3) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b4) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b5) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b6) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b7) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b8) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b9) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
if (digitalRead(b10) == HIGH) {
timer = 0;
delay(50);
irsend.sendNEC(0x0000, 32); //Enter Remote Hex Value
}
delay(1);
timer = timer + 1;
}
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
}
上述代碼采用低功耗模式庫,以提高電池壽命,一次充電后可使用3-4個月。
審核編輯:湯梓紅
-
電視
+關(guān)注
關(guān)注
15文章
2484瀏覽量
75603 -
遙控器
+關(guān)注
關(guān)注
18文章
837瀏覽量
66130 -
Arduino
+關(guān)注
關(guān)注
188文章
6469瀏覽量
187089
發(fā)布評論請先 登錄
相關(guān)推薦
評論