Arduino利用红外感应控制舵机

实现功能:当红外感应到人时,控制舵机转动180度
参考:基于Arduino的多种方式控制舵机(舵机、电位器、蓝牙).
硬件连接:

舵机连接:

Arduino Micro Servo 9g
5V 红线
GND 棕色
PWM~9 橙色

如图:

实现:在串口输入舵机转动角度,arduino控制舵机转动相应角度。
代码:

#include  //调用库文件

Servo myservo;  // 创建一个伺服电机对象 

char inByte = 0; //串口接收的数据 
int angle = 0;  //角度值 
String temp = "";//临时字符变量

void setup()  
{ 
   myservo.attach(9);    //定义舵机的引脚为9
   Serial.begin(9600);  //设置波特率 
} 


void loop()  
{ 
   while (Serial.available() > 0) //判断串口是否有数据 
   { 
     inByte = Serial.read();//读取数据,串口一次只能读1个字符 
     temp += inByte;//把读到的字符存进临时变量里面缓存, 
                    //再继续判断串口还有没有数据,直到把所有数据都读取出来 
    } 

    if(temp != "")   //判断临时变量是否为空 
    { 
     angle = temp.toInt();    //把变量字符串类型转成整型 
     Serial.println(angle);  //输出数据到串口上,以便观察 
    } 
   temp = "";//清空临时变量 
   myservo.write(angle);  //控制舵机转动相应的角度。 
   delay(100);//延时100毫秒 
} 

红外连接:

Arduino HC-SR501红外
5V +
A5 OUT
GND -

实现:当感应到人时,舵机旋转180度,反之,旋转0度。
代码:

#include  //调用库文件
Servo myservo;  // 创建一个伺服电机对象 

int angle1 = 0;  //原始角度值 
int angle2 = 180;  //旋转角度值
int Sensor_pin = A5;

void setup()
{
pinMode(Sensor_pin,INPUT); //设置人体红外接口为输入状态
myservo.attach(9);    //定义舵机的引脚为9
Serial.begin(9600);
}
void loop()
{
int val=digitalRead(Sensor_pin); //定义参数存储人体红外传感器读到的状态
Serial.println(val);
if(val == 1) //如果检测到有人(在检测范围内)
{
myservo.write(angle2);  //控制舵机转动相应的角度。
}
else
{
myservo.write(angle1);  //控制舵机转动相应的角度。
}
delay(100); //延时100毫秒
}

总接线图:

你可能感兴趣的:(arduino学习)