基于Arduino的多种方式控制舵机(舵机、电位器、蓝牙)

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 让舵机转到指定位置
}

调节电位器,舵机输出指定的角度。效果视频如下:

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毫秒 }

上传程序,打开串口监视器,输入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毫秒
         }

HC05蓝牙模块需要做如下的配置:
AT+ORGL
AT+NAME=ZBST999
AT+ROLE=0
AT+CMODE=1
AT+PSWD=1234
随后按照接线方式接好模块,手机连接上蓝牙模块,发送指定的角度。舵机转动指定的角度。

实验效果如下:

0
分享到:

评论2

请先

  1. 方法三为什么我程序上传失败呢
    sgx5212019-09-05 0:11:22
  2. 把rx tx 引脚线拔下来在上传
    诺言20012020-09-28 23:49:59
原Arduino365.com域名更改为品牌域名ultirobot.com,承载内容要将更丰富,网站也进行了改版,改善阅读体验。
没有账号? 忘记密码?