content:
过程之记录
最终的程序
对任务的反思
直接看反思吧,那里有内容
11.4 接收到任务:让在弯曲的黑线上走。能用的工具是两个光敏电阻
想到第一个解决方案:两个感应器,哪边收到的值大,则转向哪边
一个争论:感应器放车前还是放车下
碧蓝的小刺猬提出一个可能的问题:阴影的干扰会让感应器不准确
我提出一个可能的问题:车底下的光线不足,无法使感应器区分黑线与白瓷砖(当天没有表达清楚,现在也没有表达清楚)
(更易理解的说法是:感应器感应的是光线的强度。用感应器分辨黑线的理论依据是,感应器感受到是天花板上灯对光线。这些光线投射到地面,反射到感应器上。黑线会吸收掉光,所以感应器面对黑线时,感受到的光会减少。——————但是感应器在车底下时,没有多少光会打到车底下的地板,所以就没有多少光线会被感应器接收。所以有没有黑线不会引起很大的数值变化)
(我的想法并不正确,即使灯在车底下,是否有黑线依然会造成数值的不同。)
我归纳出三个解决方案,分别是:感应器放车前;感应器放车底;感应器放车前而且用纸箱盖住,用其他光源提供光线
11.6确定计划:使用方法三之变体:感应器放车前,电工胶带遮盖光线,使用LED灯补光”
今日几位组员需要复习考试,我和碧蓝的小刺猬在做机器人
制作途中数次出现感应器没有读数,原因分别是:焊接松动(焊接方法问题),代码错误(没有及时修改代码),导线失效(导线原本就是坏的)
最后去记录数据,但是数据次次都不一样(现在看,是因为外界光线的干扰)
碧蓝的小刺猬提出新的程序设计思路:放弃之前的相对大小法。
遇到机器人无法连接电脑的问题。至今不知道当时是什么情况
11.8准备去F204搞机器人,但是没有开门。
写完新的程序(用的是碧蓝的小刺猬的思路):感应数值大于某个数,则认为这个感应器遇到了黑线。
引入了rightsenser和leftseneser两个变量,他们的作用是减少修改阈值的麻烦。每次修改感应器阈值,只需要改一个数字就可以了
11.9发现在在黑线的不同位置,需要的阈值仍然不同。由此了解到,外界光线在变化,而且它的影响很大。而且,某个区域,感应器在空白区域测出的数值比在另一个区域感应器在黑线上时得到的数值还要大。
于是,认为遮蔽做的仍然不够,于是增加遮蔽物(阳伞和胶带)
依然无法解决光线的影响。依然出现问题:某个区域,感应器在空白区域测出的数值比在另一个区域感应器在黑线上时得到的数值还要大。
认为靠遮光,无法解决外界光线的干扰
于是改变思路,添加光源。
使用手机作为光源,结果很好,一举成功
最终程序
' {$STAMP BS2}
' {$PBASIC 2.5}
PULSECOUNT VAR Word
tleft VAR Word
tright VAR Word
leftsenser VAR Bit
rightsenser VAR Bit
DO
HIGH 0
HIGH 3
PAUSE 3
RCTIME 3, 1, tright
HIGH 9
PAUSE 3
RCTIME 9, 1, tleft
DEBUG HOME, "left=", DEC5 tleft,
"right=", DEC5 tright
IF tleft>55 THEN 'leftsener=1 means that left senser
sense black
leftsenser=1
HIGH
15 'led light up
means that senser feel black
ELSE
leftsenser=0 'leftsenser=0 means left senser
sense white
LOW
15
ENDIF
IF tright>90 THEN
rightsenser=1
HIGH
11
ELSE
rightsenser=0
LOW
11
ENDIF
IF leftsenser=1 AND rightsenser=1 THEN
GOSUB Turn_Stop
ELSEIF leftsenser=0 AND rightsenser=1 THEN
GOSUB TURN_RIGHT
ELSEIF leftsenser=0 AND rightsenser=0 THEN
GOSUB FORWARD_PULSE:
ELSE
GOSUB TURN_LEFT
ENDIF
LOOP
FORWARD_PULSE:
FOR
PULSECOUNT = 0 TO 50
PULSOUT 13,650
PULSOUT 12,800
NEXT
RETURN
TURN_LEFT:
FOR
PULSECOUNT = 0 TO 5
PULSOUT 13, 650
PULSOUT 12, 750
NEXT
RETURN
TURN_RIGHT:
FOR
PULSECOUNT =0 TO 5
PULSOUT 13, 750
PULSOUT 12, 850
NEXT
RETURN
Turn_Stop:
PULSOUT 13, 750
PULSOUT 12, 750
PAUSE 20
RETURN
反思:
做项目需要有人充当这些角色:
Criticize:找出当前计划中存在的问题
Creative:找出更好的解决方案——减少工作量的方案,减少误差的方案……
解释现象:出现超出预期的现象时,解释之,并提出方法处理之
观全局的人:通观全局,知道每一步需要做什么。从而使组织工作方向准确,也不做多余的事情
(这些角色可以由一人担任,也可以由多人担任)
(有这些角色之后,项目有效率的多,也能规避不少错误,)
项目中的分工,最好不要几个人共同做一件事情。因为,大家一起做的时候,表达想法和改变想法都变的很费时间。但是项目变幻莫测,随着项目的进展,最佳的方法也在不停的变换。群体改变想法并得出新方案的的速度远远慢于个体做这件事情的速度。另外,群体一起思考,因为表达速度的限制,无法在细节上kqdxy共识。在整体上也不能完全kqdxy共识。所以说群体在一起思考方案,常常是得出一个首尾不相顾的方案的。因此,让群体做一件事情,要么会使结果变坏,要么会花费更多的时间,而且很难得出内容契合的方案的
群体能提意见,但不能做周密思考
更好的方法,应该是群体头脑风暴出方向,然后由一个人写出完整计划。然后群体共同审阅这个计划并提出修改意见。之后这个人修改计划,如此往复,做出计划
计划包含了目标,kqdxy目标的方式,还有时间表
然后在组内分配任务
每个人都是独立面对一个子任务,团队要求了这个子任务需要做到什么,怎么设计是这个组员的事情。当然,如果群体能在一起头脑风暴,给这个组员提建议,就更好了。
通过这个方式,这个组员能充分发挥自己的创造力,也能做到周密地处理他要处理的子项目
项目目标的kqdxy,依赖于子目标的kqdxy。项目的失败,也因为子目标的失败。我们需要确认每个子目标都kqdxy了,再将子目标整合,kqdxy完整的目标。如果不检测每个子目标是否kqdxy,就会在整合后遇到各种问题。找到这些问题还特别费时间。所以最佳的做法是,检查,验收,再整合
做到方便调整也是很重要的。因为这能省出不少时间。kqdxy的方法是
模块化,整体是可以拆分成零件的,而不是一张内含各种牵制的大网
如果经常需要调整一个数值而且要调整很多地方,把这个数值变成一个变量,以后只要调整这个变量就可以了
Be criticle,
不要忽视误差的存在,认真考虑有什么干扰。
认真考虑方法的可行性——考虑这个方法可能遇到的问题。先确认这个问题不存在,再使用这个方法