- 机器人等级考试
Arduino舵机
- 2025-5-26 18:39:28 @
一、舵机简介
舵机是一种位置(角度)伺服的驱动器,也叫伺服马达。主要由外壳、电路板、无核心马达、齿轮与位置检测器构成。
二、硬件准备
- Arduino开发板:如Uno R3开发板 。
- 舵机 :常见舵机外接三根线,一般棕色为接地线,红色为电源正极线,橙色为信号线,但不同品牌颜色可能有别。
- 配套USB数据线 :用于开发板与电脑连接。
三、硬件连接
以Uno R3开发板为例,舵机红色线接开发板5V引脚,棕色线接开发板GND引脚,橙色信号线接开发板数字引脚(如数字引脚9 ,可按需选择)。若控制多个舵机,因Arduino驱动能力有限,需外接电源和专用舵机控制板。
四、软件编程
- 使用Servo库控制舵机(推荐)
- 引入库:在Arduino IDE中新建Sketch(草图)后,在代码开头添加
#include <Servo.h>
引入舵机控制库。 - 定义Servo对象:在全局变量区域使用
Servo myservo;
定义一个Servo对象(这里名为myservo
,名字可自定义 ),用于控制舵机。 - 设置舵机接口:在
setup()
函数中,使用myservo.attach(9);
(这里数字9是舵机信号线连接的开发板引脚,需与实际连接对应 )将定义的Servo对象与具体引脚关联。 - 控制舵机角度:在
loop()
函数或其他函数中,使用myservo.write(角度值);
控制舵机旋转角度,角度值范围通常0° - 180° ,如myservo.write(90);
让舵机转到90° 。还可结合延时函数delay(时间值);
,如delay(1000);
(单位毫秒 ),让舵机在该角度保持一段时间。完整示例代码如下:
- 引入库:在Arduino IDE中新建Sketch(草图)后,在代码开头添加
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
}
void loop() {
myservo.write(0);
delay(1000);
myservo.write(180);
delay(1000);
}
此代码让舵机在0°和180°间交替转动,每次转动后保持1秒。
五、程序上传与测试
- 在Arduino IDE中,连接好开发板,设置好对应的端口号和开发板类型。
- 点击“上传”按钮,将编写好的程序下载到Arduino开发板中。
- 观察舵机是否按程序设定要求转动,若未正常工作,检查硬件连接是否正确、程序代码是否有误 。
六、进阶应用
- 读取传感器数据控制舵机:如连接电位器、红外传感器等,根据传感器返回数值动态调整舵机角度。例如连接电位器到模拟引脚,读取电位器数值并映射到舵机角度范围来控制舵机转动。
- 多个舵机协同控制:使用舵机控制板和外接电源,编写程序让多个舵机配合完成复杂动作,如制作机械臂等。
2 条评论
-
admin SU @ 2025-5-26 18:53:58已修改
下面为你提供一个使用电位器控制舵机摆动的Arduino教程,包含详细的硬件连接、代码实现和工作原理说明:
项目目标
通过旋转电位器(模拟旋钮),实时控制舵机在0°~180°范围内摆动,实现简单的手动角度调节。
所需硬件
- Arduino开发板(如Uno)
- 舵机(SG90等小型舵机)
- 10kΩ电位器(或其他阻值)
- 杜邦线若干
- 面包板(可选,方便连线)
硬件连接
Arduino 电位器 说明 5V VCC(中间脚) 为电位器供电 GND GND(侧边脚) 接地 A0(模拟输入) 信号脚(另一侧边脚) 读取电位器的模拟值 Arduino 舵机 说明 5V 红色线(电源) 为舵机供电(小型舵机可直接用Arduino 5V) GND 棕色线(接地) 接地 D9(数字输出) 橙色线(信号) 控制舵机角度的PWM信号 电路原理图
5V ────┬───────────┬─── 5V(舵机) │ │ ▼ ▼ ┌───────┐ ┌───────┐ │电位器 │ │舵机 │ │ │ │ │ │ ┌─┐ │ │ ┌─┐ │ └──┴─┴──┘ └──┴─┴──┘ │ ▲ │ ▲ │ │ │ │ │ └─────────────┘ │ ▼ ▼ GND(电位器) GND(舵机) │ │ └─────────────────┘ GND
代码实现
#include <Servo.h> // 引入舵机控制库 Servo myServo; // 创建舵机对象 const int POT_PIN = A0; // 电位器连接的模拟引脚 const int SERVO_PIN = 9; // 舵机信号连接的数字引脚 void setup() { myServo.attach(SERVO_PIN); // 初始化舵机引脚 Serial.begin(9600); // 初始化串口通信(用于调试) } void loop() { // 读取电位器的值(0~1023) int potValue = analogRead(POT_PIN); // 将电位器的值映射到舵机角度(0°~180°) int angle = map(potValue, 0, 1023, 0, 180); // 设置舵机角度 myServo.write(angle); // 打印调试信息(可选) Serial.print("电位器值: "); Serial.print(potValue); Serial.print(" -> 舵机角度: "); Serial.println(angle); delay(20); // 短暂延时,稳定信号 }
代码解释
-
引入库:
#include <Servo.h>
舵机控制需要使用Arduino的Servo库。 -
初始化设置:
Servo myServo;
:创建舵机对象。analogRead(POT_PIN)
:读取电位器输入的模拟值(范围0~1023)。myServo.attach(SERVO_PIN)
:将舵机连接到指定引脚。
-
映射数值:
map(potValue, 0, 1023, 0, 180)
:
将电位器的0~1023范围线性映射到舵机的0°~180°范围。
例如:电位器旋转到最左侧(0)→ 舵机0°;
电位器旋转到最右侧(1023)→ 舵机180°。
-
控制舵机:
myServo.write(angle)
:根据映射后的角度值控制舵机转动。
工作原理
-
电位器的工作原理:
电位器是一种可变电阻,通过旋转旋钮改变电阻值。
Arduino通过模拟引脚(A0~A5)读取电位器的电压值,转换为0~1023的数字值。 -
舵机的控制原理:
舵机通过PWM(脉冲宽度调制)信号控制角度。 Servo库会自动处理PWM信号的生成,你只需设置角度值即可。
注意事项
- 供电问题:
- 小型舵机(如SG90)可直接由Arduino 5V供电。
- 大型舵机需外接电源(如5V稳压电源),避免Arduino过载。
扩展应用
- 制作简易机械臂:使用多个电位器和舵机,控制机械臂的多个关节。
- 自动跟随系统:结合红外传感器或超声波传感器,让舵机带动传感器自动追踪目标。
通过这个项目,你可以掌握Arduino模拟输入和舵机控制的基本方法,为更复杂的机器人项目打下基础!
-
2025-5-26 18:50:18@
使用Arduino Servo库
Arduino提供了一个内置的Servo库,简化了对舵机的控制过程,不需要手动计算和生成PWM信号。
以下是一些基本操作:
基本步骤:
包含库文件:在代码顶部加入#include <Servo.h>。
创建Servo对象:使用Servo myServo;声明一个Servo类型的变量。
连接舵机:使用myServo.attach(pinNumber);将舵机连接到指定的数字引脚上。
设置角度:通过myServo.write(angle);设置舵机的目标角度,参数angle的范围一般是0到180度。
示例代码:
#include <Servo.h> Servo myServo; // 创建Servo对象 int servoPin = 9; void setup() { myServo.attach(servoPin); // 将舵机连接到9号引脚 } void loop() { for (int i = 0; i <= 180; i++) { // 从0度到180度循环 myServo.write(i); delay(15); // 等待15毫秒使动作平滑 } for (int i = 180; i >= 0; i--) { // 从180度回到0度 myServo.write(i); delay(15); } }
- 1