ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Arduino Uno 舵机控制

2022-02-07 18:59:01  阅读:226  来源: 互联网

标签:10 servo Servo 引脚 舵机 Arduino 角度 Uno


硬件

SG90舵机相关介绍:

角度:90度 - 180度通用
红色为5V电源线,棕色为地线,橙色为信号线
无负载转速:0.12秒/60度 (4.8V)
堵转扭矩:1.2 - 1.4公斤/厘米 (4.8V)

软件:

servo类函数的用法

方法                            

  描述

Servo.attach( )

连接舵机信号线引脚(自带库仅9/10脚有效)

Servo.write ( )

写入角度

Servo.writeMicrseconds ( )

写入更精准的角度(um级)

Servo.read ( )

读取上一次舵机转动角度

Servo.attached ( )

检查舵机是否连接在控制板上

Servo.detach ( )

断开舵机连接

注:也可以声明一个 Servo对象名,如Servo myDj; myDj.attach();

1. attach()-设定信号引脚

描述:将Servo变量附加到引脚

注意:在Arduino 0016及之前的版本上,Servo库仅支持将舵机连接至第9和第10脚上。

语法

servo.attach(pin)

servo.attach(pin, min, max)

参数说明

servo:一个类型为servo的变量

pin:连接至舵机的引脚编号

min(可选):舵机为最小角度(0度)时的脉冲宽度,单位为微秒,默认为544

max(可选):舵机为最大角度(180度时)的脉冲宽度,单位为微秒,默认为2400

2. write()-设定舵机旋转角度(0~180);

描述:向舵机写入一个数值,来直接控制舵机的轴。在一个标准的舵机中,这将设定齿轮的角度,将齿轮转到对应的位置。在一个连续旋转的舵机中,这将设置一个舵机的角度(0作为全速向一边,180为全速向另一边,在90附近的值为停止)。

语法

servo.write(angle)

参数说明

servo:一个类型为servo的变量

angle:写向舵机的角度,从0到180之间

3. writeMicroseconds()-更精准的角度控制(μm级)

描述:向舵机写入一个微秒的值来控制舵机的轴。在一个标准舵机中,这将设置舵机齿轮的角度。在标准舵机中,参数设置为1000为完全逆时针方向,2000完全顺时针方向,1500为在中间。

注意:一些生产厂商没有按照这个标准,以至于舵机通常响应在700到2300之间的值。自由地增加终点值直到舵机不再增加它的范围。让舵机旋转超过它的终点(有可能会发出异常声响)是一个高电流状态,应该被避免。连续旋转舵机对该函数的响应类似于write()函数

语法

servo.writeMicroseconds(uS)

参数说明

servo,一个类型为servo的变量

uS,一个代表微秒值的整数参数

4. read()

描述:读取舵机当前的角度(最后一次用write()函数写入的值)

语法

servo.read()

参数说明

servo,一个类型为servo的变量

返回值

舵机的角度,从0至180度

仅将其调用,但不使用,会使舵机出现异常;

5. attached-检查舵机及是否连接控制板上

描述:检查一个servo变量是否被附加到一个引脚

语法

servo.attached()

参数说明

servo,一个类型为servo的变量

返回值

返回true,如果被附加到一个引脚,反之返回false

6. detach-断开舵机连接,使接口(9/10脚)可做PWM输出

描述:将servo变量与引脚脱离,如果所有servo变量均被脱离,第9和第10脚将可以用analogWrite()函数进行PWM输出。

语法

servo.detach()

参数说明

servo,一个类型为servo的变量

范例1

//自感应开盖垃圾桶

#include "Servo.h"  //使用servo类之前先导入库

#define Echo D2

#define Trig D8

#define PIN_SERVO D5  //定义舵机信号线连接的引脚

#define openTheBox myDuoJi.write(10)//开盖

#define closeTheBox myDuoJi.write(150) //关盖

Servo myDuoJi;//定义一个舵机

void initCeJu()

{

  pinMode(Echo, INPUT);      //D2为输入

  pinMode(Trig, OUTPUT);    //D8为输出

}

long getTime()

{

   //超声波触发

  digitalWrite(Trig,0);      //D8为低电平

  delayMicroseconds(10);     //delay10US

  digitalWrite(Trig,1);      //D8为高电平

 delayMicroseconds(10); //delay10US

 

  return pulseIn(Echo, HIGH);  //返回D2的高电平脉冲值

}

void setup() {

  // put your setup code here, to run once:

  initCeJu();

  myDuoJi.attach(PIN_SERVO);//舵机初始化,5#引脚

  Serial.begin(115200);

}

void loop() {

  // put your main code here, to run repeatedly:

  long dis;

  dis = getTime()/58;   //超声波感应距离

  Serial.print(dis);

  Serial.println("cm");

 

  if(dis < 28){

    openTheBox;//开盖(预处理定义)

   

  }else if(dis > 50){

    closeTheBox;//关盖(预处理定义)

  }

  delay(500);

   

}

标签:10,servo,Servo,引脚,舵机,Arduino,角度,Uno
来源: https://blog.csdn.net/idleAsaPig/article/details/122813115

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有