Оглавление:
- Шаг 1. Соберите щит / макетную плату
- Шаг 2: запрограммируйте Arduino
- Шаг 3. Загрузите приложение для Android из Google Play или откройте GitHub
- Шаг 4: Подключите Arduino к чему-нибудь интересному (я использовал автомобиль с радиоуправлением)
- Шаг 5. Используйте устройство Android для подключения к Arduino
- Шаг 6: Сбор и нанесение данных на график
- Шаг 7. Импортируйте в Python (или другую платформу) для дальнейшего использования
Видео: Регистрация данных MPU-6050 / A0 в реальном времени с помощью Arduino и Android: 7 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Мне было интересно использовать 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
Я использовал версию 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 на ваше устройство. Если вы хотите избежать кодирования, вы можете выполнить поиск по запросу «Accel Plot», и приложение должно появиться в магазине Google Play. Следуйте инструкциям магазина по установке.
Мое желание с этим Instructable - действительно побудить других создавать проекты, поэтому я также опубликовал код в репозитории GitHub. Вы должны иметь возможность разветвлять, строить и изменять по своему усмотрению. Я опубликовал код под лицензией MIT, так что получайте удовольствие!
Шаг 4: Подключите Arduino к чему-нибудь интересному (я использовал автомобиль с радиоуправлением)
Я хочу в конечном итоге использовать устройство для обнаружения дорожного покрытия, поэтому я подумал, что небольшой автомобиль с дистанционным управлением (R / C) будет подходящим. Я думаю, что на следующем этапе будет полезно, если ускорение будет происходить от чего-то, что движется или вибрирует.
Шаг 5. Используйте устройство Android для подключения к Arduino
Если вы еще этого не сделали, вам необходимо сначала подключить HC-05 к вашему устройству Android. Я считаю, что на большинстве устройств это можно сделать, зайдя в настройки. PIN-код по умолчанию для большинства устройств HC-05 будет 1234 или 1111.
Откройте приложение AccelPlot на устройстве Android. Когда приложение открывается, и до того, как вы подключитесь к HC-05, вы можете изменить частоту дискретизации (она задается в коде Arduino), шкалы акселерометра (также установленные в коде Arduino) и количество сохраняемых отсчетов.
После того, как эти настройки будут выполнены, нажмите кнопку «Подключиться». Должны появиться устройства Bluetooth, и ваше устройство должно быть в списке. Выберите его, и как только код установит соединение, вы увидите всплывающее всплывающее окно «Подключено».
Используйте кнопку со стрелкой назад, чтобы вернуться к графику ускорения. Нажмите кнопку «Начать поток», чтобы отобразить данные с устройства HC-05. Вам также должны быть доступны кнопки для сохранения данных или воспроизведения частотно-модулированного контента через аудиоразъем.
Шаг 6: Сбор и нанесение данных на график
Кнопка «Начать поток» должна быть включена. Коснитесь его, чтобы начать потоковую передачу данных на экран.
Кнопка «Сохранить данные» также будет включена, нажмите ее, чтобы сохранить данные.
Accel Plot также включает возможность вывода модулированного сигнала по аудиоканалам. Два канала в приложении Accel Plot относятся к левому и правому каналам аудиовыхода на устройстве Android. Это полезно, если вы хотите перенести данные MPU-6050 в отдельную систему регистрации данных, такую как National Instruments.
На видео показан пример системы сбора данных о радиоуправляемом автомобиле.
Шаг 7. Импортируйте в 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», который показывает, как читать в отдельном файле по имени.
Рекомендуемые:
Как сделать отслеживание данных о коронавирусе COVID 19 в реальном времени с помощью ESP8266, отображение электронной бумаги: 7 шагов
Как сделать трекер данных о коронавирусе COVID 19 в реальном времени с ESP8266, дисплей электронной бумаги: 1
Как сделать регистратор данных влажности и температуры в реальном времени с Arduino UNO и SD-картой - Моделирование регистратора данных DHT11 в Proteus: 5 шагов
Как сделать регистратор данных влажности и температуры в реальном времени с Arduino UNO и SD-картой | Моделирование регистратора данных DHT11 в Proteus: Введение: привет, это Liono Maker, вот ссылка на YouTube. Мы делаем творческий проект с Arduino и работаем над встраиваемыми системами. Регистратор данных: Регистратор данных (также регистратор данных или регистратор данных) - это электронное устройство, которое записывает данные с течением времени
Построение графика данных датчика температуры в реальном времени (TMP006) с использованием MSP432 LaunchPad и Python: 9 шагов
Построение графика данных датчика температуры в реальном времени (TMP006) с использованием MSP432 LaunchPad и Python: TMP006 - это датчик температуры, который измеряет температуру объекта без необходимости соприкасаться с ним. В этом руководстве мы построим график данных температуры в реальном времени из BoosterPack (TI BOOSTXL-EDUMKII) с использованием Python
Робот SCARA: изучение прямой и обратной кинематики !!! (Поворот сюжета. Узнайте, как создать интерфейс в реальном времени в ARDUINO с помощью ОБРАБОТКИ !!!!): 5 шагов (с изображениями)
Робот SCARA: изучение прямой и обратной кинематики !!! (Поворот сюжета. Узнайте, как создать интерфейс в реальном времени в ARDUINO с помощью ОБРАБОТКИ !!!!): Робот SCARA - очень популярная машина в мире индустрии. Это название означает как «Селективная совместимая сборка робота-манипулятора», так и «Селективно-совместимый шарнирный манипулятор робота». По сути, это робот с тремя степенями свободы, первые две из которых
IoT Data Science PiNet для визуализации данных смарт-экрана в реальном времени: 4 шага
Наука о данных IoT PiNet для визуализации данных интеллектуального экрана в реальном времени: вы можете легко собрать сеть интеллектуальных дисплеев Интернета вещей для визуализации данных, чтобы усилить ваши исследовательские усилия в области науки о данных или любой другой количественной области. Вы можете вызвать кнопку " push " ваших участков клиентам прямо из вашего