资源描述:
《工程设计实践(李卫民)PPT课件》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
移动机器人基础培训第一节微控制器(MCU)基础1
1任务1让LED按照规定的时序闪亮021435t/sonoff2
2完成任务的步骤明确任务分析任务构思解决方案安装硬件编写程序下载、运行、测试总结与讨论3
3一、明确任务4
4LEDLightEmittingDiode发光二极管A阳极(比较长的那根管脚)K阴极(比较短的那根管脚)下面的电路可以使LED发光AKAK470欧姆5伏470Ω5V接地电势零点5
5二、分析任务本任务要求LED按照如下的时序图闪亮实际上是要求Va按照如下的时序变化021435t/s5V0V021435t/sonoff470ΩVa6
6三、构思解决方案7
7解决方案MicroControlUnit微控制器Input-OutputPort输入输出端口MCU能按顺序执行命令(程序)让I/O口按照规定的时序输出电压。470Ω接地VssI/O口电源MCU开关8
8程序让指定的I/O口输出5V电压延时1秒让I/O口输出0V电压延时1秒让I/O口输出5V电压延时2秒让I/O口输出0V结束021435t/s5V0V9
9四、安装硬件10
10教学底板BasicStamp2MCU电池盒电池11
11Pin1:SOUT在编程或者调试(DEBUG)时传送串口数据Pin2:SIN在编程时接收串口数据Pin3:ATN连接到串口DTR(数据终端准备)信号线通知可以给Stamps编程了Pin4:VSS信号地(0V).P0P1P2P3P4P5P6P7P8P9P10P11P12P13P14P15Pins5-20:通用输入/输出(I/O)脚P0到脚P15Pin21:VDD整定的5V输入脚Pin22:RES复位脚-低电平复位Pin23:VSS电源地(0V)Pin24:VIN直流电源输入(5.5-15V)BasicStamp2MCU12
12教学底板面包板电机连接插座5V稳压器外接电源插口串行接口三位开关复位开关电源指示灯I/O插座电源和接地插座13
13安装硬件1、把BasicStamp2插入教学底板上的24脚插座上,注意BS2上的白色标志点与插座上的缺口相对应。白色标志点缺口14
14安装硬件2、确认教学底板上的电源开关处在关闭位置(0),连接电源。电源开关15
15安装硬件3、安装LED电路。(1)LED阴极连接到电源和接地插座上的Vss插孔;(2)LED阳极连接到面包板;(3)找出一只470Ω电阻,电阻上的色环为黄-紫-黑-黑(五环)或黄-紫-棕(四环)(4)电阻的一端接到与LED阳极相通的面包板插孔,另一端连接到I/O插头上的P15插孔。470ΩP15Vss16
16普通电阻用四个色环表示其阻值和允许的偏差。第一、二环表示有效数字,第三个环表示倍率(乘数),与前三个环距离较大的第四环表示精度。精密电阻采用五个色环表示。第一、二、三环表示有效数字,第四个环表示倍率(乘数),与前四个环距离较大的第五环表示精度。17
17颜色有效数字被率(乘数)黑0100棕1101红2102橙3103黄4104绿5105蓝6106紫7107灰8108白910918
18安装硬件4、连接计算机,串口线一端连接到教学底板上的串行接口,另一端连接到PC机上的COM口插座。19
19安装硬件5、检查、测试硬件连接。(1)检查电源连接。打开教学底板上的电源开关(1),电源指示灯应点亮。(2)检查与PC机之间的通讯。打开BasicStamp编辑器第一次打开编辑器时,编辑器会询问几个问题,只需点击OK按钮使用菜单选项RunIdentify或者直接点击ID按钮20
20COM口连接确认框应当如下图所示:如果四个栏目中有任何一个的显示内容与上图不同,都说明连接有问题,需要检查连接。21
21五、编写程序22
22编写PBasic程序让第15号I/O口输出5V电压延时1秒让第15号I/O口输出0V电压延时1秒让第15号I/O口输出5V电压延时2秒让第15号I/O口输出0V结束021435t/s5V0VHIGH15PAUSE1000LOW15PAUSE1000HIGH15PAUSE2000LOW15END23
23把程序键入到编辑器24
24添加必要的说明语句'{$STAMPBS2}'{$PBASIC2.5}HIGH15PAUSE1000LOW15PAUSE1000HIGH15PAUSE2000LOW15END25
25保存到你自己的文件夹文件名:Task1.bs2文件夹:26
26六、下载运行测试27
27下载运行28
28脱机运行关闭教学底板的电源断开串口线重新打开教学底板电源、按一下复位键观察LED的亮灭,检查是否完成预定任务。关闭教学底板的电源(任何一个试验完成后)电源开关复位开关29
29七、总结与讨论30
30完成工程任务的顺序明确任务分析任务构思解决方案安装硬件编写程序下载、运行、测试总结与讨论31
31讨论在上述过程中,PC机和BASICStamp软件的作用是什么?A)控制MCU执行程序,按照时序输出5V或0V电压。B)提供一个编写程序的平台,并把程序翻译成MCU能执行的代码下载给MCU,由MCU独立运行。X√编译环境32
32讨论什么是程序?让第15号I/O口输出5V电压延时1秒让第15号I/O口输出0V电压延时1秒让第15号I/O口输出5V电压延时2秒让第15号I/O口输出0V结束程序是一系列按照一定顺序执行的命令。33
33讨论什么是PBasic程序?用PBasic语言书写的程序。怎么看懂和编写PBasic程序?记住常用语句和语法;使用帮助。'{$STAMPBS2}'{$PBASIC2.5}HIGH15PAUSE1000LOW15PAUSE1000HIGH15PAUSE2000LOW15END帮助按钮34
3435
35Syntax:PAUSEDurationFunctionPausetheprogram(donothing)forthespecifiedDuration.Durationisavariable/constant/expression*(0-65535)thatspecifiesthedurationofthepause.TheunitoftimeforDurationisonemillisecond.36
36ExplanationPAUSEdelaystheexecutionofthenextprograminstructionforthespecifiednumberofmilliseconds.Forexample:Flash:LOW0PAUSE100HIGH0PAUSE100GOTOFlashThiscodecausespin0togolowfor100ms,thenhighfor100ms.37
37任务2让LED按照规定的时序循环闪亮021435t/sonoff68710911重复10次38
38明确任务分析任务这个任务与任务1类似,可以在任务1的基础上通过修改程序完成。构思解决方案硬件与任务1相同编写程序39
39重复执行下列命令10次:让第15号I/O口输出5V电压延时1秒让第15号I/O口输出0V电压延时1秒让第15号I/O口输出5V电压延时2秒让第15号I/O口输出0V延时1秒让第15号I/O口输出5V延时3秒让第15号I/O口输出0V延时1秒结束021435t/sonoff68710911设置重复次数为10;当重复次数大于0时重复执行下列命令:让第15号I/O口输出5V电压延时1秒让第15号I/O口输出0V电压延时1秒让第15号I/O口输出5V电压延时2秒让第15号I/O口输出0V延时1秒让第15号I/O口输出5V延时3秒让第15号I/O口输出0V延时1秒重复次数减少1次结束40
40021435t/sonoff68710911设置重复次数为10;当重复次数大于0时重复执行下列命令:让第15号I/O口输出5V电压延时1秒让第15号I/O口输出0V电压延时1秒让第15号I/O口输出5V电压延时2秒让第15号I/O口输出0V延时1秒让第15号I/O口输出5V延时3秒让第15号I/O口输出0V延时1秒重复次数减少1次结束RepeatNum=10;DOWHILE(RepeatNum>0)HIGH15PAUSE1000LOW15PAUSE1000HIGH15PAUSE2000LOW15PAUSE1000HIGH15PAUSE3000LOW15PAUSE1000RepeatNum=RepeatNum-1LOOPEND41
41RepeatNum=10;DOWHILE(RepeatNum>0)HIGH15PAUSE1000LOW15PAUSE1000HIGH15PAUSE2000LOW15PAUSE1000HIGH15PAUSE3000LOW15PAUSE1000RepeatNum=RepeatNum-1LOOPEND变量Variable一个变量是程序中一个保存数据的地方,对应MCU中一个存储数据的地方,由编辑器负责安排;每个变量都有自己的名字,我们要在程序的前面声明这个变量,也就是告诉编辑器我们的程序要使用这样一个变量;42
42变量的类型每个变量都在MCU中占用一个存储数据的空间,空间的大小是用bit(比特)或者byte(字节)为单位的。1byte=8bit。BasicStamp2内共有32个字节的存储空间,其中只有28个字节可以供我们的程序使用。为了节约存储空间,我们要根据变量的取值范围告诉编译器这个变量需要多大的空间,即声明变量的类型。PBASIC语言把变量分为以下4种基本类型:Bit可以用来存储0或者1占用1bitNib可以用来存储0到15占用4bitByte可以用来存储0到255占用8bitWord可以用来存储0-65535占用16bit声明变量的语法:变量名VAR变量类型RepeatNumVARNib43
43'{$STAMPBS2}'{$PBASIC2.5}RepeatNumVARNibRepeatNum=10DOWHILE(RepeatNum>0)HIGH15PAUSE1000LOW15PAUSE1000HIGH15PAUSE2000LOW15PAUSE1000HIGH15PAUSE3000LOW15PAUSE1000RepeatNum=RepeatNum-1LOOPEND键入程序保存到task2.bs2下载运行测试结果44
44改进方案控制循环的其他方法'{$STAMPBS2}'{$PBASIC2.5}RepeatNumVARNibFORRepeatNum=1TO10HIGH15PAUSE1000LOW15PAUSE1000HIGH15PAUSE2000LOW15PAUSE1000HIGH15PAUSE3000LOW15PAUSE1000NEXTEND45
45改进方案添加常数'{$STAMPBS2}'{$PBASIC2.5}RepeatNumVARNibTimeUnitCON1000FORRepeatNum=1TO10HIGH15PAUSETimeUnitLOW15PAUSETimeUnitHIGH15PAUSE2*TimeUnitLOW15PAUSETimeUnitHIGH15PAUSE3*TimeUnitLOW15PAUSETimeUnitNEXTEND46
46改进方案添加注释'Task2byFeiYuenong'{$STAMPBS2}'{$PBASIC2.5}RepeatNumVARNib'NumberofrepeatiVARNibFORRepeatNum=1TO10FORi=1TO3HIGH15'MakeP15output5VPAUSEi*1000'Waitforisecond(s)LOW15PAUSE1000NEXTNEXTEND47
47调试方法通过调试终端了解程序的运行状态DEBUG'Task2byFeiYuenong'{$STAMPBS2}'{$PBASIC2.5}TimeUnitCON1000RepeatNumVARNib'NumberofrepeatiVARNibFORRepeatNum=1TO10DEBUG“RepeatNum=”,DECRepeatNum,CRFORi=1TO3HIGH15'MakeP15output5VPAUSEi*TimeUnit'WaitforiTimeUnit(s)LOW15PAUSETimeUnitNEXTNEXTEND48
48总结与讨论DOWHILE()LOOP变量常量FORNEXTDEBUG49
49练习1让程序在完成第n次重复的时候在调试终端上显示“Repeatncompleted.”提示:已经完成第n次重复的时候50
50练习2让LED按照规定的时序循环闪亮021435t/sonoff68710911重复无限次提示:用DOLOOP51
51下课前将实验设备整理好关闭计算机断开串口线断开教学底板的电源线机器人套件的各个零部件放入实验箱已经安装好的部分可以不拆开52
52移动机器人基础培训第二节机器人组装53
53任务3组装机器人,用装配图记录组装过程,写装配说明书。54
54一明确任务组装机器人记录组装过程55
55二分析任务观察已组装好的机器人的实物照片了解机器人结构,将组装过程划分成几个步骤用装配说明书记录组装过程56
5657
5758
58三方案一、安装机器人底盘二、拆除伺服喉三、安装电机四、安装轮子&电池盒五、安装电路板按照安装步骤安装,并记录安装过程:59
59步骤一、安装机器人底盘找零件、工具安装记录安装过程60
6061
6162
62装配说明书为什么要画这个说明书说明书需要体现哪些信息这些信息如何体现在说明书上一些细节如何处理63
63装配说明书图形零件列表工具列表安装步骤说明64
64步骤二、拆除伺服喉找零件&工具安装记录安装过程65
6566
66装配说明书图形零件列表工具列表安装步骤说明67
6768
68步骤三、安装电机………………69
6970
70装配说明书这个图有什么问题?71
7172
72步骤四、安装轮子&电池盒………………73
73装配说明书缺少的内容自己补齐74
7475
7576
7677
7778
7879
7980
80步骤五、安装电路板………………81
8182
82装配说明书缺少的内容自己补齐83
8384
84移动机器人基础培训第三节电机控制85
85任务4设计制作一个双轮独立驱动的机器人,具备以下功能:直线前进一个给定的距离直线后退一个给定的距离原地向右转90度原地向左转90度86
86明确任务双轮独立驱动的机器人结构特点运动方式87
87分析任务机器人套件提供了必要的机械结构件、电动机和MCU,本任务可以分解为以下2个子任务:1)控制电动机的速度和方向2)调试机器人88
88子任务1控制电动机的速度和方向89
89任务分析伺服电动机ParallaxServo90
90伺服电动机ParallaxServo的内部结构电动机减速箱驱动器控制器91
91教学底板的右上角(面包板上方)提供了伺服电动机的接口92
92控制信号的作用:1.3ms的控制脉冲序列使电机顺时针全速旋转,转速约为60RPM1.5ms的控制脉冲序列使电机转速为零,可用调零电位器调零1.7ms的控制脉冲序列使电机逆时针全速旋转,转速约为60RPM1.5ms的控制脉冲序列使电机转速为零,可用调零电位器调零93
93子任务1“控制电机的速度和方向”转化为让MCU输出一串具有给定宽度的脉冲。PULSOUTPin,DurationPinisavariable/constant/expression(0-15)thatspecifiestheI/Opintouse.Durationisavariable/constant/expression(0-65535)thatspecifiesthedurationofthepulse.TheunitoftimeforDurationis2μs.94
94试验验证目的:验证上述电动机的控制方法试验方法:一、先调零调节参数在750左右,使得电机速度为零二、让接在P12上的电动机连续顺时针全速转动三、让接在P13上的电动机连续逆时针全速转动95
95试验步骤:编写并保存程序DO…LOOP把一个电动机连接到教学底板上的伺服电机插座(X5-12或13),注意电机连接线的颜色与插座上标出的颜色一致把教学底板上的电源开关拨到2的位置下载运行程序,观察并记录电机的转动情况改变程序的脉冲时间参数,观察并记录电机的转动情况96
96‘{$STAMPBS2}‘{$PBASIC2.5}pulseWidthVARWordDEBUG“Enterpulsewidth:”DEBUGINDECpulseWidthDOPULSOUT12,pulseWidthPAUSE20LOOPEND97
97电机调零调节参数在750左右,使得电机速度为零若脉冲参数在750左右时电机速度不为零,需要用螺丝刀调节电机上的调零旋钮。98
98试验验证试验记录:试验结论试验程序文件名脉冲时间参数电机行为描述99
99实验一测定左右电机的传输曲线实验目的:测定电机转速与脉冲参数之间的关系实验方法:让电机以不同的脉冲参数运行,测量并记录转过的圈数,计算转速。实验步骤:分别记录左右电机的转动圈数实验总结:用图表说明脉冲参数与电机转速的关系100
100101
101常用的绘图软件ExcelMatlabOriginPowerpoint102
102问题1找不到硬件:USB连线问题。一般应该连接到电脑后面的接口电池的电压不够,更换电池没开电源电源盒里没有电池电路板问题,需更换电路板103
103问题2电机测试程序出错变量名前后不一致程序中没有pause20语句,会导致电机工作不正常,运行时间短Pulsout语句后面没写逗号,如:pulsout12pulsewidth版本号写错Debugin写错Debug后面没有双引号(半角)104
104问题3电机问题参数750时没有办法调零,需更换电机任何参数下电机都不转,两种可能,一电机的电源线断,换电机;另一种可能为P12或P13端口异常,需要换P14或P15试一试任何参数下,转速基本不变,电机里面的齿轮箱损坏,更换电机105
105子任务2调试机器人设计制作一个双轮独立驱动的机器人,具备以下功能:直线前进一个给定的距离直线后退一个给定的距离向右转向左转106
106分析任务加上轮子,电机的转动转换成车子的运动。确定速度与脉冲参数之间的关系控制运行的时间,改变车速左转、右转(转弯半径)107
107车头视图108
108D:\MyDocuments\MyD:\MyDocuments\MyPictures\DSC_0022.JPGPictures\卫生间.jpgD:\MyDocuments\MyPictures\卫生间.jpg车尾视图109
109右侧视图顺逆110
110车子的运动方向左轮电极接12,右轮电极接13为了统一、方便左电机右电机前进后退逆顺顺逆111
111车子直行保证左右轮同速,否则走不直根据左右轮关系,左右轮对应的脉冲关系:左轮脉冲=1500-右轮脉冲112
112实验二测定车子速度实验目的:测定车子速度与脉冲参数之间的关系实验方法:让电机以不同的参数运行一段时间,测量并记录,计算车子速度。实验步骤:调零编写程序,让左右电机各转动6秒钟分别记录车子前进或后退的距离,填写实验记录实验总结:用图表说明脉冲参数与车子速度的关系113
113电机转动时间实验方法:让电机运行一段时间6sFORCOUNT=1TO244PULSOUT12,850’1.7msPULSOUT13,650’1.3msPAUSE20’20ms代码执行时间1.6msNEXT114
114‘{$STAMPBS2}‘{$PBASIC2.5}counterVARWordpulseWidthVARWordpulseWidthCompVARWordDEBUG“Enterpulsewidth:“DEBUGINDECpulseWidthpulseWidthComp=1500-pulseWidthFORcounter=1TO244PULSOUT12,pulseWidthPULSOUT13,pulseWidthCompPAUSE20NEXT115
115脉冲车子速度650670690710730750770790810830850116
116练习1、让机器人直线前行30cm确定直线前进的距离与(时间)循环次数之间的关系。在给定脉冲参数和循环次数的条件下,测量直线前进的距离。步骤:编写程序让机器人前行?秒钟(循环次数=?)根据前面的实验数据理论计算调整脉冲参数,保证直线运动测量并记录运动距离调整循环次数,再次测量记录运动距离扩展:让机器人后退一定的距离117
117如何消除拨动开关带来的干扰?FREQOUT4,1000,3000(循环前面加这个语句)在P4口输出一个3000Hz的方波,持续1000ms118
118‘{$STAMPBS2}‘{$PBASIC2.5}counterVARWordFREQOUT4,1000,3000FORcounter=1TO244‘根据具体需要设置’PULSOUT12,850PULSOUT13,650PAUSE20NEXTEND119
119练习2、实现车子左转右转目的:控制车子实现左转右转分别实现以下六种转动:1、原地左传2、原地右转3、以左轮为轴顺时针旋转4、以左轮为轴逆时针旋转5、以右轮为轴顺时针旋转6、以右轮为轴逆时针旋转120
120练习3、实现车子匀变速运动匀变速运动:逐渐增加或减少车子转速两种:匀加速运动,匀减速运动8种:匀加速前进,匀加速后退,匀加速原地左传,匀加速原地右转,匀减速前进,匀减速后退,匀减速原地左传,匀减速原地右转121
121‘实现匀加速前进运动‘{$STAMPBS2}‘{$PBASIC2.5}counterVARWordFREQOUT4,2000,3000FORcounter=1to100PULSOUT12,750+counterPULSOUT13,750-counterPAUSE20NEXTEND122
122练习4、用子程序简化‘{$STAMPBS2}‘{$PBASIC2.5}DEBUG“Beforesubroutine”,CRPAUSE1000GOSUBMy_SubroutineDEBUG“Aftersubroutine”,CRENDMy_Subroutine:DEBUG“Commandinsubroutine”,CRPAUSE1000RETURN123
123‘{$STAMPBS2}‘{$PBASIC2.5}counterVARWordFREQOUT4,2000,3000GOSUBForwardGOSUBLeftGOSUBRightGOSUBBackwardENDForward:FORcounter1=64PULSOUT12,850PULSOUT13,650PAUSE20NEXTPAUSE200RETURNLeft:FORcounter1=64PULSOUT12,650PULSOUT13,650PAUSE20NEXTPAUSE200RETURNRight:FORcounter1=64PULSOUT12,850PULSOUT13,850PAUSE20NEXTPAUSE200RETURNBackward:FORcounter1=64PULSOUT12,650PULSOUT13,850PAUSE20NEXTPAUSE200RETURN124
124第一阶段作业要求电机实验报告评分标准:测试目的、原理、方法、步骤描述清楚、有条理,测试数据翔实,测试结果表述清楚。机器人装配说明书评分标准:装配关系正确、装配顺序合理、能正确运用文字说明和装配示意图表达装配关系和装配顺序。125
125工作记录时间事件参加人员具体内容或结果时间事件参加人员具体内容或结果。。。。126
126定点比赛误差分析产生误差的原因怎么减少误差导航技术127
127导航技术机器人在无感觉的情况下行走机器人根据传感器检测到的信息进行导航(触须、红外传感器、光敏电阻等)(1)触觉导航(2)红外传感器导航(3)光敏电阻导航128
128(一)触觉导航技术许多自动化机械设备都依赖于各种触觉开关。将在机器人上安装一个称为胡须的触觉开关。将对机器人编程来监视触觉开关的状态,以及决定当它遇到障碍物时如何动作。最终的结果就是通过触觉给机器人自动导航。129
129任务1:安装并测试机器人的胡须称它为胡须,是因为这些缓冲开关看起来象胡须,尽管有些人争论说它更象触角。无论如何,安装好的胡须如图所示。胡须让机器人有能力通过接触来判断周边的环境,很象蚂蚁的触角,或是猫的胡须。元件清单安装胡须搭建电路测试130
130胡须电路及装配?收集胡须硬件,如图所示元件清单:(1).须状金属丝2根(2).平头M4-40螺丝钉2个(3).½″圆形套管2个(4).尼龙垫圈2个(5).3-pin公-公接头个(6).220Ω电阻2个(四环:红-红-棕;五环:红-红-黑-黑)(7).10kΩ电阻2个(四环:棕-黑-橙;五环:棕-黑-黑-红)131
131安装胡须?参考右图,进行下面操作:1拆掉连接教学板与前支架的两颗螺钉2往螺丝钉上依次套上尼龙垫圈、½″圆形套管3螺钉穿过主板上的圆孔之后,拧进教学板下面的支架中,但不要拧紧4把一根须状金属丝一端钩在一个螺丝钉的尼龙垫圈之上,另一个钩在螺丝钉的尼龙垫圈之下,调整它们的位置使它们横向交叉但又不接触5将螺丝钉拧紧到支架上安装机器人触觉胡须132
132胡须电路示意图参考接线图,搭建胡须电路。确定两条胡须比较靠近,但又不接触面包板上的3-pin头。推荐保持3mm的距离。133
133测试胡须观察一下胡须电路示意图,每条胡须都是一个机械式、接地常开的单刀单掷开关。胡须接地(Vss)是因为教学板边缘的安装孔(镀有金属)都连接到Vss。金属支架和螺丝钉提供电气连接给触觉胡须。当胡须没有被压下,连接胡须的I/O管脚的电压是5V;当胡须被压下时,I/O短接到地,所以I/O管脚的电压是0V。134
134测试胡须输入寄存器IN0、IN1、IN2、IN3、IN4、IN5、IN6、IN7…IN14、IN15如果I/O脚上的电压为5V(胡须没有压下),则其寄存器存储1;如果电压为0V(胡须被压下),则存储0。可以用调试终端显示这些数值。连接到P5管脚的触须开关状态值1或者0存储在一个名叫IN5的变量中。可以使用指令DEBUGBIN1IN5来查看存储在该变量中的值。BIN1是DEBUG格式符,告诉调试终端显示的是一个二进制值(1或者0)。135
135'TestWhiskers.bs2'DisplaywhattheI/Opinsconnectedtothewhiskerssense'{$STAMPBS2}'Stampdirective.'{$PBASIC2.5}'PBASICdirective.DEBUG"WHISKERSTATES",CR,"LeftRight",CR,"------------"DODEBUGCRSRXY,0,3,“P5=",BIN1IN5,"P7=",BIN1IN7PAUSE50LOOP136
136脱机测试胡须脱机测试胡须触觉。由于没有计算机的调试终端,你该怎么办?一种解决的办法是对BASICStamp微控制器编程,让它根据其接收到输入信号发送一个相对应的输出信号。下面利用一对LED显示电路和一段程序,由程序基于胡须触觉的输入打开或者关闭LED。所需元件:(1)220Ω电阻(红-红-棕)2个(2)红色LED2个搭建LED胡须测试电路搭建如图所示的LED电路。对LED胡须测试电路编程?137
137138
138IF…THEN句法PBASIC语言中有个条件判断指令语句IF…THEN,其句法是:IF(condition)THEN…{ELSEIF(condition)}…{ELSE}…ENDIF句中“…”的意思是,你可以在此放置一个代码段(由一条或多条指令组成)。139
139'TestWhiskerswithLed.bs2'DisplaywhattheI/Opinsconnectedtothewhiskerssense.'{$STAMPBS2}'Stampdirective.'{$PBASIC2.5}'PBASICdirective.DEBUG"WHISKERSTATES",CR,"LeftRight",CR,"------------"DODEBUGCRSRXY,0,3,"P5=",BIN1IN5,"P7=",BIN1IN7PAUSE50IF(IN5=0)THENHIGH10ELSELOW10ENDIFIF(IN7=0)THENHIGH1ELSELOW1ENDIFLOOP140
140任务3用胡须实现触觉导航机器人向前走直到碰到障碍物。此时,机器人用它的一根或者两根胡须碰障碍物,当遇到障碍物胡须被压下。一旦胡须被压下,机器人就探测到了障碍物,然后可以调用基本动作子程序使机器人倒退或者转弯,以避开障碍物重新向前行走,直到遇到另一个障碍物重复上述的过程。下面的例程会基于胡须的输入状态做出选择,然后调用相关子程序使机器人动作。IF(IN5=0)AND(IN7=0)THENGOSUBBack_UpGOSUBTurn_LeftELSEIF(IN5=0)THENGOSUBBack_UpGOSUBTurn_RightELSEIF(IN7=0)THENGOSUBBack_UpGOSUBTurn_LeftELSEGOSUBForward_PulseENDIF141
141'RoamingWithWhiskers.bs2'{$STAMPBS2}'{$PBASIC2.5}pulseCountVARByteFREQOUT4,2000,3000'-----[MainRoutine]-----------DOIF(IN5=0)AND(IN7=0)THENGOSUBBack_UpGOSUBTurn_LeftELSEIF(IN5=0)THENGOSUBBack_UpGOSUBTurn_RightELSEIF(IN7=0)THENGOSUBBack_UpGOSUBTurn_LeftELSEGOSUBForward_PulseENDIFLOOP'-----[Subroutines--------Forward_Pulse:PULSOUT12,650PULSOUT13,850PAUSE20RETURNTurn_Left:FORpulseCount=0TO10PULSOUT12,650PULSOUT13,650PAUSE20NEXTRETURNTurn_Right:FORpulseCount=0TO10PULSOUT12,850PULSOUT13,850PAUSE20NEXTRETURNBack_Up:FORpulseCount=0TO20PULSOUT12,650PULSOUT13,850PAUSE20NEXTRETURN142
142可以修改IF…THEN语句让前面任务中的LED指示灯来指示机器人的动作。通过添加HIGH和LOW命令来控制LED电路。举例说明:IF(IN5=0)AND(IN7=0)THENHIGH10HIGH1GOSUBBack_UpGOSUBTurn_LeftELSEIF(IN5=0)THENHIGH10GOSUBBack_UpGOSUBTurn_RightELSEIF(IN7=0)THENHIGH1GOSUBBack_UpGOSUBTurn_LeftELSELOW10LOW1GOSUBForward_PulseENDIF143
143机器人迷路时的人工智能决策你或许已注意到机器人迷失在墙角里的情况。当机器人进入墙角时,左胡须触墙,于是它右转。当小车再向前行走,右胡须触墙,于是左转。然后它又前进又会碰到左墙,再次碰到右墙……等等。这时你只能把动手把它从困境中解救出来。144
144编程逃离墙角胡须交替压下的总次数。重要的一点是程序必须记住每个胡须在上次压下时处于什么状态,并和当前压下的状态对比。如果状态相反,就在总数上加1。如果这个总数超过了程序中预先给定的阀值,那么就该做一个“U”型转弯,并且把胡须交替计数器复位。IF…THEN嵌套语句IFcondition1THENCommandsforcondition1IFcondition2THENCommandsforbothcondition2andcondition1ELSECommandsforcondition1butnotcondition2ENDIFELSECommandsfornotcondition1ENDIF145
145'{$STAMPBS2}'{$PBASIC2.5}pulseCountVARBytecounterVARNibold7VARBitold5VARBitFREQOUT4,2000,3000counter=1old7=0old5=1'-----[MainRoutine]------------DOIF(IN7<>IN5)THENIF(old7<>IN7)AND(old5<>IN5)THENcounter=counter+1old7=IN7old5=IN5IF(counter>4)THENcounter=1GOSUBBack_UpGOSUBBack_UpGOSUBTurn_LeftGOSUBTurn_LeftENDIFELSEcounter=1ENDIFENDIFIF(IN5=0)AND(IN7=0)THENGOSUBBack_UpGOSUBTurn_LeftELSEIF(IN5=0)THENGOSUBBack_UpGOSUBTurn_RightELSEIF(IN7=0)THENGOSUBBack_UpGOSUBTurn_LeftELSEGOSUBForward_PulseENDIFLOOP146
146'-----[Subroutines--------Forward_Pulse:PULSOUT12,650PULSOUT13,850PAUSE20RETURNTurn_Left:FORpulseCount=0TO10PULSOUT12,650PULSOUT13,650PAUSE20NEXTRETURNTurn_Right:FORpulseCount=0TO10PULSOUT12,850PULSOUT13,850PAUSE20NEXTRETURNBack_Up:FORpulseCount=0TO20PULSOUT12,650PULSOUT13,850PAUSE20NEXTRETURN147
147我们只讨论与探测和逃离墙角相关的程序新特征。三个特别的变量用于探测墙角。半字节变量counter可以存储0~15之间的任一数值。由于探测墙角的目标值设定为4,所以变量的大小应该是合理的。回想一下,一个位形变量只能保存一个二进制数,0或1。下面两个变量(old7和old5)都是位型变量。用它们存储旧的位变量IN7和IN5合适。counterVARNibold7VARBitold5VARBit变量必须经过初始化(给定初试值)。为了便于阅读程序,counter设为1,当机器人卡在墙角此值累计到4时,counter复位为1。old7和old5必须赋值以至于看起来象两根胡须的其中一个在程序开始之前被触动了。这些工作之所以必须做,是因为探测墙角的程序总是对比交替触动的部分,或者(IN5=1和IN7=0),或者(IN5=0和IN7=1)。同样的,old7和old5的值必须相互不同。counter=1old7=0old5=1148
148如何探测连续和交替碰到墙角。首先要检查的是,是否有任何一个胡须被压下。简单的方法就是询问“是否IN7不同于IN5?”在PBASIC语言中,你可以在条件假设语句中应用不等于操作符“<>”,如:IF(IN7<>IN5)THEN假如真有胡须被压下,接下来要做的事情就是检查当前状态是否确实与上次不同。换句话说,是old7不等于IN7(old7<>IN7)和old5不等于IN5(old5<>IN5)吗?如果是,就在胡须触动计数器上加1,同时记下当前的状态,设置old7等于当前的IN7,old5等于当前的IN5。IF(old7<>IN7)AND(old5<>IN5)THENcounter=counter+1old7=IN7old5=IN5如果发现胡须连续四次被交替压下,那么计数值置1,并且进行“U”型拐弯。IF(counter>4)THENcounter=1GOSUBBack_UpGOSUBTurn_LeftGOSUBTurn_LeftENDIFENDIF结束IFcounter>4代码段。ELSE语句接着IF(old7<>IN7)AND(old5<>IN5)THEN语句。ELSE语句说明当IF语句不为真时该做什么。换句话说,不是胡须交替压下,于是计数值复位,因为机器人没有陷入墙角。ELSEcounter=1接下来的ENDIF结束条件判断语句IF(old7<>IN7)AND(old5<>IN5)THEN。最后一个ENDIF结束IF(IN7<>IN5)THEN。149
149红外传感器导航技术150
150红外线发射器和接受器都很普及汽车钥匙、家庭报警装置、电视遥控器、无线鼠标、PDA传送数据等许多遥控装置价格便宜151
151红外光(IR)探测基础知识(Infrared)使用红外光来照射机器人的路线,然后确定何时有光线从目标反射回来152
152机器人使用红外线两极管LEDs作为前灯,他们发射红外光。红外检测器发出信号来表明它们是否检测到从物体反射回的红外线。红外检测器也有一个电子滤波器,它只允许大约38.5kHz的信号通过(抗干扰)153
153任务1搭建并测试IR发射和探测器对154
154元件清单:(1)两个红外检测器(2)两个红外LEDs(3)两个220Ω电阻(红-红-黑-黑-棕)(4)两个1kΩ电阻(棕-黑-黑-棕-棕)155
155电路图156
156157
157搭建电路注意事项尽可能少用线尽可能避免交叉走线导线的颜色搭配布线艺术:美观、清楚、简洁158
158用FREQOUT命令测试红外发射探测器FREQOUT命令主要是用来合成音频。本任务中,你要用命令FREQOUT8,1,38500向P8发送持续1毫秒的38.5kHz和声,连接P8的红外LED电路将发送和声。如果红外光被小车路径上的物体反射回来,红外检测器将给BASICStamp发送一个信号,让它知道已经检测到反射回的红外光。159
159将IR探测器的输出存储到一个变量中。用位变量irDetectLeft存储连接到P9的IR探测器的输出。FREQOUT8,1,38500irDetectLeft=IN9当没有信号返回时,探测器的输出状态为高,即1。当它探测到被物体反射的和声时,输出为低,即0。当FREQOUT命令发送和声后,IR探测器的输出处于低状态不到1毫秒,因此当发送完FREQOUT命令后立即将IR探测器的输出存储到变量中是很重要的。这些存储的值会显示在调试终端或被机器人用来导航。160
160'{$STAMPBS2}'{$PBASIC2.5}irDetectLeftVARBitDOFREQOUT8,1,38500irDetectLeft=IN9DEBUGHOME,"irDetectLeft=",BIN1irDetectLeftPAUSE100LOOP注意:自己写出另一对发射接受的程序161
161任务2在脱机情况下知道是否检测到目标在任务1的基础上搭建发红光LED162
162元件清单:(1)红色LEDs(2)220Ω电阻(红-红-黑-黑-棕)163
163164
164PBASIC语言中有个条件判断命令语句IF…THEN,其句法是:IF(condition)THEN…{ELSEIF(condition)THEN}…{ELSE}…ENDIF句中“…”的意思是,你可以在关键词之间放置一个代码段(由一条或多条命令组成)。165
165'{$STAMPBS2}'{$PBASIC2.5}irDetectLeftVARBitirDetectRightVARBitDOFREQOUT8,1,38500irDetectLeft=IN9FREQOUT2,1,38500irDetectRight=IN0IF(irDetectLeft=0)THENHIGH10ELSELOW10ENDIFIF(irDetectRight=0)THENHIGH1ELSELOW1ENDIFPAUSE100LOOP166
166练习1:红外检测范围调整你可能已经注意到在环境很黑的时候,亮一些的汽车灯可以看到更远一些的物体。更小的电阻使通过LED的电流更多。更多的电流使LED更亮。练习将检测IRLED串联不同电阻值的效果。167
167元件清单:本节中需要一些特殊的部件:(1)两个470Ω电阻(黄-紫-黑-黑-棕)(2)两个220Ω电阻(红-红-黑-黑-棕)(3)两个2kΩ电阻(红-黑-黑-棕-棕)(4)两个4.7kΩ电阻(黄-紫-黑-棕-棕)168
168检测距离与电阻的关系IRLED电阻(Ω)最远检测距离470020001000470220169
169练习2:红外导航探测障碍物很重要的一点是在机器人撞到它之前给机器人留有绕开它的空间。如果前方有障碍物,机器人会使用脉冲命令避开。然后探测,如果物体还在,再使用另一个脉冲来避开它。机器人能持续使用电机驱动脉冲和探测,直到它绕开障碍物,然后它会继续发向前行走的脉冲。170
170分析任务正前方有障碍物:向左或向右左边有障碍物:向右右边有障碍物:向左无障碍物:正前方171
171构思方案前面装两个红外装置,一个前面左恻,一个前面右恻两个传感器都发现障碍物(0,0),障碍物在正前方左传或右转左侧传感器都发现障碍物(0,1),障碍物在左侧右转右侧传感器都发现障碍物(1,0),障碍物在右侧左转两个传感器都没有发现障碍物(1,1),继续前进172
172'RoamingWithIR.bs2'{$STAMPBS2}'{$PBASIC2.5}pulseCountVARByteleftDetectVARbitrightDetectVARbitFREQOUT4,2000,3000'-----[MainRoutine]-----------DOFREQOUT8,1,38500leftDetect=IN9FREQOUT2,1,38500rightDetect=IN0IF(leftDetect=0)AND(leftDetect=0)THENGOSUBTurn_LeftELSEIF(leftDetect=0)THENGOSUBTurn_RightELSEIF(rightDetect=0)THENGOSUBTurn_LeftELSEGOSUBForward_PulseENDIFLOOP'-----[Subroutines--------Forward_Pulse:PULSOUT12,650PULSOUT13,850PAUSE20RETURNTurn_Left:FORpulseCount=0TO10PULSOUT12,650PULSOUT13,650PAUSE20NEXTRETURNTurn_Right:FORpulseCount=0TO10PULSOUT12,850PULSOUT13,850PAUSE20NEXTRETURNBack_Up:FORpulseCount=0TO20PULSOUT12,650PULSOUT13,850PAUSE20NEXTRETURN173
173练习3:俯视地面的探测器当机器人IR检测器向下监测到地面的标志物时,机器人做相应的动作。只要IR探测器都能够“看”到地面的标志物,机器人:调整自身位置、继续向前走、左传、右转、停止等动作。174
174175
175比赛场地起点123176
176评分标准沿墙走(靠右侧),移动机器人绕场地周。完成整个过程,进入三个房间,回到出点。要求:整个过程不能撞墙。进出每个房间有提示,或指示灯亮;或蜂鸣器叫。回到出发点自动停。(可加分)177
177提示传感器如何布局安装?传感器对着墙,传感器和墙的角度通过实验调整,和墙之间的距离通过实验调整行走路线如何设计?避免和墙碰撞,又不能远离开墙走线形状178
178时间安排按上次的分组:编程、测试下次上课时间:15:00正式比赛,每组2次机会,写比赛工作记录。工作记录暂时不交,所有比赛结束后,提交一份以工作记录为基础的总结报告。179
179光敏电阻导航技术用光敏电阻导航找到房间中点燃的蜡烛180
180任务一:搭建和测试光敏电阻电路任务二:从你的光敏电阻获得更多信息任务三:使光敏电阻感受确定方向的光任务四:确定室内有没有点燃的蜡烛任务五:向光源移动任务六:找到光源,用风扇灭火181
181任务一:搭建和测试光敏电阻电路光敏电阻(LDRLightDependentResistor).由硫化镉所组成(CdS),光敏电阻的电阻阻值与光的照度成反比,也就是黑暗时形成较大的电阻,明亮时造成较小的电阻。182
182元件清单光敏电阻2个2KΩ2个五环:红-黑-黑-棕-棕四环:红-黑-红-金3.220Ω2个五环:红-红-黑-黑-棕四环:红-红-棕-金183
183搭建感光眼光探测电路原理图184
184光敏探测电路的接线图185
185电路工作原理如果光特别亮,电阻值R非常小如果是在完全黑暗的环境中,电阻值R接近50KΩ当R增大时,Vo会减小当R减小时,Vo会增大Vo小于1.4V,寄存器的电压为0Vo大于1.4V,寄存器的电压为1186
186'{$STAMPBS2}'{$PBASIC2.5}DEBUG"PHOTORESISITORSTATES",CR,"LeftRight",CR,"---------"DODEBUGCRSRXY,0,3,"P6=",BIN1IN6,"P3=",BIN1IN3PAUSE100LOOPEND光敏电阻测试程序187
187任务二:从你的光敏电阻获得更多信息通过该电路监测并收集足够的信息以确定相对光强小值表明光比较强,大值表明光比较弱188
188电容器介绍电容是存储电荷的器件,它是电路的基本元件。单位:法拉1F=106uF=1012pF本项目:0.01微法(103)189
189清单(1)光敏电阻(CDS)2个(2)0.01微法(103)电容2个(3)220Ω电阻2个五环:红-红-黑-黑-棕四环:红-红-棕-金190
190两个光敏RC电路示意图191
191接线图192
192RC衰减时间和光敏电阻电路电容可看作一个微小的可充电电池当P6发送一个高电平信号时,实质上是用5v加在电容上充电。几个毫秒后,电容的电压几乎达到5v如果BASICStamp程序改变I/O端口电容就通过光敏电阻放电。IN6感到电压降到1.4v所用的时间取决于光敏电阻阻止电容提供的电流流动能力的大小。光敏电阻的阻值阻抗大,电容就需要更长的放电时间193
193用BASICStamp测量RC衰减时间可以编程使BASICStamp给电容充电然后测量电容电压衰减到1.4v所用的时间,它可以用来表征光敏电阻的阻值。194
194RCTIMERCTIMEPIN,State,DurationState可以是1也可以是0:如果通过电容两端的电压从高于1.4v向下衰减,参数为1,反之为0,Duration是存贮测量的时间的变量,单位是2微秒,测量电容的电压衰退到低于1.4V所需要的時間195
195测量RC衰减时间之前,要做的第一件事是确保已经定义一个存储测量时间的变量。timeLeftVarWord下面三行代码是给电容充电,测量RC衰减时间并存储在timeLeft变量中HIGH6PAUSE3RCTIME6,1,timeLeft196
196'{$STAMPBS2}'{$PBASIC2.5}timeLeftVARWordtimeRightVARWordDEBUG"timeLefttimeRight",CR,".............."DOHIGH6PAUSE3RCTIME6,1,timeLeftHIGH3PAUSE3RCTIME3,1,timeRightDEBUGCRSRXY,0,3,DEC5timeLeft,"",DEC5timeRightPAUSE100LOOPEND197
197任务三:手电筒光束导航光敏电阻加套筒,将套筒朝向光束的方向,使左右两侧放电时间基本相等有无手电筒光束的时间测量用手电筒导航左侧测量值右侧测量值描述LeftAmbient=LeftAmbient=没有手电筒光束照射时LeftBright=RightBright=有手电筒光束照射时198
198'{$STAMPBS2}'{$PBASIC2.5}LeftAmbientCONRightAmbientCONLeftBrightCONRightBrightCON'LeftBright+LeftAmbient/2*5/8LeftAverageCON'RightBright+RightAmbient/2*5/8RightAverageCONtimeLeftVARWordtimeRightVARWordDOGOSUBTest_PhotoresistorsGOSUBNavigateLOOPTest_Photoresistors:HIGH6PAUSE3RCTIME6,1,timeLeftHIGH3PAUSE3RCTIME3,1,timeRightRETURNNavigate:IF(timeLeft199任务四:确定室内有没有点燃的蜡烛先测量比赛场地内没有蜡烛时,左右光敏电阻的放电时间的平均值,在测量比赛场地内有点燃蜡烛时,左右光敏电阻的放电时间的平均值注意AverageVarword200
200任务五:向光源移动策略:车子寻找光源的路线图201
201寻找光源的程序IF(timeLeft202使机器人在特定的光线条件下转弯前有机会使用足够多的向前脉冲IF(timeLeft203缺点只能工作在中等黑暗的环境如果将它拿到相当暗的地方,机器人不断的来回旋转,永远不会向前行走。如果将它拿到更亮的地方,机器人只会向前运动,而不会调整向左或向右的方向。204
204为什么?当机器人处在房子的黑暗部分时,每个光敏电阻的测量值会大一些。机器人决定转向亮光源时,两个测量结果之间的差别会较大当机器人处在更亮一点的地方时,每个光敏电阻的测量值会小一点,机器人决定做一个转动时,两个测量结果之间的差别会比在黑暗的地方小205
205使小车对不同的光线条件产生不同的响应的方法是设定一个变量,即timeRight和timeLeft的平均值的分数。这样的话,无论外界光线强弱,值总是正确的。average=(timeRight+timeLeft)/2difference=average/3变量difference可以被用在IF…THEN声明中,当光线弱时,它的值大,当光线强时它的值就小206
206IF(timeleft207'{$STAMPBS2}'{$PBASIC2.5}timeLeftVARWordtimeRightVARWordaverageVARWorddifferenceVARWordDOHIGH6PAUSE3RCTIME6,1,timeLeftHIGH3PAUSE3RCTIME3,1,timeRightaverage=(timeRight+timeLeft)/2difference=average/3IF(average>500)THENIF(timeleft208'{$STAMPBS2}'{$PBASIC2.5}timeLeftVARWordtimeRightVARWordaverageVARWorddifferenceVARWordDOHIGH6PAUSE3RCTIME6,1,timeLeftHIGH3PAUSE3RCTIME3,1,timeRightaverage=(timeRight+timeLeft)/2difference=average/3IF(average>500)THENIF(timeleft209任务六:用风扇灭火测试电风扇明确任务:让电风扇转动起来,能否吹灭蜡烛分析任务:了解风扇参数及工作原理构思方案:A:利用教学底板上的电源(Vdd)和地(Vss)B:利用MCU的I/O口输出高电平搭建电路图编写软件编译及分析讨论210
210分析任务电风扇参数:直流电源:5V电流:0.18A功率:0.9W211
211方案A:搭建电路(在风扇前放蜡烛,检查能否吹灭蜡烛)212
212方案B:利用MCU1使用MCU的I/O口直接驱动电风扇转动2搭建电路:将风扇的正极接某一输入输出口(I/O)另一端接地213
213方案B:利用MCU编写程序:'{$STAMPBS2}'{$PBASIC2.5}DOHIGH11LOOP214
214分析讨论原因分析:I/O口驱动能力非常弱(信号源)LED的功率工作电压1.5~3V工作电流几到十几毫安功率0.03W电扇的参数:直流电源5V电流0.18mA功率:0.9W215
215用三极管做开关三极管识别方法:手拿三极管管脚,人正对平面一侧(有文字的一侧),左手边的管脚为发射极(e),中间管脚为基极(b),右手边为集电极(c)ebc216
216三极管开关电路基极(b)集电极(c)发射极(e)NPN三极管示意图电源(Vcc)NPN三极管开关电路高电平c、e导通低电平c、e不导通ce217
217搭建三极管开关电路cbe218
218控制风扇程序测试程序'{$STAMPBS2}'{$PBASIC2.5}DOHIGH11PAUSE1000LOW11PAUSE1000LOOP219
219任务3:找到光源,打开风扇在任务2的基础上实现搭建判断光源的电路增加光源判断程序220
220任务3程序'{$STAMPBS2}'{$PBASIC2.5}timeMiddleVARWord‘定义变量DOHIGH9‘光源检查PAUSE2RCTIME9,1,timeMiddleIF(timeMiddle<30)THEN’发现光源(参数由具体实验确定)HIGH11PAUSE2000ELSE’没有发现光源LOW11PAUSE2000ENDIFLOOP221
221分析讨论该程序是无限循环程序若蜡烛没有灭,就一直吹吹灭蜡烛后,程序依然循环222