基于 Arduino 造一个红外遥控灯

0. 起因

生命在于折腾,没什么好说的,开始吧!

1. 材料


  • 理论上什么样的灯都可以,但是为了用电安全,整一个 USB 供电的小灯。

  • 继电器
    1路5v继电器,有三个端口:vcc、gnd 和一个控制端口in

  • 红外接收头
    型号:vs1838 ,三个端口:vcc、gnd和一个信号输出端口output

  • 红外遥控器
    其实这个不是必要的,因为现在很多手机也具备发射红外信号的能力

  • Arduino Nano
    Nano 板子体积很小,几乎和大拇指一样大。小归小,它却是整个遥控灯的控制系统,从红外接收头获取信号,并根据该信号控制继电器控制灯的开关,达到遥控的效果。

  • 杜邦线若干

来个合影

基于 Arduino 造一个红外遥控灯_第1张图片
Snipaste_2018-04-10_14-43-11.png

从左到右:继电器、红外接收头、红外遥控器、Arduino Nano

材料上哪找?
淘宝上搜搜看。

2. 原理

1)手拿遥控器按下开关,遥控器发出红外线信号;
2)Arduino 通过红外接收头接收并解析该信号;
3)Arduino 根据收到的信号,控制继电器 in 端口的电平;
4)继电器 in 端口的电平会影响照明灯电路的通断。

于是就出现了我按下遥控器的开关,远处的照明灯就亮了的现象。

3. 怎么使用 Arduino Nano

请访问:Arduino
买到 nano 板子后,用 usb 线连接到电脑,安装好驱动。
启动事先安装好的 Arduino IDE(可以在 Arduino 官网下载),在菜单 工具->开发板 中选择Arduino Nano,处理器选择ATmega328,然后就可以开始编程了。

第一个程序

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

正如注释,setup函数只在开机执行一次;而loop函数会在开机后循环执行。

4. 原理好简单,Show me the code!

4.1 The Code

在这个程序中需要对红外信号进行解码,需要用到IRremote这个库,安装方法如下:
菜单 项目->加载库->管理库,在打开的窗口中搜索IRremote,然后点击安装即可。

//红外接收相关的库
#include
const int vcc =  2; //红外收头正极
const int gnd = 3; 
const int sensorIn = 4; //红外接收端
const int switchOutput = 5; //继电器控制输出端

IRrecv irrecv(sensorIn);
decode_results results;

//保存当前继电器输出端的状态
int currentSwitchOutputState = HIGH;

void setup() {
  //初始化工作,设置 vcc 脚为高电平,gnd为低电平
  pinMode(vcc, OUTPUT);
  pinMode(gnd, OUTPUT);
  digitalWrite(vcc, HIGH);
  digitalWrite(gnd, LOW);
  
  pinMode(switchOutput, OUTPUT);
  irrecv.enableIRIn(); //开始接收红外信号
}

void loop() {
  // 解码成功,收到一组红外线信号
  if (irrecv.decode(&results))  {
      //0xffa25d是红外遥控器上的开关键
    if(results.value==0xffa25d){
      currentSwitchOutputState = currentSwitchOutputState == HIGH ? LOW : HIGH;
      digitalWrite(switchOutput, currentSwitchOutputState);
    }
    irrecv.resume();
  }
}

程序写好后下载到 Arduino,通电后程序将会自动运行。

以上程序运行后,Arduino 每次接收到值为0xffa25d的红外信号,就会改变switchOutput管脚上的电平,而这个脚接到了继电器的 in 脚,于是继电器控制的照明电路就通/断了。

4.2 接线

  • 红外接收头三个引脚(vcc, gnd, output)分别接到程序中写的 vcc, gnd, sensorIn 的值对应的 arduino 的引脚;
  • 继电器(vcc, gnd, in)接到 arduino 上标有 5v, gnd 和值为 switchOutput 的引脚上;
  • 灯有两股线,找到正极的线(其实随便一股就可以)剪断,并接到继电器上另一端。

按下开关试试?

5. 总结

Arduino 的可玩性还是挺高的,无聊瞎折腾打发时间;
抛砖引玉,各位可以做出更多好玩的例子。

你可能感兴趣的:(基于 Arduino 造一个红外遥控灯)