基于Arduino Nano的万能电视遥控器设计

电子说

1.2w人已加入

描述

遥控器是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个月。
审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分