Ir ao conteúdo
  • Cadastre-se

Jackson10

Membro Júnior
  • Posts

    13
  • Cadastrado em

  • Última visita

Tudo que Jackson10 postou

  1. om dia, boa tarde ou boa noite como faço pra calibrar meu código no arduino onde faço o uso do acelerômetro/giroscópio MPU-6050 para que as medições dele em repouso fiquem o mais próximo de zero possível? Já tentei alguns códigos de calibração mas não surtiram efeito. Quando faço a medição com o código os três eixos medidos (x,y e z) não ficam zerados lá no plotter e isso causa uma certa imprecisão nas medições. Segue o código, grato desde já. #include <I2Cdev.h> #include <Wire.h> #include <SPI.h> #include <SD.h> #include "MPU6050.h" #include <Bounce2.h> // https://github.com/thomasfredericks/Bounce2/archive/refs/heads/master.zip #define PINO_BOTAO 5 // Pino ligado ao CS do modulo const int chipSelect = 4; Bounce2::Button botao = Bounce2::Button(); // O endereço do MPU6050 pode ser 0x68 ou 0x69, dependendo // do estado de AD0. Se não for especificado, 0x68 estará implícito MPU6050 sensor; // Valores RAW (não processados) do acelerômetro e giroscópio nos eixos x,y,z int ax, ay, az; int gx, gy, gz; unsigned long tempo_prev; float dt; float ang_x, ang_y, ang_z; float ang_x_prev, ang_y_prev, ang_z_prev; int contador = 0; void setup() { botao.attach(PINO_BOTAO, INPUT); botao.interval(5); // Intervalo em ms botao.setPressedState(LOW); Serial.begin(115200); // Iniciando porta serial Wire.begin(); // Iniciando I2C sensor.initialize(); // Iniciando o sensor if (sensor.testConnection()) { Serial.println("Sensor iniciado correctamente"); } else { Serial.println("Erro ao iniciar o sensor"); } Serial.println("Inicializando cartao SD..."); if (!SD.begin(chipSelect)) { Serial.println("Falha ao acessar o cartao !"); Serial.println("Verifique o cartao/conexoes e reinicie o Arduino..."); return; } Serial.println("Cartao iniciado corretamente !"); } void loop() { String nomeArquivo; bool terminado = false; botao.update(); if (botao.pressed()) { nomeArquivo = "coleta_" + String(contador) + ".csv"; Serial.println(nomeArquivo); File arquivo = SD.open(nomeArquivo, FILE_WRITE); if (arquivo) { while (terminado == false) { // Ler as aceleracões e velocidades angulares sensor.getAcceleration(&ax, &ay, &az); sensor.getRotation(&gx, &gy, &gz); dt = (millis() - tempo_prev) / 1000.0; tempo_prev = millis(); // Calcular os ângulos com acelerômetro float accel_ang_x = atan(ay / sqrt(pow(ax, 2) + pow(az, 2))) * (180.0 / 3.14); float accel_ang_y = atan(-ax / sqrt(pow(ay, 2) + pow(az, 2))) * (180.0 / 3.14); float accel_ang_z = atan((sqrt(pow(ax, 2) + pow(ay, 2))) / az) * (180.0 / 3.14); // Calcular ângulo de rotação com giroscopio e filtro complementar ang_x = 0.98 * (ang_x_prev + (gx / 131) * dt) + 0.02 * accel_ang_x; ang_y = 0.98 * (ang_y_prev + (gy / 131) * dt) + 0.02 * accel_ang_y; ang_z = 0.98 * (ang_z_prev + (gz / 131) * dt) + 0.02 * accel_ang_z; ang_x_prev = ang_x; ang_y_prev = ang_y; ang_z_prev = ang_z; arquivo.print(ang_x); arquivo.print(","); arquivo.print(ang_y); arquivo.print(","); arquivo.print(ang_z); arquivo.print("\r\n"); Serial.print(ang_x); Serial.print(","); Serial.print(ang_y); Serial.print(","); Serial.println(ang_z); Serial.println(""); botao.update(); if (botao.pressed()) { arquivo.close(); contador++; terminado = true; } delay(10); } } else { Serial.print("Erro ao abrir o arquivo : "); Serial.println(nomeArquivo); } } }
  2. Bom dia, boa tarde ou boa noite como faço pra calibrar meu código no arduino onde faço o uso do acelerômetro/giroscópio MPU-6050 para que as medições dele em repouso fiquem o mais próximo de zero possível? Já tentei alguns códigos de calibração mas não surtiram efeito. Quando faço a medição com o código os três eixos medidos (x,y e z) não ficam zerados lá no plotter e isso causa uma certa imprecisão nas medições. Grato desde já.
  3. Bom dia amigo, não deu muito certo infelizmente. O projeto que preciso seria assim: Deixa eu explicar melhor. Esse projeto vai medir o tremor de motor e preciso guardar os dados apertando num botão. Por exemplo, o motor está rodando e quero gravar a leitura de tremor ai aperto o botão e depois preciso parar de gravar entao aperto outro. E cada nova leitura ele vai mudar o nome do arquivo: coleta_1, coleta_2,coleta_3, pra que eu não precise estar tirando o cartão de memória para passar pro computador e depois realizar nova coleta, ou seja, posso fazer dezenas de leituras num mesmo cartão sem sobreescrever. Grato desde já
  4. Eu sou imensamente grato de verdade pela disponibilidade me ajudar, as vezes na correria esqueço, mas sou agradecido mesmo. Vou testar amanhã e falo pra você
  5. Esse é o código, ele tem um filtro complementar e salva no cartão SD sempre que ligo o arduino, preciso que ele grave arquivos diferentes apertando algum botão // Librerias I2C para controlar el mpu6050 // la libreria MPU6050.h necesita I2Cdev.h, I2Cdev.h necesita Wire.h #include <I2Cdev.h> #include <Wire.h> #include <SPI.h> #include <SD.h> #include "MPU6050.h" // Pino ligado ao CS do modulo const int chipSelect = 4; //criar um objeto File para manipular um arquivo File dataFile; // O endereço do MPU6050 pode ser 0x68 ou 0x69, dependendo // do estado de AD0. Se não for especificado, 0x68 estará implícito MPU6050 sensor; // Valores RAW (não processados) do acelerômetro e giroscópio nos eixos x,y,z int ax, ay, az; int gx, gy, gz; long tempo_prev; float dt; float ang_x, ang_y, ang_z; float ang_x_prev, ang_y_prev, ang_z_prev; void setup() { Serial.begin(115200); //Iniciando porta serial Wire.begin(); //Iniciando I2C sensor.initialize(); //Iniciando o sensor if (sensor.testConnection()){ Serial.println("Sensor iniciado correctamente"); } else { Serial.println("Erro ao iniciar o sensor"); } Serial.println("Inicializando cartao SD..."); //Inicia a comunicacao com o modulo SD if (!SD.begin(chipSelect)) { Serial.println("Falha ao acessar o cartao !"); Serial.println("Verifique o cartao/conexoes e reinicie o Arduino..."); return; } Serial.println("Cartao iniciado corretamente !"); } void loop(){ //Abre o arquivo coleta.txt dataFile = SD.open("coleta.txt", FILE_WRITE); // Ler as aceleracões e velocidades angulares sensor.getAcceleration(&ax, &ay, &az); sensor.getRotation(&gx, &gy, &gz); dt = (millis()-tempo_prev)/1000.0; tempo_prev=millis(); //Calcular os ângulos com acelerômetro float accel_ang_x=atan(ay/sqrt(pow(ax,2) + pow(az,2)))*(180.0/3.14); float accel_ang_y=atan(-ax/sqrt(pow(ay,2) + pow(az,2)))*(180.0/3.14); float accel_ang_z=atan((sqrt(pow(ax,2)+pow(ay,2)))/az)*(180.0/3.14); //Calcular ângulo de rotação com giroscopio e filtro complementar ang_x = 0.98*(ang_x_prev+(gx/131)*dt) + 0.02*accel_ang_x; ang_y = 0.98*(ang_y_prev+(gy/131)*dt) + 0.02*accel_ang_y; ang_z = 0.98*(ang_z_prev+(gz/131)*dt) + 0.02*accel_ang_z; ang_x_prev=ang_x; ang_y_prev=ang_y; ang_z_prev=ang_z; /* ang_x=ang_x*250.0/32768.0; ang_y=ang_y*250.0/32768.0; ang_z=ang_z*250.0/32768.0; */ //Mostrar os angulos separadas //Serial.print("Rotação em X: "); Serial.print(ang_x); Serial.print("\t"); Serial.print("\t"); //Serial.print("Rotação em Y: "); Serial.print(ang_y); Serial.print("\t"); Serial.print("\t"); //Serial.print("Rotação em z: "); Serial.print(ang_z); //Serial.print("\t"); //Serial.println(tempo); Serial.print("\r\n"); if (dataFile){ //dataFile.print("Rotação em X: "); dataFile.print(ang_x); Serial.print("\t"); dataFile.print("\t"); //dataFile.print("Rotação em Y: "); dataFile.print(ang_y); Serial.print("\t"); dataFile.print("\t"); //dataFile.print("Rotação em z: "); dataFile.print(ang_z); //dataFile.print("\t"); //dataFile.println(tempo); dataFile.print("\r\n"); //Fecha o arquivo dataFile.close(); } //Exibe um erro se não conseguir abrir o arquivo else { Serial.println("Erro ao abrir o arquivo coleta.txt"); } delay(1); }
  6. Pessoal preciso de ajuda num código arduino. Meu código realiza leitura e medição com o MPU6050, no caso uso o giroscópio, porém preciso armazenar os dados no cartão de memória, até ai sei fazer. A dificuldade é realizar guardar vários arquivos a quando pressionar um botão, exemplo: realizou uma leitura pressiono um botão e ele guardar os dados tipo coleta_1, depois leio outro dado e aperto ai cria coleta_2 e assim por diante, tudo isso porque preciso dessas coletas sem apagar as anteriores. Peço ajuda já olhei aqui no fórum e não achei nada a respeito.
  7. Valeu pela dica, vou testar aqui. Isso pra mim é bem importante porque são milhares de dados e não da pra fazer na mão um a um.
  8. Estou utilizando o próprio programa do arduino e no momento to salvando via cartão SD e ele gera arquivo txt, quero mudar para arquivo que eu possa abrir no excel.
  9. Boa noite/dia/tarde, estou com uma dúvida aqui que é de como salvar os dados de leitura de acelerômetro (x,y,z) do mpu6050 para um arquivo que eu possa abrir no excel? Se puderem me ajudar ficarei imensamente grato!
  10. @alexandre.mbm Vou fazer aos pedaços como vocês me orientaram, to me atrapalhando por pensar em tudo de uma vez. Agradeço!
  11. Eu até sei gravar dado num SD, mas quando junto o acelerometro fico com essa dificuldade.
  12. Queria saber como posso gravar num cartao SD os dados de leitura do acelerometro MPU6050 no arduino uno

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...