Índice:

Registro de dados MPU-6050 / A0 em tempo real com Arduino e Android: 7 etapas (com imagens)
Registro de dados MPU-6050 / A0 em tempo real com Arduino e Android: 7 etapas (com imagens)

Vídeo: Registro de dados MPU-6050 / A0 em tempo real com Arduino e Android: 7 etapas (com imagens)

Vídeo: Registro de dados MPU-6050 / A0 em tempo real com Arduino e Android: 7 etapas (com imagens)
Vídeo: Como usar o arduino uno, aula completa APRENDA RÁPIDO!! 2024, Novembro
Anonim
Registro de dados MPU-6050 / A0 em tempo real com Arduino e Android
Registro de dados MPU-6050 / A0 em tempo real com Arduino e Android

Tenho interesse em usar o Arduino para aprendizado de máquina. Como uma primeira etapa, quero construir um display de dados em tempo real (ou muito próximo disso) e logger com um dispositivo Android. Quero capturar dados do acelerômetro do MPU-6050, então projetei a construção para usar o HC-05 a 115200 baud. Com esta configuração, 4 canais de dados podem ser transmitidos a 250 amostras por segundo.

A construção possui algumas etapas:

  • Construir o escudo ou placa de ensaio
  • Programe o Arduino
  • Carregue o aplicativo Android do Google Play ou ramifique o GitHub e compile você mesmo
  • Conecte o MPU-6050 a algo interessante que vibre (usei um carro R / C)
  • Use o dispositivo Android para se conectar ao Arduino
  • Plote os dados, salve se estiver interessado
  • Importe para Python (ou outra plataforma) para uso posterior

Vamos começar!

Etapa 1: construir o escudo / placa de ensaio

Construir o escudo / placa de ensaio
Construir o escudo / placa de ensaio
Construir o escudo / placa de ensaio
Construir o escudo / placa de ensaio

Este é o diagrama de fiação do Arduino, HC-05 e do MPU-6050. Além do MPU-6050, tenho a entrada analógica A0 conectada a um sensor de luz para mostrar que o ADC está funcionando. Qualquer sinal de 0-5 volts pode ser trazido para o ADC A0. Estes são os componentes que usei para a construção:

  • Arduino Uno
  • HC-05 (O HC-06 deve funcionar também, mas minha construção foi com o HC-05)
  • MPU-6050
  • Fotorresistor Sparkfun
  • Resistor de 10kOhm (marrom-preto-laranja)

A maioria dos módulos Bluetooth HC-05 tem como padrão 9600 baud. Para que os dados sejam transmitidos com sucesso, você precisará reprogramá-los para uma taxa de bauds de 115200. Há um bom Instrutor de Comando AT HC-05 / HC-06 que explica como fazê-lo.

Etapa 2: programar o Arduino

Programe o Arduino
Programe o Arduino
Programe o Arduino
Programe o Arduino

Usei o Arduino IDE versão 1.6.7 para programar o Arduino. O código pode ser baixado dos links nesta etapa ou do repositório GitHub. Incluí três versões: Firmware125.ino é a versão de 125 hertz, Firmware250.ino é a versão de 250 hertz e Firmware500.ino é a versão de 500 hertz. Para fazer o Arduino circular a 500 hertz, o ADC A0 não é coletado.

O firmware inclui uma saída de relógio no pino 9 que usei para verificar o tempo. O traçado mostra que o tempo de ciclo é de 4 ms (equivalente a 1/250 hertz). Descobri que, se houver problemas de link serial, o tempo não será uniforme.

O código do Arduino usa o mascaramento de bits para adicionar um número de canal a cada pacote porque as amostras às vezes caem no Bluetooth. Eu uso os três bits mais significativos para armazenar um número de canal. Para inteiros com sinal, o bit mais significativo (MSB) é reservado para o sinal. Como quero usar o MSB para meu endereço, em vez do sinal do inteiro, preciso converter todos os valores do acelerômetro com sinal em inteiros sem sinal. Eu faço isso adicionando 32.768 a cada valor (as contagens de ADC do acelerômetro MPU são de +32768 a -32768) e convertido como inteiros sem sinal:

(int sem sinal) ((longo) iAccelData + 32767);

O número do canal é o mesmo para cada acelerômetro e a porta A0 para que um pacote descartado possa ser detectado se os números do canal estiverem fora de ordem. Para os pacotes vindos do Bluetooth no Arduino, o padrão binário é (os sinais mudam bit a bit):

(bits de endereço xacc 3 = 0x00, 13 bits não assinados) (bits de endereço yacc 3 = 0x01, 13 bits não assinados) (bits de endereço zacc 3 = 0x02, 13 bits não assinados) (3 bits de endereço = 0x03, iadc13 bits não assinados)

(bits de endereço xacc 3 = 0x00, 13 bits não assinados) (bits de endereço yacc 3 = 0x01, 13 bits não assinados) (bits de endereço zacc 3 = 0x02, 13 bits não assinados) (3 bits de endereço = 0x03, iadc13 bits não assinados) (xacc 3 bits de endereço = 0x00, 13 bits não assinados) (bits de endereço yacc 3 = 0x01, 13 bits não assinados) (bits de endereço zacc 3 = 0x02, 13 bits não assinados) (3 bits de endereço = 0x03, iadc13bit não assinados)…

Se estiver usando algo diferente do aplicativo Accel Plot Android para ler os dados Bluetooth, aqui estão as etapas para extrair o endereço (estou usando os nomes das variáveis do arquivo Accel Plot Bluetooth.java do repositório GitHub):

- Leia no 16 não assinado int

- Extraia o byte alto e salve-o em btHigh.

- Extraia o byte baixo e salve-o em btLow.

- Recupere o endereço de btHigh usando: (btHigh >> 5) & 0x07. Essa instrução desloca btHigh 5 bits para a direita, movendo os três bits de endereço para os três registradores mais baixos. O sinal & é um AND lógico que força os bits 4 e superiores a zero e os três últimos bits a corresponderem aos bits de endereço. O resultado desta declaração é o seu endereço.

Você não precisa se preocupar com a extração de endereço se estiver usando o Accel Plot.

Etapa 3: carregue o aplicativo Android do Google Play ou ramifique o GitHub

Carregue o aplicativo Android do Google Play ou ramifique o GitHub
Carregue o aplicativo Android do Google Play ou ramifique o GitHub

Você tem algumas opções para carregar o aplicativo Android em seu dispositivo. Se você quiser evitar a codificação, pode pesquisar por "Accel Plot" e o aplicativo deve aparecer na Google Play Store. Siga as instruções da loja para instalação.

Meu desejo com este Instructable é realmente encorajar outros a construir projetos, então também publiquei o código em um repositório do GitHub. Você deve ser capaz de ramificar isso, construí-lo e modificá-lo como achar melhor. Publiquei o código sob a licença do MIT, então divirta-se!

Etapa 4: conectar o Arduino a algo interessante (usei um carro R / C)

Conecte-se ao Arduino a algo interessante (usei um carro R / C)
Conecte-se ao Arduino a algo interessante (usei um carro R / C)

Desejo eventualmente usar o dispositivo para detecção de superfície de estrada, então pensei que um pequeno carro com controle remoto (R / C) seria apropriado. Acho que ajuda na próxima etapa se os aceleradores puderem ser em algo que se move ou vibra.

Etapa 5: use o dispositivo Android para se conectar ao Arduino

Use o dispositivo Android para se conectar ao Arduino
Use o dispositivo Android para se conectar ao Arduino
Use o dispositivo Android para se conectar ao Arduino
Use o dispositivo Android para se conectar ao Arduino
Use o dispositivo Android para se conectar ao Arduino
Use o dispositivo Android para se conectar ao Arduino

Se ainda não tiver feito isso, você precisará primeiro emparelhar o HC-05 com o seu dispositivo Android. Acredito que na maioria dos dispositivos você pode fazer isso acessando as configurações. O pino padrão para a maioria dos dispositivos HC-05 será 1234 ou 1111.

Abra o aplicativo AccelPlot no dispositivo Android. Quando o aplicativo é aberto, e antes de conectar ao HC-05, você pode alterar a taxa de amostragem (isso é definido no código do Arduino), as escalas do acelerômetro (também definidas no código do Arduino) e o número de amostras a serem salvas.

Depois de fazer essas configurações, clique no botão "Conectar". Deve abrir os dispositivos Bluetooth e seu dispositivo deve estar listado. Selecione-o e, assim que o código estabelecer a conexão, você verá uma janela de brinde "Conectado".

Use o botão de seta para trás para retornar ao gráfico de aceleração. Toque no botão "Iniciar transmissão" para exibir os dados do dispositivo HC-05. Você também deve ter botões disponíveis para salvar os dados ou reproduzir o conteúdo modulado em frequência através do conector de áudio.

Etapa 6: Adquira e Plote os Dados

Image
Image
Importar para Python (ou outra plataforma) para uso posterior
Importar para Python (ou outra plataforma) para uso posterior

O botão "Iniciar transmissão" deve estar habilitado. Toque nele para começar a transmitir dados para a tela.

O botão "Salvar dados" também será habilitado, toque nele para armazenar os dados.

O Accel Plot também inclui uma opção de saída de um sinal modulado nos canais de áudio. Os 2 canais no aplicativo Accel Plot referem-se aos canais esquerdo e direito da saída de áudio do dispositivo Android. Isso é útil se você deseja trazer os dados do MPU-6050 para um sistema de registro de dados separado, como um National Instruments.

O vídeo mostra um exemplo do sistema de coleta de dados em um carro R / C.

Etapa 7: importar para Python (ou outra plataforma) para uso posterior

Importar para Python (ou outra plataforma) para uso posterior
Importar para Python (ou outra plataforma) para uso posterior

Os arquivos são salvos no dispositivo Android. Os arquivos serão armazenados no diretório "AccelPlot" para Android API 18 e anteriores. O código coloca os arquivos.dat na pasta "\ Tablet / Documents / AccelPlot" para API 19 (KitKat 4.4) e superior. Tive problemas com alguns dispositivos Android mostrando os arquivos quando conectados via USB. Em alguns casos, tive que reiniciar o dispositivo Android para que eles aparecessem. Não sei por que isso acontece, mas deve haver quatro arquivos, um para cada canal. Eles podem ser copiados para um diretório local para trabalho adicional.

Usei o Anaconda / Python 2.7 para abrir os arquivos e exibir os dados. O arquivo "ExploratoryAnalysis.ipynb" contém o arquivo IPython Notebook que abrirá todos os arquivos de dados e plotará os dados de amostra. Os arquivos de amostra são incluídos no repositório GitHub. Os dados são salvos como flutuadores big-endian de 4 bytes ('> f'), portanto, qualquer programa de análise deve ser capaz de abri-los.

Também incluí um arquivo mais simples chamado "ReadDataFiles.ipynb" que mostra como ler em um único arquivo por nome.

Recomendado: