arduino uino 制作红外舵机风扇

arduino uino 制作红外舵机风扇

通过arduino制作简单的红外控制直流电机的舵机模拟红外控制风扇的开光和转动。

实验准备
1.arduino主板
1
2.数据线
1
3.直流电机
1
4.风扇
1
5.舵机1
6.红外接收模块
1
7.红外遥控器1
8.ULN2003驱动模块
1
9.继电器*1
10.跳线若干
11.9V电池
****二硬件安装及接线

      1.1:舵机和风扇的安装 

首先把舵机调节到如图1所示的角度:

arduino uino 制作红外舵机风扇_第1张图片
1. 2:直流电机安装如图所示:
arduino uino 制作红外舵机风扇_第2张图片

1.3:如图所示,舵机与直流电机相连
arduino uino 制作红外舵机风扇_第3张图片-
2接线说明

2.1舵机接线
舵机 Arduino
橙色线 数字脚位9
红色线 3.3V
棕色线 GND

2.2 ULN2003驱动模块:
arduino uino 制作红外舵机风扇_第4张图片 ULN2003模块 Arduino 开发板
1 GND
2 5V
IN1 D7
注:ULN2003在舵机风扇中作用防止直流电机干扰红外接收器接收红外信号

2.3红外接模块
红外模块 arduino
-脚位 GND
中间脚位 VCC
S脚位 D11
2.4继电器
继电器 Arduino
VCC 5V
GND GND
IN ULN2003模块3号脚位
COM 接外电源负极
NO 直流电机
2.5直流电机
直流电机一脚外电源正极,一脚接继电器NO端

三库的准备及操作说明
3.1库下载链接:http://note.youdao.com/noteshare?id=c7fafd03017e033313014fd44420273b&sub=275F7A86B86343469BE0BE1023AE19E9
3.2库操作
arduino uino 制作红外舵机风扇_第5张图片

四.程序代码:
/注:按键 CH+开启直流电机
按键 CH关闭直流电机
按键NEXT关闭舵机
按键PLAY/PAUSE开启舵机
/

#include //红外接收器的头文件
#include //舵机头文件
Servo myservo; //舵机起个名字
int pos = 0; //定义舵机的角度
#define MAX 22
int RECV_PIN =11; //定义红外接收模块输出口接arduino数字引脚11
IRrecv irrecv(RECV_PIN); //开启红外
decode_results results;

unsigned long rremote_code[MAX] = {
0xFFA25D,0xFF629D,0xFFE21D,//CH- CH CH+
0xFF22DD,0xFF02FD,0xFFC23D,//PREV NEXT PLAY
0xFFE01F,0xFFA857,0xFF906F,//VOL- VOL+ EQ
0xFF6897,0xFF9867,0xFFB04F,// 0 100+ 200+
0xFF30CF,0xFF18E7,0xFF7A85,// 1 2 3
0xFF10EF,0xFF38C7,0xFF5AA5,// 4 5 6
0xFF42BD,0xFF4AB5,0xFF52AD, // 7 8 9
0xFFFFFFFF//长按
}; //各按键对应的遥控红外接收码

//Car mp3对应的字符串
String rremote_string[MAX] = {
“CH-”,“CH”,“CH+”,
“PREV”,“NEXT”,“PLAY/PAUSE”,
“VOL-”,“VOL+”,“EQ”,
“0”,“100+”,“200+”,
“1”,“2”,“3”,
“4”,“5”,“6”,
“7”,“8”,“9”,
“longPress”
};
String ServoEn=“OFF”;
void getRemoteDo();
void ServoCtr();

void setup()
{
Serial.begin(9600); //开启串口监视器
irrecv.enableIRIn(); //初始化红外遥控
pinMode(7, OUTPUT); //定义LUN2003脚位
myservo.attach(9); //舵机脚位

}

void loop()
{
ServoCtr();
}

void ServoCtr()
{
for(pos = 0; pos <= 120; pos += 1) // 舵机的转动范围0-120度
{
getRemoteDo();
while(ServoEn==“OFF”)
{
getRemoteDo();
}
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 120; pos>=0; pos-=1) // 舵机的转动范围0-120度
{
getRemoteDo();
while(ServoEn==“OFF”)
{
getRemoteDo();
}
myservo.write(pos);
delay(15); // 延时15ms
}

}
/判断红外接收信息/
void getRemoteDo()
{
String codeString;
if (irrecv.decode(&results))
{
//打印字符串
codeString = getRremoteString(results.value);
if(codeString.length()!=0)
Serial.println(codeString);
irrecv.resume(); // 接收下一个值
}
if (codeString==“CH”)
{

    digitalWrite(7, LOW); 
   }

if (codeString==“CH+”)
{
digitalWrite(7, HIGH);
}
if (codeString==“PLAY/PAUSE”) //按键为PLAY/PAUSE关闭舵机
{

   ServoEn="On";
   }  
 if (codeString=="NEXT")      //按键为NEXT开启舵机
 {
  
   ServoEn="OFF";
 }         

}
/**

  • 解析红外编码并返回对应的字符串
    */
    String getRremoteString(unsigned long code){
    String rremotestring = “”;
    int i = 0;
    for(i = 0;i if(code == rremote_code[i]){
    break;
    }
    }
    //过滤掉长按
    if(i==MAX-1) return “”;
    else return rremote_string[i];
    }

五.成果图:
在这里插入图片描述
](https://img-blog.csdnimg.cn/20190903224535469.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDYzNjQwOQ==,size_16,color_FFFFFF,t_70)

arduino uino 制作红外舵机风扇_第6张图片

你可能感兴趣的:(你好)