一名韩国男学生因队列监控系统而获得交通部奖的故事

当我读高三时(2016年XNUMX月至XNUMX月),我对学校食堂的情况感到非常恼火。

问题一:排队等候时间过长

我观察到什么问题? 像这样:

一名韩国男学生因队列监控系统而获得交通部奖的故事

分发处聚集了很多学生,他们不得不长时间站立(五到十分钟)。 当然,这是一个普遍的问题,也是一个公平的服务方案:越晚到达,越晚得到服务。 这样你就可以理解为什么你必须等待。

问题二:等待者的不平等条件

但是,当然,这还不是全部;我还必须观察另一个更严重的问题。 如此严重,我最终决定尝试寻找摆脱困境的方法。 高中生(即所有学习成绩至少高一年级的人)和老师无需排队即可领取分发品。 是的,是的,而你作为一个小学生,什么也不能告诉他们。 我们学校对于班级之间的关系有相当严格的政策。

因此,我和我的朋友们,当我们还是新手的时候,首先来到食堂,正要拿食物——然后高中生或老师出现,只是把我们推到一边(有些人比较友善,允许我们留在里面)我们在队列中的位置)。 尽管我们比其他人都早到,但我们还是多等了十五到二十分钟。

我们在午餐时间过得特别糟糕。 白天,几乎每个人都涌向食堂(老师、学生、工作人员),所以对于我们这些小学生来说,午餐从来都不是一件快乐的事情。

问题的常见解决方案

但由于新人别无选择,我们想出了两种方法来降低被抛到队伍后面的风险。 第一个是很早就来到餐厅(也就是说,实际上是在食物开始供应之前)。 第二种是故意打乒乓球或篮球来消磨时间,并且很晚才到达(午餐开始后大约二十分钟)。

在某种程度上它起作用了。 但说实话,没有人急于以最快的速度冲到餐厅去吃东西,或者跟在其他人后面吃完冷掉的剩菜,因为他们是最后的。 我们需要一个解决方案,让我们知道自助餐厅何时不拥挤。

如果有算命先生为我们预测未来,并告诉我们具体什么时候去餐厅,那就太好了,这样我们就不用等太久了。 麻烦的是,每天一切的结果都不一样。 我们不能简单地分析模式并确定最佳点。 我们只有一种方法可以了解餐厅里的情况——步行到达那里,而路径可能有几百米,具体取决于你所在的位置。 因此,如果你来了,看看队伍,回来后继续以同样的精神,直到它变短,你会浪费很多时间。 总的来说,小学班的生活是令人厌恶的,对此也无能为力。

Eureka – 创建食堂监控系统的想法

突然,在下一个学年(2017 年),我对自己说:“如果我们制作一个能够实时显示队列长度(即检测交通拥堵)的系统会怎样?” 如果我成功了,情况会是这样的:小学生只需看一眼手机即可获取有关当前工作量水平的最新数据,并得出关于他们现在去是否有意义的结论。

从本质上讲,该计划通过获取信息消除了不平等。 在它的帮助下,小学生可以自己选择最适合他们做的事情——去排队(如果不是太长的话)或者花更有用的时间,然后再选择更合适的时间。 这个想法让我非常兴奋。

食堂监控系统的设计

2017年XNUMX月,我必须提交一个面向对象编程课程的项目,我提交了这个系统作为我的项目。

一名韩国男学生因队列监控系统而获得交通部奖的故事

初步系统计划(2017年XNUMX月)

设备选型(2017年XNUMX月)

一名韩国男学生因队列监控系统而获得交通部奖的故事

带有上拉电阻的简单触摸开关。 三排五个盾牌的方案,以识别沿三线的队列

我只订购了 1 个薄膜开关、一块基于 ESP8266 的 Wemos DXNUMX 迷你板,以及一些我计划用来连接漆包线的环形夹。

原型设计和开发(2017 年 XNUMX 月)

我从一块面包板开始,在上面组装了一个电路并进行了测试。 我的材料数量有限,因此我将自己限制在具有五个踏板的系统上。

对于我用 C++ 编写的软件,我设定了以下目标:

  1. 连续工作并仅在提供食物期间(早餐、午餐、晚餐、下午点心)发送数据。
  2. 以这样的频率识别自助餐厅的队列/交通情况,然后将数据用于机器学习模型(例如 10 Hz)。
  3. 以高效的方式(数据包大小应该很小)并以较短的时间间隔向服务器发送数据。

为了实现这些目标,我需要执行以下操作:

  1. 使用 RTC(实时时钟)模块持续监控时间并确定自助餐厅何时提供食物。
  2. 采用一种数据压缩的方法,将屏蔽状态记录在一个字符中。 将数据视为五位二进制代码,我将各种值映射为 ASCII 字符,以便它们代表数据元素。
  3. 通过使用 POST 方法发送 HTTP 请求来使用 ThingSpeak(一种用于分析和在线图表的 IoT 工具)。

当然,也存在一些错误。 例如,我不知道 sizeof( ) 运算符返回 char * 对象的值 4,而不是字符串的长度(因为它不是数组,因此编译器不会计算长度)并且非常惊讶为什么我的 HTTP 请求只包含来自所有 URL 的四个字符!

我也没有在 #define 步骤中包含括号,这导致了意外的结果。 好吧,让我们说:

#define _A    2 * 5 
int a = _A / 3;

这里人们会期望 A 等于 3 (10 / 3 = 3),但实际上计算方式不同:2 (2 * 5/ 3 = 2)。

最后,我处理的另一个值得注意的错误是看门狗定时器的重置。 我为这个问题挣扎了很长时间。 后来发现,我试图以错误的方式访问 ESP8266 芯片上的低级注册表(错误地为指向结构的指针输入了 NULL 值)。

一名韩国男学生因队列监控系统而获得交通部奖的故事

我设计和制作的脚盾。 拍摄照片时,他已经经历了五周的践踏,幸存下来

硬件(脚踏板)

为了确保防护罩能够承受食堂的恶劣条件,我对它们提出了以下要求:

  • 防护罩必须足够坚固,能够始终支撑人体重量。
  • 防护罩应该很薄,以免打扰排队的人。
  • 踩踏时必须激活开关。
  • 防护罩必须防水。 餐厅总是潮湿。

为了满足这些要求,我选择了两层设计——激光切割丙烯酸作为底座和顶盖,软木作为保护层。

我在AutoCAD中制作了盾牌布局; 尺寸 – 400 x 400 毫米。

一名韩国男学生因队列监控系统而获得交通部奖的故事

左边是投入生产的设计。 右侧是带有乐高型连接的选项

顺便说一句,我最终放弃了右手设计,因为使用这样的固定系统,结果证明盾牌之间应该有40厘米,这意味着我无法覆盖所需的距离(超过十米)。

一名韩国男学生因队列监控系统而获得交通部奖的故事

一名韩国男学生因队列监控系统而获得交通部奖的故事

为了连接所有开关,我使用了漆包线 - 总共花了 70 多米! 我在每个防护罩的中心放置了一个薄膜开关。 两个夹子从侧槽突出到开关的左侧和右侧。

嗯,为了防水,我使用了电工胶带。 很多电工胶带。

一切顺利!

XNUMX月XNUMX日至XNUMX月XNUMX日期间

一名韩国男学生因队列监控系统而获得交通部奖的故事

系统照片 - 此处可以看到所有五个防护罩。 左侧是电子器件(D1-mini / 蓝牙 / RTC)

XNUMX月XNUMX日早上八点(早餐时间),系统开始采集餐厅当前情况数据。 我简直不敢相信自己的眼睛。 就在两个月前,我穿着睡衣坐在家里草拟总体方案,现在整个系统都在顺利运行……或者没有。

测试期间软件错误

当然,系统中存在很多错误。 这是我记得的。

尝试将客户端连接到 ThingSpeak API 时,程序不会检查可用的 Wi-Fi 点。 为了修复该错误,我添加了一个额外的步骤来检查 Wi-Fi 可用性。

在设置函数中,我反复调用“WiFi.begin”,直到出现连接。 后来我发现连接是由ESP8266固件建立的,而begin函数仅在设置Wi-Fi时使用。 我通过在设置过程中仅调用该函数一次来纠正这种情况。

我发现我创建的命令行界面(旨在设置时间、更改网络设置)在休息时(即早餐、午餐、晚餐和下午茶之外)不起作用。 我还看到,当没有记录发生时,内部循环加速过度,串行数据读取太快。 因此,我设置了一个延迟,以便系统等待其他命令在预期时到达。

向看门狗致敬

哦,还有一件事是关于看门狗定时器的问题 - 我在“现场”条件下的测试阶段精确地解决了这个问题。 毫不夸张地说,这就是我四天来的全部想法。 每次休息(持续十分钟)我都会冲到自助餐厅只是为了尝试新版本的代码。 当发行版开始时,我在地板上坐了一个小时,试图抓住这个错误。 我什至没有想到食物! 感谢 ESP8266 Watchdog 带来的所有好东西!

我是如何计算出 WDT 的

一名韩国男学生因队列监控系统而获得交通部奖的故事

我一直在苦苦挣扎的代码片段

我找到了一个程序,或者更确切地说是 Arduino 的扩展,它可以在发生 Wdt 重置时分析软件的数据结构,访问已编译代码的 ELF 文件(函数和指针之间的关联)。 完成此操作后,结果表明可以通过以下方式消除错误:

一名韩国男学生因队列监控系统而获得交通部奖的故事

该死的! 好吧,谁知道修复实时系统中的错误是如此困难! 然而,我删除了这个错误,结果证明这是一个愚蠢的错误。 由于我缺乏经验,我写了一个 while 循环,其中数组超出了界限。 啊! (index++ 和 ++index 是两个很大的区别)。

一名韩国男学生因队列监控系统而获得交通部奖的故事

测试期间硬件问题

当然,装备,也就是护脚板,还很不理想。 正如您所料,其中一个开关被卡住了。

一名韩国男学生因队列监控系统而获得交通部奖的故事

XNUMX 月 XNUMX 日,午餐时,第三个面板上的开关卡住了

上面我提供了 ThingSpeak 网站上的在线图表的屏幕截图。 正如您所看到的,在 12:25 左右发生了一些事情,之后三号护盾失效了。 结果,队列长度被确定为 3(​​值为 3 * 100),即使实际上它没有到达第三个屏蔽。 解决方法是我添加了更多的填充物(是的,胶带)以给开关更多的空间。

有时,当电线被门卡住时,我的系统实际上被连根拔起。 手推车和包裹通过这扇门进入餐厅,这样它就带着电线一起关闭,并将其从插座中拉出。 在这种情况下,我注意到数据流出现意外故障,并猜测系统已与电源断开。

在整个学校传播有关该系统的信息

正如已经提到的,我使用了 ThingSpeak API,它以图表的形式可视化网站上的数据,非常方便。 一般来说,我基本上只是在学校的Facebook群组中发布了我的日程安排链接(我搜索了这个帖子半个小时,但找不到它 - 很奇怪)。 但我在我的学校社区 Band 上发现了一个帖子,日期为 2017 年 XNUMX 月 XNUMX 日:

一名韩国男学生因队列监控系统而获得交通部奖的故事

一名韩国男学生因队列监控系统而获得交通部奖的故事

反应很疯狂!

我发布这些帖子是为了激发人们对我的项目的兴趣。 然而,即使只是看着它们本身也很有趣。 假设您可以在这里清楚地看到,人数在 6:02 急剧增加,到 6:10 几乎为零。

一名韩国男学生因队列监控系统而获得交通部奖的故事 一名韩国男学生因队列监控系统而获得交通部奖的故事

上面我附上了一些与午餐和下午茶相关的图表。 有趣的是,午餐时间的工作量高峰几乎总是出现在12点25分(队列到达第五盾)。 对于下午点心来说,一大群人通常是不寻常的(队列最多有一板长)。

你知道什么好笑吗? 这个系统仍然存在(https://thingspeak.com/channels/346781)! 我登录之前使用的帐户,看到了这样的内容:

一名韩国男学生因队列监控系统而获得交通部奖的故事

在上图中,我看到XNUMX月XNUMX日的人潮明显减少了。 难怪——那是周日。 在这一天,几乎每个人都会去某个地方,因为大多数情况下只有周日你才能离开校园。 很明显,周末你在食堂里看不到一个活人。

我的项目如何获得韩国教育部一等奖

正如您亲眼所见,我参与这个项目并不是因为我想获得某种奖励或认可。 我只是想用我的技能来解决我在学校面临的长期问题。

然而,我们学校的营养师 O 小姐在计划和开发我的项目时与我关系非常密切,有一天,她问我是否知道一场自助餐厅创意竞赛。 然后我觉得比较餐厅的想法是某种奇怪的想法。 但我看了资料手册,得知项目必须在24月XNUMX日之前提交! 好吧。 我很快敲定了概念、数据和图形,并发送了申请。

改变原本的竞赛想法

顺便说一句,我最终提出的系统与已经实施的系统略有不同。 本质上,我为更大的韩国学校调整了原来的方法(实时测量队列长度)。 对比一下:我们学校有三百名学生,有的学校一个班就有这么多人! 我需要弄清楚如何扩展系统。

因此,我提出了一个更加基于“手动”控制的概念。 现在韩国学校已经推出了全班的膳食计划,严格遵守,所以我建立了一个不同的“信号-响应”类型的框架。 这里的想法是,当你前面的自助餐厅的队伍达到了一定的队伍长度限制(即队伍变短)时,他们会使用墙上的按钮或开关手动向你发送信号。 信号将传输到电视屏幕或通过 LED 灯泡。

我真的很想解决全国所有学校都存在的问题。 当我听到O小姐的故事后,我的决心更加坚定了——我现在就告诉你。 事实证明,在一些大型学校,排队的队伍超出了自助餐厅,延伸到街道上二十到三十米,即使在冬天也是如此,因为没有人能够妥善组织这一过程。 有时,餐厅里会持续几分钟都没有人出现——这也很糟糕。 在学生人数较多的学校,即使不浪费一分钟的用餐时间,工作人员也几乎没有时间为每个人提供服务。 因此,那些最后到达分发地点的人(通常是小学生)根本没有足够的时间吃饭。

因此,尽管我必须匆忙提交申请,但我确实非常仔细地考虑了如何使其适应更广泛的用途。

留言说我中了一等奖!

长话短说,我被邀请来向政府官员展示我的项目。 所以我发挥了我所有的 PowerPoint 才能来展示!

一名韩国男学生因队列监控系统而获得交通部奖的故事

演讲开始(最左边 - 部长)

这是一次有趣的经历——我刚刚想出了一些解决自助餐厅问题的方法,最终以某种方式成为了比赛的获胜者。 即使站在舞台上,我也一直在想:“嗯,我到底在这里做什么?” 但总的来说,这个项目给我带来了很大的收获——我学到了很多关于嵌入式系统的开发和现实生活中项目的实施。 嗯,我当然得到了奖品。

结论

这里有一些讽刺之处:无论我参加多少次有意报名的各种竞赛和科学博览会,都没有什么好处。 然后机会就找到了我并给了我很好的结果。

这让我开始思考激励我承担项目的原因。 我为什么开始工作——为了“获胜”或解决我周围世界的实际问题? 如果第二个动机在你的情况下起作用,我强烈建议你不要放弃这个项目。 通过这种经营方式,您可以一路遇到意想不到的机会,并且不会因为需要获胜而感到压力 - 您的主要动力将是对您的业务的热情。

最重要的是:如果您设法实施一个不错的解决方案,您可以立即在现实世界中尝试它。 就我而言,该平台是一所学校,但随着时间的推移,经验积累,谁知道 - 也许你的应用程序会被整个国家甚至全世界使用。

每次回想起这段经历,我都为自己感到自豪。 我无法解释为什么,但实施该项目的过程给我带来了巨大的乐趣,而且奖品是额外的奖金。 此外,我很高兴能够为同学解决一个每天毁掉他们生活的问题。 有一天,一位学生走过来对我说:“你们的系统非常方便。” 我在第七天堂!
我想即使没有任何奖项,我也会为自己的发展感到自豪。 也许是帮助别人给我带来了如此满足感……总的来说,我喜欢项目。

我希望通过这篇文章实现什么

我希望读完这篇文章后,您会受到启发,去做一些有益于您的社区甚至您自己的事情。 我鼓励你利用你的技能(编程当然是其中之一,但还有其他技能)来改善你周围的现实。 我可以向你保证,你在这个过程中获得的经验是其他任何东西都无法比拟的。

它还可以开辟你意想不到的道路——这就是发生在我身上的事情。 所以,请做你喜欢做的事,在世界上留下你的印记! 一个声音的回声可以震动整个世界,所以相信自己。

以下是一些与该项目相关的链接:

来源: habr.com

添加评论