第六篇、基于Arduino uno,控制180度舵机(SG90)转动——结果导向

0、结果

说明:让舵机转动,需要用PWM来控制,下面的程序是舵机从0度一直转到180度,然后又从180度转到0度的这样一个过程。

1、外观

说明:虽然舵机的型号有很多种,但是只要是180度的舵机,控制方式都是差不多的。

 2、连线

说明:只需要连接三根线。

  • uno————舵机
  • VCC------红颜色的
  • GND------黑颜色的
  •    D9------黄颜色的

3、源程序

说明:采用非阻塞方式编写,一定时间转动一个角度,并将对应功能进行函数化,方便移植。

/****************************************servo part****************************************/
/*
  接线:
  VCC------VCC
  GND------GND
  9------OUT

  注意:信号脚必须接PWM脚
*/
#include <Servo.h>                                        //调用库文件  

Servo myservo;                                            //实例化对象 

#define servoTimeInterval 20                              //控制舵机旋转的速度,数字越小转的越快,不建议过小
unsigned long servoTimes = 0;                             //记录设备运行时间

int posAngle = 1;                                         //舵机的角度
int tempVal = 1;                                          //舵机正转反转逻辑的转化
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(9600);                                     //设置波特率

  myservo.attach(9);                                      // 设置四个舵机的信号输出角
  myservo.write(posAngle);                                //设备上电后,舵机的位置在1度,这要设备工作会更加稳定

  Serial.println("设备上线");
}
void loop() {
  servoControl();                                         //舵机控制
}
/****************************************servo part****************************************/
/*舵机控制*/
void servoControl() {
  if (millis() - servoTimes >= servoTimeInterval) {       //非阻塞模式
    servoTimes = millis();

    if ((tempVal == 1) && (posAngle < 181)) {             //1°~180°来回运动
      myservo.write(posAngle);
      posAngle += 1;                                      //角度增加
    }
    if (posAngle == 181) {
      tempVal = 2;                                        //表示正转转完了,现在反转
    }
    if ((tempVal == 2) && (posAngle >= 1)) {              //从180°~转到1°
      myservo.write(posAngle);
      posAngle -= 1;
    }
    if (posAngle == 0) {                                  //表示反转转完了,现在正转,循环转来转去
      tempVal = 1;
    }
  }
}

4、注意事项

说明:如果控制的舵机数量很多,需要外部供电。如果设定转动的角度大于实际转动的角度,电机可能会坏掉。金属舵机力气比塑料舵机力气大,但是也更容易坏。

5、基本原理

        SG90舵机是一种微型伺服电机,广泛应用于模型飞机、机器人、汽车、船只等控制系统中。其工作原理与其他舵机类似,也是基于反馈控制系统实现角度位置控制。
        SG90舵机内部包括一个直流电机、一组齿轮、位置反馈器件和控制电路。当外部的信号输入到舵机控制电路中时,电路会将信号解析成对应的控制信号,并通过驱动电机旋转一定的角度来实现控制。同时,舵机内部的位置反馈器件也会将电机当前的角度信息反馈回来给控制电路,以便控制电路可以按照预定的目标角度进行精确控制。
        具体而言,SG90舵机的工作原理是:当外部输入控制信号时,舵机内部的控制电路会对该信号进行判断,然后输出一定的PWM信号给电机。控制电路不断地调整PWM信号的占空比,以便控制电机的旋转速度和旋转方向,从而使得舵机输出轴的位置和角度达到预期的目标位置。
        另外,SG90舵机还包括一个位置反馈器件,其通过检测电机旋转时输出轴的位置变化,来反馈实际位置信息给控制电路。控制电路根据反馈信号进行调整,以保证舵机输出轴的位置和角度精确地达到预期的目标位置。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PS2手柄与Arduino Uno舵机的组合是一个常见的项目,可用于控制舵机的运动。首先,你需要连接PS2手柄和Arduino Uno。 连接步骤如下: 1. 使用PS2手柄模块连接线将PS2手柄连接到Arduino Uno的数字引脚。 2. 使用舵机模块连接线将舵机连接到Arduino Uno的数字引脚。 3. 将Arduino Uno连接到电脑,打开Arduino IDE。 接下来,你需要编写Arduino代码以实现PS2手柄对舵机控制。首先,你需要下载并安装一个基于Arduino的PS2库,它将帮助你简化与PS2手柄的通信。 在开始编码之前,你需要确定舵机所需的引脚和范围。根据舵机的型号,修改代码中的舵机PIN和舵机范围。 编写代码的基本思路是: 1. 导入所需的库和定义舵机引脚。 2. 初始化PS2手柄和舵机。 3. 在主循环中,读取PS2手柄的输入。 4. 根据手柄的输入(如摇杆的位置),计算舵机的角。 5. 控制舵机转动到计算得到的角。 在代码中,你可以添加一些逻辑判断来优化舵机的运动。例如,你可以使用PID控制算法来实现更精确的控制。 最后,通过上传代码到Arduino Uno,你就可以通过PS2手柄来控制舵机的运动了。你可以通过摇杆的位置来变化舵机的角,实现舵机的准确控制。 总而言之,通过将PS2手柄和Arduino Uno连接起来,并编写合适的代码,你可以实现用PS2手柄控制舵机运动的项目。这对于机器人、模型车辆和其他自动化应用都非常有用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值