Arduino 舵机与风扇控制入门学习笔记

一、舵机控制基础

1.1 舵机的工作原理

舵机是一种能精确控制旋转角度的电机,主要由以下几个部分组成:

  • 直流电机(DC MOTOR):高速转动,但扭矩小
  • 齿轮箱(GEARBOX):降低转速(如60 RPM),提高扭矩
  • 电位器(POTENTIOMETER):检测舵机转动角度,输出与角度相关的可变电压
  • 控制电路(CONTROL CIRCUIT):含集成H桥,负责接收控制信号并驱动电机

工作流程: 控制板接收目标角度(如90°)→ 控制板向舵机发送信号 → 电机转动 → 齿轮减速机构降低转速并增大扭矩 → 输出转动角度 → 电位器检测实际角度并反馈给控制板 → 控制板根据反馈调整,直到达到目标角度

1.2 舵机控制程序基础

使用Arduino控制舵机,需要遵循以下步骤:

  1. 导入舵机库

    #include <Servo.h>
    

    说明:引入舵机控制库,库中包含了控制舵机的各种功能函数,是控制舵机的基础

  2. 创建舵机对象

    Servo myServo;  // myServo是自定义的对象名,可以修改
    

    说明:定义一个舵机类的实例,Servo是类库名称(不可修改)。如果需要控制多个舵机,需创建多个实例,且名称不能重复

  3. 指定舵机连接的引脚

    myServo.attach(pin);  // pin是引脚编号,范围0~13、A0~A5
    

    说明:将创建的舵机对象与Arduino的指定引脚连接,建立控制关系

  4. 控制舵机转动到指定角度

    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);
  }
}

四、总结

通过以上内容,我们学习了:

  1. 舵机的基本组成和工作原理
  2. 使用Arduino控制舵机的四个基本步骤(导入库、创建对象、连接引脚、控制角度)
  3. 三种舵机控制实例:固定角度、角度切换、电位器控制
  4. 按钮控制风扇的实例

这些实例涵盖了Arduino控制外部设备的基本思路:通过定义引脚、设置引脚模式,然后在循环中读取输入(如按钮、电位器)或控制输出(如舵机、风扇)。通过修改代码中的引脚号、角度值、延迟时间等参数,可以实现更多不同的功能,大家可以尝试自己动手修改和扩展这些程序。

0 条评论

目前还没有评论...