Счётчик оборотов мышиного колеса

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

image

Только я решил не изобретать велосипед и взял старый ненужный спидометр от велосипеда, который идеально выполняет эти функции.

За месяц мышонок пробегал около 100км, но мне хотелось знать подробно — сколько именно он пробежал в каждый из дней, в какое время суток он активнее, как его активность меняется в течении жизни? Скорость же меня уже слабо волновала — это почти всегда 1-1.5км/ч. Типичная бессмысленная, но интересная задача, как я люблю.

Для всего этого данные из клетки необходимо как-то отсылать на сервер. По идее всё просто — нужен микроконтроллер, да геркон, считающий обороты колеса, но клетка часто перемещается по комнате, поэтому вариант с проводами отпадает сразу. С радио возиться тоже как-то не хотелось, да и нужных компонентов не было под рукой. И тут меня осенило — у меня уже есть самодельный ДУ приёмник, который виден из любой точки комнаты и подключен к сети моего «умного дома» — так почему бы не использовать ИК-сигналы? Из деталей при этом не нужно ничего лишнего кроме ИК-светодиода.

В качестве микроконтроллера я взял привычную для себя ATMEGA8A. Первым делом встал вопрос — хватит ли ей питания, и как быстро она посадит батарейку? Сразу же начал смотреть даташит — восьмая «мега» именно с индексом «A» может работать при широком диапазоне напряжений в 2.7В-5.5В, что позволяет использовать батарейку вроде CR2032 или CR2025. Потребляемый же ток в самом глубоком спящем режиме всего 0.5 микроампера. Просыпаться из этого режима микроконтроллер может по внешним прерываниям INT0 и INT1, на которые я решил повесить собственно геркон и единственную кнопку, а также по асинхронному таймеру, который нужен будет, чтобы периодически отсылать данные. Для последнего необходимо установить внешний кварц в 32768Гц, при максимальном делителе микроконтроллер будет просыпаться каждые 8 секунд, что достаточно редко. Данные я решил слать примерно раз в три минуты.

Хотелось бы как-то контролировать уровень заряда батарейки, поэтому я решил задействовать ещё и аналого-цифровой преобразователь для измерения напряжения. ATMEGA8 позволяет мерить его относительно 2.56 вольт. С помощью делителя напряжения из двух одинаковых резисторов можно получить ровно половину того напряжения, которое у нас на батарейке, его и будем мерить и отсылать каждые полчаса.

Вот так вот совсем простейшее устройство постепенно обрастает кучей компонентов. Нужно ещё и обычный светодиод не забыть. Осмыслив всё это я быстренько набросал плату устройства:

image

Вскоре было готово и само устройство в двух экземплярах (у меня две клетки и два мыша):

image

image

Батарейки я решил туда всунуть сразу две, они туда идеально влезли.

После установки на клетки это выглядело как-то так:

image

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

Дальше оставалось дело за написанием софта. С прошивкой всё было достаточно просто — устройству нужно почти всегда спать. По внешнему прерыванию прибавлять обороты. По прерыванию таймера считать время, каждые три минуты отсылать количество пройденных оборотов и сохранять его в EEPROM (вдруг батарейку вытащу?), а при нажатии кнопки делать это сразу же — для проверки.

Для передачи данных я за основу взял самый распространённый протокол пультов ДУ — RC-5, для которого у меня уже был код как для приёмника, так и для передатчика (командую телевизором/ресивером с компа), он передаёт по четыре байта данных. Мне это как раз: один байт — номер колеса/батарейки, два байта — количество оборотов/напряжение на батарейке и один байт — контрольная сумма. Чтобы отличать мои сигналы от сигналов самих пультов я только изменил длительность стартовых сигналов.

Немного доработал свой софт на PC и…

image

Данные от мышей уже пошли 🙂 Дальше оставалось написать только несколько bash-скриптов для отправки их на сервер. Для обработки и рисования графиков я взял уже привычный мне RRDtool:

image

На этом графике видно, сколько метров пробежал каждый из мышей за интервалы в один час. Они у меня теперь соревнуются между собой 🙂 Напряжение на батарейках же перестало быстро падать после увеличения номинала резисторов на делителе и оттирания платы от флюса 🙂

Endomondo аккаунт мыша Пинки: https://www.endomondo.com/profile/8088037
Твиттер мыша Пинки: https://twitter.com/pinky__mouse =O.o=
И его вконтактик: https://vk.com/id185163744

Пинки передаёт вам всем привет:

image

P.S. Шутки про вырабатывание электричества за счёт мышей мне уже изрядно надоели, об этом говорит мне каждый первый.
P.P.S. Я не сумасшедший, я так развлекаюсь.

Добавить комментарий