Да, это точно кот, а не большой чёрный хомяк. Оказывается, некоторые кошки тоже не прочь понаворачивать круги в колесе. Владелец кота по имени 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 может питать их напрямую.

На картинке ниже все части на своих местах. Если смотреть под этим углом, магниты проходят сенсоры с правой стороны. 

Программное обеспечение

Проект Arduino на GitHub 

Основной процесс довольно прост: инициируйте прерывание каждый раз, когда на одном из пинов датчика сигнал становится высоким, и запускайте функцию обновления. Функция обновления просматривает три последних показания: а именно, порядок следования датчиков 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, который он установил в тот день, когда я включил автоматический дозатор лакомств. С тех пор кот немного остепенился.

Заключение

В целом, у меня довольно энергичный кот. Он не бенгал и не какая-то другая экзотическая порода, просто очень чёрный домашний кот.

Следующий проект в списке — автоматический дозатор лакомств, чтобы мотивировать кота на пробежки.

Комментарии (14)


  1. OldHabrReader
    05.04.2023 09:44
    +11

    Это прекрасно, а я вот понимаю, что мой кот весма активен с 4 до 6 утра! И это ужасно.

    я не понимал, что кот довольно активен с 4 до 6 утра!


  1. blik13
    05.04.2023 09:44
    +6

    как ему больше нравится крутить колесо: по часовой стрелке или против.

    Как мне кажется этот вопрос вообще чушь полная. Для кота в обоих случаях это "вперёд". Эта зависимость скорее обусловлена внешними условиями, где и как расположено колесо, с какой стороны к нему проще добраться.


    1. radioxoma
      05.04.2023 09:44

      По отношению к оси вращения планеты, как вода в сливе)


      1. RAX7
        05.04.2023 09:44
        +1

        Недавно попалось одно научно-популярное видео с интересным наблюдением: собаки справляя нужду в большинстве случаев поворачиваются носом либо на юг, либо на север. Так что, возможно и у котов есть какие-нибудь особенности и мы наконец таки узнаем, куда они так стремительно несутся в 4 утра - на север или на юг =)
        https://www.youtube.com/watch?v=nbJX6m9lzcM&t=98s (1:38)


        1. FLii
          05.04.2023 09:44
          +1

          собаки справляя нужду в большинстве случаев поворачиваются носом либо на юг, либо на север

          На восток мой всегда смотрит. Дело в том, что мы с ним подходим к месту, где он обычно делает это, с запада.

          Согласен с тем, что направление зависит от расположения объекта.


  1. hogstaberg
    05.04.2023 09:44
    +6

    Генератор нужно к колесу приделать, пусть с пользой бегает!)


    1. iig
      05.04.2023 09:44
      +3

      Генератор нужно к колесу приделать

      Кормушку!


      1. Javian
        05.04.2023 09:44
        +2

        и телеграм бота


    1. edogs
      05.04.2023 09:44
      +10

      А через полгода здесь же на хабре статья "достаточно ли 40 котов в колесе для обогрева загородного дома"©

      Рационализатор, Жванецкий

      Зарядку себе придумали, лишь бы не работать! Лишь бы дурака валять! Здоровый бугай поднимает гири впустую — воздух перемешивает. Пускай камни таскает или вагонетки с углем. И платить ему не надо: он же за гири денег не берет!

      Если весь народ по утрам вместо гирь будет яму копать, знаете, какая колоссальная экономия будет?! А если другие туда воды накачают и гусей пустят… На каждого получится по два гуся.

      Я ж не один день думал!

      А этот футбол — двадцать два бугая мяч перекатывают. А если им вместо мяча дать каток, они ж за полтора часа все поле заасфальтируют. А зрители еще по рублю дадут. Бешеные деньги пойдут.

      А марафонца видали? Страус. Сорок километров дает бегом. Его кто-нибудь использует? Он же бежит пустой! А если он почту захватит или мешок крупы в область? У нас же составы освободятся. Я уже не говорю про штангистов. Человек полтонны железа поднимает и обратно кладет. Так дайте ему груз, чтоб он его наверх подавал. Бочки с селедкой, раствор, ящики с кирпичом пусть выталкивает. И рекорды ставь: ты — две бочки, я — четыре, чемпион мира — шесть!

      Кто у нас остается? Артисты, художники, ревматики, склеротики и прочий боевой отряд физически недоразвитых людей. Их надо использовать на тонких работах. Вот балерина — крутится. Крутится, крутится, аж в глазах рябит. Прицепить ее к динамо — пусть ток дает в недоразвитые районы. А ты, иллюзионист, у тебя из пустого ведра курица вылетает. Иди, обеспечивай народ курями. Ведра у всех есть, курей не хватает. Тебе каждый спасибо скажет, если честно будешь работать. А писатель пишет. Ходит туда-сюда, обдумывает. Что он там напишет, никому не известно, а пока ходит — прицепить к нему рычаг, пускай воду качает. Хоть какая польза будет…

      Вот так каждого использовать. Такое будет! Такое состояние благо. Такой прогресс. Такой урожай. Вместо голубей этих дурных на крышах индюки будут сидеть, и тогда сразу вперед скакнем. Я ж не один день думал, что, я дурак?!


      1. GeorgKDeft
        05.04.2023 09:44

        Ну если совместить с питанием автоматической кормушки, то можно на время отъезда не переживать за питание кота(не станет жирным сожрав все, и будет чем заняться периодически)


  1. bugigugi
    05.04.2023 09:44

    " Должен признаться: я использовал ChatGPT, чтобы в нём разобраться!". Кто-нибудь знает подробности?


    1. radroxx
      05.04.2023 09:44

      Я могу только предположить. Я один раз писал на Google apps простое приложение и там честно говоря api не самое простое а документация отвратительная. Человек скорей всего попросил chatgpt написать приложение которое из post запроса будет вставлять данные в xls и просто заиспользовал этот код что бы не вникать в документацию, а просто поправить пару мелких недочетов и получить нужный функционал.


  1. Iv38
    05.04.2023 09:44
    +3

    А если магнитики клеить разными полюсами и снимать сигнал с аналогового пина, то, наверное, можно было скорость и направление одним датчиком узнавать?
    Кот красивый.


    1. foxin
      05.04.2023 09:44

      у неодимовых магнитов полюса на "плоских" сторонах, то есть потребовалось бы клеить магнит "ребром", что не очень удобно (если бы были пазы, куда можно вложить магнит ребром - то да, хороший вариант)
      или ставить не один магнит, а два подряд, при этом разными полюсами к датчику.
      но всё это усложнения, которые не факт что дадут достаточно профита.