牟晓东
在中小学阶段的开源硬件编程创意智造中,有时会用到一种叫作“丝杆”(微型)的输出设备,常见的“滚珠丝杆”能够将圆周运动转化为直线运动,也就是依靠设定内部的微型步进电机精准的正转或反转的圈数,最终带动丝杆上的“滑台”产生直线位移。利用丝杆的这一特征,我们可以在树莓派中使用图形化编程进行各种创意智造,开发出一些有趣好玩儿的创客项目。
实验器材包括树莓派3B+和古德微扩展板各一块,微型滚珠丝杆(包括电机驱动板)一个,按钮一个,杜邦线若干,国旗徽章一枚。
丝杆的内部步进电机有四根引线,首先将它们分别连接至电机驱动板的L1、L2、L3和L4端,再将电机驱动板底部标注有5V、GND和VCC的引脚通过杜邦线分别连接至扩展板左下角的5V、GND和3.3V引脚,将电机驱动板中间的IN1、IN2、IN3和IN4引脚通过杜邦线分别连接至扩展板的5号、6号、12号和16号引脚的正极;接着,将按钮插入扩展板的25号引脚,注意VCC、OUT和GND同样要一一对应;最后,借助于热熔胶枪将国旗徽章粘贴于丝杆的滑台上,并且给树莓派通電,启动操作系统(如图1)。
虽然丝杆的连接方式较为复杂,但使用“积木”进行图形化编程来控制却非常简单。在浏览器中访问古德微机器人网站并进行账号登录后,首先,从“智能硬件”-“常用”区域将丝杆的初始化模块语句拖至编程区,即“设置步进电机GPIO口分别为‘步进电机输入端”,对应的GPIO接口分别是5、6、12和16;接着,建立一个“重复当‘真”的循环结构,嵌套一个“如果…执行…”的选择结构,判断条件为“获取25号按钮检测结果”,当检测到按钮有“被按下”的动作时,执行下面的模块语句:
先是在LOG调试信息区输出调试信息:“奏国歌,升国旗!”然后是一个重复执行600次的循环,每次均控制丝杆的步进电机以“慢速”的速度正转1圈、等待0.038秒后再进入下一次循环。这是因为国歌的正常播放时长是46秒,经测试——丝杆的步进电机如果不加等待时间进行“慢速”正转600圈的话,大约是23秒钟,对应滑台从预设的“地面”到预设的“旗杆顶部”(不要设置为丝杆的最顶端以防损坏),冗余的23秒钟(46-23)就要在600次循环中进行均匀拆解来“消耗”掉,才能整体实现精准升旗的效果。循环结束后,LOG调试信息区输出“礼毕!”,再加一个“等待0.001秒”的按钮“消抖”时间等待模块即可(如图2)。
将程序保存为“按钮控制丝杆精准升旗”后点击“运行”按钮,将丝杆竖直后按一次按钮,就会实现在奏国歌的46秒时间内精准升旗的效果(如图3)。
此时还有个小“问题”,那就是丝杆控制滑台带动国旗完成升旗后,如何复位以进行下一次的升旗呢?非常简单,可以在程序中的整个“重复当‘真”循环结构上点击右键,选择“禁用块”(变灰);然后,在后面添加一条“控制步进电机以‘快速的速度反转‘600圈”的模块语句,执行一次程序即可控制滑台复位。
同样,程序中也可以使用“多线程”方式来调用音乐播放模块语句——演奏《义勇军进行曲》,实现“奏国歌”与“升国旗”同步进行的效果。
实验器材包括树莓派3B+和古德微扩展板各一块,丝杆一个,USB接口麦克风一个,音箱一个,杜邦线若干,硬纸片一张(模拟推拉门)。
丝杆的连接方法与案例1完全相同,再将麦克风插入树莓派的一个USB接口中;然后,将音箱插入树莓派的音频输出插孔,再用热熔胶枪将带有“我是‘推拉门,声控噢!”标记的硬纸片粘贴于丝杆的滑台上,给树莓派通电,启动操作系统(如图4)。
由于用到了麦克风要进行语音唤醒和识别,因此先要从“人工智能”-“语音识别”中将“小度小度关键词语音唤醒,请创建一个Wakeup新函数”功能模块拖至中央编程区;然后,仍然是对丝杆的步进电机进行初始化;接着,建立一个名为Wakeup的函数,用来响应被语音唤醒时触发的一系列动作:
先是播放“叮”的一声(在树莓派SD卡中:/home/pi/temp/ding.mp3)作为唤醒回应,并且在LOG调试信息区输出调试信息:“Hello”;然后,建立变量“语音输入”,为其赋值为“将3秒的语音输入保存到‘/home/pi/temp/record.mp3”,再建立变量“语音文字”,赋值为“把语音‘语音输入转换为文字”,实现将用户的语音指令转换成文字信息的功能;接着,建立一个三分支选择结构,前两个分支的判断条件类似——“语音文字”中是否包含有“开门”(或“关门”)的关键字,条件成立,则在LOG调试信息区输出该关键字,并且控制丝杆的步进电机以“中速”(可自行设置“快速”或“慢速”等)正转或反转600圈,正转对应开门、反转对应关门;第三个分支用来匹配用户的语音指令中未包含“开门”或“关门”时的情况,则语音提醒用户“请发正确的指令!”(包括LOG调试信息区也同步显示)。
最后,加一个“等待0.1秒”的功能模块,作用是防止占用过多系统资源而“死机”(如图5)。
将程序保存为“丝杆‘声控推拉门”后点击“运行”按钮,开始对麦克风发出语音指令进行测试(注意每次语音指令的唤醒词必须是“小度小度”):当说“小度小度,关门”时,丝杆会将推拉门缓缓关闭;当说“小度小度,开门”时,推拉门则会缓缓打开;当说“小度小度,就这样吧”(或者其他不包括“开门”“关门”的语音指令)时,音箱会发出“请发正确的指令”的语音提醒(如图6)。
同时,在LOG调试信息区也会输出对应的文字信息,提醒用户程序的运行进程。需要特别注意的是,如果推拉门已经处于“开门”的状态时,就不要发出“小度小度,开门”的重复语音指令,否则丝杆的步进电机又会做出“响应”——继续“开门”,但无法控制滑块推拉门移动,反之亦然。