Arduino Uno 实验7——SG90舵机

2023-11-02

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.h>
Servo myservo;  
int pos = 0;   
void setup() {
  myservo.attach(9);  
}
void loop() {
  for (pos = 0; pos <= 180; pos += 1) { 
    myservo.write(pos);             
    delay(15);                      
  }
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);              
    delay(15);                       
  }
}

实验二:电位器控制舵机(示例:Knob)

项目要求:

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

电路搭建

在这里插入图片描述

参考程序
#include<Servo.h>  //数控制舵机运行
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 <Servo.h>

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 < 0 || 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);
    }
  }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arduino Uno 实验7——SG90舵机 的相关文章

  • 使用 pySerial 等待 Arduino 自动重置

    我正在尝试在 Linux 上使用非常简单的代码 为了展示问题 从 Arduino 板上读取行 Python代码 arduino py import serial arduino serial Serial dev ttyACM0 with
  • Arduino“SerialEvent”示例代码无法在我的 Arduino Nano 上运行。我无法接收串行数据。为什么?

    我正在按照教程进行操作串行事件 https www arduino cc en Tutorial BuiltInExamples SerialEvent我正在尝试这段代码 然而 当我发送我的Arduino 纳米 https en wikip
  • PySerial 从 Arduino 读取线路的延迟

    我正在使用带有基本 DigitalReadSerial 设置的 arduino uno 如下所述 http arduino cc en Tutorial DigitalReadSerial http arduino cc en Tutori
  • 经典蓝牙 (2.1) 设备可实现的最小数据包延迟是多少?

    我正在使用 RN42 http www microchip com wwwproducts en RN42 http www microchip com wwwproducts en RN42 蓝牙模块以 115200 波特率 UART S
  • Android BLE 扫描与 UUID 过滤器列表混淆

    我正在 Android 移动设备 A 上执行 UUID 过滤扫描 并且有两个测试用例 一个人在另一台 Android 设备 移动设备 b 上使用名为 BLE Scanner 的应用程序来创建具有两个测试服务 每个服务都有自己唯一的 UUID
  • sim800L GPRS 发布请求

    我一直在研究 LoNet 迷你 GSM 模块 SIM800L 并将其与 Arduino 连接 我已插入 SIM 移动卡并且可以连接互联网 通过串行监视器 我可以毫无问题地与它通信 但是当向网络服务器页面发出 GET 或 POST 请求时 它
  • 同时使用 GPRS 和 GSM

    我正在尝试使用 GSM GPRS 调制解调器的 GPRS 功能将数据发送到远程服务器 但我无法这样做 我在 Arduino 论坛上发布了一个问题 但没有得到任何回复 这是问题的链接 https robotics stackexchange
  • ESP32 Arduino-ide如何获取唯一id

    我试图自动为每个 esp32 设置一个唯一的 id 在我使用提供该方法的 ESP IDF 框架对设备进行编程之前esp efuse mac get default 这将返回一个 8 字节值 该值在我手上的所有设备上都是唯一的 在arduin
  • 终止导致设备或资源繁忙的进程:“/dev/ttyUSB0”?

    我使用以下 Python 代码连接到我的 Arduino 板 device glob glob dev ttyUSB 0 time sleep 1 arduino serial Serial device 115200 timeout 5
  • pySerial 与 python 2.7 和 3.4 的差异

    我正在开发一个项目 需要通过串口将一些数字从 Windows 10 中的 python 发送到 arduino uno 作为一个简单的测试 我只想通过发送 2 来打开 LED 并通过从命令提示符发送 4 来关闭 LED 尽管我希望最终能够将
  • Arduino 上的 Serial 和 Stream 有什么区别,Serial.write 是如何实现的?

    我很难理解串行和流这两个术语之间的区别 串行不是流的一种吗 我对作业有一些我不明白的问题 计算机通过使用 流或串行 读取 彼此发送的数据来确定每个字节的含义 Also Serial write 我也很困惑 它返回一个字节的数据 对吗 一个字
  • 如何在 Windows 上获取 Arduino 草图的汇编语言列表?

    我希望能够看到我的 Arduino 草图的汇编语言列表 我怎样才能实现这个目标 Update 我正在 Windows 机器上运行 Arduino 软件 一种方法是使用avr objdump on the elf构建创建的文件 例如 在 OS
  • 在链接时合并全局数组/从多个编译单元填充全局数组

    我想定义一系列的东西 比如事件处理程序 的内容 该数组在编译时是完全已知的 但定义在 多个编译单元 分布在多个库中 至少在最终 静态 链接之前是相当解耦的 我想要 也保持这种方式 因此添加或删除编译单元将 还可以自动管理事件处理程序 而无需
  • Arduino Nano 33 IoT 的软件序列号

    我计划从旧的 5V Arduino Nano 迁移到新的 Arduino Nano 33 IoT 我已经使用软件串行 SoftwareSerial h 为旧的 5V Arduino Nano 编写了一个功能代码 以便与 Sim800L 模块
  • 无法将 minicom 的输出保存到文件中

    当我使用Minicom从串口捕获数据时 我需要将大数据保存到一个文件中 名为minicom cap 但是 如果我按 Ctrl A 和 L 来捕获文件 则失败 没有创建文件 minicom cap之前并不存在 我的下载目录已正确创建 我的操作
  • Arduino 错误:未命名类型?

    我已经编写了一个库 但遇到错误未命名类型的问题 我已经尝试了一切 搜索了几个小时 但没有运气 库放置在arduino sketch文件夹的 libraries 文件夹中 请帮忙 我使用的是 OSX 但 Windows 上也出现同样的问题 这
  • Arduino Uno 上传失败

    我收到了一个 arduino uno 和一些代码 作为我正在从事的项目的一部分 我以前从未与他们合作过 所以这对我来说是一次全新的体验 我正在使用他们网站上的 Arduino 应用程序 当我编译代码时 它工作正常 然而 当我上传时 我收到错
  • 云到设备 Azure IoT REST API

    我探索了如何使用 Azure REST API 将数据从设备发送到云 它运行无缝 没有任何问题 我没有找到有关使用 Azure IoT Hub REST API 向 Arduino 板发送云到设备消息的好文章 有人可以就此提供建议吗 您还可
  • 是否值得为 EEPROM 实现小型文件系统

    我买了一个I2C EEPROM 我想存储传感器和电压数据 我假设该值可以大于一个字节 并且可以有很多数据 在这种情况下是否值得实现具有小文件分配表的文件系统 例如 这会让我更容易查看 EEPROM 我发现 EEPROM 上出现 FAT 有两
  • Arduino 引导加载程序

    有人可以解释一下如何Arduino引导加载程序 http code google com p arduino source browse tags 0019 hardware arduino bootloaders atmega ATmeg

随机推荐

  • 以太坊教程:入门学习开发以太坊dapp

    一 区块链 1 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构 没有发行机构 也不可能操纵发行数量 既然没有中心化的信用机构 在电子货币运行的过程中 也势必需要一种机制来认可运行在区块链上的行为 包括比特币的运营 亦或是运行在区
  • 【pytorch】Module.parameters()函数实现与网络参数管理

    我们知道可以通过Module parameters 获取网络的参数 那这个是如何实现的呢 我先直接看看函数的代码实现 def parameters self r Returns an iterator over module paramet
  • Edge插件之WeTab,画面优美,可以免费使用chatgpt,很难不爱

    目录 一 普通的edge新标签页 二 安装WeTab插件 1 WeTab插件的安装非常简单 只需在百度搜索wetab 进入官网 2 进入官网 点击edge图标 进入插件下载页面 3 这里由于我是已经安装成功 显示的是删除和启动 首次下载的话
  • element-ui el-tooltip 显示导致父元素 hover 失效问题解决

    添加如下css属性 el tooltip popper pointer events none pointer events 属性用于设置元素是否对鼠标事件做出反应 CSS 语法 属性值 pointer events auto 默认值 设置
  • maven3.8.2版本导致openjdk.jar包报错:Cannot find file

    真的吐血了快 又是maven问题 导致项目打包报错 maven问题梅开二度 我醉了呀 问题描述 在idea中使用Terminal终端 对项目进行打包 然后报错 报错信息 ERROR Failed to execute goal on pro
  • IAR使用技巧

    一 状态栏的解析 Compile 只对目前打开的c文件进行语法检查 不对它进行link Make 对工程所有打开的c文件进行语法检查和link 只编译有改动的文件或者设置变动的文件 Rebuild All 编译链接当前工程 不管文件或者设置
  • Stem教育究竟是什么性质

    STEM教育是中性的 是既可以为应试教育又可以为素质教育服务的工具和武器 用素质教育去引爆STEM教育 才能产生良性的的核裂变 格物斯坦小坦克来研究下stem教育究竟是什么性质 科学教育有一个不大不小的误区 以为 科学 教育就是教科学知识
  • 错误:reference to non-static member function must be called

    问题 今天刷牛客这道题的时候 题目描述 输入一个正整数数组 把数组里所有数字拼接起来排成一个数 打印能拼接出的所有数字中最小的一个 例如输入数组 3 32 321 则打印出这三个数字能排成的最小数字为321323 这是我的代码 class
  • rtx服务器修改登录端口,rtx服务器端口设置

    rtx服务器端口设置 内容精选 换一换 用户在MRS Manager界面配置监控指标转储后 转储失败时产生该告警 转储成功后 告警恢复 监控指标转储失败会影响上层管理系统无法获取到MRS Manager系统的监控指标 无法连接服务器 无法访
  • Python Utils

    在Python开发中 将常用功能封装成为接口 并放入Utils工具类中 直接调用 可以提升效率 常用的函数有 文件夹遍历 文件夹创建 文件读取 时间可读 时间统计 安全除法 双列表排序 配置读取 脚本路径 Numpy判空 文件夹遍历 遍历文
  • logistic_regression---python实现

    logistic regression 用python实现 一 理论知识 logistic 回归 虽然名字里有 回归 二字 但实际上是解决分类问题的一类线性模型 在某些文献中 logistic 回归又被称作 logit 回归 maximum
  • C语言——ASCII 码表及分类

    目录 一 分类 1 0 31 127 删除键 是控制字符 2 空白字符 3 可显示字符 二 ASCII 表 ASCII 定义了 128 个字符 一 分类 1 0 31 127 删除键 是控制字符 2 空白字符 空格 32 制表符 垂直制表符
  • javascript字符串操作常用方法

    一 操作方法 我们也可将字符串常用的操作方法归纳为增 删 改 查 增 增的意思并不是直接增添内容 而是创建字符串的一个副本 再进行操作 除了常用 以及 进行字符串拼接之外 还可通过concat concat 用于将一个或多个字符串拼接成一个
  • 关于centos7桥接模式上不了网的配置

    我在vmware里装了一下CentOS7 然后选桥接模式竟然连不上网了 我以前装完系统之后直接设置一下模式为桥接模式就可以上外网了 究竟是怎么回事 我查了一下资料之后才发现有个地方忘记配置了 那就是编辑里面的虚拟网络编辑器 接下来我们就重开
  • Python实现异方差检验(statsmodels)

    什么是异方差 摘自知乎https www zhihu com question 354637231 一句话 就是当随机扰动项和模型中的解释变量 自变量 存在某种相关性 就会出现异方差 即对于不同的样本点 随机误差项的方差不再是常数 而互不相
  • RequiredFieldValidator控件验证不能为空时报错多种解决方法以及问题分析

    最近在学asp net 在使用RequiredFieldValidator控件进行验证时 发现报错 界面控件如下图 点击完确定之后按理来说是要报不能为空的提示的但是却报错如下图 经过一番研究发现 也看了其他人的解决方案 总结如下 net 4
  • pytest自动化测试两种执行环境切换的解决方案

    一 痛点分析 在实际企业的项目中 自动化测试的代码往往需要在不同的环境中进行切换 比如多套测试环境 预上线环境 UAT环境 线上环境等等 并且在DevOps理念中 往往自动化都会与Jenkins进行CI CD 不论是定时执行策略还是迭代测试
  • 为什么要同时重写equals方法和hashCode方法(详解)

    在解释为什么要重写equals方法和hashcode方法时 我们要先了解一下这样重写的目的是什么 也让自己有一个思路 围绕这个思路去思考问题 能更好的整握其中的缘由 针对这个目的去思考为什么要去重写 重写的作用是什么 以及如何去重写它们 一
  • MySql SQL语句优化方法

    1 插入优化 当数据过大时 通过load函数上传 2 主键优化 页分裂 当数据乱序插入时 由于主键是按序排的 所以再插入时 当发现页的空间不够时 会通过重新开辟一个页 将原页中的数据拷贝进新的页中 并重新设定链表指针方向 页融合 当删除页内
  • Arduino Uno 实验7——SG90舵机

    SG90舵机简介 舵机是一种位置 角度 伺服的驱动器 适用于那些需要角度不断变化并可以保持的控制系统 主要是由外壳 电路板 驱动马达 直流电机 减速齿轮组 位置检测元件 控制电路 所构成 是一套自动 闭环 控制装置 所谓自动 闭环 控制就是