quarta-feira, 31 de julho de 2013

Fazendo gráficos com os dados do Arduino

É comum ver pessoas querendo fazer gráficos com as informações obtidas pelo Arduino. Quando fizemos o pHmetro, algumas pessoas gostaram do gráfico do pH que era mostrado no computador durante a experiência. Vejo muitos artigos explicando como fazer isso através do Processing e do Python, mas todos eles tem suas especificidades e exigem algumas modificações que nem sempre são simples.
Seus problemas acabaram! Com o super programa...
Para facilitar a vida de todos, criamos um programa/script em Python que, de forma simples, permite qualquer pessoa fazer gráficos sem precisar saber programar nada. A única coisa que você precisa é ter instalado o Python (>2.6), a biblioteca Matplotlib e fazer o download do nosso programa CLICANDO AQUI.

Como usar o programa:
Para quem usa Linux é simples, basta abrir um terminal e dar o comando "python grafico.py". O programa vai perguntar em qual porta o Arduino está conectado, tipicamente é a porta 0 (zero). Depois de informar a porta o programa fica esperando os dados chegarem do Arduino. O programa pode mostrar o gráfico deixo o eixo X "fixo" ou movendo o eixo X junto com os dados. No modo "fixo" o eixo X começa em X=0 e vai aumentando o X final conforme os dados vão chegando. No outro modo ele modifica o X inicial e final de forma que a diferença (DX) seja constante. Para alternar entre os modos, você precisa abrir o programa em um editor de texto e modificar a primeira linha do programa. Se você usar DX=0 o programa roda em modo fixo e se DX for diferente de 0 ele vai ajustar o X inicial e final conforme os dados forem sendo recebidos.  O programa aceita até 6 gráficos simultâneos.

Como enviar os dados do Arduino para o programa:
A comunicação entre o programa e o Arduino é feita por comunicação serial. Você deve usar o comando Serial.print() e Serial.println() para enviar seus dados do Arduino. Os dados devem estar formatados da seguinte forma:gráfico; valor em x; valor em y , onde "gráfico" é o número do gráfico que você enviar os dados (o programa aceita fazer até 6 gráficos simultaneamente). Note que os dados são separados por ponto e vírgula. Abaixo temos um código que envia os valores das portas analógicas 0 e 1 como o dado em Y e o tempo como o dado em X.
void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print('1');
  Serial.print(";");
  Serial.print(millis());
  Serial.print(";");
  Serial.print(analogRead(0));
  Serial.println("");
  delay(50);
  Serial.print('2');
  Serial.print(";");
  Serial.print(millis());
  Serial.print(";");
  Serial.print(analogRead(1));
  Serial.println("");
  delay(50);
}
 Usando o Ardublock:

8 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir
  3. Este comentário foi removido pelo autor.

    ResponderExcluir
  4. Cara, muito bom mesmo teu blog! deixa eu te fazer uma pergunta, se eu quiser que o gráfico seja apresentado num lcd 128x64? alguma dica de biblioteca a usar?

    ResponderExcluir
  5. Olá, tentei utilizar porém não consigo pois indica problema ao tentar converter string para float.

    ResponderExcluir
  6. Como alterar o programa para a linha horizontal aparecer a HH:MM:ss? tipo assim: temperatura 25°C as 12:08:24, temperatura 28°C as 14:32:45

    ResponderExcluir