tag 标签: 电视遥控器

相关博文
  • 热度 3
    2022-5-6 09:13
    2089 次阅读|
    0 个评论
    遥控器是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个月。
相关资源