基于脑电波机器人控制器方法研究_第1页
基于脑电波机器人控制器方法研究_第2页
基于脑电波机器人控制器方法研究_第3页
基于脑电波机器人控制器方法研究_第4页
基于脑电波机器人控制器方法研究_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

基于脑电波机器人控制器方法研究学生姓名:张宁指导教师:宋维波讲师专业名称:电子信息工程所在学院:信息工程学院2023年6月目录TOC\o"1-1"\h\u摘要IAbstractII第一章引言11.1研究目的和意义11.2国内外研究现状11.3研究内容和方法1第二章系统总体设计22.1系统控制原理2第三章脑电相关知识及神念产品软硬件特点33.1脑电波简介33.2NeuroSky脑机接口技术33.3NeuroSkyThinkGear介绍43.4eSense43.5噪声信号质量〔poorsinglequality〕63.6原始脑电波数值〔RAW〕63.7眨眼强度〔strength〕63.8ThinkGear信息包格式73.9数据包解析103.10Mindband开发工具103.11神念脑电硬件11第四章Arduino及各局部模块介绍分析174.1Arduino174.2蓝牙264.3L298N电机驱动模块32第五章小车制作及调试365.1小车制作材料准备365.2程序流程图,如图5.1所示365.3各模块连接375.4测试过程385.5测试过程中遇到的问题及解决方法39第六章结论40致谢41参考文献42附录一43附录二50附录三52摘要本论文主要是基于神念科技mindband脑电波传感器进行智能小车机器人控制方法的研究和设计。脑电波方面主要是脑电波的采集和后期对mindband输出的数据进行解析,进而得到所需要的专注度参数。解析数据及控制小车的主控器采用arduinouno,arduino的处理芯片为Atmel公司的AVR单片机〔ATmega328p〕,本身具有数字I/O口和模拟I/O口;数据通信采取无线传输方式,采用了基于蓝牙2.0技术的蓝牙模块;动力方面采取由L298N电机驱动模块、两个独立直流电动机和万向轮构成的动力系统。除上述硬件系统外,软件局部主要基于arduino语言和其专用IDE进行编写,其中mindband通信协议的解析是程序核心局部。最终到达的目的是,通过专注度的不同数值到达控制小车运动状态的控制。关键词:脑电波,mindband,arduinouno,蓝牙,arduino语言,通信协议AbstractThisthesisisbasedontheNeuroSkybrainwavesensorwhichiscalledmindbandtocontrolsmartcarrobotmethodofresearchanddesign.Brainwaveswillbemainlyaboutbrainwavesandthelatterpartofthecollectionmindbandoutputdataforanalysis,andthenconcentratetogivetheattentionlevelparameter.Parsethedataandcontrolthecarusearduinouno,arduinoprocessingchipsforAtmel'sAVRmicrocontroller(ATmega328p),itselfhasdigitalI/OportsandanalogI/Oports;adoptwirelesstransmissionofdatacommunications,usingabasedonBluetooth2.0Bluetoothmodule;powertakenbytheL298Nmotordrivermodule,twoindependentDCmotorsandpowersystemconsistingofcasters.Inadditiontothehardware,thesoftwarepartismainlybasedonthelanguageanditsdedicatedarduinoIDEtowrite,whichmindbandcommunicationprotocolanalysisisthecorepartoftheprogram.Ultimatelyachievetheaimisthatbyfocusingdifferentvalues​​ofthedegreeofcontrolthecarreachedthestateofmotioncontrol.Keywords:brainwaves,mindband,arduinouno,Bluetooth,arduinolanguage,communicationprotocol第一章引言1.1研究目的和意义本毕设的目的在于基于神念科技的脑电波传感器mindband的二次开发,神念传感器已经做好了脑电采集和各种脑电波形的量化,而脑电波在生活中以何种方式应用成为本毕设研究的方向和目的。就目前而言,脑电波的实际应用在全球范围内是一个新兴领域,假设能开发出基于脑电波群众化研究或消费产品,定会就有划时代的意义。用脑电波控制小车运动状态,可以看车是脑电波应用化的前期工作,后来者研究的基石。很多人误将脑电波等同于“思想〞,这是不科学的。简单说,脑电波是众多生物电的一种,我们大脑在运作时,会产生微弱电信号,这些信号大致经过采集、降噪、分析后,变得到我们所谓的“脑电波〞,而不是我们常说的“思想〞。1.2国内外研究现状就目前现状而言,在消费级脑电波产品的研究上,国外要领先与国内水平。而领导消费级别脑电波传感器的两家公司〔NeuroSky和EmotivSystems〕均来自美国硅谷,但是只有NeuroSky在中国设有子公司。两家公司的产品均为非入侵式脑机接口。同时,又各有特色,NeuroSky的脑电传感器为干电极传感器,通常由一个前额电极和一个耳部参考电极组成;EmotivSystems的脑电传感器〔EmotivEpoc〕所使用电极为湿电极,佩戴时需涂抹导电液,而且由16个头部电极构成,能够准确反映脑电波变化情况。NeuroSky目前主要产品有mindband,mindset,MindFlex,Necomimi;浙江大学使用EmotivEpoc控制四旋翼飞行器。1.3研究内容和方法由于使用神念公司的mindband脑电波传感器,因此熟悉掌握其通信协议成为此次毕设中程序编写至关重要的一步。其次,使用何种主控器,经过性能比拟之后选择了arduino,因为其优越的可扩展型和成熟的设计。采用反复实验的方法,开始化整为零,每一局部单独测试,最后再进行整体测试。第二章系统总体设计2.1系统控制原理本设计由Mindband脑电波传感器采集脑电波数据,通过内部ThinkGear芯片对采集数据进行处理,由内置蓝牙传输数据。小车接收局部采用蓝牙模块,得到的数据经过arduinouno处理后输出给小车驱动电路,进而实现脑电波控制小车的目的。如图2.1为脑电波控制小车系统框图。小车Mindband小车Mindband蓝牙主机电极蓝牙主机电极Arduinouno处理器无线传输Arduinouno处理器无线传输ThinkGear芯片MindbandMindband内嵌蓝牙从机小车驱动电路小车驱动电路图2-1脑电波控制小车的系统框图第三章脑电相关知识及神念产品软硬件特点3.1脑电波简介生物电现象是生命活动的根本特征之一。人类在进行思维活动时在大脑产生的生物电信号就是脑电波[1],这些脑电波信号可以通过放置在头皮的传感器来进行测量和研究。自上世纪以来,通过对脑电波信号的研究,人们在很大程度地增加了对于大脑的认识。我们的大脑无时无刻不在产生脑电波。这些自发的生物电信号的频率变动范围通常在0.1Hz-30Hz之间,根据其频率不同可划分为四个频段,即δ〔0.1-3Hz〕、θ〔4-7Hz〕、α〔8-12Hz〕、β〔12-30Hz〕,其中β波又可划分为LowBeta、MidrangeBeta、HighBeta。如表3.1为不同脑电波类型的频率范围及幅值和对应的精神状态。表格SEQ表格\*ARABIC1不同脑电波类型的频率范围及幅值和对应的精神状态脑波类型频率及幅值精神状态Delta0.1Hz到3Hz幅值不一沉睡,非快速动眼睡眠,无意识状态Theta4Hz到7Hz高于20微伏直觉的,创造性的,回忆,梦想,想象,浅睡Alpha8Hz到12Hz30-50微伏放松但不困倦,平静,有意识地Beta12Hz到30Hz5-30微伏警觉,放松且专注,有协调性,烦躁,思考,对于自我和周围环境意识清楚Gamma30Hz到100Hz幅值不一心理活动活泼3.2NeuroSky脑机接口技术脑机接口技术〔Brain-ComputerInterface,简称BCI〕源自于对大脑思维过程中产生的脑电波信号的探测及分析。NeuroSkyBCI[2]技术通过干态电极传感器采集大脑产生的生物电信号,并将这些采集的信号送入ThinkGear芯片,ThinkGear将混杂在信号中的噪音以及运动产生的扰动进行滤除,并将有用信号进行放大,然后通过NeuroSkyeSense专利算法解读出描述使用者当前精神状态的eSense参数〔专注度、放松度〕,最终,通过将这些量化的参数输出到电脑、等智能设备,实现基于脑电波的人机交互,即通常所说的意念控制。1.信号校准:对不同使用者脑电信号进行自适应计算及同步,以进行信号的校准。2.信号采集:采用NeuroSky单导干电极技术,使得脑电信号采集变得简单易用。3.信号提取:ThinkGear从噪音环境中别离出脑电波信号,经过放大处理,产生清晰的脑电波信号。4.信息解读:通过eSense专利算法将脑电波解读为eSense参数,用于表示用户当前的精神状态。5.人机交互:将eSense参数传递给计算机、等智能设备,从而可以通过脑电波进行人机交互。3.3NeuroSkyThinkGear介绍NeuroSkyThinkGear技术将脑电波信号的采集、滤波、放大、A/D转换、数据处理及分析等功能完全集成到一块ASIC芯片中,并通过标准接口对外输出eSense参数〔包括“专注度〞和“放松度〞等参数〕和原始的脑电波数据,从而大大简化并加快了脑电波采集处理及分析的过程,降低了脑电波应用本钱,使得基于脑电波的应用更易于推广到群众消费领域。ThinkGear技术已广泛应用于NeuroSky所有产品及其合作伙伴的产品中,通过在产品中集成基于ThinkGear的脑机接口技术,可以使这些设备方便地通过脑电波进行人机交互,包括实时观测使用者的精神状态,并且能够通过“意念思维〞进行控制。ThinkGearASIC芯片技术特性•采用单导干电极测量技术〔通常将一个干电极放在用户的前额进行脑电信号测量〕•集成神经信号的滤波和放大功能•集成eSense算法〔使用者无需进行额外的信号处理〕•符合工业标准的串行UART输入输出接口•输出“专注度〞和“放松度〞两种eSense数据,数据输出频率为1Hz•输出α、β、θ、δ脑电波数据,数据输出频率为1Hz〔可选〕•输出原始脑电波形数据,数据输出频率为128Hz或者512Hz〔可选〕•功耗低,耗电量小,适用于需要依靠电池长时间工作的设备3.4eSenseeSense是NeuroSky用于以数字化参数方式对人的当前精神状态进行度量的专利算法。NeuroSkyThinkGear技术首先对原始脑电波信号进行放大并过滤了环境噪音及肌肉组织运动产生的干扰,通过对上述处理后的信号应用eSense算法进行计算,得到了量化的eSense参数值。需要注意的是,eSense数值不是量化当前精神状态的一个具体的数值,而是描述当前精神状态活动的波动范围的数值。3.4.1eSense参数概述eSense参数用于描述被试者进入专注状态〔类似于注意力集中程度〕或者冥想状态〔类似于精神放松程度〕的程度。如同锻炼一块不兴旺的肌肉需要一个较长的过程一样,如果我们想熟练地通过控制自己的脑意念思维来操作eSense参数,也需要花费一定的时间进行训练。通常来说,在刚开始训练时,人们通过意念思维对某个eSense参数的控制力要强于对其它eSense参数的控制力。所以,在找到有效控制自己意念思维的方法之前,建议您尽量尝试采用不同的意念活动方式,一旦您发现您的方法有较好的控制效果,就可以把这种方法运用到对其它参数的控制上,从而能够通过简单训练就能够更容易地控制其它参数。通常情况下,你可以通过盯住某个物体或者是集中精力思考某个问题等方式来控制你的专注度,从而可以推高屏幕上“专注度仪表盘〞的数值。你可以通过盯住屏幕上的一个点或者想象你正在努力完成的动作等方式来提高你的专注度。例如,你可以盯住屏幕上的“专注度仪表盘〞并且努力想象表盘上的指针在向数值高的地方移动。放松度控制的训练可以帮助我们实现自我放松,去除脑中纷繁的思绪并且能够到达平和与安宁的心境。如果你难以自如地控制自己的放松度,请把眼睛闭上几秒钟,然后睁开眼晴看看“放松度仪表盘〞的当前数值,从而体会如何进行放松。eSense参数技术描述eSense参数以1到100之间的具体数值来指示用户的专注度水平和放松度水平。数值在40和60之间表示此刻该项参数的值处于中间范围,这一数值范围类似于常规脑电波测量技术中确定的“基线〞。〔但是ThinkGear的基线测定方法是自有的专利技术,与常规脑电波的基线测定方法不同〕。数值在60—80之间表示此刻该项参数的值处于“较高值区〞,也就是说略高于正常水平〔即当前情况下你的专注度或者是放松度比正常情况下要高〕。数值在80—100之间表示处于“高值区〞。它表示你的专注度或放松度到达了非常高的水平,即处于非常专注的状态或者是非常放松的状态。同理,如果数值在20—40之间那么表示此时的eSense参数水平处于“较低值区〞,数值在1—20那么意味着处于“低值区〞。与前述其它区值所代表的人的精神状态相反,eSense参数处于这2个区域那么表示被试者的精神状态表现为不同程度的心烦意乱、焦躁不安、行为反常等。eSense算法具有动态自学习能力,它采用“慢速自适应〞算法,可以针对不同使用者脑电波信号在正常范围内的波动趋势和个体差异进行动态补偿。由于采用了自适应技术,使得ThinkGear能够适用于不同的人群和不同的周边环境,并且在这些不同的应用场景下都能够具有非常好的准确性和可靠性。1.“专注度〞参数〔attention〕“eSense专注度参数〞指示了使用者当前的“专注度〞或“专心度〞,该参数反映了使用者当前的注意力集中程度。心烦意乱、精神恍惚、注意力不集中以及焦虑等精神状态都将降低专注度参数的数值。该指数值的范围是0到100。2.“放松度〞参数〔meditation〕“eSense放松度参数〞指示了使用者当前的“平静度〞或者“放松度〞。放松度反映的是使用者的精神状态,而不是其身体状态,所以,简单地进行全身肌肉放松并不能快速地提高放松度水平。然而,对大多数人来说,在正常的环境下,进行身体放松通常有助于精神状态的放松。放松度水平的提高与大脑活动的减少有明显的关联。长期观察结果说明:闭上眼睛可以使得大脑无需处理通过眼睛看到的景象从而降低大脑精神活动水平。所以,闭上眼睛通常是提高放松度值的有效方法。心烦意乱、精神恍惚、焦虑、冲动不安等精神状态以及感官刺激等都将降低放松度参数的数值。该指数值的范围是0到100。3.5噪声信号质量〔poorsinglequality〕ThinkGear用一字节无符号整型数值描述信号噪声。噪声范围在0到200之间。0表示在整个通信过程中没有噪声输出。通常,数值越高,表示噪声越多。然而,当噪声值到达200时,有着特殊的含义,表示ThinkGear没有与使用者的皮肤接触。通常以下几种情况会引发噪声产生:传感器电极没有接触到使用者额头接触不良〔例如:在传感器电极和接触的皮肤之间有异物〕使用期间,使用者额外的动作〔如,过多的移动头部或身体,造成接触电极移动〕过多的外界电磁干扰〔如,环境中强烈的电磁信号或者是静电对传感器的干扰〕额外的非标准脑电信号〔如,肌电图EMG、心电图EKG\ECG、动眼电波图EOG等〕即使NeuroSky的滤波技术和其特有的eSense算法已经侦测、修正和补偿方面做了努力,其中包含了多种非正常脑电噪声,不过一些噪声还是不可防止的。大多数的使用者只注意专注度和松弛度的数值,却不关注噪声质量的好坏。然而,噪声质量在某些对噪声敏感的应用上是更加有用的〔例如,在某些医学和研究上的应用〕。默认情况下,噪声质量每秒钟输出一次。3.6原始脑电波数值〔RAW〕原始脑电数据由2字节构成,有符号的16位整型范围由-32768到32767。第1个字节代表高八位,第2个字节代表低八位。全部的原始脑波数值,有高八位和低八位按位或得到:Shortraw=(value[0]<<8)|value[1];语句中value[0]代表高八位,value[1]代表低八位。然而在系统中,位操作是不方便的,因此,有算术运算来代替位操作:raw=value[0]*256+value[1];if(raw>=32768)raw=raw–65536;通常情况下,每秒钟输出512次raw,大约每2ms输出一次。3.7眨眼强度〔strength〕用一位无符号整型代表使用者最近一次的眨眼强度。当侦测到眨眼信号时,会用1到255其中的某一数值来表示。这一数值表示眨眼强度,没有单位。3.8ThinkGear信息包格式ThinkGear数据包格式[3]由3局部组成:1,数据包头2,信息有效数据载荷3,有效数据校验和ThinkGear数据包被用来从ThinkGear模块组件向任意一个接收设备〔如,计算机,微处理器和其他任何能够接收连续位数据流的设备〕传递数据。报文格式被设计的主要目的是稳定和灵活。“数据包头〞和“有效数据校验和〞分别提供了数据流同步和数据完整性检验,与此同时,有效数据载荷的格式确保新的数据能够被加进信息包中并且在任何已存在的应用或设备中中断任何的数据包解析器。这就意味着任何一个完成ThinkGear信息包解析正确的应用能够使用更新的ThinkGear模块,无需改变它们的解析器或者应用,即使,更新的ThinkGear硬件包含了新数据或者重新排列了数据顺序。数据包结构:数据包发送的是异步串行数据,其发送媒介可能是UART(通用异步收发传输器)、串行COM、USB、蓝牙、或者是其他任何能够传递数据流的机制。每个数据包由包头开始,然后是数据有效载荷局部,结尾局部是数据校验和位。如3.1图所示:图3.1数据包格式说明其中[PAYLOAD…]局部允许有169字节长度,与此同时,每个[SYNC]、[PLENGTH]、[CHKSUM]都是1字节长度。这意味着,一个有效的数据包至少有4字节长度〔在数据有效载荷为空的情况下〕,同时数据包的最大容量为173字节〔当数据有效载荷为169字节长度时〕。数据包头每个数据包头由3字节组成:2个同步字节[SYNC](0xAA0xAA),紧随其后的是1字节的有效数据长度[PHENGTH](Payloadlength)。如图3.2所示:图3.2数据包头格式示意图2个字节的[SYNC]都用0xAA表示,代表一个新数据包的开始。同步2个字节代替1个字节,为了减少由1字节[SYNC](0xAA)引起数据包开始可能发生错误的时机。尽管对于2个连续的[SYNC]字节依旧有产生错误的可能性,不过[PLENGTH]和[CHKSUM]结合起来,能够确保“同步错误〞将永远不会被解释为有效的数据包。[PLENGTH]表示有效数据载荷局部的长度,其值范围为0到169。当其值大于169时,那么是错误的。值得注意的是,[PLENGTH]仅代表数据包有效数据载荷长度。然而,整个数据包的长度为[PLENGTH]+4字节。有效数据载荷数据包中的有效数据载荷是一连串的字节。有效数据载荷的字节数由数据包头的[PLENGTH]给出。1.有效数据载荷结构:一旦数据包中的校验和被验证,有效数据载荷就会被解析。有效数据载荷本身由一连串连续的数据值构成,被包含在其中的每一位称作——数据行。每个数据行不仅包含着其数据值本身所代表的意义,还包含着所有数据值的长度和数据的字节数等信息。因此,为了解析数据有效载荷,就必须要解析每一个来自数据有效载荷的数据行,直到所有的有效数据载荷字节被解析。2.数据行格式:每个数据行格式如图3.3所示:3.3数据行格式示意图在上面格式中值得注意的是,括号中的情况是有一定条件的,只出现在一些数据行中,并不是每个数据行都是如此。数据行可能由0开始,也可能由扩展代码字节[EXCODE](ExtendedCode)0x55开始。扩展代码字节的数量表示扩展代码级,反过来说,扩展代码级和代码[CODE]结合决定了组成数据行的数据值的类型。解析器因此一直通过对扩展代码〔0x55〕字节的计数来解析数据行,进而确定数据行代码的扩展码级。与扩展码级相连接的代码[CODE]表示数据行中数据值的类型。例如:当扩展码级为0时,代码[CODE]为0x04表示数据行包含专注度参数。不过,需要注意的是,扩展码级的0x55和[SYNC]的0xAA都不能够作为代码[CODE]使用。如果代码[CODE]值在0x00和0x7F之间,[VALUE…]是1字节长度〔单字节〕,在这种情况下,是不存在[VLENGTH]的,因此,单一的字节的[VALUE]是紧随在代码[CODE]之后的。如果代码[CODE]大于0x7F,[VLENGTH]会出现在代码[CODE]之后,并且其值表示[VALUE]中字节的数量〔多字节〕。更高的代码值对传输数值的指针更有效,但是这些值不适合一个单字节。有这种方式定义的数据行格式导致在任何一个适合的解析器中当有新的代码[CODE]代表的数据〔例如那些目前没有被认知的代码,但是解析过程不会被中断〕参加时不会被中断。代码定义表如下:Single-ByteCODEsExtended(Byte)CodeLevel[CODE][LENGTH]DataValueMeaning00x02-POOR_SIGNALQuality(0-255)00x04-ATTENTIONeSense(0to100)00x05-MEDITATIONeSense(0to100)00x16-BlinkStrength.(0-255)SentonlywhenBlinkeventoccurs.Multi-ByteCODEsExtended(Byte)CodeLevel[CODE][LENGTH]DataValueMeaning00x802RAWWaveValue:asinglebig-endian16-bittwo's-complimentsignedvalue(high-orderbytefollowedbylow-orderbyte)(-32768to32767)00x8324ASIC_EEG_POWER:eightbig-endian3-byteunsignedintegervaluesrepresentingdelta,theta,low-alphahigh-alpha,low-beta,high-beta,low-gamma,andmid-gammaEEGbandpowervaluesAny0x55-NEVERUSED(reservedfor[EXCODE])Any0xAA-NEVERUSED(reservedfor[SYNC])有效数据校验和[CHKSUM]位被用来验证数据包有效数据载荷的完整性。有效数据校验定义如下:归纳所有的数据包有效数据载荷的字节取归纳后有效数据载荷的低八位将低八位取反接收器接收一个数据包必须经历这3个步骤用来计算其接收到的有效数据载荷的校验和,同时这个计算的结果要与其接收到的数据包中的校验和进行比拟。如果这个计算的有效数据校验和与接收到的[CHKSUM]不匹配,那么整个数据包将被视为无效数据被丢弃;如果匹配,那么接收器将开始解析有效数据载荷。3.9数据包解析数据包解析过程:读取数据流中的每一字节,直到[SYNC]的0xAA出现;要确保第二次读取到的也是[SYNC]的0xAA。如果不是,重新进行步骤1;否那么,进行下一步;接下来读取[PLENGTH]值。如果[PLENGTH]值为170,重复步骤3〔因为170与[SYNC]的0xAA重复〕;如果[PLENGTH]值大于170,返回步骤1重新读取数据;否那么,执行步骤4;在数据流中读取[PLENGTH]后的[PAYLODA…],并且将其保存在一个足够大的数组内。讲读取到[PAYLODA…]中的每一个字节通过递增校验器相加;将校验器相加后结果的低8位取反,得到校验和。读取数据流中的校验和值。如果读取的校验和值和计算得到的校验和不匹配,重复步骤1。如何解析数据包中数据有效载荷的数据行在当前数据行开始时解析和计算扩展码级的个数;为当前数据行解析代码字节;如果代码[CODE]>=0x80,为当前数据行解析[VLENGTH];根据数据行的扩展码级,代码和[VLENGTH]解析和处理当前数据行的[VALUE…]数据;如果保存[PAYLOAD]数组中有字节没有被解析,那么返回步骤1,继续解析下一数据行。3.10Mindband开发工具MDT:NeuroSkyMindband开发工具包〔MDT〕可以从NeuroSky在线商店免费下载。MDT提供了MindSet神念耳机或MindWave脑立方耳机的脑机界面〔BCI〕技术开发和发布游戏以及其它应用软件所需要的各类工具和资源。MDT包含开发所需要的驱动、例如代码以及在不同的软件平台下进行开发的资料文档。MDT支持包括PC,如诺基亚Symbian,甚至嵌入式单片机开发平台,如Arduino™微控制器开发平台。MDT直接支持的开发语言包括C/C++、C#、Java〔通过JNI支持〕以及J2ME。此外,MDT还提供了一个可运行于Windows和MacOSX系统的后台程序“ThinkGearConnector〞(TGC)。TGC在用户计算机上监听一个TCP端口,应用软件可以通过连接该TCP端口来获取耳机的脑波数据。由于在后台运行的TGC已经连接到脑立方耳机,所以用任何语言编写的任何应用软件都可以通过TCPSocket〔如FlashActionScrip3及其它脚本语言〕来连接TGC,来读取数据。使用MDT开发工具包,可以开发出令人激赏的新游戏,让使用者挑战他们的意念控制力,也可以为现有游戏加上新的意念控制功能。MRTNeuroSkyMindSet研究工具包(MRT),研究人员可以将脑立方当做一个数据采集设备。通过本钱低廉、易于使用的脑立方耳机和MRT研究工具包,研究人员可以拓展他们的研究领域并且更有效地利用现有资源。MRT包含NeuroView应用软件,通过该软件,可以很容易的实时记录脑立方数据,转换数据成图表。MRT还包含NeuroSkyLabMATLAB模块,经过本模块可以自行开发MATLAB脚本及函数,便利脑立方采集数据的处理和分析。3.11神念脑电硬件TGAM模块参数说明:•采样率:512Hz•频率范围:3Hz-100Hz•静电保护:4kV接触放电;8kV隔空放电•最大消耗功率:15MA3.3V•运行电压:2.97~3.63V测量•原始脑波信号•处理和输出α,β等脑波波段数据•处理和输出Neurosky〔神念科技〕获得专利技术的eSense专注度和放松度指数以及未来开发的其他数据•嵌入式的信号质量分析功能能警告接触不良或是完全没接触的异常状态•眨眼侦测物理规格•规模尺寸〔最大〕2.79cmx1.52cmx0.25cm•重量〔最大〕130mgNeuroSky的TGAM模块集成了ThinkGear芯片。前期准备:软件:1,串口调试工具2,TGAM模块输出信号质量检测工具硬件:(如图3.4所示)TGAM模块前额干电极耳夹参考电极带有屏蔽线的连接电缆干接触点规格要求:•建议接触点与皮肤接触的外表积在80平方毫米到150平方毫米之间•Ag/AgCl,不锈钢,金或银〔坚硬的材质及镀金材质都可以〕•脑电采集点位于前额左眼或右眼上方•接地点和参考点位于耳后或夹在耳垂上•接触点对皮肤的压力最少为0.8PSI,以防止使用时接触点会滑动连接接触点的电线规格要求:•长度小于12寸,越长就越容易受噪音影响•脑电采集点和参考点必须用屏蔽线连接,接地点不须用屏蔽线连接口径不能超过AWG28图3.4自制脑电波传感器硬件局部图3.5TGAM模块PCB板布局TGAM模块引脚说明:〔如图3.5所示〕头部P1(电极)Pin1-脑电电极“EEG〞Pin2-脑电防护罩Pin3-接地电极Pin4–参考保护Pin5–参考电极“REF〞头部P3(UART/串口)Pin1–GND“-〞Pin2-VCC“+〞Pin3—RXD“R〞Pin4–TXD“T〞头部P4(电源)Pin1-VCC“+〞Pin2-GND“-〞对TGAM模块跳线进行设置时,要了解B0,B1和M跳线在不同电平下的状态:表格SEQ表格\*ARABIC2TGAM波特率及内容设置B0B1波特率输出内容LOWLOW9600EEG,MentalstatelevelHIGHLOW1200LOWHIGH57600RAWEEG,EEG,MentalstatelevelHIGHHIGH未定义未定义表格SEQ表格\*ARABIC3TGAM模块干扰滤波设置M功能HIGH过滤60Hz干扰信号LOW过滤50Hz干扰信号表格2中第三行和表格3中第二行参数设置是我们所需要的,传输速率为57600bps,输出内容包括8组EEGPower,Mentalstatelevel和原始脑波数据RAW。同时需要配置模块干扰滤波器滤除50HZ的工频干扰信号。如何检测TGAM模块设置状态:参考上述两表,可以使用万用表来检查TGAM模块的当前设置:万用表调至电阻档,量程大于10KΩ,一只表笔接于其中一个跳线盘上〔B0、B1、M〕,另一只表笔分别测试VCC和GND端,测试时,如果接VCC时万用表显示约10K阻值,那么表示此跳线盘通过上拉电阻接于VCC,状态为HIGH;假设测试GND时万用表显示约10K阻值,表示此跳线盘通过下拉电阻接于GND,为LOW状态。以此方式可以检查出当前TGAM的设置,如果设置与表2表3中所选择设置不同,可以调整跳线盘旁边的电阻〔上拉/下拉〕。如图3.6所示。图3.6检测TGAM模块状态电阻说明硬件连接:图3.7连接好后的TGAM模块如图3.7所示:将前额电极电缆与头部P1的pin1连接,屏蔽线与P1的pin2连接;耳夹接地端连到P1的pin3,屏蔽端连接P1的pin4,耳夹参考电极连接到P1的pin5。至此,电极局部与TGAM模块连接完毕。但需要注意的是,模块本身尺寸较小,而且集成度高,多为贴片是元器件,在焊接过程中要特别注意,否那么易损坏模块。然后要解决的是TGAM模块于计算机的通信问题。有多种方式可供选择:方式一:通过TGAM与USBTOTTL模块连接实现与计算机通信。其优点在于,USBTOTTL提供了3.3V的电压输出,可以直接给TGAM模块供电,省去了外置电源的麻烦。不过其也存在容易将计算机端的干扰引入TGAM模块。具体连接方法为,将USBTOTTL模块的TXD、RXD、VCC、GND端分别对应接到TGAM模块的RX、TX、VCC、GND引脚。如图3.8所示:图3.8USBTOTTL与TGAM模块连接示意图方式二:通过TGAM与蓝牙模块连接,实现与计算机通信的目的。其优点在于不会像USBTOTTL模块那样引入外来噪声干扰,通信质量能够得到保证,而且蓝牙传输波特率可通过AT命令进行更改;然而,其与方式一相比,需要外接电源给TGAM模块和蓝牙模块供电,并且蓝牙需要一主一从进行配对前方可通信。除上述两种通信方式外,还可以通过射频或者是通过单片机中转实现与计算机的通信。第四章Arduino及各局部模块介绍分析4.1ArduinoArduino是基于开放原始代码的硬件平台,而且具有使用类似java和C语言的开发环境。让使用者可以快速使用Arduino语言与Flash或Processing等软件,作出互动作品。Arduino可以使用开发完成的电子元件〔例如Switch或Sensors或其他控制器、LED、步进电机或其他输入输出裝置〕。Arduino也作为一个可以跟软件沟通的平台,例如:flashprocessingMax/MSPVVVV或其他互动软。与此同时,Arduino开发IDE界面基于开放原始码原那么,可以免费下载使用。由于其开源性,目前市面上的Arduino版本非常之多:ArduinoUNOR3,Arduinomini,Arduinonano,ArduinoLeonardo,Arduino2560……可以针对不同场合,不同用途选取所需的Arduino。本设计中选用的是ArduinoUNOR3,由于其稳定性,成为入门级首选。ArduinoUNOR3技术参数摘要:处理器ATmega328工作电压5V输入电压〔推荐〕7-12V输入电压〔范围〕6-20V数字IO脚14(其中6路作为PWM输出〕模拟输入脚6IO脚直流电流40mA3.3V脚直流电流50mAFlashMemory32KB〔ATmega328,其中0.5KB用于bootloader〕SRAM2KB〔ATmega328〕EEPROM1KB〔ATmega328〕工作时钟16MHz电源ArduinoUNO可以通过3种方式供电:1,外部直流电源通过电源插座供电2,电池连接电源连接器的GND和VIN引脚3,USB接口直接供电.而且Arduino能自动选择供电方式.电源引脚说明:VIN--当外部直流电源接入此引脚时,既可以通过VIN向外部供电;也可以通过此引脚向ArduinoUNO直接供电;VIN有电时将忽略从USB或者其他引脚接入的电源。5V--通过稳压器或USB的5V电压,为ArduinoUNO上的5V芯片供电。3.3V--通过稳压器产生的3.3V电压,最大驱动电流50mA。GND接地引脚。存储器ATmega328包括了片上32KBFlash,其中0.5KB用于Bootloader。同时还有2KBSRAM和1KBEEPROM。Bootloader说明:Bootloader程序,是系统上电后运行的第一段代码,就好比PC机BIOS中的程序,启动就进行自检,配置端口等等,当然单片机就是靠烧写熔丝位来设定上电从boot区启动的,使用这个程序就可以直接把从串口发来的程序存放到flash区中。我们在使用Arduino编译环境下载程序时,就先让单片机复位,启动Bootloader程序引导串口发过来的程序顺利写入flash区中,flash可以重复烧写,因此想更新软件就十分的方便。输入输出14路数字输入输出口:工作电压为5V,每一路能输出和接入最大电流为40mA。每一路配置了20-50K欧姆内部上拉电阻〔默认不连接)。除此之外,有些引脚有特定的功能:串行口信号RX〔0号〕、TX〔1号〕:与内部ATmega8U2USB-to-TTL芯片相连,提供TTL电压水平的串口接收信号;外部中断〔2号和3号〕:触发中断引脚,可设成上升沿、下降沿或同时触发;脉冲宽度调制PWM〔3、5、6、9、10、11〕:提供6路8位PWM输出;SPI〔10(SS),11(MOSI),12(MISO),13(SCK)〕:SPI通信接口;LED〔13号〕:Arduino专门用于测试LED的保存接口,输出为高时点亮LED,反之输出为低时LED熄灭。6路模拟输入A0到A5:每一路具有10位的分辨率〔即输入有1024个不同值〕,默认输入信号范围为0到5V,可以通过AREF调整输入上限。除此之外,有些引脚有特定功能:TWI接口〔SDAA4和SCLA5〕:支持通信接口〔兼容I2C总线〕。AREF:模拟输入信号的参考电压。Reset:信号为低时复位单片机芯片。通信接口串口:ATmega328内置的UART可以通过数字口0〔RX〕和1〔TX〕与外部实现串口通信;ATmega16U2可以访问数字口实现USB上的虚拟串口。TWI〔兼容I2C〕接口:SPI接口:下载程序ArduinoUNO上的ATmega328已经预置了bootloader程序,因此可以通过Arduino软件直接下载程序到UNO中。可以直接通过UNO上ICSPheader直接下载程序到ATmega328。ATmega16U2的Firmware〔固件〕也可以通过DFU工具升级。注意要点ArduinoUNO上USB口附近有一个可重置的保险丝,对电路起到保护作用。当电流超过500mA是会断开USB连接。ArduinoUNO提供了自动复位设计,可以通过主机复位。这样通过Arduino软件下在程序到UNO中软件可以自动复位,不需要在复位按钮。在印制板上丝印"RESETEN"处可以使能和禁止该功能。ATmega328介绍图4.1为ATmega328各引脚示意图根本参数:闪存容量:32KBEEPROM存储器容量:1KB时钟频率:20MHz接口类型:I2C,SPI,USART电源电压最小:1.8V最大:5.5V电源电压外表安装器件:外表安装封装类型:TQFP针脚数:32工作温度范围:-40°Cto+85°C存储器容量,RAM:2KB输入/输出线数:23模数转换器输入数:8速度:20MHz程序存储器容量:32KB(32Kx8)振荡器型:内部包装:托盘作为一款AVR单片机,此类型单片机与我们平时常用的51单片机相比拟,有以下特点:1、AVR单片机〔ATmega16〕的时钟源〔晶振、内部RC等〕可以不经过分频直接提供应CPU使用,而51的CPU主频等于晶振的12分频,ATmega16外部提供16M的晶振,即CPU频率可达16M,常规51的时钟源为12M,经12分频后CPU频率仅为1M,所以AVR单片机的运行速度比51单片机的运行速度要快的多,并且AVR单片机可提供内容1M、2M、4M、8M等可变的CUP频率。2、AVR具有超功能精简指令。具有32个通用工作存放器(相当于8051中的32个累加器,克服了单一累加器数据处理造成的瓶颈现象),有128B~4KB个SRAM,可灵活使用指令运算。3、AVR既具有简单的、可以自制的ISP下载线和Jtag仿真器,又有DIP直插的封装形式4、AVR的C语言编程与C语言教科书上学习的标准C语言语法是几乎一样的,不像51的C语言,一些bit、srf之类的变量定义在教科书中是找不到的,有利于后续嵌入式系统的学习5、AVR具有休眠省电功能(POWERDOWN)及闲置(IDLE)低功耗功能。一般耗电在1~2.5mA,典型功耗情况,WDT关闭时为100nA6、AVR内部自带集成AD转换,更易于对模拟量的处理,这使得AVR单片机的性价比明显高于51单片机。7、AVRI/O口是真正的双向I/O口,单片机读取外部引脚电平直接通过PINX读取,不需要像51那样先给I/O口全写1操作后才能读取外部引脚电平,使得单片机读取外部数据更容易。8、AVRI/O具有强大的电流驱动能力,具有大电流(灌电流)10~20mA或40mA(单一输出),可直接驱动SSR或继电器〔51的拉电流能力<100uA,灌电流能力10mA〕。9、AVR几乎所有的I/O口都有第二功能,PD4,PD5的第二功能方便容易的产生PWM波,方便快捷的控制电机的转速。10、AVR内部提供丰富的中断及存放器资源,光外部中断就有3个,定时器有3个,丰富的存放器资源使得可以设置外部中断的多种触发方式,以及设置内部定时分频系数,丰富的存放器资源使得可以对AVR的I/O口进行多功能操作11、AVR具有专为I2C协议设计的I/O口,使得单片机的多机通信变得更容易。一方面,AVR单片机自带的AD转换功能,所以当使用传感器是非常方便的。不像,我们所使用的51单片机在进行AD转换时还要设计外围转换电路。另一方面,AVRI/O具有强大的电流驱动能力也要优于51单片机,相对而言的一些“大电流〞设备不用外置电阻限流〔如,舵机等〕,且允许的电流越大,一旦有误操作的时候,也会对单片机起到一定的保护作用。Arduino集成开发环境〔IDE〕ArduinoIDE属于开源软件,从初期的Arduino0001版本开展到目前的ArduinoBETA版。如今已几乎完全适用于市面主流的windows/linux/macos等操作系统。由此也可见,Arduino的开展是非常迅速的。图4.2为Arduino版开发编译环境Arduino版开发编译环境十分简洁〔如图4.2所示〕,各功能键描述如下〔如图4.3所示〕:图4.3为Arduino版开发编译环境各功能键从左到右依次为:编译按钮〔检查代码是否有错误存在,假设有错误存在,那么不能通过编译,错误原因会显示在下部黑色区域〕;下载按钮〔将编译与烧录结合在一起,通过下载线可将编译好的程序烧录到Arduino中〕;新建按钮〔新建页,编写新的程序〕;翻开按钮〔可翻开已完成的“*.ino〞程序,也可快速翻开自带的各种例程代码〕;保存按钮〔用于保存程序,程序后缀名为“.ino〞〕;最右边的为监视器的快捷按钮,翻开后可以观察所需数据情况。图4.4为arduino开发板类型选择界面“Tool〞——“Board〞,选择所连接板子的类型,由于arduino的开源性,针对不同环境不同场合不同用途开发出来各种不同类型的arduino。本设计使用的是ArduinoUNO,应选取第一个ArduinoUno即可。如图4.4所示。图4.5为串口选择示意图串口选择和硬件串口标号一致,选择一次即可。以后使用自动匹配。如图4.5所示。图4.6为下载方式选择示意图程序烧录方式选择,我在使用时是默认的AVRISPmkII方式,其他方式没有测试过。如图4.6所示。Windows7下如何安装Arduino驱动程序:在网上收集到的教程中,都是如何子在windowsxp系统下安装驱动程序的教程。下面介绍如何手动在Windows7下安装Arduino驱动程序。1,在“设备管理器〞中的“端口〔COM和LPT〕〞中找到Arduino所占用的端口〔此时,不会具体到某一端口的,知道的只有某一端口被占用,只有我们安装好驱动程序后,才知道具体被占用的端口名称〕2,右键被Arduino占用的端口,如图4.7所示:图4.7为查看arduino所占端口示意图〔此图为驱动已装〕选择“更新驱动程序软件〔P〕…〞3,随后出现:图4.8windows7下更新驱动程序软件界面单击“浏览计算机以查找驱动程序软件〔R〕〞,如图4.8所示。4,然后浏览在出现的浏览文件夹对话框中点击解压文件夹,在解压文件夹下找到arduino文件夹,点击翻开,会看见有drivers文件夹如下列图所示:图4.9浏览驱动软件程序界面注意:一定要勾选“包括子文件夹〞选项。如图4.9所示。5,确定无误好,单击“下一步〞,即可完成安装。如图4.10所示:图4.10驱动软件程序安装完成界面4.1.10Arduino语言:Arduino语言是以setup()开头,loop()作为主体的一个程序构架。官方网站是这样描述setup()的:用来初始化变量,管脚模式,调用库函数等等,此函数只运行一次。loop()函数是一个循环函数,函数内的语句周而复始的循环执行,功能类似c语言中的“main()〞函数。本毕设所用到局部函数功能:数字I/O·pinMode(pin,mode)数字IO口输入输出模式定义函数,pin表示为0~13,mode表示为INPUT或OUTPUT。·digitalWrite(pin,value)数字IO口输出电平定义函数,pin表示为0~13,value表示为HIGH或LOW。比方定义HIGH可以驱动LED。·intdigitalRead(pin)数字IO口读输入电平函数,pin表示为0~13,value表示为HIGH或LOW。比方可以读数字传感器。模拟I/O·intanalogRead(pin)模拟IO口读函数,pin表示为0~5〔ArduinoDiecimila为0~5,Arduinonano为0~7〕。比方可以读模拟传感器〔10位AD,0~5V表示为0~1023〕。·analogWrite(pin,value)-PWM数字IO口PWM输出函数,Arduino数字IO口标注了PWM的IO口可使用该函数,pin表示3,5,6,9,10,11,value表示为0~255。比方可用于电机PWM调速或音乐播放。串口收发函数·Serial.begin(speed)串口定义波特率函数,speed表示波特率,如9600,19200等。·intSerial.available()判断缓冲器状态。·intSerial.read()读串口并返回收到参数。·Serial.flush()清空缓冲器。·Serial.print(data)串口输出数据。·Serial.println(data)串口输出数据并带回车符。延时函数:·delay(ms)延时函数〔单位ms〕。·delayMicroseconds(us)延时函数〔单位us〕。4.2蓝牙蓝牙,是一种支持设备短距离无线通信〔一般10m内〕技术。能在包括移动、无线耳机、笔记本电脑相关的外设等众多设备之间进行信息的无线化交换。利用“蓝牙〞技术,可以有效地简化移动通信终端设备之间的通信,也能够简化设备与因特网之间的通信,从而令数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHzISM〔即工业、科学、医学〕频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。本设计中使用的是BLK-MD-BC04-B蓝牙模块〔主从一体〕,采用英国CSR公司BlueCore4-Ext芯片,遵循V2.1+EDR蓝牙标准。本模块支持UART,USB,SPI,PCM,SPDIF等接口,并支持SPP蓝牙串口协议,具有本钱低、体积小、功耗低、收发灵敏性高等优点,只需配备少许的外围元件就能实现其强大功能。特点[4]·蓝牙V2.1+EDR·蓝牙Class2·内置PCB射频天线·内置8MbitFlash·支持SPI编程接口·支持UART,USB,SPI,PCM等接口·支持主从一体·支持软硬件控制主从模块·3.3V电源·支持连接7个从设备·通过REACH、ROHS认证图4.11BLK-MD-BC04-B蓝牙模块引脚示意图引脚说明〔如图4.11所示〕:VCC:电源正极输入〔可选择5V供电或者3.3V供电〕RXD:对应接TT电平的RXDTXD:对应接TT电平的TXDGND:电源地SET:主从模式设置,对应蓝牙模块的PIO(5),置高(接3.3V)为主模式;置低或者悬空即为从模式〔可通过反面焊点设置主从模式〕CLR:指令去除引脚。(正常情况下不用作任何配置)反面焊盘“SETPOWER〞“SETMODE〞说明〔如图4.11所示〕1,“SETPOWER〞〔上方标记〕:用焊锡焊短接后表示模块使用3.3V供电,此时VCC,接3.3V〔SETPOWER引脚短接后VCC千万不能接5V,否那么必烧〕;未短接表示模块使用5V供电。2“SETMODE〞〔下方标记〕:短接后表示模块为主模式;未短接表示模块为从模式。蓝牙通信数据格式:8位数据位、1位停止位、无奇偶校验位两蓝牙模块间正常通信条件:1,必须是主机和从机之间的通信〔二者区别在于,主机能够搜索并发起连接,并且不能被其他蓝牙设备搜索到;从机只能够被搜索和被连接〕;2,二者配对码〔即PIN〕必须保持一致,才能够进行连接;3,要使用相同的波特率,才能保证数据的正常传输,否那么会出现乱码或无法正常接收数据等问题。蓝牙模块调试与参数配置:调试过程中,由于实现没有购置专门用于调试的数据线。于是,在查阅资料并和蓝牙的技术支持沟通后,使用了一根51单片机的串口下载线对蓝牙进行调试。调试硬件工具:串口下载线RS232转TTL与蓝牙模块通常的连接方式:蓝牙模块TXD蓝牙模块TXDRXD串口下载线RXDTXD图4.12串口下载线RS232转TTL与蓝牙数据连接示意图串口下载线RS232转TTL和蓝牙模块的VCC、GND引脚接到同一个外置5V电源的正负极上〔实验中,我所使用的是4节1.2V干电池串联作为此次电源〕。调试软件工具:使用的是串口调试助手SComAssistantV2.1,如图4.13:图4.13为串口调试助手SComAssistantV2.1如下图,串口调试助手左侧为各种参数设置,保证与被调试设备通信。串口〔COM*〕的选择要与硬件在计算机中实际连接的串口一致。右上侧空白区域为数据接收区;右下侧为数据发送区域;最下面一行为RX、TX接收发送计数次数。如何查看所连硬件在计算机中串口位置:在windows7系统中,右键“计算机〞——单击“管理〞——选择“设备管理器〞——展开右侧的“端口〔TCP和LPT〕〞,通过此步骤,即可知道实际端口位置。然而,在实际操作中遇到了一个问题:我所使用的串口调试助手SComAssistantV2.1只提供COM1——COM4四个可选择串口,而找不到实际所需要的串口。下面提供在windows764位系统中的解决方法:右键“计算机〞——单击“管理〞——选择“设备管理器—展开右侧的“端口〔TCP和LPT〕〞——右键“选择已连接的端口〞——单击“属性〞——找到“端口设置〞——单击“高级〞——会看到左下角的“COM端口号〞下拉菜单——选择所需端口后,单击“确定〞〔不过需要注意的是,不要选择正在使用的中的串口,否者会造成不可预知的错误〕。局部BLK-MD-BC04-B蓝牙模块AT指令介绍[5]表格SEQ表格\*ARABIC4命令1:测试连接命令下行命令应答参数ATOK无表格SEQ表格\*ARABIC5命令2:查询——程序版本号下行命令应答参数AT+VERSION+VERSION=<Para1><Para1>:固件版本号,蓝牙版本号,本地HCI版本,HCI修订,LMP版本号,LMP子版本号事例:AT+VERSION\r\n+BOLUTEKFirmwareV2.2,BluetoothV2.1,HCIV2.1,HCIRev37,LMPV4,LMPSubV37表格SEQ表格\*ARABIC6命令3:查询帮助信息下行命令应答参数AT+HELP各种指令使用方式〔命令过多,不一一描述〕无表格SEQ表格\*ARABIC7命令4:恢复默认设置下行命令应答参数AT+DEFAULTOK无表格SEQ表格\*ARABIC8命令5:查询/设置——配对码下行命令应答参数AT+PINAT+PIN<Para1>+PIN=<Para1>1.+PIN=<Para1>OK——成功2.ERROR=<Error_Code>——失败<Para1>:配对码默认:1234表格SEQ表格\*ARABIC9命令6:查询/设置——波特率下行命令应答参数AT+BAUDAT+BAUD<Para1>+BAUD=<Para1>1.+BAUD=<Para1>OK——成功2.ERROR=<Error_Code>——失败<Para1>:波特率1120022400348004960051920063840075760081152009230400A460800B921600C1382400默认:49600注意:波特率更改以后,如果不是默认的9600,在以后参数设置或进行数据通信时,需使用所设置的波特率。表格SEQ表格\*ARABIC10命令7:查询/设置——模块SPP主从模式下行命令应答参数AT+ROLEAT+ROLE<Para1>+ROLE=<Para1>1.+ROLE=<Para1>OK——成功2.ERROR=<Error_Code>——失败<Para1>:0从设备1主设备默认:0从设备注意:在硬件设置主从模式状态时,可以用AT+ROLE查询,设置命令不能更改主从模式。在软件设置主从模式状态时,此命令设置主从模式在下一次上电时生效。表格SEQ表格\*ARABIC11命令8:查询/设置——串口通讯模式下行命令应答参数AT+UARTMODEAT+UARTMODE<Para1>,<Para2>+UARTMODE=<Para1>,<Para2>1.+UARTMODE=<Para1>,<Para2>OK——成功2.ERROR=<Error_Code>——失败<Para1>:停止位0:1位停止位1:2位停止位<Para2>:校验位0:无校验1:奇校验2:偶校验默认值:0,0表格SEQ表格\*ARABIC12命令9:查询/设置——是否自动连接远端蓝牙设备下行命令应答参数AT+AUTOCONNAT+AUTOCONN<Para1>+AUTOCONN=<Para1>+AUTOCONN=<Para1>OK——成功2.ERROR=<Error_Code>——失败<Para1>:0:不自动连接1:自动连接默认值:1以上是枚举出的AT指令中,5、6是保证两蓝牙模块〔一主一从〕能够正常通信的关键,而1可以用来检查AT命令是否可以执行。由于我是从硬件上更改的主模式,所以没有用命令7来进行主、从模式的设置,但是用命令7作了当前蓝牙模式查询,确定由硬件更改到了主模式。命令8、9不做任何修改,取其默认值即可。蓝牙调试过程BLK-MD-BC04-B蓝牙模块默认为从机,默认波特率9600,通信格式为8位数据位、1位停止位、无奇偶校验位,在串口助手中设置相应参数。输入“AT/r〞后,串口调试助手TX计数为1,RX计数为0,数据接收区无回应。输入其他AT指令,依旧没有任何反响,而且串口下载线指示灯显示不正常。在与蓝牙模块的技术支持沟通后,改变了串口下载线RS232转TTL与蓝牙模块的连接方式:〔如图4.14所示〕蓝牙模块蓝牙模块RXDTXD串口下载线串口下载线RXDTXD图4.14实验中串口下载线与蓝牙模块数据连接示意图虽然此种连接方式看似和在理论上均为错误,但是按此种方式连接上电后,蓝牙模块指示灯均匀慢闪烁〔等待配对状态〕,串口下载线各指示灯均正常亮起。究其原因,没有深度研究,不过可能是单片机下载线和正式的调试线在RX/TX上设置的差异。发送AT指令格式说明〔针对BLK-MD-BC04-B蓝牙模块〕:1,测试连接指令,在数据发送区输入“AT/r〞(需要注意的是,在AT和/r之间要有空格,否那么接收区无回应),发送之后,会在数据接收区看到返回的“OK〞字样,说明连接成功。2,测试“查询——程序版本号〞指令,在数据发送区输入“AT+VERSION/r〞(需要注意的是,在VERSION和/r之间要有空格,否那么接收区返回值错误)3,测试“查询——帮助信息〞指令,在数据发送区输入“AT+HELP/r〞(需要注意的是,在HELP和/r之间要有空格,否那么接收区返回值错误)4,测试“查询/S设置——波特率〞指令,在数据发送区输入“AT+BAUD/r〞(需要注意的是,在HELP和/r之间没有有空格,否那么接收区返回值错误);设置波特率时,“AT+BAUD*/r〞(*表示相应的波特率代码,且与BAUD之间没有空格)5,测试“查询——模块SPP主从模式〞指令,在数据发送区输入“AT+ROLE/r〞(需要注意的是,在ROLE和/r之间没有有空格,否那么接收区返回值错误)6,测试“查询/设置——配对码〞指令,在数据发送区输入“AT+PIN/r〞(需要注意的是,在PIN和/r之间没有有空格,否那么接收区返回值错误);设置配对码时,“AT+PIN****/r〞,返回值为“+PIN=****OK〞时,配对码修改成功。关于BLK-MD-BC04-B蓝牙模块其他说明本蓝牙模块为2.0版本,有效通信距离为10M。经实测,实际通信距离大于10M,不过通信质量有可能受损。蓝牙只能够一对一进行通信,不能组网。在波特率,配对码相同情况下,自动完成配对过程,此过程无需人工干预。4.3L298N电机驱动模块L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。其实物及引脚图4.15所示:图4.15为L298引脚示意图1,1和15和8引脚直接接地。2,4管脚VS接2.5V到46V的电压,它是用来驱动电机的。,9引脚是用来接4.5V到7V的电压的,它是用来驱动L298芯片的〔因此,L298需要从外部接两个电压,一个是给电机的,另一个给L298芯片的〕。3,6和11引脚是它的使能端,一个使能端控制一个电机,至于那个控制那个你自己焊接,你可以把它理解为总开关,只有当它们都是高电平的时候两个电机才有可能工作。4,5,7,10,12是298的信号输入端和下位机的IO口相连。5,2,3,13,14是输出端,与所需驱动的直流电机、步进电机相连。其中,输入5和7控制输出2和3,输入的10,12控制输出的13,14。4.3.1L298N的逻辑功能:表格SEQ表格\*ARABIC13L298N的逻辑功能IN1IN2ENA电机状态xx0停止001快速停止011逆时针101顺时针111快速停止4.3.2L298N驱动模块连接图,如图图4.16L298N有两路电源分别为逻辑电源和动力电源,上图4.16中6V为逻辑电源,12V为动力电源。J5接入逻辑电源,J4接入动力电源,J1为单片机控制两个电机的输入端,J2与J3分别与两个电极的正负极相连。ENA与ENB直接接入6V逻辑电源也就是说两个电机时刻都工作在使能状态,控制电机的运行状态只有通过J1四个接口。由于使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针状态时会形成很大的反向电流,通常在电路中参加二极管的作用就是在产生反向电流的时候进行泄流,保护芯片的平安。如何使用L298N对直流电动机进行调速通常采用PWM调速PulsewidthModulation〔脉冲宽度调制〕对直流电机进行调速[6]。在对直流电动机电压的控制和驱动中,半导体功率器件(L298)在使用上可以分为两种方式:线性放大驱动方式和开关驱动方式在线性放大驱动方式,半导体功率器件工作在线性区.优点:控制原理简单,输出波动小,线性好,对邻近电路干扰小。缺点:功率器件工作在线性区,功率低和散热问题严重。〔所以L298N芯片要加散热片〕开关驱动方式是使半导体功率器件工作在开关状态,通过脉调制〔PWM〕来控制电动机的电压,从而实现电动机转速的控制。当开关管的驱动信号为高电平时,开关管导通,直流电动机电枢绕组两端有电压U。t1秒后,驱动信号变为低电平,开关管截止,电动机电枢两端电压为0。t2秒后,驱动信号重新变为高电平,开关管的动作重复前面的过程。PWM输出波形〔如图4.17〕和计算图4.17PWM输出波形示意图电动机的电枢绕组两端的电压平均值u为:u=式中D为占空比,D=t1/T占空比D表示了在一个周期T内开关管导通的时间与周期的比值。D的变化范围为0≤D≤1。当电源电压U不变的情况下,输出电压的平均值U取决于占空比D的大小,改变D值也就改变了输出电压的平均值,从而到达控制电动机转速的目的,即实现PWM调速。在PWM调速时,占空比D是一个重要参数。改变占空比的方法有定宽调频法、调宽调频法和定频调宽法等。常用的定频调宽法,同时改变t1和t2,但周期T〔或频率〕保持不变。第五章小车制作及调试5.1小车制作材料准备表格SEQ表格\*ARABIC14准备材料名称数量底盘1带减速齿轮的直流电机2车轮2万向轮1电源2Arduinouno1蓝牙模块1L298n模块1杜邦线〔公头、母头〕假设干Arduino扩展版1本毕设采用的小车底盘由有机塑料制成,具有轻便耐用、易改装等特点。动力局部为带减速齿轮的直流电机,有效的防止实验过程中由于调速失误造成车速过快,而对小车造成损坏;由于只使用了两只轮子+万向轮的结构,故需要转向时采取差速转向〔即一只电机转速大于或小于另一只电机,从此完成转向过程〕。与此同时,采用两只轮子,可以有效降低小车的整体耗电量。电源采取分开供电的方式,由4节1.2v的Ni-Mn电池串联成的电池组为arduino供电;L298N电机驱动模块局部由容量为5200MA的12.6v锂电池供电用来驱动电机,而L298N芯片由arduino供电。蓝牙模块由arduino上的5v输出引脚供电,共用arduino的GND。5.2程序流程图,如图5.1所示数据初始化开始数据初始化开始专注度为50到75时专注度为50到100时于25专注度为25到50时专注度为1到25时进行数据解析专注度为50到75时专注度为50到100时于25专注度为25到50时专注度为1到25时进行数据解析得到专注度数值得到专注度数值右转左转后退前进右转左转后退前进结束结束图5.1程序流程图5.3各模块连接1,蓝牙模块与arduino的连接:在连接之前,蓝牙模块已经通过串口调试助手将各个参数〔波特率,配对码等〕调整完毕。蓝牙VCC端连接到arduino的5v电源输出端,GND端同样连接到arduino的GND端〔arduino上有多个GND端,选取任意一个即可〕;然后分别将蓝牙模块的RX、TX端分别对应连接到arduino的数字I/O的1号〔TX〕和0号〔RX〕端口[7]。然而,实际上,次毕设只用蓝牙接收数据并没有发送数据,因此,蓝牙模块的TX端口可空出,不需要与arduino连接。蓝牙模块接收数据代码:byteReadOneByte(){intByteRead;while(!Serial.available());ByteRead=Serial.read();returnByteRead;}[8]2,L298N电机驱动模块与arduino的连接:L298N模块的两个使能端ENA和ENB除了当二者输入为高电平的时候提供使能信号外,还负责通过脉冲宽度调制PWM调节电机转速的功能,由上面对arduino的介绍可知,arduino数字I/O的3,5,6,9,10,11引脚可使用PWM输出函数analogWrite(pin,value),其中value取值范围为0到255,可通过改变数值大小,到达调节电机转速的目的。因此,将ENA接到3号引脚,ENB接到6号引脚〔当然,接到其他四个引脚也可以〕。控制电机运行状态的IN1——IN4分别连接到数字I/O的2、4、5、7号引脚。L298N模块各引脚定义代码:#defineENA3#defineENB6#defi

温馨提示

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

评论

0/150

提交评论