Arduino Uno 实验7

您所在的位置:网站首页 arduino舵机旋转270度 Arduino Uno 实验7

Arduino Uno 实验7

#Arduino Uno 实验7| 来源: 网络整理| 查看: 265

SG90舵机简介

  舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。主要是由外壳、电路板、驱动马达(直流电机)、减速齿轮组、位置检测元件(控制电路)所构成,是一套自动(闭环)控制装置。   所谓自动(闭环)控制就是用一个闭环反馈控制回路不断校正输出的偏差,使系统的输出保持恒定。   注意:①舵机的连线接口和舵机转动范围      ②舵机内有位置控制电路,一旦通电后,不要用手转动舵盘,容易导致逻辑内减速齿轮的损坏。里面有传感器,读取对应的数值,形成闭环控制。 在这里插入图片描述

在这里插入图片描述

SG90舵机工作原理

  由接收机发出讯号给舵机,经由电路板上的 IC驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,藉由检测电阻值便可知转动的角度。   如果轴的位置与控制信号相符,那么电机就会关闭。如果控制电路发现这个角度不正确,它就会控制马达转动,直到它达到指定的角度。舵机角度根据制造商的不同而有所不同。比如,一个180度的舵机,它可以在0度至180度之间运动。由于限位装置被安装在主输出装置上,超出这个范围机械结构就不能再转动了   舵机的输出功率与它所需要转动的距离成正比。如果输出轴需要转动很长的距离,马达就会全速运转,如果它只需要短距离转动,马达就会以较慢的速度运行,这叫做速度比例控制。 在这里插入图片描述

如何让舵机转到指定角度?

  控制线用于传输角度控制信号。这个角度是由控制信号脉冲的持续时间决定的,这叫做脉冲编码调制(PCM)。舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms。脉冲的宽度将决定马达转动的距离。例如:1.5毫秒的脉冲,电机将转向90度的位置(通常称为中立位置,对于180°舵机来说,就是90°位置)。如果脉冲宽度小于1.5毫秒,那么电机轴向朝向0度方向。如果脉冲宽度大于1.5毫秒,轴向就朝向180度方向。以180度舵机为例,对应的控制关系是这样的 0.5ms————-0度;1.0ms————45度;1.0ms————45度;2.0ms———–135度;2.5ms———–180度; 在这里插入图片描述

SG90舵机的使用 类库的使用规则

在这里插入图片描述 在这里插入图片描述

两个示例程序

在这里插入图片描述

实验一:舵机来回扫(示例:Sweep) 项目要求:

  实现舵机在0~180度来回转动

电路搭建

在这里插入图片描述

参考程序 #include Servo myservo; int pos = 0; void setup() { myservo.attach(9); } void loop() { for (pos = 0; pos myservo.write(pos); delay(15); } } 实验二:电位器控制舵机(示例:Knob) 项目要求:

  实现电位器转动,带动舵机转动。

电路搭建

在这里插入图片描述

参考程序 #include //数控制舵机运行 Servo myServo; //新建一个舵机对象myServo const int servoPin=12; //设置舵机的连接引脚为12 const int potPin=A0; //设置电位器的连接引脚为A0 void setup() { myServo.attach(servoPin); //使用舵机库功能函数attach(),该函数的功能是告诉Arduino舵机连接到9数字引脚 } void loop() { int val = analogRead(potPin); val = map(val, 0, 1023, 0, 180); //将val从0~1023映射到0~180 myServo.write(val); //功能函数write(angle)功能是用于设定舵机旋转角度(angle),角度范围为0°~180° delay(100); //延迟时间,让舵机转动到位 } 实验三:串口控制舵机 项目要求:

  在串口监视器上输入角度后,舵机转动到指定的角度。

电路搭建

在这里插入图片描述

参考程序 #include const int servoPin = 9; //设置舵机引脚为9 Servo myServo; //创建Servo对象myServo int dataIndex = 0; //创建整数型变量,存储输入数据序列号 void setup() { myServo.attach(servoPin); Serial.begin(9600); //启动串口通讯,传输波特率9600 Serial.println("Please input serial data."); } void loop() { if ( Serial.available() > 0 ) { // 检查串口缓存是否有数据等待传输 int pos = Serial.parseInt(); // 解析串口数据中的整数信息并赋值给变量pos if (pos 180) { Serial.println("Wrong number,please input again"); } else { dataIndex++; // 处理数据序列号并通过串口监视器显示 Serial.print("dataIndex = "); Serial.print(dataIndex); Serial.print(" , "); Serial.print("Set servo position: "); Serial.println(pos); // 通过串口监视器显示变量pos数值 myServo.write(pos); // 使用pos变量数值设置伺服电机 delay(15); } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3