所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
传情达意,有我二哈!
szjuliet szjuliet 2020-03-25 18:04:18
4
6
简单


回国前带着女儿在澳洲大洋路自驾,景色确实漂亮,但我一向不喜欢拍照,所以沿途没怎么拍。直到来到Cape Otway Lightstation奥特威角灯塔,里面的电报站Telegraph Station有一个发送摩尔斯电码的装置展示给游人看,旁边展示了两张纸,一张是摩尔斯电码表,一张是发送装置发送文本的摩尔斯电码,结合这两张纸,游人就可以解码发送装置正在发送的内容。我在那里驻足了很久,试着对文本进行解码,听着嘀嗒嘀嗒的声音觉得好神奇。

自知道进入了第三轮,脑子里就在想着做些啥,各种想法跳来跳去,一直都没能成型。后来终于有了一个让自己兴奋的想法,然后沿着这个想法继续迭代,最后有了这个作品。这个作品也是受了上面那个摩尔斯电码启发而来。

整个作品没有装饰,基本裸奔。但是我们二哈低调朴实有内涵啊,技能爆表!!

本帖写的比较详(luo)细(suo),记录了整个项目的制作过程,包括素材的处理、程序调试、问题排除等,是打算后面可以作为一个完整的案例让学生学习。

projectImage

实现功能:

1. 给掌控板A上的二哈看一些图片,不同的物体让二哈有不同的反应,根据反应在掌控板A的屏幕上显示一组二维码图片,每个二维码代表一个字母;

2. 掌控板B识别二维码,转换为对应的字母,播放该字母的摩尔斯电码(Morse Code)音效,掌控板B的屏幕根据摩尔斯电码的频率闪烁;

3. 二哈心里到底想的啥?主人根据摩尔斯电码“听懂”了二哈想表达的话。

材料清单 材料清单
2x
掌控板
2x
二哈识图传感器
1x
无源音箱小喇叭 (8Ω3W)
1x
Gravity: UART MP3语音模块

手上有两个二哈,一个是这次的参赛器材,还有一个是去年10月份粒子小姐姐给我的,我拿到后事情太多,一直放在那儿吃灰,太对不起粒子了。我看了一下固件版本是0.1.2,而现在的是0.4.6,差的很远啊。

步骤1 步骤1
准备摩斯电码音频文件
projectImage

到网站https://morsecode.world/international/translator.html生成26个英文字母的摩斯代码

projectImage

生成摩斯代码及声音文件,但是下载的声音文件只包括3个摩斯代码的长度,可以采用Camtasia或Win10自带的Voice Recorder录制内置声音后再进行分割,录制的格式为m4a。


projectImage

在掌控板中测试MP3模块时发现,mp3模块不能播放m4a格式的声音文件,需要对音频文件的格式进行转换。

使用goldwave将每个字母的摩斯电码音频分割。

projectImage

然后另存为Gravity: UART MP3语音模块支持的播放格式,mp3或wav都可以。将26个字母摩斯电码音频文件保存到mp3模块中。

projectImage

如果只是播放字母的摩尔斯码的音效,使用上述分离出来的每个字母的音频就可以了。但是我还想实现在播放音频的时候掌控板能够随电码闪烁,这时需要将嘀嗒拆开来播放,达到音效与视觉同步的效果。

projectImage

分割嘀嗒声

projectImage

(注:帖子是边做边写。在后面的测试中发现了更简单的实现方法。直接播放字母音频而无需分割)

步骤2 步骤2
学习及训练

1. 二哈A学习识别3个物体(图片)


分别是人、猫、哈士奇。 

 101斑点狗里的邪恶的女巫,二哈看到她有什么反应??

(有多少个小伙伴看到这个女巫会有童年阴影)

projectImage

看到漂亮的同类呢?

projectImage

看到可爱的猫猫,二哈想说些什么?

projectImage

测试时发现女巫身上的狗狗会对二哈学习造成干扰,因此做了处理:

projectImage

2. 二哈B识别标签(二维码)

二哈B识别35张二维码图片,其中1~26张代表26个英文字母,第27张代表空格,用于分隔单词,第28张代表over,用于一句话结束标志。其余图片不使用(备用)。

https://mindplus.dfrobot.com.cn/huskylens#target_4中的图片包含了35张二维码,二哈可以在这张图片上直接学习和训练所有的二维码,识别效果很好。

projectImage
projectImage
步骤3 步骤3
在掌控板中检测学习结果

下面的程序并不是项目中用的,但是通过程序可以快速检测各个环节,方便后面调试程序。

涉及到26个字母,因此需要检测两个环节,一个是在程序中显示的26张二维码图片是否正确,图片有没有放置错误(重放,错放),另外就是二哈学习的是否正确。使用下面的程序对以上环节进行快速检测。

将掌控板所有按钮和触摸用上,方便快速检测,并可重复检测有疑问的地方。

projectImage

当然直接显示图片也可以,但是显示图片的代码块无法显示图片的名字,因此使用下面的函数来清楚呈现显示的二维码的名称,方便编程调用。

projectImage

将程序烧录到掌控板中,测试结果很理想,掌控板显示的图片顺序与二哈识别ID完全一致,测试一次通过。

测试完成后,将函数名称由数字改为字母,方便直观调用。函数space用于单词之间的分隔,函数over用于一句话的结束标志。

projectImage
步骤4 步骤4
程序功能分解

掌控板A实现功能:

1. 二哈识别图片(已学习训练);

2. 不同图片产生不同的反馈,呈现一组不同的二维码。

掌控板B实现功能:

1. 二哈识别二维码(已学习训练);

2. 求出对应的摩斯电码;

3. 播放摩斯电码音效;

4. 屏幕同步闪烁

为了尽可能减少重复性工作,少走弯路。我们用最小设计原则来进行开发。

步骤5 步骤5
掌控板A呈现二维码

我们先实现最简单的SOS呈现。等待时间在后面和掌控板B进行互动时需要调试。这里我们先让二维码呈现到屏幕上。使用全白的屏幕表现一个单词结束,方便观察。

projectImage
步骤6 步骤6
掌控板B生成摩斯电码列表

在掌控板B中,需要将26个英文字母及其对应的摩斯电码分别保存到对应列表中,这样可以和识别的二维码对应。

将26个字母的摩斯电码保存到列表中。

你是用的下面的这种手动添加的方法?

projectImage

还是使用计算机程序来自动帮我们解决?

我们可以到网站上生成26个英文字母的摩尔电码:

为了方便分割,字母之间用空格分隔,摩斯电码对应的分隔为“ / ”。 

 英文字母:a b c d e f g h i j k l m n o p q r s t u v w x y z 

 摩斯电码:.- / -... / -.-. / -.. / . / ..-. / --. / .... / .. / .--- / -.- / .-.. / -- / -. / --- / .--. / --.- / .-. / ... / - / ..- / ...- / .-- / -..- / -.-- / --..

projectImage

对于重复性的工作,用复制粘贴既低效又容易出错。 使用程序来自动分割。为了测试方便,我们先在实时模式下完成,结果一目了然。测试无误后可以转到上传模式下重新编写程序。 

(发现Scratch中没有查找字符出现位置的代码块,也没有截取字符串片段的代码块。Mind+这两个代码块真的太实用了!)

projectImage
步骤7 步骤7
掌控板B声光同步

开始时的想法是将摩尔电码的每一个嘀嗒分离,播放嘀嗒的同时屏幕闪烁,以达到声光同步的效果。使用下面的程序来实现:

projectImage

程序上传编译失败,错误原因是:ISO C++ forbids comparison between pointer and integer。C++禁止指针与整数进行比较。

将“变量的第i个字符”先赋值给一个变量,再将变量与字符进行比较编译才通过。

projectImage

后面程序进行了修改,使用播放字母的摩斯电码,也参照上面的程序来避免编译错误。

在测试中发现,如果摩斯电码的每一个字符都要单独播放,需要反复调试识别到二维码的等待时间及摩斯电码屏闪时间,实在太浪费时间。

projectImage

因此对程序进行了优化。摩斯电码无需每个字符单独播放,只需实现屏幕闪烁效果:

projectImage
步骤8 步骤8
掌控板互动测试

在进行程序设计的时候不要等所有代码编写完成再测试,而是一个功能一个功能的突破。现在需要测试二哈间的互动:二哈A识别物体,呈现二维码,二哈B识别二维码,转换摩斯电码并播放音效,同时屏幕随节奏闪烁。

我们使用简单的摩斯电码SOS来测试,这样比较容易调试。这段电码只有2个字母,因此只需要调整两字母的效果。

掌控板A测试程序:

projectImage

掌控板B测试程序:

projectImage

测试最重要的是部分是声光同步,因此时间等待需要细致调试。

下面的视频演示了二哈间的互动,为了调试方便,设置了识别任何一张图片都完成SOS的摩斯电码。视频中识别的图片是小猫。

步骤9 步骤9
完成程序剩余部分

掌控板B基本没有修改,只需要将其余字母的摩斯电码播放代码添加进去就可以了。

projectImage

掌控板A也比较简单,每张图片的反馈以单词为单元逐个测试,测试成功后继续下一个单词。句子中的所有单词全部测试成功后将代码连接到一起就完成了该图片的程序。

注意二哈A每个二维码的延时时间与其电码长度有关,可以对照下面的图来设置大致的延时。

projectImage
projectImage
projectImage
步骤10 步骤10
终极测试

所有程序写完开始测试。测试过程简直是意想不到的顺利,堪称完美!图片识别完美,生成二维码完美,识别二维码完美,摩斯电码声光效果更是完美!!

在前面测试图片的时候还经常会出现狗狗和猫猫的图都会识别出猫狗两种动物,人物也是识别的不稳定。已经做好了视频拍N次的准备。在测试前,为了平板能够横向显示,我把图片都转了向,没想到测试时识别特别稳定。整个测试一次成功,视频也只拍了一次!开心的简直要跳起来哈哈!!

这段时间调试程序到很晚,夜深人静的时候听着嘀嗒嘀嗒的电码声,感觉自己像《永不消逝的电波》里的李侠,颇有一种悲壮感。

为了增加趣味性,二哈发出的摩尔电码与帖子上显示的不同,大家猜猜,二哈发的三个摩尔电码是什么呢?

步骤11 步骤11
反思

1. 做复杂的项目一定要对任务进行分解;

2. 要准备必要的备件。

上周五准备进行SOS互动测试,前面一直正常的mp3各种状况百出。直接播放第15和第19首不对,播放第1首a实际播放的是第26首z,播放第2首b播放的是第1首a......后来mp3干脆就不出声了。然后换线,换板子,换引脚,仍然不出声,至此确认mp3应该坏了。虽然U盘功能还是可以用,但是mp3的灯已经不会亮了。在家里又没有备件,又是周五晚上,急也没办法。

好在顺丰还是很快的,显示周一晚上8点收的件,凌晨就到深圳了。周二上午收到立马开始测试。结果发现还是没有声音,那就不应该是mp3的问题了。然后把所有能用的设备逐一再试。终于发现手头两个盛思的掌控板引脚有问题,还有一个扩展板的UART也有问题。可能是国际航空,再加上行李托运各种颠簸导致的,损失惨重!最后只能矮子里面挑高个子。把能用的凑到一起,总算解决了问题。如果mp3有备件,就可以早点发现板子的问题了,白白浪费了三天时间。

出国一趟损失惨重,两个掌控板都脱落了一个按钮,还有一个新的无法刷固件,一个扩展板有问题。

问一下大家,如果按钮脱落有什么好办法修复?

projectImage

完成第二轮的时候在国外,写了“武汉加油!中国加油!”。没想到国内疫情控制的这么快,反而当时安全的国外现在各种沦陷。希望女儿在国外一切平安。

大家一起加油,希望疫情早日结束!

参考资料:

Morse Code Translator

https://www.radio-amater.rs/morsecodegenerator/

Makelog作者原创文章,未经授权禁止转载。
4
6
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]