Но, конечно, это еще не все, мне приходилось наблюдать и еще одну, более серьезную проблему. Настолько серьезную, что я в конце концов решил попытаться найти выход из положения. Старшеклассники (то есть все, кто учится хоть на класс выше) и учителя проходили к раздаче без очереди. Да-да, и ты, как ученик начальных классов, ничего им не мог сказать. У нас в школе была довольно жесткая политика касательно отношений между классами.
Поэтому мы с друзьями, пока были новичками, приходили в столовую самыми первыми, уже вот-вот должны были получить еду – и тут появлялись старшеклассники или учителя и попросту отодвигали нас (некоторые, кто подобрее, позволял нам оставаться на своем месте в очереди). Нам приходилось ждать еще лишних пятнадцать-двадцать минут, хотя пришли-то раньше всех мы.
በተለይ በምሳ ሰአት መጥፎ ጊዜ አሳልፈናል። በእለቱ ሁሉም ሰው ወደ ካፊቴሪያው (መምህራን፣ ተማሪዎች፣ ሰራተኞች) በፍጥነት ይሮጣል፣ ስለዚህ ለእኛ እንደ አንደኛ ደረጃ ተማሪዎች ምሳ ምንም ደስታ አልነበረውም።
И вдруг, уже в следующем учебном году (2017), я сказал себе: «А что если сделать систему, которая будет в реальном времени показывать длину очереди (то есть выявлять «пробку»)?». Если бы мне бы это удалось, картина сложилась бы такая: ученики младших классов просто кидали бы взгляд на телефон, чтобы получить актуальные данные о текущем уровне загруженности, и делали бы выводы, имеет ли им смысл идти сейчас.
По сути, эта схема сглаживала неравенство через доступ к информации. Младшеклассники могли с ее помощью сами выбирать, как им лучше поступить – пойти и встать в очередь (если она не слишком длинная) или же потратить время с большей пользой, а позже выбрать более подходящий момент. Меня очень взволновала эта мысль.
የካንቲን ቁጥጥር ስርዓት ንድፍ
В сентябре 2017 года мне нужно было представить проект для курса объектно-ориентированного программирования, и я заявил эту систему в качестве своего проекта.
Изначальный план системы (сентябрь 2017 года)
የመሳሪያ ምርጫ (ጥቅምት 2017)
Простой тактильный переключатель с подтягивающим резистором. Схема с пятью щитами в три ряда, чтобы распознавать очередь по трем линиям
Я заказал только пятьдесят мембранных выключателей, плату Wemos D1 mini на базе ESP8266, а также несколько кольцевых зажимов, к которым планировал крепить эмалированные провода.
Отсылать данные на сервер эффективным способом (размер пакетов должен быть небольшим) и с короткими интервалами.
እነሱን ለማሳካት የሚከተሉትን ማድረግ ነበረብኝ:
Использовать модуль RTC (Real Time Clock, или часов реального времени), чтобы непрерывно следить за временем и определять сроки, когда в столовой подают еду.
Наконец, еще один достойный упоминания баг, с которым я имел дело, это Reset на сторожевом таймере. С этой проблемой я промучился очень долго. Как потом выяснилось, я пытался получить доступ к низкоуровневому реестру на чипе ESP8266 неправильным способом (по ошибке прописал значение NULL для указателя на структуру).
Чтобы удовлетворить этим требованиям, я остановился на дизайне с двухслойной структурой – акрил лазерной резки пошел на основание и верхнюю крышку, а в качестве защитного слоя я использовал пробковый материал.
Макет щита я сделал в AutoCAD; размеры – 400 на 400 миллиметров.
Слева дизайн, который пошел в работу. Справа вариант с соединением по типу лего
Кстати, от правого дизайна я в итоге отказался потому, что с такой системой фиксации получалось, что между щитами должно быть 40 сантиметров, а значит, я не мог покрыть нужное расстояние (десять с лишним метров).
Чтобы подсоединить все переключатели я использовал эмалированные провода – всего их ушло больше 70 метров! В центр каждого щита я поместил мембранный переключатель. Из боковых прорезей наружу высовывались два зажима – слева и справа от переключателя.
Ну а для водонепроницаемости я использовал изоленту. Очень много изоленты.
እና ሁሉም ነገር ሠርቷል!
ከህዳር አምስተኛው እስከ ታህሳስ አስራ ሁለተኛው ያለው ጊዜ
Фотография системы – здесь видны все пять щитов. Слева размещается электроника (D1-mini / Bluetooth / RTC)
Пятого ноября в восемь утра (время завтрака) система начала собирать актуальные данные об обстановке в столовой. Я глазам своим не мог поверить. Всего каких-то два месяца назад я набрасывал общую схему, сидя дома в пижаме, и вот, пожалуйста, целая система работает без сучка без задоринки… или нет.
Программа не проверяла наличие доступных точек Wi-Fi при попытке соединить клиента с ThingSpeak API. Чтобы устранить ошибку я добавил проверку доступности Wi-Fi дополнительным шагом.
В функции setup я постоянно вызывал “WiFi.begin”, пока не появлялось соединение. Позже я узнал, что соединение устанавливает прошивка ESP8266, а функция begin используется только при настройке Wi-Fi. Я исправил положение тем, что стал вызывать функцию всего один раз, в ходе настройки.
Я обнаружил, что созданный мной интерфейс командной строки (он был предназначен для того, чтобы выставлять время, менять сетевые настройки ) не работает в состоянии покоя (то есть за пределами завтрака, обеда, ужина и полдника). Также я увидел, что, когда не происходит логирования, внутренний цикл чрезмерно ускоряется и серийные данные считываются слишком быстро. Поэтому я выставил задержку, чтобы система ожидала поступления дополнительных команд, когда они предполагаются.
Я нашел программу, вернее, расширение для Arduino, которое анализирует структуру данных ПО, когда происходит Wdt-reset, обращаясь к ELF-файлу скомпилированного кода (корреляции между функциями и указателями). Когда это было проделано, оказалось, что устранить ошибку можно следующим образом:
Седьмого ноября во время обеда переключатель на третьем щите заело
Выше я привел скриншот онлайн-графика с сайта ThingSpeak. Как вы видите, около 12:25 произошло нечто такое, после чего щит номер три вышел из строя. В итоге, длина очереди определялась как 3 (значение равно 3 * 100), даже когда на деле она не доходила до третьего щита. Починка заключалась в том, что я добавил побольше подкладки (да-да, изоленты), чтобы переключателю было просторнее.
Иногда мою систему в буквальном смысле вырывали с корнем, когда провод цеплялся за дверь. Через эту дверь в столовую провозили тележки и вносили пакеты, так что она увлекала провод за собой, закрываясь, и выдергивала его из разъема. В таких случаях я замечал неожиданный сбой в поступлении данных и догадывался, что система отключена от источника питания.
በትምህርት ቤቱ ውስጥ ስለ ስርዓቱ መረጃ ማሰራጨት
Как уже упоминалось, я пользовался ThingSpeak API, который визуализирует данные на сайте в виде графиков, что очень удобно. В общем, я, по сути, просто скинул ссылку на свой график в группу школы на Facebook (полчаса искал этот пост и не нашел – очень странно). Но зато я нашел пост на my Band, школьном сообществе, от пятого ноября 2017 года:
Реакция была бурной!
Я разместил эти посты, чтобы разжечь интерес к своему проекту. Однако даже просто разглядывать их само по себе довольно занятно. Скажем, здесь хорошо видно, что число людей резко подскочило в 6:02 и практически упало до нуля к 6:10.
Знаете, что забавно? Эта система до сих пор живая (https://thingspeak.com/channels/346781)! Я зашел в аккаунт, который использовал раньше и увидел вот что:
На графике выше я увидел, что третьего декабря приток людей существенно меньше. И неудивительно – это же было воскресенье. В этот день практически все где-то ходят, потому что в большинстве случаев только в воскресенье можно покинуть территорию школы. Понятно, что в выходной в столовой живой души не увидишь.
Однако наш школьный диетолог, мисс О, с которой я очень сблизился, пока планировал и разрабатывал свой проект, как-то раз спросила меня, знаю ли я о конкурсе на идеи для столовой. Тогда я подумал, что это какая-то странная затея – меряться идеями для столовой. Но я прочитал информационный буклет и узнал, что проект нужно подать до 24 ноября! Ну и ну. Я побыстрее довел до ума концепцию, данные и графики и отправил заявку.
Поэтому я предложил концепцию, в большей степени основанную на «ручном» управлении. Сейчас в корейских школах уже введен порядок приема пищи для всех классов, которого строго придерживаются, так что я выстроил другой фреймворк типа «сигнал — реакция». Тут предполагалось, что когда группа, посещающая столовую перед вами, дойдет до определенного предела в длине очереди (то есть очередь станет короткой), они вручную отправят вам сигнал при помощи кнопки или переключателя на стене. Сигнал будет передаваться на экран телевизора или через светодиодные лампочки.
Мне просто очень хотелось решить проблему, которая возникала по всем школам страны. Еще сильнее я укрепился в своем намерении, когда услышал от мисс О одну историю – сейчас расскажу. Оказывается, в некоторых крупных школах очередь выходит за пределы столовой, на улицу на двадцать-тридцать метров, даже зимой, потому что никто не может должным образом выстроить процесс. А иногда бывает так, что несколько минут в столовой вообще никто не появляется – и это тоже плохо. В школах с большим числом учеников персонал едва успевает обслужить всех даже в том случае, если ни одна минута из времени, отведенного на еду, не пропадает. Поэтому тем, кто подходит к раздаче самыми последними (обычно это ученики начальных классов), просто не хватает времени поесть.
Так что, пусть мне и пришлось отсылать свое приложение в спешке, я все-таки очень тщательно обдумал, как можно приспособить его для более широкого использования.
Тут есть какая-то ирония: сколько я ни участвовал во всяких состязаниях и научных ярмарках, на которые записывался целенаправленно, ничего путного из этого не вышло. А тут возможность просто нашла меня сама и дала хорошие результаты.
И самое главное: если у вас получится реализовать достойное решение, вы сразу сможете опробовать его в реальном мире. В моем случае площадкой стала школа, но по ходу времени опыт накапливается, и кто знает – может быть, ваше приложение будет использовать целая страна или даже весь мир.
Каждый раз, вспоминая об этом опыте, я даже вроде как собой горжусь. Не могу объяснить почему, но процесс реализации проекта попросту приносил мне большое удовольствие, а приз стал дополнительным бонусом. К тому же, мне было приятно, что я сумел решить для одноклассников проблему, которая портила им жизнь каждый день. Один раз ко мне подошел один из учеников и сказал: «С твоей системой очень удобно». Я был на седьмом небе!
Думаю, даже без всяких наград я бы за одно это испытывал гордость за свою разработку. Может, это помощь другим принесла мне такое удовлетворение… в общем, люблю проекты.
በዚህ ጽሑፍ ለማሳካት ያሰብኩትን ነገር
Надеюсь, дочитав мою статью до конца, вы вдохновились на то, чтобы сделать что-то, что принесет пользу вашему сообществу или даже только вам самим. Призываю вас использовать свои навыки (программирование, безусловно, к ним относится, но есть и другие), чтобы менять окружающую действительность к лучшему. Могу вас уверить, что опыт, который вы получите в процессе, ни с чем не сравнить.
Также это может открыть перед вами пути, которых вы совсем не ожидали – так случилось со мной. Так что прошу вас, делайте то, что вам нравится, и оставляйте свой след в мире! Эхо от одного-единственного голоса может потрясти весь мир, так что верьте в себя.