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摇杆的转动方向不太好固定。但是单纯从控制角度精确程度,舵机是要优于步进电机的😜

您好!要使用Arduino控制舵机,您可以通过连接摇杆模块和舵机来实现。以下是一种可能的实现方法: 1. 首先,将摇杆模块连接到Arduino摇杆模块通常具有两个电位器,一个用于水平控制,另一个用于垂直控制。将摇杆模块的VCC引脚连接到Arduino的5V引脚,将GND引脚连接到GND引脚,将水平控制引脚连接到Arduino的一个模拟输入引脚(例如A0),将垂直控制引脚连接到另一个模拟输入引脚(例如A1)。 2. 将舵机连接到Arduino。舵机通常具有三个引脚:VCC(电源正极),GND(电源负极)和信号引脚。将舵机的VCC引脚连接到Arduino的5V引脚,将GND引脚连接到GND引脚,将信号引脚连接到Arduino的数字输出引脚(例如D9)。 3. 在Arduino代码中编写程序以读取摇杆模块的值,并根据摇杆的位置控制舵机角度。您可以使用analogRead函数读取摇杆模块的值,并使用map函数将读数转换为舵机的角度范围(通常为0到180度)。然后,使用Servo库来控制舵机角度。 以下是一个简单的示例代码: ```arduino #include <Servo.h> Servo servo; int horizontalPin = A0; // 摇杆水平控制引脚 int verticalPin = A1; // 摇杆垂直控制引脚 void setup() { servo.attach(9); // 舵机信号引脚 } void loop() { int horizontalValue = analogRead(horizontalPin); int verticalValue = analogRead(verticalPin); // 将读数映射到舵机角度范围 int angle = map(horizontalValue, 0, 1023, 0, 180); servo.write(angle); // 控制舵机角度 delay(15); // 延迟一段时间以平滑舵机运动 } ``` 请注意,以上代码仅为示例,您可能需要根据您使用的具体硬件进行适当的调整。希望对您有所帮助!如果您有任何问题,请随时问我。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值