凌顺实验室/指南/Arduino 指南/

Arduino Uno 使用串口 控制舵机角度

实例效果

通过使用Arduino IDE的串口监视器,
发送角度值,
从而控制舵机。

本次实例,涉及到了串口的数据读取与发送。
对以后的实现串口通信,可借鉴参考。

**更正1,在视频中,程序的命名是想输入「arduino_serial_control_servo」
**更正2,在视频中有可以看到发送“90”,程序串口却返回分别是“9”和“0”,在程序中改动两个地方,第一在读取串口的循环中增加delay(10),第二是在最后一个delay(10),改为100,感觉这样设定串口的接收更稳定。

元件说明


技术参数

产品尺寸:323012mm
工作扭矩:1.6kg·cm(4.8V)
使用温度:-30至+60摄氏度
死区设定:5微秒
工作电压:3.5V-6V
插头类型:JR、FUTABA通用
转动角度:180度
结构材质:塑料齿
适用范围:固定翼、直升机kt、滑翔、小型机器人机械手等模型

引脚说明

引脚 / PIN / IO 颜色
地线(GND) 棕色或黑色
电源线(VCC) 红色
信号线(PWM) 橙色或白色

Bom表

名称 数量
Arduino Uno x1
9克舵机 x1
跳线(杜邦线) 若干

接线方式

程序实现

// lingshunlab.com

// 加载 舵机 库
#include <Servo.h>
 
Servo myservo;  // 创建一个名为 myservo 的伺服电机实例(名称可随你喜欢命名)
 
char inByte = 0; // 定义 串口接收的数据
int angle = 0;  // 定义 角度值
String temp = ""; // 定义 临时字符变量,又或者说是缓存用的吧
 
void setup() 
{
  myservo.attach(9);    // 配置myservo实例的引脚为9
  Serial.begin(9600);  //设置波特率,这是串口应用中很重要的数字
}
 
 
void loop() 
{
  while (Serial.available() > 0) // 判断串口是否有数据,若有则进入while循环
  {
    inByte = Serial.read();// 读取数据,串口一次只能读1个字符
    temp += inByte;// 把读到的字符存进临时变量里面缓存,
                   // 再继续判断串口还有没有数据,知道把所有数据都读取出来
    delay(10);
  }
 
  if(temp != "")   // 判断临时变量是否为空,非空则进行舵机角度控制
  {
    angle = temp.toInt();    // 把变量字符串类型转成整型
    Serial.println(angle);  // 输出数据到串口上,以便观察
  }
  temp = "";// 清空临时变量

  myservo.write(angle);  // 控制舵机转动到相应的角度位置。
  delay(100);// 延时100毫秒
}

接好线,

打开串口,输入0-180的数值,记得是数值哦,
因为程序没有做数据验证如果输入其他会。。。。。。大家可以自己试试看。
正常输入数值,
舵机就会转动相应的角度。

相关连接

Arduino使用舵机的第一篇,演示接线 使用 Arduino Uno 驱动舵机