智能机器人小车 创意设计制作指导手册
江苏省天一中学人工智能社团 指导老师:邓一波 俞金炎
二零一一年三月
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
目 录
一,机器人概述
二,机器人小车硬件结构解析
三,机器人小车编程语言及环境
四,智能机器人小车安装,调试
五,智能机器人小活动方案及创意案例
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
第一章 机器人概述
1,机器人技术的发展
1.1机器人的由来
机器人 是20世纪才出现的新名词。1920年,捷克剧作家Capek在他的《罗萨姆万能机器人公司(R.U.R)》剧本中,第一次提出了机器人(robot)这个词。robot是从古代斯拉夫语robota一词演变而来的。robota本是强制劳动的意思,Capek在二十世纪工业后技术和生产快速发展的背景下,根据它造出具有\"奴隶机器\"含义的新词robot。它反映着人类希望制造出象人一样会思考,有劳动 的机器代替自己工作的愿望。但在当时,机器人一词也仅仅具有科
幻意义,并不具备现实意义,真正使机器人成为现实是 20世纪工业机器人出现以后。 人类发展到20世纪,随着社会分工的细化,从事简单重复工作的人们强烈渴望有某种能代替自己工作的机器出现,在 这方面的研究,美国的英格伯格和德沃尔走在了前面。 1954年,电子学家德沃尔获得了一项\"可编程序机械手\"的专利,这是一种象人手臂的机械手,它按程序进行工作,这种程序可以根据不同工作需要来编制,因此,具有通用性和灵活性,由此,热衷于机器人研究的物理学家英格伯格想到,如果能制造出这种机器,可象人一样学习别人干活的动作,之后便能自动重复进行操作。于是,在1958年,英格伯格和德沃尔联手制造出第一台真正实用的工业机器人,并很快得到了应用。 随后,他们成立了世界上第一家机器人制造工厂——尤尼梅逊公司,并将第一批机器人称为\"尤尼梅物\",意思是\"万能自动\",英格伯格因此被称为\"工业机器人之父\",1984年,他还预言:\"我要使机器人擦地板,做饭,洗刷我的汽车和检查安全\"。
机器人发展的三个发展阶段
随着人们对机器的研究,机器人也在进步,按其发展过程机器人可分为三代:第一代是示教再现型机器人:\"尤尼梅特\"和\"沃尔萨特兰\"这两种最早的工业机器人是示教再现型机器人的典型代表。它由人操纵机械手做一遍应当完成的动作或通过控制器发出指令让机械手臂动作,在动作过程中机器人会自动将这一过程存入记忆装
置。当机器人工作时,能再现人教给它的动作,并能自
动重复的执行。这类机器人不具有外界信息的反馈能力,很难适应变化的环境。 第二代是有感觉的机器人:它们对外界环境有一定感知能力,并具有听觉、视觉、触觉等功能。机器人工作时,根据感觉器官(传感器)获得的信息,灵活调整自己的工作状态,保证在适应环境的情况下完成工作。如:有触觉的机械手可轻松自如地抓取鸡蛋,具有嗅觉的机器人能分辨出不同饮料和酒类。
第三代是具有智能的机器人:智能机器人是靠人工智能技术决策行动的机器人,它们根据感觉到的信息,进行思维、识别、推理,并作出判断和决策,不用人的参与就可以完成一些复杂的工作。日本研制的能演奏数首曲目?quot;瓦伯特\"2号机器人,已达到5岁儿童
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
的智能水平。目前,智能机器人已在许多方面具有人类的特点,随着机器人技术不断发展与完善,机器人的智能水平将越来越接近人类。 1.2 机器人的定义 机器人(Robot)是自动执行工作的机器装置。它既可以接受人类指挥,又可以运行预先编排的程序,也可以根据以人工智能技术制定的原则纲领行动。它的任务是协助或取代人类工作的工作,例如生产业、建筑业,或是危险的工作。 1.3 机器人学的进展
机器人的偿还期理论促进对机器人产业的投资。日本后来居上,成为“机器人王国”机器人产业在全世界迅速发展应用范围遍及工业、科技和国防各个领域。形成新的学科-----机器人学 机器人向智能化方向发展
2, 机器人结构与分类
2.1 机器人系统的结构
机器人一般由执行机构、驱动装置、检测装置和控制系统和复杂机械等组成。 执行机构即机器人本体,其臂部一般采用空间开链连杆机构,其中的运动副(转动副或移动副)常称为 关节,关节个数通常即为机器人的自由度数。根据关节配置型式和运动坐标形式的不同,机器人执行机构可分为直角坐标式、圆柱坐标式、极坐标式和关节坐标式等类型。出于拟人化的考虑,常将机器人本体的有关部位分别称为基座、腰部、臂部、腕部、手部(夹持器或末端执行器)和行走部(对于移动机器人)等。 驱动装置是驱使执行机构运动的机构,按照控制系统发出的指令信号,借助于动力元件使机器人进行动作。它输入的是电信号,输出的是线、角位移量。机器人使用的驱动装置主要是电力驱动装置,如步进电机、伺服电机等,此外也有采用液压、气动等驱动装置。
检测装置的作用是实时检测机器人的运动及工作情况,根据需要反馈给控制系统,与设定信息进行比较后,对执行机构进行调整,以保证机器人的动作符合预定的要求。作为检测装置的传感器大致可以分为两类:一类是内部信息传感器,用于检测机器人各部分的内部状况,如各关节的位置、速度、加速度等,并将所测得的信息作为反馈信号送至控制器,形成闭环控制。另一类是外部信息传感器,用于获取有关机器人的作业对象及外界环境等方面的信息,以使机器人的动作能适应外界情况的变化,使之达到更高层次的自动化,甚至使机器人具有某种“感觉”,向智能化发展,例如视觉、声觉等外部传感器给出工作对象、工作环境的有关信息,利用这些信息构成一个大的反馈回路,从而将大大提高机器人的工作精度。
控制系统有两种方式。一种是集中式控制,即机器人的全部控制由一台微型计算机完成。另一种是分散(级)式控制,即采用多台微机来分担机器人的控制,如当采用上、下两级微机共同完成机器人的控制时,主机常用于负责系统的管理、通讯、运动学和动力学计算,并向下级微机发送指令信息;作为下级从机,各关节分别对应一个CPU,进行插补运算和伺服控制处理,实现给定的运动,并向主机反馈信息。根据作业任务要求的不同,机器人的控制方式又可分为点位控制、连续轨迹控制和力(力矩)控制。
2.2 机器人的分类 诞生于科幻小说之中一样,人们对机器人充满了幻想。也许正是由于机器人定义的模糊,才给了人们充分的想象和创造空间。
家务型机器人:能帮助人们打理生活,做简单的家务活。
操作型机器人:能自动控制,可重复编程,多功能,有几个自由度,可固定或运动,用于相关自动化系统中。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
程控型机器人:按预先要求的顺序及条件,依次控制机器人的机械动作。 示教再现型机器人:通过引导或其它方式,先教会机器人动作,输入工作程序,机器人则自动重复进行作业。
数控型机器人:不必使机器人动作,通过数值、语言等对机器人进行示教,机器人根据示教后的信息进行作业。
感觉控制型机器人:利用传感器获取的信息控制机器人的动作。
适应控制型机器人:能适应环境的变化,控制其自身的行动。
学习控制型机器人:能“体会”工作的
经验,具有一定的学习功能,并将所“学”的经验用于工作中。
智能机器人:以人工智能决定其行动的机器人。
我国的机器人专家从应用环境出发,将机器人分为两大类,即工业机器人和特种机器人。所谓工业机器人就是面向工业领域的多关节机械手或多自由度机器人。而特种机器人则是除工业机器人之外的、用于非制造业并服务于人类的各种先进机器人,包括:服务机器人、水下机器人、娱乐机器人、军用机器人、农业机器人、机器人化机器等。在特种机器人中,有些分支发展很快,有成体系的趋势,如服务机器人、水下机器人、军用机器人、微操作机器人等。目前,国际上的机器人学者,从应用环境出发将机器人也分为两类:制造环境下的工业机器人和非制造环境下的服务与仿人型机器人,这和我国的分类是一致的。
空中机器人又叫无人机器,近年来在军用机器人家族中,无人机是科研活动最活跃、技术进步最大、研究及采购经费投入最多、实战经验最丰富的领域。80多年来,世界无人机的发展基本上是以美国为主线向前推进的,无论从技术水平还是无人机的种类和数量来看,美国均居世界之首位。
3,机器人学与人工智能的关系
机器人学与人工智能有十分密切的关系。人工智能的近期目标在于研究智能计算机及其系统,以模仿和执行人类的某些智力功能,如判断、推理、理解、识别、规划、学习和其他问题求解。这一研究抓住了创造力的首要问题----人类智能。人工智能使目前主要用于数值计算的计算机变得更加富有生气,并用它来表达最复杂的生物世界----人脑智能。人们的努力远非获得完全成功,但是已经在许多研究领域取得进展。例如,在规划、博弈、问题求解、语言与语音理解、视觉图像识别、定理证明、知识表示与描述等方面,已取得不少研究成果。
1996年2月10~17日,为了纪念世界上第一台电子计算机诞生50周年,IBM的“深蓝”同国际象棋世界冠军卡斯帕罗夫在美国费城举行六局大赛。结果 卡斯帕罗夫以4:2获胜。
1997年5月3~11日, “深蓝”再次挑战卡斯帕罗夫,此时“深蓝”的运算速度达每秒2亿次,比上次提高了一倍。结果“深蓝”3.5:2.5获胜。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
目前对机器人学的研究主要还是以控制理论的反馈概念为基础的。也就是说,迄今为止,机器人上的\"智能\"是由于应用反馈控制而产生的。但是,反馈控制技术本身并不是建立在人工智能技术的基础上的,而属于古典工程控制理论范畴。
一方面,机器人学的进一步发展需要人工智能基本原理的指导,并采用各种人工智能技术; 另一方面,机器人学的出现与发展又为人工智能的发展带来了新的生机,产生了新的推动力,并提供一个很好的试验与应用场所。也就是说,人工智能想在机器人学上找到实际应用,并使问题求解、搜索规划、知识表示和智能系统等基本理论得到进一步发展。 粗略地说,由计算机(机器)来模仿人类的智能行为,就是人工智能,或称为机器智能。而下一代新的机器人就是应用各种人工智能技术的机器人,所以叫做智能机器人。 智能机器人
尽管目前在工业上运行的90%以上的机器人都谈不上有什么智能,机器人执行的许多任务也根本不需要运用传感器; 但是,随着机器人技术的迅速发展和自动化程度的进一步提高,对机器人的功能提出了更高的要求,特别是需要各种具有不同程度智能的机器人和机器人化装置。
最近20年已生产出一批具有传感装置(如视觉、触觉和听觉等)的机器人以及少数具有与环境进行\"对话\"能力的交互机器人(interactive robot)。这些机器人就属于智能机器人,它们能够执行一些过去无法解决的工作任务。
智能机器人已在自主系统和柔性加工系统中得到日益广泛的应用。自主机器人能够设定自己的目标,规划并执行自己的动作,使自己不断适应环境的变化。柔性加工系统由机器人工段(robotic work cell)或柔性工段组成。每个机器人工段能够完全自动地完成一系列操作、装卸、运输或加工。把机器人工段与其他工段相连接,就形成一个柔性组合式机器人生产系统,简称柔性加工系统。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
第二章 机器人小车硬件结构解析
1,智能机器人小车概述:
TY-1智能机器人小车是由江苏省天一中学人工智能社团师生共同设计,研发,制作的一款多功能,智能化,可编程机器人。该机器人以小车作为基本活动载体,搭配一块功能强大的控制电路板,在配备各种传感器的情况下可实现足球,灭火,探险等多种可变复杂功能。另外,对比于当前许多商品机器人,该机器人又具有结构小巧,造价低廉的特点。所以,该机器人可作为中学生普及机器人知识,培养实践动手能力的良好载体。通过学生亲身参与到设计,制作的全过程中,使学生从更深的此层次上加深对机器人的理解,培养学生科学兴趣和爱好。
该智能机器人小车外观如图一所示:
图一
TY-1智能机器人小车基本参数:
整体尺寸:130mm*155mm*110mm(长*宽*高) 整车重量:450g 工作电压:DC 7~12V 典型工作电压:DC 7.2V
工作电流:300~500mA@7.2v 峰值电流:1A
行动速度:20~250mm/s@7.2V
2,智能机器人小车结构解析:
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
TY-1智能机器人小车基本构成主要包括小车车架、机器人控制板和传感器组成。
TY-1智能机器人小车车架主要包括左右减速电、左右驱动轮子、车架固定板、万向轮、固定螺丝等几个部分组成。
2.1减速电机:
减速电机采用普通直流电机,结合机械减速箱制作而成。价格低廉。由于采用塑料齿轮,不适合高扭矩的场合,但用于小功率机器人小车非常适合。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
减速电机基本参数:
1,工作电压: 3V~12V DC(建议工作电压在6到8V左右) 。 2,最大扭矩: 800gf cm min(3V时)。 3,转速比: 1:48 。
4,负载电流: 70mA (250mA MAX)(3V时)。 5,转速15f/min(3V时)。
2.2车轮:
轮子直径约65MM,厚度约28MM,轮毂采用高强度塑料,轮胎采用黑色橡胶。
2.3万向轮:
万向轮采用具有滑动转向轴承的平面万向轮,转动灵活。轮子采用尼龙制造,经久耐磨,质量可靠。
2.4电源:
小车电源采用六节5号碱性电池,电池电压为9V。小车电源采用六节5号五号镍氢可充电电池,电池电压为7.2V。
3,智能机器人小车控制板:
控制板是机器人小车核心部件之一。小车的智能化主要是由控制板来实现的。控制板的主要作用是通过运行在板载微控制芯片中的用户程序,来完成检测、采集传感器所接受到的外界信号,并根据程序编制的控制算法对信号进行处理后来控制电机的转动,从而完成小车的运动控制。
所以,微控制芯又是控制板的核心部件。它是一个小型的CPU,执行指令,完成机器人小车的控制任务。本控制板所采用的是美国Atmel公司生产的单周期,低功耗微控制芯片ATmega8。ATmega8单片机是高性能、低功耗的 8 位微处理器,8K 字节的系统内可编程Flash,512 字节的EEPROM,1K字节的片内SRAM,非常丰富的内部设备,在构成系统是不需要添加复杂的外围芯片设备,因此适合低成本智能小车的应用需要。ATmega8是基于增强的AVR RISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间, ATmega8 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
AVR 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10 倍的数据吞吐率。ATmega8 有如下特点:8K 字节的系统内可编程Flash( 具有同时读写的能力,即RWW),512 字节 EEPROM,1K 字节 SRAM,32 个通用I/O 口线,32 个通用工作寄存器,三个具有比较模式的灵活的定时器/ 计数器(T/C), 片
内/ 外中断,可编程串行USART,面向字节
的两线串行接口, 10 位6 路 (8 路为TQFP 与MLF 封装)ADC,具有片内振荡器的可编程看门狗定时器,一个SPI 串行端口,以及五种可以通过软件进行选择的省电模式。工作于空闲模式时CPU 停止工作,而SRAM、T/C、 SPI 端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态; ADC 噪声抑制模式时终止CPU 和除了异步定时器与ADC 以外所有I/O 模块的工作,以降低ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力。本芯片是以Atmel 高密度非易失性存储器技术生产的。片内ISP Flash 允许程序存储器通过ISP 串行接口,或者通用编程器进行编程,也可以通过运行于AVR 内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlash Memory)。在更新应用Flash存储区时引导Flash区(Boot Flash Memory)的程序继续运行,实现了RWW 操作。 通过将8 位RISC CPU 与系统内可编程的Flash 集成在一个芯片内,ATmega8 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。ATmega8 具有一整套的编程与系统开发工具,包括:C 语言编译器、宏汇编、 程序调试器/ 软件仿真器、仿真器及评估板。
3.1智能机器人小车控制板接口说明:
智能机器人小车控制板实物如下图所示。控制板带有1个电源输入口,由于输入DC 7~12VDE 工作电压。1个九针串口,用于用户程序下载到板载控制器Atmega8。14个三线数字信号输入输出口,用于外接数字信号传感器或数字信号驱动设备。6个三线模拟信号输入口,用于外接模拟信号传感器的信号输入。2个电机接口,用于外接控制直流电机。2个二线电机控制接口,其中一线用于控制电机的转动方向,一线用于控制电机的转动速度(功率值)。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
智能机器人小车控制板接口详细说明: 接口名称 电源插座 程序下载串口 数字I/O口 作用 为控制板提供电源 说明 DC 7~12V,插头外内电极为正,外电极为负 用户机器人程序下速率9600波特,8位数据,1位停止位 载 数字传感器信号输D0~D13,三线接口,提供+5V、电源地和数字信号线。入,或输出数字控其中D9、D10、D11还具有PWM信号输出能力,用制信号。 于控制电机等设备的功率值。如果微控制器用ATmega168替换,D3、D5、D6也具有PWM信号输出能力,其他相同。数字信号电平范围为0~+5V。 模拟I/O口 电机接口 电机控制接口 外接模拟信号传感A0~A5, 三线接口,提供+5V、电源地和模拟信号线。器的信号输入。 模拟信号电平范围为0~+5V。超够或许会损坏器件。 外接控制直流电机 J30 用于控制一号直流电机。J31用于控制二号直流电机。 控制电机转动方向MOTO1用于一号电机控制信号的输入,其中 和转速 DIR1用于和数字接口连接,控制一号电机的转动方向(高电平为正,低电平为反)。PWM1用于和具有PWM输出功能的数字接口连接用于控制电机的转速(功率值)。变化范围为0~255.。MOTO2同MOTO1. J32 ISP SERIAL ON 控制器Bootloader的烧写 串口使能 烧写启动程序 跳线在0-1之间时不允许串口工作,但可以停止串口电路,用于节能。跳线在1-2之间时允许串口工作,下载程序。 江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
J3AUTOSESET 程序下载自动复位
当加上跳线开关时用户程序在下载过程中可以实现在东南否则要手动进行。 3.2智能机器人小车控制板原理说明:
智能机器人小车电源部分如下图所示,电源插座P1接入外部电源,D1为防止电源反接二极管,C1、C3为滤波电容,VIN为电机驱动电源标签,电机驱动电源从该处引出。U1为LM7805五伏稳压集成块。C2 ,C4是输出滤波电容,+5V标签是控制板5V稳压电源的引
出点。D2是电源指示发光二极管。
智能机器人小车程序下载串口如右图所示,该电路是由分立元件构成的串口电路。其中J1为串口使能选择开关SERIAL ON,当跳线开关置于1-2之间时,串口电路切断+5V电源,串口电路不可使用,可以降低电源消耗。当跳线开关置于2-3之间时,串口电路接通+5V电源,串口电路可以正常使用,用于用户小车控制程序下载。J3为程序下载过程中的自动复位跳线开关,当加上跳线开关时用户程序在下载过程中可以实现在东南否则要手动进行。虽然该电路采用价格低廉的分立元件,单时间使用效果很好,工作非常稳定。
智能机器人小车电机驱动电路如右图所示。该电路由电机驱动集成电路L293D结合一些外围电路构成。其中J30 MOTO1用于一号电机控制信号的输入,DIR1用于和数字接口连接,控制一号电机的转动方向(高电平为正,低电平为反)。PWM1用于和具有PWM输出功能的数字接口连接用于控制电机的转速(功率值)。变化范围为0~255。MOTO2同MOTO1。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
智能机器人小车控制电路如下图所示,该电路以耗微控制芯片(单片机)ATmega8为核心。其中,J32为控制器Bootloader启动程序的烧写。J32 、J33为D0~D13十四个数字I/O口,用于数字传感器信号输入,或输出数字控制信号。J34为A0~A5模拟六个模拟I/O口外,用于外接模拟信号传感器的信号输入。S1为手动复位按钮。其他都是一些辅助电路,原理简单,不再赘述。
4,智能机器人小车光电传感器:
机器人小车实现各种复杂功能的基础是首先要实现小车的自动导航。在本活动中小车导航时是通过小车的巡线来实现的。下车巡线简单可靠,容易操作。本光电传感器通过发光二极管D2发射可见光,在物体表面反射后被光敏三极管接受到。控制板通过检测光敏三极管两端的电压值来判断物体表面的颜色。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
第三章 机器人小车编程语言及环境
由于本次活动的机器人控制器所采用的微控制器型号和网络上广泛流行的Arduino开源互动平台项目完全一致,所以在机器人开发语言和编程环境上面完全可以借用该平台的一切资源。一来可以降低机器人小车设计制作的难度,更主要的是Arduino开源互动平台是一个资源非常广泛,支持者和爱好者众多的优秀平台。
1,Arduino语言
Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们不了解AVR单片机(微控制器)的朋友也能轻松上手。
在与Arduino DIYER接触的这段时间里,发现有些朋友对Arduino语言还是比较难入手,那么这里我就简单的注释一下Arduino语言(本人也是半罐子水,有错的地方还请各位指正)。 1.1, 基础C语言 1.1.1关键字: if...else
必须紧接着一个问题表示式(expression),若这个表示式为真,紧连着表示式后的代码就会被执行。若这个表示式为假,则执行紧接着else之后的代码. 只使用 if不搭配else是被允许的。
范例: if (val == 1) { digitalWrite(LED,HIGH); } for
用来明定一段区域代码重复指行的次数。
范例: for (int i = 0; i < 10; i++) { Serial.print(\"ciao\"); }
switch case
if叙述是程序里的分叉路口,switch case 是更多选项的路口。Swith case 根据变量值让程序有更多的选择,比起一串冗长的if叙述,使用swith case可使程序代码看起来比较简洁。
范例 :switch (sensorValue)
{ case 23: digitalWrite(13,HIGH);
break;
case 46:
digitalWrite(12,HIGH);
break;
default: // 以上条件都不符合时,预设执行的动作 digitalWrite(12,LOW); digitalWrite(13,LOW); }
while
当while之后的条件成立时,执行括号内的程序代码。 范例 : // 当sensor值小于512,闪烁LED灯
sensorValue = analogRead(1); while (sensorValue < 512) { digitalWrite(13,HIGH); delay(100);
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
digitalWrite(13,HIGH);
delay(100); sensorValue = analogRead(1); } do... while
和while 相似,不同的是while前的那段程序代码会先被执行一次,不管特定的条件式为真或为假。因此若有一段程序代码至少需要被执行一次,就可以使用do„while架构。 范例 :do { digitalWrite(13,HIGH);
delay(100); digitalWrite(13,HIGH); delay(100); sensorValue = analogRead(1); } while (sensorValue < 512);
break
让程序代码跳离循环,并继续执行这个循环之后的程序代码。此外,在break也用于分隔switch case 不同的叙述。
范例 : //当sensor值小于512,闪烁LED灯
do {
// 按下按钮离开循环
if (digitalRead(7) == HIGH) break; digitalWrite(13,HIGH); delay(100); digitalWrite(13,HIGH); delay(100);
sensorValue = analogRead(1); }
while (sensorValue < 512); continue
用于循环之内,它可以强制跳离接下来的程序,并直接执行下一个循环。 范例 : for (light = 0; light < 255; light++)
{ // 忽略数值介于 140 到 200之间 if ((x > 140) && (x < 200)) continue; analogWrite(PWMpin, light); delay(10); }
return
函数的结尾可以透过return回传一个数值。
例如,有一个计算现在温度的函数叫 computeTemperature(),你想要回传现在的温度给temperature变量,你可以这样写:
int temperature = computeTemperature();
int computeTemperature() { int temperature = 0;
temperature = (analogRead(0) + 45) / 100; return temperature; }
goto
1.1.2语法符号:
; (分号)
Arduino 语言每一行程序都是以分号为结尾。这样的语法让你可以自由地安排代码,你可以将两个指令放置在同一行,只要中间用分号隔开。 (但这样做可能降低程式的可读性。) 范例: delay(100);
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
{} (大括号)
大括号用来将程式代码分成一个又一个的区块,如以下范例所示,在loop()函数的前、后,必须用大括号括起来。
范例: void loop(){
Serial.pritln(\"cial\");
程式的注释就是对代码的解释和说明,编写注释有助于程式设计师(或其他人)了解代码的功能。
Arduino处理器在对程式码进行编译时会忽略注释的部份。
Arduino 语言中的编写注释有两种方式。 //单行注释:
这整行的文字会被处理器忽略
/*多行注释:
在这个范围内你可以 。写一整首诗 */ 1.1.3运算符:
= + 相加 - 相减 * 相乘
/ 相除
% 余数除法 == 等于 !=不等于 < 小于 > 大于 <= 小于等于 >= 大于等于 && 交集 || 联集 ! 反相 ++ 累加 递减 += -= *= /=
1.1.4Arduuino复合运算符
+= , -= , *= , /=
对一个变量和另一个参数或变量完成一个数算。+=(以及其他)可以缩短语法长度。 Syntax语法 x += y; // 等价于 x = x + y; x -= y; // 等价于 x = x - y; x *= y; // 等价于 x = x * y; x /= y; // 等价于 x = x / y; Parameters参数
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
x:任何变量类型
y:任何变量类型或常数 Examples范例 x = 2;
x += 4; // x现在为6
x -= 3; // x现在为3 x *= 10; // x现在为30
x /= 2; // x现在为15 Syntax语法
x++; // increment x by one and returns the old value of x // 将x的值加1并返回原来的x的值。
++x; // increment x by one and returns the new value of x // 将x的值加1并返回现在的x的值。
x-- ; // decrement x by one and returns the old value of x // 将x的值减1并返回原来的x的值。
--x ; // decrement x by one and returns the new value of x // 将x的值减1并返回现在的x的值。 Parameters参数
x: an integer or long (possibly unsigned) x:一个整数或长整数(可以无符号) Returns返回
The original or newly incremented / decremented value of the variable. 返回变量原始值或增加/消耗后的新值。
Examples范例
x = 2; y = ++x; // x now contains 3, y contains 3
// x现在为3,y为3
y = x--; // x contains 2 again, y still contains 3
// x现在仍然为2,y将为3
1.1.5数据类型: boolean 布林
布尔变数的值只能为真(true)或是假(false)
char 字符
单一字符例如 A,和一般的计算机做法一样Arduino 将字符储存成一个数字,即使你看到的明明就是一个文字。
用数字表示一个字符时,它的值有效范围为 -128 到127。 注意:有两种主流的计算机编码系统ASCII 和UNICODE。ASCII 表示了127个字符, 用来在序列终端机和分时计算器之间传输文字。
UNICODE可表示的字符量比较多,在现代计算机操作系统内它可以用来表示多国语言。 在位数需求较少的信息传输时,例如意大利文或英文这类由拉丁文,阿拉伯数字和一般常见符号构成的语言,ASCII仍是目前主要用来交换信息的编码法。
byte 字节类型
储存的数值范围为0到255。如同字符一样字节型态的变量只需要用一个字节(8位)的内存空间储存。
int 整数
整数数据型态用到2字节的内存空间,可表示的整数范围为 –32,768 到 32,767; 整数变量是Arduino内最常用到的数据型态。 unsigned int 无符号整数(绝对值)
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
无号整数同样利用2字节的内存空间,无号意谓着它不能储存负的数值,因此无号整数可表示的整数范围为0 到 65,535。
long 长整数
长整数利用到的内存大小是整数的两倍,因此它可表示的整数范围从 –2,147,483,8 到 2,147,483,7。
unsigned long 无符号长整数
无号长整数可表示的整数范围为0 到 4,294,967,295。
float 浮点数
浮点数就是用来表达有小数点的数值,每个浮点数会用掉四字节的RAM,注意芯片内存空间的,谨慎的使用浮点数 。
double 双字节浮点
也叫双精度浮点数,可表达最大值为 1.7976931348623157 x 10308。
string 字符串
字符串用来表达文字信息,它是由多个ASCII字符组成(你可以透过序串端口发送一个文字讯息或者将之显示在液晶显示器上)。字符串中的每一个字符都用一个组元组空间储存,并且在字符串的最尾端加上一个空字符以提示Ardunio处理器字符串的结束。下面两种宣告方式是相同的。
例如: char string1[] = \"Arduino\";//7字符+1空字符
char string2[8] = \"Arduino\"; // 与上行相同
array 数组
一串变量可以透过索引去直接取得。假如你想要储存不同程度的LED亮度时,你可以宣告六个变量light01,light02,light03,light04,light05,light06,但其实你有更好的选择,例如宣告一个整数数组变量如下:
int light[6] = {0 , 20 , 50 , 75 , 100}
\"array\" 这个字为没有直接用在变量宣告,而是[]和{}宣告数组。 1.1.6 控制指令 数据类型转换:
char() byte() int() long() float()
常量:在Arduino语言中事先定义了一些具特殊用途的保留字。
HIGH | LOW 表示数字IO口的电平,HIGH 表示高电平(1), LOW 表示低电平(0)。
HIGH 和LOW 也用来表示你开启或是关闭了一个Arduino的脚位(pin)
INPUT | OUTPUT
表示数字IO口的方向,INPUT 表示输入(高阻态),OUTPUT 表示输出(AVR能提供5V电压 40mA电流)。
true | false
true 表示真(1),false表示假(0)。
变数:
变量用来指定Arduino 内存中的一个位置,变量可以用来储存数据,程序人员可以透过脚本代码去不限次数的操作变数的值。 因为Arduino 是一个非常简易的微处理器,但你要宣告一个变量时必须先定义他的数据型态,好让微处理器知道准备多大的空间以储存这个变量值。
1.2, Arduino 语言结构
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
以上为基础c语言的关键字和符号,有c语言基础的都应该了解其含义,这里也不作过多的解释。
1.2.1结构:
声明变量及接口名称(int val;int ledPin=13;)。
void setup()
在程序开始时使用,在这个函数范围内放置初始化Arduino 板子的程式,主要程式
开始撰写前, 使Arduino 板子装置妥当的指令可以初始化变量、管脚接口模式、启用库等(例如:pinMode(ledPin,OUTPUT);)。 void loop()
在setup()函数之后,即初始化之后,loop() 让你的程序循环地被执行。使用它来运转Arduino。连续执行函数内的语句,这部份的程式会一直重复的被执行,直到Arduino 板子被关闭。 1.2.2功能
数字 I/O
pinMode(pin, mode)
数字IO口输入输出模式定义函数,将接口定义为输入或输出接口,用在setup()函数里,pin表示为0~13接口名称, mode表示为INPUT或OUTPUT。即“ pinMode(接口名称,OUTPUT或INPUT)”。
范例 : pinMode(7,INPUT); // 将脚位 7 设定为输入模式
digitalWrite(pin, value) 数字IO口输出电平定义函数,将数字接口值至高或低、开或关,pin表示为0~13,value表示为HIGH或LOW,即digitalWrite(接口名称, HIGH或LOW)。但脚位必须先透过pinMode明示为输入或输出模式digitalWrite才能生效。比如定义HIGH可以驱动LED。
范例 : digitalWrite(8,HIGH); //将脚位 8设定输出高电位 int digitalRead(pin)
数字IO口读输入电平函数,读出数字接口的值,pin表示为0~13,value表示为HIGH或LOW,即digitalRead(接口名称)。比如可以读数字传感器。当感测到脚位处于高电位时时回传HIGH,否则回传LOW。
范例 : val = digitalRead(7); // 读出脚位 7 的值并指定给 val 1.2.3模拟 I/O
int analogRead(pin)
模拟IO口读函数,从指定的模拟接口读取值,Arduino对该模拟值进行10-bit的数字转换,这个方法将输入的0-5电压值转换为 0到1023间的整数值。pin表示为0~5(Arduino Diecimila为0~5,Arduino nano为0~7)。即“analogRead(接口名称)”,比如可以读模拟传感器(10位AD,0~5V表示为0~1023)。
范例 : val = analogRead(0); //读出类比脚位 0 的值并指定给 val变数
analogWrite(pin, value) 数字IO口PWM输出函数,给一个接口写入模拟值(PWM波)。改变PWM脚位的输出电压值。对于 ATmega168芯片的Arduino(包括Mini或BT),该函数可以工作于 3, 5, 6, 9, 10和 11号接口,即“analogWrite(接口名称, 数值)”,pin表示3, 5, 6, 9, 10, 11,value表示为0~255。比如可用于电机PWM调速或音乐播放。 例如:输出电压2.5伏特(V),该值大约是128。
范例 : analogWrite(9,128); // 输出电压约2.5伏特(V) 1.2.4 扩展 I/O
shiftOut(dataPin, clockPin, bitOrder, value)
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
SPI外部IO扩展函数,通常使用带SPI接口的74HC595做8个IO扩展,把资料传给用来延伸数位输出的暂存器,此函式通常使用在延伸数位的输出。函式使用一个脚位表示资料、一个脚位表示时脉。dataPin为数据口,clockPin为时钟口,bitOrder用来表示位元间移动的方式,为数据传输方向(MSBFIRSTMSBFIRSTMSBFIRSTMSBFIRST高位在前,LSBFIRSTLSBFIRSTLSBFIRSTLSBFIRST低位在前),value会以byte形式输出,表示所要传送的数据(0~255),另外还需要一个IO口做74HC595的使能控制。
范例 : shiftOut(dataPin, clockPin, LSBFIRST, 255);
unsigned long pulseIn(pin, value)
脉冲长度记录函数,设定读取脚位状态的持续时间,返回时间参数(us),例如使用红外线、加速度感测器测得某一项数值时,在时间单位内不会改变状态。pin表示为0~13,value为HIGH或LOW。比如value为HIGH,那么当pin输入为高电平时,开始计时,当pin输入为低电平时,停止计时,然后返回该时间。
范例 : time = pulsein(7,HIGH); // 设定脚位7的状态在时间单位内保持为HIGH 1.2.5时间函数
unsigned long millis() 返回时间函数(单位ms), 回传晶片开始执行到目前的毫秒,该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天时间。 范例: duration = millis()-lastTime; // 表示自\"lastTime\"至当下的时间
delay(ms)
延时函数(单位ms),延时一段时间,暂停晶片执行多少毫秒, delay(1000)为一秒。 范例: delay(500); //暂停半秒(500毫秒)
delayMicroseconds(us)
延时函数(单位us)暂停晶片执行多少微秒。 delayMicroseconds(1000); //暂停1豪秒 1.2.6数学函数
min(x, y) 求最小值 ,回传两数之间较小者 范例: val = min(10,20); // 回传10 max(x, y) 求最大值 ,回传两数之间较大者 范例: val = max(10,20); // 回传20 abs(x) 计算绝对值 ,回传该数的绝对值,可以将负数转正数。 范例: val = abs(-5); // 回传5
constrain(x, a, b) 约束函数,下限a,上限b,判断x变数位于a与b之间的状态。x若小于a回传a;介于a与b之间回传x本身;大于b回传b
范例: val = constrain(analogRead(0), 0, 255); // 忽略大于255的数
map(value, fromLow, fromHigh, toLow, toHigh) 约束函数,value必须在fromLow与toLow之间和fromHigh与toHigh之间。将value变数依照fromLow与fromHigh范围,对等转换至toLow与toHigh范围。时常使用于读取类比讯号,转换至程式所需要的范围值。 例如: val = map(analogRead(0),0,1023,100, 200); // 将analog0 所读取到的讯号对等转换至100,200之间的数值。
pow(base, exponent) 开方函数,base的exponent次方。回传一个数(base)的指数(exponent)值。
范例: double x = pow(y, 32); // 设定x为y的32次方 sq(x) 平方
sqrt(x) 开根号 回传double型态的取平方根值。
范例: double a = sqrt(1138); // 回传1138平方根的近似值 33.73425674438 1.2.7三角函数
sin (rad) 回传角度(radians)的三角函数sine值。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
范例: double sine = sin(2); // 近似值 0.90929737091 cos(rad) 回传角度(radians)的三角函数cosine值。 范例: double cosine = cos(2); //近似值-0.41614685058 tan(rad) 回传角度(radians)的三角函数tangent值。 范例: double tangent = tan(2); //近似值-2.18503975868 1.2.8随机数函数
randomSeed(seed) 随机数端口定义函数,seed表示读模拟口analogRead(pin)函数 。 事实上在Arduino里的乱数是可以被预知的。所以如果需要一个真正的乱数,可以呼叫此函式重新设定产生乱数种子。你可以使用乱数当作乱数的种子,以确保数字以随机的方式出现,通常会使用类比输入当作乱数种子,藉此可以产生与环境有关的乱数(例如:无线电波、宇宙雷射线、电话和萤光灯发出的电磁波等)。
范例: randomSeed(analogRead(5)); // 使用类比输入当作乱数种子 long random(max) 随机数函数,返回数据大于等于0,小于max。
范例: long randnum = random(11); // 回传 0 -10之间的数字 long random(min, max) 随机数函数,返回数据大于等于min,小于max。 范例: long randnum = random(0, 100); // 回传0 – 99 之间的数字
1.2.9外部中断函数
attachInterrupt(interrupt, , mode) 外部中断只能用到数字IO口2和3,interrupt表示中断口初始0或1,表示一个功能函数,mode:LOWLOWLOWLOW低电平中断,CHANGECHANGECHANGECHANGE有变化就中断,RISINGRISINGRISINGRISING上升沿中断,FALLINGFALLINGFALLINGFALLING 下降沿中断。
detachInterrupt(interrupt) 中断开关,interrupt=1 开,interrupt=0 关。 1.2.10中断使能函数 interrupts() 使能中断
10noInterrupts() 禁止中断
1.2.11串口收发函数
Serial.begin(speed) 串口定义波特率函数,设置串行每秒传输数据的速率(波特率),可以指定Arduino从电脑交换讯息的速率,通常我们使用9600 bps。,speed表示波特率,如9600,19200等。在同计算机通讯时,使用下面这些值:300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600或 115200 bps(每秒位元组)。。你也可以在任何时候使用其它的值,比如,与0号或1号插口通信就要求特殊的波特率。用在setup()函数里
范例: Serial.begin(9600)
int Serial.available() 判断缓冲器状态。回传有多少位元组(bytes)的资料尚未被read()函式读取,如果回传值是0代表所有序列埠上资料都已经被read()函式读取。
范例: int count = Serial.available(); int Serial.read() 读串口并返回收到参数。 Serial.read()——读取持续输入的数据。读取1byte的序列资料 范例: int data = Serial.read();
Serial.flush() 清空缓冲器。 有时候因为资料速度太快,超过程式处理资料的速度,你可以使用此函式清除缓冲区内的资料。经过此函式可以确保缓冲区(buffer)内的资料都是最新的。
范例: Serial.flush();
Serial.print(data) 从串行端口输出数据。erial.print(数据)默认为十进制等于Serial.print(数据,DEC)。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
Serial.print(data, encoding) 经序列埠传送资料,提供编码方式的选项。Serial.print(数据,数据的进制)如果没有指定,预设以一般文字传送。
范例: Serial.print(75); // 列印出 \"75\" Serial.print(75, DEC);
//列印出 \"75\" Serial.print(75, HEX); // \"4B\" (75 的十六进位)
Serial.print(75, OCT); // \"113\" (75 in的八进位) Serial.print(75, BIN);
// \"1001011\" (75的二进位) Serial.print(75, BYTE);
// \"K\" (以byte进行传送,显示以ASCII编码方式)
Serial.println(data) 从串行端口输出数据,跟随一个回车和一个换行符。这个函数所取得的值与 Serial.print()一样。
Serial.println(data, encoding) 与Serial.print()相同,但会在资料尾端加上换行字元( )。意思如同你在键盘上打了一些资料后按下Enter。
范例: Serial.println(75); //列印出\"75 \" Serial.println(75, DEC);
//列印出\"75 \" Serial.println(75, HEX);
// \"4B \" Serial.println(75, OCT); // \"113 \"
Serial.println(75, BIN); // \"1001011 \" Serial.println(75, BYTE); // \"K \"
1.3 Arduino语言库文件
以上几个函数是常用基本函数,还有很多以后会慢慢学习 官方库文件
• EEPROM - EEPROM读写程序库 • • • •
Ethernet - 以太网控制器程序库 LiquidCrystal - LCD控制程序库 Servo - 舵机控制程序库
SoftwareSerial - 任何数字IO口模拟串口程序库
• Stepper - 步进电机控制程序库 • Wire - TWI/I2C总线程序库
• Matrix - LED矩阵控制程序库
• Sprite - LED矩阵图象处理控制程序库 非官方库文件
• DateTime - a library for keeping track of the current date and time in software. • Debounce - for reading noisy digital inputs (e.g. from buttons)
• Firmata - for communicating with applications on the computer using a standard serial protocol. • GLCD - graphics routines for LCD based on the KS0108 or equivalent chipset. • LCD - control LCDs (using 8 data lines)
• LCD 4 Bit - control LCDs (using 4 data lines)
• LedControl - for controlling LED matrices or seven-segment displays with a MAX7221 or MAX7219.
• LedControl - an alternative to the Matrix library for driving multiple LEDs with Maxim chips. • Messenger - for processing text-based messages from the computer • Metro - help you time actions at regular intervals
• MsTimer2 - uses the timer 2 interrupt to trigger an action every N milliseconds.
• OneWire - control devices (from Dallas Semiconductor) that use the One Wire protocol. • PS2Keyboard - read characters from a PS2 keyboard.
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
• Servo - provides software support for Servo motors on any pins.
• Servotimer1 - provides hardware support for Servo motors on pins 9 and 10 • Simple Message System - send messages between Arduino and the computer • SSerial2Mobile - send text messages or emails using a cell phone (via AT commands over software serial)
• TextString - handle strings
• TLC5940 - 16 channel 12 bit PWM controller.
• X10 - Sending X10 signals over AC power lines
2,arduino开发环境使用
Arduino内带Bootloader程序,是系统上电后运行的第一段代码,它就像PC机BIOS中的程序,启动就进行自检,配置端口等,当然单片机就是靠烧写熔丝位来设定上电从boot区启动的,使用这个程序就可以直接把从串口发来的程序存放到flash区中。我们在使用Arduino编译环境下载程序时,就先让单片机复位,启动Bootloader程序引导串口发过来的程序顺利写入flash区中,flash可以重复烧写,因此想更新软件就是这么的方便。 2.1,arduino开发环境下载
http://arduino.cc/en/Main/Software,主页上有好多版本可以下载,最新版本为022版。我们推荐使用009版,就可以了。 2.2 ,arduino开发环境下载安装
arduino开发环境下载作为一款绿色软件,下载解压后,直接点击“arduino.exe”可执行文件就可打开arduino的开放环境。 2.3,arduino开发环境使用说明
首先下载最新的编译软件Arduino0018,解压后可以直接使用,插上Arduino USB接口,并安装好驱动(Arduino Mega ATmega1280的USB 驱动程序是 “CDM 2.04.06.exe”),我们就可以开始练手了,单击我的电脑右键->属性->硬件->设备管理器查看到USB映射的串口地址(我的电脑地址是“USB Serial Port(COM3)”。
然后打开Arduino 009........
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
Arduino开发编译环境很简洁,各个功能键功能描述如下:
接下来点Tools->Microcontroller(MCU)选择微控制器型号(我使用的是ATmega8)。
然后就是写好自己的应用程序。将小车控制板的程序下载串口用9
针串口电缆线与电脑串口连接,小车接通电源,打击程序编译下载图表就可以将自己的应用程序下载到机器人小车的控制板进行执行了。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
第四章,智能机器人小车安装、调试
1,小车驱动轮的安装
驱动轮的安装比较简单,首先在电机的两个电极上焊接一个104PF的瓷片电容。然后焊接两条杜邦线,用热熔胶固定焊点防止断线。
用螺丝将“L”型铝合金固定片固定到减速电机的塑料减速箱上。(如上图) 奖塑料轮子直接插到减速电机的动力输出轴上。 奖以上安装完成的驱动轮组件用螺丝固定到小车的固定底板上。(如右图)
2,小车控制板的安装
由于小车的焊接技术和元
件识别是属于电子技术的范畴,在此不再一一赘述。
由于控制板焊接完成以后不能保证焊接完全正确,所以要做一个初步的测试。 测试过程为: (1)将电源插头插入小车控制板的电源电源插头,观察电源指示发光二极管是否正常发光,板上电子元器件是否有异常发烫等现象。
(2)将小车控制板的程序下载串口用9针串口电缆线与电脑串口连接,小车接通电源,
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
准备将应用程序下载到机器人小车的控制板执行。
(3)小车数字端口的测试,将以下数字端口测试程序下载到器人小车的控制板执行,用发光LED观察是否有间隔一秒的闪烁。
int i=0;
void setup() { for(i=0;i<=13;i++) {
pinMode(i,OUTPUT ); }
}
void loop() {
for(i=0;i<=13;i++) {
digitalWrite(i,HIGH); }
delay(1000); for(i=0;i<=13;i++) {
digitalWrite(i,LOW); }
}
(4)小车模拟端口的测试,将以下模拟端口测试程序下载到器人小车的控制板执行,用串口调试软件接受控制板返回的迷你端口测试电压值,当电压值设定在0V是是否返回0值,当电压值设定在5V是是否返回1023.
int i = 0;
int analogValue=0; void setup() { Serial.begin(9600); }
void loop() { for(i=0;i<=5;i++) {
analogValue = analogRead(i); Serial.print('s'); Serial.print(i); Serial.print(':');
Serial.print(analogValue); Serial.print(\"\\"); }
}
用螺丝将控制板确定到小车车架的固定螺丝上面(如右图)。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
3,小车控制接线
一, 智能机器人小车接线说明:
控制小车运动速度和方向需要4个信号,两个用于控制小车轮子电机运动的方向,两个用于控制小车轮子电机速度的大小。其中,各个信号接入引脚说明如下: 编 号 端 口 名 称 说 明 1 2 3 4 5 6 MOTO1 MOTO2 DIR1 DIR2 PWM1 PWM2 两针端口,电机驱动电路功率输出,与一号减速电机连接。 两针端口,电机驱动电路功率输出,与二号减速电机连接。 单针端口,电机驱动电路方向控制输入,用于控制一号电机方向,与MCU的普通数字接口连接。 单针端口,电机驱动电路方向控制输入,用于控制二号电机方向,与MCU的普通数字接口连接。 单针端口,电机驱动电路功率控制输入,用于控制一号电机转速,与MCU的PWM数字接口连接。 单针端口,电机驱动电路功率控制输入,用于控制二号电机转速,与MCU的PWM数字接口连接。 注意:对于采用ATMEGA8A MCU的机器人小车数字接口D9,D10,D11具有PWM功能。对于采用ATMEGA168A MCU的机器人小车数字接口D3,D5,D6,D9,D10,D11具有PWM功能。
小车控制接线对应关系如下:
左光电传感器(三线)模拟电口A0 右光电传感器(三线)模拟电口A1 左电机(两线)MOTO1 右电机(两线)MOTO2
左电机方向控制(单线)DIR1 右电机方向控制(单线)DIR2 左电机功率控制(单线)PWM1 右电机功率控制(单线)PWM2 接线完成后图如下:
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
第五章 智能机器人小创意案例
1,机器人小车“单眼”巡线:
机器人利用一个光电传感器巡线行走,场地比较简单可以用黑胶带在白色塑料板上自制。特点是结构简单可靠,缺点是行走速度慢,效率低。 int analogValue = 0; // 定义光电传感器模拟接口 int dir1=9; // 定义电机1方向操作接口 int dir2=12; // 定义电机2方向操作接口 int pwm1=10; // 定义电机1功率操作接口 int pwm2=11; // 定义电机2功率操作接口
void setup() {
pinMode(dir1,OUTPUT ); //定义电机1方向操作接口输出模式 pinMode(dir2,OUTPUT ); //定义电机2方向操作接口输出模式
digitalWrite(dir1,HIGH); //初始化电机1方向 digitalWrite(dir2,HIGH); //初始化电机2方向
analogWrite(pwm1,120); //初始化电机1功率值 analogWrite(pwm2,120); //初始化电机2功率值 }
void loop() {
analogValue=analogRead(1); //读取光电传感器值
if(analogValue>750) //与门槛值比较,大于门槛,小车走入白区 {analogWrite(pwm1,130); //电机一130功率 analogWrite(pwm2,0); //电机二停止 //delay(300); }
if(analogValue<750) //与门槛值比较,小于门槛,小车走入黑区 {analogWrite(pwm1,0); //电机一停止
analogWrite(pwm2,130); //电机二130功率 //delay(300); } }
2,机器人小车“双眼”巡线:
机器人利用两个光电传感器巡线行走,场地比较简单可以用黑胶带在白色塑料板上自制。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
int analogValueR = 0; // 定义光电传感器1模拟接口 int analogValueL = 0; // 定义光电传感器2模拟接口 int dir1=9; // 定义电机1方向操作接口 int dir2=12; // 定义电机2方向操作接口 int pwm1=10; // 定义电机1功率操作接口 int pwm2=11; // 定义电机2功率操作接口
void setup() {
pinMode(dir1,OUTPUT ); //定义电机1方向操作接口为输出模式 pinMode(dir2,OUTPUT ); //定义电机2方向操作接口为输出模式
digitalWrite(dir1,HIGH); //初始化电机1方向 digitalWrite(dir2,HIGH); //初始化电机2方向
analogWrite(pwm1,120); //初始化电机1功率值 analogWrite(pwm2,120); //初始化电机2功率值 }
void loop() {
analogValueR=analogRead(1); //读取光电传感器1值 analogValueL=analogRead(0); //读取光电传感器2值
if((analogValueR>630)&(analogValueL>715)|((analogValueR<630)&(analogValueL<715))) { //两个光电传感器都读到黑值或白值 analogWrite(pwm1,130);
analogWrite(pwm2,130); //两个电机都给予130值,小车直行 //delay(300); }
if((analogValueR>630)&(analogValueL<715)) //右边传感器读到白值,左边传感器读到黑值 {analogWrite(pwm1,0);
analogWrite(pwm2,130); //一号电机停止,二号电机130功率,小车左转弯 //delay(300); }
if((analogValueR<630)&(analogValueL>715)) //右边传感器读到黑值,左边传感器读到白值
{analogWrite(pwm1,130);
analogWrite(pwm2,0); //一号电机130功率,二号电机停止,小车右转弯 //delay(300); }
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
}
3,创意项目—自动分拣系统竞赛:
基本规则:3
分钟之内,将2种颜色的小球识别出来的数量越多,成绩为相对优秀。每
错误识别1个颜色球,计算成绩时相对减去2个正确颜色球。漏检1个球,计算成绩时相对减去1个正确颜色球。
4,灭火接力:
4.1比赛场地示意图(如右图) 4.2场地规格:
机器人火炬传递比赛场地由组委会统一提供,指定路线图长度为2.8米,宽度1.7米,底色为白色;底板上绘有黑色的机器人运行轨迹线,轨迹线由直线、直角转弯线组成,线宽为2.5厘米;机器人起始区为25厘米×25厘米浅灰色区域,其颜色值处于黑色和白色之间,机器人交接区为4个,起点和终点附近各放置一个火焰燃烧装置(蜡烛高度约为8~10厘米,考虑到安全问题,竞赛可能采用模拟火焰);火焰和轨迹线中心之间的距离为10厘米。 4.3竞赛任务及要求:
由五名参赛选手设计制作五台机器人,即一号机器人到五号机器人。每位参赛选手的
机器人,寻照各段(本选手)轨迹行进,机器人整体垂直投影不得脱离轨迹线,合作跑向终点:
(1)参赛选手将五台机器人摆放在各自起始区和交接区,举手表示准备完毕。 (2)一名参赛选手启动放在起始区内的一号机器人,一号机器人沿运行轨迹前进,至第一处火焰,将火焰熄灭后,继续前进;
(3)进入下一个交接区后,通过碰撞传感器激活二号机器人,二号机器人自动启动沿轨迹线继续前进,逐次和下一个机器人进行接力传递;
(4)最后由五号机器人熄灭第二处火焰,至终点线处,任务结束。
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
智能机器人小车创意设计制作指导手册
(5)五台机器人必须在3分钟时间内做好配合完成上述全部任务为一个回合,根据参赛队完成全部项目的总时间计算成绩。
比赛安排两轮,取最好成绩;机器人在起始线摆放的位置,身体的任何一部分不得超过起始边线,机器人整体进入终点区后停止计时;
一号机器人前行必须有实际接触前面机器人的触碰,二、三、四号机器人前行须有触碰方可启动,未经触碰启动无效,不得利用延时程序取代寻轨迹程序使机器人运行;
机器人如果在运行过程中,一旦机器人所有运行的轮子脱离轨迹线运行,则判为任务失败;
比赛前,各参赛队的参赛机器人应接受裁判对机器人的资格审查。
5,寻轨迹搬
场地规格:场地由细木工板加工而成,尺寸见上图,表面贴纸颜色为白色,场地的四周无护墙板,场地中用黑色宽2.5cm的不干胶纸(或粘贴黑色不干胶纸带,最好用黑水笔绘制),轨迹线见附图,盛球筐可用木板搭建,或用硬质纸箱代替。(如右图)
5.1竞赛任务及要求:
1、每位选手使用一台机器人参赛,机器人装载乒乓球后从起点出发,沿黑线行进至盛球框,将小球放入,机器人回头沿黑线走回起点处(返回方式的设计自行决定,倒退、掉头均可),机器人行走线路可自选。
2、机器人必须沿黑色轨迹线行走,垂直投影不得脱离轨迹线,不得利用延时程序取代寻轨迹程序使机器人运行;
江苏省天一中学人工智能社团 http://www.tyzx.com.cn/tykx/ chnnazi@126.com
因篇幅问题不能全部显示,请点此查看更多更全内容