原创 用Arduino Nano制作一个万能电视遥控器

2022-5-6 09:13 2131 7 3 分类: 智能硬件 文集: 方案

遥控器是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个月。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条