Оглавление:

Регистрация данных MPU-6050 / A0 в реальном времени с помощью Arduino и Android: 7 шагов (с изображениями)
Регистрация данных MPU-6050 / A0 в реальном времени с помощью Arduino и Android: 7 шагов (с изображениями)

Видео: Регистрация данных MPU-6050 / A0 в реальном времени с помощью Arduino и Android: 7 шагов (с изображениями)

Видео: Регистрация данных MPU-6050 / A0 в реальном времени с помощью Arduino и Android: 7 шагов (с изображениями)
Видео: Raspberry Pi и MATLAB 2024, Декабрь
Anonim
Запись данных MPU-6050 / A0 в реальном времени с помощью Arduino и Android
Запись данных MPU-6050 / A0 в реальном времени с помощью Arduino и Android

Мне было интересно использовать Arduino для машинного обучения. В качестве первого шага я хочу создать отображение данных и регистратор данных в реальном времени (или довольно близко к нему) с помощью устройства Android. Я хочу получить данные акселерометра с MPU-6050, поэтому я разработал сборку для использования HC-05 на скорости 115200 бод. При такой конфигурации 4 канала данных могут передаваться со скоростью 250 выборок в секунду.

Сборка состоит из нескольких шагов:

  • Соберите щит или макет
  • Запрограммируйте Arduino
  • Загрузите приложение Android из Google Play или ответьте на GitHub и скомпилируйте его самостоятельно.
  • Подключите MPU-6050 к чему-нибудь интересному, что вибрирует (я использовал автомобиль с дистанционным управлением).
  • Используйте устройство Android для подключения к Arduino
  • Постройте данные, сохраните, если интересно
  • Импортировать в Python (или другую платформу) для дальнейшего использования

Давайте начнем!

Шаг 1. Соберите щит / макетную плату

Постройте щит / макетную плату
Постройте щит / макетную плату
Создайте щит / макетную плату
Создайте щит / макетную плату

Это схема подключения Arduino, HC-05 и MPU-6050. В дополнение к MPU-6050 у меня есть аналоговый вход A0, подключенный к датчику освещенности, чтобы показать, что АЦП работает. Любой сигнал 0-5 вольт может быть подан на АЦП A0. Вот компоненты, которые я использовал для сборки:

  • Ардуино Уно
  • HC-05 (HC-06 тоже должен работать, но моя сборка была с HC-05)
  • MPU-6050
  • Фоторезистор Sparkfun
  • Резистор 10кОм (коричнево-чёрно-оранжевый)

Большинство модулей Bluetooth HC-05 по умолчанию имеют скорость 9600 бод. Для успешной передачи данных вам необходимо перепрограммировать их на скорость 115200 бод. Есть хорошая инструкция по AT-командам HC-05 / HC-06, которая объясняет, как это сделать.

Шаг 2: запрограммируйте Arduino

Запрограммируйте Arduino
Запрограммируйте Arduino
Запрограммируйте Arduino
Запрограммируйте Arduino

Я использовал версию 1.6.7 IDE Arduino для программирования Arduino. Код можно скачать по ссылкам на этом шаге или из репозитория GitHub. Я включил три версии: Firmware125.ino - это версия с частотой 125 Гц, Firmware250.ino - версия с частотой 250 Гц и Firmware500.ino - версия с частотой 500 Гц. Чтобы заставить Arduino циклически работать на частоте 500 Гц, АЦП A0 не собирается.

Прошивка включает вывод часов на выводе 9, который я использовал для проверки времени. График показывает, что время цикла составляет 4 мс (эквивалент 1/250 герц). Я обнаружил, что если есть проблемы с последовательным соединением, время не будет одинаковым.

Код Arduino действительно использует битовую маску для добавления номера канала к каждому пакету, потому что образцы иногда падают через Bluetooth. Я использую три наиболее значимых бита для хранения номера канала. Для целых чисел со знаком старший бит (MSB) зарезервирован для знака. Поскольку я хочу использовать MSB для своего адреса, а не знак целого числа, мне нужно преобразовать все значения акселерометра со знаком в целые числа без знака. Я делаю это, добавляя 32768 к каждому значению (счетчики АЦП акселерометра MPU составляют от +32768 до -32768) и преобразовываю их как целые числа без знака:

(целое число без знака) ((длинное) iAccelData + 32767);

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

(3 бита адреса xacc = 0x00, 13 бит без знака) (3 бита адреса yacc = 0x01, 13 бит без знака) (3 бита адреса zacc = 0x02, 13 бит без знака) (3 бита адреса = 0x03, iadc 13 бит без знака)

(3 бит адреса xacc = 0x00, 13 бит без знака) (3 бит адреса yacc = 0x01, 13 бит без знака) (3 бит адреса zacc = 0x02, 13 бит без знака) (3 бита адреса = 0x03, iadc13 бит без знака) (3 бит адреса xacc = 0x00, 13 бит без знака) (3 бита адреса yacc = 0x01, 13 бит без знака) (3 бита адреса zacc = 0x02, 13 бит без знака) (3 бита адреса = 0x03, iadc 13 бит без знака)…

Если для чтения данных Bluetooth вы используете что-то другое, кроме Android-приложения Accel Plot, вот шаги для извлечения адреса (я использую имена переменных из файла Accel Plot Bluetooth.java из репозитория GitHub):

- Прочитать 16 беззнаковых int

- Извлеките старший байт и сохраните его в btHigh.

- Извлеките младший байт и сохраните его в btLow.

- Получите адрес из btHigh, используя: (btHigh >> 5) & 0x07. Этот оператор сдвигает btHigh 5 бит вправо, перемещая три адресных бита в три младших регистра. Знак & - это логическое И, которое заставляет биты 4 и выше быть равными нулю, а последние три бита - соответствовать битам адреса. Результатом этого утверждения является ваш адрес.

Вам не нужно беспокоиться об извлечении адреса, если вы используете Accel Plot.

Шаг 3. Загрузите приложение для Android из Google Play или откройте GitHub

Загрузите приложение для Android из Google Play или откройте GitHub
Загрузите приложение для Android из Google Play или откройте GitHub

У вас есть несколько вариантов загрузки приложения Android на ваше устройство. Если вы хотите избежать кодирования, вы можете выполнить поиск по запросу «Accel Plot», и приложение должно появиться в магазине Google Play. Следуйте инструкциям магазина по установке.

Мое желание с этим Instructable - действительно побудить других создавать проекты, поэтому я также опубликовал код в репозитории GitHub. Вы должны иметь возможность разветвлять, строить и изменять по своему усмотрению. Я опубликовал код под лицензией MIT, так что получайте удовольствие!

Шаг 4: Подключите Arduino к чему-нибудь интересному (я использовал автомобиль с радиоуправлением)

Подключитесь к Arduino к чему-нибудь интересному (я использовал машину с радиоуправлением)
Подключитесь к Arduino к чему-нибудь интересному (я использовал машину с радиоуправлением)

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

Шаг 5. Используйте устройство Android для подключения к Arduino

Используйте устройство Android для подключения к Arduino
Используйте устройство Android для подключения к Arduino
Используйте устройство Android для подключения к Arduino
Используйте устройство Android для подключения к Arduino
Используйте устройство Android для подключения к Arduino
Используйте устройство Android для подключения к Arduino

Если вы еще этого не сделали, вам необходимо сначала подключить HC-05 к вашему устройству Android. Я считаю, что на большинстве устройств это можно сделать, зайдя в настройки. PIN-код по умолчанию для большинства устройств HC-05 будет 1234 или 1111.

Откройте приложение AccelPlot на устройстве Android. Когда приложение открывается, и до того, как вы подключитесь к HC-05, вы можете изменить частоту дискретизации (она задается в коде Arduino), шкалы акселерометра (также установленные в коде Arduino) и количество сохраняемых отсчетов.

После того, как эти настройки будут выполнены, нажмите кнопку «Подключиться». Должны появиться устройства Bluetooth, и ваше устройство должно быть в списке. Выберите его, и как только код установит соединение, вы увидите всплывающее всплывающее окно «Подключено».

Используйте кнопку со стрелкой назад, чтобы вернуться к графику ускорения. Нажмите кнопку «Начать поток», чтобы отобразить данные с устройства HC-05. Вам также должны быть доступны кнопки для сохранения данных или воспроизведения частотно-модулированного контента через аудиоразъем.

Шаг 6: Сбор и нанесение данных на график

Image
Image
Импорт в Python (или другую платформу) для дальнейшего использования
Импорт в Python (или другую платформу) для дальнейшего использования

Кнопка «Начать поток» должна быть включена. Коснитесь его, чтобы начать потоковую передачу данных на экран.

Кнопка «Сохранить данные» также будет включена, нажмите ее, чтобы сохранить данные.

Accel Plot также включает возможность вывода модулированного сигнала по аудиоканалам. Два канала в приложении Accel Plot относятся к левому и правому каналам аудиовыхода на устройстве Android. Это полезно, если вы хотите перенести данные MPU-6050 в отдельную систему регистрации данных, такую как National Instruments.

На видео показан пример системы сбора данных о радиоуправляемом автомобиле.

Шаг 7. Импортируйте в Python (или другую платформу) для дальнейшего использования

Импорт в Python (или другую платформу) для дальнейшего использования
Импорт в Python (или другую платформу) для дальнейшего использования

Файлы сохраняются на устройстве Android. Файлы будут храниться в каталоге «AccelPlot» для Android API 18 и старше. Код помещает файлы.dat в папку «\ Tablet / Documents / AccelPlot» для API 19 (KitKat 4.4) и выше. У меня возникли проблемы с отображением файлов на некоторых устройствах Android при подключении через USB. В некоторых случаях мне приходилось перезагружать устройство Android, чтобы они появились. Не уверен, почему это так, но должно быть четыре файла, по одному на каждый канал. Их можно скопировать в локальный каталог для дополнительной работы.

Я использовал Anaconda / Python 2.7 для открытия файлов и отображения данных. В файле «ExploratoryAnalysis.ipynb» есть файл IPython Notebook, который открывает все файлы данных и отображает образцы данных. Примеры файлов включены в репозиторий GitHub. Данные сохраняются как 4-байтовые числа с обратным порядком байтов с обратным порядком байтов ('> f'), поэтому любая программа анализа должна иметь возможность открывать их.

Я также включил более простой файл под названием «ReadDataFiles.ipynb», который показывает, как читать в отдельном файле по имени.

Рекомендуемые: