Да, это точно кот, а не большой чёрный хомяк. Оказывается, некоторые кошки тоже не прочь понаворачивать круги в колесе. Владелец кота по имени Cygnus (Лебедь) решил немного усовершенствовать кошачье беговое колесо и прикрутил к нему систему мониторинга. Рассказываем, как работает устройство и какие интересные факты о кошачьей активности можно из него извлечь.
А на что вы готовы ради своих котиков?
Кот в колесе. Начало
Это колесо One Fast Cat я получил от подруги, которая не смогла научить своих кошек им пользоваться. Лебедь молод, активен и падок на угощения, поэтому заставить его бегать в колесе было несложно.
Мне очень хотелось выяснить, до какой скорости он разгоняется (спойлер: почти до 22,5 км в час), как часто он бегает и как ему больше нравится крутить колесо: по часовой стрелке или против.
Аппаратное обеспечение
Система довольно проста. Сначала я приклеил маленькие магниты к пластиковым деталям на внешней части колеса:

По всей окружности колеса расположено 16 пластиковых зажимов, но в силу лени я использовал только 8 из них. Серебряный диск — это магнит, закрепленный на термоклей. Чтобы зафиксировать момент прохождения магнита я использовал пару датчиков 3144E Hall-effect:

Технически, для измерения скорости мне нужен был только один датчик. Но я хотел измерять ещё и направление, а датчики всё равно дешевые. Идея проста: два датчика расположены близко друг к другу, а магниты (относительно) далеко друг от друга. Если при прохождении колеса мы получаем сигналы AB——AB——AB, то колесо движется в одном направлении. Если BA——BA——BA, то в другом направлении.
Вот полностью собранная система:

Штука, похожая на стул, надевается на одну из опор колеса. На неё установлен ESP8266, который я использовал в качестве контроллера, а также небольшой угловой элемент, мимо которого будут проходить магниты. Все детали регулируются, чтобы установить разумное расстояние до магнитов (я выяснил, что нормальным будет 5-10 мм). Файлы STL для 3D-принтера прилагаются: база NodeMCU , кронштейн для датчика и платформа для датчика.
Входные данные для чипа ESP берутся с цифрового пина выхода (D0) каждого датчика; помимо этого требуются только питание и заземление. Датчики потребляют так мало энергии, что ESP может питать их напрямую.
На картинке ниже все части на своих местах. Если смотреть под этим углом, магниты проходят сенсоры с правой стороны.

Программное обеспечение
Основной процесс довольно прост: инициируйте прерывание каждый раз, когда на одном из пинов датчика сигнал становится высоким, и запускайте функцию обновления. Функция обновления просматривает три последних показания: а именно, порядок следования датчиков A-B-A или B-A-B. Когда среднее значение находится в верхнем 75-м процентиле времени между первым и последним прерыванием, вполне вероятно, что последние два показания являются одним и тем же магнитом, проходящим мимо датчиков в том или ином направлении.
Когда у меня есть модель A——BA или B——AB, я могу просто посмотреть на последнее показание, чтобы определить направление (по часовой стрелке или против часовой стрелки), а ещё могу определить скорость, глядя на разницу во времени между первым и последним показаниями (от A до A или от B до B). Окружность колеса около 3,4 м, то есть длина каждого отрезка составляет 425 мм (напомню, что я использовал 8 магнитов, распределённых по окружности), так что мне просто нужно разделить это значение на время, чтобы получить скорость. Если время составило, скажем, 250 мс, то Лебедь двигался со скоростью 425мм/250 мс = 1,7 м/с или 6,1 км в час.
Попутно я немного обработал данные, получив пиковую скорость, общую продолжительность и простую гистограмму результатов.
Я хотел хранить данные в легкодоступном месте. Для этой цели я использовал скрипт Google Apps, он позволяет добавить каждый запуск в новую строку электронной таблицы. Должен признаться: я использовал ChatGPT, чтобы в нём разобраться! Я достаточно хорошо знаю Javascript, но не API Google. Это сработало, и я смог настроить шаблон сценария. Я пишу строку JSON и размещаю ее на URL-адресе «веб-приложения». Самым сложным было получить поддержку SSL, работающую на чипе ESP; в конце концов я обнаружил, что BearSSL справился со своей задачей. Сценарий приложения таков:
function doPost(e) { var param = JSON.parse(e.postData.contents); var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("log"); var date = new Date(); if (param.message == 'startup') { var misc = "host=" + param.name + " buildDate=" + param.build.date + " buildTime=" + param.build.time; sheet.appendRow([date, param.message, '', '', '', '', '', '', '', '', '', misc]); } else if (param.message == 'run') { sheet.appendRow([ date, param.message, param.speed.peak_mph, param.speed.ave_mph, param.dir, param.dur, param.histo['80-100'], param.histo['60-80'], param.histo['40-60'], param.histo['20-40'], param.histo['0-20'], misc]); } else if (param.message == 'test') { sheet.appendRow([date, param.message, '', '', '', '', '', '', '', '', '', param.misc]); } else { sheet.appendRow([date, 'unknown', '', '', '', '', '', '', '', '', '', e.postData.contents]); } return ContentService.createTextOutput(JSON.stringify({ status: 'success' })).setMimeType(ContentService.MimeType.JSON); }
О, и на ESP есть небольшой telnet-сервер с несколькими простыми командами. Легко реализовать с использованием библиотек Arduino.
Результаты
Этот кот много бегает! Вот типичный небольшой всплеск активности:
|
Время |
Сообщение |
Пиковая скорость (миль/час) |
Cредняя скорость (миль/час) |
Направление |
Продолжительность |
Гистограмма 80-100 |
Гистограмма 60-80 |
Гистограмма 40-60 |
Гистограмма 20-40 |
Гистограмма 0-20 |
|
14.02.2023 11:48:35 |
бег |
6.840 |
2.132 |
по часовой стрелке |
9.300 |
6.335 |
4.320 |
3.128 |
2.222 |
0,959 |
|
14.02.2023 11:48:52 |
бег |
6.555 |
2,182 |
по часовой стрелке |
9.086 |
5.800 |
4.495 |
3.103 |
2,178 |
1,016 |
|
14.02.2023 11:49:20 |
бег |
10.042 |
2,775 |
по часовой стрелке |
13.266 |
9,563 |
6.516 |
4.200 |
2,788 |
1,093 |
|
14.02.2023 11:49:38 |
бег |
5.274 |
1,788 |
по часовой стрелке |
5.281 |
5.230 |
4.291 |
2,728 |
1,783 |
0,692 |
|
14.02.2023 11:50:04 |
бег |
4.627 |
2.124 |
по часовой стрелке |
4.445 |
4.168 |
3,666 |
2.291 |
1,781 |
1,185 |
Как видите, забеги не очень продолжительные — обычно около 5-10 секунд за раз. Но пока он в среднем делает около 50 пробежек в день. Бегать предпочитает по часовой стрелке, но не всегда; соотношение сейчас примерно 2/3.
Следующие данные представлены в режиме реального времени, поэтому выводы ниже могут быть устаревшими.

Лебедь, кажется, совершает много медленных прогулок со скоростью 3-5 км в час, но есть много хороших спринтов > 21 км/ч. Я видел и 24 км/ч в предыдущих данных.
Я сова (сплю примерно с 3:00 до 11:00), и вы можете видеть, что Лебедь в основном начинает бегать сразу после того, как я ложусь спать и после того, как просыпаюсь (чаще последнее). Пока не увидел данные, я не понимал, что кот довольно активен с 4 до 6 утра!
Лебедь обычно совершает довольно короткие пробежки, хотя есть и достаточно длительные прогулки. В любом случае, кошки не созданы для марафонов.
Большинство коротких пробежек — от 5 до 15 секунд. Но некоторые длятся больше минуты!
Когда я писал это, Лебедь предпочитал бегать по часовой стрелке примерно 60% времени, а 40% — против.
Наконец, количество пробежек в день: на данный момент это около 50, хотя и с некоторыми отклонениями. Его текущий рекорд — 118, который он установил в тот день, когда я включил автоматический дозатор лакомств. С тех пор кот немного остепенился.
Заключение
В целом, у меня довольно энергичный кот. Он не бенгал и не какая-то другая экзотическая порода, просто очень чёрный домашний кот.
Следующий проект в списке — автоматический дозатор лакомств, чтобы мотивировать кота на пробежки.

ссылка на оригинал статьи https://habr.com/ru/articles/727106/
Добавить комментарий