欢迎光临
我们一直在努力

基于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
随后按照接线方式接好模块,手机连接上蓝牙模块,发送指定的角度。舵机转动指定的角度。

实验效果如下:

未经允许不得转载:Arduino-Maker » 基于Arduino的多种方式控制舵机(舵机、电位器、蓝牙)

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 1

评论前必须登录!

 

  1. #1

    方法三为什么我程序上传失败呢

    sgx5213个月前 (09-05)

线上商城

中贝斯特创客空间蘑菇云创客教育