Электротехнический интернет-журнал Electrik.info

"Электрик Инфо" - онлайн журнал про электричество. Теория и практика. Обучающие статьи, примеры, технические решения, схемы, обзоры интересных электротехнических новинок. Уроки, книги, видео. Профессиональное обучение и развитие. Сайт для электриков и домашних мастеров, а также для всех, кто интересуется электротехникой, электроникой и автоматикой.
 


Электрик Инфо » Схемы на микроконтроллерах » Как сделать шагомер и калькулятор расстояний на базе Arduino
17 августа 2021
Количество просмотров: 385
Комментарии к статье: 0


Как сделать шагомер и калькулятор расстояний на базе Arduino

Очень распространенной функцией фитнес-приложений для Android и iOS является вычисление количества шагов, которые пользователь ходит, и расстояния, которое он преодолевает.

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

В этом проекте мы разработали аналогичный калькулятор шагов ходьбы на платформе Arduino. Здесь используется метод отслеживания вектора ускорения устройства. Для этого акселерометр ADXL345 сопряжен с Arduino. Количество шагов, пройденных пользователем, и пройденное им расстояние отображаются на OLED-экране.

Автор проекта - Nikhil Agnihotri, Engineersgarage.com

Логику, используемую в этом проекте, можно легко воспроизвести в приложении для умных часов. Вы можете легко перенести логику кода на любой другой язык, поскольку он просто считывает данные с датчика акселерометра и манипулирует этими данными для обнаружения движения пользователя.

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

  • Arduino UNO x1;

  • Датчик акселерометра ADXL345 x1;

  • SSD1306 OLED-дисплей x1;

  • Соединительные провода и перемычки.

Схема подключения

Для разработки этого проекта датчик акселерометра ADXL345 и SSD1306 OLED сопрягаются с Arduino. Для этого подключите его контакты GND и VCC к заземлению Arduino и выходным контактам 3,3 В. Затем подключите контакты SDA и SCL датчика акселерометра к контактам SDA и SCL порта I2C на Arduino. В этом проекте 7-контактный OLED-модуль SSD1306 подключен к Arduino UNO.

Шагомер и калькулятор расстояний на базе Arduino
Принципиальная схема шагомера на базе Arduino

Принципиальная схема шагомера на базе Arduino

Скетч для Arduino:

Скетч в файле TXT

Как это работает

Когда устройство включено, OLED-дисплей SSD1306 инициализируется, и на экране мигают логотип «EEWORLDONLINE» и название устройства «Steps Counter». Первоначальное количество шагов отображается как 0, а пройденное расстояние также отображается как 0.

Теперь все, что нужно сделать пользователю, - это держать устройство при себе. Устройство постоянно отслеживает свой вектор ускорения с помощью датчика акселерометра ADXL345.

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

Средние значения ускорения рассчитываются при включении устройства и на экране мигают начальные сообщения. Средние значения также вычисляются путем взятия среднего из 50 последовательных показаний акселерометра ADXL345. Эти средние значения ускорения устройства по осям x, y и z служат контрольной точкой.

После завершения первоначальной настройки устройство снова вычисляет ускорение по осям x, y и z 50 раз подряд и вычисляет среднее из этих значений. Вектор ускорения устройства вычисляется путем извлечения квадратного корня из разницы текущих значений ускорения по сравнению с контрольными значениями.

После задержки в 250 миллисекунд устройство снова вычисляет ускорение по осям x, y и z 50 раз подряд и вычисляет среднее из этих значений. Вектор ускорения устройства вычисляется еще раз с интервалом 250 мс путем извлечения квадратного корня из разницы текущих значений ускорения по сравнению с эталонными значениями.

Вычисляется разница между вектором ускорения сейчас и вектором ускорения за 250 мс до этого, и если разница больше 0,05, шаг увеличивается.

Значение пройденного расстояния рассчитывается путем умножения количества шагов на один фут или 0,3048 метра, предполагая, что средняя длина шага составляет один фут.

Количество шагов и пройденное расстояние обновляются на OLED-экране с задержкой 400 мс.

Процесс вычисления разницы между двумя последовательными векторами ускорения устройства с интервалом 250 мс продолжается на всем протяжении для отслеживания движения пользователя.

Следует отметить, что задержка в 250 мс между вычислением двух последовательных усредненных векторов ускорения и разница 0,05 получается после тщательной калибровки устройства.

Вы должны отметить, что кнопка сброса Arduino действует как кнопка сброса для устройства и сбрасывает количество шагов и пройденное расстояние до нуля.

Код

Код начинается с импорта wire.h для связи I2C с датчиком акселерометра ADXL345 и SPI.h для связи с OLED-дисплеем SSD1306.

Библиотеки Adafruit для работы с OLED-дисплеями импортируются, а также константы, необходимые для OLED-интерфейса, и определенные параметры. Для класса SSD1306 инициализируется отображение объекта.

Растровое изображение для логотипа EEWORLDONLINE хранится в PROGMEM Arduino и преобразуется в объект массива. Объявляются переменные для хранения средних, текущих и ближайших значений ускорения. Объявлена ​​переменная для хранения количества шагов.

В функции setup () вызываются три разные функции. Ssd1306_init () вызывается для инициализации OLED-дисплея SSD1306 и передачи на него начальных сообщений. Adxl345_init () вызывается для инициализации датчика ускорения.

Функция read_av_acc () вызывается для вычисления опорных значений ускорения, когда устройство находится в состоянии покоя. В функции loop () вектор ускорения вычисляется дважды с интервалом 250 мс, и если разница между двумя значениями больше 0,05, увеличивается один шаг. Количество шагов и пройденное расстояние обновляются на OLED-дисплее.

Результат:

Шагомер и калькулятор расстояний на базе Arduino
Шагомер и калькулятор расстояний на базе Arduino

Демонстрационное видео:

 





Поделитесь этой статьей с друзьями:


Другие статьи с сайта Электрик Инфо:

  • Что такое гироскоп и акселерометр
  • Измерение температуры и влажности на Arduino – подборка способов
  • Знакомство с Waveshare Alphabot
  • Новая плата Arduino Nano RP2040 Connect
  • 7 учебных курсов по работе с Ардуино, онлайн обучение проектированию и конс ...
  • Как устроены и работают датчики звука (датчики шума)
  • Arduino Uno против Arduino Leonardo - какая плата лучше?
  • Органические светодиоды. Перспективы развития
  • Как устроен и работает датчик линии
  • Подключение аналоговых датчиков к Ардуино, считывание показаний датчиков
  • Категория: Схемы на микроконтроллерах

    Программирование Ардуино, Arduino для начинающих

    Добавление комментария
    Имя:*
    Комментарий:

    Популярные статьи:

    Присоединяйтесь к нам в социальных сетях:

    ВКонтакте | Facebook | Одноклассники | Яндекс Дзен

     


    Популярные разделы сайта:

    Электрика дома  Электрообзоры  Энергосбережение
    Секреты электрика Источники света Делимся опытом
    Домашняя автоматика Электрика для начинающих
    Практическая электроника Электротехнические новинки

    Источник фотографий: Стоковые изображения от Depositphotos

    Copyright © 2009-2021 Электрик Инфо - Electrik.info, Андрей Повный
    Вся информация на сайте предоставлена в ознакомительных и познавательных целях.
    За применение этой информации администрация сайта ответственности не несет.
    Перепечатка материалов сайта запрещена.