collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Data logger (passar Dados)  (Lida 7441 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Data logger (passar Dados)
« em: 10 de Fevereiro de 2010, 00:52 »
Boas.

Eu estou a desenvolver um data logger e agora deparei-me com uma situação.

Eu em php, C e VB consigo passar linhas de informação para dentro de uma array, com os dados separados por virgulas (tipo csv em Excell), usando a função Split(String, ',');

Mas no código do arduino IDE não sei como o fazer. Existem várias pessoas que usam funcões tipo
Citar
strtok_r
, ou mesmo com
Citar
{ Serial.read(), Serial.read() };
.

Mas eu gostaria de faze-lo mais simples, pois vou necessitar muito.

Exemplo eu envio dados tipo:

Código: [Seleccione]
int DeviceID, float Temp1, float Temp2, int Humid, byte ACStatus, long ACTime, byte DoorStatus, long DoorTime, int Alarm, long Counter
ou

Código: [Seleccione]
deviceID,Debug,FirstTime,LoggerTime,ACTime,ACState,DoorTime,DoorState,MinAlarm,MaxAlarm,TempUnit,TempToleranc,AlarmMute,SERIAL_SPEED,UseRS485,RS485_SPEED,TempExtEnable,TempIntEnable
Nesta ultima esses dados são enviados via porta series pelo PC, e o arduino ao receber grava toda a informação dentro das variáveis correspondentes

Código: [Seleccione]
struct config_t
{
  int deviceID;  // ID do dispositivo
  byte Debug; // Usar o Debug
  byte FirstTime; // Verifica se é a primeira vez que se liga
  long LoggerTime; // Leitura de dados de X mili segundos em X mili segundos
  long ACTime; // Tempo Falha Corrente AC em segundos (sX1000)
  byte ACState; // 0 Quando Ligado e 1 sem corrente
  long DoorTime; // Tempo Porta Aberta em segundos (sX1000)
  byte DoorState; // 0 Quando porta fechada e 1 porta aberta
  float MinAlarm; // Valor Alarm Temp. Minima por Default
  float MaxAlarm; // Valor Alarm Temp. Maxima por Default
  byte TempUnit; // 1 - C , 2 - F
  float TempToleranc; // Calibrar sensor temp. via software
  boolean AlarmMute; // sem som no tone
  byte SERIAL_SPEED; // velocidade porta serie
  byte UseRS485; // usar rs485
  byte RS485_SPEED; // velocidade rs485
  byte TempExtEnable; // usar sensor temp. Dallas
  byte TempIntEnable; // usar  sensor Temp. PT100
} configuration;

 ;D

Alguém me ajuda please. É que não me posso esticar muito pois já começo a chegar ao limite do atmega328
Citar
(Binary sketch size: 25884 bytes (of a 30720 byte maximum)
:o


Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Data logger (passar Dados)
« Responder #1 em: 10 de Fevereiro de 2010, 01:02 »
Para ver se existem alguma alma caridosa que me dê uma ajuda deixo aqui uns videozitos de alguns testes que já faço com o datalogger (videos feitos com iphone  ::) )

:: Falha de Energia ::
http://www.kwlda.com/Projectos/documentos/falha_energia.htm

:: Porta Aberta ::
http://www.kwlda.com/Projectos/documentos/porta_aberta.htm

:: Temperatura alta ::
http://www.kwlda.com/Projectos/documentos/Temp_Alta.htm

:: Temperatura Baixa::
http://www.kwlda.com/Projectos/documentos/Temp_Baixa.htm
« Última modificação: 10 de Fevereiro de 2010, 01:05 por iCAR »
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Data logger (passar Dados)
« Responder #2 em: 10 de Fevereiro de 2010, 01:14 »
strtok_r é uma maneira, strsep é outra (ambas na string.h).

Também se pode usar a sscanf (stdio.h), que faz tudo o que tu queres numa só linha, mas que deve adicionar um bom bocado de código (ou se calhar até nem fica muito maior do que usando as outras funções acima).

Na dir .../arduino-00xx/hardware/tools/avr/doc/avr-libc/avr-libc-user-manual/index.html está a documentação da biblioteca base do AVR-GCC. Na página vai a "Library Reference" que está lá toda a documentação das funções que existem nos vários cabeçalhos (ficheiro .h).

Deixa de usar floats que o tamanho abate logo um bom bocado. Se é só por causa da temperatura, guarda os valores num inteiro, multiplicados por 10.

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Data logger (passar Dados)
« Responder #3 em: 10 de Fevereiro de 2010, 01:30 »
Obrigado, Vou vasculhar nisso.

Citar
Deixa de usar floats que o tamanho abate logo um bom bocado. Se é só por causa da temperatura, guarda os valores num inteiro, multiplicados por 10.

Pois eu gosto muito de usar floats, longs. Também reparei que Serial.println() ocupa bastante.

Citar
...inteiro, multiplicados por 10
assim não arrendonda as casas decimais? É que eu não quero arredondamentos.

É normal que tenha o sketchbook grande, pois este datalogger está preparado para RS485, Xbee, LCD, Sensor temperatura Dallas DS1820, Sensor temperatura PT100, IC2, 2 sensores butões, sensor humidade. Alguns modulos como Menu LCD, Parametrização por Porta Serie. E ainda me falta fazer o modulo de leitura do sensor Corrente.
 :o
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Data logger (passar Dados)
« Responder #4 em: 10 de Fevereiro de 2010, 01:38 »
Tens sempre um arredondamento. Não entendo o que queres dizer com isso...
Multiplica por 10 para teres uma precisão de 1 casa decimal, por 100 para teres 2, etc. Se queres 1 casa decimal de precisão, por exemplo 2.3 é guardado como 23, e depois quando vais mostrar o valor em algum lado ao utilizador é que tens que fazer umas contitas básicas para "separar" ambos os números de cada lado do ponto decimal. Podes fazer umas macros que te escondem todas as particularidades de lidares com números assim.

p.s. Se meteres "man <função>" no google, o 1º resultado é um site (manpagez) que tem a documentação da libc em unix, e geralmente tem exemplos de utilização das funções.

p.s.2 Que hw extra estás a usar para ler a PT100?
« Última modificação: 10 de Fevereiro de 2010, 01:49 por Njay »

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Data logger (passar Dados)
« Responder #5 em: 10 de Fevereiro de 2010, 01:49 »
Quando digo arredondamentos é ter por exemplo 18.58C e aparecer 18.6C em vez de 18.5C.

Claro que assim até poderei fazer uma função que transforme esses valores int logo com as casas decimais.

Obrigado.

Olha tive a vasculhar e gostei desta funcção para susbstituir o meu querido split();  ::)

 char = strsep(&String, ",");

  char * strsep   (char ** sp, const char * delim)         
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Data logger (passar Dados)
« Responder #6 em: 10 de Fevereiro de 2010, 12:48 »
Já estive a dar uma vista de olhos no site do projecto e parece estar a ficar bom o NetLogger mas isto que aparece no vídeo vai ser o Mestre e depois tens só sensores de temperatura distribuídos ou este dispositivo vai ser escravo?

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Data logger (passar Dados)
« Responder #7 em: 10 de Fevereiro de 2010, 12:52 »
Não o lcd vai ficar nos slaves.

Os masters recebe os dados de todos os slaves. Eles tem os seguintes modulos:

Master:
Atmega 368
relogio interno Dallas
Modulo Ethernet (Shield)
Modulo GPRS
Modulo Cartão microSd (2g)
Modulo Wireless (Xbee)
Modulo rs485 (rs232 industrial) vai até 1000metros de comunicação

Deixo aqui o esquema do Megaprojecto:

Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Data logger (passar Dados)
« Responder #8 em: 10 de Fevereiro de 2010, 13:00 »
Eu já tinha visto essa imagem, vasculhei os links todos :p

E quanto ao slave o que terá cada um?
Que módulo GPRS vais usar? Aquele que se vende na Sparkfun ou encontras-te alguma solução mais barata?
Como vais construir vários não será melhor usar algo mais barato que o xbee tipo http://loja.lusorobotica.com/34-nordic ?

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Data logger (passar Dados)
« Responder #9 em: 10 de Fevereiro de 2010, 13:13 »
SLAVES:
ATMega 368
Buzzer
LCD16x2
Sensor Temp. Ambiente Dallas DS1820
Sensor Temp. Interna (Sensor RDT PT100) (Falta fazer o circuito para ligar atmega)
Modulo RS485
Modulo Wireless
Modulo RFID
Modulo Keypad
Modulo Sensor Currente
    Muito fixes, são não invasivos:
    http://www.efergy.com/Products/Energy-Monitors/EFERGY/Elitee2-DC-Extra-Sensor/pid-180900.aspx
Opção: leitor e cartão de mem microsd 2g

O modulo GPRS é da Sparkfun. É um mimo:
http://www.sparkfun.com/commerce/product_info.php?products_id=757

Os Nordic: eu comprei uns á lusorobotica, mas prefiro o Xbee.
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Data logger (passar Dados)
« Responder #10 em: 10 de Fevereiro de 2010, 13:34 »
Já agora que tal foram os testes ao nordic? A saida desse sensor de corrente é uma simples tensão?

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Data logger (passar Dados)
« Responder #11 em: 10 de Fevereiro de 2010, 13:43 »
Os Nordic funcionam bem e até já há bibliotecas para eles.

Sim esses sensores de corrente detectam tensão, mas eu vou usa-los para simplesmente detectar se existe corrente ou não.

Podes ver exemplos neste site: Podem detectar Voltagem e  Corrente

http://openenergymonitor.org/emon
« Última modificação: 10 de Fevereiro de 2010, 14:25 por iCAR »
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Data logger (passar Dados)
« Responder #12 em: 10 de Fevereiro de 2010, 14:16 »
Quando digo arredondamentos é ter por exemplo 18.58C e aparecer 18.6C em vez de 18.5C.
Em qualquer um desses casos existe um arredondamento, no 1º "por excesso" e no 2º "por defeito" :). Mas tu fazes o que quiseres quando converteres o valor lido (que deve ser inteiro) do sensor para esta representação em ponto fixo base 10 (o tal formato multiplicado por uma constante).

Citação de: iCAR
Claro que assim até poderei fazer uma função que transforme esses valores int logo com as casas decimais.
Exacto, fazes logo uma função que te converta de ponto fixo base 10 para string.

Os Nordic funcionam bem e até já há livrarias bibliotecas para eles.

Citação de: iCAR
Sim esses sensores de corrente detectam tensão, mas eu vou usa-los para simplesmente detectar se existe corrente ou não.
Qual é a sensibilidade do sensor? Será que não vais ler "zero" nas alturas em que o compressor do frigorificio não está a funcionar?...

Offline DanBar

  • Mini Robot
  • *
  • Mensagens: 685
    • iCAR Lusorobotica Blog
Re: Data logger (passar Dados)
« Responder #13 em: 10 de Fevereiro de 2010, 14:20 »
Pois vou ter que testá-lo. Ainda não o tenho.  ::)
Antigo Nick do Forum: iCAR

Projectos iCAR
icar.lusorobotica.com

DB@G
http://www.facebook.com/daniel.barradas