一名韓國男學生因隊列監控系統而獲得交通部獎的故事

當我讀高三(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 才能來展示!

一名韓國男學生因隊列監控系統而獲得交通部獎的故事

演講開始(最左邊 - 部長)

這是一次有趣的經歷——我剛剛想出了一些解決自助餐廳問題的方法,最終以某種方式成為了比賽的獲勝者。 即使站在舞台上,我也一直在想:“嗯,我到底在這裡做什麼?” 但總的來說,這個計畫為我帶來了巨大的收穫——我學到了很多關於嵌入式系統的開發和現實生活中計畫的實施。 嗯,我當然得到了獎品。

結論

這裡有一些諷刺之處:無論我參加多少次有意報名的各種競賽和科學博覽會,都沒有什麼好處。 然後機會就找到了我並給了我很好的結果。

這讓我開始思考激勵我承擔專案的原因。 我為什麼開始工作——為了「獲勝」或解決我周圍世界的實際問題? 如果第二個動機在你的情況下起作用,我強烈建議你不要放棄這個計畫。 透過這種經營方式,您可以一路遇到意想不到的機會,並且不會因為需要獲勝而感到壓力 - 您的主要動力將是對您的業務的熱情。

最重要的是:如果您設法實施一個不錯的解決方案,您可以立即在現實世界中嘗試它。 就我而言,該平台是一所學校,但隨著時間的推移,經驗積累,誰知道 - 也許你的應用程式會被整個國家甚至全世界使用。

每次回想起這段經歷,我都為自己感到驕傲。 我無法解釋為什麼,但實施該專案的過程給我帶來了巨大的樂趣,獎品是額外的獎金。 此外,我很高興能夠為同學解決一個每天毀掉他們生活的問題。 有一天,一位學生走過來對我說:“你們的系統非常方便。” 我在第七天堂!
我想即使沒有任何獎項,我也會為自己的發展感到自豪。 也許是幫助別人給我帶來瞭如此滿足感……總的來說,我喜歡專案。

我希望透過這篇文章實現什麼

我希望讀完這篇文章後,您會受到啟發,去做一些有益於您的社區甚至您自己的事情。 我鼓勵你利用你的技能(程式設計當然是其中之一,但還有其他技能)來改善你周圍的現實。 我可以向你保證,你在這個過程中獲得的經驗是其他任何東西都無法比擬的。

它還可以開闢你意想不到的道路——這就是發生在我身上的事情。 所以,請做你喜歡做的事,在世界上留下你的印記吧! 一個聲音的迴音可以震動整個世界,所以相信自己。

以下是一些與該項目相關的連結:

來源: www.habr.com

添加評論