Arduino利用遥杆控制舵机转动角度

工具 :
1.舵机 (一个或两个)
2.PS2摇杆 * 1
3.Arduino开发板
在这里插入图片描述
在这里插入图片描述
这里先来聊聊PS2摇杆,PS2摇杆内部相当于一个不能显示数值的可调电阻,可以把这个可调电阻数值看成下图的数值坐标:在这里插入图片描述
因为PS2摇杆可以左右上下摇动,所以可以对应坐标的xy轴,左到右相当于x轴上数值从0到1023,上到下相当于y轴上数值从0到1023(上下左右的位置相对于上图摆放来说)。PS2上VRX就可以看成x轴,VRY看成y轴,SW就是控制将摇杆按下的按键。电路图如下:在这里插入图片描述
那么既然我们要用坐标数值来表示PS2转动的幅度,所以PS2中VRX,VRY就可以接入analog in上的引脚,然后如果SW不需要,就不要接入(如果你只有一个舵机,那么VRY或VRX接入其中一个就好,当然别忘了接入正负极)。
下面聊聊舵机,舵机比步进电机控制角度来的更方便也更准确,还有舵机的线一般是棕 : GND,红 : VCC,橙: 控制线即OUT引脚。在这里插入图片描述
舵机转动的角度是由控制线的持续脉冲产生的,由上图可以看出最小的脉冲宽度是1ms,最大宽度是2ms,当脉冲宽度为1ms,这里的旋转角度为0°不是在原地不动,而是回到初始的位置,每一次转动的角度都是相对于初始位置而言,知道这一点挺重要的。Arduino中可以调用Servo这个库中的函数来实现对角度不那么精确的控制。在这里插入图片描述
看看自己有没有Servo舵机库,如果没有,要上划到库管理器中添加Servo这个库。这里值得一提的map函数,其用法 map(num,旧区间初值,旧区间终值,新区间初值,新区间终值),这里可以将0到1023的值简单的线性映射成角度从0到180,至于映射范围可以自己设定不一定要是0°到180°。
下面是完整代码:

#include <Servo.h>
Servo a;
Servo b;
int i,p,j,k;
void setup(){
  a.attach(3);//指定舵机a的OUT引脚为3号引脚
  b.attach(5);//指定舵机b的OUT引脚为5号引脚
  Serial.begin(9600);
}
void loop(){
  i = analogRead(A0);//获取A0引脚的输入值,即PS2摇杆X轴的数值
  j = analogRead(A1);//获取A1引脚的输入值,即PS2摇杆Y轴的数值
  Serial.print("映射前x轴:");
  Serial.print(i);
  Serial.print(" ");
  Serial.print("映射前y轴:");
  Serial.print(j);
  Serial.print(" ");
  p = map(i,0,1023,0,180);//01023的值映射成0180
  k = map(j,0,1023,0,180);
  Serial.print("映射后x轴:");
  Serial.print(p);
  Serial.print(" ");
  Serial.print("映射后y轴:");
  Serial.println(k);
  a.write(p);//设置舵机a角度为p
  b.write(k);//设置舵机b角度为k
}

最后可以打开串口监视器看看映射后角度变化(这是两个舵机的效果)在这里插入图片描述
心得:
Arduino不得不说,用它来控制舵机还是非常容易的。之前我也用过步进电机控制角度,但不是太精确。(⊙﹏⊙)当然用PS2控制舵机转动角度也不是很精确,主要是PS2摇杆的转动方向不太好固定。但是单纯从控制角度精确程度,舵机是要优于步进电机的😜

  • 23
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值