[Из песочницы] Превращаем фитнесс трeкер в охранное устройство
Практически любой фитнесс трекер имеет в своем составе MEMS акселерометер и Bluetooth BLE. Задумка заключалась в том, чтобы переписав firmware в таком устройстве превратить его во что-нибудь не менее полезное. Например, в систему охраны и контроля или датчик для Internet-of-Things.
Во многих системах контроля традиционные датчики типа выключателей, датчиков объема или движения вполне могут быть заменены на датчик вибраций. Кроме того, акселерометер определяет углы наклона, что тоже может быть полезным.
В качестве основы был взят Misfit Link или Misfit Flash. Это одно и то же устройство и отличается только наличием ремешка (ремешок и клипса (Flash) против просто клипсы (Link)). Внутри него находится популярный NRF51888AA (MCU+BLE) от NordicSemiconductors и не менее известный MEMS акселерометер LIS2DH (STMicroelectronics). Батарея — CR2032.
Зная распиновку NRF51822 совсем нетрудно было обнаружить 2х — пиновый SWD интерфейс, стереть старое (и защищенное) и залить туда свое. Для этого надо припаять всего 2 провода и иметь программатор с поддержкой SWD (например, J-Link). В нашем новом firmware появляется возможность апдейтов через BLE (over-the-air dfu). Так что можно и дальше творить новое даже не припаивая провода.
Ну, а дальше — вопрос только в том, какую функциональность хочется иметь. Мне захотелось иметь практически все возможное. Поэтому было разработано firmware — Android приложение со следующей функциональностью:
1. Смотреть текущую ориентацию устройства в виде графика или 3D модели.
2. Устанавливать триггер определяемый порогом, осями и логикой. При срабатывании триггера, устройство шлет сигнал смартфону. Смартфон включает звуковой сигнал и при желании делает фотографию. Причем может делать это в background и выключенном экране.
3. Режим 2 в случае редких событий может быть использован в режиме offline, когда единственным источником информации для смартфона являются advertising packets (1 сек интервал), в которые кодируется информация о углах, заряде батареи, количестве записей. Это экономит батарею устройства и делает очень быстрым просмотр текущего положения. Просто включил телефон и на 3d модели увидел на каком боку спит котик, или в каком положении выша посылка лежит на складе.
4. В NRF51822 есть 256kB флэш памяти. После того как все компоненты кода размещены (SoftDevice (RTOS, часть SDK), наша программа и бутлоадер) остается не меньше 100kB свободной батарее-независимой памяти. Туда мы и пишем срабатывания триггера если включен режим записи. В каждую запись входит время (RTC c кварцем 32768 на борту), максимальное общее ускорение и статическая ориентация устройства. Потом это можно считать, проанализировать или даже посмотреть как фильм.
Я не буду здесь вдаваться в технические детали, их можно посмотреть на моем сайте www.msh-tools.com/misfit. (на английском). Там же опубликован код firmware и bootloader (Keil), и Android Apk (ionic framework). Для тех кто просто хочет это иметь все это доступно уже в скомпилированном виде.
Видео. **Включите звук!**
Устройство получилось очень чувствительным. Оно может быть настроено чтобы срабатывать по простому постукиванию предмета к которому оно прикреплено.
Например. 1) Вам нужно что-нибудь тайно заснять. Телефон закрыт и выключен. Постучите тихонько по устройству или просто поднимите руку и снимок готов. 2) Кто-нибудь периодически залезает к вам в стол или просто ходит в неурочные часы в комнате. Сделайте снимок, и в добавок в соседней комнате (до 10 м) прозвенит сигнал тревоги. 3) Я кладу его на зарядное устройство электробайка. Когда зарядка кончается, в зарядном устройстве перестает работать вентилятор. Это событие генерирует сигнал на телефоне. 4) Посмотрите как ехала ваша посылка, какие были ускорения, как ее кантовали. 5) Прикрепите к трубе (кондиционеру и.т.п) и узнаете статистику работы. 6) Про котика узнаете все, что делает, когда спит. 7) В видео есть пример того как я сплю, как ворочаюсь, тоже интересно. Можно к кровати прикрепить, посмотреть как и когда (кем) она использовалась. Ладно, остановлюсь, можно долго продолжать.