风扇是我们生活中常见的一种工具,本篇教程将DIY一个自己的红外遥控小风扇。
零知标准板(点击购买)
红外遥控+红外线接收头(点击购买)
JQC-3FF继电器(点击购买)
SG90舵机(点击购买)
面包板(点击购买)
杜邦线(点击购买)
直流电机(点击购买)
鳄鱼夹子(点击购买)
使用的遥控器及其对应编码如下:
各部件接线如图所示:
实物连线如图所示:
/***********************************************************
* 文件: fengshan.ino by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
* -^^- 零知开源,让电子制作变得更简单! -^^-
* 时间: 2019/07/23 15:47
* 说明:
************************************************************/
#include <IRremote.h>
#include <Servo.h>
uint8_t IR_RECV_pin = 3;
int Relay_pin = 1;
int pos = 0;
IRreceiver irrecv(IR_RECV_pin);
Servo myservo;
IRdecode_results decode_result;
const int code[4]= {0xff6897,0xff30cf,0xff18e7,0xff7a85};
// 复位或上电后运行一次:
void setup() {
//在这里加入初始化相关代码,只运行一次:
Serial.begin(9600);
irrecv.enableIRIn(); //打开红外接收
myservo.attach(2); //舵机连接到2号引脚
pinMode(Relay_pin,OUTPUT);
digitalWrite(Relay_pin,HIGH);
}
//一直循环执行:
int get_code=0;
void loop() {
//在这里加入主要程序代码,重复执行:
if(get_code == 0) //未获取到红外信号
{
if(irrecv.decode(&decode_result))
{
get_code = 1; //获取到信号赋1
}
}
if(get_code == 1) //获取到信号
{
Serial.print("receive code: 0X");
int dvalue =decode_result.value;
Serial.println(dvalue,HEX);
get_code = 0;
irrecv.resume(); //接收下一次指令
if(dvalue == code[0]) //按键0
{
digitalWrite(Relay_pin,HIGH); //关闭继电器,即关闭风扇
Serial.println("code[0]");
}
else if(dvalue == code[1]) //按键1
{
Serial.println("code[1]");
digitalWrite(Relay_pin,LOW); //打开风扇
}
else if(dvalue == code[2])
{
while(1) //舵机140°循环转动
{
for(pos = 160;pos>20;pos--)
{
myservo.write(pos);
delay(20);
if(irrecv.decode(&decode_result)) //转动时判断是否接收到指令
{
get_code = 1;
break;//在for循环时接收到红外信号,中断当前for循环
}
}
for(pos = 20;pos<160;pos++
)
{
myservo.write(pos);
delay(20);
if(irrecv.decode(&decode_result))
{
get_code = 1;
break;
}
}
if(get_code==1)
{
break;//中断while循环
}
}
}
else if(dvalue == code[3])
{
myservo.detach(); //停止舵机
}
}
}
2、按照之前的方式先【验证】,然后【上传】到开发板中。
四、效果展示
上传之后,我们就可以通过红外遥控器遥控风扇了,按遥控器的1打开风扇,2打开舵机,0关闭风扇。