Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Będąc w pierwszej klasie liceum (od marca do grudnia 2016 r.) bardzo zirytowała mnie sytuacja, jaka rozwinęła się w naszej szkolnej stołówce.

Problem pierwszy: zbyt długie czekanie w kolejce

Jaki problem zaobserwowałem? Lubię to:

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

W miejscu dystrybucji zgromadziło się wielu uczniów, którzy musieli długo stać (pięć do dziesięciu minut). Jest to oczywiście powszechny problem i uczciwy system obsługi: im później przyjedziesz, tym później zostaniesz obsłużony. Żebyś wiedział, dlaczego musisz czekać.

Problem drugi: nierówne warunki dla oczekujących

Ale to oczywiście nie wszystko, musiałem zaobserwować jeszcze inny, poważniejszy problem. Na tyle poważny, że w końcu zdecydowałem się spróbować znaleźć wyjście z tej sytuacji. Uczniowie szkół średnich (czyli wszyscy, którzy studiują przynajmniej o klasę wyższą) oraz nauczyciele udali się do dystrybucji nie czekając w kolejce. Tak, tak, a ty, jako uczeń szkoły podstawowej, nie mogłeś im nic powiedzieć. Nasza szkoła miała dość rygorystyczną politykę dotyczącą relacji między klasami.

Dlatego ja i moi przyjaciele, gdy byliśmy nowicjuszami, pierwsi przyszliśmy do stołówki, mieliśmy zamiar kupić jedzenie - a potem pojawili się licealiści lub nauczyciele i po prostu nas odepchnęli (niektórzy, którzy byli milsi, pozwolili nam pozostać w nasze miejsce w kolejce). Musieliśmy poczekać dodatkowe piętnaście do dwudziestu minut, chociaż przybyliśmy wcześniej niż wszyscy inni.

Szczególnie źle się bawiliśmy w porze lunchu. W ciągu dnia do stołówki spieszyli się absolutnie wszyscy (nauczyciele, uczniowie, pracownicy), więc dla nas, uczniów szkół podstawowych, obiad nigdy nie był radością.

Typowe rozwiązania problemu

Ponieważ jednak nowicjusze nie mieli wyboru, wymyśliliśmy dwa sposoby, aby zmniejszyć ryzyko wyrzucenia na tył szeregu. Pierwszym z nich jest przyjście do jadalni bardzo wcześnie (to znaczy dosłownie zanim jedzenie zacznie być podawane). Drugim jest celowe zabicie czasu grając w ping-ponga lub koszykówkę i przybycie bardzo późno (około dwadzieścia minut po rozpoczęciu lunchu).

W pewnym stopniu to zadziałało. Ale szczerze mówiąc, nikomu nie zależało na tym, żeby jak najszybciej spieszyć się do jadalni, żeby móc coś zjeść albo dokończyć zimne resztki po innych, bo byli jednymi z ostatnich. Potrzebowaliśmy rozwiązania, które poinformuje nas, kiedy w stołówce nie będzie tłoku.

Byłoby wspaniale, gdyby jakaś wróżka przepowiedziała nam przyszłość i dokładnie powiedziała, kiedy udać się do jadalni, abyśmy nie musieli długo czekać. Kłopot w tym, że każdego dnia wszystko wyglądało inaczej. Nie mogliśmy po prostu przeanalizować wzorców i zidentyfikować optymalnego punktu. Mieliśmy tylko jeden sposób, aby dowiedzieć się, jak wygląda sytuacja w jadalni – dotrzeć tam pieszo, a droga mogła mieć kilkaset metrów, w zależności od tego, gdzie się znajdowało. Jeśli więc przyjdziesz, spójrz na kolejkę, wróć i kontynuuj w tym samym duchu, aż stanie się krótka, zmarnujesz dużo czasu. Ogólnie rzecz biorąc, życie było obrzydliwe dla klasy podstawowej i nic nie można było na to poradzić.

Eureka – pomysł stworzenia Systemu Monitoringu Kantyny

I nagle, już w kolejnym roku akademickim (2017), powiedziałem sobie: „A co jeśli zrobimy system, który w czasie rzeczywistym będzie pokazywał długość kolejki (czyli wykrywał korek)?” Gdyby mi się to udało, obraz wyglądałby tak: uczniowie podstawówki po prostu zerkaliby na telefony, aby uzyskać aktualne dane na temat aktualnego poziomu obciążenia pracą i wyciągaliby wnioski, czy jest sens, aby teraz jechać .

Zasadniczo program ten złagodził nierówności poprzez dostęp do informacji. Przy jego pomocy uczniowie szkół podstawowych mogli sami wybrać, co jest dla nich najlepsze – pójść i stanąć w kolejce (jeśli nie była ona zbyt długa) lub spędzić czas bardziej pożytecznie, a później wybrać bardziej odpowiedni moment. Bardzo mnie ta myśl podekscytowała.

Projekt systemu monitorowania stołówki

We wrześniu 2017 musiałem zgłosić projekt na kurs programowania obiektowego i zgłosiłem ten system jako swój projekt.

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Wstępny plan systemu (wrzesień 2017)

Wybór sprzętu (październik 2017)

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Prosty przełącznik dotykowy z rezystorem podciągającym. Schemat z pięcioma tarczami w trzech rzędach, aby rozpoznać kolejkę wzdłuż trzech linii

Zamówiłem jedynie pięćdziesiąt przełączników membranowych, mini płytkę Wemos D1 opartą na ESP8266 i kilka zacisków pierścieniowych, do których planowałem przymocować emaliowane przewody.

Prototypowanie i rozwój (październik 2017)

Zacząłem od płytki prototypowej, zmontowałem na niej obwód i przetestowałem. Miałem ograniczoną ilość materiałów, więc ograniczyłem się do systemu z pięcioma podnóżkami.

Dla oprogramowania, które napisałem w C++, postawiłem sobie następujące cele:

  1. Pracuj w trybie ciągłym i wysyłaj dane tylko w okresach, w których podawane jest jedzenie (śniadanie, obiad, kolacja, podwieczorek).
  2. Rozpoznawaj sytuację w kolejce/ruchu w kawiarni przy takich częstotliwościach, aby dane można było następnie wykorzystać w modelach uczenia maszynowego (powiedzmy 10 Hz).
  3. Wysyłaj dane na serwer sprawnie (rozmiar pakietu powinien być mały) i w krótkich odstępach czasu.

Aby je osiągnąć, musiałem wykonać następujące czynności:

  1. Wykorzystaj moduł RTC (Real Time Clock), aby na bieżąco monitorować czas i ustalać, kiedy w stołówce podawane jest jedzenie.
  2. Użyj metody kompresji danych, aby zapisać stan osłony w jednym znaku. Traktując dane jako pięciobitowy kod binarny, zmapowałem różne wartości na znaki ASCII tak, aby reprezentowały elementy danych.
  3. Skorzystaj z ThingSpeak (narzędzia IoT do analiz i tworzenia wykresów online), wysyłając żądania HTTP za pomocą metody POST.

Oczywiście było trochę błędów. Na przykład nie wiedziałem, że operator sizeof() zwraca wartość 4 dla obiektu char *, a nie długość łańcucha (ponieważ nie jest to tablica i dlatego kompilator nie oblicza długości) i byłem bardzo zaskoczony, dlaczego moje żądania HTTP zawierały tylko cztery znaki ze wszystkich adresów URL!

Nie uwzględniłem również nawiasów w kroku #define, co doprowadziło do nieoczekiwanych rezultatów. Cóż, powiedzmy:

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

Tutaj można by się spodziewać, że A będzie równe 3 (10 / 3 = 3), ale w rzeczywistości zostało obliczone inaczej: 2 (2 * 5/3 = 2).

Wreszcie kolejnym godnym uwagi błędem, z którym sobie poradziłem, był reset licznika czasu watchdoga. Zmagałem się z tym problemem bardzo długo. Jak się później okazało, próbowałem w niewłaściwy sposób uzyskać dostęp do rejestru niskiego poziomu na chipie ESP8266 (przez pomyłkę wpisałem wartość NULL jako wskaźnik do struktury).

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Osłona na stopy, którą zaprojektowałem i zbudowałem. W momencie robienia zdjęcia przeżył już pięć tygodni deptania

Okucia (podnóżki)

Aby tarcze były w stanie przetrwać trudne warunki panujące w kantynie, postawiłem im następujące wymagania:

  • Tarcze muszą być wystarczająco mocne, aby przez cały czas utrzymać ciężar człowieka.
  • Osłony powinny być cienkie, aby nie przeszkadzać osobom stojącym w kolejce.
  • Przełącznik musi być aktywowany po nadepnięciu.
  • Osłony muszą być wodoodporne. Jadalnia jest zawsze wilgotna.

Aby sprostać tym wymaganiom zdecydowałem się na dwuwarstwową konstrukcję - wycinany laserowo akryl w dolnej i górnej części pokrywy oraz korek w roli warstwy ochronnej.

Zrobiłem układ tarczy w programie AutoCAD; wymiary – 400 na 400 milimetrów.

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Po lewej stronie projekt, który wszedł do produkcji. Po prawej stronie znajduje się opcja z połączeniem typu Lego

Swoją drogą ostatecznie porzuciłem projekt prawy, bo przy takim systemie mocowania okazało się, że między tarczami powinno być 40 centymetrów, a to oznacza, że ​​nie jestem w stanie pokonać wymaganej odległości (więcej niż dziesięć metrów).

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Do podłączenia wszystkich włączników użyłem przewodów emaliowanych – w sumie zajęło to ponad 70 metrów! Umieściłem przełącznik membranowy na środku każdej osłony. Z bocznych szczelin wystawały dwa zatrzaski - po lewej i po prawej stronie włącznika.

Cóż, do hydroizolacji użyłem taśmy elektrycznej. Dużo taśmy elektrycznej.

I wszystko zadziałało!

Okres od piątego listopada do dwunastego grudnia

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Zdjęcie systemu - tutaj widać wszystkie pięć tarcz. Po lewej elektronika (D1-mini / Bluetooth / RTC)

XNUMX listopada o godzinie ósmej rano (pora śniadania) system zaczął zbierać aktualne dane o sytuacji w jadalni. Nie mogłam uwierzyć własnym oczom. Zaledwie dwa miesiące temu, siedząc w domu w piżamie, szkicowałem ogólny schemat, i oto mamy, cały system działa bez zarzutów… albo i nie.

Błędy oprogramowania podczas testowania

Oczywiście w systemie było mnóstwo błędów. Oto te, które pamiętam.

Program nie sprawdzał dostępnych punktów Wi-Fi podczas próby połączenia klienta z API ThingSpeak. Aby naprawić błąd, dodałem dodatkowy krok, aby sprawdzić dostępność Wi-Fi.

W funkcji konfiguracji wielokrotnie wywoływałem „WiFi.begin”, aż pojawiło się połączenie. Później dowiedziałem się, że połączenie jest nawiązywane przez oprogramowanie ESP8266, a funkcja Begin jest używana tylko podczas konfigurowania Wi-Fi. Poprawiłem sytuację, wywołując funkcję tylko raz, podczas instalacji.

Odkryłem, że stworzony przeze mnie interfejs wiersza poleceń (miał ustawiać godzinę, zmieniać ustawienia sieciowe) nie działa w stanie spoczynku (czyli poza śniadaniem, lunchem, kolacją i podwieczorkiem). Widziałem też, że gdy nie następuje rejestrowanie, pętla wewnętrzna nadmiernie przyspiesza, a dane szeregowe są odczytywane zbyt szybko. Dlatego ustawiam opóźnienie, aby system czekał na przybycie dodatkowych poleceń wtedy, gdy są oczekiwane.

Oda do stróża

Aha i jeszcze jedno odnośnie problemu z timerem watchdoga - rozwiązałem go właśnie na etapie testów w warunkach „polowych”. Bez przesady, tylko o tym myślałem przez cztery dni. Na każdej przerwie (trwającej dziesięć minut) spieszyłem się do kawiarni, żeby wypróbować nową wersję kodu. A kiedy dystrybucja się otworzyła, przez godzinę siedziałem na podłodze, próbując złapać bakcyla. Nawet nie pomyślałam o jedzeniu! Dziękuję za wszystkie dobre rzeczy, ESP8266 Watchdog!

Jak odkryłem WDT

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Fragment kodu, z którym się borykałem

Znalazłem program, a raczej rozszerzenie dla Arduino, które analizuje strukturę danych oprogramowania, gdy następuje reset Wdt, uzyskując dostęp do pliku ELF skompilowanego kodu (korelacje między funkcjami i wskaźnikami). Po wykonaniu tej czynności okazało się, że błąd można wyeliminować w następujący sposób:

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Cholera! Cóż, kto wiedział, że naprawianie błędów w systemie czasu rzeczywistego jest takie trudne! Jednak usunąłem błąd i okazało się, że jest to głupi błąd. Z powodu mojego braku doświadczenia napisałem pętlę while, w której tablica przekroczyła dopuszczalne granice. Uch! (indeks++ i indeks ++ to dwie duże różnice).

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Problemy ze sprzętem podczas testów

Oczywiście wyposażenie, czyli osłony na stopy, było dalekie od ideału. Jak można się spodziewać, jeden z przełączników jest zablokowany.

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

XNUMX listopada podczas lunchu zaciął się włącznik na trzecim panelu

Powyżej przedstawiłem zrzut ekranu wykresu online ze strony ThingSpeak. Jak widać coś się wydarzyło około 12:25, po czym tarcza numer trzy zawiodła. W rezultacie długość kolejki została określona na 3 (wartość wynosi 3*100), nawet jeśli w rzeczywistości nie dotarła ona do trzeciej tarczy. Rozwiązanie polegało na tym, że dodałem więcej wyściółki (tak, taśmy klejącej), aby zapewnić przełącznikowi więcej miejsca.

Czasami mój system dosłownie się psuł, gdy przewód zaplątał się w drzwi. Przez te drzwi do jadalni wnoszono wózki i paczki, które niosły ze sobą drut, zamykały go i wyciągały z gniazdka. W takich przypadkach zauważałem nieoczekiwaną awarię w przepływie danych i domyślałem się, że system został odłączony od źródła zasilania.

Rozpowszechnienie informacji o systemie w całej szkole

Jak już wspomniałem wykorzystałem API ThingSpeak, które wizualizuje dane na stronie w formie wykresów, co jest bardzo wygodne. Ogólnie rzecz biorąc, w zasadzie po prostu zamieściłem link do mojego planu zajęć na szkolnej grupie na Facebooku (szukałem tego wpisu przez pół godziny i nie mogłem go znaleźć – bardzo dziwne). Ale znalazłem post na moim Zespole, społeczności szkolnej, z dnia 2017 listopada XNUMX r.:

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Reakcja była szalona!

Opublikowałem te posty, aby wzbudzić zainteresowanie moim projektem. Jednak samo patrzenie na nie jest samo w sobie całkiem zabawne. Powiedzmy, że tutaj wyraźnie widać, że liczba osób gwałtownie wzrosła o 6:02 i praktycznie spadła do zera o 6:10.

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Powyżej załączyłem kilka wykresów odnoszących się do lunchu i podwieczorku. Co ciekawe, szczyt obciążenia pracą w porze lunchu prawie zawsze występował o godzinie 12:25 (kolejka docierała do piątej tarczy). A na popołudniową przekąskę duży tłum ludzi jest zazwyczaj nietypowy (kolejka ma najwyżej jedną deskę).

Wiesz co jest zabawne? Ten system wciąż żyje (https://thingspeak.com/channels/346781)! Zalogowałem się na konto, którego używałem wcześniej i zobaczyłem to:

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Na powyższym wykresie widziałem, że trzeciego grudnia napływ ludności był znacznie mniejszy. I nic dziwnego – była niedziela. Tego dnia prawie wszyscy gdzieś wychodzą, bo w większości przypadków dopiero w niedzielę można opuścić teren szkoły. Wiadomo, że w weekend w stołówce nie zobaczysz żywej duszy.

Jak otrzymałem pierwszą nagrodę od koreańskiego Ministerstwa Edukacji za mój projekt

Jak sami widzicie, nie pracowałam nad tym projektem, bo chciałam zasłużyć na jakąś nagrodę czy uznanie. Chciałem po prostu wykorzystać swoje umiejętności, aby rozwiązać chroniczny problem, z którym borykałem się w szkole.

Jednak nasza szkolna dietetyczka, pani O, z którą bardzo się zaprzyjaźniłam podczas planowania i rozwijania mojego projektu, pewnego dnia zapytała mnie, czy wiem o konkursie na pomysł na stołówkę. Wtedy pomyślałam, że to jakiś dziwny pomysł, żeby porównać pomysły na jadalnię. Ale przeczytałam broszurę informacyjną i dowiedziałam się, że projekt trzeba złożyć do 24 listopada! Dobrze, dobrze. Szybko sfinalizowałem koncepcję, dane i grafikę i wysłałem aplikację.

Zmiany w pierwotnym pomyśle na konkurs

Swoją drogą system, który ostatecznie zaproponowałem, różnił się nieco od tego już wdrożonego. Zasadniczo zaadaptowałem moją oryginalną metodę (pomiar długości kolejki w czasie rzeczywistym) do znacznie większych koreańskich szkół. Dla porównania: w naszej szkole uczy się trzystu uczniów, a w innych w jednej klasie jest ich aż tyle! Musiałem wymyślić, jak skalować system.

Dlatego zaproponowałem koncepcję, która w większym stopniu opierała się na sterowaniu „ręcznym”. Obecnie koreańskie szkoły wprowadziły już plan posiłków dla wszystkich klas, którego jest ściśle przestrzegany, dlatego stworzyłem inny schemat typu „sygnał-reakcja”. Pomysł był taki, że gdy grupa odwiedzająca kawiarnię przed Tobą osiągnie określony limit długości kolejki (to znaczy, że kolejka się skróci), ręcznie wyśle ​​do Ciebie sygnał za pomocą przycisku lub włącznika na ścianie . Sygnał będzie przesyłany na ekran telewizora lub poprzez żarówki LED.

Po prostu bardzo chciałem rozwiązać problem, który pojawił się we wszystkich szkołach w kraju. Jeszcze bardziej umocniłam się w swoim zamiarze, gdy usłyszałam historię od Pani O – opowiem Ci teraz. Okazuje się, że w niektórych dużych szkołach kolejka sięga poza stołówkę, na ulicę na odległość dwudziestu, trzydziestu metrów, nawet zimą, bo nikt nie potrafi tego procesu odpowiednio zorganizować. A czasami zdarza się, że przez kilka minut w jadalni w ogóle nie pojawia się żadna osoba – i to też jest złe. W szkołach o dużej liczbie uczniów personel ledwo ma czas, aby obsłużyć wszystkich, nawet jeśli nie marnuje się ani minuty czasu na posiłek. Dlatego tym, którzy dotrą na rozdanie jako ostatni (przeważnie uczniowie szkół podstawowych), po prostu nie starcza czasu na jedzenie.

Tak więc, mimo że musiałem złożyć wniosek w pośpiechu, bardzo dokładnie przemyślałem, w jaki sposób mogę go dostosować do szerszego zastosowania.

Wiadomość, że zdobyłem pierwszą nagrodę!

Krótko mówiąc, zostałem zaproszony do zaprezentowania mojego projektu urzędnikom rządowym. Wykorzystałem więc wszystkie swoje talenty Power Pointa, przyszedłem i zaprezentowałem!

Historia koreańskiego ucznia, który otrzymał od ministerstwa nagrodę za system monitorowania kolejek

Początek prezentacji (z lewej strony - minister)

To było ciekawe doświadczenie – po prostu wpadłem na pomysł rozwiązania problemu kafeterii i jakimś cudem znalazłem się wśród zwycięzców konkursu. Nawet stojąc na scenie, myślałam: „Hmm, co ja tu w ogóle robię?” Ale ogólnie projekt ten przyniósł mi ogromne korzyści - wiele się nauczyłem na temat rozwoju systemów wbudowanych i wdrażania projektów w prawdziwym życiu. Oczywiście dostałem nagrodę.

wniosek

Jest w tym pewna ironia: niezależnie od tego, jak często brałem udział w najróżniejszych konkursach i targach nauki, na które celowo się zapisałem, nic dobrego z tego nie wyszło. A potem szansa po prostu mnie znalazła i dała dobre rezultaty.

To skłoniło mnie do zastanowienia się nad powodami, które motywują mnie do podejmowania projektów. Po co zaczynam pracę – żeby „wygrać” czy rozwiązać realny problem otaczającego mnie świata? Jeśli w Twoim przypadku działa ten drugi motyw, gorąco zachęcam Cię, abyś nie rezygnował z projektu. Dzięki takiemu podejściu do biznesu możesz spotkać po drodze nieoczekiwane możliwości i nie czuć presji konieczności wygrywania – Twoją główną motywacją będzie pasja do Twojego biznesu.

I co najważniejsze: jeśli uda Ci się wdrożyć porządne rozwiązanie, możesz od razu wypróbować je w realnym świecie. W moim przypadku platforma była szkołą, ale z biegiem czasu doświadczenie się gromadzi i kto wie – może z Twojej aplikacji będzie korzystał cały kraj, a może nawet cały świat.

Za każdym razem, gdy myślę o tym doświadczeniu, jestem z siebie w pewnym sensie dumny. Nie potrafię wytłumaczyć dlaczego, ale proces realizacji projektu sprawił mi po prostu ogromną przyjemność, a nagroda była dodatkowym bonusem. Dodatkowo byłam zadowolona, ​​że ​​udało mi się rozwiązać dla moich kolegów z klasy problem, który każdego dnia rujnował im życie. Któregoś dnia podszedł do mnie jeden ze studentów i powiedział: „Twój system jest bardzo wygodny”. Byłem w siódmym niebie!
Myślę, że nawet bez nagród czułbym się dumny ze swojego rozwoju choćby z tego powodu. Może to właśnie pomaganie innym przyniosło mi taką satysfakcję... ogólnie rzecz biorąc, uwielbiam projekty.

Co miałem nadzieję osiągnąć tym artykułem

Mam nadzieję, że czytając ten artykuł do końca, zainspirujesz się do zrobienia czegoś, co przyniesie korzyść Twojej społeczności lub nawet tylko Tobie. Zachęcam Cię do wykorzystania swoich umiejętności (programowanie z pewnością jest jedną z nich, ale są też inne) do zmiany otaczającej Cię rzeczywistości na lepsze. Zapewniam Cię, że doświadczenia, które zdobędziesz w trakcie tego procesu, nie da się porównać z niczym innym.

Może także otworzyć ścieżki, których się nie spodziewałeś – to właśnie przydarzyło się mnie. Więc proszę, rób to, co kochasz i zaznacz swoją obecność na świecie! Echo jednego głosu może wstrząsnąć całym światem, więc uwierz w siebie.

Oto kilka linków związanych z projektem:

Źródło: www.habr.com

Dodaj komentarz