【雕爷学编程】Arduino动手做(154)---AFMotor电机扩展板模块3

news2024/11/15 10:01:02

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十四:L293D四路电机驱动扩展板 motor control shield 马达板 Adafruit Motor Shield模块 Arduino AFMotor 电机扩展板

在这里插入图片描述
使用Arduino AFMotor驱动四只直流电机

Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十四:L293D四路电机驱动扩展板 motor control shield 马达板 Adafruit Motor Shield模块 Arduino AFMotor 电机扩展板

 1、安装库:百度搜索“AFMotor库”— 下载 — 拷贝到Arduino-libraries 文件夹中

 2、实验之七:使用Arduino AFMotor驱动四只直流电机

*/

#include <AFMotor.h> // 本程序中使用AFMotor库

AF_DCMotor motor1(1); // 这4条语句的作用是建立4个直流电机对象,它们的名称分别是:motor1/2/3/4.

AF_DCMotor motor2(2); // 这四条语句括号中的数字代表各个电机对象所连接在AFMotor扩展板的电机端口号码。

AF_DCMotor motor3(3); // AF_DCMotor motor1(1); 代表motor1对象连接在AFMotor扩展板的M1端口上。

AF_DCMotor motor4(4); // AFMotor电机扩展板最多可以驱动4个直流电机,最少可以驱动1个直流电机。

void setup() {

 motor1.setSpeed(200); // 这4条语句的作用是通过setSpped库函数设置电机运行速度。

 motor2.setSpeed(200); // setSpped库函数中的参数是运行速度参数。

 motor3.setSpeed(200); // 运行速度参数允许范围是0~255。

 motor4.setSpeed(200); // 速度参数越大,运转速度越快。参数为0时电机停止转动。

 motor1.run(RELEASE); // 这4条语句的作用是让4个电机在启动时停止转动

 motor2.run(RELEASE); // run库函数允许使用的关键字参数有RELEASE、FORWARD、BACKWARD

 motor3.run(RELEASE); // 使用关键字RELEASE作为参数使用时,run库函数将会让扩展板停止提供电机运转动力

 motor4.run(RELEASE); // 电机旋转一旦失去动力就会自然的停止转动。

}

void loop() {

 motor1.run(FORWARD); // 这4条语句的作用是利用run库函数控制4个电机"正向"旋转。

 motor2.run(FORWARD); // 这里所谓的“正向”旋转只是一种说法,假如您发现电机旋转方向和您所要的“正向”不一致。

 motor3.run(FORWARD); // 您可以将电机的两个引线从扩展板上断开,然后交换顺序再接到扩展板接口上

 motor4.run(FORWARD); // 这时您会看到同样使用FORWARD关键字作为run库函数的参数,电机的旋转方向却反过来了。

 for (int i = 0; i <= 255; i++) { // 这里使用for循环语句控制4个电机速度由停止逐步加速,最终电机运转达到最大速度。

  motor1.setSpeed(i);     // 在for循环语句的作用下,setSpeed库函数的速度参数i由0逐渐增大,最终达到255。

  motor2.setSpeed(i);     // 因此电机运行速度也是由停止逐渐加速,最终达到最大速度。

  motor3.setSpeed(i);     // 对于一些模型电机来说,当速度参数小于一定数值以后就不能转动了。也就是说,也许您的电机

  motor4.setSpeed(i);     // 在速度参数在小于某一个速度参数数值的时候就无法转动了。这属于正常现象。

  delay(10);          // 具体这个最小值是多少,对于不同的电机来说是不同的。有的可能是50也有的可能是100。

 }                // 换句话说,很可能您的某一个直流电机在速度参数小于50的情况下就无法转动了。

 // 也可能您的另一个直流电机在参数100以下的情况下就无法转动了。

 for (int i = 255; i >= 0; i--) { // 这里使用for循环语句控制4个电机由最大旋转速度逐步减速最终停止旋转。

  motor1.setSpeed(i);     // 这一系列语句的操作与上一段for循环语句类似。唯一区别是上一段for循环控制速度参数i由0涨到255

  motor2.setSpeed(i);     // 而这一段语句控制速度参数i由255减小到0。同样您可能会发现当速度参数没有减小到零的时候,电机就已经

  motor3.setSpeed(i);     // 停止旋转了。这其中的原因在上一段for循环语句中已经介绍了。不在这里赘述了。

  motor4.setSpeed(i);

  delay(10);

 }

 motor1.run(BACKWARD); // 这4条语句的作用是利用run库函数控制4个电机"反向"旋转。

 motor2.run(BACKWARD); // 同样的,这里所谓的“反向”旋转也只是一种说法。这部分程序内容

 motor3.run(BACKWARD); // 与本程序33-36行中的内容十分类似。唯一区别就是使用了“BACKWARD”

 motor4.run(BACKWARD); // 关键字参数来通过库函数run控制电机“反向”旋转。

 for (int i = 0; i <= 255; i++) { // 利用for循环语句控制速度参数i由小到大

  motor1.setSpeed(i);     // 电机也会以“反向”旋转的方式由停止逐步达到最大速度

  motor2.setSpeed(i);

  motor3.setSpeed(i);

  motor4.setSpeed(i);

  delay(10);

 }

 for (int i = 255; i >= 0; i--) { // 利用for循环语句控制速度参数i由大到小

  motor1.setSpeed(i);     // 电机也会以“反向”旋转的方式由最大速度逐步减小到停止

  motor2.setSpeed(i);

  motor3.setSpeed(i);

  motor4.setSpeed(i);

  delay(10);

 }

 motor1.run(RELEASE);  // 这四条语句作用是使用关键字RELEASE作为run函数的参数。

 motor2.run(RELEASE);  // 在这种情况下,AFMotor扩展板将会停止为电机旋转提供动力。

 motor3.run(RELEASE);  // 电机也就会自然的停止转动。

 motor4.run(RELEASE);  // 本段程序后面的delay(1000)的作用就是让4个电机保持无旋转动力状态1秒钟

 delay(1000);

}

Arduino AFMotor 电机扩展板实验场景图

在这里插入图片描述
补充实验

实验之八:测试M1M2电机

Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十四:L293D四路电机驱动扩展板 motor control shield 马达板

 Adafruit Motor Shield模块 Arduino AFMotor 电机扩展板

 1、安装库:IDE—工具—管理库—搜索“Servo”—安装

 2、实验之八:测试M1M2电机

*/



#include <AFMotor.h>

AF_DCMotor motor1(1);

AF_DCMotor motor2(2);

void setup() {

 Serial.begin(9600);

 Serial.println("测试M1M2电机!");

 // turn on motor

 motor1.setSpeed(200);

 motor2.setSpeed(200);

 motor1.run(RELEASE);

 motor2.run(RELEASE);

}

void loop() {

 uint8_t i;

 Serial.println("正转");

 motor1.run(FORWARD);

 motor2.run(FORWARD);

 for (i = 0; i < 255; i++) {

  motor1.setSpeed(i);

  motor2.setSpeed(i);

  delay(10);

 }

 for (i = 255; i != 0; i--) {

  motor1.setSpeed(i);

  motor2.setSpeed(i);

  delay(10);

 }

 Serial.println("反转");

 motor1.run(BACKWARD);

 motor2.run(BACKWARD);

 for (i = 0; i < 255; i++) {

  motor1.setSpeed(i);

  motor2.setSpeed(i);

  delay(10);

 }

 for (i = 255; i != 0; i--) {

  motor1.setSpeed(i);

  motor2.setSpeed(i);

  delay(10);

 }

 Serial.println("断电一秒");

 motor1.run(RELEASE);

 motor2.run(RELEASE);

 delay(1000);

}


实验串口返回情况

在这里插入图片描述
AFMotor电机驱动扩展板使用图形编程

【mind+用户库】第三方库方案

先下载安装Mind+

链接:http://mindplus.cc/download.html

在这里插入图片描述

打开Mind+,进入“扩展”
在这里插入图片描述
进入“用户库”

在这里插入图片描述
在用户库中搜索“hockel”

在这里插入图片描述
添加的 AFMotor模块

在这里插入图片描述
AFMotor电机驱动扩展板积木列表

在这里插入图片描述
用图形编程驱动四只直流电机

在这里插入图片描述
在这里插入图片描述
实验之九:测试M1M2M3M4电机前进与后退

Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十四:L293D四路电机驱动扩展板 motor control shield 马达板 

Adafruit Motor Shield模块 Arduino AFMotor 电机扩展板

 1、安装库:百度搜索“AFMotor库”— 下载 — 拷贝到Arduino-libraries 文件夹中

 2、实验之九:测试M1M2M3M4电机前进与后退

*/



#include <AFMotor.h>

// 创建对象

AF_DCMotor motor1(1);

AF_DCMotor motor2(2);

AF_DCMotor motor3(3);

AF_DCMotor motor4(4);

// 主程序开始

void setup() {

}

void loop() {

 motor1.setSpeed(200);

 motor1.run(FORWARD);

 motor2.setSpeed(200);

 motor2.run(FORWARD);

 motor3.setSpeed(200);

 motor3.run(FORWARD);

 motor4.setSpeed(200);

 motor4.run(FORWARD);

 delay(2000);

  

 motor1.setSpeed(0);

 motor1.run(RELEASE);

 motor2.setSpeed(0);

 motor2.run(RELEASE);

 motor3.setSpeed(0);

 motor3.run(RELEASE);

 motor4.setSpeed(0);

 motor4.run(RELEASE);

 delay(1000);

  

 motor1.setSpeed(200);

 motor1.run(BACKWARD);

 motor2.setSpeed(200);

 motor2.run(BACKWARD);

 motor3.setSpeed(200);

 motor3.run(BACKWARD);

 motor4.setSpeed(200);

 motor4.run(BACKWARD);

 delay(2000);

  

 motor1.setSpeed(0);

 motor1.run(RELEASE);

 motor2.setSpeed(0);

 motor2.run(RELEASE);

 motor3.setSpeed(0);

 motor3.run(RELEASE);

 motor4.setSpeed(0);

 motor4.run(RELEASE);

 delay(1000);

}

实验开源仿真编程(Linkboy V4.62)

在这里插入图片描述
用这款电机驱动扩展板做了一辆麦克纳姆轮小车

在这里插入图片描述
麦克纳姆轮车子运动模式图

在这里插入图片描述
实验仿真编程(Linkboy V4.62)之二

在这里插入图片描述
使用
AFMotor电机扩展板的麦克纳姆轮小车(视频)

https://v.youku.com/v_show/id_XNTAzNDYyMzE1Mg==.html?spm=a2hzp.8253869.0.0

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

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

相关文章

数模混合项目:模拟跨数字走线注意事项

数模混合项目中&#xff0c;模拟在数字上走线是常有的事&#xff0c;这里需要注意几个点: 1.模拟电源在数字上走线影响不大&#xff0c;但尽量走top metal和AP层。 2.模拟高频线&#xff0c;尤其是时钟&#xff0c;尽量不要在数字上走线&#xff0c;非要走&#xff0c;最好下…

数据总线学习

为啥要数据总线 使用服务化方式发布&#xff0c;业务端和中间件完全解耦合。一处生产&#xff0c;处处消费设计理念。提供用户可定制的托管化通用消费方案&#xff08;如同步mysql到缓存&#xff0c;同步mysql到es&#xff0c;消费mysql到大数据等托管服务&#xff09; 特性 …

python configparser模块常用方法以及常见报错处理

configparser 是 Python 中一个用于处理配置文件的标准库&#xff0c;可以帮助你生成、读取和修改配置文件的内容 1. 生成配置文件 import configparser# 创建一个配置文件对象 config configparser.ConfigParser()# 添加配置项和值 config[Section1] {key1: value1, key2: …

java 科学计算库 Smile

官网 https://haifengl.github.io/ github https://haifengl.github.io/ 简介 统计机器智能和学习引擎&#xff0c;或者简称 Smile&#xff0c;是一个有前途的现代机器学习系统&#xff0c;在某些方面类似于 Python 的 scikit-learn。它是用 Java 开发的&#xff0c;也提供…

私域账号防范手册

微信为什么要养号吗&#xff1f;为什么会被封&#xff1f;是什么原理&#xff0c;怎么解封&#xff0c;这些你的了解吗&#xff1f; 来看看这篇文章&#xff0c;这些都能给你解答。

向日葵远程命令执行漏洞(CNVD-2022-10270) 漏洞复现

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 影响范围03 利用方式05 实战案例06 修复方案 01 漏洞描述 向日葵远程控制是一款面向企业和专业人员的远程pc管理和控制的服务软件。可以在任何有网络的情况下&#xff0c;轻松访问并控制…

Linux命令之nc命令

一、命令简介 nc是netcat的简写&#xff0c;是一个功能强大的网络工具&#xff0c;有着网络界的瑞士军刀美誉。nc命令在linux系统中实际命令是ncat&#xff0c;nc是软连接到ncat。nc命令的主要作用如下&#xff1a; 实现任意TCP/UDP端口的侦听&#xff0c;nc可以作为server以T…

vue3中的包装响应式数据ref、reactive、toRef、toRefs

一、ref Vue 3中拥有一个新的特性叫做ref&#xff0c;它是一个函数&#xff0c;用于包装响应式数据。与Vue 2的data选项不同&#xff0c;ref可以在普通JavaScript中使用&#xff0c;而不仅仅是在Vue组件中。ref可以将普通的JavaScript数据变成响应式的&#xff0c;这意味着当被…

Python接口自动化测试post请求和get请求,获取请求返回值

引言 我们在做python接口自动化测试时&#xff0c;接口的请求方法有get,post等&#xff1b;get和post请求传参&#xff0c;和获取接口响应数据的方法&#xff1b; 请求接口为Post时&#xff0c;传参方法 我们在使用python中requests库做接口测试时&#xff0c;在做post接口测试…

Go语言-数组和切片有什么异同?

slice 的底层数据是数组&#xff0c;slice 是对数组的封装&#xff0c;它描述一个数组的片段。两者都可以通过下标来访问单个元素。 数组是定长的&#xff0c;长度定义好之后&#xff0c;不能再更改。在 Go 中&#xff0c;数组是不常见的&#xff0c;因为其长度是类型的一部分…

2023年第一届证券基金行业先进计算峰会在沪成功召开

2023年7月7日&#xff0c;在中国计算机学会集成电路设计专委会、中国通信学会金融科技发展促进中心、中国电子工业标准化技术协会新一代计算标准工作委员会和证券基金信息技术创新联盟WG1工作组的指导下&#xff0c;由中科驭数主办的2023年第一届证券基金行业先进计算峰会在上海…

以太网电子产品高低温循环测试

参考标准&#xff1a;《GB/T 2423.22-2012 环境试验 第2部分&#xff1a;试验方法 试验N&#xff1a;温度变化》&#xff1a;试验用来确定元器件、设备或其他产品耐受环境温度快速变化的能力。 1、测试影响因素 温度变化试验用来确定一次或连续多次的温度变化对试验样品的影响…

linux报错 /bin/bash^M:解释器错误:没有那个文件或目录

在Linux中运行脚本时&#xff0c;会出现linux报错 /bin/bash^M:解释器错误:没有那个文件或目录。这是因为我们将在Windows下编写的脚本拷贝到Linux环境中运行时会出现运行不了的情况。主要还是Windows的换行符为\r\n,而Linux环境中的换行符号为\n。 解决方法有&#xff1a;  …

Java安全——基于密码的加密

Java安全 基于密码的加密 基于密码加密和SSL加密的区别 密码加密可以数据和密码分离传输SSL只限于在套接字空间传输的数据进行加密 SSL和密码加密 密码加密是指通过算法将原始信息转换成密文&#xff0c;只有知道相应密钥的人才能解密。Java中常用的密码加密算法包括MD5、SHA、…

Buffer Overflow缓冲区溢出和保护措施

缓冲区溢出是指当数据写入某个缓冲区&#xff08;buffer&#xff09;时&#xff0c;超出了为该缓冲区分配的内存空间&#xff0c;从而导致覆盖了相邻内存区域的情况。这种现象可能导致程序崩溃、数据损坏&#xff0c;甚至引发安全漏洞&#xff0c;允许攻击者利用这一漏洞执行恶…

Python程序开发——第十一章 图形用户页面编程

目录 一、图形用户界面与tkinter二、tkinter的根窗口&#xff08;一&#xff09;根窗口的创建&#xff08;二&#xff09;根窗口的基本方法 三、几何布局管理器&#xff08;一&#xff09;pack布局&#xff08;二&#xff09;grid布局&#xff08;三&#xff09;place布局 四、…

【Android】将手机屏幕投屏到电脑上控制的解决方案

有没有听说scrcpy呢&#xff0c;是投屏工具&#xff0c;通过它就可以实现把手机屏幕投屏到电脑上了&#xff0c;有此帮助&#xff0c;离实现目标更近了一步。 首先&#xff0c;去开源站点GitHub那里下载获取scrcpy 压缩包&#xff0c;根据自己的电脑系统选择下载即可&#xff…

NginxTomcat架构的动静分离和负载均衡

目录 一、Tomcat的多实例部署 1.创建 kgc 和 benet 项目目录和文件 2.修改 Tomcat 主配置文件 3.客户端浏览器访问验证 二、NginxTomcat负载均衡架构原理 2.1 Nginx负载均衡的主要配置 2.2 NginxTomcat负载均衡的优点 三、NginxTomcat负载均衡实验 1.部署Nginx 负载…

SNP受邀参加“赛意力量·全国行”相聚合肥,RISE with SAP

伴随着全球数字化程度的不断加深&#xff0c;IT和OT逐步走向原生融合&#xff0c;以价值链重构倒逼产业转型的结构升级趋势已日益明显。在旺盛的市场需求与机遇下&#xff0c;企业的IT投入涌现出爆发式增长态势&#xff0c;对于IT系统“高效支撑以保障业务先赢”的能力要求已不…

Linux——权限

1.Linux权限的概念 Linux权限是指用于限制对文件和目录的访问的安全机制。文件和目录的权限由三个部分组成&#xff1a;所有者权限、同组用户权限和其他用户权限。每个部分又包括读、写、执行三种权限。这些权限决定了用户能否对文件或目录进行读、写、执行等操作。 2.Linux…