一名韩国学生的故事得到了部委的队列监控系统奖

当我在高中上小学的时候(2016年3月至2016年12月),我对我们学校食堂的情况感到非常恼火。

问题一:等待队列太长

我发现什么问题? 这是一个:



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

问题二:等待条件不平等

但是,当然,这还不是全部;我不得不观察另一个更严重的问题。 如此严重,以至于我最终决定设法摆脱困境。 高中生(即,至少学习一年级以上的每个人)和老师无需排队就可以去分配。 是的,是的,作为一名小学生,您什么也不能告诉他们。 我们学校对班级之间的关系有相当严格的政策。

因此,我和我刚来的时候,我的朋友们刚开始来饭厅吃东西-然后高中生或老师出现了,只是把我们赶走了(一些更友善的人允许我们留在队列中)。 我们不得不再等15至20分钟,尽管我们比其他所有人都早。

我们的午餐时间特别糟糕。 白天,绝对每个人(老师,学生,工作人员)都冲进饭厅,所以我们作为初中生从来没有过快乐。

常见解决方案

但是,由于新来者别无选择,我们想出了两种方法来减少被抛到最后的风险。 第一种是很早到达饭厅(也就是说,实际上是在食物送达之前)。 第二个方法是专门打发乒乓球或篮球的时间,并且要花很长的时间(晚餐开始后二十分钟)。

在某种程度上,这行得通。 但是,坦率地说,没有人渴望用他的双腿冲进饭厅,只是为了能够吃东西或吃掉剩下的剩下的剩菜,因为他属于后者。 我们需要一种解决方案,该解决方案可以让我们知道饭厅中的人少时。

如果某位算命先生为我们预见了未来并准确地说出什么时候去餐厅,这样我们就不必再等很久了,那就太好了。 麻烦在于每天每一件事都不同。 我们不能简单地分析模式并确定最佳时机。 我们只有一种方法可以了解饭厅的情况-步行到达那里,根据您所在的位置,路径可能长达数百米。 因此,如果您来看看线路,回头再以同样的精神继续前进,直到变短,您将浪费很多时间。 通常,小学班的学生生活得令人恶心,对此无能为力。

尤里卡-创建食堂监控系统的想法

突然之间,在下一学年(2017年),我对自己说:“如果我们创建一个能够实时显示队列长度(即检测到交通拥堵)的系统,该怎么办?” 如果我能成功的话,情况将是这样的:小学生只需看电话就能获得有关当前工作量水平的最新数据,然后得出结论,现在是否有意义。

本质上,该方案通过获取信息来缓解不平等现象。 在它的帮助下,年轻的学生可以选择自己应该做的最好的事情-排队(如果时间不太长),或者花更多的时间在学校里,然后选择一个更合适的时机。 我对这个想法感到非常兴奋。

设计饭厅监控系统


2017年9月,我需要提交一个面向对象编程课程的项目,然后我将此系统声明为我的项目。



初始系统计划(2017年9月)

硬件选择(2017年10月)



简单的带上拉电阻的触觉开关。 三排带有五个屏蔽的电路可识别三排

我只订购了五十个薄膜开关,一个基于ESP8266的Wemos D1迷你板,以及几个环夹,我计划将其漆包线连接到其上。

原型开发(2017年10月)

我从面包板开始-在其上放一个电路并进行测试。 我的材料数量有限,所以我只能使用5个运行板的系统。

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

  1. 持续工作并仅在提供食物的时段(早餐,午餐,晚餐,下午点心)发送数据。
  2. 用这种频率识别餐厅中排队/交通拥堵的情况,以便随后将数据用于机器学习模型(例如10 Hz)。
  3. 以高效的方式(数据包大小应该很小)并以较短的间隔将数据发送到服务器。

为了实现它们,我需要执行以下操作:

  1. 使用RTC(实时时钟)模块连续监视时间并确定在饭厅中用餐的时间。
  2. 使用数据压缩方法以一个字符注册屏蔽的状态。 将数据视为二进制五位代码,我将各种值绑定到ASCII字符,以便它们表示数据元素。
  3. 使用ThingSpeak(用于分析和在线绘图的IoT工具),使用POST方法发送HTTP请求。

当然,有一些错误。 例如,我不知道sizeof()运算符为char *对象返回的值为4,而不是字符串的长度(因为它不是数组,因此,编译器不会计算长度),所以感到惊讶的是为什么我的HTTP请求仅包含四个字符从整个网址!

另外,我没有将括号放在#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米! 在每个屏蔽的中心,我放置了一个薄膜开关。 两个夹子从侧面插槽突出到交换机左右两侧的外侧。

好吧,为了防水,我用电工胶带。 很多电工胶带。

一切都成功了!


从11月5日到12月12日



系统照片-所有五个护罩均在此处可见。 左侧是电子设备(D1-mini /蓝牙/ RTC)

11月5日,早上8点(早餐时间),系统开始收集餐厅情况的最新数据。 我简直不敢相信自己的眼睛。 大约两个月前,我草拟了总体方案,坐在家里穿着睡衣,现在,整个系统可以顺利运行,也可以顺利进行。

测试期间软件的错误

当然,系统中有足够的错误。 这是我记得的那些。

尝试将客户端连接到ThingSpeak API时,程序未检查可用的Wi-Fi点。 为了解决该错误,我添加了Wi-Fi可用性检查作为附加步骤。

在设置功能中,我一直叫“ WiFi.begin”,直到出现连接为止。 后来,我发现ESP8266固件已安装该连接,并且begin功能仅在设置Wi-Fi时使用。 我通过在设置过程中仅开始调用一次函数来纠正了这种情况。

我发现我创建的命令行界面(用于设置时间,更改网络设置)在静止时(即早餐,午餐,晚餐和下午点心外)不起作用。 我还看到没有日志记录时,内部循环会被过度加速,并且串行数据读取得太快。 因此,我设置了一个延迟,以便系统在期望其他命令时会等待它们到达。

看门狗颂

并且,在那之后,关于看门狗计时器的问题-我在“现场”条件下的测试阶段决定了它。 毫不夸张地说,我只考虑了四天。 每次休息(持续十分钟),我都赶往饭厅,只是为了尝试新版本的代码。 打开发行版后,我在地板上坐了一个小时,试图抓住一个bug。 我没想到食物! 谢谢您的所有好看护计时器ESP8266!

我如何处理WDT



我奋斗的一小段代码

我找到了一个程序,或者说是Arduino的扩展程序,它在发生Wdt重置时分析了软件的数据结构,它引用了已编译代码的ELF文件(函数与指针之间的关系)。 完成此操作后,事实证明该错误可以通过以下方式解决:



真是的 好吧,谁知道在实时系统中修复错误是如此困难! 但是,我删除了该错误,事实证明这是一个愚蠢的错误。 出于经验不足,我编写了一个while循环,其中数组超出了数组的范围。 ! (索引++和++索引是两个很大的区别)。



测试中的硬件问题

当然,设备,即踏板,远非理想。 不出所料,其中一个开关卡住。



11月7日,午餐期间,第三个防护罩的开关卡住了

上面,我给出了ThingSpeak网站的在线图表的屏幕截图。 如您所见,在12:25左右发生了一些事情,此后三号盾牌失灵了。 结果,队列长度被定义为3(值是3 * 100),即使实际上它没有到达第三屏蔽。 解决的方法是,我添加了更多的衬里(是的,电工胶带),以使开关更宽敞。

有时,当电线紧贴在门上时,我的系统被连根拔起。 手推车从这扇门运到饭厅,并把包裹运进来,于是她将电线塞在身后,合上,然后将其从插槽中拉出。 在这种情况下,我注意到接收数据时出现意外故障,并猜测系统已断开电源。

学校制度的传播

如前所述,我使用了ThingSpeak API,该API以图形的形式可视化站点上的数据,这非常方便。 总的来说,实际上,我只是将指向我的日程安排的链接扔到了Facebook上的学校小组中(我找了这个帖子半小时却没有找到它-这很奇怪)。 但是后来我在乐队的校园社区找到了一篇2017年11月5日的帖子:





反应是暴风雨!

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



上面,我附了一些与午餐时间和下午茶有关的时间表。 有趣的是,午餐时间的拥堵高峰几乎总是在12:25下降(队列到达第五道盾牌)。 对于下午的小吃,通常没有很多人拥挤(排队最多只有一个盾牌)。

你知道有趣吗? 该系统仍然有效(https://thingspeak.com/channels/346781)! 我登录到以前使用的帐户,看到了以下内容:



在上图中,我看到在12月3日,人潮大量减少。 难怪-是星期天。 在这一天,几乎每个人都去某个地方,因为在大多数情况下,只有到了星期日您才可以离开学校。 很明显,周末在饭厅里您不会看到活着的灵魂。

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


正如您自己所看到的,我没有参与这个项目,因为我试图获得某种奖励或认可。 我只是想运用自己的技能来解决我在学校遇到的长期问题。

但是,我们的学校营养师O小姐曾经问我是否知道有关餐厅创意的竞赛,我与她在计划和开发项目时非常亲密。 然后我认为这是一种奇怪的想法-测量餐厅的想法。 但是我阅读了该信息手册,发现该项目必须在11月24日之前提交! 好吧好吧 我很快想到了概念,数据和图表并发送了一个应用程序。

改变比赛的初衷

顺便说一下,我最后提出的系统与已经实施的系统略有不同。 实际上,我针对大得多的韩国学校改编了我的原始方法(实时测量队列长度)。 进行比较:我们学校有300名学生,而在另一些学生中,有很多人只上一堂课! 我需要了解如何扩展系统。

因此,我提出了一个基于手动控制的概念。 如今,韩国学校已经严格遵守所有班级的就餐顺序,因此我建立了另一个“信号响应”类型的框架。 假定访问您前面的餐厅的组的队列长度达到某个限制(即队列变短)时,他们将使用按钮或在墙上打开开关来手动向您发送信号。 信号将传输到电视屏幕或通过LED灯泡。

我只是真的想解决该国所有学校出现的问题。 当我从O小姐那里听到一个故事时,我的意图变得更加坚定-我现在告诉你。 事实证明,在某些大型学校中,即使在冬天,线路也超出了自助餐厅,到达街道20至30米,因为没有人可以正确地构建该过程。 有时,有几分钟的时间,餐厅里根本没人出现-这也很糟糕。 在有大量学生的学校中,即使分配食物的时间消失了不到一分钟,工作人员也几乎无法为所有人服务。 因此,到最后才开始分配食物的人(通常是小学生)根本没有足够的时间吃饭。

因此,即使我不得不急着发送申请,我仍然非常仔细地考虑了如何使它适应更广泛的使用。

我获得一等奖的消息!

简而言之,我受邀来将我的项目提交给政府官员。 因此,我竭尽全力在Power Point领域中表现出来!



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

这是一次有趣的经历-我刚为Stolov问题提出了一些建议,最终以某种方式赢得了比赛的冠军。 即使站在舞台上,我也一直在想:“嗯,我在这里做什么?” 但是总的来说,这个项目给我带来了巨大的好处-我从嵌入式系统的开发和现实生活中项目的实施中学到了很多。 好吧,我当然有奖。

结论


这里有些讽刺意味:无论我参加了有目的注册的任何竞赛和科学博览会,都没有带来什么好处。 在这里,机会只是找到了我自己,并取得了不错的成绩。

这让我思考促使我接受项目的原因。 我为什么要开始工作-“赢”或解决我们周围世界中确实存在的问题? 如果第二种动机适用于您的情况,我敦促您不要放弃该项目。 使用这种业务方法,您可能会在一路上遇到意想不到的机会,并且不会感到获胜的压力-您的主要动力将全心投入于您的工作。

最重要的是:如果您设法实施一个体面的解决方案,则可以立即在现实世界中尝试它。 以我为例,学校成为了平台,但是经验会随着时间的推移而积累,谁知道呢?也许您的整个国家乃至全世界都会使用您的应用程序。

每次回想起这段经历,我似乎都为自己感到骄傲。 我无法解释原因,但是项目实施过程给我带来了极大的乐趣,而奖金是额外的奖励。 此外,我很高兴能够为同学们解决每天困扰他们的生活的问题。 有一次,一位学生走近我说:“您的系统非常方便。” 我在第七天堂!
我认为,即使没有任何奖项,我也为此感到自豪。 也许这对其他人的帮助给我带来了如此的满足……总的来说,我喜欢项目。

我希望通过本文实现的目标

我希望阅读完我的文章后,能够激发您做一些有益于社区甚至只有您自己的事情。 我敦促您使用自己的技能(编程当然适用于他们,但还有其他技能)可以使周围的现实变得更好。 我可以向您保证,您在此过程中获得的经验无法与任何事物相提并论。

它也可以在您根本没有想到的路径之前打开-它发生在我身上。 所以我问你,做自己喜欢的事,在世界上留下自己的印记! 单一声音的回声会震撼整个世界,因此请相信自己。

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

Source: https://habr.com/ru/post/zh-CN482178/


All Articles