描述
开 本: 32开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302468363
本书是为对自动机器人感兴趣,却苦于没有足够知识、经验与技术开发设计的读者编写的。
“
第1章 Arduino快速入门
1-1 认识Arduino 2
1-2 Arduino硬件介绍 2
1-2-1 Duemilanove板 3
1-2-2 UNO板 3
1-2-3 Leonardo板 4
1-2-4 DUE板 4
1-2-5 Mini板 5
1-2-6 Micro板 5
1-2-7 Nano板 5
1-2-8 Mega 2560板 6
1-2-9 LilyPad板 6
1-2-10 Fio板 7
1-3 Arduino软件介绍 7
1-3-1 下载Arduino开发环境 7
1-3-2 安装Arduino板驱动程序 9
1-3-3 Arduino开发环境使用说明 13
1-3-4 执行第一个Arduino范例程序 14
1-4 Arduino语言基础 16
1-4-1 变量与常数 17
1-4-2 运算符 18
1-4-3 Arduino程序流程控制 24
1-4-4 数组 32
1-4-5 预处理命令 33
1-4-6 函数 34
1-4-7 Arduino常用函数 36
第2章 基本电路原理
2-1 电的基本概念 42
2-1-1 电荷 42
2-1-2 电压 43
2-1-3 电流 43
2-1-4 电阻 43
2-1-5 电能 44
2-1-6 功率 44
2-2 数字系统 44
2-2-1 十进制表示法 45
2-2-2 二进制表示法 45
2-2-3 十六进制表示法 45
2-2-4 常用进位转换 46
2-3 认识基本手动工具 46
2-3-1 面包板 47
2-3-2 电烙铁 48
2-3-3 剥线钳 49
2-3-4 尖嘴钳 49
2-3-5 斜口钳 50
2-4 认识万用表 50
2-4-1 电压的测量 51
2-4-2 电流的测量 51
2-4-3 电阻的测量 52
2-5 认识基本电子元件 52
第3章 自动机器人实习
3-1 认识机器人 56
3-2 认识自动机器人 56
3-3 认识自动机器人的部件 57
3-3-1 Arduino控制板 58
3-3-2 马达驱动模块 59
3-3-3 马达部件 60
3-3-4 万向轮 61
3-3-5 电源电路 62
3-3-6 杜邦线 65
3-3-7 Arduino周边扩展板 66
3-4 制作自动机器人 67
3-4-1 车体制作 68
3-4-2 行走原理 70
3-4-3 直线行走测试实习 73
3-4-4 转弯测试实习 74
第4章 红外线循迹自动机器人实习
4-1 认识红外线 78
4-2 认识红外线循迹模块 78
4-2-1 CNY70红外线模块 78
4-2-2 TCRT5000红外线模块 80
4-2-3 红外线循迹模块 82
4-2-4 红外线模块的数量 84
4-2-5 红外线模块排列的间距 85
4-3 认识红外线循迹自动机器人 85
4-4 制作红外线循迹自动机器人 87
第5章 红外线遥控自动机器人实习
5-1 认识无线通信 94
5-2 认识红外线发射模块 94
5-2-1 编码电路 94
5-2-2 载波电路与调制电路 97
5-3 认识红外线接收模块 97
5-3-1 红外线接收模块 98
5-3-2 IRremote.h函数库 98
5-4 认识红外线遥控自动机器人 101
5-5 制作红外线遥控自动机器人 105
第6章 手机蓝牙遥控自动机器人实习
6-1 认识蓝牙 110
6-2 认识蓝牙模块 110
6-2-1 蓝牙工作模式 112
6-2-2 蓝牙参数的设置 112
6-2-3 SoftwareSerial.h函数库 117
6-2-4 使用Arduino IDE设置蓝牙参数 118
6-3 认识手机蓝牙模块 121
6-4 认识手机蓝牙遥控自动机器人 123
6-5 制作手机蓝牙遥控自动机器人 128
6-5-1 手机蓝牙遥控App程序 128
6-5-2 修改手机蓝牙遥控App程序的界面设置 129
6-5-3 蓝牙遥控自动机器人的电路 133
第7章 RF遥控自动机器人实习
7-1 认识RF 138
7-2 认识RF模块 138
7-3 认识RF遥控自动机器人 142
7-4 制作RF遥控自动机器人 143
7-4-1 RF发射电路 144
7-4-2 RF遥控自动机器人电路 146
第8章 XBee遥控自动机器人实习
8-1 认识ZigBee 152
8-2 认识XBee模块 152
8-2-1 XBee扩展板 153
8-2-2 XBee配置的设置 153
8-3 认识XBee遥控自动机器人 156
8-4 制作XBee遥控自动机器人 156
8-4-1 XBee发射电路 156
8-4-2 XBee遥控自动机器人电路 159
第9章 加速度计遥控自动机器人实习
9-1 认识加速度计 164
9-2 认识加速度计模块 164
9-2-1 加速度计的g值灵敏度 164
9-2-2 倾斜角度与X、Y、Z三轴输出电压的关系 165
9-2-3 最大倾斜角度与X、Y、Z三轴输出电压的关系 165
9-3 认识加速度计遥控自动机器人 166
9-4 制作加速度计遥控自动机器人 167
9-4-1 加速度计遥控电路 167
9-4-2 XBee遥控自动机器人电路 170
9-5 认识手机加速度计 174
9-5-1 手机倾斜角度与X、Y、Z三轴输出值的关系 174
9-5-2 手机最大倾斜角度与X、Y、Z三轴输出值的关系 174
9-6 认识手机加速度计遥控自动机器人 175
9-7 制作手机加速度计遥控自动机器人 176
9-7-1 手机加速度计遥控App程序 176
9-7-2 蓝牙遥控自动机器人电路 180
第10章 超声波避障自动机器人实习
10-1 认识超声波 186
10-2 认识超声波模块 186
10-2-1 工作原理 187
10-2-2 物体定位 187
10-3 认识超声波避障自动机器人 188
10-3-1 工作原理 188
10-3-2 行走策略 189
10-4 制作超声波避障自动机器人 190
第11章 RFID导航自动机器人实习
11-1 认识声音 196
11-2 认识RFID 196
11-2-1 RFID读取器 197
11-2-2 RFID标签 198
11-3 认识RFID模块 199
11-3-1 125kHz低频RFID模块 199
11-3-2 13.56MHz高频RFID模块 200
11-4 认识RFID导航自动机器人 200
11-5 读取RFID标签序号 202
11-6 制作RFID导航自动机器人 204
第12章 Wi-Fi遥控自动机器人实习
12-1 认识计算机网络 214
12-1-1 局域网(LAN) 214
12-1-2 广域网(WAN) 215
12-1-3 无线局域网(WLAN) 216
12-2 认识以太网模块 218
12-3 制作以太网家电控制电路 218
12-4 认识Wi-Fi模块 225
12-4-1 官方Wi-Fi扩展板 226
12-4-2 兼容Wi-Fi扩展板 226
12-4-3 下载WiShield函数库 226
12-5 认识Wi-Fi遥控自动机器人 227
12-6 制作Wi-Fi遥控自动机器人 227
12-7 认识ESP8266 Wi-Fi模块 236
12-7-1 ESP8266 Wi-Fi功能AT命令 238
12-7-2 设置ESP8266模块参数 239
12-8 认识ESP8266 Wi-Fi遥控自动机器人 243
12-9 制作ESP8266 Wi-Fi遥控自动机器人 244
12-9-1 手机Wi-Fi遥控App程序 244
12-9-2 ESP8266 Wi-Fi遥控自动机器人电路 249
附录A 实习材料表
A-1 如何购买本书材料 258
A-2 全书实习材料表 258
A-3 各章实习材料表 259
A-3-1 第3章实习材料表 259
A-3-2 第4章实习材料表 260
A-3-3 第5章实习材料表 260
A-3-4 第6章实习材料表 261
A-3-5 第7章实习材料表 261
A-3-6 第8章实习材料表 262
A-3-7 第9章实习材料表 263
A-3-8 第10章实习材料表 264
A-3-9 第11章实习材料表 265
A-3-10 第12章实习材料表 265
附录B 刻录ATmega开机引导程序
B-1 认识引导程序(Bootloader) 268
B-2 认识Arduino UNO板引脚 268
B-3 使用ArduinoISP烧录ATmega引导程序 270
附录C Arduino自动机器人组装说明
C-1 自动机器人车体的组装 276
C-2 Arduino控制板和原型扩展板的组装 279
C-3 超声波模块和伺服马达的组装 281
C-4 红外线循迹模块的组装 283
杨明丰
11-1 认识声音11-2 认识RFID11-3 认识RFID模块11-4 认识RFID导航自动机器人11-5 读取RFID标签序号11-6 制作RFID导航自动机器人
11-1 认识声音声音是一种波动,声音的振动会引起空气分子有节奏的振动,使周围的空气产生疏密变化,形成疏密相间的纵波,因而产生了声波。人耳可以听到的声音频率范围在20Hz~20kHz之间。如图11-1所示为常用的声音输出设备蜂鸣器(buzzer)和扬声器(loudspeaker)。如图11-1(a)所示的蜂鸣器可以分为有源蜂鸣器和无源蜂鸣器两种,有源又称为自激式,内含驱动电路,必须加直流电压,而且只能产生单一固定频率的声音输出。无源又称为他激式(或被激式),没有内部驱动电路,不同频率的交流信号可以产生不同频率的声音输出。如图11-1(b)所示的扬声器也称为喇叭,输出功率比蜂鸣器大,音质也较蜂鸣器好,但价格较高。 (a) 蜂鸣器 (b) 扬声器
图11-1 声音输出设备图11-2所示为声音信号,图11-2(a)所示是正弦波为组成声音的基本波形,声音的音量与其振幅Vm成正比;声音的音调与其周期T成反比;声音的发音长度与其输出时间长度成正比。在数字电路中经常使用图11-2(b)所示的方波来模拟正弦波,方波是由奇次谐波(harmonic)所组成的,奇次谐波频率为基本波频率的奇数倍,奇次谐波的数量越多,波形越接近方波。因数字电路带宽有限,只能以有限带宽来合成方波。 (a) 正弦波 (b) 方波
图11-2 声音信号11-2 认识RFID射频识别(Radio Frequency IDentification,RFID)又称为电子标签,是一种通信技术。RFID系统包含天线(antenna或coil)、读取器(reader)和RFID标签(Tag)3个部分。RFID的工作原理是利用传感器发射无线电波,去触发感应范围内的RFID标签。RFID标签借助电磁感应产生电流,来驱动RFID标签上的IC芯片的运行,并且利用电磁波返回RFID标签序号。RFID是一种非接触式、短距离的自动识别技术,RFID读取器识别RFID标签完成后,会将数据传到系统端进行追踪、统计、核查、结账、存货控制等处理。RFID技术被广泛运用于各种行业中,如门禁管理、货物管理、防盗应用、联合票证、动物监控追踪、仓储物料管理、医疗病历系统、卖场自动结账、自动控制、员工身份识别、生产流程追踪、高速公路自动收费系统等。RFID具有小型化、多样化、可穿透性、可重复使用、高环境适应性等优点。表11-1所示为RFID的频率范围,可分为低频(LF)、高频(HF)、超高频(UHF)和微波4种。低频RFID主要应用于门禁管理,高频RFID主要应用于智能卡,而超高频RFID不开放,主要应用于卡车或拖车追踪等,微波RFID则应用于高速公路电子收费系统(Electronic Toll Collection,ETC)。超高频RFID和微波RFID采用主动式标签,通信距离最长可达10~50米。表11-1 RFID的频率范围频段命名 频段 常用频率 通信距离 传输速度 标签价格 主要应用低频 9~150kHz 125kHz 小于等于10cm 低速 0.2元 门禁管理高频 1~300MHz 13.56MHz 小于等于10cm 低中速 0.1元 智能卡超高频 300~1200MHz 433MHz 大于等于1.5m 中速 1元 卡车追踪微波 2.45~5.80GHz 2.45GHz 大于等于1.5m 高速 5元 ETC
11-2-1 RFID读取器RFID读取器通过无线电波来存取RFID标签上的数据。按其存取方式可分成RFID读取器和RFID读写器两种。RFID读取器内部组成包含电源电路、天线、微控制器、接收器和发射器等。发射器负责将信号和交流电源通过天线发送给RFID标签。接收器负责接收RFID标签所回传的信号,通过近距离无线通信(Near Field Communication,NFC,或称为近场通信)技术将信号转交给微控制器处理。RFID读取器除了可以读取RFID标签内容外,也可以将数据写入RFID标签中。按照其功能可分成图11-3(a)所示的固定型读取器(stationary reader)和图11-3(b)所示的手持式读取器(handheld reader)两种类型,各有其用途。固定型读取器的数据处理速度快、通信距离较长、覆盖范围较大,但机动性较低。手持式读取器的机动性较高,但通信距离较短、覆盖范围较小。 (a) 固定型读取器 (b) 手持式读取器
图11-3 RFID读取器11-2-2 RFID标签图11-4所示的RFID标签,按其种类可以分成贴纸型、卡片型和钮扣型等。如图11-4(a)所示为贴纸型RFID标签,采用纸张印刷,常应用于物流管理、防盗管理、图书馆管理、供应链管理等。卡片型和钮扣型RFID标签采用塑料包装,常应用于门禁管理、大众运输等。 (a) 贴纸型 (b) 卡片型 (c) 钮扣型
图11-4 RFID 标签种类图11-5所示为RFID标签的内部电路,由微芯片(microchip)和天线所组成。微芯片存储唯一的序号信息,而天线的功能用于感应电磁波和发送RFID标签序号。较大面积的天线所能感应的范围较远,但所占的空间较大。 (a) 卡片型 (b) 钮扣型
图11-5 RFID 标签的内部电路RFID标签按其驱动能量的来源可分为被动式、半主动式和主动式3种。被动式RFID标签本身没有电源,所需电流全靠RFID读取器的无线电磁波利用电磁感应原理所产生。只有在接收到RFID读取器所发出的信号,才会被动地响应信号给读取器,因为感应电流较小,所以通信距离较短。半主动式RFID标签的规格类似于被动式,但多了一颗小型电池,若RFID读取器所发出的信号微弱,RFID标签还是有足够的电力将其内部存储器的数据回传到读取器。半主动式RFID标签比被动式RFID标签的反应速度更快、通信距离更长。主动式RFID标签内置电源用来供应内部IC芯片所需的电能,主动传送信号供读取器读取,电磁波信号较强,因此通信距离最长。另外,主动式RFID标签有较大的内存容量可用来存储RFID读取器所发送的附加信息。11-3 认识RFID模块常用的RFID模块有125kHz低频RFID模块和13.56MHz高频RFID模块两种。前者使用125kHz低频载波通信,主要应用于门禁管理,后者使用13.56MHz高频载波通信,主要应用于智能卡、门禁管理、员工身份识别等,两者无法通用。11-3-1 125kHz低频RFID模块图11-6所示为Parallax公司所生产的125kHz低频RFID模块,使用标准串行通信接口,输出TTL电位,工作电压为5V,最大传输速率为2400bps,通信距离在10厘米以内。通信协议为8个数据位、无同步位(或起始位)和1个停止位的8N1格式。125kHz低频RFID模块所读取的RFID标签序号包含10个字节的数据。 (a) 模块外观 (b) 引脚图
图11-6 低频125KHz RFID模块因为125kHz低频RFID模块与Arduino控制板都是使用串行通信接口,在Arduino控制板上传程序时可能会相冲突而造成宕机。因此,在每次要上传程序到Arduino控制板之前,必须先将RFID模块串口的输出SOUT引脚与Arduino控制板的连接移除,待上传程序代码结束后,再将SOUT引脚接回Arduino板的数字引脚0(RX)。若觉得麻烦,也可以直接使用SoftwareSerial函数设置RFID模块使用软件串口。11-3-2 13.56MHz高频RFID模块图11-7所示为NXP公司所生产的13.56MHz高频RFID模块,使用SPI通信接口,输出TTL电位,工作电压为3.3V,最大传输速率10Mbps,通信距离在6厘米以内。13.56MHz高频RFID模块所读取的RFID标签序号包含5个字节的数据。 (a) 模块外观 (b) 引脚图
图11-7 高频13.56MHz RFID模块13.56MHz高频RFID模块内部使用Philips公司生产的MFRC522原装芯片,所需函数库可到官方网站https://github.com/miguelbalboa/rfid下载。进入如图11-8所示的官方网站后,单击右下角的下载按钮,下载压缩文件MFRC522.ZIP。下载并且解压缩后,将其存放在Arduino/libraries目录下。下载完成后,可以将MFRC522文件夹、MFRC522.cpp和MFRC522.h这3个文件更名为RFID文件夹、RFID.cpp和RFID.h,这样比较容易识别。
图11-8 RFID-RC522函数库的下载页面11-4 认识RFID导航自动机器人所谓RFID导航自动机器人,是指利用RFID标签来定位自动机器人当前的位置,并按RFID标签所定义的内容,来控制车子执行前进、后退、右转、左转和停止等行走动作。在第4章所述的红外线循迹自动机器人必须运行在黑色或白色的轨道上,而且轨道必须事先铺设完成。使用RFID技术进行自动机器人的导航,与红外线循迹技术相似,但是轨道颜色不要求,要更改自动机器人的行走路线也比较容易而且更有弹性。本章使用被动式RFID标签,每一个RFID标签都有一组独一无二的标签序号,必须先使用RFID-RC522模块来读取RFID标签序号并将其编码为前进、后退、右转、左转和停止等行走动作。图11-9所示为RFID导航自动机器人的行走情况,黑色轨道只是说明RFID导航自动机器人行走情况,实际上并不存在。在图中的导航轨道实际上是使用3张“前进标签(Tag)”、4张“左转标签(Tag)”和1张“右转标签(Tag)”共8张RFID标签所组成的。RFID导航自动机器人并没有实际的“黑色”行走轨道,完全是由RFID标签来控制。因此RFID标签放置的位置必须按实际车速和RFID-RC522模块的感应速度来调整位置,才能得到正确的运行轨道。
图11-9 RFID导航自动机器人的行走情况当自动机器人行进至位置A时,感应到“前进标签”,自动机器人向前行走。当自动机器人行进至位置B时,感应到“左转标签”,自动机器人就左转。当自动机器人左转行进至位置C时,感应到“前进标签”,自动机器人就向前行走。当自动机器人行进至位置D时,感应到“左转标签”,自动机器人就左转。当自动机器人左转行进至位置E时,感应到“前进标签”,自动机器人就向前行走。当自动机器人行进至位置F时,感应到“左转标签”,自动机器人就左转。当自动机器人左转行进至位置G时,感应到“右转标签”,自动机器人就右转。当自动机器人右转行进至位置H时,感应到“左转标签”,走机器人就左转。当自动机器人左转行进至位置A时,感应到“前进标签”,走机器人就向前行走,因此自动机器人可以重复行走在所设置的轨道上。如表11-2所示为RFID导航自动机器人行走的控制策略。表11-2 RFID导航自动机器人行走的控制策略RFID 标签 控制策略 左轮 右轮前进标签 前进 反转 正转后退标签 后退 正转 反转右转标签 右转 反转 停止左转标签 左转 停止 正转停止标签 停止 停止 停止
11-5 读取RFID标签序号图11-10所示为RFID标签读取机的电路接线图,包含13.56MHz高频RFID模块、声音模块、Arduino控制板3个部分。
图11-10 RFID标签读取器的电路接线图1. 13.56MHz高频RFID模块Arduino控制板使用数字引脚10~13作为SPI接口的SS、MOSI、MISO和SCK引脚,将其与RFID模块相对应的引脚连接。并由Arduino控制板的 5V供电给RFID模块。2. 声音模块声音模块使用他激式蜂鸣器,可以由Arduino控制板输出不同频率的交流信号来控制蜂鸣器产生不同音调的声音。将蜂鸣器的正端连接到Arduino控制板数字引脚3,蜂鸣器的负端连接到Arduino控制板GND引脚。当读取到RFID标签序号时,蜂鸣器会发出短哔声。3. Arduino控制板Arduino控制板为控制中心,控制RFID模块读取RFID标签序号,并将其显示在“串口监视器”窗口中。? 功能说明:使用RFID模块读取RFID标签序号,并且将RFID标签序号以十进制数值显示在Arduino IDE的“串口监视器”窗口中。程序: ch11_1.ino#include //使用SPI.h函数库。#include //使用RFID.h函数库。const int speaker=3; //喇叭连接到Arduino控制板数字引脚3。const int RST_PIN=9; //RFID模块RST脚连接到数字引脚9。const int SS_PIN=10; //RFID模块SDA脚连接到数字引脚10。RFID rfid(SS_PIN,RST_PIN); //设置RFID模块的RST、SDA数字引脚。//设置初值void setup(){ Serial.begin(9600); //设置串口速率为9600bps。 SPI.begin(); //初始化SPI通信接口。 rfid.init(); //初始化RFID通信接口。} //主循环void loop(){ if(rfid.isCard()) //感应到RFID 标签? { if(rfid.readCardSerial()) //已读到RFID 标签的5个序号? { Serial.print(rfid.serNum[0],DEC); //显示标签序号的第1个数字。 Serial.print(“ “); Serial.print(rfid.serNum[1],DEC); //显示标签序号的第2个数字。 Serial.print(“ “); Serial.print(rfid.serNum[2],DEC); //显示标签序号的第3个数字。 Serial.print(“ “); Serial.print(rfid.serNum[3],DEC); //显示标签序号的第4个数字。 Serial.print(“ “); Serial.print(rfid.serNum[4],DEC); //显示标签序号的第5个数字。 Serial.println(“”); tone(speaker,1000); //产生1kHz单音50毫秒。 delay(50); noTone(speaker); //关闭蜂鸣器输出。 } rfid.halt(); //RFID标签读取器进入待命状态。 delay(1000); //延迟1秒后再读取RFID 标签。 } }
1. 设计Arduino程序,使用RFID模块读取RFID标签序号,并且将RFID标签序号以十六进制数值显示在Arduino IDE的“串口监视器”窗口中。2. 设计Arduino程序,使用RFID模块读取“公交智能卡”的标签序号,并以十进制数值显示在Arduino IDE的“串口监视器”窗口中。
11-6 制作RFID导航自动机器人图11-11所示为RFID导航自动机器人的电路接线图,包含13.56MHz高频RFID模块、声音模块、Arduino控制板、马达驱动模块、马达部件和电源电路6个部分。
图11-11 RFID导航自动机器人的电路接线图1. 13.56MHz高频RFID模块Arduino控制板使用数字引脚10~13作为SPI接口的SS、MOSI、MISO和SCK引脚,与RFID模块相对应的引脚互相连接,由Arduino控制板板的 5V供电给RFID模块。 2. 声音模块声音模块使用他激式蜂鸣器,可以由Arduino控制板输出不同频率的交流信号来控制蜂鸣器产生不同音调的声音。将蜂鸣器的正端连接到Arduino控制板数字引脚3,蜂鸣器的负端连接到Arduino控制板GND引脚。3. Arduino控制板Arduino控制板为控制中心,控制RFID模块读取RFID标签序号,并按照序号所设置的自动机器人控制码来驱动左、右两组减速直流马达,使自动机器人能够正确行走在预先规划的轨道上。4. 马达驱动模块马达驱动模块使用L298驱动芯片来控制两组减速直流马达,其中IN1、IN2输入信号控制左轮转向,而IN3、IN4输入信号控制右轮转向。另外,Arduino控制板输出两组PWM信号连接到ENA和ENB,分别控制左轮和右轮的转速。因为马达有最小的启动扭矩电压,所输出的PWM信号平均值不可太小,以免无法驱动马达转动。PWM信号只能微调马达转速,如果需要较低的转速,可以改用较大减速比的减速直流马达。5. 马达部件马达部件包含两组300rpm/min(测试条件为6V)的金属减速直流马达、两个固定座、两个D型接头43mm橡皮车轮和一个万向轮,橡皮材质的轮子比塑料材质的轮子摩擦力大而且易于控制。6. 电源电路电源模块包含4个1.5V一次性电池或4个1.2V充电电池及DC-DC升压模块,调整DC-DC升压模块中的SVR1可变电阻,使输出升压至9V,再将其连接到Arduino控制板和马达驱动模块以给它们供电。如果使用的是两个3.7V的18650锂电池,就不需要再使用DC-DC升压模块了。每个容量2000mAh的1.2V镍氢电池的售价约18元,每个容量3000mAh的18650锂电池的售价约50元。? 功能说明:使用RFID标签来控制RFID导航自动机器人按顺时针方向行走在如图11-12所示的轨道上。每次感应到RFID标签时,蜂鸣器都会发出提示的短哔声以提醒人员,自动机器人同时会变换行进方向。自动机器人的车速不可以太快,否则无法正确感应到RFID标签。另外,RFID标签必须预放置于预先规划的运行轨道上。
图11-12 RFID导航自动机器人的顺时针行走的轨道 程序:ch11_2.ino#include //使用SoftwareSerial.h函数库。#include //使用RFID.h函数库。const int speaker=3; //蜂鸣器连接Arduino控制板数字引脚3。const int RST_PIN=9; //RFID模块RST引脚连接数字引脚9。const int SS_PIN=10; //RFID模块SDA引脚连接数字引脚10。boolean exact=true; //RFID序号判断位。int serNum[5]; //所读取的RFID标签序号的存储位置。int temp[5]; //所读取的RFID标签序号的临时存储位置。int cardNo=-1; //RFID标签控制码。const int count=8; //使用8张RFID标签。const int tagLen=5; //每张RFID标签有5个数字的序号。int card[count][tagLen]= { {148,174,192, 14,244}, //前进标签,cardNo=0。 { 90,115,236,164, 97}, //右转标签,cardNo=1。 {194, 31,236,164,149}, //前进标签,cardNo=2。 {160,230,233,132, 43}, //右转标签,cardNo=3。 {140,174,234,132, 76}, //前进标签,cardNo=4。 {121,234,233,132,254}, //右转标签,cardNo=5。 {150,112,233,132,139}, //前进标签,cardNo=6。 { 93, 47,234,132, 28} //右转标签,cardNo=7。 }; RFID rfid(SS_PIN,RST_PIN); //设置RFID模块SDA、RST的数字引脚。const int negR=A0; //右轮负极连接Arduino控制板A0引脚。const int posR=A1; //右轮正极连接Arduino控制板A1引脚。const int negL=A2; //左轮负极连接Arduino控制板A2引脚。const int posL=A3; //左轮正极连接Arduino控制板A3引脚。const int pwmR=5; //右轮转速控制引脚。const int pwmL=6; //左轮转速控制引脚。const int Rspeed=125; //右轮转速。const int Lspeed=130; //左轮转速。int i,j; //整数变量。void compTag(void); //RFID标签序号对比函数。//设置初值void setup() { Serial.begin(9600); //串口速率为9600bps。 SPI.begin(); //初始化SPI接口。 rfid.init(); //初始化RFID接口。 pinMode(posR,OUTPUT); //设置A0引脚为输出引脚。 pinMode(negR,OUTPUT); //设置A1引脚为输出引脚。 pinMode(posL,OUTPUT); //设置A2引脚为输出引脚。 pinMode(negL,OUTPUT); //设置A3引脚为输出引脚。} //主循环void loop() { if(rfid.isCard()) //已感应到RFID标签? { if(rfid.readCardSerial()) //读取RFID标签序号。 { Serial.print(rfid.serNum[0],DEC); //显示标签序号的第1个数字。 Serial.print(“ “); Serial.print(rfid.serNum[1],DEC); //显示标签序号的第2个数字。 Serial.print(“ “); Serial.print(rfid.serNum[2],DEC); //显示标签序号的第3个数字。 Serial.print(“ “); Serial.print(rfid.serNum[3],DEC); //显示标签序号的第4个数字。 Serial.print(“ “); Serial.print(rfid.serNum[4],DEC); //显示标签序号的第5个数字。 Serial.println(“”); tone(speaker,1000); //产生提示哔哔声。 delay(50); noTone(speaker); for(i=0;i<5;i ) //把序号暂存在temp中。 temp[i]=rfid.serNum[i]; } rfid.halt(); //RFID模块进入待机状态1秒。 delay(1000); compTag(); //对比所读取标签序号的行走动作。 Serial.print(“cardNo=”); //显示标签控制码。 Serial.println(cardNo); if(cardNo==0) //标签控制码=0? forward(Rspeed,Lspeed); //车子前进。 else if(cardNo==1) //标签控制码=1? right(Rspeed,Lspeed); //车子右转。 else if(cardNo==2) //标签控制码=2? forward(Rspeed,Lspeed); //车子前进。 else if(cardNo==3) //标签控制码=3? right(Rspeed,Lspeed); //车子右转。 else if(cardNo==4) //标签控制码=4? forward(Rspeed,Lspeed); //车子前进。 else if(cardNo==5) //标签控制码=5? right(Rspeed,Lspeed); //车子右转。 else if(cardNo==6) //标签控制码=6? forward(Rspeed,Lspeed); //车子前进。 else if(cardNo==7) //标签控制码=7? right(Rspeed,Lspeed); //车子右转。 else //无法识别的标签控制码。 pause(0,0); //车子停止。 } }//对比RFID卡号void compTag(void){ cardNo=-1; //清除标签控制码。 for(i=0;i1. 设计Arduino程序,使用RFID 标签来控制RFID导航自动机器人逆时针行走如图11-13所示的轨道。每次感应到RFID 标签时,蜂鸣器都会发出短哔声。
图11-13 RFID导航自动机器人逆时针行走的轨道2. 设计Arduino程序,使用RFID标签来控制RFID导航自动机器人的行走方向。当RFID-RC522模块感应到“前进标签”时,车子前进。当RFID-RC522模块感应到“后退标签”时,车子后退。当RFID-RC522模块感应到“右转标签”时,车子右转。当RFID-RC522模块感应到“左转标签”时,车子左转。当RFID-RC522模块感应到“停止标签”时,车子停止。每次感应到RFID标签时,蜂鸣器都会发出短哔声。
何谓NFC?近距离无线通信(Near Field Communication,NFC,近场通信)是一种短距离的高频无线通信技术,允许电子设备之间在20厘米的范围内进行非接触式的点对点数据传输。NFC是由Philips和Sony联合开发的一种无线连接技术,整合了RFID和互连等技术,主要应用于数字消费类电子产品,如手机、手表、PDA、数字相机、游戏机、计算机以及金融、交通等。NFC可使蓝牙、无线USB和Wi-Fi网络等设备之间的连接变得极为简单。虽然NFC的传输速度与距离均比不上蓝牙,但比蓝牙受到的干扰小,极适合于设备密集的场所。
何谓 SPI?串行外设接口总线(Serial Peripheral Interface bus,SPI)是一种短距离、快速的4线同步串行通信接口,包含串行频率(SCLK)、主出从入(MOSI)、主入从出(MISO)和从线选(SS)共4线。SPI使用主(Master)/ 从(Slave)结构进行通信,如图11-14(a)所示为一对一主/从结构,由主设备(通常是微控制器)产生同步频率,将线选引脚的电位拉低,即可通过MOSI和MISO与从设备进行数据的传输。如图11-14(b)所示为一对多主/从结构,当主设备要与多个从设备进行通信时,由主设备(通常是微控制器)产生同步频率,再将要进行通信的从设备的线选电位拉低,即可通过MOSI和MISO与从设备进行数据的传输。因为是点对点数据传输,所以每次只启用SS1、SS2、SS3中的一个从设备。 (a) 一对一主/从结构 (b) 一对多主/从结构图11-14 SPI主/从结构
评论
还没有评论。