1、概述
近期众多客户对舵机的应用很感兴趣,今天我们对舵机的Servo.h这个库的一些应用进行整理和分析。方便大家了解学习和掌握一些基础类的应用和操作实际的项目。
对于模块不了解的,可以先看一下我们的模块教程[传送门],了解掌握模块使用方法后,再尝试本小实验。因为综合实验一般涉及多个模块,我们仅对全部使用我司产品的客户做技术支持,若只是部分使用我司产品的,我们只对我司产品部分是否有故障进行排查。
2、方式一(电位器控制舵机)
#include <Servo.h> // 声明调用 Servo.h 库
Servo myservo; // 创建一个舵机对象
int potpin = 0; // 连接到模拟口 0
int val; //变量 val 用来存储从模拟口 0 读到的值
void setup() {
myservo.attach(9); // 将引脚 9 上的舵机与声明的舵机对象连接起来
}
void loop() {
val = analogRead(potpin); //从模拟口 0 读值,并通过val 记录
val = map(val, 0, 1023, 0, 179); //通过 map 函数进行数值转换
myservo.write(val); // 给舵机写入角度
delay(15); // 延时 15ms 让舵机转到指定位置
}
Servo myservo; // 创建一个舵机对象
int potpin = 0; // 连接到模拟口 0
int val; //变量 val 用来存储从模拟口 0 读到的值
void setup() {
myservo.attach(9); // 将引脚 9 上的舵机与声明的舵机对象连接起来
}
void loop() {
val = analogRead(potpin); //从模拟口 0 读值,并通过val 记录
val = map(val, 0, 1023, 0, 179); //通过 map 函数进行数值转换
myservo.write(val); // 给舵机写入角度
delay(15); // 延时 15ms 让舵机转到指定位置
}
调节电位器,舵机输出指定的角度。效果视频如下:
3、方式二(串口任意角度控制舵机)
使用串口输入舵机转动角度发送给arduino,arduino控制舵机转动到制定角度。
#include <Servo.h> //调用库文件
Servo myservo; // 创建一个伺服电机对象
char inByte = 0; //串口接收的数据
int angle = 0; //角度值
String temp = "";//临时字符变量,又或者说是缓存用的吧
void setup() { myservo.attach(9); //定义舵机的引脚为9
Serial.begin(9600); //设置波特率
}
void loop() { while (Serial.available() > 0) //判断串口是否有数据
{ inByte = Serial.read();//读取数据,串口一次只能读1个字符
temp += inByte;//把读到的字符存进临时变量里面缓存, //再继续判断串口还有没有数据,知道把所有数据都读取出来
}
if(temp != "") //判断临时变量是否为空
{ angle = temp.toInt(); //把变量字符串类型转成整型
Serial.println(angle); //输出数据到串口上,以便观察
}
temp = "";//请看临时变量
myservo.write(angle); //控制舵机转动相应的角度。
delay(100);//延时100毫秒 }
Servo myservo; // 创建一个伺服电机对象
char inByte = 0; //串口接收的数据
int angle = 0; //角度值
String temp = "";//临时字符变量,又或者说是缓存用的吧
void setup() { myservo.attach(9); //定义舵机的引脚为9
Serial.begin(9600); //设置波特率
}
void loop() { while (Serial.available() > 0) //判断串口是否有数据
{ inByte = Serial.read();//读取数据,串口一次只能读1个字符
temp += inByte;//把读到的字符存进临时变量里面缓存, //再继续判断串口还有没有数据,知道把所有数据都读取出来
}
if(temp != "") //判断临时变量是否为空
{ angle = temp.toInt(); //把变量字符串类型转成整型
Serial.println(angle); //输出数据到串口上,以便观察
}
temp = "";//请看临时变量
myservo.write(angle); //控制舵机转动相应的角度。
delay(100);//延时100毫秒 }
上传程序,打开串口监视器,输入0-180度的角度数值,例50度。舵机对应的按照角度转动。视频效果如下:
4、方式三(HC-05蓝牙控制任意角度控制舵机)
通过方式二的示例和HC-05的示例,实现HC-05控制舵机的角度。
#include <Servo.h> //调用库文件
Servo myservo; // 创建一个伺服电机对象
char inByte = 0; //串口接收的数据
int angle = 0; //角度值
String temp = "";//临时字符变量,又或者说是缓存用的吧
void setup()
{
// 如果是HC-05,請改成38400
Serial.begin(38400);
myservo.attach(9);
}
void loop()
{
while(Serial.available()>0)
{
inByte=Serial.read();
temp += inByte;//把读到的字符存进临时变量里面缓存,
//再继续判断串口还有没有数据,知道把所有数据都读取出来
}
if(temp != "") //判断临时变量是否为空
{
angle = temp.toInt(); //把变量字符串类型转成整型
Serial.println(angle); //输出数据到串口上,以便观察
}
temp = "";//请看临时变量
myservo.write(angle); //控制舵机转动相应的角度。
delay(100);//延时100毫秒
}
Servo myservo; // 创建一个伺服电机对象
char inByte = 0; //串口接收的数据
int angle = 0; //角度值
String temp = "";//临时字符变量,又或者说是缓存用的吧
void setup()
{
// 如果是HC-05,請改成38400
Serial.begin(38400);
myservo.attach(9);
}
void loop()
{
while(Serial.available()>0)
{
inByte=Serial.read();
temp += inByte;//把读到的字符存进临时变量里面缓存,
//再继续判断串口还有没有数据,知道把所有数据都读取出来
}
if(temp != "") //判断临时变量是否为空
{
angle = temp.toInt(); //把变量字符串类型转成整型
Serial.println(angle); //输出数据到串口上,以便观察
}
temp = "";//请看临时变量
myservo.write(angle); //控制舵机转动相应的角度。
delay(100);//延时100毫秒
}
HC05蓝牙模块需要做如下的配置:
AT+ORGL
AT+NAME=ZBST999
AT+ROLE=0
AT+CMODE=1
AT+PSWD=1234
随后按照接线方式接好模块,手机连接上蓝牙模块,发送指定的角度。舵机转动指定的角度。
实验效果如下:
请先
!