Boa tarde pessoal,

Estou tendo avanços no meu projeto, mas minha nova dúvida é: como colocar um tempo de medição?

Por exemplo, quero adquirir dados por 1 minuto, e após esse 1 minuto, o programa fechar? Estou tentando procurar tutoriais, mas não estão dando mt certo. E outra, eu consigo salvar esses dados em txt ou excel?

Grato pela ajuda!

Exibições: 366

Responder esta

Respostas a este tópico

   

     1) O que você quer dizer com "colcoar tempo"?  Você precisa de hora/min/seg da medição ou só precisa saber a diferença de tempo entre uma medida e outra?

    

     2) Sobre funcionar por apenas 1min e depois não executar mais a tarefa, pode ser feito algo do tipo:

//VARIAVEL GLOBAL

unsigned long intervalo = 60*1000;

bool umavez = true;

//NO LOOP

unsigned long inicio = millis();

while( (millis() - inicio < intervalo) && umavez )

{

        //Ficará nesse bloco durante o periodo de intervalo

        umavez = false;

}

Executado o bloco uma vez, a booleana muda para false, impedindo a entrada novamente no bloco.

     3) Sim, você conesegue. Você pode usar um módulo SD e salvar no cartão num arquivo TXT (use tabulação, assim como um CSV, ou um caracter separador para depois improtar no Excel.).  Ou pode conectar a um servidor e enviar os dados via serial ou rede etehrnet/wifi ou algo do tipo.

Eu preciso fazer medições de uma máquina, com 2 ou 3 parâmetros diferentes, para dps analisar as diferenças. Para isso, eu quero adquirir dados durante 5 minutos e após os 5 minutos, o programa fechar. Além disso, eu gostaria de salvar esses dados num arquivo txt no próprio computador, sem precisar de um cartão SD.

E outra, eu consigo definir quantas medições por segundo são realizadas? Para que eu consiga realizar o mesmo número de medições para todos os parâmetros.

     Você pode utilziar um software que leia a serial e salve num arquivo de texto, por exemplo. É bem simples de implemtantar. Inclusive, há uma publicação aqui no fórum com Serial Monitor  OpenSource feito em C# no VS2019. Está na página inicial do Lab (LINK).  Com 15 minutos você adiciona a parte de escrita em arquivos, caso ele já não possua a funcionalidade.

    Quanto ao tempo da amostra, você pode pegar os millis() de cada uma e fazer a diferença. Assim terá o tempo entre uma e outra. Ou, fazer isso tambpem via C# (DateTime.Now), adicionando o horário sempre que recebido um valor.

    Sim, você pode fixar o número de medições. Não aconselho executar muitas por segundo, pois há o tempo de processamento entre uma e outra e outros fatores que vão interferir na fidelidade da leitura. São leituras de que, por exemplo? Talvez seja interessante você fixar o número de leituras ao invés do período de medições.

   Por exemplo, se quiser 300 leituras e um intervalo de aproximadamente 1 segundo entre cada uma, já jogando pra Serial, sendo capturado pelo Serial Monitor e armazenado em arquivo:

   for(int i=0; i < 300; i++)

  {

        String str = String(millis()) + String(" - ") + String(funcaoDeLeitura());

        Serial.println(str);

        delay(950);

  }

   Sobre o txt/csv, o Monitor sugerido já disponibiliza tal função.

A ideia é medir vibrações com um acelerômetro, por isso o ideal é adquirir várias medições por segundo, e para poder comparar alguns parâmetros da máquina, eu preciso realizar a mesma quantidade de medições para cada um dos parâmetros, assim eu vou ter uma confiabilidade maior nos resultados.

E a parte do txt, é que após as medições, eu vou inserir em outro programa para análise, por isso preciso delas salvas em um arquivo. Vou tentar com essas ideias que você me passou, muito obrigado!

    Faz um teste quanto à quantidade de medições. Veja se terá um resultado satisfatório.

    Sobre a serial, creio que seja mais interessante fazer todas as leituras e armazenar em variáveis (vetores) e, ao terminar tudo, printar na Serial.  Assim você não gasta tempo e processamento com Serial durante as medições.

   Caso não seja possível armazenar tudo, use a maior velocidade possível na Serial.

Não consigo instalar o Monitor sugerido, segundo ele é necessário o NET Framework 4.6, porém ao tentar instalar este pacote, o mesmo diz que uma versão posterior já está instalada.

Obrigado pelas dicas José, estou aprendendo bastante. 

Gostaria de uma ajuda com o Datasheet do sensor, porque como disse anteriormente, sou iniciante e desconheço esta área. Eu quero aumentar a sensibilidade do sensor de +-2g para +-4g, como mostra na imagem em anexo. Peguei alguns códigos na internet e fui adaptando para um código simplificado só com as medições do acelerômetro, e não consegui encontrar onde eu altero essa sensibilidade. O código está em anexo também, se puderem me ajudar, ficarei mt agradecido.

Anexos

Bom dia Gabriel,

Você não informou qual era o sensor. Mas presumo que seja o MPU-6050 (consta na listagem). E que esta usando a interface I2C. Datasheet do acelerômetro:

https://store.invensense.com/datasheets/invensense/MPU-6050_DataShe...

Você quer  aumentar a sensibilidade do sensor de +-2g para +-4g.

Verificando o datasheet, consta que se AFS Sel = 1 , a escala terá uma variação de -4g até +4g (full scale range). 

Veja esse documento sobre os registradores do sensor MPU6050:

https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Regi...

Na pagina 15 consta a descrição do registrador AFS

No seu programa veja o registrador com endereço 1C:

#define MPU6050_ACCEL_CONFIG 0x1c

É nesse registrador que poderá alterar o Full scale Range para 4g. (AFS SEL = 1). 

Ative o bit 3 ( valor significativo =8). 

writeMPU6050(MPU6050_ACCEL_CONFIG, 0x08);

A MELHOR FORMA DE APRENDER É ENSINANDO ! 

Perfeito! Muito obrigado José.

Hoje a noite farei os testes.

Consegui gravar as medições em uma planilha conforme o tutorial que me mandou, porém o programa aceita sómente "115200", então acho que terei que ficar com um arquivo txt mesmo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço