0. 起因
生命在于折腾,没什么好说的,开始吧!
1. 材料
灯
理论上什么样的灯都可以,但是为了用电安全,整一个 USB 供电的小灯。继电器
1路5v继电器,有三个端口:vcc、gnd 和一个控制端口in红外接收头
型号:vs1838 ,三个端口:vcc、gnd和一个信号输出端口output红外遥控器
其实这个不是必要的,因为现在很多手机也具备发射红外信号的能力Arduino Nano
Nano 板子体积很小,几乎和大拇指一样大。小归小,它却是整个遥控灯的控制系统,从红外接收头获取信号,并根据该信号控制继电器控制灯的开关,达到遥控的效果。杜邦线若干
来个合影
从左到右:继电器、红外接收头、红外遥控器、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 的可玩性还是挺高的,无聊瞎折腾打发时间;
抛砖引玉,各位可以做出更多好玩的例子。