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

舵机控制实验

  • 前言
  • 一、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+1myservo.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.hqwc.cn/news/131528.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则

JMS 也是一种消息机制 AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议 ★ RabbitMQ的核心概念 Connection&#xff1a; 代表客户端&#xff08;包括消息生产者和消费者&#xff09;与RabbitMQ之间的连接。 Channel&#xff1a; 连接内部的Channel。 Exch…

bash上下键选择选项demo脚本

效果如下&#xff1a; 废话不多说&#xff0c;上代码&#xff1a; #!/bin/bashoptions("111" "222" "333" "444") # 选项列表 options_index0 # 默认选中第一个选项 options_len${#options[]}echo "请用上下方向键进行选择&am…

【例题】逆波兰表达式求值(图解+代码)

【例题】逆波兰表达式求值(图解代码) 这里写目录标题 【例题】逆波兰表达式求值(图解代码)逆波兰表达式解释优点转换计算代码 题目描述 : 逆波兰表示法是一种将运算符&#xff08;operator&#xff09;写在操作数&#xff08;operand&#xff09;后面的描述程序&#xff08;算式…

Ubuntu16.04apt更新失败

先设置网络设置 换成nat、桥接&#xff0c;如果发现都不行&#xff0c;那么就继续下面操作 1.如果出现一开始就e&#xff0c;检查源&#xff0c;先换源 2.换完源成功之后&#xff0c;ping网络&#xff0c;如果ping不通就是网络问题 如果ping baidu.com ping不通但是ping 112…

汽车烟雾测漏仪(EP120)

【汽车烟雾测漏仪&#xff08;EP120&#xff09;】 此烟雾测漏仪专为车辆管道&#xff08;油道、气道、冷却管道&#xff09; 的泄露检测而设计。适用于所有轻型 汽车、摩托车、轻卡、游艇等。 【特点】 具有空气模式和烟雾模式。空气模式&#xff0c;无需烟雾&#xff0c;检测…

C进阶-自定义类型:结构体、枚举、联合

本章重点&#xff1a; 结构体&#xff1a; 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 结构体实现位段&#xff08;位段的填充&可移植性&#xff09; 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称…

VGG卷积神经网络实现Cifar10图片分类-Pytorch实战

前言 当涉足深度学习&#xff0c;选择合适的框架是至关重要的一步。PyTorch作为三大主流框架之一&#xff0c;以其简单易用的特点&#xff0c;成为初学者们的首选。相比其他框架&#xff0c;PyTorch更像是一门易学的编程语言&#xff0c;让我们专注于实现项目的功能&#xff0…

TCP/IP(十一)TCP的连接管理(八)socket网络编程

一 socket网络编程 socket 基本操作函数 bind、listen、connect、accept、recv、send、select、close 说明: 本文需要C语言、syscall系统调用、OS 操作系统支持,如果不了解可以暂时跳过备注&#xff1a; 知道对应库函数的更底层机制思考&#xff1a; socket函数与FIN、ACK等…

【Vue面试题十六】、Vue.observable你有了解过吗?说说看

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;Vue.observable你有了解…

vue3组件的通信方式

一、vue3组件通信方式 通信仓库地址:vue3_communication: 当前仓库为贾成豪老师使用组件通信案例 不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点。 比如:vue2组件通信方式 props:可以实现父子组件、子父组件、甚至兄弟组件通信 自定义事件:可…

【Kotlin精简】第2章 集合

1 简介 在 Kotlin 中集合主要分为可变集合与只读集合&#xff0c;其中可变集合使用 “Mutable” 前缀 集合类名表示&#xff0c;比如 MutableList、MutableSet、MutableMap 等。而对于只读集合就是和 Java 中集合类名是一致。 Java 中的 List 非 Kotlin 中的 List , 因为 Kot…

.NET 8 中的调试增强功能

作者&#xff1a;James Newton-King 排版&#xff1a;Alan Wang 开发人员喜欢 .NET 强大且用户友好的调试体验。您可以在您选择的 IDE 中设置断点&#xff0c;启动已经附加上调试器的程序&#xff0c;逐步执行代码并查看 .NET 应用程序的状态。 在 .NET 8 中&#xff0c;我们致…