(Arduino入门)用电位器控制伺服电机
其中, value 是要转换的值, fromLow 和 fromHigh 指定了 value 原来的范围, toLow 和 toHigh 指定了要转换到的目标范围。这意味着Arduino可以将0-5伏特的电压输入信号映射到数值0-1023(最大值是2的10次方-1)0伏特的输入信号对应着数值0,而5伏特的输入信号对应着1023。Arduino的GND,2接到模拟输入引脚,此时模拟引脚测到的就是电阻
·
analogRead()
Arduino控制器有多个10位数模转换通道。这意味着Arduino可以将0-5伏特的电压输入信号映射到数值0-1023(最大值是2的10次方-1)
换句话说,我们可以将5V等分成1024份。0伏特的输入信号对应着数值0,而5伏特的输入信号对应着1023。
例如当输入电压为2V时,analogRead()函数得到的的值为1024*2/5=410
电位器
电位器就像一个滑动变阻器,可以把1接到Arduino的5V引脚,3接到
Arduino的GND,2接到模拟输入引脚,此时模拟引脚测到的就是电阻R(1-2)上的电压
伺服电机
伺服电机(舵机)内部有反馈装置,使得其能够精确转动固定角度

其有三根线,红色和灰色分别接5V和GND,黄色的是PWM信号线。
下面代码是对其简单的演示:
#include <Servo.h> //定义使用舵机的库函数
//这个库函数在Linux上是用不了的
//我尝试在树莓派上用arduino,结果显示没有这个库函数
Servo myservo; // 创建伺服电机名myservo(学过C语言的人知到这是结构体)
//在大多数开发板上,可以同时创建12个伺服电机对象
int pos = 0; // 定义伺服电机的角度,初始为0
void setup() {
myservo.attach(9); // 将myservo信号线连接到9号引脚
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // for循环使角度从0缓慢变为到180,每次步长为1
myservo.write(pos); // 使舵机转到角度pos
delay(15); // 等待15毫秒,使舵机转到相应位置
}
for (pos = 180; pos >= 0; pos -= 1) { // for循环使角度从180缓慢变为到0,每次步长为1
myservo.write(pos);
delay(15);
}
}
这个代码会让舵机从0转到180,再转回来
map()函数
map 函数用于将一个数值从一个范围线性地转换到另一个范围,其函数原型为 :
map(value, fromLow, fromHigh, toLow, toHigh) 。
其中, value 是要转换的值, fromLow 和 fromHigh 指定了 value 原来的范围, toLow 和 toHigh 指定了要转换到的目标范围。
例:
// 模拟一个传感器读数,范围在0 - 1023
int sensorValue = 700;
// 将传感器读数映射到0 - 255的范围,用于控制LED亮度等
int ledBrightness = map(sensorValue, 0, 1023, 0, 255);
接下来,把这个部分结合起来:
用电位器控制伺服电机:

#include <Servo.h>
Servo myServo; // 创建一个舵机对象myServo
int analogInput; // 用于存储电位器读取的值
int pos; // 用于存储舵机角度
void setup() {
Serial.begin(9600); //设置串口通讯波特率9600
myServo.attach(9); // 将舵机连接到数字引脚9
pinMode(A0, INPUT); // 将电位器引脚设置为输入模式
}
void loop() {
analogInput = analogRead(A0); // 读取电位器的值
Serial.println(analogInput); //串口监视器上打印电位器的值
pos = map(analogInput, 0, 1023, 0, 180); // 将电位器的值映射到0 - 180度
myServo.write(pos); // 设置舵机角度
delay(15); // 等待舵机转动到位
}
打开串口监视器,可以查看电位器的值:

更多推荐



所有评论(0)