Как самостоятельно сделать наручные смарт часы с шагомером на Ардуино

Последние несколько дней я был одержим идеей создания собственных наручных смарт часов на базе деталей Ардуино, чтобы я мог сказать, что сделал их своими руками. В интернете я нашел плату с датчиками (известную как GY-87), на которой располагается три датчика: HMC5883L (компас), BMP085 (давление, высота, температура) и MPU6050 (акселерометр и гироскоп). Через интерфейс I2C эту плату можно соединить с Ардуино Про Мини и дисплеем I2C Oled, таким образом на часах можно отобразить всю доступную датчикам информацию, а также сделать свой собственный шагомер (анализируя данные с акселерометра).

Звучит очень интересно, при этом сборка достаточно проста и для осуществления понадобятся дешевые детали, небольшое знание Autodesk EAGLE и кое-какие навыки в создании самодельных печатных плат. Также нам понадобятся дешевые часы, которые мы разберём и будем использовать в качестве основы.

Перед началом работ я хотел бы, чтобы вы обратили внимание на приложенные картинки. На них вы увидите мои предыдущие сборки часов и поймёте, что от вас потребуется, и что вы можете улучшить.

Шаг 1: Предыдущие сборки

Показать еще 11 изображений

До написания статьи я собрал две версии наручных часов с шагомером. В первой я постарался совместить компас и bluetooth. Мне это удалось, часы были небольшими, но слишком толстыми. Эти часы вы увидите на первых трёх фотографиях. Часы при помощи bluetooth взаимодействовали с моим смартфоном на Windows, автоматически сверяли дату и время, также они узнавали следующее событие в моём календаре и отображали его. Еще они отправляли текущее направление по компасу, а смартфон отображал его. Да, я написал своё приложение для Windows Phone. Оно до сих пор лежит на компьютере, поэтому я приложу его к статье.
Тем не менее, у проекта были и свои недостатки:

  1. Блютус кушал много энергии и часы разряжались буквально за час.
  2. В использовании блютус не было каких-то особых преимуществ, ведь дату и время можно настроить при помощи кнопок, а если батареи бы хватало на день, то часы можно было бы заряжать перед тем, как они отключатся, и тогда не пришлось бы вбивать дату и время заново.
  3. Штука с календарём была отличная, но бесполезная, ведь события календаря можно посмотреть и на телефоне, а на часах был ограниченный запас памяти, и в них нельзя было загрузить все события.
  4. Также, каждое внесение изменений в календарь требовало новой синхронизации.
  5. Отправка данных с компаса на телефон была также классной, но бесполезной штукой, ведь показания компаса можно было посмотреть просто на часах.
  6. На каждой кнопке часов было по резистору, что оказалось также бесполезным, потому что позже я обнаружил, что на каждом цифровом входе Ардуино уже есть резисторы, которые нужно просто включить.

Таким образом, я решил собрать другую сборку с блютус, но такую, чтобы девайс можно было включить и выключить. Так вышло, что включение\выключение приводило к сбросу Ардуино. Я понял, что мне не нужен блютус и сделал вторую версию с MPU9150 (компас, акселерометр и гироскоп). Эта версия на следующих 13 фотографиях. Часы были намного лучше первых, с двумя кнопками (на них всё еще вешалось по резистору), бОльшие по размеру, но более тонкие. Батарейка была меньше, я поместил всё в каркас от часов, получилось нечто в стиле стимпанк, но это были не те часы, которые я бы одел на улицу. Батареи хватало на 14 часов, и это было очень хорошим показателем. Эта версия также не была лишена недостатков:

  1. Для сохранения энергии я мог бы отпаять два светодиода: один на Ардуино, второй на MPU9150.
  2. Опять же, не было нужды в резисторах
  3. Не обязательно было делать две кнопки, ведь с помощью софта я мог повесть на одну кнопку обе функции.
  4. Они были слишком толстыми.
  5. Каркас не был красивым и был слишком большим.
  6. Зарядка осуществлялась через двупиновый коннектор на боку и, если бы в один момент я затупил и неправильно подключил зарядник, то сжег бы часы. Нужна была «системы защиты от дурака».
  7. Я склеил всё силиконовым клеем, затем я обнаружил, что этот клей окисляет медь и олово, проводя ток — это была проблема.

Третья версия была первой, которую я мог одевать на улицу, и она описана в этой инструкции: вы увидите её на последних 4 картинках. Батарейки с легкостью хватает на 24 часа (максимально на 26) и я убрал один светодиод с платы GY-87. Второй светодиод я просто забыл снять, но итоговый результат мне понравился. Тем не менее, есть кое-что, что можно улучшить в следующих версиях:

  1. Я просверлил отверстия для кнопки и для зарядки слишком далеко друг от друга
  2. Я мог бы разместить детали более продуманно, сохранив больше свободного пространства
  3. Я мог бы спроектировать плату в Eagle также более продуманно, избежав коротких замыканий.
  4. Шагомер можно запрограммировать лучшим способом.

Следующим шагом является сборка компонентов.

Шаг 2: Список необходимых деталей

Список деталей с ссылками на Ebay:

  1. Датчик 10DOF (HMC5883L, MPU6050 и BMP180) (Ebay);
  2. Arduino Pro Mini 3.3V (или совместимая плата) (Ebay);
  3. Батарейка от сотового (3.7 — 4V);
  4. Дисплей I2C Oled (синего цвета) (Ebay);
  5. Медная печатная плата(Ebay);
  6. Хлорид железа (Ebay);
  7. Разъём питания типа «мама» 2.5*0.7 мм (Ebay);
  8. Выключатель (боковая кнопка) (Ebay);
  9. Старые или дешевые часы, которые не жалко разобрать (желательно достаточно большого размера);
  10. Припой, паяльник и т.д.;
  11. Зарядник для батарейки, который, конечно же. будет находиться в не часов (Ebay).

Шаг 3: Плата Eagle и соединение частей проекта

Я приложил zip-файл с моим дизайном платы, но я предупреждаю вас, что в дизайне есть ошибки, ведь я одновременно учился работать в программе и сразу же создавал дизайн. В следующий раз я планирую создать более продуманную версию. Тем не менее, очень просто понять каким образом части часов соединяются вместе. Сборка происходит по следующей схеме:

  1. Микроконтроллер Ардуино
    • PIN 2 — вывод кнопки;
    • VCC — VCC от зарядного коннектора, VCC дисплея и датчика;
    • GND — GND зарядника, ввод кнопки и датчиков / GND дисплея;
    • A5 PIN — пин I2C SCL дисплея и датчтика;
    • A4 PIN — пин I2C SDA дисплея и датчика;
  2. Кнопка:
    • Один пин на GND;
    • Другой пин на вход цифрового пина 2 Ардуино;
  3. Дисплей:
    • пин VCC;
    • пин GND;
    • пин SC на пин A5 Ардуино;
    • пин SDA на пин A4 Ардуино;
  4. GY-87 (плата датчиков):
    • пин VCC на пин VCC Ардуино;
    • пин GND;
    • пин SCL на пин A5 Ардуино;
    • пин SDA на пин A4 Ардуино;
    • остальные пины оставьте неподключенными! Это касается 3.3V VCC, который не будет использоваться!

Также вы можете решить, оставить или отпаять диоды (один на Ардуино, рядом с кнопкой ресет, а второй на плате датчиков). Оба диода бесполезны и постоянно потребляют около 1.5mA каждый. Теперь из медной платы и хлорида железа вам нужно соорудить свою печатную плату. Я не буду вдаваться в подробности о том, как это делается, ведь в интернете есть много статей об этом. Для лучшего результата я использовал лазерный принтер.

Файлы

Шаг 4: Код

Как упоминалось ранее, я создал три версии часов. При этом вторая и третья версии очень схожи, поэтому я приложил код для первой и последней версии часов. Первая версия поддерживает синхронизацию по bluetooth со смартфоном на Windows и содержит календарь. Также я приложил код приложения для Windows Phone.
Я использовал следующие библиотеки:

  • Wire.h;
  • I2Cdev.h (включена в эту статью);
  • MPU6050.h включаена в I2Cdev;
  • Ug8lib.h (включена в эту статью);
  • Time.h (включена в эту статью);
  • HMC5883L.h (включена в эту статью);
  • Adafruit BMP085.h (включена в эту статью);

Старая версия часов дополнительно использует эту библиотеку:

download; Файлы

Шаг 5: Шагомер

Обычно шагомеры считают показатели по пульсации акселерометров по оси Z, ведь датчик располагается на поясе. Так как часы находятся на запястье, то будет неправильным учитывать лишь показания оси Z, ведь запястье движется в разных направлениях. Тем не менее, при ходьбе или беге рука движется вперёд и назад. Поэтому изначально я подумал, что сумма значений S = |X|+|Y|+|Z| будет увеличиваться и уменьшаться при каждом шаге. Высчитывая изменяющееся среднее значение из последних N для S (Av = SUM(S)n/N) и сравнивая их с S на текущий момент, я могу сказать следующее: если Sn-1Av то нужно добавить единицу к счётчику шагомера (картинка 1).

Конечно же, если вы прыгаете или двигаете рукой, то счётчик тоже увеличится (ложное считывание). Поэтому я добавил для Av минимальный предел, такой как на картинке, он будет 22000. Показатель ниже этого значения означает, что вы двигаете рукой, но не идёте. Более высокие значения, такие как 30000 означают, что вы бежите (легко заметить это на картинке).

После кое-каких испытаний я обнаружил, что болтание рукой имеет сумму ускорений близкую к ходьбе, поэтому я решил найти способ, как отличить одно от другого. Я сделал это таким способом:
S = |X|+|Y|+|Z| для данного момента;
SM = максимальное для S значение за последние N моментов;
AVM = изменяющееся среднее значени SM для M взаимодействий;

AVM не делаете ничего полезного;
AVM > 37000 и идёте;
AVM >= 50000 => бежите;

Экселевский файлик со всеми моими испытаниями я прикрепил к этому шагу.

Файлы

Шаг 6: Заключение

Я надеюсь, что вам понравился этот проект! Я собираюсь сделать улучшенный и окончательный вариант этих часов, представляющих собой подобие фитнес-браслета, в ближайшем будущем, усовершенствовав печатную плату и код, особенно его часть, различающую ходьбу\бег и вождение машины (эта часть расчетов оказалась сложной).

Олег Самоделов
Олег Самоделов

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *