基于户外拓展的地雷阵设计_第1页
基于户外拓展的地雷阵设计_第2页
基于户外拓展的地雷阵设计_第3页
基于户外拓展的地雷阵设计_第4页
基于户外拓展的地雷阵设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XX 工 学 院毕业设计说明书(论文)作 者: 学 号: 学 院:机械工程学院专 业:机械设计制造及其自动化题 目:基于户外拓展的地雷阵设计指导者: 评阅者: 20xx年5月毕业设计说明书(论文)中文摘要 户外拓展运动作为一项集健身、智慧、运动竞技和军事意义为一体的体育项目,是集智力与体力双重的运动。 借助于以微型计算机为核心的技术,非常有助于户外拓展运动的教学和训练,能够让参加学习者有一种身临其境的现实感,提高参加学习者的学习兴趣,使参加学习者更加深人地理解户外拓展运动。本文阐述单片机技术的概念,并分析利用单片机技术结合户外拓展运动的地雷阵系统,通过对户外拓展训练项目中地雷阵进行研究。 本次设计采用Arduino UNO单片机作为控制核心,采用IIC通讯协议来进行主控模块与地雷模块之间的双向通讯,并且通过压力信号的采集,完成主控模块的红绿灯启停。其中软件系统采用Arduino 集成开发环境,此次设计的电路结构简单,容易实现,可靠性高。关键词 Arduino ,户外拓展,IIC通讯协议,双向通讯毕业设计说明书(论文)外文摘要Title The Design of Landmines Based on Outdoor Expand AbstractOutdoor activity as a set of fitness, wise, athletic, and military significance for the integration of sports, is a collection of mental and physical double movement.With the help of the microcomputer as the core technology, contributes greatly to the teaching and training, outdoor activity to attend learners have a sense of reality, as it were, to enhance learners interest in learning, make to learners more deepen the understanding of outdoor activity.The concept of SCM technology is described in this paper, and analyze the use of single-chip microcomputer technology combined with outdoor activity of landmines system, through the study of the research of outdoor development training project of landmines.This design uses the Arduino UNO single chip microcomputer as control core, using IIC communication protocol for two-way communication between main control module and mines module, and through the pressure signal collection, complete the main control module of traffic light and stop.The software system adopts the Arduino integrated development environment, the design of the circuit structure is simple, easy to implement, and high reliability.Keywords arduino,outdoor activity,iic communication protocol,Two-way comm-unication 目 录 1 引言11.1 选题背景11.2 研究目标和意义11.3 研究的主要内容12 Arduino UNO的结构22.1 处理器22.3 Arduino sensor shield v5.0 扩展板53 整体方案设计63.1 确定设计方案63.2 总体设计114 系统硬件设计124.1 定时器和计数器134.2 外部中断144.3 按钮模块结构设计154.4 Led模块结构设计154.5 连线与电路图设计165 系统软件设计175.1 Arduino 集成开发环境的软件175.2 库函数的应用185.3 IIC读写控制195.4 程序流程设计206 系统的组装与总体调试226.1 端口调试226.2 程序调试22总结23致谢24参考文献25附录:主从机源代码261 引言1.1 选题背景 风靡全球的户外拓展训练以其独特新颖的形式把户外运动与企业文化交织在一起,训练内容已涉及现代人力资源的各个方面,并逐渐成为许多企业人力资本积累的一种新途径。不论是资源、规模、数量、质量还是环境都在全国有着得天独厚的优势和举足轻重的地位。地雷阵作为户外拓展训练的项目之一,其拓展训练模式开始从单一化的培训模式逐步走向多元化的培训模式,培训领域不断拓宽和发展,呈现出强劲的发展势头。但随着行业竞争的日益激烈和速度的增长,尤其无序竞争,导致这一年轻的朝阳产业也存在着某种泡沫市场所特有的发展危机。如何面对户外拓展训练行业的市场危机、探讨其未来的生存之路,便显得非常重要。1.2 研究目标和意义 随着科技奥运和全民健身的广泛深人的开展,科学化运动器材的研制开发和体育场馆设施的建设、运动服装的设计、运动损伤与无创伤诊断、运动员选材、体育运动的基础研究及科学保健等方面已经成为热点研究领域。户外拓展运动作为一项集健身、智慧、运动竞技和军事意义为一体的体育项目,是集智力与体力双重的运动。要想成为优秀的户外拓展运动员,只有体力是不够的,良好的运筹能力、计划性、空间感、方向感等智力因素都是非常重要的。所以,户外拓展运动的教学和训练显的特别尤为重要。借助于以计算机为核心的现代高科技虚拟现实技术,非常有助于户外拓展运动的教学和训练,能够让参加学习者有一种身临其境的现实感,提高参加学习者的学习兴趣,使参加学习者更加深人地理解户外拓展运动。1.3 研究的主要内容 本课题主要包涵四个研究方面:地雷阵的游戏规则的设计,Arduino单片机的使用,Arduino语言的编程和双向通讯协议的选择。1.3.1 地雷阵的游戏规则 规则一:正式的雷区是由编了码的正方形组成的,游戏开始时亮起几个模块当做地雷,队员蒙着眼睛在队友的呼喊提示下避免碰到这些亮起的模块,碰到这些地雷模块就算游戏失败。规则二:正式的雷区是由编了码的正方形组成的,地雷阵中只有一条隐秘的安全通道,小组成员要自己尝试找出无雷通道,通道就是一个一个的小方格,每次最多可以进入两个人,每个人必须按照一个方格一个方格的前进,且只能踏入相邻的小方格。规则三:也可以模拟出跳舞机打地鼠这种类似游戏。1.3.2 Arduino单片机Arduino提供一组便捷灵活,方便上手的开源硬件产品集,这些开源硬件产品具有丰富的接口,能够通过各式各样的传感器来感知环境,并能通过控制器,点击以及其他装置的反馈来影响环境。它没有复杂的单片机底层代码,没用难懂的汇编程序,只有简单实用的函数。Arduino具有间接地编程界面和极大的自由度,可拓展性非常高,同时,标准化的接口模式为它的可持续发展奠定了坚实的基础。1.3.3 Arduino编程语言Arduino编程语言是由Processing语言改编而来,当把程序上传至Arduino时会自动把写的代码转换成C语言,再传给avr-gcc编译器,然后把代码最终编译成微处理器能明白的指令。这是很重要的一部分,隐藏了复杂的编译过程,用尽可能简单的方式去控制微处理器。1.3.4 双向通讯协议的选择 对于Arduino的使用,D0D13用作数字端口,A0A5用作模拟端口,除了这些之外Arduino上还有3种串行通信接口:UART,IIC以及SPI。不同型号的Arduino主板的SPI接口和IIC接口所用到的引脚是不同的 。Arduino与串行设备通过串行通信接口进行通信时,一般只需要少数的几根线就可以在系统间交换信息。2 Arduino UNO的结构 Arduino是一套较为完整的开源硬件开发平台。处理器从最初的8KB程序存储器的ATmega8先升级到了16KB的ATmega168然后又升级到了32KB的ATmega328,每次升级都保持了芯片引脚 的兼容。9针的rs-232插座和借口电路换成了用USB接口芯片的虚拟串口并且电源电路也做了优化,提供了额外的过流保护和智能电源供选择。2.1 处理器Arduino UNO的大脑是AtmelAVR ATmega328,一个黑色的长方形两侧各有一排引脚的塑料块。它实质就是单芯片的计算机,封装了cpu,内存阵列,时钟和外围设备。ATmega328处理器可以再很宽的供电电压下工作从1.8v到5.5v,很适用于电池供电的应用程序。在最低的电压下,处理器最高只能工作在4MHz的时钟频率下。如果要以最高的20MHz的时钟频率工作,芯片至少需要4.5v的电压,ArduinoI/O电路板供给ATmega328芯片的是5v,因此他可以工作在最高20MHz以内任何时钟频率上。 图2.1 处理器2.2 插座接口 Arduino UNO电路板上提供了4组扩展插座,以便于链接Arduino到外部电路。2.2.1 电源部分电路板的外部供电电压可以为620V,但是当供电电压小于7V时,板上的5V引脚输出的电压值可能会小于5V,可能导致工作不稳定。当供电电压大于12V时,电压调整器肯呢过过热而损坏电路板,所以外部供电电压范围为712V。Arduino可以通过3种方式供电,并能够自动选择供电方式方式有: 1.外部直流电源通过电源插座插电 2.电池连接电源连接器的GND和VIN引脚 3.USB接口直接供电2.2.2 电源引脚 VIN:当外部直流电源接入电源插座时,可以通过VIN向外部供电;也可以通过此引脚向Arduino直接供电;VIN有电时将忽略从USB或者其他引脚接入的电源 5V:提供5V电压 3.3V:通过稳压器产生3.3V电压,最大驱动电流50mA GND:接地端 图2.2.2 电源部分电路2.2.3 输入输出端口14路数字输入输出口,工作电压为5V,每一路能输出和接入的最大电流为40mA。每一路配置了2050K欧姆内部上拉电阻(默认不连接)。除此之外,有些引脚有特定的功能:1.串口信号UART:RX(0号)、TX(1号): 与内部 ATmega8U2 USB-to-TTL 芯片相连,提供TTL电压水平的串口接收信号。2.外部中断(2号和3号):触发中断引脚,可设成上升沿、下降沿或同时触发。3.脉冲宽度调制PWM(3、5、6、9、10 、11):提供6个8位PWM输出。4.SPI(10(SS),11(MOSI),12(MISO),13(SCK)):通过调用SPI库函数来实现SPI通信。5.IIC:A4(SDA),A5(SCL),SDA,SCL,可以通过调用Wire Library库函数来实现IIC通信。6.LED(13号):Arduino专门用于测试LED的保留接口,输出为高时点亮LED, 反之输出为低时LED熄灭。6路模拟输入A0到A5:每一路具有10位的分辨(即输入有1024个不同值),默认输入信号范围为0到5V,可以通过AREF调整输入上限。 2.2.4 通信接口1.UART接口:ATmega328内置的UART可以通过数字口0RX1TX与外部实现串口通信。2 .TWI(兼容IIC)接口。3. SPI接口。 图2.2.4a Arduino UNO的I/O口 Arduino还能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境 ,Arduino可以使用开发完成的电子元件例如Switch或sensors或其他控制器、LED、步进马达或其他输出装置。Arduino的内部连线图如下: 图2.2.4b Arduino UNO内部连线图2.3 Arduino sensor shield v5.0 扩展板 本次设计需要4个从机与一个主机相互并联,仅仅用单片机的电路板会使接口不够用,必须很麻烦的把线拧在一起。因此需要扩展板来实现。Arduino sensor shield v5.0 扩展板不仅将Arduino 控制器的全部数字与模拟接口以舵机线序形式扩展出来,还特设IIC接口、32路舵机控制器接口、蓝牙模块通信接口、SD卡模块通信接口、APC220无线射频模块通信接口、RB URF v1.1超声波传感器接口、12864液晶串行与并行接口,独立扩出更加易用方便。 图2.3 Arduino扩展板 这款传感器扩展板真正意义上的将电路简化,能够很容易地将常用传感器连接起来,一款传感器仅需要一种通用3P传感器连接线,完成电路连接后,编写相应的Arduino程序下载到Arduino Duemilanove控制器中读取传感器数据、或者接收无线模块回传数据。3 整体方案设计本系统采用简单明了的设计方案。通过通讯协议实现主控模块与地雷之间的联系,然后Arduino UNO通过IO口控制led灯与开关电子积木的信号传输来实现主控模块与地雷模块间的双向通讯。3.1 确定设计方案Arduino上有3种串行通信接口:UART,IIC以及SPI。本次设计将这三种通信方式作为备选方案放在一起相互比较,并得出最终的设计方案。3.1.1 方案1:用SPI通信协议连接多个模块 图3.1.1a 通过SPI接口连接图中为两个Arduino UNO一个作为主机一个作为从机相互通讯做的实验。 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种同步串行外设接口,可以使单片机与各种外围设备以串行方式进行通信以交换信息,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备。SPI接口一般使用4条线:串行时钟线(SCK),主机输入/从机输出数据线MISO,主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT,有的SPI接口芯片没有主机输出/从机输入MOSI)。SPI是串行通讯协议,即数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。 图3.1.1b SPI接口连线方式3.1.2 方案2:用IIC通信协议连接多个模块 图3.2.1a 通过IIC接口连接IIC(InterIntegrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。IIC最初为音频和视频设备开发,现主要在服务器管理中使用,其中包括单个组件状态的通信,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇;可随时监控内存,硬盘,网络,系统温度等多个参数,增加系统的安全性,方便了管理。 标准模式下,基本的IIC总线规范的规定的数据传输速率为100kb/s。 快速模式下,数据传输速率为400KB/s。 高速模式下,数据传输速率为3.4Mb/s。IIC总线始终和先进技术保持同步,并保持其向下兼容性。IIC总线采用二线制传输,一根是数据线SDA(Serial Data Line),另一根是时钟线SCL(serial clock line),所有IIC器件都连接在SDA和SCL上,每一个器件具有一个唯一的地址。 IIC总线是一个多主机总线,总线上可以有一个或多个主机(或称主控制器件),总线运行由主机控制。IIC总线支持多主(multi-mastering)和主从(master-slave)两种工作方式。主机是指启动数据的传送(发起始信号)、发出时钟信号、发出终止信号的器件。通常,主机由单片机或其它微处理器担任。被主机访问的器件叫从机(或称从器件),它可以是其它单片机,或者其他外围芯片,如:A/D、D/A、LED或LCD驱动、串行存储器芯片。多主方式下,IIC总线上可以有多个主机。IIC总线需通过硬件和软件仲裁来确定主机对总线的控制权。主从工作方式时,系统中只有一个主机,总线上的其它器件均为从机(具有IIC总线接口),只有主机能对从机进行读写访问,因此,不存在总线的竞争等问题。在主从方式下,IIC总线的时序可以模拟 ,IIC总线的使用不受主机是否具有IIC总线接口的制约。有些单片机本身不具有IIC总线接口,可以用其I/O口线模拟IIC总线。 图3.1.2b IIC接口连线方式3.1.3 方案3:用UART通信协议连接多个模块UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。 UART的基本结构: 1.输出缓冲寄存器,它接收CPU从数据总线上送来的并行数据,并加以保存。2.输出移位寄存器,它接收从输出缓冲器送来的并行数据,以发送时钟的速率把数据逐位移出,即将并行数据转换为串行数据输出。3.输入移位寄存器,它以接收时钟的速率把出现在串行数据输入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,即将串行数据转换成并行数据。4.输入缓冲寄存器,它从输入移位寄存器中接收并行数据,然后由CPU取走。5.控制寄存器,它接收CPU送来的控制字,由控制字的内容,决定通信时的传输方式以及数据格式等。例如采用异步方式还是同步方式,数据字符的位数,有无奇偶校验,是奇校验还是偶校验,停止位的位数等参数。6.状态寄存器。状态寄存器中存放着接口的各种状态信息,例如输出缓冲区是否空,输入字符是否准备好等。在通信过程中,当符合某种状态时,接口中的状态检测逻辑将状态寄存器的相应位置“1”,以便让CPU查询。 图3.1.3 UART接口连线方式3.1.4 选择合适方案1.SPI和IIC采用同步通信方式,UART采用异步通信方式。2.SPI和UART可以实现全双工通信,IIC是半双工。3.IIC线更少,比UART、SPI更为强大,但是技术上也更加麻烦些,因为IIC需要有双向IO的支持。 4.SPI接口和UART相比,多了一条同步时钟线,UART的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。 5.IIC允许多个设备在信号线上同时存在,要求每个设备拥有不同的设备地址,同时可以允许多主机,是真正的总线结构,而且在软件协议的读写规范中也做了比较明确的关于地址的规定,其他两总种接口都是没有的。 SPI也可以通过CS信号来连接多个设备,但是和总线的概念还是有区别的,各个设备也没有地址的概念。经过上述比较,本次设计决定选用方案2:用IIC通讯协议来实现双向通讯。3.2 总体设计3.2.1 系统设计流程本文以Arduino单片机为核心,构建双向通讯,并开发相应的控制程序。首先,通过对IIC通讯协议功能需求的分析,确定其控制系统的硬件组成,并绘制电路原理图。其次,在IDE环境下进行控制程序的开发,包括主机程序、从机程序等。最后,做成实物。3.2.2 功能分析对于任何一个控制系统来讲,必然有一个处理器作为控制核心。要实现双向通讯的功能,就必须实现对压力信息的实时采集,并据此进行控制。因此在控制系统中肯定需要压力传感器,并由单片机对其进行相应处理以输出控制指令。为实现控制系统与使用操作人员之间的人机交互,一方面需要按钮等设备以输入使用人员的操作指令,另一方面需要LED指示灯、等设备将系统内部信息显示给用户。作为从机的执行机构的LED灯,其运行完全由单片机控制。从机需根据主机发送的指令以驱动LED工作。根据上述功能分析,构建双向控制结构如图3.2.2所示。 图3.2.2 结构图3.2.3 详细设计要实现主控模块与地雷阵之间实现双向传输,我们必须搭建双向传输的结构。在硬件设计方面,根据功能分析,本文所设计的控制系统包括地雷阵设计主要由Arduino单片机电路、电子开关模块、LED模块、电路扩展板、电源模块、杜邦线部分。在软件设计方面,主要包括LED的亮灭、中断式开关设计、指令传输设计、总线选择这几部分。4 系统硬件设计本系统是由Arduino UNO单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压环境中工作。本次设计需要4个从机与一个主机相互并联仅仅用单片机的电路板会使接口不够用,因此需要Arduino sensor shield v5.0扩展板来实现。按键是一种常用的控制电器元件,常用来接通或断开电路,从而达到控制电机或者其他设备运行的开关,在此设计中按钮达到中断的效果,即等于踩着圆形踏板。Arduino UNO单片机上自身带有一个发光二极管led,连接在D13引脚上,用来模拟亮着的地雷。总体设计框图如图4。 图4 设计框图 4.1 定时器和计数器 ATmega328有三个各不相同的定时器/计数器外围设备,名为定时器/计数器0,定时器/计数器1,定时器/计数器2。每个定时器/计数器外围设备和其他都略有不同。 4.1.1 定时器/计数器0定时器/计数器0内部是一个8位的计数器,就是说可以从0数到255,然后又回到0,,也可以以0数到255,然后回头从255数到0,周而复始。基于这个基本功能,定时器/计数器0还可以指定一个计数的上线,而这个上线不一定是255,可以做计数器,也可以做定时器。作为定时器时,可以又CPU振荡器的时钟信号驱动,也可以由预定义频比的预分频器驱动,分频比可以是1,8,64,256或1024。作为计时器时,可以由外部输入驱动。4.1.2 定时器/计数器1定时器/计数器1的核心是一个16位的计数器,可以从0数到多达65535。和定时器/计数器0一样,也可以一直为递增,也可以一会递增一会递减,并如此往复。在Arduino UNO上,定时器/计数器1有两个关联的PWM通道。4.1.3 定时器/计数器2定时器/计数器2和定时器/计数器0极其相似,不同的是它可以连接到TOSC1和TOSC2引脚的一个低频率的32HKz晶体,以不同于CPU时钟的频率来驱动。在ATmega328上,这些引脚是与XTAL1和XTAL2引脚复用的,这两个引脚一般是接16KHz石英晶体谐振器的。这样大多数Arduino UNO兼容的电路就无法实现这个功能。标准Arduino的系统时钟是16MHz,提供给定时器电路的时钟信号就是16000000/256=62500Hz。这个值是经过仔细挑选的,它接近定时器/计数器1的16位计数器的最大值65535。换句话说,当以这个时钟速度驱动时,计数器溢出正好发生在略多一秒的时候,每次溢出产生一个溢出中断,中断服务历程执行,LED翻转一下。4.2 外部中断Arduino软件中支持中断的仅有函数attachInterrupt()和detachInterrupt()。这两个函数可以将一个函数连接到AVR内核的可用的外部中断。这些中断直接捆绑在内核中,他们的输入食欲其他通用I/O线复用的。表4.2是Arduino UNO的外部中断。 表4.2 Arduino UNO的外部中断 ATmega328有两个外部中断:INT0和INT1,分别于PD2和PD3复用引脚。这些I/O引脚可以配置为输入或输出。ATmega2560有8个外部中断:INT0INT7,它们与端口D和端口E的I/O引脚复用。外部中断和之前的引脚变化中断的工作方式类似。外部中断虽然数量更少,但是配置上更灵活。每个外部中断可以独立地像引脚变化中断一样允许或禁止。不过每一个外部中断有独有的中断向量。和引脚变化中断一样,可以配置外部中断来检测引脚变化,也可以配置他们使其只响应上升沿,下降沿或低电平。本次设计使用D2做为外部中断来控制主机LED的亮灭。4.3 按钮模块结构设计按键是一种常用的控制电器元件,常用来接通或断开电路,从而达到控制电机或者其他设备运行的开关,开关模块有三个引脚“+”“”“s”,当按下开关的时候,s脚输出低电平即数字0,不按开关的时候,s脚输出高电平即数字1,它采用统一的3PIN接口,可以直接连接到Arduino主板上。若将按钮模块元器件解体,会看到它是由两个金属节点和一个塑胶弹片构成的,借助塑胶弹片绝缘的特性,对金属进行阻隔与连接,达到开关的效果,按下按钮时就完成开启的效果。为了得到按钮的状态,必须使用一个程序指令:digitalraed(). 图4.3a 开关结构在按键没有按下去的时候1,2号脚相连,3,4号脚相连。按键按下去的时候,1,2,3,4号脚就全部接通。在接按键的接口与GND之间接一个1K-10K 的电阻。其作用是当外界有干扰源的时候,在断开状态下,干扰源在通向GND的过程中,会被电阻消耗掉。 图4.3b 开关模块的电路图4.4 Led模块结构设计Arduino UNO单片机上自身带有一个发光二极管led,连接在D13引脚上 。在之后的编程中const int的表示的意思是将“LED”定义为是一个整数,这个整数是不能改变的,其值设为13,这就意味这他将自动搜索并替换代码,在这种情况下,每当有“LED”出现时,就将告诉Arduino写入数字13,这条命令指定连接到Arduino第13引脚的LED闪烁。 图4.4 D13脚LED灯4.5 连线与电路图设计此次设计通过IIC通讯协议使一个主机与三个从机相互之间进行通讯。首先将主机与第一个从机相连,用杜邦线两头分别对应的插在扩展板的SCL,SDA接口上。主机的GND,Vcc与从机的GND,Vcc相连。然后将开关模块与从机相连,将开关模块的“+”“-”分别连接到从机的扩展板上的+5V和GND上,开关的S引脚连接到D2口(中断口),用中断来发送0,1指令给主机。接下来连接第一从机与第二从机时,由于之前第一从机与主机连接时占用了SDA,SCL接口,此时就要用到扩展板上与IIC专用接口并联的A4,A5接口,用杜邦线连接两个从机的A4,A5口还有电源与接地,开关接法不变。第二从机与第三从机相连时跟主机与第一从机连接一样。实物连接图如下。 图4.5 实物连接图5 系统软件设计主机从机都要遵守IIC通讯协议,通过IIC的读写控制来实现指令的双向传输,并用IDE编写好的程序,烧入到Arduino单片机中。5.1 Arduino 集成开发环境的软件Arduino集成开发环境(IDE)是一个在计算机里运行的特殊软件,可以通过它来为Arduino上传不同的程序,而Arduino的编程语言也是由Processing语言改编而来。当把程序上传到Arduino时会自动把代码转换成C语言,再传给avr-gcc编译器然后把代码最终编译成微处理器能明白的指令。图5.1为IDE窗口。 图5.1 IDE窗口在软件右下方可以选择从Arduino发送或接收数据的波特率。波特率是每秒从Arduino开发板发送或接收状态的(或比特数据)变化率。默认的波特率是9600,这意味着如果要通过串口连接线(此处指的是USB电缆)发送一个字符记录,那么将每秒发送记录中的1200个字母或符号(9600bit/8bit每字符=1200字节或字符)。在串口监视器窗口顶部是一个空的文本框,单击Send按钮把其中的字符传送给Arduino。注意,如果没有在代码中编写串口通信程序,串口监视器就不会接收串行数据。同样地,Arduino也会不接受任何串口发送的数据,除非已经在上传到Arduino的程序中编写了串口通信代码。空白处是串行数据显示的地方。Arduino运行在ASSII码状态(互相通信的例子程序)。在这个程序里,Arduino通过串口(USB电缆)输出ASCII码字符到PC,用串行监视器显示这些字符。单击Serial Monitor按钮可启动串行监视器,单击Stop按钮可结束串行监视器。在IDE窗口的底部,可以看到出错信息(以红色的字符显示)。出错信息将在尝试与板子相连、下载代码或改变代码时出现。在IDE底部的左侧,可以看到一个数字,这是目前光标在程序中所在的位置。如果已经在窗口中写下代码,向下浏览程序会看到这个数字增加为当前向下浏览到的行代号。这对于发现错误是非常有用的,错误将用高亮的错误信息表示出来。在识别通信端口方面,每个单片机模块指定一个com口,在烧入程序的时候必须选择好对应的com口。在设备管理器中的列表内找到通用串行总线控制器,展开前方的加号,就会看到USB Serial Port,记下名称中的连接号码。知道了COM端口号之后,可以在Arduino IDE界面中选择工具,串行端口,并选择端口号。然后可以与电路板通信并烧录程序。5.2 库函数的应用一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。由于版权原因,库函数的源代码一般是不可见的,但在头文件中你可以看到它对外的接口。事实上,在编写语言程序时,应当尽可能多地使用库函数,这样既可以提高程序的运行效率,又可以提高编程的质量。库是一个代码的集合,可插入架构以提高项目的功能。这种方法避免了大量重复劳动,可以使用别人已经为各种相同的硬件写好的代码。例如,Stepper库是控制步进电机的一系列功能库。热心人已经做好了控制步进电机所有必要的功能,因此通过插入Stepper库到架构中,就可以使用这些功能去控制电机。通过存储公用代码到库中,可以在项目中一遍一遍地重复使用这些代码。也可以将代码最复杂的部分隐藏起来。在ArduinoIDE打开之前必须把把下载好的库函数文件夹里面的Timer,Wire文件夹复制到Arduino安装目录下面的libraries里面 。本次设计用到Wire库函数与timer库函数。这里调用的是静态库。首先需要下载需要的库函数,将他解压到安装文件libraries文件夹中。在输入程序时只有在头文件包含到本程序中,才能调用库函数,语句为#include。5.3 IIC读写控制 IIC总线由数据线SDA和时钟SCL构成,可发送和接受数据。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。各种被控制电路均并联在这条总线上,但就像电话机一样只能拨通格子的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,IIC总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路确定控制的种类;控制量决定该调整的类别及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。IIC总线在传输数据过程中共有3种类型信号,分别为开始信号,结束信号和应答信号。 图5.3.1 IIC总线开始/结束信号示意 开始信号S:SCL为高平时,SDA由高电平向低电平跳变,开始传输 结束信号P:SCL为低平时,SDA由低电平向高电平跳变,结束传输 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示以收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU收到信号后,根据情况作出是否继续传递信号的判断。若未收到信号,则判断受控单元出现故障。SDA线上的数据在时钟高期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的高或低状态才可以改变。输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ACK。如果一个接收器件在完成其他功能前不能接受另一个数据的完整字节时,可以保持始终线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其他字节并释放时钟SCL后,数据传输继续进行。 图5.3.2 IIC数据总线传送时序 IIC总线上允许连接多个微处理器以及各种外围设备,如存储器,LED和LCD驱动器,A/D和D/A转化器。为了保证数据可靠地传送任一时刻总线只能由某一台主机控制,各微处理器应该在总线空闲时发送启动数据。为了妥善解决多台微处理器同时发送启动数据的传送冲突,以及决定由那一台微处理器控制总线的问题,IIC总线允许连接不同传送速率的设备。多台设备之间的时钟信号同步过程称为同步化。5.4 程序流程设计 为了实现IIC的双向协议让主机从机都遵守IIC通讯协议,程序中输入Wire.begin()表示主从机都开始IIC通讯。主机注册两个事件Wire.on Receive (receiveEvent) 与Wire.on Request (requestEvent)。其实这是一个主从倒置的方式。从机收到指令后会开始执行之前定义好的定时器,开始计数,此时可以利用其计数来规定游戏时间。实现主机与从机的双向传输,delay指令开始执行后,不能再同时执行多个指令,因此用delay指令来控制游戏时间会使通道堵塞。当定义好的时间到时即游戏时间到时,所有为亮起的地雷阵模块LED全部亮起,以此来提醒玩家游戏时间到。 从机D2口为外部中断口用来连接开关按钮,使用中断指令,按钮设置为中断标志,对于是地雷的模块来说,按下按钮视为外部中断,开始设中断flag为0,运用函数 flag+来实现无限循环,按下按钮就等于flag+1,一旦数值等于1便向主机传送指令使主机led亮,视为触雷,Led没有亮的从机,内部程序设置为按下按钮主机led不会亮起来,视为安全区,当触雷后主机LED亮起后,三秒钟后LED熄灭,游戏结束。图5.4为程序流程图。程序初始化对三个从机分别编程控制最初始的状态从机提示主机发送指令 从机接收主机指令判断从机led的亮 灭从机led不亮 NO YES从机led亮 等待1000s 从机接收主机指令按下从机开关按钮主机led亮 从机led亮主机led延时3s结束 图5.4 程序流程图6 系统的组装与总体调试系统组装与调试分为硬件的组装调试和软件的调试,硬件的组装与调试侧重于原理设计的正确性验证和印刷电路板的工艺性错误的检测;软件的调试则侧重于子模块的功能验证和模块与模块的接口配合。6.1 端口调试当系统给USB的串口分配的端口号大于等于COM10时,Arduino将无法判断,这时需要手动修改端口号,修改成小于10的COM口。首先在我的电脑属性中找到任务管理器中的端口(COM和LPT),再找到所使用的串口端口号,在端口设置中找到高级,单击COM端口号的下拉框,就可以选择空闲着的且号码小于9的端口。6.2 程序调试 a.在Arduino语言中,每条指令都会以分号结尾,这样做是为了让控制器知道所写的指令语句 从哪里结束,从哪里开始,本次设计编程中经常出现忘记使用分号导致目的不能实现b.测试代码之中的一段,变量flag储存0,1来记忆灯的状态,当按钮被放开时,将他设置为0。之后,当程序要读取目前按钮状态时如果按钮是按下的状态,将状态由0改成1。用一个简单的算式,让数值的变化只可能有0,1两种状态。在之后的程序,再用flag变量来判断led的状态,结果就造成了LED没有达到预期状态。得到不稳定的输出结果是因为Arduino以每秒16000000次的速度执行程序指令。当按下按钮并放开的同时,芯片已经反复读取按钮的状态数千次,造成结果达不到预期。在程序中应该过滤出适合更新flag变量的时机,并且在读取当下按钮状态前,江上一个时间单位按钮状态储存到另外一个变量中去。将按钮的上一个状态保存下来,有助于过滤出由开转至关的情况。再按下开关时,按钮由两片金属的接触实现电路的导通,但在现实中,金属之间的连接并不密合,尤其涉及当按钮尚未按到底的瞬间和按钮弹回 的时候会产生杂波。当杂波产生的时候,Arduino会接受到一连串开关交错的信号,要克服这个杂波,可以在程序中加入一个延迟指令delay(),用于改善这个情况。 总结本论文基于户外拓展的地雷阵设计,查阅相关资料对Arduino UNO单片机的基本构成和通讯方式进行理解。在本次设计中,以Arduino UNO 单片机为核心,从总体的理论构思到具体的软硬件的设计,元件的采购,Arduino实物的连接,系统的调试,最终实现了地雷阵与主控模块双向通讯的基本功能,实现了信息通讯的正常运行。由于成本的问题本次设计只使用了三个单片机从机来模拟地雷模块,不过通过这三个从机的实验结果可以预测

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论