Arduino开发实战指南:机器人卷(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-23 07:24:22

点击下载

作者:黄文恺

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Arduino开发实战指南:机器人卷

Arduino开发实战指南:机器人卷试读:

前言

单片机中各种复杂的寄存器曾让众多的学习者望而生畏——要完成某项功能需要耗费大量的时间去熟悉单片机的底层。Arduino的诞生,改变了这一局面。Arduino将各种寄存器封装起来,并提供了易用的接口,极其简洁的界面,C语言编程方式,强大的第三方函数库支持,这些功能赋予其强大的生命力。目前市面上开始出现不少Arduino的学习教程,包括Android+Arduino的教程,但是和机器人应用开发相结合的书籍尚不多见。

机器人是一个典型的光机电算一体化系统,它融合了光学、机械、电子、传感器、计算机软硬件和人工智能等众多先进技术,是目前世界各国高校进行创新思维训练、创新技能训练、工程实践训练最理想的平台,吸引了无数爱好者参与其中。但由于机器人涉及的技术面比较广,门槛较高,往往让人觉得徒有热情,而不知从何下手。Arduino与机器人的结合改变了这一状况,使人们从海量的机器人相关基础知识中解放出来,能快速地实现设计者想要的功能,加速了机器人的研发。目前Arduino已经广泛应用于机器人、3D打印机、无人机等热门的科技项目。从笔者多年的机器人开发经验得出这样一条结论:学好Arduino对掌握机器人技术有较大的帮助。

很多基于Arduino的传感器、机电控制模块、通信模块等已经在市场上大量涌现,但是目前还没有一本教材能系统地把机器人的各个部分与Arduino结合起来,并详细介绍Arduino在机器人设计上的应用,而且机器人更强调的是一种系统工程的设计理念,单个专业的技术层面较为狭窄,不利于机器人的研究和开发。笔者通过不断学习,查阅Arduino的相关资料,并将从事机器人设计与制作六年的工程经验带入到本书中。本书将机器人涉及的光机电算一体化知识进行了融合,让读者能更全面地了解机器人的相关知识,引发读者从多学科交叉的角度去思考与钻研,最终完成机器人的设计和制作。

本书主要内容及面向的读者

机器人的制作非常强调动手能力,本书以实际机器人的制作应用为基础,将制作机器人所需要的必备知识进行一一叙述。首先介绍Arduino的基础知识,接着介绍机器人的运动控制部分,然后介绍机器人的感知部件——传感器,再介绍无线控制的方法,并辅以实例来介绍机器人的制作,最后提供了两套机器人竞赛的平台,其中包含了机器人设计制作和比赛的完整规则。

由于机器人属于跨学科的领域,必须掌握多个学科的知识。本书虽涉及多个学科,但尽量以浅显易懂的语言描述相关知识,没有涉及太深的内容,阅读本书建议有一定的电子知识基础和C语言基础。

根据读者情况的不同,本书的阅读方式也不同。

如果读者完全没有接触过单片机和软件开发,笔者建议从头阅读本书,并借助相关的Arduino书籍来辅助理解,因为本书并不完全是Arduino的基础入门教程。如果读者已经有一定Arduino开发经验,可以直接跳过第一篇,而从第二篇开始学习,掌握各种电机的控制方法。由于传感器种类繁多,本书只挑选了一些机器人常用的传感器来介绍(第三篇),建议读者购买各种传感器套装来配合本书的学习,将传感器接在Arduino板上,亲身体验一下各种传感器的特点和使用方法。第四篇介绍了五种常用的无线通信模块,每种模块各有优劣,读者可以根据项目开发的需要选择所需模块。第五篇介绍了几种机器人的制作,读者可以通过边学边做,逐步掌握机器人的相关知识。第六篇是机器人竞赛篇,里面有两套机器人比赛的完整赛制及所用机器人的制作方法。主要机器人零件均使用3D打印机打印制作。读者可通过访问http://www.hzbook.com查找本书的相关链接,下载书中所有机器人实例的3D打印零件库源文件、程序源代码、地图及部分数据文档。读者可将机器人打印出来进行对抗赛,机械设计相关专业的学生可在本篇学习到机器人机械设计方法,并对零件进行改进。本篇提供的机器人竞赛规则,适合大专或本科院校组织和开展机器人比赛。

致谢

首先要感谢本书的策划编辑张国强先生,感谢他对本书的关心和帮助,提出了很多宝贵的写作建议,并对书稿进行了仔细审阅。

其次要感谢“广州市教育局青少年科技教育计划”对本书的撰写、器材的购买提供的资助。

还要感谢笔者的学生黄冠彬、叶景祥、唐华杰、王朋、李昇圳、王召、黄煜楠、纪孟廷、覃镇波和崔杰城,感谢他们将节假日贡献出来,完成了第15章和第16章的资料整理和程序调试工作。

最后要感谢读者朋友们。感谢您肯花费时间和精力阅读本书。由于时间有限,书中难免存在疏漏与错误,敬请批评指正。希望有更多志同道合的人能加入到机器人的制作中来!第一篇 Arduino入门篇第1章 Arduino简介1.1 认识Arduino

Arduino是一款源自意大利的开放源代码硬件项目平台,该平台是一块USB接口Simple I/O接口板(包括12通道数字GPIO,4通道PWM输出,6-8通道10bit ADC输入通道),并且使用类似Java、C语言的IDE(集成开发环境)。

Arduino的核心是基于AVR指令集的单片机,但它简化了单片机工作的流程,对AVR库进行了二次编译封装,将复杂的单片机底层代码封装成简单实用的函数,使用者无需关心单片机编程繁琐的细节,如寄存器、地址指针等,从而大大降低了单片机系统开发难度,特别适合老师、学生和业余爱好者使用。

Arduino系列控制器具有的特色如下:

1)开放源代码的电路图设计,程序开发接口免费下载,也可根据需求自行修改。

2)可以采用USB接口供电,也可以外部供电。

3)支持ISP在线烧写,可以将新的“bootloader”固件烧入Arduino的CPU芯片。有了bootloader之后,可以通过USB更新程序。

4)可依据官方提供的PCB和SCH电路图(Eagel格式)来简化Arduino模组,完成独立运作的微处理控制。可简单地与传感器、电子元件等连接,如红外线、光敏电阻、热敏电阻、超声波、舵机等。

5)支持多种互动程序,如:Flash、Max/Msp、VVVV、C、Processing等。

6)在应用方面,利用Arduino突破了以往只能使用鼠标、键盘、CCD等输入方式获取互动内容,而是可以更简单地达成单人或多人游戏互动。1.2 Arduino资源

Arduino的出现,大大降低了互动设计的门槛,越来越多没有学过电子知识的人,如艺术家、设计师等,开始使用Arduino制作各种充满创意的作品。为了满足不同应用领域的要求,Arduino设计了多款不同型号的开发板,如Arduino Duemilanove、Arduino Nano、Arduino mini、Arduino BT、Arduino Fio、Arduino Uno等。本书针对后面章节的需要,介绍Arduino Uno与Arduino Mega2560两种开发板。1.2.1 Arduino Uno开发板

Arduino Uno具有14个数字I/O口,6个模拟I/O口,一个复位开关,一个ICSP下载口,支持USB接口。其中,可通过USB接口直接供电,也可以使用单独的7~12V电源供电,具体的资源分配如图1.1所示。

Arduino Uno开发板的各引脚定义如下:

·数字引脚:0~13

·串行通信:0作为RX,接收数据;1作为TX,发送数据

·外部中断:2,3

·PWM输出:~3,~5,~6,~9,~10,~11

·SPI通信:10作为SS,11作为MOSI,12作为MISO,13作为SCK

·板上LED:13

·模拟引脚:A0~A5(在引脚号前加A,以区分数字引脚)

·TWI通信:A4作为SDA,A5作为SCL图1.1 Arduino Uno的资源1.2.2 Arduino Mega 2560开发板

与Arduino Uno相比,Arduino Mega2560的资源就丰富多了,它具有54个数字I/O口(其中14个可提供PWM输出),16个模拟I/O口,4对串行数据通信口(UART),一个复位开关,一个ICSP下载口,支持USB接口和直流电源供电,具体的资源分配如图1.2所示。图1.2 Arduino Mega2560的资源

Arduino Mega2560开发板的各引脚定义如下:

·数字引脚:0~53

·串行通信:提供4组串行通信端口,0(RX)和1(TX)作为串口1,19(RX)和18(TX)作为串口2,17(RX)和16(TX)作为串口3,15(RX)和14(TX)作为串口4

·外部中断:提供6个外部中断源,分别是2(外部中断0),3(外部中断1),21(外部中断2),20(外部中断3),19(外部中断4),18(外部中断5)

·PWM输出:0~13

·SPI通信:53作为SS,51作为MOSI,50作为MISO,52作为SCK

·板上LED:13

·模拟引脚:A0~A15(在引脚号前加A,以区分数字引脚)

·TWI通信:20作为SDA,21作为SCL1.3 安装Arduino Uno驱动

在应用Arduino开发环境进行程序设计前,首先要安装Arduino Uno控制板的驱动程序。本节介绍Arduino Uno驱动程序的常规安装方法,并对一种经常导致驱动安装不成功的情况给出了解决方法。1.3.1 常规Arduino Uno驱动程序安装方法

准备一块Arduino Uno控制板和一条USB连接线,当第一次将Arduino Uno板与电脑相连时,电脑上会出现“找到新的硬件向导”对话框,如图1.3所示,同时控制板上的电源指示灯被点亮。图1.3 “找到新的硬件向导”对话框

在图1.3中,选择“从列表或指定位置安装(高级)”,点击“下一步”,出现如图1.4所示的对话框。图1.4 在Arduino开发环境目录下找到驱动程序

选取Arduino开发环境目录下的drivers文件夹,点击“下一步”,完成驱动程序安装,如图1.5所示。

如图1.6所示,在设备管理器中查看新安装的Arduino Uno开发板通过USB转串口所对应的串口号为COM3。1.3.2 Arduino驱动安装过程出现的问题及解决方法

在上面步骤中,如果按照图1.4所示进行下一步操作后,弹出如图1.7所示的Arduino板驱动程序安装失败的对话框,可通过如下步骤来解决。图1.5 Arduino驱动程序安装完成图1.6 在设备管理器中查看USB转串口设备所对应的串口号图1.7 Arduino驱动程序安装失败

首先把文件mdmcpq.inf拷贝到系统盘(一般是C盘)Windows目录下的inf文件夹里面,其次把文件usbser.sys拷贝到C:\Windows\System32\drivers里面。这两个文件可从其他Windows系统中拷贝过来,或到网络上查找。

然后打开电脑的“设备管理器”对话框,如图1.8所示。

点击右键选中未被电脑识别的Arduino Uno,如图1.9所示,从弹出的快捷菜单中,选择“更新驱动程序”,将弹出如图1.10所示的“硬件更新向导”对话框,依照提示完成Arduino Uno驱动的安装。图1.8 Arduino Uno在设备管理器中的状态图1.9 更新Arduino Uno驱动程序图1.10 Arduino Uno硬件更新向导

按照图1.4的提示,完成Arduino Uno驱动程序更新,如图1.11所示。图1.11 Arduino Uno硬件更新成功1.4 Arduino开发环境

Arduino开发环境的主界面如图1.12所示,除了包含File(文件)、Edit(编辑)、Sketch(概述)、Tools(工具)、Help(帮助)这5类菜单外,在菜单栏下方还提供了5个常用的快捷菜单按钮,它们依次为Verify(校验)、Upload(上传)、New(新建)、Open(打开)、Save(保存)。图1.12 Arduino的开发环境

这5个快捷菜单按钮的具体功能如下::Verify(校验),用于完成程序的检查和编译。:Upload(上传),用于将编译完成后的程序上传到Arduino控制板中。:New(新建),用于新建一个Arduino程序文件。:Open(打开),用于打开一个已存在的Arduino程序文件,其文件后缀名为.pde,1.0版本以后的文件后缀名为.ino。:Save(保存),用于保存当前的程序文件。

下面以Arduino Uno开发板自带的LED灯闪烁的例子,来介绍利用Arduino进行单片机程序开发的具体流程。1.新建文件

点击New按钮后,新建一个空白的Arduino程序文件,其界面如图1.12所示。2.串口设置和Arduino控制板型号选择

Arduino控制板驱动程序安装完成后,在“我的电脑→设备管理器”中查看连接到电脑的Arduino板所对应的串口号,如图1.13所示,当前Arduino Uno板对应的串口是COM3。图1.13 在设备管理器中查看Arduino Uno板对应的串口号

点击“Tools→Serial Port”,在其下拉菜单中选择COM3,如图1.14所示,即完成当前设备的串口配置。图1.14 在Arduino开发环境选中Arduino Uno板对应的串口号

点击“Tools→Board”,在其下拉菜单中选择“Arduino Uno”,如图1.15所示,即完成当前控制板的型号选择。图1.15 在Arduino开发环境选中Arduino板的型号3.程序设计

在Arduino开发环境的程序编辑区中输入程序代码,如图1.16所示。图1.16 在Arduino的程序编辑区中编写程序源代码

从图1.1可知,Arduino Uno板上LED的引脚是13,则编写使该LED循环点亮-熄灭1秒的程序如下:

int led = 13;

void setup()

{

pinMode(led, OUTPUT);

}

void loop()

{

digitalWrite(led, HIGH); // LED

引脚置高电平

delay(1000); //

延时1s

digitalWrite(led, LOW); // LED

引脚置低电平

delay(1000); //

延时1s

}4.程序保存

程序输入完成后,在Arduino开发环境中点击“File→Save”菜单,在当前路径保存文件,或点击“File→Save As”将该文件另存在其他路径。5.程序编译

点击(Verify)按钮实现当前程序的编译,程序编译需要一点时间,等完成编译工作后,Arduino开发环境的状态栏会提示“Done compiling(程序已编译完成)”,同时信息提示栏会显示该程序进行编译后的大小,如图1.17所示,该程序编译后的大小为1084bytes。图1.17 对Arduino程序进行编译6.程序上传

点击(Upload)按钮将编译成功的程序上传到Arduino Uno控制板,在程序上传过程中,控制板的串口指示灯(RX和TX)会不停闪烁。程序上传完成后,Arduino开发环境的状态栏提示“Done uploading”,如图1.18所示,同时Arduino Uno控制板上的LED会不停闪烁。恭喜你,到此为止,通过一个简单的例子,你已经学会了使用Arduino。图1.18 上传程序到Arduino Uno控制板第2章 Arduino的基本函数

从第1章中我们已经初步了解了Arduino的易用性、自由性与交互性,然而它真正吸引众多爱好者是因为提供了大量的基础函数,包括I/O控制、时间函数、中断函数、数学函数、串口通信函数等,这些基础函数使单片机系统开发不再有复杂的底层代码,没有难懂的汇编语言,使用者可以方便地对板上的资源进行控制。另外,Arduino还提供了许多关于这些基础函数的示例程序,这些示例可以在Arduino开发环境的“File→Examples”菜单中找到,从而大大地降低了初学者的学习难度,缩短了单片机系统开发周期。2.1 数字I/O口的操作函数2.1.1 pinMode(pin, mode)

pinMode函数用于配置引脚为输入或输出模式,它是一个无返回值函数,一般放在setup里,先设置再使用。

pinMode函数有两个参数——pin和mode。pin参数表示要配置的引脚,以Arduino Uno为例,它的范围是数字引脚0~13,也可以把模拟引脚(A0~A5)作为数字引脚使用,此时编号为14脚(对应模拟引脚0)到19脚(对应模拟引脚5)。mode参数表示设置的模式——INPUT(输入)或OUTPUT(输出),其中INPUT用于读取信号,OUTPUT用于输出控制信号。

配置数字引脚3为输出模式的语句如下:

pinMode(3, OUTPUT);2.1.2 digitalWrite(pin, value)

digitalWrite函数的作用是设置引脚的输出电压为高电平或低电平,也是一个无返回值函数,在使用该函数设置引脚之前,需要先用pinMode将引脚设置为OUTPUT模式。

digitalWrite函数有两个参数——pin和value,pin参数表示所要设置的引脚,value参数表示输出的电压——HIGH(高电平)或LOW(低电平)。

配置数字引脚2的输出电平为高电平的语句如下:

pinMode(2, OUTPUT);

digitalWrite(2, HIGH);2.1.3 digitalRead(pin)

digitalRead函数的作用是获取引脚的电压情况,该函数返回值为int型——HIGH(高电平)或者LOW(低电平),在使用该函数设置引脚之前,需要先用pinMode将引脚设置为INPUT模式。

digitalRead函数只有一个参数——pin,它表示所要获取电压情况的引脚号,如果引脚没有连接到任何地方,那么将随机返回HIGH(高电平)或者LOW(低电平)。

获取数字引脚4的电压情况的语句如下:

pinMode(4, INPUT);

digitalRead(4);2.2 模拟I/O口的操作函数2.2.1 analogReference(type)

analogReference函数的作用是配置模拟输入引脚的基准电压(即输入范围的最大值),它是一个无返回值函数,只有一个参数type,type的选项有DEFAULT/INTERNAL/INTERNAL1V1/INTERNAL2V56/EXTERNAL,其具体含义如下。

·DEFAULT:默认5V或3.3V为基准电压(以Arduino板的电压为准)。

·INTERNAL:低电压模式,使用片内基准电压源(Arduino Mega无此选项)。

·INTERNAL1V1:低电压模式,以1.1V为基准电压(此选项仅针对Arduino Mega)。

·INTERNAL2V56:低电压模式,以2.56V为基准电压(此选项仅针对Arduino Mega)。

·EXTERNAL:扩展模式,以AREF引脚(0~5V)的电压作为基准电压,其中AREF引脚的位置如图2.1所示。图2.1 AREF引脚的位置

设置模拟输入引脚的基准电压为默认值的语句如下:

analogReference (DEFAULT);注意

使用AREF引脚上的电压作为基准电压时,需接一个5kΩ的上拉电阻,以实现外部和内部基准电压之间的切换。但总阻值会发生变化,因为AREF引脚内部有一个32kΩ电阻,接上拉电阻后会产生分压作用,因此,最终AREF引脚上的电压为,Varef为AREF引脚的输入电压。2.2.2 analogRead(pin)

analogRead函数的作用是从指定的模拟引脚读取值,读取周期为100μs,即最大读取速度可达每秒10000次。参数pin表示读取的模拟输入引脚号,返回值为int型(范围在0~1023)。

Arduino Uno主板有6个通道(Mega有16个)10位AD(模数)转换器,即精度为10位,返回值是0~1023。也就是说输入电压为5V的读取精度为5V/1024个单位,约等于每个单位0.049V(4.9mV)。输入范围和进度可通过analogReference()进行修改。

如输入电压为a,那么获取模拟输入引脚3的电压值的示例程序如下:

int potPin = 3;

int value = 0;

void setup()

{

Serial.begin(9600);

}

void loop()

{

value = analogRead(potPin) *a*1000/1023; //

输入电压是a

Serial.println(value); //

输出电压值的单位为mV

}注意

对Arduino Uno而言,函数参数的pin范围是0~5,对应板上的模拟口A0~A5。其他型号的Arduino控制板以此类推。2.2.3 analogWrite(pin,value)

analogWrite函数的作用是通过PWM的方式将模拟值输出到引脚,即调用analogWrite函数后,相应引脚将产生一个指定占空比的稳定方波(频率大约为490Hz),直到下一次调用该函数,可应用在LED亮度调节、电机速度控制等方面。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载