黄工无刷电机学习
直播中

王兰

13年用户 1636经验值
擅长:基础元器件
私信 关注
[问答]

请问一下Arduino是怎么利用红外感应控制舵机的?

请问一下Arduino是怎么利用红外感应控制舵机的?

回帖(1)

何丽

2021-10-13 11:43:46
硬件连接:
舵机连接:
[tr]ArduinoMicro Servo 9g[/tr]
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毫秒
}
红外连接:
[tr]ArduinoHC-SR501红外[/tr]

5V+
A5OUT
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毫秒
}
总接线图:


举报

更多回帖

发帖
×
20
完善资料,
赚取积分