Счетчик шагов (шагомер) на ATtiny85 и акселерометре MPU6050

В этой статье мы рассмотрим создание портативного счетчика шагов (шагомера) на основе микроконтроллера AVR ATtiny85, акселерометра и гироскопа MPU6050, и OLED дисплея. Питание на шагомер будет подавать от простой батарейки на 3V, что позволяет сделать его достаточно компактным и удобным для переноски. Для изготовления данного шагомера потребуется сравнительно мало компонентов, код программы также будет достаточно простой.

В программе шагомера с помощью датчика MPU6050 производится измерение ускорения по 3-м осям (X, Y и Z). Затем производится вычисление разницы между текущими и предыдущими значениями ускорения. Если эта разница будет больше определенной величины (для ходьбы больше 6, для бега более 10), производится увеличение счетчика числа шагов. Общее число сделанных шагов отображается на экране OLED дисплея.

Внешний вид счетчика шагов (шагомера) на ATtiny85 и акселерометре MPU6050

Чтобы сделать наш шагомер максимально компактным мы изготовили для него печатную плату с помощью сервиса PCBWay. При желании вы можете добавить в данный проект датчик частоты сердечных сокращений. Также на нашем сайте вы можете посмотреть проект шагомера на основе платы Arduino.

Необходимые компоненты

  1. Микроконтроллер ATtiny85 (купить на AliExpress).
  2. Модуль (датчик) MPU6050 (купить на AliExpress).
  3. Модуль OLED дисплея (купить на AliExpress).
  4. Резисторы (SMD) 10 кОм – 5 шт. (купить на AliExpress).
  5. Кнопки – 2 шт.

Гироскопический датчик (гироскоп) MPU-6050

MPU-6050 представляет собой 8-пиновый 3-осевой гироскоп, акселерометр и датчик температуры на едином чипе. По умолчанию данный модуль работает по интерфейсу I2C, но можно задействовать и интерфейс SPI. В нашем проекте мы будем использовать интерфейс (режим) I2C и в этом режиме нам понадобятся контакты SDA и SCL модуля.

Внешний вид гироскопа MPU-6050

Распиновка MPU-6050:
Vcc – контакт для подачи питающего напряжения постоянного тока;
GND – земля модуля;
SDA – это контакт используется для передачи данных между модулем mpu6050 и микроконтроллером;
SCL – вход синхронизации;
XDA – линия передачи данных (опциональная) по протоколу I2C для конфигурирования и считывания данных с внешних датчиков (не используется в нашем проекте);
XCL – вход синхронизации протокола I2C для конфигурирования и считывания данных с внешних датчиков (не используется в нашем проекте);
ADO – I2C Slave Address LSB (не используется в нашем проекте);
INT – контакт прерывания для индикации готовности данных.

На нашем сайте вы можете посмотреть следующие проекты на основе гироскопа MPU6050:

Работа схемы

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

Схема шагомера на ATtiny85 и акселерометре MPU6050Взаимодействие между MPU6050, OLED дисплеем м платой Arduino осуществляется с помощью протокола I2C. Поэтому контакт SCLPin (PB2) микроконтроллера ATtiny85 подключен к контактам SCLPin датчика MPU6050 и OLED дисплея. Аналогичным образом, контакт SDAPin (PB0) микроконтроллера ATtiny85 подключен к контактам SDAPin датчика MPU6050 и OLED дисплея. Две кнопки подключены к контактам PB3 и PB4 микроконтроллера ATtiny85. Эти кнопки используются для скроллинга или изменения текста на экране дисплея.

Изготовление печатной платы для шагомера на основе ATtiny85

Для проектирования печатной платы мы использовали редактор EasyEDA. 3D модель спроектированной нами печатной платы для этого проекта выглядит следующим образом:

3D модель спроектированной нами печатной платы для шагомера

Gerber файлы для изготовления печатной платы данного проекта можно скачать по следующей ссылке - Gerber file for ATtiny85 Step Counter.

Заказ печатной платы с сервиса PCBWay

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

Шаг 1. Перейдите на сайт https://www.pcbway.com, зарегистрируйтесь на нем если вы заходите на него в первый раз. На вкладке PCB Prototype (прототип печатной платы) укажите размеры печатной платы, число ее слоев и необходимое число плат.

Выбор основных параметров печатной платы

Шаг 2. Нажмите на кнопку ‘Quote Now’ (заказать сейчас). После этого вас перебросит на страницу, на которой вам необходимо будет ввести дополнительные параметры печатной платы: ее тип, слои, материал, толщину и т.д. Большинство этих параметров можно оставить такими, какими их сервис предлагает по умолчанию.

Выбор дополнительных параметров печатной платы

Шаг 3. В заключение вам необходимо загрузить в сервис Gerber файлы и оплатить заказ. Перед переходом к процессу оплаты сервис PCBWAY проверяет ваши Gerber файлы на корректность.

Загрузка Gerber файлов

Сборка шагомера на печатной плате

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

Низ и верх печатной платы для шагомера

После припаивания компонентов проекта к печатной плате у нас получилась конструкция следующего вида:

Конструкция проекта шагомера в сборе

Объяснение программы для ATtiny85

Полный текст программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Поскольку здесь используется программирование микроконтроллера ATtiny85 с помощью Arduino IDE, то для этого можно использовать USB программатор для ATtiny85 на основе загрузчика Digispark.

В коде программы мы будем использовать библиотеки TinyWireM.h и TinyOzOLED.h. Библиотеку TinyWireM можно непосредственно скачать из менеджера библиотек (Library Manager) Arduino IDE и установить ее оттуда же. Для этого откройте в Arduino IDE пункт меню Sketch < Include Library < Manage Libraries. После этого запустите поиск TinyWireM.h и установите ее. Эта библиотека написана компанией Adafruit.

Установка библиотеки TinyWireM.h с помощью Arduino IDE

Библиотеку TinyOzOLED.h можно скачать по следующей ссылке.

После установки этих библиотек первым делом в программе нам необходимо их подключить.

После этого объявим переменные, в которых будем хранить данные, считываемые с акселерометра.

Внутри функции setup() мы инициализируем связь по протоколу I2C, сбросим датчик MPU6050 при помощи регистра управления питанием. Также мы зададим ориентацию OLED дисплея и очистим его экран, а также введем адрес регистра для значений акселерометра и гироскопа.

В функции getAccel() мы начнем считывание данных акселерометра. Данные для каждой оси сохраняются в двух байтах (верхний и нижний) регистра. Чтобы считать их все начните с первого регистра, а затем используя функцию requiestFrom() мы считаем все 6 регистров для осей X, Y, Z. Затем мы считываем данные из каждого регистра, и поскольку значение каждой оси состоит из двух слагаемых, мы комбинируем (объединяем) их соответствующим образом чтобы получить полные значения данных с акселерометра.

Затем, внутри функции loop мы будем считывать значения осей X, Y и Z акселерометра и рассчитывать результирующий вектор ускорения при помощи вычисления квадратного корня из суммы квадратов значений осей. Затем мы будем рассчитывать разницу между текущим и предыдущим векторами ускорения и если значение этой разницы будет больше 6 мы будем инкрементировать счетчик шагов.

Тестирование работы шагомера

После сборки конструкции проекта загрузите программу в микроконтроллер ATtiny85. После этого возьмите шагомер в руки и начните ходьбу – вы должны увидеть как будет увеличиваться число шагов, отображаемое на экране OLED дисплея.

Тестирование работы шагомера

Видео с работой созданного нами шагомера приведено в конце статьи.

Исходный код программы на С

Видео, демонстрирующее работу шагомера

Источник статьи

(Проголосуй первым!)
Загрузка...
860 просмотров

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

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