Leitura de sensores analógicos do Arduino com Elipse mobile

Bom dia! Tenho um sensor de vazão de água para Arduino e preciso exibir a vazão instantânea no Elipse Mobile

O código do sensor é:

float vazao; //Variável para armazenar o valor em L/min
float media=0; //Variável para tirar a média a cada 1 minuto
int contaPulso; //Variável para a quantidade de pulsos
int i=0; //Variável para contagem

void setup()
{
Serial.begin(9600); //Inicia a serial com um baud rate de 9600

pinMode(2, INPUT);
attachInterrupt(0, incpulso, RISING); //Configura o pino 2(Interrupção 0) para trabalhar como interrupção
Serial.println("\n\nInicio\n\n"); //Imprime Inicio na serial
}

void loop ()
{
contaPulso = 0; //Zera a variável para contar os giros por segundos
sei(); //Habilita interrupção
delay (1000); //Aguarda 1 segundo
cli(); //Desabilita interrupção

vazao = contaPulso / 5.5; //Converte para L/min
media=media+vazao; //Soma a vazão para o calculo da media
i++;

Serial.print(vazao); //Imprime na serial o valor da vazão ((((ESTE VALOR QUE QUERO QUE APAREÇA NO ELIPSE MOBILE))))
Serial.print(" L/min - "); //Imprime L/min
Serial.print(i); //Imprime a contagem i (segundos)
Serial.println(“s”); //Imprime s indicando que está em segundos

if(i==60)
{
media = media/60; //Tira a media dividindo por 60
Serial.print("\nMedia por minuto = “); //Imprime a frase Media por minuto =
Serial.print(media); //Imprime o valor da media
Serial.println(” L/min - “); //Imprime L/min
media = 0; //Zera a variável media para uma nova contagem
i=0; //Zera a variável i para uma nova contagem
Serial.println(”\n\nInicio\n\n"); //Imprime Inicio indicando que a contagem iniciou
}

}

void incpulso ()
{
contaPulso++; //Incrementa a variável de contagem dos pulsos
}

Quero que a variável analógica vazao seja exibida em um tag do elipse mobile. Como devo proceder?
Desde já agradeço!

Olá @Rafha_Apolinario,

Segue link do tutorial do Elipse Mobile para conexão, leitura e escrita no Arduíno:

Bom dia Felipe. Já assisti este vídeo, mas o problema se encontra no fato de o elipse mobile apenas ler os pinos do Arduíno como tag. Preciso que o elipse leia variáveis virtuais, que não correspondem a um pino

@Rafha_Apolinario

da uma olhada nesse tópico.

Ola Scherer! muito legal cara! mas tenho uma dúvida, para o elipse mobile ler os valores do meu sensor vou ter que utilizar a função da eeprom? se eu declarar o pino analógico como entrada e colocar um display, o elipse mobile não le?

Bom dia Rafha,

pelo o que entendi do seu código, você calculava a vazão e deixava ela em memória(EEPROM) no arduino.

vazao = contaPulso / 5.5; //Converte para L/min

Agora se você calcular a vazão e jogar ela em um pino analógico, acredito que o elipse mobile irá ler ela sem problemas.

Bom dia Pessoal, Uma dúvida que estou tendo nas leituras dos valores, ao que parece na EEPROM, não estou conseguindo valores maiores que 512.

Boa tarde,

Estamos criando um novo protocolo que usa o Ethernet Shield e permite conectar o Arduino em um Elipse Mobile da nuvem.

Por acaso você tem uma placa ethernet?

Também estamos estudando a opção via serial de usar um protocolo conhecido como o Firmata, desde que ele atenda este tipo de necessidade.

Enquanto isso não ocorre, a solução é alterar o código para permitir tags customizados.

Lembrando que o projeto do arduino pode ser incrementado na github.

Arduino usando ethernet

Sim, tenho uma com o W5100.
A plataforma e bem intuitiva e fácil de ser configurada. Meus aluno estão gostando.

Boa noite! Muito legal Thiago, vou estudar mais sobre o elipse mobile na nuvem, ainda não tenho uma placa ethernet, mas conforme for, adquiro uma.
Scherer, minha variável “vazao” é lida pela porta serial do arduino. Quando compilo o sketch para o arduino e aciono o serial monitor, ele fica me mostrando as vazões. Porém o serial monitor admite leitura de variáveis virtuais. Nesta sua sugestão, como eu poderia atribuir o valor da vazao ao pino do arduino?
Já fiz alguns testes, mas sem sucesso.
O sensor de vazão funciona com um imã em uma extremidade da ventoinha interna, que quando gira, se encontra com outro imã e gera um pulso 5v. a vazão é calculada neste sketch pela relação entre a quantidade de pulsos gerados em função do tempo.
Logo não consigo utilizar este sensor como analógico, pois a resposta dele é digital. A conversão em vazão, quem faz é o programa.
Tem alguma sugestão de como eu poderia ler esta variável?

@Rafha_Apolinario, Você poderá ser a descrição que o amigo informou, roda seu programa normal, e no resultado final coloca na EEPROM, ficando ± assim…(ver abaixo)
Outro ponto importante, desative a exibição do valor do sensor pela serial, pois quando o servidor tentar realizar a leitura, vai estar ocupada mostrando dados para você.
Acredito que isso resolva seu problema.

void loop() // run over and over
{

EEPROM.write(1,vazao);
elipse.ProcessCommands();
}

Boa tarde amigos!!! Show de bola! Agora funcionou TOP! Estamos quase concluindo o TCC, agradeço muito a ajuda de todos! Breve postarei o video aqui do sistema operando :wink: Porém estou com um problema, preciso monitorar 3 variáveis analógicas da EEPROM, a da porta 1 esta lendo, as outras 2 estão com um valor maluco (360), segue o código que modifiquei na biblioteca do elipse:

void AnalogReadCommand()
{
//Receives 1 characters and sends 2 characters
while(Serial.available() <= 0)
{
}
char port = Serial.read(); //-1 if no data is available
uint16_t readResult;
if (port == 5)
{
readResult = EEPROM.read(1);
}
else if (port == 4)
{
readResult == EEPROM.read(2);
}
else if (port == 3)
{
readResult == EEPROM.read(3);
}
else if (port == 2)
{
readResult == EEPROM.read(4);
}
else if (port == 1)
{
readResult == EEPROM.read(5);
}
else
{
readResult = analogRead(port);
}

SendAnalogResponse(1, readResult);
}

O uso da função else if pode dar algum problema nestes casos???