You are currently viewing Aquisição de dados com DFR Arduino Romeo e o Dev-C++

Aquisição de dados com DFR Arduino Romeo e o Dev-C++

Este tópico mostra um trabalho para quem se aventura com Arduino ou para quem tem necessidades de resolver problemas de engenharia de forma low cost, nomeadamente a monitorização de parâmetros físicos como, a temperatura, a humidade relativa do ar, vibrações, a distância ou mesmo a luminosidade. É abordado este tema porque existem um leque vasto de sensores para as placas da Arduino. Foi feito então uma rotina simples em programação em C através do Dev-C++ para adquirir dados via USB.

2015-10-31 08.47.08

Para tal usou-se um potenciómetro e uma placa da DFRduinoRomeo, como se vê nas fotografias (montagem standard).

2015-10-30 20.00.30

A ideia é usar um potenciómetro polarizado a 5 V para variar a tensão eléctrica (fio amarelo conectado no canal ANALOG IN 0), assim como podia ser um sensor comercial. Pois gravar esta informação, variação de voltagem para o computador numa extensão .csv para fácil manipulação da mesma ou mesmo em txt.

Para isso compilou-se e enviou-se o seguinte código para a placa do DFRduinoRomeo.

int analogPin = 0;     
int val;           
void setup()
{
  Serial.begin(38400);      
}

void loop()
{
  val = analogRead(analogPin);   
  Serial.println(val);    
}

 Quanto à rotina em C,  desenvolveu-se o seguinte código.

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

void layout(); 

int main(int argc, char *argv[])
{
  system("COLOR F1");
  FILE *ComPort;
  FILE *gravacao;
  DCB   dcb;
  int n, i = 0, r =1, voltage;
  char name[100], COM[4];  
  dcb.BaudRate = CBR_9600;
  dcb.ByteSize = 8;
  dcb.Parity = 0;
  dcb.StopBits = 1;
  dcb.fDtrControl =  DTR_CONTROL_ENABLE;
  
  layout();
  printf("\tNome do ficheiro.csv:\t"); scanf("%s",&name);  
  printf("\tPort:\t"); scanf("%s",&COM);  
  ComPort = fopen(COM,"r");
   
  gravacao = fopen(name,"w"); 
  printf("\tNumero de aquisicao:\t"); scanf("%d",&n); 
   
  if(ComPort)
  { 
         GetCommState(ComPort, &dcb);
         while(i<n)
         {
                  i = i + 1; 
                  fscanf(ComPort,"%d",&voltage);
                  printf("\t\t Tensao  = %2.2f (V)\n",(float)(voltage/1023.00)*5.00);
                  fprintf(gravacao," %2.2f \n",(float)(voltage/1023.00)*5.00);     
          }
          fclose(gravacao);
          
  }
  fclose(ComPort);  
  printf("Aquisicao esta conluida\n");
  system("PAUSE");
}
void layout()
{
  printf("__________________________________________________________________\n\n");
  printf("Dev-C++ - Programacao em C - DFRduinoRomeo - TECHO-PORTUGAL\n\n");
  printf("__________________________________________________________________\n\n"); 
  return;
}

Ficando com este aspecto:

Imagem2

Permite ao utilizador escolher o nome do ficheiro para a gravação, a porta USB onde o Arduino está ligado e o número de aquisições. Desta forma, é possível aceder aos dados e manipula-los.

CapturarCapturar

Claro consoante os problemas de engenharia ou da física que está por detrás, é preciso redefinir ao código, nomeadamente o Baud rate. Quanto à placa DFRduinoRomeo é considerado pelo autor um dispositivo excelente para este tipo de situações.

Por fim, a ideia da Tech-Portugal de partilhar este código é fundamental para que haja interessados que continuem a melhorar este tipo de ferramentas, mostrar as suas aplicações e claro, partilhar com os leitores, visto que estamos todos na mesma linha.

António Sousa

António Sousa, técnico de redes e sistemas informáticos e fundador do Tech em Português! Sou um amante das novas tecnologias e um aventureiro dessa grande "auto-estrada" que é a internet!