- 机器人等级考试
Arduino 舵机与风扇控制入门学习笔记
- 2025-8-4 16:07:25 @
Arduino 舵机与风扇控制入门学习笔记
一、舵机控制基础
1.1 舵机的工作原理
舵机是一种能精确控制旋转角度的电机,主要由以下几个部分组成:
- 直流电机(DC MOTOR):高速转动,但扭矩小
- 齿轮箱(GEARBOX):降低转速(如60 RPM),提高扭矩
- 电位器(POTENTIOMETER):检测舵机转动角度,输出与角度相关的可变电压
- 控制电路(CONTROL CIRCUIT):含集成H桥,负责接收控制信号并驱动电机
工作流程: 控制板接收目标角度(如90°)→ 控制板向舵机发送信号 → 电机转动 → 齿轮减速机构降低转速并增大扭矩 → 输出转动角度 → 电位器检测实际角度并反馈给控制板 → 控制板根据反馈调整,直到达到目标角度
1.2 舵机控制程序基础
使用Arduino控制舵机,需要遵循以下步骤:
-
导入舵机库
#include <Servo.h>
说明:引入舵机控制库,库中包含了控制舵机的各种功能函数,是控制舵机的基础
-
创建舵机对象
Servo myServo; // myServo是自定义的对象名,可以修改
说明:定义一个舵机类的实例,
Servo
是类库名称(不可修改)。如果需要控制多个舵机,需创建多个实例,且名称不能重复 -
指定舵机连接的引脚
myServo.attach(pin); // pin是引脚编号,范围0~13、A0~A5
说明:将创建的舵机对象与Arduino的指定引脚连接,建立控制关系
-
控制舵机转动到指定角度
myServo.write(value); // value是角度值,范围0~180°
说明:向舵机发送指令,使其转动到指定的角度
二、舵机控制实例代码
2.1 固定角度控制
让舵机保持在某个固定角度(如90°)
// 引入舵机控制库,有了这个库才能控制舵机转动
#include <Servo.h>
// 创建一个舵机对象,命名为my1(可以理解为"我的第一个舵机")
Servo my1;
// setup函数:程序开始时自动运行一次,用于初始化设置
void setup() {
// 把舵机连接到开发板的A0接口上,建立控制连接
my1.attach(A0);
}
// loop函数:setup执行完后会一直重复运行
void loop() {
// 让舵机转动并保持在180度的位置
// 也可以修改为0、45、90、120、160等其他0~180之间的角度
my1.write(180);
}
2.2 角度切换控制(带延迟)
让舵机在两个角度之间来回切换(如0°和90°)
// 引入舵机控制库,有了这个库才能控制舵机转动
#include <Servo.h>
// 创建一个舵机对象,命名为my1
Servo my1;
// setup函数:初始化设置
void setup() {
// 把舵机连接到开发板的A0接口
my1.attach(A0);
}
// loop函数:重复执行
void loop() {
// 让舵机转到0度的位置
my1.write(0);
// 暂停1000毫秒(1秒钟),让舵机有足够时间转到指定位置
delay(1000);
// 让舵机转到90度的位置
my1.write(90);
// 再暂停1秒钟
delay(1000);
}
2.3 电位器控制舵机
通过旋转电位器来控制舵机的转动角度,实现手动调节
// 引入Servo库,提供控制舵机的相关函数
#include <Servo.h>
// 创建一个Servo类的对象my1,用于控制舵机
Servo my1;
// 定义电位器连接的引脚为A1(模拟输入引脚)
// 使用const修饰表示该值不可修改
const int potPin = A1;
// setup函数:初始化设置
void setup() {
// 将舵机连接到开发板的A0引脚,建立控制连接
my1.attach(A0);
// 设置电位器引脚为输入模式,使其能读取外部电压信号
pinMode(potPin, INPUT);
// 初始化串口通信,波特率9600,用于调试(可选)
Serial.begin(9600);
}
// 定义变量val,用于存储中间数据(电位器读数、转换后的角度)
int val;
// loop函数:重复执行
void loop() {
// 读取电位器的模拟值(范围0-1023),该值对应电位器旋转的位置
val = analogRead(potPin);
// 将0-1023的电位器值映射为0-180的角度值(舵机常用角度范围)
val = map(val, 0, 1023, 0, 180);
// 向舵机发送角度指令,控制舵机转动到对应角度
my1.write(val);
// 延迟10毫秒,让舵机有足够时间到达目标位置,避免转动过于频繁
delay(10);
}
三、风扇与按钮控制实例
除了舵机,我们还可以通过Arduino控制风扇等其他设备,下面是一个通过按钮控制风扇开关的实例:
// 定义风扇模块连接的引脚为3(数字输出引脚)
// 注:数字引脚3、5、6、9、10、11通常支持PWM输出,适合控制电机类设备
const int motorPin = 3;
// 定义按钮模块连接的引脚为A0(此处A0作为数字输入引脚使用)
const int buttonPin = A0;
// setup函数:初始化设置
void setup() {
// 设置风扇引脚为输出模式,使其能向外输出电信号控制风扇
pinMode(motorPin, OUTPUT);
// 设置按钮引脚为输入模式,使其能读取按钮的状态(按下/未按下)
pinMode(buttonPin, INPUT);
}
// loop函数:重复执行
void loop() {
// 读取按钮引脚的电平状态:HIGH表示未按下(默认高电平),LOW表示按下
if (digitalRead(buttonPin) == HIGH) {
// 若按钮未按下,向风扇引脚输出高电平(1等价于HIGH),风扇工作
digitalWrite(motorPin, 1);
} else {
// 若按钮按下,向风扇引脚输出低电平(0等价于LOW),风扇停止
digitalWrite(motorPin, 0);
}
}
四、总结
通过以上内容,我们学习了:
- 舵机的基本组成和工作原理
- 使用Arduino控制舵机的四个基本步骤(导入库、创建对象、连接引脚、控制角度)
- 三种舵机控制实例:固定角度、角度切换、电位器控制
- 按钮控制风扇的实例
这些实例涵盖了Arduino控制外部设备的基本思路:通过定义引脚、设置引脚模式,然后在循环中读取输入(如按钮、电位器)或控制输出(如舵机、风扇)。通过修改代码中的引脚号、角度值、延迟时间等参数,可以实现更多不同的功能,大家可以尝试自己动手修改和扩展这些程序。
0 条评论
目前还没有评论...