当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]其理念很简单:孩子们解答数学和拼写题目,每答对一题就能获得“硬币”。完成后,孩子展示自己的得分,父母再将这些硬币兑换成现金或其他奖励。交易完成后,设备会重置,游戏重新开始。题目可根据孩子的学习水平进行定制,数量充足,足以让他们持续参与一段时间。在数学方面,支持加法、减法、乘法和除法题目;拼写测试则涵盖希腊语和英语,所用词典存储在microSD卡中。

你听说过德拉克马吗?drachmath并不是那种带有…… Lisp语言的古希腊货币,而是一款让孩子在学习数学和拼写的同时赚取零花钱的游戏。

其理念很简单:孩子们解答数学和拼写题目,每答对一题就能获得“硬币”。完成后,孩子展示自己的得分,父母再将这些硬币兑换成现金或其他奖励。交易完成后,设备会重置,游戏重新开始。题目可根据孩子的学习水平进行定制,数量充足,足以让他们持续参与一段时间。在数学方面,支持加法、减法、乘法和除法题目;拼写测试则涵盖希腊语和英语,所用词典存储在microSD卡中。

drachmath的灵感源于我童年时的经历。20世纪90年代,我父亲曾用QBasic为我制作过类似的游戏。每答对一题,我就能获得一个德拉克马。虽然当时我的动机是买糖果,但这个游戏让学习变得有趣,并激励我坚持练习数学和拼写。

30年后的今天,我想创建一个类似的游戏,但根据现代科技以及儿童与技术互动的方式进行了调整。具体来说,我不希望增加孩子们的屏幕使用时间。因此,drachmath 并不是一款可以在手机或电脑上玩的应用程序。

drachmath 运行在 Seeed Studio 的 Wio Terminal 上。Wio Terminal 是一种小型便携设备,配有 TFT 屏幕、按钮和连接功能,可以编程运行各种应用。理论上,drachmath 也可以在更多兼容 Arduino 的设备上运行,但你需要先对代码进行一些小的修改。

单用途设备(如 Wio Terminal)“不能”用于多种用途。至少在孩子们学会自行编程 Wio Terminal 之前是如此,而这个想法本身并不差。我理解有人可能会认为它仍然涉及屏幕。虽然从技术上讲这是正确的,但我认为有必要区分与游戏和社交媒体相关的屏幕,以及作为工具所使用的具体设备和实现目标(即赚取零花钱)的手段。drachmath 不会有任何通知或干扰。

软件

从技术角度来说,drachmath 是一个基于 Arduino(C++)的程序,专为 Wio Terminal 设计运行。它不依赖于定制硬件或 Wio Terminal 的微控制器,因此只需稍作修改,便可移植到其他兼容 Arduino 的设备上。

drachmath 的主要软件组件包括:

- drachmath.ino:游戏的流程逻辑,负责整合游戏的各种功能模块。

- drachmath.hpp:与测验相关的逻辑代码以及大部分跨平台通用代码。

Seeed Studio 的 TFT_eSPI 库:用于驱动 Wio Terminal 的 TFT 显示屏。

- 一个小型补丁,用于实现平滑字体显示:确保希腊字母能够正确显示。您需要将此补丁应用到本地安装的 TFT_eSPI 库中。

•Seeed Studio 的文件系统库:用于读写 SD 卡。

•Seeed Studio 的 SFUD 库:用于读写 SD 卡。

虽然 microSD 卡本身不是软件,但为了使拼写测验正常运行,必须在其中包含以下文件:

- 英语词典

- 希腊语词典

- 希腊语字体

将这些文件放置在格式化为 FAT32 的 microSD 卡根目录下即可正常使用。当然,你可以使用自己的词典和字体,但若想避免修改代码,则格式必须保持一致。

硬件

硬件方面,如果按照我的设置,需要三个组件。附带的链接如下:

Wio终端:设备的“大脑”,运行drachmath程序,并提供屏幕和按钮供用户交互。内置多种传感器,如麦克风、蜂鸣器、IMU(惯性测量单元)、Wi-Fi和蓝牙连接等。

Wio终端机箱电池:可让drachmath在任何地方运行,无需电源插座。内置BQ27441电量计,可在屏幕上显示电池电量。

一张microSD卡:格式为FAT32,用于拼写测验以及持久保存设置。几乎任何大小的存储卡均可使用。如果你只想玩数学测验且不关心保存设置,则无需此卡。

主菜单

主菜单是用户开机后首先看到的内容。用户可通过Wio终端的五向摇杆选择不同的选项。您可以通过按下摇杆向下或按设备顶部最左侧的按钮(Sel)来选择选项。根据设置中当前选中的拼写测验,用户在菜单的第二个条目中将看到“希腊语测验”或“英语测验”。分数虽然不属于主菜单的一部分,但始终显示在屏幕右上角。在其下方,如果使用的是包含BQ27441电量表的Wio终端机箱电池,您还可以看到电池指示灯。

数学测验

数学测验是主菜单中的首选项目,巧合的是也是我最早实现的测验之一。用户会看到一个数学问题和一个数字键盘,用于输入答案。支持加法、减法、乘法和除法运算。目前,答案始终为两个数之间的单一运算结果。所有除法都是整除的,即结果总是整数。

要回答测验,请使用摇杆选择一个数字,然后按下摇杆进入。您最多可以输入4位数字作为答案。如果出错,可按设备顶部的中间按钮(屏幕显示为“Del”)删除最后一个数字。完成后,按下最左侧的按钮(Sel)提交答案。退出测验时,按下右侧按钮(Esc),即可返回主菜单。

当前得分将显示在右上角,紧邻硬币图标,并位于电池指示器上方(若使用Wio终端机箱电池)。每答对一题,得分加1分。目前错误答案不扣分,但未来可能调整或可通过设置进行配置。退出测验后得分不会重置,会一直保留直到设备被重置或关闭电源。

您可在设置中选择问题难度,具体包括:问题中使用的操作数范围、结果范围以及所用运算类型(加法、减法、乘法和除法)。默认情况下,操作数和结果的最大值均为10,且仅支持加法运算,因此你可能希望增加一些挑战性。

拼写测验(希腊语和英语)

拼写测验是主菜单中的第二个选项,提供希腊语和英语两种语言,默认为希腊语。从代码实现的角度来看,这是最“复杂”的部分,它采用两种不同的方式生成题目。在两个测验中,用户都会看到一个单词,其中有一些字母缺失,但无法明显判断缺少多少个字母。这是有意为之的,因为如果直接显示缺失字母的数量,可能会暴露答案,尤其是在希腊语中。两个测验都使用存储在microSD卡中的词典来生成问题。换句话说,与数学测验不同,拼写测验需要使用microSD卡才能运行。

拼写测验的操作方式与数学测验类似。使用操纵杆来导航键盘并选择字母,Sel键用于输入答案,Del键用于删除最后一个字母。退出测验并返回主菜单时,按下Esc键即可。希腊语测验最多允许2个字母缺失,而英语测验最多允许4个。

希腊语测验使用存储在microSD卡上greek_words.txt文件中的词典。生成问题比英语测验要容易得多。这是因为希腊语中有大量同音词,即发音相同但字母或字母组合(双元音)不同的情况。每当一个希腊单词中出现“ iota”音(例如“see”中的“ee”),就可能有以下几种合理的拼写方式:ι、η、ει、οι、υ。例如,我的名字Δημήτρης包含三个“iota”音,这些音可以以五种不同方式拼写,但在现代希腊语中发音仍保持一致。此外,与英语不同,大多数情况下,很少有希腊语单词发音相同却拼写不同的情况。这意味着,通常只需给出一个单词而不提供上下文,用户就能正确选择正确的拼写。

一旦从词典中选出一个单词,并确定需要删除的字母后,系统会向用户展示一组可能的语音替代字母键盘。这些替代字母中的任意一个都能产生相同的单词发音,但只有一个才是正确的。以下枚举展示了希腊语测验中生成的不同问题(及替代选项)示例:

希腊语拼写问题主要集中在元音和双元音上,因为它们是造成混淆和错误的最大来源。这意味着你永远不应该遇到字母“α”缺失的情况,因为它的拼写只有一种正确方式。大多数辅音也是如此,但上面提到的希腊语同音词组(GreekHomophoneGroup)中的例外除外。

制作英语测验则完全是另一回事。由于英语拼写比我最初预想的困难得多,而我又不是语言学家,因此我不得不“咨询”一位法学博士来设计英语拼写测验。尽管英语有很多同音词,但如果没有借助语音词典,就很难准确识别它们。简单来说(不深入细节,还记得我不是语言学家吗?),同一个字母在不同单词中发音可能不同。此外,同一个音素在不同单词中也可能被拼写成不同的形式。这使得我们难以像希腊语测验那样采用相同的方法——即能即时生成一组可能的替代选项。另外,还有许多英语单词听起来几乎一样,但拼写却不同,例如“meat”和“meet”。这意味着,即使我们列出了一系列备选方案,也可能存在多个正确答案,就像上面肉和马的例子一样。换句话说,我们面临两个问题:(a)为缺失的字母生成合理的一系列替代选项;(b)消除歧义,确保只有一个正确答案。为了应对在不同问题上呈现不同键盘这一复杂难题,我们将整个字母表以键盘的形式呈现给用户。至于歧义问题,我们提供一个包含缺失字母的问题词的句子。这意味着英语词典(english_words.txt)不仅包含单词本身,还包含使用该问题词的完整句子。

在遇到问题时,我们使用词尾不发音的结尾以及出现在单词开头、中间或末尾的复杂字母组合。通过以下片段,你可以大致了解候选人的问题所在:

设置

设置可通过主菜单访问,主要用于调整测验题目的难度。具体来说,对于数学测验,您可以更改运算数的范围和结果,以及题目中使用的不同运算次数。对于拼写测验,您可以选择单词的长度,并可设定拼写测验的语言,以及是否播放提示音(例如正确或错误时的提示音)。如果插入了microSD卡,设置将被持久保存,下次设备开机时仍保留。最后但同样重要的是,您可以通过在microSD卡根目录下放置名为lock_settings.txt的文件来锁定设置。该文件的第一行应为1以锁定设置,或任意其他内容以保持解锁状态。通过这种方式,您可以确保孩子在合适难度水平上进行练习。

成就

在统计页面中,您可以查看自己的成就。一个复古风格的动画和音效会显示您的当前得分,孩子们通常很喜欢这部分内容。每次测验都会显示正确答案与总尝试次数,这样您就能清楚了解孩子表现如何。如前所述,目前错误尝试不会被扣分,但如果您认为这一点可以设置为可选项,请告诉我。

结论

这是一个有趣的夏季项目,让我有机会创造出一些实用的东西,同时尝试使用C++进行实验。特别是,我得以对代码的某些部分进行过度设计,使其更具“通用性”和“可复用性”,尽管我清楚地知道,这些代码很可能不会被用于其他项目或平台上。不言而喻,我对图形用户界面框架有了新的认识,尤其是嵌入式框架,以及它们背后所涉及的大量架构设计工作。最终,代码中许多部分采用了高度模板化的结构,并避免了标准库,以便让项目代码更容易移植到资源受限的其他Arduino兼容设备上。话虽如此,Wio Terminal似乎支持了相当多的STL功能,但默认配置却使用了C++14标准,这确实令人感到困扰。如果未来真能支持C++17或更高版本的标准,我也不会感到意外。不过,我仍希望保持简单易复现,方便任何安装了标准Arduino IDE的用户使用。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭