Коты и кошки по своей природе воды пьют не очень много, из-за чего могут иметь в зрелом возрасте проблемы с почками. Есть разные рекомендации, как можно стимулировать своего питомца пить больше и одна из них – автоматические поилки-фонтаны, где водичка постоянно бежит, создавая эффект «свежести» и, таким образом, привлекая кота. Сегодня речь пойдет именно о такой поилке и о том, как можно сделать её тише с помощью паяльника, микроконтроллера и небольшой программы.
Содержание
Кошки и вода
Выбор фонтана
Коробка, детали фонтана, внешний вид
Сборка и включение
Эксплуатационные характеристики
Разборка насоса
Снижение шума насоса
Программная часть
Тестирование
Реакция кота
Выводы
Кошки и вода
Ответы на вопросы, почему кошки мало пьют, насколько важна вода для их организма и другие подобные можно в большом количестве с легкостью найти в интернете. Поэтому остановимся лишь на главном – как стимулировать кошку пить больше. Я слышал о следующих способах:
- Часто менять воду и мыть миску, чтобы она всегда оставалась чистой. Во время питья с языка кошки в миску попадает достаточное количество бактерий, поэтому желательно обновлять воду достаточно часто, чтобы бактерии не успевали размножаться.
- Расположить миску с водой в отдалении от миски с едой. Кошки подсознательно считают, что остатки еды гниют и загрязняют почву, и, таким образом, пить рядом со своим «обеденным столом» не стоит. Перенос водяной миски на несколько метров может дать кошке ощущение, что вода там чище и, таким образом, стимулировать её пить больше.
- Использовать автоматические поилки-фонтанчики, где вода постоянно бежит, создавая эффект речки или водопада. В природе такие источники зачастую более чистые, поэтому кошки гораздо охотнее пьют воду из них. Именно поэтому некоторые кошки так любят пить воду из под крана и бегут в ванну или на кухню, как только слышат звук журчащей воды.
Сегодня я расскажу именно о последнем варианте – автоматической поилке. Но если вы не готовы к лишним расходам (или не считаете это целесообразным по каким-либо другим причинам), можете посмотреть, насколько близко стоят у вас миски с едой и водой и подумать о варианте номер 2. Для вас это будет несложно, а эффект принести может – с предыдущим котом я этого нюанса не знал и постоянно удивлялся, почему кот хотел попить откуда угодно, но только не из своей миски – из замоченной посуды, стоящей в раковине, из оставленного в ванне тазика с водой и т.д.
Поэтому теперь я разместил миску водой в коридоре, тогда как миска с едой стоит на кухне. Не могу утверждать на 100%, что это прямо «работает», но пока что кот в попытках попить из «неаккредитованных» источников замечен не был. Хотя, конечно, тут многое зависит от самого животного.
Выбор фонтана
Но вернемся к фонтану. В целом, кот вроде бы пьет достаточное количество воды, однако, последнее время всё чаще и чаще в разных местах стала появляться информация о питьевых фонтанчиках и о том, как они нравятся животным, так что и мы решили попробовать. Сначала хотели сделать коту подарок на Новый Год, однако процесс выбора фонтана затянулся и появился он у нас только во второй половине февраля. Выбор пал на «героя обзора» по нескольким причинам:
- Достаточный объем для одного-двух котов (хотя, практически все фонтаны на рынке сейчас отвечают этому требованию).
- Питание от низковольтного адаптера, исключающее возможность поражения животного током.
- Хорошие отзывы и видео, где было бы сказано или показано, что работает фонтан достаточно тихо.
- Использование пищевого пластика при изготовлении корпуса.
- Простая конструкция фильтра, позволяющая или полностью исключить его, или делать фильтры самому.
- И еще один важный критерий: в случае отключения электричества или любой другой остановки насоса фонтана оставшаяся вода должна быть максимально доступна животному для питья. И вот по этому пункту данный фонтан сильно выигрывает у других моделей, где при отключении насоса животному остается лишь небольшое количество воды, сохранившееся в верхней чаше.
Коробка, детали фонтана, внешний вид
Итак, встречаем – Feed-ex Spring 1.8 литра. Фонтан поставляется вот в такой коробке:
Внешний вид у фонтана, на мой взгляд, так себе – это прямо небольшая серая ванна. И по этому параметру фонтан проигрывает многим своим стильным и модным конкурентам. Но нам-то не внешний вид в первую очередь важен, так что продолжим.
Основные характеристики
с сайта производителя:
- Емкость 1.8 литра.
- Питание от низковольтного адаптера 12 В.
- Низкое потребление энергии, низкий уровень шума.
- Длина провода 2 м.
- Регулируемый напор подачи воды.
- Сменный многоуровневый угольный фильтр.
- Цвет – серый/белый.
- Габариты поилки в собранном виде: 27х21х12см.
Откроем коробку и посмотрим, что лежит внутри. Прежде всего, это нижняя часть фонтана или «миска»:
На ней есть риска «Low», показывающая минимально допустимый уровень воды, а сама миска изготовлена из полипропилена – так что здесь не обманули, это один из «лучших» пищевых пластиков – из него сделано большинство контейнеров для хранения и подогрева еды, а также современные водопроводные трубы.
В миске уже находится насос, провод от которого пропущен наружу через специальное конструктивное решение и прижат белой заглушкой из мягкого материала. Сам насос погружного типа (то есть, работающий полностью под водой), его модель TP-180LV. На насосе также указаны его характеристики – 12 В, 50 Гц, 2 Вт и ссылка на сайт китайского производителя
http://skyish-zs.com/.
На сайте модели насоса с буквами LV нет, но есть похожая
TP-180/TP-180A, для которой указаны следующие характеристики:
- Размеры: 40 x 35 x 30 мм
- Выходное отверстие: 1/2 дюйма
- Поток: 180
- Наличие регулировки потока: да
- Мощность: 2 Вт
- Водонепроницаемость: IPX8
- Сертификация: CE/GS/BS/UL/CUL/SAA
Таким образом, мы имеем полностью водонепроницаемый китайский насос переменного тока на 12 В 2 Вт с регулируемым потоком до 180 каких-то единиц (скорее всего, литров в час) и сертифицированный по каким-то стандартам CE/GS/BS/UL/CUL/SAA (если кто знает, что это такое – напишите в комментариях). То, что насос переменного, а не постоянного тока, на мой взгляд, весьма хорошо. Значит, в его моторе нет никаких щеток и, соответственно, никакой коммутации. А для устройства, работающего полностью под водой это очень важно. Также такие двигатели служат дольше, от них меньше электрических помех и, возможно, шума. К сожалению, тип пластика, из которого сделан насос на корпусе не обозначен, но у меня есть некоторые сомнения, что он пищевой. Те же сомнения у меня есть и на счет материала провода, подводящего к насосу питание (а ведь часть его оказывается в воде). Опять же, если кто знаком с темой аквариумных насосов лучше – напишите в комментариях.
Насос регулируемый – на одной из боковых сторон, через которую осуществляется забор воды, есть ползунок, перемещая который можно прикрывать или наоборот открывать входное отверстие и, таким образом, изменять производительность насоса. Входное отверстие расположено в центральной части насоса, так что в теории фонтан должен продолжать нормально работать, пока вода не опустится до этого уровня. Разборка насоса для чистки возможна и будет показана далее.
С нижней стороны насоса расположены три присоски, с помощью которых он фиксируется на дне миски (кстати, фиксируется весьма надежно). Длина провода насоса – 1.7 метра.
В миске для насоса есть посадочное место, ограниченное с трех сторон пластиковыми уголками, поэтому положение насоса не надо угадывать, и правильно его установить труда не составляет. Почему производитель сделал только три, а не четыре уголка-ограничителя – вопрос. Наверное, он решил, что так будет проще снимать насос для чистки. Размеры миски — 270х205 мм:
Следующая часть поилки – верхняя крышка белого цвета:
Сделана она из пластика типа 7 (Other):
Интернет говорит, что в большинстве случаев это поликарбонат и он тоже допустим для пищевого использования. Почему производитель не сделал верх также из полипропилена, чтобы не надо было гадать, можно ли его применять для пищевых целей или нет – еще одна загадка.
Также в верхней крышке с заднего края есть отверстие, закрываемое вот такой заглушкой:
И предназначено оно якобы для… долива воды в поилку! Почему я не могу просто взять и долить воду в миску (спойлер:
могу) и должен использовать это отверстие – следующая загадка производителя. Может быть, конечно, это отверстие наделено более сложными функциями по замыслу производителя, но я пока что таких не нашел. В прямой контакт с водой заглушка не входит, так что её материал не очень важен с точки зрения безопасности.
Далее у нас в комплекте идут две насадки – «фонтанчик» и «ручеек», вставляющиеся в верхнюю крышку поилки:
Следующий элемент – прямоугольный угольный фильтр размерами 115х58.5х4 мм (4 мм – толщина фильтра в посадочных местах, в середине фильтр толще). По регламенту фильтр следует менять не реже, чем раз в месяц, однако в инструкции сказано, что фильтр – это дополнительный аксессуар, и, в принципе, поилку можно эксплуатировать без него. Простая прямоугольная форма фильтра также поможет (в случае необходимости) сделать его самому из «подручных» материалов.
(И да, это тот самый пластиковый штангенциркуль из «Фикс-прайса» за 250 рублей, и работает он вполне нормально, если не давить на него со всей силой)
Наконец, адаптер питания SKYISH SKY35V12200 12 В, 200 мА, 2.4 ВА
Адаптер питания неразборный и достаточно тяжелый по сравнению с «обычными» телефонными зарядками, но, тем не менее, вполне компактный. Очевидно, что внутри находится сетевой трансформатор на 50 Гц – надо будет еще проверить, как будет себя вести адаптер при длительной непрерывной эксплуатации, т.к. китайские сетевые трансформаторы зачастую намотаны с экономией каждого лишнего витка, из-за чего могут весьма сильно нагреваться. На выходе адаптера установлен стандартный разъем, скорее всего 2.1х5.5х10 мм.
Последним элементом, идущим в комплекте поилки является инструкция. Она тут на русском языке, и в ней нет ничего необычного.
Сборка и включение
Итак, с осмотром закончили, давайте соберем поилку. Процесс сборки очень простой и пошагово описан в инструкции. Начинаем с установки насоса на свое место в миске, затем устанавливаем угольный фильтр. Его следует ставить темной стороной к насосу:
Здесь следует отметить, что из-за конструкции установочных пазов фильтра снизу под ним остается узкая щель, позволяющая воде протекать напрямую:
Наконец, мы устанавливаем верхнюю крышку на миску, выбираем одну из насадок, наливаем в фонтан воду и включаем адаптер в розетку (кстати, чтобы вода поднялась до отметки «Low», необходимо залить не менее 0.5 литра). И, вуаля, у нас получается что-то такое:
Это максимальная производительность насоса. На ней струя получается такая большая, что долетает до той части миски, где находится основная вода, поэтому брызгается и шумит. Уменьшим поток до минимума:
И он становится настолько мал, что даже не бьет из фонтанчика, а лишь только стекает небольшой струйкой вниз. Промежуточные положения ползунка на насосе позволяют гибко настроить длину «струйки» таким образом, чтобы она попадала на наклонную поверхность крышки, за счет чего не брызгалась и практически не производила шума, в этом плане мощность насоса подобрана очень удачно.
Давайте попробуем другую насадку – «ручеек». С ней в поилке образуются два небольших ручейка, стекающие по боковым углублениям крышки:
В принципе, тоже неплохо, но «фонтанчик» мне нравится больше.
Эксплуатационные характеристики
Как я уже писал ранее, для достижения уровня «Low» в миске, в неё необходимо залить пол литра воды. То есть, при смене воды (а это следуют делать достаточно часто, например, раз в два дня) такой объем питьевой воды придется выливать в канализацию.
Длина провода насоса – 1.7 м. Но часть этого провода теряется на выходе из миски, так что реально возможное расстояние от розетки составит около полутора метров. Насос переменного тока, поэтому питать его от каких-либо «банок силы» без применения дополнительного оборудования не получится. Потребление адаптера без нагрузки составляет около 2.3 Вт и оно немного меняется в зависимости от сетевого напряжения. Следует понимать, что эти 2.3 Вт идут исключительно на нагрев адаптера. Остальные параметры потребления видны на фотографии:
В принципе, 2.3 Вт – не так уж и много, в связи с чем при постоянной эксплуатации внешний нагрев адаптера умеренный. Однако, это намного больше, чем у современных импульсных зарядок от телефонов. Потребление фонтана при работе – 4.7 Вт. Не так уж и много, но, если кому интересно, это 113 Вт⋅ч в сутки или 3.4 КВт⋅ч в месяц. При цене одного киловатт-часа в 6 рублей эксплуатация такого фонтана обойдется вам в 20 рублей в месяц с точки зрения затрат на электричество.
Потребление фонтана без воды чуть выше – 5.15 Вт, то есть, на насосе в этом случае рассеивается порядка 2.85 Вт тепла. Да, насос нагреется, но из строя от перегрева не выйдет. Но не следует забывать, что обычно в насосах такого типа вода еще является смазкой, так что долговременно эксплуатировать фонтан без воды, скорее всего, не стоит. И, да – никакого автоматического отключения поилки при снижении уровня воды не предусмотрено.
Шум от фонтана состоит из двух составляющих – шума текущей воды и шума самого насоса. Шум воды целиком зависит от выбранной производительности насоса и на минимальных режимах практически не слышен даже в непосредственной близости от фонтана. А вот с шумом от насоса не всё так хорошо, как хотелось бы – его явно слышно даже за несколько метров. Основная составляющая шума – это некое «дрожание» или «вибрация» с частотой сети, но на более высоких гармониках.
Громкость шума такова, что если вы установите фонтан на кухне, то в рядом расположенной спальне ночью слышно его уже, скорее всего, не будет. Но вот если долговременно находиться непосредственно рядом с фонтаном, шум начинает раздражать и фонтан приходится отключать. Поэтому, чтобы снизить уровень шума, было принято решение замедлить насос фонтана, но об этом чуть позже.
Разборка насоса
Насос фонтана разборный, и это очень хорошо, т.к. периодически его следует разбирать и промывать от накопившейся там «слизи» (а она, по-любому, будет). Итак, для начала необходимо снять внешнюю крышку с той стороны, где у насоса находится входное отверстие и ползунок регулировки производительности. Затем вытащить сам ползунок и снять направляющий воду кожух. После этого можно вытащить ротор мотора, который одновременно является и винтом насоса. В картинках этот процесс выглядит так:
Ротор-винт отдельно:
На задней части ротора находится диаметрально намагниченный магнит, образующий на роторе два полюса. Граница между ними отчетливо видна на магнитном индикаторе:
И вот тут выясняется одна интересная деталь использованного мотора – его направление вращения может меняться от включения к включению! Это не оказывает влияние на работу фонтана, т.к. насос работает за счет центробежной силы, однако немного влияет на уровень шума. По какой-то причине мотор в одну сторону крутится чуть тише, чем в другую.
Размеры выходной втулки насоса показаны на следующих фото. Откуда производитель взял там пол дюйма – непонятно.
DISCLAIMER
Внимание! Дальше пойдет диайвай, пайка, программирование и микроконтроллеры. Если вам это не интересно, можно сразу перейти к разделу
«Реакция кота».
Снижение шума насоса
После пары дней эксплуатации поилки был сделан вывод, что шум насоса чрезмерный и мешает нормально работать, если сидеть недалеко от неё. Т.к. на насосе есть регулятор потока, который просто закрывает часть входного отверстия, и он стоит в положении, находящемся ближе к минимуму, напрашивается вывод, что можно просто снизить обороты насоса, а входное отверстие открыть полностью. Это должно уменьшить шум.
Но примененный в насосе двигатель – синхронный, и простое уменьшение питающего напряжения на нем никаким образом на обороты не влияет (если, что – проверено с помощью ЛАТРа). Здесь нужен частотный преобразователь. Например –
такой. Но кто же в здравом уме будет ставить такую вещь на поилку? Да и входной трансформатор явно не обрадуется снижению частоты. Но можно сделать низковольтный частотный преобразователь, устанавливаемый непосредственно перед насосом. В простейшем случае – это генератор синусоидального сигнала и усилитель напряжения. Частота сигнала – низкая, поэтому вполне подойдет любой усилитель мощности низкой частоты, способный отдавать в нагрузку 2 Вт.
Сначала я хотел собрать простой генератор на ОУ на основе
моста Вина, а в качестве усилителя использовать пару TDA2030 (для создания достаточного по амплитуде выходного напряжения нужно или иметь напряжение питания более 30 В, или использовать мостовую схему), но столкнулся с «упрямством» последних и решил, что это не наш путь.
Проанализировав возможные варианты, были приняты следующие решения. Во-первых, пусть генератор сигналов будет цифровым (
DDS) – это позволит получить неискаженную форму сигнала с постоянной амплитудой во всем диапазоне рабочих частот без какой-либо настройки. Во-вторых, пусть и усилитель напряжения будет цифровым – это позволит максимально повысить КПД устройства, минимизировать габариты и исключить лишний нагрев компонентов. Ну, а применение микроконтроллера позволит (при необходимости) добавлять в работу устройства какую-либо сложную логику, расписание, интеграцию со смартфоном, умным домом и, возможно, Skynet.
Сначала я хотел выполнить все на ESP8266, т.к. на данный момент это один из наиболее дешевых МК с весьма неплохими техническими характеристиками. Но потом подумал, что написание качественной прошивки, реализующей кучу разных функций – таких как включение/выключение по расписанию, синхронизация времени с интернетом, полноценная настройка всего этого через браузер, обновление по WiFi и т.д. – займет немало времени. Плюс, поилка может временно эксплуатироваться там, где WiFi попросту нет, поэтому ручное управление с кнопок реализовывать придется всё равно. Ну, и, прежде всего, надо понять – а насколько нужна вся эта автоматизация? Может быть, можно просто уменьшить частоту вращения двигателя и оставить поилку постоянно включенной?
Поэтому было принято решение сначала сделать MVP, с помощью которого можно было бы просто изменять скорость вращения мотора, а дальше уже посмотреть, что из этого выйдет. ТЗ на MVP:
- Простой DDS-генератор с изменяемой в небольших пределах частотой и амплитудой выходного сигнала
- Цифровой усилитель мощности
- 8-разрядный цифровой экран на MAX7219 для отображения текущих параметров
- Энкодер для их изменения
В качестве платформы изначально хотел взять обычное Arduino Uno, но потом выяснил, что все имеющиеся ардуины сейчас задействованы в каких-то проектах, зато есть «голые» микроконтроллеры ATtiny85, возможностей которых, в принципе, должно хватить для задачи. Еще на этом этапе один камень попал-таки в «огород» ESP8266 – оказалось, у него нет аппаратной PWM, и всякие analogWrite реализованы полностью
программно с использованием «плавающего» прерывания таймера.
Итак, что можно сказать об ATtiny85?
- Ядро Atmel AVR
- 8 КБ ПЗУ
- 512 байт ОЗУ
- 512 байт EEPROM
- 16 МГц от встроенного генератора
- 6 I/O pins, из которых в реальных приложениях удобно использовать только 5 (6-й пин – это Reset и его использование требует программатор на 12 В)
- 8-bit таймер с PWM, 2 выхода
Когда-то давно я думал сделать на ATtiny85 плеер музыки с ZX-Spectrum – два канала PWM как раз позволяют организовать стереовыход. Идея была в том, чтобы можно было просто взять микросхему, подать на неё питание и получить на выходе аудиосигнал без каких-либо внешних компонентов (ну, если только RC-фильтр). Затем такие запрограммированные микросхемы можно было бы встраивать во всякие музыкальные звонки, игрушки и т.д. При объеме ПЗУ 8 КБ в тиньку могла влезть одна или две мелодии с популярного в далекие времена Sound Tracker’а. К сожалению, до проекта «руки» так и не дошли.
Но вернемся к поилке. Обычно я пишу весь код для AVR на ассемблере, т.к. он тут несложный, код пишется быстро, а возможностей из МК получается выжать больше. Но надо же выходить из зоны комфорта, поэтому в этот раз было решено писать на С++ используя Atmel Studio (ныне – Microchip Studio). Да и общественность к такому коду относится лучше (спойлер: без ассемблера всё же не обошлось). Но сначала определимся с параметрами.
МК будем тактировать от встроенного генератора, выдающего примерно 8 МГц. С помощью PLL эта частота будет превращаться в 64 МГц, затем делиться на 4, и вот полученные 16 МГц и будут подаваться на вход CPU. Для формирования выходного аналогового сигнала будем использовать PWM на основе 8-разрядного Timer0, работающий от тактовой частоты МК, что даст частоту PWM 16 МГц/256 = 62.5 КГц. Учитывая, что выходная частота DDS не превысит 50 Гц, это позволит простым RC-фильтром с крутизной 6 дБ на октаву получить ослабление в 60 дБ, чего более чем достаточно. Тот же самый Timer0 будем использовать для генерации прерывания МК, на котором будет висеть код DDS. Это даст частоту прерываний в те же 62.5 КГц и до 256 тактов на его обработку. Также в этом обработчике будем обслуживать энкодер. Основной же код программы будет реализовывать индикацию и изменение текущих значений частоты и амплитуды, работу с EEPROM и, может быть, что-то еще.
Поскольку, свободных I/O пинов у данного МК только 5, нам придется возложить на некоторые более одной функции. Подключение:
- PB0: OC1A (выход PWM)
- PB1: MAX7219 Din, выход DT энкодера
- PB2: MAX7219 CLK, выход CLK энкодера
- PB3: Кнопка энкодера
- PB4: MAX7219 Cs
Как же можно совместить в одном пине выход для MAX7219 и вход от энкодера так, чтобы ничего друг другу не мешало? MAX7219 обновляет данные по переднему фронту сигнала Cs (переходу сигнала с 0 на 1). Пока таких условий не возникает, мы вправе перевести остальные выходы МК (Din и CLK) в режим ввода и делать с ними всё, что угодно – MAX7219 может принимать «мусорные» данные, записывать их во внутренний сдвиговый регистр, но изменять своего состояния не будет. Когда же придет время обновить дисплей, мы переведем соответствующие выводы МК в режим выхода, отправим все нужные данные, подадим импульс на Cs и снова вернем выводы в режим ввода. А чтобы замыкающиеся контакты энкодера не мешали нормальной передачи данных, мы подключим их через резисторы 1 КОм.
Итого, соберем проект по следующей схеме:
Входное переменное напряжение блока питания (будем использовать трансформатор от самой поилки) поступает на выпрямитель D1 и сглаживается конденсатором С1. На схеме он показан отдельно, по факту же используется входной конденсатор цифрового усилителя емкостью 2200 мкФ. Сглаженное напряжение (15 – 18 В, в зависимости от нагрузки) поступает на питание усилителя и на вход линейного стабилизатора 7805. После стабилизатора полученные 5 В используются для питания микроконтроллера, платы индикатора MAX7219 и энкодера. В энкодере 5 В используется для подтяжки выводов DT, CLK и SW к плюсу питания. Следует отметить, что в моем экземпляре резисторы подтяжки DT и CLK были запаяны, а резистор подтяжки SW – нет. Для правильной работы устройства его необходимо запаять (номинал – 10К, типоразмер 0805).
При использовании яркости дисплея «1» (из 15-ти возможных) потребление устройства по +5 В получилось настолько небольшим, что 7805 в корпусе ТО-220 можно использовать без радиатора.
Выход устройства через RC-фильтр R4C3 подается на вход УНЧ, выход УНЧ – на мотор насоса (на схеме не показано).
Программная часть
Теперь рассмотрим
программную часть устройства. Изначально я хотел всё написать на С++, однако в процессе написания кода «выяснилась» интересная «особенность» МК ATtiny85, о которой я вначале забыл – в отличии от своих старших собратьев типа ATmega328p, в тиньках отсутствуют аппаратные команды умножения и деления! А для реализации регулировки амплитуды выходного сигнала в алгоритме DDS надо умножать табличные значения на значение амплитуды на каждом шаге работы автомата, то есть, 62500 раз в секунду.
И тут оказалось, что компилятор gcc для AVR не очень-то хорошо оптимизирует код по скорости даже с максимальными установками оптимизации, плюс еще и используемая функция умножения не очень оптимальна для данной задачи, что, в итоге, могло привести к тому, что 256-ти тактов между двумя прерываниями не хватит на работу обработчика. Можно было, конечно, снизить вдвое частоту ШИМ и DDS-ядра, но, опять же, это не наш путь. Лучше обработчик прерывания таймера и код автомата DDS переписать на
ассемблер.
Рассмотрим алгоритм работы DDS. Для формирования аналогового выходного сигнала используется PWM (с RC-фильтром), который в AVR реализован таким образом, что при указании значения 0 на выходе получаются короткие положительные импульсы, а при указании значения 255 – постоянное высокое напряжение. То есть, для придания сигналу PWM симметрии следует задать «нулевой» уровень как 127 и использовать амплитуду синуса от -127 до +127, что даст итоговый диапазон от 0 до 254.
Обычно для синтеза синусоиды составляют таблицу с четвертью периода (то есть, значения синуса на интервале от 0 до 90 градусов), а остальные три четверти высчитывают с помощью отражения первой. Но такое решение потребует чуть больше вычислительных ресурсов, которых тут и так мало, поэтому возьмем таблицу с половиной периода. Для её формирования был написан скрипт на перле
sinus.pl. Запускать его надо только раз, чтобы он сформировал файл
sinus.cpp. Минимальное значение синуса в этом файл – 0, максимальное – 127, размер таблицы – 256 байт. Таким образом, полный размер синусоиды будет 512 байт или 9 бит.
Текущее состояние DDS автомата (положение на синусоиде) представлено 25-ю битами в переменной g_sinusPosition. Из них старшие 9 указывают номер семпла в таблице синуса, а младшие 16 используются для повышения точности синтеза. Прирост текущей позиции на каждом шаге задается переменной g_sinusPositionAdvance, имеющий разрядность 16 бит. Таким образом, минимальная синтезируемая автоматом частота составляет 62500/33554432 = 0.0019 Гц, а максимальная – 62500*65535/33554432 = 122.07 Гц. Для управления двигателем достаточно.
Для умножения табличного значения на установленную амплитуду применяется 8-кратная развертка кода, умножающего 1 разряд, что в итоге позволяет выполнить умножение за 6*8 = 48 тактов. Занимает такая развертка 12*8 = 96 байт, что составляет примерно 1% от всего объема ПЗУ МК.
.macro mul_step
lsr R20
brcc .+4
add ZL, R18
adc ZH, R19
lsl R18
rol R19
.endm
// Eight times
mul_step
mul_step
...
Работает это ощутимо быстрее того, что может предложить gcc: тесты быстродействия обработчика на данном этапе показали, что код, сгенерированный gcc занимал до 70-80% процессорного времени, в то время как код, написанный на ассемблере – порядка 47%. То есть, обработчик на С++ смог бы обслуживать только DDS, возложить на него какие-либо другие функции – например, считывание энкодера вряд ли бы получилось.
В итоге, на выходе DDS получается вот такой вот симпатичный синус:
Если кто не знает, как измерять процессорное время такого кода – есть два способа. Первый – это просчитать все по тактам, но он довольно трудоемок и не дает физической уверенности в правильности расчета. Второй – добавить в начало испытуемого блока вывод логической 1 в какой-либо бит порта, а в конце блока вывести в этот бит логический 0. Тогда на осциллографе можно оценить Duty cycle полученного сигнала и, таким образом, понять, какой процент процессорного времени он занимает. Я использовал второй способ.
Далее обработчик прерывания таймера считывает состояние энкодера и, если определяет, что была «нажата» какая-либо клавиша, сохраняет её код в переменную g_lastKeyDown. Возможных варианта – три: KEY_UP, KEY_DOWN и KEY_SWITCH. Проверка состояния энкодера происходит лишь в том случае, когда соответствующие выводы микроконтроллера находятся в режиме ввода. Если они находятся в режиме вывода, значит, основной код обновляет дисплей MAX7219 и считать положение энкодера невозможно.
Последнее, что делает обработчик – увеличивает значения переменной g_100HzCounter 100 раз в секунду. Эта переменная используется основным кодом для организации требуемых задержек.
В остальной части кода нет ничего особенного. В файле
max7219.cpp собран код, обслуживающий MAX7219. В файле
display.cpp находится код, реализующий систему меню. Меню построено таким образом, что для каждого режима отображения задаются функции, которые вызываются при повороте энкодера и номер режима, в который переходит дисплей при нажатии кнопки. Основных режимов 5:
- Отображения частоты и амплитуды (основной экран)
- Изменение частоты (от 10 до 99 герц)
- Изменение амплитуды (от 0 до 128)
- Временное отключение насоса
- Полностью черный экран
Переход между режимами осуществляется нажатием кнопки энкодера, изменение параметров – его поворотом. Исключением является последний режим «черный экран» — в него система переходит из основного экрана после бездействия порядка 10 секунд.
Да, батник для прошивки фьюзов находится в каталоге Programming и называется
fuses.bat. Значение фьюзов: HFUSE = 0xC4, LFUSE = 0xD1.
Тестирование
Внешний вид «собранного устройства» получился следующий:
В качестве усилителя используется какая-то найденная плата, купленная на Али много лет назад. Если решение хорошо покажет себя в эксплуатации, закажу платку поменьше. Для тестирования устройство было размещено в пластиковом контейнере емкостью 2 литра, все компоненты были закреплены к контейнеру зеленым скотчем:
Так получилось, что сама «ванна» хорошо встает на крышку контейнера, поэтому общий вид поилки сейчас такой:
В итоге, оптимальными по соотношению производительности и шума оказались частота 35 Гц и амплитуда 82 из 128 (порядка 7-8 В переменного напряжения на насосе). С этими параметрами поилка работает намного тише начального и устойчиво запускается при включении питания. Потребляет она при этом 4 Вт:
Реакция кота
Кот начал проявлять интерес к поилке еще до того, как её установили – пока включали, пробовали, регулировали напор и меняли насадки. Несмотря на то, что, по большей части, кот труслив, поилка его не испугала даже при работе с максимальным напором. Он пытался к ней подходить, нюхать водичку и даже несколько раз трогал струю лапой. Место под поилку выбрали на кухне – просто потому, что другого удобного места, где рядом была бы розетка пока что не нашлось. Надеемся, что кота не смутит соседство с миской с едой, ведь поилка – это текущая вода и она (с его точки зрения) должна быть чистой.
Пить из поилки кот начал в первый же вечер. Мы не стали убирать основную миску – пусть пьет оттуда, откуда захочет. И в первые дни он чередовал – то попьет из поилки, то пойдет и попьет из миски. Но со временем стал всё больше пить из поилки и меньше из миски. То есть, такая подача воды ему действительно интересна, и поилка работает.
Но вот что я бы не сказал, так это то, что кот стал пить
больше – мне кажется, он пьет примерно столько же, просто стал делать это из поилки, а не из миски. Воду, кстати, мы меняем раз в два дня. Может можно и реже, т.к. внешне она остается чистой и никакого запаха не приобретает, но создается такое чувство, что под конец второго дня за счет стекающей воды на её поверхности начинают немного образовываться пузыри. Мне это кажется знаком, что воду пора менять. При смене в «трубу» сливается, как я уже говорил выше, порядка 0.5 литра.
Красиво сфотографировать кота около поилки не вышло – убегает. Как только хотел его «правильно» посадить для фото или просто находился момент, что он туда шел и я доставал телефон, кот это видел и отворачивался. В итоге, получилось примерно так:
Ладно, хотя бы видно, что кот рыжий и полосатый. Зовут кота Ричард, и ему почти 3 года.
Выводы
Что я могу сказать о поилке – она вызывает смешанные чувства. С одной стороны, функции свои она выполняет, а после доработки и работает достаточно тихо, так что выключать её мы перестали. С другой стороны – возникает вопрос, а надо было ли? Может, всё же, это излишество? Ведь пил он из своей обычной миски – пил бы и дальше (кстати, миска осталась). А вот сломается поилка со временем (а такое обязательно случится, читал много отзывов, что автоматические поилки не особо долговечные), что тогда делать будем?
В общем, пусть каждый сам подумает, нужна ли ему такая вещь в хозяйстве, а я приведу плюсы и минусы. Точнее, наоборот, минусы и плюсы. Итак, минусы:
- Дороговата
- Заурядный внешний вид
- Изначально шумновата
- Относительно много потребляет, тяжелый сетевой адаптер с трансформатором
- При смене воды приходится выливать примерно пол литра
- Нет датчика наличия воды, будет работать и «пустая»
Плюсы:
- Работает как задумано, кот пользуется
- Нормальный объем, на двое суток хватает без проблем (а если набрать полную – то и на неделю хватит, наверное)
- Вся вода доступна животному при отключении насоса
- После доработки достаточно тихая
- Простой по форме фильтр, который легко будет изготовить самому, если что
- Изготовлена из пищевого пластика (насос и провод – под вопросом)
P.S.
Под конец написания обзора ко мне пришел вот такой
водяной насос постоянного тока:
Работает он от 5 В (USB-штекер), и, к моему большому удивлению, обладает точно такой же конструкцией, как и обозреваемый! То есть, ротор с диаметрально намагниченным магнитом, а всё остальное залито компаундом. Быстрый тест насоса показал, что внутри есть некий контроллер, который даже определяет остановку ротора и делает паузу перед повторным запуском. Потребление насоса просто смешное – 5 В 30 мА без нагрузки и порядка 100 мА с нагрузкой (это всего 0.5 Вт). Запускается насос минимум от 4.1 В, сохраняя работоспособность вплоть до 2.5 В (без нагрузки). По шуму – от 5 В он тише, чем обозреваемый от 12 В, но громче, чем обозреваемый после преобразователя.
Из минусов – от насоса очень сильно воняло каким-то химическим пластиком (или компаундом), когда он пришел. Запах остался даже после тщательной промывки с мылом и 10-минутной тестовой эксплуатации в воде. Частично он сохранился и на текущий момент (через три дня лежания на воздухе), поэтому пока менять насос поилки я не стал.
Что касается установки – в принципе, он подходит в данную поилку, однако, его выходное «сопло» расположено чуть ближе к центру, поэтому просто взять и установить его не выйдет, верного расположения добиться не получится из-за ограничительных уголков на миске. При желании, их можно подпилить (может быть, будет достаточно подпилить только один) и тогда насос встанет. В остальном он полностью сюда подходит.
Для снижения шума данного насоса имеет смысл понизить напряжение питания. Однако, запуск насоса происходит лишь от 4.1 В (и это без нагрузки, с водой, скорее всего, для запуска потребуется напряжение чуть выше), поэтому также придется использовать микроконтроллер с ШИМ – чтобы сначала подавать на насос более высокое напряжение, а позже – снижать его до требуемого, которое, предположительно, будет в районе 3 – 3.3 В. Для полноты управления понадобится контролировать потребляемый насосом ток, чтобы верно определять, работает он или остановился. Пайки будет больше, однако, не понадобится внешний усилитель мощности, также устройство сможет работать от 5 В, которые обеспечивает практически любое старое зарядное устройство от телефона.
Резюмируя всё сказанное выше, с технической точки зрения, я считаю данный насос более предпочтительным, однако очень сильно смущает его достаточно стойкий химический запах.
Любые комментарии к обзору приветствуются. Всем добра, здоровья, денежных средств, любви, процветания!
— пусть текущая вода привлекает кота даже тогда, когда он не рядом;
— если человек будет постоянно находиться рядом с поилкой (у нас так получается), датчик будет всё время срабатывать. Она будет то включаться, то выключаться, и это будет отвлекать еще сильней, чем равномерный шум.
— стоячая вода зацветет быстрее.
sl.aliexpress.ru/p?key=yqRhwHd
А так, интересный вариант.
Дешево, и работает. И надеждно — без питания, батареек, ардуины и все прочее. И без шума.
Подобным образом сделал и мыску для корма — при снижении уровня под собственным весом пополняется. Единственная автоматика —
гравицапагравитация, а она не истощается, в отличии от батареек.Уже не выдет такое, хотя зверы пробовали.
У него тоже два зверя. Были три, одного усыпили, рак…
Но не «брендовые», так, с улицы подобрал. Все три — сами к нему пришли, не сбежали, как другие дворняги.
интересно же
А на каждыйдень, если живем вместе с котом, то никакие такие автоматические поилки не нужны, достаточнл пару простых мисок, установленных в разных местах. Если уж завели лохматого друга, то наверно не тружно раз в пару дней заменить воду в двух мисках…
И да, саму поилку лучше из нержавейки брать, отмывается лучше.
У нас несколько PetSafe стоит — отличные и тихие, рекомендую.
Отличные фонтанчики вот www.amazon.it/Domestici-Inossidabile-capacit%C3%A0-Silenzioso-Filtrata/dp/B08FTNYTH3/ref=sr_1_6 и вот www.amazon.it/Petsafe-Drinkwell-Piatto-animali-domestici-acciaio/dp/B00K6F542I/ref=sr_1_9
Цены не астрономические.
Но думаю и у вас можно оффлайновые варианты найти.
Смотрим — а что же за насос-то? И видим, что он 12 В переменного тока 60 Гц. Ладно, может для европейского рынка есть и на 50 Гц, но не суть — он тоже переменного тока, как и обозреваемый. А это значит, что внутренняя конструкция у них плюс-минус похожа. Ну, может, ротор лучше отбалансирован, на валу четче сидит, но принцип, скорее всего, такой же — синхронный двигатель с постоянным магнитом.
Проблема этого двигателя в том, что у него крутящий момент очень сильно «дрожит» в пределах оборота. Если знакомы с теорией управления двигателей с магнитами, то знаете, что магнитное поле статора должно опережать поле ротора на 90 градусов для обеспечения максимального крутящего момента. Сделать это без контроля положения ротора невозможно, отсюда возникает дрожание крутящего момента и, как следствие, вибрация, шум и т.д. То есть, основной шум тут не от механических изъянов, а от самого конструктивного решения.
Именно по этой причине двигатель постоянного тока, который я показал в конце обзора, оказался тише.
Моторчик на низком напряжении, постоянный ток (вот честно, даже не смотрел сколько там вольт, наверно 12).
В описании честно написано что в комплекте насос и бп.
Да, имеет смысл потратить немного времени и найти нормальную поилку. За умеренно денег.
Можно в конце концов попросить кого-нибудь переслать.
Хм, и главное что у вас есть один шумящий моторчик, а у меня четыре тихих, но проблема походу всё равно на моей стороне, я правильно понял ваш посыл?
Нет. Проблема в том, что вы не можете послушать мой моторчик, а я — ваш. И до этих пор мы не можем уверенно говорить, какой именно тише и на сколько. А по субъективным ощущением рассуждать — это такое себе. Может, я излишне придирчив и для меня он громкий лишь по этой причине?
Этот субъективно очень тихий (разумеется шум не замерял, делать мне больше нечего). У нас на улице очень тихо, вечером фоновый шум 30-32dB. Дома примерно так же всегда.
Фонтанчики практически не слышно, ну журчащую воду иногда. А вот холодильник слышно даже из коридора, а газовый котёл даже с другого этажа (при том что всё достаточно современное и тихое)
Это поилка для больших собак, я там сам побоялся утонуть.
А обозреваемый — ну, какое-то недоразумение, имхо.
ссылка
Смотрите, когда будет скидка получше.
Первая такая поилка AquaCube от PetSafe молотила круглосуточно 6 лет, пока ее не уронили и не треснул бак. В целом если не забивать на чистку и смену фильтров ломаться там нечему. Я приклеил какую-то вспененную резину как ножки и самый противный шум это убрало (у меня создалось впечатление, что USB-помпы работают тише)
Вторая — Catit 2.0 Flower, работает тоже 6-й год и не думает ломаться, начитавшись интернетов я решил ее заменить на полностью сделанную из нержавейки. Та, которая из нержавейки стоит в подсобке уже год, в коробке.
Еще одна — Catit PIXI, там интересная схема «подвеса» помпы на силиконовой трубочке, фактически помпа не соприкасается со стенками.
Обе Catit работают достаточно тихо, купил когда-то «USB» датчик движения, да так и не поставил.
В копилку способов «как поить кошек» — стоит попробовать большую миску, если дом большой — мисок лучше иметь несколько в разных местах, у кошек чувство жажды не такое сильное как у нас, котику может быть просто «лень» идти к миске.
Разбираем и чистим.
Там в обсуждении верно заметили. Как бы вообще без фильтров не было лучше
Миску саму моем и меняем раз в 2 дня, это сопоставимо с мытьём обычной миски.
А без фильтра использовать не рекомендую, он защищает от мусора/шерсти/слюней саму помпу.
Мне кажется при такой постановке вопроса причина «отравления» кота это только лень владельца.
Нашел простой вариант — активированный уголь продается на развес, 1 кг стоит чуть меньше 500 рублей. Если одного фильтра хватает на месяц, то килограмма — весьма надолго. Буду делать фильтры сам.
Единственная проблема это то что кот пинает фонтан и насос хапает воздух и перестает качать воду. Дабы кот не оставался без воды я собрал схема на Дигиспарк, которая отключает насос (через реле) каждые 30 минут на 30 секунд, и после 2-х дней работы включает лампочку о необходимости замены воды.
А вот это — интересная функция, надо бы подумать, чтобы себе добавить.
И после попадания воздуха продолжал работать пока не перезапустишь.
А функцию индикации замены воды реализовал через счетчик переменной. +1 от каждого перезапуска насоса.
Только проблема есть, если свет отключат то все начнёт считать сначала.
Сейчас думаю на основе датчика тока сделать. Но руки не доходят.
У меня есть код, выполняющийся 100 раз в секунду, можно на него счетчик еще повесить.
Можно, например, раз в час сбрасывать очередной бит в eeprom, тогда операцию стирания потребуется выполнять один раз в 2 дня, и при количестве циклов 100К это — более 500 лет :)
Или, в другом проекте, делал иначе — там МК питался через линейный стабилизатор от +12 В, как только оно начинало проседать, МК записывал данные в eeprom.
vmpavitec.ru/catalog/avtomaticheskie-individualnye-poilki-pa-1/