[recovery mode] DIY таймер кормления кота на Arduino Mega
Извинения за неподходящий хаб
Изначально статья писалась под «неделю DIY» в соответствующем хабе, но поддержка сказала мне что ардуино это не DIY, а удалять написанное было жалко. Мне показалось что этот хаб наиболее подходящий, если я не прав — исправлюсь.
Я разработчик, в то время работал в небольшой «компании одного продукта», пилил что-то типа ERP, посвященной ремонту больших парков грузовиков-бульдозеров-экскаваторов, учету съеденных на этот ремонт клиенских денег и контролю затраченного на него времени.
Как водится, у меня есть кот. Это не дань моде: коты у меня живут всю жизнь. И всю жизнь коты хотят есть (а некоторые даже ЖРАТЬ) что не проблема, когда ты живешь один и всегда знаешь, что ты либо уже покормил кота, либо еще нет — промежуточных состояний в этой системе не бывает.
Но когда ты живешь с семьей, ты замечаешь, что кот все реже запрыгивает к тебе на стол дабы помочь в отладке, а когда отрываешься от компа налить чай себе и насыпать котокорма коту, внезапно оказывается, что пушистый бро мирно спит и не реагирует на условный звук-хэндшейк насыпаемого корма.
Все ясно: кто-то недавно его покормил. Скорее всего потом потом кто-то еще покормил. А потом еще и ты. А потом…
А потом внезапно ШЕСТЬ КИЛОГРАММ и порванные связки на обеих задних лапках
Итого нам нужно как-то похудеть кота и упорядочить его режим кормления. Жена взяла у выросшей дочери ее игрушечные часы с ручным приводом, стрелки которых мы ставили на время последнего кормления, затем при каждом визите на кухню было необходимо к этому времени добавить в уме четыре часа и, взглянув на обычные часы, вычислить, наступило ли время следующего кормления, или же это «мяу» означает «авось прокатит»?
Ах да, откуда взялись четыре часа…
По некой «старой школе» считается, что кошек нужно кормить два раза в сутки: утром и вечером. Я видел много видосов с процессом кормления в питомниках: входит человек со жрачкой, не успевшие проснуться коты ссыпаются с лежанок, с жалобным мявом берут его в кольцо, жадно ловят еду, прыгают друг на друга, бегут по головам друг друга, топчут более слабых, мяв, драки… Неужели вам их не жалко? Плюс такая скорость поедания отнюдь не способствует ни их пищеварению, ни уровню счастья внутри отдельно взятого кота…
Каким-то образом мы вместе с нашим ветом пришли к тому, что каждые четыре часа (этот интервал также рекомендован человекам) будет ненапряжно нам и хорошо коту, кот с этим планом согласился (точнее ему пришлось) и последние полчаса-час стабильно дежурит на кухне (видимо его внутренние часы спешат) . Единственно что напрягало — необходимость каждый раз высчитывать время вручную.
Первоначально была идея купить автоматическую кормушку, коих на алиэкспрессе на любой вкус, но внезапно откуда-то в меня залетела мысль, что если коты будут кормиться на полном автомате, они напрочь потеряют связь с человеком. Если жрачка в кормушке будет появляться сама собой, то даже в самой-самой пушистой котовьей голове эта магия не сработает и не свяжется с наличием присутствия человека в процессе. То есть коты на полном серьезе будут считать, что жрачка валится с неба и что мурмировать на коленках у человека теперь вовсе необязательно.
Допустить такого демарша было никак нельзя, но я же у мамки программист…
Посоветовался с друзьями, решили что Ардуино для такой задачи в самый раз, плюс пощупать новый язык — отдельное удовольствие. Долго выбирал систему ввода-вывода: то кнопки и светодиоды, то дисплейчик для часов и опять же кнопки, но я вдруг наткнулся на алеэкспрессе на вот такой бутерброд:
Ардуино Мега для такой задачи — слегка оверинжиниринг, но подкупило то, что не нужно возитсья с кнопками, что можно использовать тачскрин, что на дисплее можно нарисовать любую картинку и подвигать ее, а уж закорпусить все это дело в единственный корпус — да как два байта переслать. И плюс имеющий 3D-принтер друг обещался помочь.
Хе-хе…
Ага, щас. Корпус как обычно оказался самым сложным элементом конструкции, а друг не помог… Итого корпус получился самым позорным местом проекта, а переделывать уже поздно: я выпилил отверстие в фасаде кухонного шкафа и корпус теперь навечно прописался там.
Скетч для ардуины не представляет собой ровным счетом ничего интересного. Знай считай минуты и через энное колво отнимай одну полоску «зарядки» с дисплея. Единственное, чем я заморочился — модулем более точных часов, но как оказалось, сделал это совершенно зря: с модулем часы ардуины уходят примерно так же, как и без него.
На дисплее ардуины изображение кота изначально закрашено полосками зарядки как на всем известной пиктограмме батарей-аккумуляторов. Всего таких полосок восемь и каждые полчаса их становится на одну меньше. Когда полосок не остается, звучит сигнал и кот, обгоняя идущего на кухню человека, встречает его у миски с той или иной степенью озабоченности на морде лице. По ночам сигнал не раздается и кот автоматически переходит в аварийный режим «наташа вставай».
Из-за сбоев в котовьем BIOS иногда случается так, что кот дежурит у миски когда остается последняя полоска и в первой версии таймера было невозможно понять, осталось ли до кормления 20 минут или всего 5. Для этого во второй версии таймера в течение последней получасовки отображается колво оставшихся до кормления минут и человек заранее знает, пора или нет.
Покормив кота, человек нажимает зеленую кнопку и кот (не который пушистый, а его экранная копия) закрашивается полосками зарядки полностью. Альтернативный случай — когда кота слегка подкормили вкусняшкой, нажали рыжую кнопку и ко времени добавилось еще полчаса, после чего цикл продолжается снова.
Самый позорный момент в проекте — корпус. Мне так и не удалось найти подходящий на 146% кейс, а мой друг, изначально обещавший помочь решить этот вопрос на своем 3D-принтере, слился и мне пришлось купить абы что.
Ну и ладно… главное что кот накормлен!