美文网首页玩转ArduinoIoT-Arduino我爱编程
基于 Arduino 造一个红外遥控灯

基于 Arduino 造一个红外遥控灯

作者: 王不哈 | 来源:发表于2018-04-10 15:35 被阅读51次

    0. 起因

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

    1. 材料


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

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

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

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

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

    • 杜邦线若干

    来个合影

    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<IRremote.h>
    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 造一个红外遥控灯

      本文链接:https://www.haomeiwen.com/subject/ecfnhftx.html