Silícios LabPCBWay
Published © GPL3+

Creating a Datalogger with Arduino - Part I

You'll learn how to develop a datalogger device with Arduino.

IntermediateFull instructions provided1 hour3,722
Creating a Datalogger with Arduino - Part I

Things used in this project

Hardware components

PCBWay Custom PCB
PCBWay Custom PCB
×1
Switch Button - UTSOURCE
×1
Jumper Wires - UTSOURCE
×1
Power Supply 9V/2A - UTSOURCE
×1
Breadboard Power Supply - UTSOURCE
×1
Rotary 10kR Potentiometer - UTSOURCE
×1
Arduino UNO - UTSOURCE
×1
16x2 LCD Display - UTSOURCE
×1

Software apps and online services

Arduino IDE
Arduino IDE
Arduino Web Editor
Arduino Web Editor

Story

Read more

Schematics

Electronic Schematic

Code

Code for mini-datalogger - Part 1

C/C++
#include <LiquidCrystal.h> //Inclusão da biblioteca de LCD
#include <EEPROM.h> //Declaracao da biblioteca EEPROM

LiquidCrystal lcd(2,3,4,5,6,7); //LiqyuidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7)

#define pinoBotaoGrava 8 //Botao para salvar os dados conectado no pino digital 10
#define pinoBotaoMostra 9//Botao para apresentar os dados salvos na memoria EEPROM
#define MemCont 100 //Posicao da memoria utilizada para armazenar o valor da ultima posicao gravada

bool estadoMostra = 0, estadoGrava = 0; //Variavel que armazenara o estado do botao para sabermos quando o botao foi solto/pressionado
bool botaoGrava = 0; //Variavel que armazenara o estado do botao para gravar na memoria
bool botaoMostraValor = 0; //Variavel que armazenara o estado do botao para mostrar os valores da memoria
//bool controle = 0; //Variavel de controle utilizada para 

byte cont = 0;//Variável utilizada para contar a quantidade de valores gravados

signed int referencia = 0;

void setup() 
{

    for(byte pinos = 2; pinos < 8; pinos++)//Configuracao dos pinos do LCD como saida
    {
      pinMode(pinos, OUTPUT);  
    }
    pinMode(pinoBotaoGrava, INPUT); //Configuracao do pino de gravacao como entrada 
    pinMode(pinoBotaoMostra, INPUT); //Configuracao do pino para mostrar os valores
    pinMode(A0, INPUT); //Configuracao do pino analogico como entrada
    lcd.begin(16,2);            //Inicializa o display de LCD 16 x 2
    cont = EEPROM.read(MemCont);//Resgata o valor anterior armazenado na posicao MemCont(100)
    lcd.clear();//Limpa a tela do LCD
    
}

void loop() 
{
    
    unsigned int valor = analogRead(A0); //Leitura da entrada analógica
    byte mapa = map(valor, 0, 1023, 0, 255); //Mapeia os valores de 0 a 1023 dentro da escala de 0 a 255
    
    if(mapa >=  referencia + 5 || mapa <= referencia - 5)
    {
          lcd.setCursor(1,0);
          lcd.print("Valor Digital:");
          lcd.setCursor(0,1);
          lcd.setCursor(0,1);
          lcd.print("                ");
          lcd.setCursor(6,1);
          lcd.print(mapa);
          referencia = mapa;
    }

    
    botaoGrava = digitalRead(pinoBotaoGrava);
    botaoMostraValor = digitalRead(pinoBotaoMostra);

    //Condicoes referentes ao botao para mostrar os dados
    if(botaoMostraValor == 0 && estadoMostra == 1)
    {  
        estadoMostra = 0;  //Variavel de controle para permitir entrar na condicao de botao mostra pressionado      
    }

    if(botaoMostraValor == 1 && estadoMostra == 0)
    {
        estadoMostra = 1;

        if(cont == 0)//Se cont for igual a 0, significa que a memoria esta sem dados armazenados
        {
            lcd.clear(); 
            lcd.setCursor(2,0);
            lcd.print("Sem Dados na");
            lcd.setCursor(4,1);
            lcd.print("Memoria");
            delay(1000);
            lcd.clear();  

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
        }

        if(cont > 0)
        {
            lcd.clear(); //Limpa a tela do LCD
            for(byte pos = 0; pos < cont; pos++)//Percorre as posicoes de memoria e apresenta ao usuario
            {
              lcd.setCursor(4,0);
              lcd.print("Posicao:");
              lcd.setCursor(12,0);
              lcd.print(pos+1);
              lcd.setCursor(0,1);
              lcd.print("                ");
              lcd.setCursor(6,1);
              lcd.print(EEPROM.read(pos)); //Le o valor da posicao pos da memoria e mostra na tela do LCD
              delay(2500);//Aguarda tempo de 2,5 segundos, para o usuario visualizar
            }  

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
        }
    }

    //Condicoes referentes ao botao de gravacao de dados 
    if(botaoGrava == 0 && estadoGrava == 1)
    {  
        estadoGrava = 0; //Variavel de controle para permitir entrar na condicao de botao grava pressionado      
        
    }

    if(botaoGrava == 1 && estadoGrava == 0)
    {  

          estadoGrava = 1; 
          
          if(cont > 9)//Se cont for maior que 9, significa que a memoria esta cheia
          {
            
            cont = 10;
            //Imprimir mensagem no LCD  
            lcd.clear(); 
            lcd.setCursor(1,0);
            lcd.print("Memoria Cheia");
            delay(1000);
            lcd.clear();

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
            
          }
          
          if(cont < 10)
          {
            
            EEPROM.write(cont, mapa);
            lcd.clear();
            lcd.setCursor(1,0);
            lcd.print("Valor Gravado");
            lcd.setCursor(3,1);
            lcd.print("Posicao");
            lcd.setCursor(12,1);
            lcd.print(cont+1);
            cont++;
            EEPROM.write(MemCont, cont);
            delay(1000);
            lcd.clear();

            //Imprime a mensagem Valor Digital: com o valor digital lido
            lcd.setCursor(1,0);
            lcd.print("Valor Digital:");
            lcd.setCursor(0,1);
            lcd.print("                ");
            lcd.setCursor(6,1);
            lcd.print(mapa);
            
          }          
          
    }

}

Credits

Silícios Lab

Silícios Lab

72 projects • 173 followers
Hello, I love program microcontrollers and works with electronic projects.
PCBWay

PCBWay

90 projects • 146 followers
We are a PCB and assembly manufacturer, As low as $5/10pcs and 24 hours delivery time. We are committed to helping creators build project.

Comments