Arduino Uno 使用电位器控制舵机角度
目录
在本实例中,使用到2个元件包括电位器和舵机,之前都有写文章分享如何使用。这次就介绍怎么合并两个元件写程序。
实验效果
通过转动电位器控制舵机的角度转动
元件说明
舵机 https://lingshunlab.com/book/arduino/arduino-uno-drive-servo
电位器 https://lingshunlab.com/book/arduino/arduino-use-potentiometer
如果没有单独使用过以上元件,建议先分别实现一次。
BOM表
名称 | 数量 |
---|---|
Arduino Uno | x1 |
舵机 | x1 |
电位器 | x1 |
面包板 | x1 |
跳线(杜邦线) | 若干 |
接线方式
Arduino Uno 引脚 | <---> | 电位器 引脚 |
---|---|---|
5V | <-> | VCC |
GND | <-> | GND |
A0 | <-> | OUT |
Arduino Uno 引脚 | <---> | 舵机引脚 |
---|---|---|
5V | <-> | VCC(红色) |
GND | <-> | GND(黑色或褐色) |
9 | <-> | 信号线(橙色) |
程序提点
程序逻辑是先获取电位器的数值,使用map()函数进行等比映射0 ~ 180之间的数值,并以此数值为舵机的角度,进行舵机的控制。
程序中还输出了电位器的数值和映射的角度,方便观察。
map() 等比映射
这次用到map函数 主要是将一个数字从一个范围重新映射到另一个范围。也就是说,fromLow的值会被映射到Low,fromHigh的值会被映射到High,中间的值会被映射到中间的值,等等。
语法: map(value, fromLow, fromHigh, toLow, toHigh)
参数: value:要映射的数字。 fromLow:数值当前范围的下限。 fromHigh:数值当前范围的上界。 toLow:数值目标范围的下限。 toHigh:目标范围的上界。
返回: 等比映射后的数值
Serial.print() 不换行输出
Serial.print()函数和Serial.println()函数的不同之处,就是在串口输出中是否换行。前者Serial.print()函数是不换行,后者Serial.println()函数是换行。
程序实现
// lingshunlab.com
// 加载舵机库
#include <Servo.h>;
Servo myservo; // 创建一个名为 myservo 的伺服电机实例(名称可随你喜欢命名)
int potpin = 0; // 定义 potpin 变量,用于定义模拟引脚口编号,0则为主板上A0的引脚
int val; // 定义 val 变量, 用于存储电位器的数值
int angle; // 定义 angle 变量, 用于储存角度值
// 初始化
void setup() {
myservo.attach(9); // 配置myservo实例的引脚为9
Serial.begin(9600); //设置波特率,这是串口应用中很重要的数字
}
// 主程序
void loop() {
val = analogRead(potpin); // 通过analogRead函数,获取指定模拟口的数值
angle = map(val, 0, 1023, 0, 179); //map()是等比映射函数,把val的数值等比映射为0-180度
myservo.write(angle); // 控制舵机转动到相应的角度位置。
Serial.print("val: "); // 从串口中输出以下数据,方便观察
Serial.print(val);
Serial.print(" | ");
Serial.print("angle: ");
Serial.println(angle);
delay(15); // 等待15毫秒,给舵机移动到指定位置
}
相关连接
Arduino使用舵机的第一篇,演示接线 使用 Arduino Uno 驱动舵机