遥控器是LCD智能电视的开机必备,如果家里的电视遥控器坏了,那就只能错过好节目了,这时有个备品那该多好啊。
本项目教大家自己动手DIY一个万能电视遥控器。项目采用IR遥控技术,工作时遥控器将代码发送给电视机,再由电视的MCU解码并处理,来改变电视频道。
项目开始前,我们首先须了解IR遥控的工作原理,知道遥控器发射的代码,并制作自己的遥控解码系统,再写下所有按钮(例如 CH+, CH-, VOL+, VOL-, POWER, Settings)的所有解码值。然后,将这些值发送给Arduino来实现万能遥控,并完成本项目。
项目元器件清单:
1) Arduino
2) IR LED
3) 轻触开关
4) 1k欧姆电阻器 x11
5) 220欧姆电阻器
6) PCB和引线
7) 电池(3.7V)
Arduino电视遥控器电路非常简单,如果使用的是Arduino Atmega328p芯片,就需要按照图示电路进行时钟和复位连接,图中的ICSP可编程串行引脚用以上传项目代码,改变控制信号。
电路中,IR发光二极管的正极通过1k/220欧姆电阻器,连接于D3(数字引脚3);负极接地。11个轻触开关用来处理11个不同的指令,它们的一端分别连接于D2-D13的不同数字引脚,另一端则分别通过一个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个月。
审核编辑:汤梓红
-
电视
+关注
关注
15文章
2484浏览量
75552 -
遥控器
+关注
关注
18文章
836浏览量
66053 -
Arduino
+关注
关注
188文章
6468浏览量
186945
发布评论请先 登录
相关推荐
评论