Arduino程序设计(十四)舵机控制实验(SG90)

news2024/11/17 20:51:19

舵机控制实验

  • 前言
  • 一、SG90舵机
    • 1、SG90舵机简介
    • 2、硬件电路连线
    • 3、Servo库常用函数
  • 二、舵机实验
    • 1、舵机0°~180°来回转动
    • 2、串口控制舵机转动固定角度
  • 总结


前言

  • 本文介绍SG90舵机控制原理及实验,主要内容有:
  • 1、介绍SG90舵机;
  • 2、舵机0°~180°来回转动;
  • 3、串口控制舵机转动固定角度。

一、SG90舵机

在这里插入图片描述

1、SG90舵机简介

  • (1)舵机是一种位置(角度)伺服的驱动器。舵机只是一种通俗的叫法,其实质是一个伺服马达。在需要角度不断变化并可以保持的控制系统中应用广泛。如遥控机械人、飞机模型等。

  • (2)舵机的转动角度为0~180°,其内部结构包括电机,控制电路和机械结构三部分。电机有三根线引出,分别接VCC、GNG和信号线。

  • (3)舵机引出线的格式:棕、红、橙(棕色连接GND、红色连接VCC、橙色连接信号)。
    在这里插入图片描述

  • (4)参数介绍
    在这里插入图片描述

  • (5)舵机原理
    在这里插入图片描述

  • (6)舵机控制原理
    在这里插入图片描述

在这里插入图片描述

2、硬件电路连线

Arduino开发板引脚SG90舵机功能
GNDGND(棕色)负极
5VVCC(红色)正极
D9PWM(橙色)信号输入

3、Servo库常用函数

Servo库函数说明语法参数
servo.attach()设置Arduino舵机的引脚连接servo.attach(pin)pin:连接舵机数据线的Arduino引脚号
servo.write()控制舵机旋转;对于标准180°舵机,write()函数会将舵机轴旋转到相应的角度位置。servo.write(angle)angle:旋转角度数值;对于标准180°舵机,angle范围为0~180

二、舵机实验

1、舵机0°~180°来回转动

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)舵机0°~180°来回转动的电路图,如下图所示:
    在这里插入图片描述

  • (3)实现功能:舵机0~180°来回转动。

  • (4)注意:编译代码前,需要下载安装 Servo 库文件,并在程序中添加 #include <Servo.h> 头文件 。

代码实现:

//SG90舵机控制
//舵机0~180°来回转动

#include <Servo.h>            //加载文件库
int pos = 0;
int SG90 = 9;
Servo myservo;
 
void setup()
{
  myservo.attach(SG90, 500, 2500);          //修正脉冲宽度
}
 
void loop()
{
  for (pos = 0; pos <= 180; pos += 1) {       //pos+=1等价于pos=pos+1
    myservo.write(pos);
    delay(15);					
  }
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);
    delay(15); 					
  }
}
  • (5)实现现象(部分显示):

在这里插入图片描述

2、串口控制舵机转动固定角度

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)串口控制舵机转动固定角度的电路图,如下图所示:
    在这里插入图片描述

  • (3)实现功能:

  • ① 串口输入0,led0、led1、led2熄灭,舵机转动到0°,同时串口打印 “ 舵机转动到0° ” ;

  • ② 串口输入1,led0、led1熄灭,led2点亮,舵机转动到30°,同时串口打印 “ 舵机转动到30° ” ;

  • ③ 串口输入2,led0、led2熄灭,led1点亮,舵机转动到60°,同时串口打印 “ 舵机转动到60° ” ;

  • ④ 串口输入3,led1、led2点亮,led0熄灭,舵机转动到90°,同时串口打印 “ 舵机转动到90° ” ;

  • ⑤ 串口输入4,led1、led2熄灭,led0点亮,舵机转动到120°,同时串口打印 “ 舵机转动到120° ” ;

  • ⑥ 串口输入5,led0、led2点亮,led1熄灭,舵机转动到150°,同时串口打印 “ 舵机转动到150° ” ;

  • ⑦ 串口输入6,led0、led1点亮,led2熄灭,舵机转动到180°,同时串口打印 “ 舵机转动到180° ” 。

代码实现:

//SG90舵机控制
/*实验现象:
① 串口输入0,led0、led1、led2熄灭,舵机转动到0°,同时串口打印“舵机转动到0°”;
② 串口输入1,led0、led1熄灭,led2点亮,舵机转动到30°,同时串口打印“舵机转动到30°”;
③ 串口输入2,led0、led2熄灭,led1点亮,舵机转动到60°,同时串口打印“舵机转动到60°”;
④ 串口输入3,led1、led2点亮,led0熄灭,舵机转动到90°,同时串口打印“舵机转动到90°”;
⑤ 串口输入4,led1、led2熄灭,led0点亮,舵机转动到120°,同时串口打印“舵机转动到120°”;
⑥ 串口输入5,led0、led2点亮,led1熄灭,舵机转动到150°,同时串口打印“舵机转动到150°”;
⑦ 串口输入6,led0、led1点亮,led2熄灭,舵机转动到180°,同时串口打印“舵机转动到180°”。
*/

#include <Servo.h>

int led0 = 5;
int led1 = 6;
int led2 = 7;
int SG90 = 9;

Servo myservo;  //创建舵机对象

void setup() {
  myservo.attach(SG90, 500, 2500);
  pinMode(led0, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {

    char c = Serial.read();

    if (c == '0') {

      digitalWrite(led0, LOW);
      digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      myservo.write(0);
      Serial.println("舵机转动到0°");

    } else if (c == '1') {

      digitalWrite(led0, LOW);
      digitalWrite(led1, LOW);
      digitalWrite(led2, HIGH);
      myservo.write(30);
      Serial.println("舵机转动到30°");

    } else if (c == '2') {

      digitalWrite(led0, LOW);
      digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      myservo.write(60);
      Serial.println("舵机转动到60°");

    } else if (c == '3') {

      digitalWrite(led0, LOW);
      digitalWrite(led1, HIGH);
      digitalWrite(led2, HIGH);
      myservo.write(90);
      Serial.println("舵机转动到90°");

    } else if (c == '4') {

      digitalWrite(led0, HIGH);
      digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      myservo.write(120);
      Serial.println("舵机转动到120°");

    } else if (c == '5') {

      digitalWrite(led0, HIGH);
      digitalWrite(led1, LOW);
      digitalWrite(led2, HIGH);
      myservo.write(150);
      Serial.println("舵机转动到150°");

    } else if (c == '6') {

      digitalWrite(led0, HIGH);
      digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      myservo.write(180);
      Serial.println("舵机转动到180°");
      
    }
  }
}
  • (4)实现现象(部分显示):
  • ① 串口输入0,led0、led1、led2熄灭,舵机转动到0°,同时串口打印 “ 舵机转动到0° ” ;

在这里插入图片描述

  • ② 串口输入3,led1、led2点亮,led0熄灭,舵机转动到90°,同时串口打印 “ 舵机转动到90° ” ;

在这里插入图片描述

  • ③ 串口输入6,led0、led1点亮,led2熄灭,舵机转动到180°,同时串口打印 “ 舵机转动到180° ” 。

在这里插入图片描述

  • 拓展:PWM信号简介
    在这里插入图片描述

总结

  • 本文主要介绍SG90舵机的工作原理及两个舵机控制实验,通过上述学习,掌握使用Arduino库函数Servo控制舵机转动到指定角度,实现预设功能。

参考资料1: Arduino教程三—舵机
参考资料2: Arduino控制舵机详解(含代码)
参考资料3: arduino进阶之舵机使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1082995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android---java内存模型与线程

Java 内存模型翻译自 Java Memory Model&#xff0c;简称 JMM。它所描述的是多线程并发、CPU 缓存等方面的内容。 在每一个线程中&#xff0c;都会有一块内部的工作内存&#xff0c;这块内存保存了主内存共享数据的拷贝副本。但在 Java 线程中并不存在所谓的工作内存&#xff0…

发行版兴趣小组季度动态:Anolis OS 支持大热 AI 软件栈,引入社区合作安全修复流程

发行版兴趣小组&#xff08;Special Interest Group&#xff09; &#xff1a;旨在为龙蜥社区构建、发布和维护一个稳定的操作系统发行版。 秋天的季节&#xff0c;发行版兴趣小组在 AI、安全、国产 OS 领域同样也是硕果累累。一起来看一下第三季度发行版兴趣小组的成果总结有…

IPv4报文头部

1、version&#xff08;版本&#xff09;:用于标识封装是IPv4还是IPv6 2、IHL&#xff08;头部长度&#xff09;&#xff1a;描述了数据包头的内容长度 3、Type of service&#xff08;服务类型&#xff09;&#xff1a;用于标识DSCP或IP优先级&#xff0c;用于Qos识别 4、T…

野火开发板使用FlyMcu一键ISP下载时

1.ISP 一键下载 野火开发板使用FlyMcu一键ISP下载时&#xff0c;记得拔掉JTAG那个20针的东西&#xff0c;要不然一直芯片超时不连接。 bsp:9600&#xff0c;使用共写入2KB,进度100%,耗时16641毫秒。 bsp:115200&#xff0c;共写入2KB,进度100%,耗时2188毫秒。 bsp:115200&#…

[modern c++] 函数式编程与 std::ref

参考&#xff1a; std::ref, std::cref - cppreference.comhttps://en.cppreference.com/w/cpp/utility/functional/ref 正文&#xff1a; 如果不涉及函数式编程&#xff0c;那么基本上不需要使用到 std::ref &#xff0c; 这个功能式是用来解决函数式编程时入参只能进行值传…

ai语音机器人OKCC的空号检测

一、空号检测模块介绍 空号检测的原理&#xff1a;空号检测是利用现代通信技术和互联网技术结合而成&#xff0c;采用批量拨电话号码的方式&#xff0c;过滤空号、停机、无效号码。业内又称空号筛选、空号过滤。空号检测技术的成果是去除号码中的无效号码&#xff0c;包括…

代理IP端口是什么意思呢?

今天&#xff0c;咱们来聊聊一个小众但很有料的话题——代理IP端口&#xff0c;它可是你纵横互联网世界的好搭子哦&#xff01; 首先&#xff0c;我们得先弄明白&#xff0c;代理IP端口是个啥? 代理IP端口就像是通往网络世界的门票&#xff0c;是你和代理服务器之间的桥梁。…

“解锁1688商品详情接口:提升电商转化率的秘密武器!“

1688商品详情接口&#xff08;又称详情页API&#xff09;是一种供卖家使用的接口&#xff0c;可以让卖家通过该接口维护商品的详细信息&#xff0c;包括商品价格、图片、属性等等。 通过使用该接口&#xff0c;卖家可以在商品详情页中提供更加详尽、直观的商品描述&#xff0c…

总线带宽计算公式

原文连接&#xff1a;总线带宽计算公式&#xff08;解析&#xff09;-

Linux Shell 实现一键部署hfish

hfish前言 HFish是一款社区型免费蜜罐&#xff0c;侧重企业安全场景&#xff0c;从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发&#xff0c;为用户提供可独立操作且实用的功能&#xff0c;通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的能…

PromptScript:轻量级 DSL 脚本,加速多样化的 LLM 测试与验证

TL&#xff1b;DR 版本 PromptScript 是一个轻量级的 Prompt 调试用的 DSL &#xff08;Yaml&#xff09;脚本&#xff0c;以用于快速使用、构建 Prompt。 PromptScript 文档&#xff1a;https://framework.unitmesh.cc/prompt-script Why PromptScript &#xff1f; 几个月前&…

JAVA设计模式-装饰者模式

一.概念 装饰器模式(Decorator Pattern)&#xff0c;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰器模式比生成子类更灵活。 —-《大话设计模式》 允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属…

多列等高实现

预期效果 多列等高,左右两列高度自适应且一样,分别设置不同背景色效果预览: 分别由6种方法实现 1、使用padding + margin + overflow 实现多列等高效果,具有良好的兼容性; 2、border实现多列等高,左边框宽度为200px,左列浮动,伪元素清除浮动; 3、父元素线性渐变背景色…

Mac热门软件推荐Paste mac 中文激活版 剪切板工具

Paste for Mac是一款运行在Mac OS平台上的剪切板小工具。它拥有华丽的界面效果&#xff0c;并且每一条记录可显示&#xff08;预览&#xff09;文本、图片等记录的完整内容。此外&#xff0c;Paste for Mac可以记录最近指定条数的剪切板信息&#xff0c;方便用户随时调用&#…

L15D1 设备分类、设备号申请和注销

一、Linux设备分类 &#xff08;一&#xff09;linux的文件种类&#xff1a; -&#xff1a;普通文件&#xff1a;文件IOd&#xff1a;目录文件p&#xff1a;管道文件s&#xff1a;本地socket文件&#xff1a;网络编程l&#xff1a;链接文件c&#xff1a;字符设备b&#xff1a…

18__call__函数的调用

目录 把对象当成函数一样调用 吼吼~补充一个小的知识点哦~就是括号里的参数&#xff01; 具体的应用场景 原先一个实例化对象&#xff0c;并不会被调用&#xff0c;但是可以引入call class Person:pass pPerson() p() 这个时候引入__call__ 把对象当成函数一样调用 class…

PLC电梯控制系统

目录 PLC电梯控制系统 1电梯简介 1.1电梯的基本分类 1.1.1按用途分类 1.1.2 按驱动系统分类 1.2 电梯的型号 1.3电梯的主要参数及规格尺寸 1.4电梯控制技术 1.5常用交流调速电梯的特点 1.6电梯的工作原理 2 PLC可编程序控制器 2.1 PLC的起源与发展 2.2 PLC控制系统…

视频监控系统/安防视频平台EasyCVR广场视频细节优化

安防视频监控系统/视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频汇聚平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;可实现视频监控直播、视频轮播、…

二叉搜索树--查询节点-力扣 700 题

例题细节讲过(二叉搜索树的基础操作-CSDN博客)&#xff0c;下面给出递归实现 public TreeNode searchBST(TreeNode node, int val) {if(node null) {return null;}if(val < node.val) {return searchBST(node.left, val);} else if(node.val < val) {return searchBST(…

Iptabels的相关描述理解防火墙的必读文章

Iptabels是与Linux内核集成的包过滤防火墙系统&#xff0c;几乎所有的linux发行版本都会包含Iptables的功能。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器&#xff0c; 则Iptables有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。…