Счётчик оборотов мышиного колеса
Опубликовано 10 января, 2013
Сразу скажу, что пост про счетчик скорости вращения колеса белкой я уже читал. Аналогичная задача передо мной встала достаточно давно — было любопытно, сколько же мой мышонок (обычный, живой, не компьютерный!) пробегает и с какой скоростью.
Только я решил не изобретать велосипед и взял старый ненужный спидометр от велосипеда, который идеально выполняет эти функции.
За месяц мышонок пробегал около 100км, но мне хотелось знать подробно — сколько именно он пробежал в каждый из дней, в какое время суток он активнее, как его активность меняется в течении жизни? Скорость же меня уже слабо волновала — это почти всегда 1-1.5км/ч. Типичная бессмысленная, но интересная задача, как я люблю.
Для всего этого данные из клетки необходимо как-то отсылать на сервер. По идее всё просто — нужен микроконтроллер, да геркон, считающий обороты колеса, но клетка часто перемещается по комнате, поэтому вариант с проводами отпадает сразу. С радио возиться тоже как-то не хотелось, да и нужных компонентов не было под рукой. И тут меня осенило — у меня уже есть самодельный ДУ приёмник, который виден из любой точки комнаты и подключен к сети моего «умного дома» — так почему бы не использовать ИК-сигналы? Из деталей при этом не нужно ничего лишнего кроме ИК-светодиода.
В качестве микроконтроллера я взял привычную для себя ATMEGA8A. Первым делом встал вопрос — хватит ли ей питания, и как быстро она посадит батарейку? Сразу же начал смотреть даташит — восьмая «мега» именно с индексом «A» может работать при широком диапазоне напряжений в 2.7В-5.5В, что позволяет использовать батарейку вроде CR2032 или CR2025. Потребляемый же ток в самом глубоком спящем режиме всего 0.5 микроампера. Просыпаться из этого режима микроконтроллер может по внешним прерываниям INT0 и INT1, на которые я решил повесить собственно геркон и единственную кнопку, а также по асинхронному таймеру, который нужен будет, чтобы периодически отсылать данные. Для последнего необходимо установить внешний кварц в 32768Гц, при максимальном делителе микроконтроллер будет просыпаться каждые 8 секунд, что достаточно редко. Данные я решил слать примерно раз в три минуты.
Хотелось бы как-то контролировать уровень заряда батарейки, поэтому я решил задействовать ещё и аналого-цифровой преобразователь для измерения напряжения. ATMEGA8 позволяет мерить его относительно 2.56 вольт. С помощью делителя напряжения из двух одинаковых резисторов можно получить ровно половину того напряжения, которое у нас на батарейке, его и будем мерить и отсылать каждые полчаса.
Вот так вот совсем простейшее устройство постепенно обрастает кучей компонентов. Нужно ещё и обычный светодиод не забыть. Осмыслив всё это я быстренько набросал плату устройства:
Вскоре было готово и само устройство в двух экземплярах (у меня две клетки и два мыша):
Батарейки я решил туда всунуть сразу две, они туда идеально влезли.
После установки на клетки это выглядело как-то так:
Решил установить это дело на возвышенности, чтобы не заслонить случайно спинкой кресла. Важный момент — защитить провода от мышей.
Дальше оставалось дело за написанием софта. С прошивкой всё было достаточно просто — устройству нужно почти всегда спать. По внешнему прерыванию прибавлять обороты. По прерыванию таймера считать время, каждые три минуты отсылать количество пройденных оборотов и сохранять его в EEPROM (вдруг батарейку вытащу?), а при нажатии кнопки делать это сразу же — для проверки.
Для передачи данных я за основу взял самый распространённый протокол пультов ДУ — RC-5, для которого у меня уже был код как для приёмника, так и для передатчика (командую телевизором/ресивером с компа), он передаёт по четыре байта данных. Мне это как раз: один байт — номер колеса/батарейки, два байта — количество оборотов/напряжение на батарейке и один байт — контрольная сумма. Чтобы отличать мои сигналы от сигналов самих пультов я только изменил длительность стартовых сигналов.
Немного доработал свой софт на PC и…
Данные от мышей уже пошли 🙂 Дальше оставалось написать только несколько bash-скриптов для отправки их на сервер. Для обработки и рисования графиков я взял уже привычный мне RRDtool:
На этом графике видно, сколько метров пробежал каждый из мышей за интервалы в один час. Они у меня теперь соревнуются между собой 🙂 Напряжение на батарейках же перестало быстро падать после увеличения номинала резисторов на делителе и оттирания платы от флюса 🙂
Endomondo аккаунт мыша Пинки: https://www.endomondo.com/profile/8088037
Твиттер мыша Пинки: https://twitter.com/pinky__mouse =O.o=
И его вконтактик: https://vk.com/id185163744
Пинки передаёт вам всем привет:
P.S. Шутки про вырабатывание электричества за счёт мышей мне уже изрядно надоели, об этом говорит мне каждый первый.
P.P.S. Я не сумасшедший, я так развлекаюсь.