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

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

    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

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

    Собственно графики: clusterrr.com/sensors/w
    Графики напряжения на батарейках: clusterrr.com/sensors/v
    Endomondo аккаунт мыша Пинки: www.endomondo.com/profile/8088037
    Твиттер мыша Пинки: twitter.com/pinky__mouse =O.o=
    И его вконтактик: vk.com/id185163744

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

    image

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

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 67

    • UFO just landed and posted this here
        0
        Я думал, что после упоминания белки это очевидно :) Исправил текст, чтобы стало понятнее.
          +3
          Только прочитал заголовок — сразу подумал про компьютерную мышь. И еще мысли в голове закрутились: это что программа для компьютера, чтобы мерить расстояние пройденное мышью? Но открыв пост был приятно удивлен. :-)
            0
            Таких тоже, в принципе, не мало.
          +5
          Пинки есть, а где Брейн? )
            +5
            Он готовится к сегодняшнему вечеру.
              0
              А что он будет делать сегодня вечером?
                0
                То же, что и всегда!
              +3
              Это он эксперимент проводит.
              0
              Можно эксперименты проводить. Кофе мышке предложить.
                +2
                Лучше показывать фотки кошки, или каких-то политических деятелей или актеров. Выявить пристрастия каждого питомца.
                  +1
                  Почему лучше? Одно другому не мешает, провести аутсорс исследования, продать Британским ученым, заработать.
                  Профит!
                +3
                Значит вы работаете с 8 до 5 и живете один? :)
                  +2
                  Уж точно не один. С мышом! :)
                    0
                    И белкой…
                  –6
                  Надо подключать генератор и например заряжать мобильный :)
                    +2
                    Фтопку мобильный! :) А вот обеспечить само устройство резервным питанием как раз возможно.
                      0
                      Тяжеловато будет мышкам бегать с генератором.
                        0
                        Ничуть, мышь даже не заметит нагрузки от подобного микроэлектродвигателя:
                        image
                          0
                          Он замечает даже нагрузку от маленького магнитика, пришлось балансировать. Хотя если делать колесо с нуля, сделав подвижную ось, то может быть что-то и получилось бы.
                            0
                            Как замечает? Перестает бегать?
                              0
                              Начинает бегать медленнее, с трудом.
                                +1
                                Ничо ничо, пусть мышцу качает.

                                У меня братан когда катался в ходунках (такая каталка на колесика куда лялку ставят и она вися в спец трусах бегает по полу) так он стал гонять как ракета, стало сыкотно, что перевернется нахрен. Ну взяли ему балласту повесили 10кг. Поначалу у него был баттхерт, потом придрочился и стал гонять как прежде.
                    +1
                    Для передачи данных я за основу взял самый распространённый протокол пультов ДУ — RC-5, для которого у меня уже был код как для приёмника, так и для передатчика (командую телевизором/ресивером с компа), он передаёт по четыре байта данных.

                    А можно на код взглянуть? (на чём пишете, кстати?) Интересует передатчик — тоже хотел ИК передатчик спаять, но еще не определился с контроллером: TINY25 или MEGA48. Для чего передатчик, говорить не буду — вдруг не получится. ;)
                      +1
                      Можно :) Пишу на Си. Передатчик — обычный ИК-светодиод.

                      Вот код для передачи обычного RC-5:

                      // Макросы для включения/выключения светодиода
                      #define IR_ON set_bit(PORTD, 4)
                      #define IR_OFF unset_bit(PORTD, 4)
                      
                      // Макрос для мигания светодиода с несущей частотой примерно в 36кГц
                      #define SEND_36KHz { IR_ON; _delay_us(14); IR_OFF; _delay_us(14); }
                      
                      void send_rc5(uint32_t data)
                      {
                      	int pos;
                      	// Включение таймера для отсчёта времени. TCNT1 - регистр таймера.
                      	set_bit(TCCR1B, CS12);
                      
                      	// Инициализация
                      	TCNT1 = 0;		
                      	while (TCNT1 < 0x125)
                      		SEND_36KHz;
                      	TCNT1 = 0;		
                      	while (TCNT1 < 0x8D); 
                      	TCNT1 = 0;		
                      	while (TCNT1 < 0x15)
                      		SEND_36KHz;
                      	for (pos = 0; pos < 32; pos++) // Последовательно передаём 32 бита
                      	{
                      		TCNT1 = 0;
                      		if (data & (1UL << pos))
                      		{
                      			while (TCNT1 < 0x33);
                      		} else {
                      			while (TCNT1 < 0x0F);
                      		}
                      		TCNT1 = 0;		
                      		while (TCNT1 < 0x15)
                      			SEND_36KHz;
                      	}
                      }
                      

                        +1
                        Спасибо! :-]
                        Тоже на C пишу.
                          +1
                          Я тут как раз хочу освоить микроконтроллер (MSP430), до этого дел с ними не имел. И задумался вот над чем: везде особая фишка — писать на Ц (и даже иногда на Ц++). Однако глядя на примеры кода, я никак не могу отделаться от мысли, что ассемблер здесь ничем не хуже. В том смысле что удобству привычного Ц-синтаксиса просто негде развернуться: так или иначе приходится возиться с битовыми операциями, простейшими циклами и сравнениями. Разве что ветвления немного нагляднее… Как вы считаете?
                            0
                            Для железа завсегда начинать лучше с нижнего уровня. Когда архитектурой проникнитесь, для скорости можно хоть на си, хоть на бейсике писать с высокой эффективностью.
                              +2
                              Я считаю, что Си — это «мультиплатформенный ассемблер»: очень низкий уровень и возможность портируемости. И Си-синтаксис там очень даже к месту.

                              Предчувствую холивар…
                                +1
                                Я не оспариваю достоинства Ц, которые мне прекрасно известны. Я оспариваю их применимость в данном случае.
                                Чего такого особо переносимого дает С в коменте чуть выше? Там кругом узкоспециальные константы. Будет другой процессор — будут другие не только константы, но и способ выполнения тех же операций. Если попытаться перенести логику на другой микроконтроллер — от вышеприведенного Ц-кода останутся только отдаленные воспоминания в названиях некоторых функций. А вводить более высокий уровень абстракции — означает иметь существенный оверхед по количеству кода, что весьма критично в микроконтроллерах.
                                Единственное, что всякие while и if писаться будут одинаково, без всяких JNZ, JNC и т.п. мнемоник… Но использование всего этого никак не отменяет подробного изучения архитектуры микроконтроллера, с использованием специфичных констант. Выигрыш есть, но на мой взгляд — ничтожный, потому и задал вопрос.
                                  0
                                  На счёт оверхеда не соглашусь. Если грамотно писать код и настраивать компилятор, то итоговая прошивка мало будет отличаться от ассемблерной. Читаемость же кода повышается в разы.
                                    +1
                                    Всё это так, пряморукость подразумевается по умолчанию. Но высокий уровень абстракции неизбежно увеличивает количество кода по сравнению с прямой работой. А в случае прямой работы с оборудованием преимущество Ц перед АСМ уменьшается (но не обнуляется).
                                    Другое дело, если девайс реализован одинаково на разных микроконтроллерах — тут читаемость (как результат — легкость поддержки и развития) однозначно перевешивает все недостатки. Но мне что-то в голову не приходит случай, когда один и тот же по логике работы девайс зачем-то реализуется на двух разных микроконтроллерах. Это ведь не андроид и айос, пользователь разницы не заметит.
                                    В общем, я делаю вывод такой: если устройство довольно простое — преимущества Ц малозначительны. Если логика довольно развитая — то важность читаемость резко возрастает, но тут легко упереться в ограничение по размеру кода. Короче, на мой взгляд, диапазон применения Ц — довольно узкий, и выбор неоднозначный.
                                    Кажется, наш холивар закончился.
                          +3
                          У нас в офисе живут 2 дэгу.
                          ru.wikipedia.org/wiki/Дегу
                          А в новогодние праздники еще пополнение в виде 3 штук родилось, может их параметры еще измерите? :)
                          Готовы отдать одного для экспериментов :)
                            0
                            И у нас в офисе живут 2 дэгу о_О
                            Новый тренд?
                              0
                              А может у Вас живет наше потомство? :)
                              Где брали?
                                0
                                Понятия не имею, но мы в Екатеринбурге и дегу у нас где то с конце лета-начала осени, так что точно не потомство :-)
                                  +1
                                  Наших могло и в Екатеринбург занести :)
                                  У нас уже 3 поколение :0
                                  Хотя врядли.
                                0
                                а у нас 2 песчанки жили (Вайма и Ксюша), но офис-менеджер сказала, что их надо убрать… (
                                раньше трансляция из клетки была, но сейчас нет возможности ее поддерживать(
                                если кому интересно, вся история тут — peschanok.net/
                                0
                                У меня дома 4 дегу. Было 2, думали 2 девочки, оказалось, что один мальчик :D Теперь мама с дочкой живут, а папа с сыном. Остальных отдали в хорошие руки. У дегу есть в жизни цель. Он хочет все сгрызть. Так что он скорее всего сгрызет спидометр, как грызет полки, гамак, колесо, прутья, миски и тд.
                                  0
                                  у меня было 2 крысы в 3м классе, никто ничего не думал… было 2, а в какой-то момент стало 11 :)
                                    0
                                    Дэгу живут у директора.
                                    Так он нас иногда пугает, что выпустит на ночь их к нам в серверную :)
                                    Ссыкотно :)
                                  0
                                  Ужасаюсь, как им не лень 100 км в день бегать?
                                    0
                                    Не в день, а в месяц
                                      0
                                      А, значит это я слепой. В месяц, конечно, уже не так много.
                                    +3
                                    Живой генератор энтропии, случайность значений зависит от движения мышки
                                      +4
                                      А что, может получиться неплохой заменитель random.org. Только там изначально использовался радиоприемник как источник энтропии, а здесь — мышки. Предлагаю зарегить домен randomouse.org и взять слоган: «Случайные числа еще никогда не были такими теплыми и живыми!»
                                        0
                                        Не такой уж random :) Например, я уже вижу, что есть время, в которое они стабильно спят. Оно удивительно со впадает с моим временем сна… А вот в момент бега уже действительно много случайности — то они останавливаются, то снова бегут.
                                          +1
                                          Надо накапливать рандомные данные в буфер, а по запросу отдавать, и все будет гуд! (:
                                            +3
                                            Представляю картину: «Мыши просыпайтесь, у меня рандомные данные закончились!»
                                      +2
                                      Но вообще интересно — вы можете увидеть какие то корреляции того, как мышь бегает с какими то событиями в ее жизни? Что дает ей бег?
                                        +1
                                        Что дает ей бег?

                                        Для этого лучше спросить мышку, а не автора ;)
                                        +2
                                        По поводу авторского P.P.S.: почитав комменты я понял что вы здесь далеко не самый сумасшедший. (Это я в хорошем смысле слова).
                                          +1
                                          Хмм… появилось коварное желание узнать: а сколько пробегает Ролик компьютерной мышки за месяц?
                                          Практического применения 0,00001, но интерес негодует в отсутствии таких данных.
                                            +1
                                            WhatPulse.org
                                            0
                                            Солнечную баратею + ионистор не думали использовать для питания?
                                              0
                                              Эм, тут нет прямых солнечных лучей. Да и смысла в этом не вижу. Хотя глупо после всего этого говорить о смысле :)
                                                0
                                                Мне кажется прямые солнечные лучи и не нужны для такой нагрузки. Должно хватить и обычного света. Калькуляторам и клавиатурам же хватает. Хотя могу и ошибаться.
                                                Как провода от посягательств грызунов защитили? У меня была крыса так она грызла все до чего могла дотянуться )))
                                                  0
                                                  У пинки провод спрятан в рубашку от велосипедного тросика, её стальную обмотку он не осилил :) А у Таффи колесо устроено так, что геркон и провода спрятаны за ним.
                                                –1
                                                Зачем батарею? К колесу генератор, генератор к ионистору. Мышь бегает и обеспечивает питание для схемы.
                                                0
                                                Я где-то читал, что делать на плате замкнутое кольцо из общей или «питалищной» дорожки — большое зло (типа начинает работать как антенна). У вас как, не глючит девайс?
                                                  0
                                                  Всегда так делаю, никаких проблем не было, но я в этом деле чайник. Надо поспрашивать у шарящих людей.
                                                    +2
                                                    Зло зло. При хорошем скачке поля в этой петле может навестить иголка которая переклинит МК. Земля вообще в идеале должна быть полигоном сплошным, без петель, а лучше прошитая насквозь с внешним слоем.
                                                      0
                                                      Как всё это сложно для мозга обычного программиста :) Спасибо, учту.
                                                        +2
                                                        Ты когда землю разводишь не допускай, что ее сопротивление равно нулю. Не ноль оно, хотя близко. А раз не ноль, то может быть падение напряжения при протекании тока.

                                                        А броски тока могут быть колоссальными, причем даже там где, казалось бы, нет нифига. Ну стоит кондер на пол микрофарады, но его заряд на бесконечно малом промежутке времени = кз, а значит ток уходит в космос. Раз ток бешеный, то будет бросок земли (перекосы напряжения) все это произойдет мгновенно, в виде иголки в питании, но она может быть столь резкой, что будет быстрей чем такт МК и мк может переклинить.

                                                        То же касается и разводок реле, разрыва ее индуктивностей.

                                                        А еще прикол — реле размыкает нагрузку. На контактах проскакивает искра, помехи с искры ловит катушка реле и отправляет прямиком по мозгам контроллеру. Получается прикольный глюк. Когда схема без нагрузки радостно щелкает релешками, а когда реле что то переключает нагруженное, то все виснет нафиг. Хотя, казалось бы, связи электрической нет.
                                                          0
                                                          Вот из-за такого косяка с реле я очень много нервов извёл, когда лампы дневного света так включал. И ничего не помогало — ни диод в обратку реле, ни развязка оптопарой с отдельными блоками питания. Всё равно где-то пробивало.
                                                            0
                                                            А земляная петля была? Возможно на нее ловило. Если есть такая засада с землей, то любую искру рядом твоя схема воспримет как личное оскорбление.
                                                              0
                                                              Тогда я ещё платы травить не умел, всё было соплями увешано на макетке :)

                                                Only users with full accounts can post comments. Log in, please.