Съдържание:

Регистриране на данни в реално време MPU-6050/A0 с Arduino и Android: 7 стъпки (със снимки)
Регистриране на данни в реално време MPU-6050/A0 с Arduino и Android: 7 стъпки (със снимки)

Видео: Регистриране на данни в реално време MPU-6050/A0 с Arduino и Android: 7 стъпки (със снимки)

Видео: Регистриране на данни в реално време MPU-6050/A0 с Arduino и Android: 7 стъпки (със снимки)
Видео: РЕГИСТРАЦИИ, МИГРАЦИОННОГО УЧЁТА НЕТ В БАЗЕ ЧТО ДЕЛАТЬ?! МВД. Юрист. 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 към нещо интересно, което вибрира (използвах R/C автомобил)
  • Използвайте устройството с Android, за да се свържете с Arduino
  • Начертайте данните, запишете при интерес
  • Импортирайте в Python (или друга платформа) за по -нататъшна употреба

Да започваме!

Стъпка 1: Изградете щита/макета

Изградете щита/макета
Изградете щита/макета
Изградете щита/макета
Изградете щита/макета

Това е схемата на свързване на Arduino, HC-05 и MPU-6050. В допълнение към MPU-6050 имам аналогов вход A0, свързан към светлинен сензор, за да покажа, че ADC работи. Всеки сигнал 0-5 волта може да бъде въведен в A0 ADC. Това са компонентите, които използвах за изграждането:

  • Arduino Uno
  • HC-05 (HC-06 също трябва да работи, но моята конструкция беше с HC-05)
  • MPU-6050
  • Фоторезистор Sparkfun
  • 10kOhm резистор (кафяво-черно-оранжево)

Повечето Bluetooth модули HC-05 по подразбиране са 9600 бода. За да могат данните да се предават успешно, ще трябва да ги препрограмирате за скорост от 115200 бода. Има добър HC-05/HC-06 AT Command Instructable, който обяснява как да го направите.

Стъпка 2: Програмирайте Arduino

Програмирайте Arduino
Програмирайте Arduino
Програмирайте Arduino
Програмирайте Arduino

Използвах Arduino IDE версия 1.6.7 за програмиране на Arduino. Кодът може да бъде изтеглен от връзките в тази стъпка или от репо GitHub. Включих три версии: Firmware125.ino е версията от 125 херца, Firmware250.ino е версията от 250 херца, а Firmware500.ino е версията от 500 херца. За да накара Arduino да работи при 500 херца, А0 ADC не се събира.

Фърмуерът включва часовник на Pin 9, който използвах за проверка на времето. Проследяването показва, че времето на цикъла е 4 ms (еквивалентно на 1/250 херца). Открих, че ако има проблеми със серийната връзка, времето няма да бъде равномерно.

Кодът на Arduino използва маскиране на битове, за да добави номер на канал към всеки пакет, защото пробите понякога попадат през Bluetooth. Използвам трите най -значими бита за съхраняване на номер на канал. За подписаните цели числа най -значимият бит (MSB) е запазен за знака. Тъй като искам да използвам MSB за моя адрес, а не знака на цяло число, трябва да преобразувам всички подписани стойности на акселерометър в беззнакови цели числа. Правя това, като добавя 32768 към всяка стойност (броят на ADC акселерометъра ADC е от +32768 до -32768) и се прехвърля като беззначни цели числа:

(без знак int) ((дълъг) iAccelData+32767);

Номерът на канала е един и същ за всеки акселерометър и порт A0, така че изпуснат пакет може да бъде открит, ако номерата на каналите не са в ред. За пакетите, идващи от Bluetooth на Arduino, двоичният модел е (знаците се разменят по малко):

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

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

Ако използвате нещо различно от приложението Accel Plot Android за четене на Bluetooth данни, ето стъпките за извличане на адреса (използвам имената на променливите от файла 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 към нещо интересно (използвах R/C автомобил)

Свържете се с Arduino към нещо интересно (използвах R/C кола)
Свържете се с Arduino към нещо интересно (използвах R/C кола)

Искам в крайна сметка да използвам устройството за откриване на пътна настилка, затова реших, че ще бъде подходяща малка кола с дистанционно управление (R/C). Мисля, че ще помогне в следващата стъпка, ако акцентите могат да бъдат върху нещо, което се движи или вибрира.

Стъпка 5: Използвайте устройството с Android, за да се свържете с Arduino

Използвайте устройството с Android, за да се свържете с Arduino
Използвайте устройството с Android, за да се свържете с Arduino
Използвайте устройството с Android, за да се свържете с Arduino
Използвайте устройството с Android, за да се свържете с Arduino
Използвайте устройството с Android, за да се свържете с Arduino
Използвайте устройството с Android, за да се свържете с Arduino

Ако все още не сте го направили, първо ще трябва да сдвоите HC-05 с вашето Android устройство. Вярвам, че на повечето устройства можете да направите това, като отидете в настройките. Пин по подразбиране за повечето устройства HC-05 ще бъде 1234 или 1111.

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

След като тези настройки бъдат направени, кликнете върху бутона „Свързване“. Той трябва да изведе Bluetooth устройствата и вашето устройство трябва да бъде в списъка. Изберете го и след като кодът установи връзката, ще видите изскачащ тост „Свързан“.

Използвайте бутона със стрелка назад, за да се върнете към Accel Plot. Докоснете бутона „Стартиране на потока“, за да се покажат данни от устройството HC-05. Трябва също да разполагате с бутони за запазване на данните или възпроизвеждане на честотно модулирано съдържание през аудио жака.

Стъпка 6: Придобийте и начертайте данните

Image
Image
Импортирайте в Python (или друга платформа) за по -нататъшна употреба
Импортирайте в Python (или друга платформа) за по -нататъшна употреба

Бутонът "Стартиране на потока" трябва да бъде активиран. Докоснете го, за да започнете поточно предаване на данни към екрана.

Бутонът „Запазване на данни“също ще бъде активиран, докоснете го, за да съхраните данните.

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

Видеото показва пример за системата, която събира данни за R/C автомобил.

Стъпка 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", който показва как да се чете в един файл по име.

Препоръчано: