- PVSM.RU - https://www.pvsm.ru -
Хлеб – это один из основных компонентов нашего рациона, и многие предпочитают печь его самостоятельно в домашних условиях. В статье вы узнаете, как собрать и настроить уникальное приспособление для удаленного мониторинга подъема закваски, а также познакомитесь с результатами анализа собранных таким образом данных.
Несколько лет назад у меня возникла идея реализовать отслеживание подъема хлебной закваски с помощью компьютерного зрения [1]. В теории это было очень удобно, но необходимость повторять процесс для каждого кормления делала затею непрактичной, так как нужно настраивать камеру, скачивать изображения и вручную их обрезать, после чего уже прогонять через анализирующий скрипт. К тому же анализ производился только постфактум, а мне нужен был способ в реальном времени получать информацию о готовности закваски либо о времени, когда она поднялась, на случай, если нужный момент был упущен.
В прошлом году я встретил ветку на Reddit [2], а также узнал о проекте sourd.io Кристины Суну [3]. В обоих случаях авторы измеряли высоту закваски с помощью расположенного в крышке датчика расстояния. Мне это решение показалось гениальным, и я решил его повторить. Однако помимо онлайн-мониторинга я хотел также регистрировать данные с целью последующего анализа, для чего решил подключить датчик к интернету и считывать их напрямую. Сохранение на SD-карту я счел затратным и менее привлекательным в условиях современного мира, где практически все подключается по WiFi.
Если захотите собрать такое устройство сами – все файлы проекта и код доступны на GitHub [4].
Три режима: максимальный подъем/время, график и статистика
Отбор, просмотр и скачивание данных для сессии кормления
Честно говоря, этот проект занял больше времени, чем я ожидал, и порой меня даже одолевало равнодушие, полностью лишавшее мотивации его продолжать. В конечном итоге нахлынула очередная (не помню уже третья или четвертая) волна вдохновения, и я доделал-таки последние штрихи. Я рад, что не забросил начатое, потому что в итоге получил один из самых модных девайсов, какие мне доводилось собирать. Я делюсь с вами этим, потому что люди, особенно инженеры ПО, часто говорят о сторонних проектах и связанных с ними сложностях. В таких случаях мне кажется вполне нормальным уделять внимание своему душевному спокойствию и иногда просто впадать в режим «овоща» [5].
Если вас интересуют только полученные в итоге данные, можете сразу промотать к концу [6] статьи, где я визуализирую рост, температуру и влажность на протяжении нескольких недель кормлений. В противном случае продолжайте читать, и вы узнаете подробности о разработке этого узкоспециализированного, около-эзотерического кухонного гаджета.
Все необходимые компоненты я заказал с Digikey и Aliexpress, а в качестве основы для подключения задействовал монтажную плату:
Для тестирования работоспособности всех этих компонентов я написал отдельный код, после чего перешел к проектированию печатной платы, чтобы облегчить интеграцию устройства в формфактор крышки банки.
Прототип платы с готовыми модулями
Раньше я собирал устройства на макетных платах (например, контроллер приготовления продуктов методом су-вид [7] (sous vide)), но это занимало очень много времени. И поскольку я уже научился работать в KiCad, то теперь предпочитаю несколько недель подождать доставки заморских плат, особенно с учетом их дешевизны ($2 за 5 экземпляров плюс пересылка).
Макет платы и схема
Слева изображена верхняя сторона платы с дисплеем, а справа нижняя сторона с датчиками расстояния и температуры/влажности
На этом этапе мне уже не терпелось испробовать устройство в деле, поэтому я взял крышку из-под йогурта, вырезал в ней дырку и с помощью изоленты закрепил плату.
Выглядит неприглядно, зато работает
Устройство получилось достаточно работоспособным, чтобы предварительно протестировать начальный процесс, в ходе которого я также определил, что для получения реальной пользы от измерений потребуется знать следующие данные:
Все требуемые значения я получил с помощью того же расположенного под крышкой датчика и простых математических вычислений.
Значения:
Основные уравнения:
В результате я получил формулу для вычисления уровня подъема закваски в процентах.
Корпус я разработал во Fusion 360, после чего напечатал его на своем Monoprice Mini 3D [8].
Я не особо горжусь этим дизайном, так как плату мне пришлось крепить к корпусу с помощью термоклея, главным образом из-за того, что я забыл оставить на ней достаточно пространства для крепежных отверстий. При проектировании я старался добиться минимальной площади платы, чтобы снизить затраты, ради чего пришлось пожертвовать удобством интеграции.
Поскольку я не хотел припаивать модули прямо к плате, то решил использовать гнезда «мама», чтобы их в итоге можно было снимать. В связи с этим вся конструкция получилась достаточно высокой, и кнопку включения пришлось «нарастить». Мне не хотелось снова обращаться к Digikey специально ради особой кнопки, поэтому я просто приклеил к ней винт.
Все верно, это винт, приклеенный к кнопке включения
Как бы то ни было, но собралось все без проблем, и единственной заметной снаружи ошибкой стала торчащая шляпка винта. Можно сказать, что я намеренно таким образом придал конструкции стимпанковский вид.
Активная, здоровая закваска под внимательным мониторингом
Я решил использовать задачно-ориентированную архитектуру, так как реализация всего в одном конечном автомате может внести путаницу и сложности при отладке. В случае же многозадачности процессор выполняет одновременно только одну из задач, но при этом быстро между ними переключается, создавая видимость многопоточности. В других проектах я использовал FreeRTOS, но в этом случае хотел задействовать нечто более легковесное, так как не нуждался во всех примочках данной ОС.
Многозадачность выглядит как многопоточность (Source: FreeRTOS [9])
В процессе поиска я познакомился с TaskScheduler [10], кооперативным многозадачным фреймворком, который соответствовал всем моим требованиям.
Легковесная реализация кооперативной многозадачности в TaskScheduler (источник: GitHub [10])
Код был поделен на следующие задачи/файлы:
Удобство этой архитектуры в том, что каждый файл содержит менее 200 строчек кода, а четкое разделение задач упрощает разработку и отладку.
Дисплей показывает, насколько поднялась закваска, и сколько с этого момента прошло времени
После реализации архитектуры сама прошивка сложностей не вызвала. Единственной «особой» операцией стала запись высоты банки в EEPROM, чтобы она сохранялась между сессиями даже в случае отключения. Интересно отметить, что у ESP8266 нет собственной EEPROM, поэтому она эмулируется с использованием раздела флэш-памяти.
Одной из самых долгих частей проекта стала настройка подключения ESP8266 к AWS. При этом возникло множество проблем совместимости библиотек, чего следовало ожидать, так как эта микросхема была выпущена 6 лет назад (на момент разработки). Если бы я не нашел ее в своем ящике с деталями, то использовал бы ESP32, с которой наверняка возникло бы куда меньше проблем.
Если вы решите воспроизвести проект, то позвольте избавить вас от лишней головной боли. Можете воспользоваться подготовленным мной шаблоном настройки, который также доступен на GitHub [11].
Как только мне удалось настроить передачу устройством сообщений через MQTT в AWS, я настроил облачную инфраструктуру на получение и сохранение передаваемых данных. Поток получился следующий:
Архитектура AWS для простых IoT-приложений (источник: DZone [15])
Изначально я собирался использовать для визуализации данных Amazon QuickSight [16], но это предполагало ограничение скорости обновления, что для меня оказалось критическим. Вместо этого я, не страшась трудностей, создал собственную информационную панель с помощью Flask [17]и HTML/CSS/JavaScript, которая запрашивает данные из S3, используя Amazon Athena [18]. Ввиду своей чрезмерной лени я не стал выяснять, как разместить эту панель на AWS бесплатно и решил использовать Heroku [19](как делал это ранее для своего онлайн-калькулятора рецептов [20]).
После успешного подключения к облаку и настройки информационной панели можно было начинать мониторить закваску.
Основной целью мониторинга было облегчить контроль времени готовности закваски. И поскольку данные в любом случае собирались, я решил, что нелишним будет попутно провести анализ, чтобы выявить значительные детали процесса.
За несколько недель мониторинга мне удалось собрать достаточное количество информации. Интересовало же меня два основных момента:
На графике ядерной плотности, построенном для лучшего понимания данных, наблюдается некоторая кластеризация, но очевидные тенденции отсутствуют.
График ядерной плотности, показывающий распределение и кластеризацию данных. Очевидные корреляции отсутствуют
Приведенный ниже график отражает последовательность кормлений:
Примечание: горизонтальная ось немного смещена, так как в некоторые дни я делал несколько кормлений, а график предполагает, что каждое кормление происходит в отдельный день.
График кормления на протяжении нескольких недель
На графике ниже связи между длительностями подъема закваски не наблюдается. При этом нахождение закваски несколько дней в холодильнике также не оказало эффекта, что меня очень порадовало.
Статистической значимости между наиболее важными метриками не наблюдается
Судя по данным временных рядов наблюдается увеличение высоты подъема закваски от первого до последнего кормления. Вот мои наблюдения:
Примечание: я использовал расстойную камеру, в связи с чем температура и влажность сохранялись постоянными практически весь процесс ферментации. На протяжении большинства дней температура была установлена на 24С, но интересно то, что регистрировалось, как правило, около 30C. Для определения, какой из датчиков врет, нужно дополнительное тестирование.
Высота подъема, температура и влажность с течением времени
Парные графики временных рядов. Отметить здесь особо нечего, за исключением вполне ожидаемой корреляции температуры и влажности
Остальные данные о кормлении отражены на общей сводке ниже. Здесь можно обратить внимание на несколько интересных моментов, но для окончательных выводов требуются дополнительные эксперименты:
Визуализация остальных данных о кормлениях (можно нажать для полного размера)
По сути, данные показывают, что в процессе участвует много других переменных. Поэтому, чтобы все эти измерения оказались действенными, нужно проследить ряд дополнительных показателей:
Помимо этого, я хочу провести кое-какие дополнительные эксперименты:
После этого исследования можно сделать вывод, что контроль времени подъема закваски не столь важен, поскольку она остается активной в своем пике на протяжение не менее двух часов. И если придерживаться хотя бы примерно регулярного графика кормления и поддерживать относительно стабильную среду, то можно выработать уверенное понимание того, сколько времени закваске требуется на подъем. Вы также можете настроить замедленную съемку на смартфоне, чтобы пронаблюдать, как этот процесс происходит.
Вся эта затея с выпечкой была очень интересной, так как инженеры любят метрики, а в случае с хлебной закваской измерять можно очень многое. И хоть собранный мной гаджет может кому-то показаться излишним, меня порадовала точность и уверенность, которую он для меня обеспечил, избавив от лишних догадок о состоянии закваски.
Я считаю, что всех пекарей можно поделить на две категории: тех, кто готовит по ощущениям, и тех, кто пользуется кухонными весами с точностью 0.01 г. Угадайте, к каким отношусь я ;)
Я называю это чертовски хороший мякиш!
Надеюсь, что вы нашли этот проект интересным. Если же у вас возникли попутные идеи о возможных дополнительных экспериментах, то не стесняйтесь делиться ими в комментариях.
Удачной выпечки!
Автор: Дмитрий Брайт
Источник [21]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/362633
Ссылки в тексте:
[1] отслеживание подъема хлебной закваски с помощью компьютерного зрения: http://justinmklam.com/posts/2018/06/sourdough-starter-monitor/
[2] ветку на Reddit: https://www.reddit.com/r/Sourdough/comments/duhqmd/i_built_a_device_that_tracks_the_development_of/
[3] проекте sourd.io Кристины Суну: https://www.twilio.com/blog/sourd-io-is-a-fitness-tracker-for-your-sourdough-starter
[4] GitHub: https://github.com/justinmklam/iot-sourdough-starter-monitor
[5] режим «овоща»: https://www.youtube.com/watch?v=9-XkF1so5rI
[6] концу : #anchorid
[7] контроллер приготовления продуктов методом су-вид: http://justinmklam.com/posts/2017/05/sous-vide-controller/#the-controller
[8] Monoprice Mini 3D: http://justinmklam.com/posts/2017/03/mp-select-mini/
[9] FreeRTOS: https://www.freertos.org/implementation/a00004.html
[10] TaskScheduler: https://github.com/arkhipenko/TaskScheduler
[11] GitHub: https://github.com/justinmklam/aws-iot-esp266-demo
[12] AWS Lambda: https://aws.amazon.com/lambda/
[13] Kinesis Firehose: https://aws.amazon.com/kinesis/data-firehose/
[14] Amazon S3: https://aws.amazon.com/s3/
[15] DZone: https://dzone.com/articles/design-practices-aws-iot-solutions-volansys
[16] Amazon QuickSight: https://aws.amazon.com/quicksight/
[17] Flask : https://flask.palletsprojects.com/
[18] Amazon Athena: https://aws.amazon.com/athena/
[19] Heroku : https://www.heroku.com/
[20] своего онлайн-калькулятора рецептов: https://github.com/justinmklam/recipe-converter
[21] Источник: https://habr.com/ru/post/547772/?utm_source=habrahabr&utm_medium=rss&utm_campaign=547772
Нажмите здесь для печати.