Olá galera! estou quase terminando a construção do seguidor solar em dois eixos, em breve estarei postando! Mas no momento, preciso de ajuda numa outra coisa: eu tenho um circuito elétrico cuja corrente variará ao longo de um tempo, gostaria de saber como eu faço para armazenar (com arduino) todas essas variações como se fosse o data-log e se possível exibisse na tela essas variações... para que no final do período eu possa selecionar os valores e jogar num programa, como o excel para gerar gráfico. Abraços.

Exibições: 12138

Responder esta

Respostas a este tópico

Obrigado Almir! Grande ajuda! Você pode me esclarecer melhor onde estaria armazenado a coleta e como eu posso acessa-la!?

 

Att

Márlison

Oi Márlison, o Almir montou toda a infra-estrutura pra você. Recomendo você estudar cada linha de código para entender os conceitos.

O Almir criou uma variável chamada "comando_func" que controla o que o loop faz

 isso inclui alterar a frequência com que os dados são coletados

iniciar a coleta de dados , e no caso de comando_func == 2 o arduino imprime os dados para a serial.

Os dados estão armazenados na EEPROM do Arduino.

O programa não define como o valor comando_func ou comando_temp ou outras variaveis tem seus valores definidos pois isso depende do hardware e usabilidade que você queira montar.

Enfim dá uma olhada no código do Almir que está tudo definido lá.

Algumas dicas de onde encontrar o que procura

Leitura dos dados da porta analogica : int   valor_ADC = analogRead(A0)/4;//<==AQUI VOCE ESCREVE O VALOR DO

Gravação dos dados coletados: 

//formato da tabela [valor|periodo]
EEPROM.write(c_p,valor_ADC);//campo do valor da leitura
EEPROM.write(c_p+(tam_memoria+1),(periodo));//campo do periodo

 

Impressão dos dados no formato CSV

msg=String(valor_lido)+";"+String(ocorrencia)+"\n";

Se travar avisa.

Abs,

Olá Luciano! agradeço os esclarecimentos! Muito úteis! Como disse ao Almir, o lab. onde trabalho só estará livre no final de semana! então no final de semana estarei realizando os testes! Se funcionar eu aviso, se não, também aviso!

Você tem duas opções. 

1- Usa sdcard e ja grava os dados nele em formato .csv ou txt. Ruim de modo que fica mais caro e complexo o hardware e programação do Arduíno, bom que que facilita a transferência de dados para o PC.

2- Usa uma memoria eeprom do atmel ou externa, depois transfere os dados para o PC via serial. Hardware mais simples, mais o pepino é ler isso no PC e salvar em formato .csv, fazer algo pratico.

Se conhece alguma coisa de java, aqui esta o caminho para o segundo caso.

http://www.devmedia.com.br/criando-e-gravando-dados-em-txt-com-java...

http://rudrigolima.wordpress.com/2012/05/29/controlar-motor-brushle...

//observeos os comentarios
for (posicao=tam_memoria;;c_p++) // posicao recebe de zero até tamanho da memoria,ou seja,512/2=256
{
int valor_ADC = analogRead(A0)/4;// 8 bits (1024/4)=(0-255)
//formato da tabela [valor|periodo]
EEPROM.write(c_p,valor_ADC);//Em C_P (0 até 256),voce escreve o valor de valor_ADC que é o "valor"
EEPROM.write(c_p+(tam_memoria+1),(periodo));
/*Em C_P (de 0 até a ultima posicao da memoria,(0+255+1)=256 até 512),voce escreve o valor do tempo da gravação (por c_p aumenta de 0 até 255)*/
delay((periodo*60)*1000);// de acordo com o valor de periodo,é o tempo que o programa espera até a proxima leitura
}//for write (este laço for é para escrever na EEPROM)
}//if 1


//AQUI É PARA LEITURA DA EEPROM VEJA NO CODIGO ORIGINAL
if (comando_func==2)// quando você escreve (modificando comando_func com valores de entra para 2)
{
c_p=0;//reinicia a variavel para zero

for (posicao=tam_memoria;;c_p++) //de 0 até 256,faça acrescente 1 a variavel c_p
{
//formato da tabela [valor|periodo]
valor_lido=EEPROM.read(c_p);//leia posição c_p da eprom (valor guardado da leitura)
ocorrencia=EEPROM.read(c_p+(tam_memoria+1));//leia posicao 0+255+1=256 da eeprom (periodo que foi gravado)

msg=String(msg)+String(valor_lido)+";"+String(ocorrencia)+"\n";//vai colocar como arquivo de CSV separado por (ponto e virgula);
//Serial.print(valor_lido);
//Serial.println(ocorrencia);
}//for read
Serial.println(msg);//escreve apos leitura pela serial
}//if 2
}// se diferente de zero

Ta bem explicado.Acho que você deve estudar mais a linguagem.

Olá Almir! reitero meus agradecimentos! O lab. onde trabalho só estará livre no final de semana! então no final de semana estarei realizando os testes! Se funcionar eu aviso, se não, também aviso!

Almir, em relação a essa questão ainda tenho uma dúvida: meu circuito atingirá uma corrente máxima de 400 miliamperes e tensão de 6V... o arduino suporta a leitura de corrente nessa intensidade!?

Att Márlison

Tensão de referencia maxima é 5v.Tenta reduzir a tensão para proximo de 5v.

Almir, eu tenho um projeto parecido com o que foi solicitado, eu estou precisando registrar valores online de temperatura lida via arduino. Mas eu preciso gravar direto no PC. Como o Marlison perguntou, onde é gravado os dados??

Olá Márlison, meu projeto é parecido com o seu porém mais simples é um rastreador solar de um eixo! Também esbarrei nesse problema de armazenamento, eu optei por usar um sd card. Achei bastante simples pois já tem uma biblioteca para o sd card. Se tiver interesse estou por aqui.

Olá Joaldo, achei interessante sua idéia!

Parece que torna mais simples este problema... vc pode me ajudar no código como isso pode ser feito? não trabalhei ainda com sd card!

 

Att,

Márlison

Se a quantidade de dados for muito grande, é interessante o uso de SD Card, e é muito simples a utilização do mesmo. 
Você pode usar o Ethernet Shield que já conta com um micro SD card, ou adquirir um breakout SD Card. 

Ambos usam o barramento SPI para troca de dados.
Olhe os exemplos que tem na IDE do arduino, no menu File/Exemplos/SD, que é muito fácil de compreender.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço